From 70a871a296c5de26622554318c1e8006fa1d6eb0 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Wed, 7 Oct 2026 12:28:12 -0700 Subject: [PATCH 01/39] feat(menubar): add a routes window to change a route's algorithm and models Signed-off-by: Elyas Mehtabuddin --- Cargo.lock | 19 + crates/switchyard-menubar/Cargo.toml | 6 +- crates/switchyard-menubar/README.md | 254 ++- crates/switchyard-menubar/src/app.rs | 11 +- crates/switchyard-menubar/src/icon.rs | 24 +- crates/switchyard-menubar/src/main.rs | 32 +- crates/switchyard-menubar/src/models.rs | 922 +++++++++ crates/switchyard-menubar/src/picker.rs | 1755 +++++++++++++++++ crates/switchyard-menubar/src/pricing.rs | 22 + crates/switchyard-menubar/src/server.rs | 429 ++++ .../switchyard-menubar/src/server_config.rs | 1705 ++++++++++++++++ crates/switchyard-menubar/src/sidebar.rs | 331 ++++ crates/switchyard-menubar/src/summary.rs | 92 +- crates/switchyard-menubar/src/tray.rs | 243 ++- scripts/macos/uninstall.sh | 3 +- 15 files changed, 5743 insertions(+), 105 deletions(-) create mode 100644 crates/switchyard-menubar/src/models.rs create mode 100644 crates/switchyard-menubar/src/picker.rs create mode 100644 crates/switchyard-menubar/src/server.rs create mode 100644 crates/switchyard-menubar/src/server_config.rs create mode 100644 crates/switchyard-menubar/src/sidebar.rs diff --git a/Cargo.lock b/Cargo.lock index de2768bb84..c41149c891 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3249,10 +3249,13 @@ dependencies = [ "objc2", "objc2-app-kit", "objc2-foundation", + "security-framework", "serde", "serde_json", + "switchyard-runner", "tempfile", "toml 0.9.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", "tray-icon", ] @@ -3744,6 +3747,19 @@ dependencies = [ "winnow 0.5.40", ] +[[package]] +name = "toml_edit" +version = "0.25.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + [[package]] name = "toml_parser" version = "1.1.2+spec-1.1.0" @@ -4373,6 +4389,9 @@ name = "winnow" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] [[package]] name = "wiremock" diff --git a/crates/switchyard-menubar/Cargo.toml b/crates/switchyard-menubar/Cargo.toml index d12551f0d7..e4ede3faa9 100644 --- a/crates/switchyard-menubar/Cargo.toml +++ b/crates/switchyard-menubar/Cargo.toml @@ -17,13 +17,17 @@ publish = false chrono = { version = "0.4", default-features = false, features = ["std", "clock"] } serde.workspace = true serde_json.workspace = true +tempfile = "3" toml = "0.9" +toml_edit = "0.25" [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6" objc2-app-kit = "0.3" objc2-foundation = "0.3" +security-framework = "3" tray-icon = "0.25" [dev-dependencies] -tempfile = "3" +# The tests check each edited config with the server's own config parser. +switchyard-runner.workspace = true diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index 9095aad959..f0b5027115 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -2,12 +2,16 @@ A macOS menu bar companion for a Switchyard server running in the background. -The server does the routing. This process only reads what the server already -wrote, so quitting it never affects traffic. +The server does the routing. This process reads what the server wrote and +edits the server config only when you ask it to, so quitting it never affects +traffic. Click the glyph to see whether the server is answering, today's and this week's requests and tokens, estimated savings, and which models served the -week. It can also restart the server and open either config file. +week. The glyph turns faint when the server does not answer. The menu can also +restart the server, open either config file, and open the routes window, where +you change a route's algorithm and models. When a menu item fails, a dialog +shows the error. ## Install @@ -33,6 +37,8 @@ exist, so edits survive a reinstall. Logs are in `~/.switchyard/logs/`. ```toml server_url = "http://127.0.0.1:4123" routing_log = "~/.switchyard/routing.jsonl" +config_file = "~/.switchyard/composite.toml" +launchd_label = "com.nvidia.switchyard.server" baseline_model = "gpt-5.6-sol" refresh_seconds = 30 @@ -42,6 +48,228 @@ cached_input_per_mtok = 0.125 output_per_mtok = 10.0 ``` +The app checks this file when the menu refreshes and after each menu click. A +changed file takes effect without a restart. When `config_file` changes while +the routes window is open and no Apply is running, the window loads the new +file and drops changes that you have not applied. + +## Edit a route's algorithm and models + +Click the glyph, then **Edit routes…**. The window reads the server config +named by `config_file`. + +1. Pick a route in the list at the left. The routes that choose between models + come first, and the routes that send every request to one model come + after them. A dot after a route's name means that you changed the route + and have not applied the change. +2. Pick an algorithm. The window names each one in plain words, such as + "Judge plus stage router", and shows its `type` in parentheses. Under the + name, it says what the algorithm does. Each role has its own line of text + that says what the role does. For example, `composite` needs a judge, a + capable model, and an efficient model. +3. For each role, pick an endpoint, which is an LLM client from the config, + then a model. The endpoint box shows the client's name and the request + format it speaks. Hover over it to see its URL and whose key it uses. The + model box lists the models from the endpoint's `GET /models` URL. Type to + search the list, or type a model ID that is not listed. +4. Click **Apply**, or press Return. Click **Revert** to drop your changes to + the open route. Escape or Cmd-W closes the window. + +The window keeps what you picked on a route while you look at other routes. +Apply writes only the open route. If you close the window and open it again, +it drops changes that you did not apply, unless an Apply is still running. +Choosing **Edit routes…** while the window is open brings it to the front and +keeps your changes. + +When a route has more roles than the screen can show, such as a `random` +route with many models, the roles scroll, and the buttons stay on the screen. + +### Endpoints without a model list + +The ChatGPT Codex endpoint, `chatgpt.com`, has no model list that an API key +can read, and the app never holds your ChatGPT login. So the window does not +ask for a key for it. The model box for that endpoint lists the models that +your config already names on it, together with the models in Codex's own +saved list, `$CODEX_HOME/models_cache.json` or else +`~/.codex/models_cache.json`. The menu bar app reads `CODEX_HOME` from its +own LaunchAgent environment, not from your shell. While the model box is +empty or holds a listed ID, the note under it says where the list comes from +and how old Codex's list is. You can type any other model ID. + +### Blocks that another tool writes + +Some tools write part of the server config between marker lines that look like +`# >>> name >>>` and `# <<< name <<<`. A route inside such a block shows a +warning, because that tool overwrites changes made here the next time it +runs. New targets go after the last target outside every block, so the next +rewrite of a block cannot delete them. When every target is inside a block, a +new target goes before the first table of the file. When a route outside a +block ends up using a target inside one, the result says so. + +### Apply + +Apply checks the new config with +`switchyard-server --config --dry-run`, using the `switchyard-server` +installed next to the menu bar app. If the check fails, the window shows the +server's error and the file does not change. If it passes, the app saves the +file, keeps the old one as `.switchyard-backup.`, and +restarts the server with `launchctl kickstart -k gui//`. +A second backup in the same second gets `-2` added to its name, so a backup +never replaces another one. If another program changes the file while Apply +checks it and writes the backup, Apply saves nothing, removes that backup, and +asks you to click Apply again. If `config_file` is a symlink, the app writes +the file that the link points to, puts the backup next to that file, and +leaves the link in place. + +While Apply runs, **Quit** shows a message and does not quit. Quitting between +the save and the restart could leave a saved config that the server has not +loaded. + +The result area lists what happened, most important first: the saved file +and its backup, the restart and whether the server answers `/health` within +10 seconds, notes about the change, and how many routes passed the check. If +the server does not answer, the result says how to put the backup back. + +When the change sends each caller's own login (`forward_auth = true`) to a +different host than before, the result says so. A caller that has no login for +the new host gets HTTP 401. For example, the Codex app's ChatGPT login does not +work on a gateway such as `gateway.example.com`. + +The app changes as little of the file as it can: + +- Comments, formatting, and every table the change does not touch stay as + they were. +- A role keeps its target when that target already names the chosen model. +- If another target names that model on that client, the route uses it when + the route would get the same `system_prompt`, `reasoning_effort`, + `extra_body`, and `omit_body_fields` from it. The route also uses it when + `reasoning_effort`, `extra_body`, or `omit_body_fields` differ, because the + server rejects two targets that name one model on one client with + different values for those. When the role then shares the target with + another route, the result says so. +- Otherwise the app changes the route's own target in place, so settings such + as `extra_body` and `omit_body_fields` stay. +- The app copies a target instead of changing it when another route uses it, + or when an earlier role in the same Apply already took it. For example, if + you move the efficient model up to Capable and pick a new efficient model, + Capable takes the old efficient target, and Efficient gets a copy of that + target with the new model. +- A changed or copied target also keeps its model-specific settings. For + example, a target with `omit_body_fields = ["reasoning_effort"]` keeps that + setting when it switches from a Claude model to a GPT model. `--dry-run` + does not catch a setting that the new model rejects. So when a target moves + to another model family, such as from `gpt-…` to `claude-…`, or to a client + with another `format`, the result lists the `omit_body_fields`, + `reasoning_effort`, and `extra_body` that the target kept, or says that it + has none. The app does not change them; edit the file if the new model + needs other values. +- Switching algorithms keeps the route's `id`, `context_window`, + `tool_calling`, `reasoning`, and `vision`, and keeps `subagents` when the new + algorithm accepts it (`passthrough`, `stage_router`, and `composite`). It + removes the old type's other settings and writes the settings the new type + requires with the values from the routing docs, such as + `confidence_threshold = 0.5`. The result lists the settings it removed, and + the backup still has them. Edit the file to tune them. +- Targets that no route uses any more stay in the file. + +The window cannot show the settings of a custom-mode `llm_classifier` route +or of a route whose `type` is not in the Algorithm list. Applying to such a +route replaces its settings with the algorithm and models you pick. + +The check runs with the menu bar app's environment, not your shell's. If a +client reads its key from `api_key_env`, the menu bar app's LaunchAgent needs +that variable too. Otherwise the check fails and the app saves nothing. The +window says so under each role that uses such a client, and again in the +result when the check fails. To add the variable, put it under +`EnvironmentVariables` in +`~/Library/LaunchAgents/com.nvidia.switchyard.menubar.plist`, then load the +agent again: + +```sh +launchctl bootout gui/$UID/com.nvidia.switchyard.menubar +launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.nvidia.switchyard.menubar.plist +``` + +That puts the key in the plist file as plain text, and `make install-macos` +writes the plist again without it. A client with `forward_auth = true` needs +no key in the config, because the server sends each caller's own key. + +Apply does not add prices, because the app has no price source besides +`menubar.toml`. If a chosen model has no price there, the result names the +model. Savings stay hidden until you add the price to `menubar.toml`. + +### Model lists + +The app saves every model list it fetches in `model-lists.json`, in the same +directory as the settings file it was started with. With the default settings +file, that is `~/.switchyard/model-lists.json`. The file holds the model IDs +and the time each list was fetched, keyed by the list's URL. It never holds a +key. + +When a role needs a list, the window uses the list it already has, or else +the one in `model-lists.json`. Only when neither exists does the app send one +`GET /models` request. After a list is in `model-lists.json`, the app does not +fetch it again on its own, even after a restart. If a fetch fails and the +window has no list to show, the app tries again the next time you open the +window. Clients whose models share a URL share one list and one request. + +If the app cannot write `model-lists.json`, the window still uses the fetched +list and shows "Could not save the list" with the error. Because the list is +not in the file, the app fetches it again after a restart. + +Click **Refresh models** to fetch every list that the window's roles use, +even a cached one. The app sends one request per URL, and fetches the URLs at +the same time, so a slow URL does not hold back the others. Each role's note +changes as its list arrives, and the result area then shows each list's +model count or error. If a fetch fails, the window keeps the list it has and +shows the error under it. + +When a role's model box is empty or holds a listed model ID, the note under +it shows the list's model count, its host, and its age, such as "249 models on +gateway.example.com, fetched 6 days ago. Type to search." While you +type, the note says how many models match, such as "2 of 10 models match." +When nothing matches, it says "No listed model matches. Apply uses the ID as +typed." + +For an `anthropic_messages` client, the request adds `limit=1000`, the most +that Anthropic returns in one page. Without `limit`, Anthropic returns 20 +models. + +### Keys for model lists + +The app never writes a key to a file. To list a client's models, it uses the +first key it finds: the key you just typed, then the variable named by the +client's `api_key_env` in the menu bar app's own environment, then the login +Keychain item for the client's `base_url`. A LaunchAgent does not load your +shell profile, so a key you export in `~/.zshrc` is not in the app's +environment. A `forward_auth` client has no key in the config, because the +server sends each caller's own key upstream. + +When the app finds no key, the role's note says so and a key field appears +under the roles. Paste the API key for the `base_url` that the field names, +and click **Save key**, or press Return in the field. The app first lists +the models with the key. If the models endpoint rejects it, the app does not +save it. Otherwise the app saves the key in your login Keychain as +"Switchyard model list", with the client's `base_url` as the account. +Clients with the same `base_url` share the key. The app uses a saved key +only to list models at that `base_url`. It refuses a key with a line break, +because a line break would add a request header. + +If macOS cannot save the key, or cannot read a saved one, the window shows +the Keychain's error. You can always type a model ID that is not listed. + +The app lists models with the system `curl`. It writes the key to curl's +stdin, never to its command line, and runs curl with `-q`, so curl ignores +`~/.curlrc`. Without `-q`, a `verbose` line in that file would print the key +into the error text that the window shows. + +The app uses the Keychain rather than your login shell's environment. +Reading that environment means starting your shell from the app, which runs +your whole shell profile and fails if the profile waits for input. The +Keychain needs no shell, and macOS asks before another app reads the key. +After you reinstall the menu bar app, macOS may ask once whether the new +build may read it. + ## How savings are computed The server writes one JSONL record per call, with the model that answered and @@ -54,13 +282,16 @@ its token counts. without Switchyard they would not happen. Savings are the difference, so routing overhead counts against the figure and -a bad day shows a negative number. Dollar figures stay hidden until every -model seen has a price, so a partial table cannot mislead. +a bad day shows a negative number. Today's dollar figures and this week's +each stay hidden until every model seen in that period, and the baseline +model, has a price, so a partial table cannot mislead. While this week's +figures are hidden, the menu names the models that have no price. Codex's "Approve for me" reviews count too. The server config that the installer writes sends them to `codex-auto-review` on the ChatGPT backend. With a ChatGPT login, Codex sends these reviews to `codex-auto-review` even without -Switchyard, so the installer prices that model at the `baseline_model` rates. +Switchyard, so the installer prices that model at the `baseline_model` rates, +including the cached input rate. Each review then adds the same amount to the actual cost and to the baseline, so reviews do not change the dollar amount saved. They do lower the percentage a little, because the baseline grows. If you change `baseline_model`, update @@ -72,17 +303,8 @@ hides the Saved row for every period that includes a review. The installer does not overwrite an existing `composite.toml` or `menubar.toml`, so an existing install needs the route and the price added by hand. -Codex's "Approve for me" reviews need a price too. Use the reviewer target's -`id`, which is the model ID recorded in the routing log. The default reviewer -route uses `codex-auto-review`. With a ChatGPT login, these reviews also happen -without Switchyard. Add that ID to the price table at the `baseline_model` -rates, including the cached input rate. Each review then adds the same cost to -actual and baseline. Dollars saved stay the same; the percentage drops as the -baseline grows. Update this price when you change `baseline_model`. - If a reviewer uses another model ID, add a price for that ID. Any period with -an unpriced review hides its savings and shows the missing-price hint. Existing -`menubar.toml` files need these prices added by hand. +an unpriced review hides its savings and shows the missing-price hint. These are list-price estimates. On a ChatGPT login there is no per-token bill, so read them as "what this traffic would have cost at API rates". diff --git a/crates/switchyard-menubar/src/app.rs b/crates/switchyard-menubar/src/app.rs index 158411f40d..994f10370a 100644 --- a/crates/switchyard-menubar/src/app.rs +++ b/crates/switchyard-menubar/src/app.rs @@ -6,12 +6,12 @@ use chrono::Local; use crate::config::Config; -use crate::health::probe; +use crate::health::{ServerStatus, probe}; use crate::rollup; use crate::summary::{Row, build}; -/// Reads new log entries, probes the server, and builds the menu body. -pub fn refresh(config: &Config, log: &mut rollup::Reader) -> Vec { +/// Reads new log entries and returns the server status and menu rows. +pub fn refresh(config: &Config, log: &mut rollup::Reader) -> (ServerStatus, Vec) { let usage = log .read(&config.routing_log, Local::now().date_naive()) .unwrap_or_else(|error| { @@ -21,7 +21,8 @@ pub fn refresh(config: &Config, log: &mut rollup::Reader) -> Vec { ); rollup::Usage::default() }); - build(probe(&config.server_url), &usage, config) + let status = probe(&config.server_url); + (status, build(status, &usage, config)) } #[cfg(test)] @@ -41,7 +42,7 @@ mod tests { ) .expect("write log"); - let rows = refresh( + let (_, rows) = refresh( &Config { routing_log: path, ..Config::default() diff --git a/crates/switchyard-menubar/src/icon.rs b/crates/switchyard-menubar/src/icon.rs index 5139e4ad01..fceb74bbf2 100644 --- a/crates/switchyard-menubar/src/icon.rs +++ b/crates/switchyard-menubar/src/icon.rs @@ -19,8 +19,14 @@ const SEGMENTS: [((f64, f64), (f64, f64)); 3] = [ ((17.0, 18.0), (30.0, 29.0)), ]; -/// Renders the glyph as RGBA pixels, row-major from the top left. -pub fn glyph() -> Vec { +/// How much of its opacity the glyph keeps while the server does not answer. +/// The fainter glyph shows at a glance that the server is down. +const STOPPED_OPACITY: f64 = 0.35; + +/// Renders the glyph as RGBA pixels, row-major from the top left. It is faint +/// when `running` is false. +pub fn glyph(running: bool) -> Vec { + let opacity = if running { 1.0 } else { STOPPED_OPACITY }; let mut pixels = Vec::with_capacity((SIZE * SIZE * 4) as usize); for y in 0..SIZE { for x in 0..SIZE { @@ -31,7 +37,7 @@ pub fn glyph() -> Vec { .fold(f64::INFINITY, f64::min); // One pixel of falloff past the stroke edge softens the diagonals. let coverage = (HALF_STROKE + 0.5 - distance).clamp(0.0, 1.0); - pixels.extend_from_slice(&[0, 0, 0, (coverage * 255.0).round() as u8]); + pixels.extend_from_slice(&[0, 0, 0, (coverage * opacity * 255.0).round() as u8]); } } pixels @@ -56,7 +62,7 @@ mod tests { #[test] fn draws_a_trunk_that_splits_in_two() { - let pixels = glyph(); + let pixels = glyph(true); assert_eq!(pixels.len(), (SIZE * SIZE * 4) as usize); assert_eq!(alpha(&pixels, 10, 18), 255, "the trunk is solid"); @@ -65,4 +71,14 @@ mod tests { assert_eq!(alpha(&pixels, 29, 18), 0, "nothing runs straight through"); assert_eq!(alpha(&pixels, 0, 0), 0, "corners stay transparent"); } + + #[test] + fn a_server_that_does_not_answer_gets_a_fainter_glyph() { + let (running, stopped) = (glyph(true), glyph(false)); + + assert_eq!(running.len(), stopped.len()); + assert!(alpha(&stopped, 10, 18) > 0, "the shape stays"); + assert!(alpha(&stopped, 10, 18) < alpha(&running, 10, 18) / 2); + assert_eq!(alpha(&stopped, 0, 0), 0, "corners stay transparent"); + } } diff --git a/crates/switchyard-menubar/src/main.rs b/crates/switchyard-menubar/src/main.rs index fd42bc6160..732c6d02ce 100644 --- a/crates/switchyard-menubar/src/main.rs +++ b/crates/switchyard-menubar/src/main.rs @@ -3,9 +3,11 @@ //! Menu bar companion for a locally running Switchyard server. //! -//! The server owns routing; this process only reads what the server already -//! wrote. It shows today's and this week's traffic, and what that traffic -//! would have cost had every call gone to the capable model instead. +//! The server owns routing; this process reads what the server wrote. It +//! shows today's and this week's traffic, and what that traffic would have +//! cost had every call gone to the capable model instead. Its "Edit +//! routes…" window edits a route in the server config and restarts the +//! server. mod app; mod config; @@ -13,10 +15,23 @@ mod health; mod pricing; mod rollup; mod summary; -// The status item and the glyph it draws are the only platform-specific code. +// Only the macOS picker window calls these. They build on every target so +// that their tests also run in CI, which does not run on macOS. +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod models; +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod server; +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod server_config; +// The status item, the glyph it draws, and the routes window with its sidebar +// are the only platform-specific code. #[cfg(target_os = "macos")] mod icon; #[cfg(target_os = "macos")] +mod picker; +#[cfg(target_os = "macos")] +mod sidebar; +#[cfg(target_os = "macos")] mod tray; use std::path::PathBuf; @@ -65,8 +80,8 @@ fn main() -> ExitCode { return ExitCode::SUCCESS; } - let settings_path = settings.unwrap_or_else(Config::default_path); - let config = match Config::load(&settings_path) { + let settings = settings.unwrap_or_else(Config::default_path); + let config = match Config::load(&settings) { Ok(config) => config, Err(error) => { eprintln!("switchyard-menubar: {error}"); @@ -76,7 +91,8 @@ fn main() -> ExitCode { // Off macOS there is no menu bar to attach to, so printing is the whole // program. That keeps the rollup and pricing logic buildable everywhere. if print_only || !cfg!(target_os = "macos") { - for row in app::refresh(&config, &mut rollup::Reader::default()) { + let (_, rows) = app::refresh(&config, &mut rollup::Reader::default()); + for row in rows { match row { summary::Row::Separator => println!(), summary::Row::Label(text) => println!("{text}"), @@ -86,7 +102,7 @@ fn main() -> ExitCode { } #[cfg(target_os = "macos")] - if let Err(error) = tray::run(config, settings_path) { + if let Err(error) = tray::run(config, &settings) { eprintln!("switchyard-menubar: {error}"); return ExitCode::FAILURE; } diff --git a/crates/switchyard-menubar/src/models.rs b/crates/switchyard-menubar/src/models.rs new file mode 100644 index 0000000000..874affe289 --- /dev/null +++ b/crates/switchyard-menubar/src/models.rs @@ -0,0 +1,922 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Lists the models an LLM client offers, from its `GET /models` endpoint, +//! and keeps each fetched list in a cache file. +//! +//! The request goes through the system `curl`, the same way the menu runs +//! `launchctl`, so the app needs no HTTP or TLS stack of its own. The key is +//! written to curl's stdin, never to its command line, where other processes +//! could read it. +//! +//! The cache file holds model IDs and fetch times, never a key. The app uses +//! a list from the cache file until the user refreshes it, so it fetches a +//! list on its own only when the file does not have it. + +use std::collections::{BTreeMap, HashMap}; +use std::io::Write; +use std::path::{Path, PathBuf}; +use std::process::{Command, Stdio}; +use std::sync::{Mutex, PoisonError}; +use std::time::{SystemTime, UNIX_EPOCH}; + +use serde::{Deserialize, Serialize}; + +use crate::config::expand_home; +use crate::server_config::Client; + +/// The name of the cache file. It sits next to the settings file that the +/// app was started with. +pub const CACHE_FILE: &str = "model-lists.json"; + +/// The Keychain service that holds keys saved from the route picker. Each +/// item's account is the client's `base_url`, so clients that share a +/// gateway share its key. +#[cfg(target_os = "macos")] +const KEYCHAIN_SERVICE: &str = "Switchyard model list"; + +/// How long one listing may take before curl gives up. +const TIMEOUT_SECONDS: &str = "20"; + +/// Held while a thread rewrites the cache file, so that two threads that +/// finish at the same time do not drop each other's lists. +static CACHE_WRITE: Mutex<()> = Mutex::new(()); + +/// One fetched model list, as the cache file stores it. +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct ModelList { + /// The model IDs, sorted. + pub models: Vec, + /// When the list was fetched, in seconds since 1970-01-01 UTC. + pub fetched_at: u64, +} + +/// The model list at one URL, as [`load`] found it. +#[derive(Clone, Debug, PartialEq)] +pub struct Loaded { + /// The URL that serves the list. + pub url: String, + /// The newest list: fetched just now, or read from the cache file. + pub list: Option, + /// Why the list could not be fetched or saved in the cache file, when + /// that happened. + pub error: Option, +} + +/// Why a client's models could not be listed. +#[derive(Clone, Debug, PartialEq)] +pub enum ListError { + /// The client needs a key, and none is set or saved. + NoKey, + /// The client reads its key from this `api_key_env` variable, which this + /// process does not have, and no key is saved. + NoEnv(String), + /// The Keychain did not return the saved key. + Keychain(String), + /// The models endpoint answered 401 or 403. + Rejected(u16), + /// The request failed, or the answer was not a model list. + Failed(String), + /// The list was fetched, but the cache file could not be written. + NotCached(String), +} + +impl ListError { + /// Says what went wrong, in one sentence. + pub fn reason(&self) -> String { + match self { + Self::NoKey => { + "This endpoint needs an API key to list models, and the app does not have one." + .to_string() + } + Self::NoEnv(variable) => missing_env_note(variable), + Self::Keychain(error) => { + format!("Could not read the saved key from your login Keychain: {error}.") + } + Self::Rejected(status) => { + format!("The models endpoint rejected the key (HTTP {status}).") + } + Self::Failed(error) => format!("Could not list models: {error}."), + Self::NotCached(error) => format!("Could not save the list: {error}."), + } + } + + /// Says what the user can do while the window has no list to show. The + /// window accepts a typed model ID, so most answers offer that. A missing + /// variable also stops Apply, so that answer offers only the key field. + pub fn advice(&self) -> &'static str { + match self { + Self::NoEnv(_) => "Or paste the key below to list models.", + _ if self.needs_key() => { + "Paste a valid API key below and click Save key, or type a model ID." + } + _ => "Click Refresh models to try again, or type a model ID.", + } + } + + /// Returns whether saving a key could fix this error. + pub fn needs_key(&self) -> bool { + matches!( + self, + Self::NoKey | Self::NoEnv(_) | Self::Keychain(_) | Self::Rejected(_) + ) + } +} + +/// Says that this process lacks a client's `api_key_env` variable. Apply's +/// `--dry-run` check runs in this process's environment, so the check cannot +/// read the key either. +pub fn missing_env_note(variable: &str) -> String { + format!( + "The app's environment has no {variable}, which Apply needs: add it to the menu bar \ + app's LaunchAgent." + ) +} + +/// Returns the client's `api_key_env` variable when this process does not +/// have it set. +pub fn missing_env(client: &Client) -> Option<&str> { + client + .api_key_env + .as_deref() + .filter(|_| env_key(client).is_none()) +} + +/// The Keychain's answer for each `base_url`. The threads of one [`load`] +/// share it. +type SavedKeys = Mutex, String>>>; + +/// Returns the model list at each URL that `clients` use, in the order the +/// URLs first appear. Clients whose models share a URL share one list and +/// one request. +/// +/// Each URL loads on its own thread, so a slow URL does not hold back the +/// others. `loaded` gets each URL's result as soon as it is ready. +/// +/// Without `refresh`, a list in the cache file comes back without a +/// request, and only a URL with no cached list is fetched. With `refresh`, +/// every URL is fetched. A fetched list replaces the one in the cache file +/// unless the file holds a newer list for that URL. When the file cannot be +/// written, the fetched list still comes back, with +/// [`ListError::NotCached`], and the file keeps its old list. When a fetch +/// fails, the cached list comes back with the error. +/// +/// `typed_key` is a key the user just entered. When it is set, clients that +/// send a key use it instead of their environment variable or the Keychain. +pub fn load( + cache: &Path, + clients: &[Client], + refresh: bool, + typed_key: Option<&str>, + loaded: &(dyn Fn(&Loaded) + Sync), +) -> Vec { + let cached = read_cache(cache); + let saved_keys = SavedKeys::default(); + std::thread::scope(|scope| { + let workers: Vec<_> = by_url(clients) + .into_iter() + .map(|(url, client)| { + let old = cached.get(&url).cloned(); + let saved_keys = &saved_keys; + scope.spawn(move || { + let entry = load_url(cache, url, client, old, refresh, typed_key, saved_keys); + loaded(&entry); + entry + }) + }) + .collect(); + workers + .into_iter() + .map(|worker| { + worker + .join() + .unwrap_or_else(|panic| std::panic::resume_unwind(panic)) + }) + .collect() + }) +} + +/// Loads the list at one URL: from the cache file, or fetched with the +/// client's key and then added to the cache file. +fn load_url( + cache: &Path, + url: String, + client: &Client, + old: Option, + refresh: bool, + typed_key: Option<&str>, + saved_keys: &SavedKeys, +) -> Loaded { + if unlisted(client) { + // ChatGPT has no list to fetch, so nothing goes in the cache file. + return Loaded { + url, + list: codex_models(), + error: None, + }; + } + if old.is_some() && !refresh { + return Loaded { + url, + list: old, + error: None, + }; + } + match key(client, typed_key, saved_keys).and_then(|key| list(client, key.as_deref())) { + Ok(models) => { + let new = ModelList { + models, + fetched_at: now(), + }; + let error = write_cache(cache, &url, &new) + .err() + .map(ListError::NotCached); + Loaded { + url, + list: Some(new), + error, + } + } + Err(error) => Loaded { + url, + list: old, + error: Some(error), + }, + } +} + +/// Returns the URL that serves the client's model list. It is also the +/// list's key in the cache file and in [`Loaded::url`]. +pub fn list_url(client: &Client) -> String { + models_url(&client.format, &client.base_url) +} + +/// Returns whether the client's endpoint has no model list that this app can +/// ask for. The ChatGPT Codex endpoint answers only a ChatGPT login, never an +/// API key, and the app does not hold the login. +pub fn unlisted(client: &Client) -> bool { + client.host() == "chatgpt.com" +} + +/// Reads the model list that Codex saved in `$CODEX_HOME/models_cache.json`, +/// or in `~/.codex/models_cache.json` when `CODEX_HOME` is unset. Codex +/// fetched that list with the user's ChatGPT login. For a ChatGPT client this +/// file is the only list of its models that the app can read. +fn codex_models() -> Option { + let home = std::env::var_os("CODEX_HOME") + .map(PathBuf::from) + .unwrap_or_else(|| expand_home(Path::new("~/.codex"))); + read_codex_models(&home.join("models_cache.json")) +} + +/// Parses a Codex model list file. Returns every model's `slug`, sorted and +/// without duplicates, and the time Codex fetched the file. +fn read_codex_models(path: &Path) -> Option { + #[derive(Deserialize)] + struct Saved { + fetched_at: String, + models: Vec, + } + #[derive(Deserialize)] + struct Entry { + slug: String, + } + + let saved: Saved = serde_json::from_str(&std::fs::read_to_string(path).ok()?).ok()?; + let fetched_at = chrono::DateTime::parse_from_rfc3339(&saved.fetched_at).ok()?; + let mut models: Vec = saved.models.into_iter().map(|entry| entry.slug).collect(); + models.sort(); + models.dedup(); + Some(ModelList { + models, + fetched_at: u64::try_from(fetched_at.timestamp()).ok()?, + }) +} + +/// Lists the client's model IDs, sorted. When the client needs a key and +/// `key` is `None`, returns [`ListError::NoEnv`] or [`ListError::NoKey`] +/// without sending a request. +fn list(client: &Client, key: Option<&str>) -> Result, ListError> { + match (key, &client.api_key_env) { + (None, Some(variable)) => Err(ListError::NoEnv(variable.clone())), + (None, None) if client.forward_auth => Err(ListError::NoKey), + _ => fetch(&list_url(client), &client.format, key), + } +} + +/// Returns the models that contain every word of `query`, ignoring case. +pub fn matching<'a>(models: &'a [String], query: &str) -> Vec<&'a str> { + let query = query.to_lowercase(); + let words: Vec<&str> = query.split_whitespace().collect(); + models + .iter() + .map(String::as_str) + .filter(|model| { + let model = model.to_lowercase(); + words.iter().all(|word| model.contains(word)) + }) + .collect() +} + +/// Returns the models endpoint for a client. It builds the URL the way the +/// server builds its request URLs. OpenAI clients drop a trailing +/// `/chat/completions` or `/responses`. Anthropic clients drop a trailing +/// `/v1/messages` to `/v1`, and add `/v1` to any other path. +/// Anthropic returns 20 models unless the URL sets `limit`, so the URL adds +/// `limit=1000`, the most that Anthropic allows. +fn models_url(format: &str, base_url: &str) -> String { + let (base, query) = match base_url.split_once('?') { + Some((base, query)) => (base, format!("?{query}")), + None => (base_url, String::new()), + }; + let base = base.trim_end_matches('/'); + let path = if format == "anthropic_messages" { + let root = base + .strip_suffix("/messages") + .filter(|root| root.ends_with("/v1")) + .unwrap_or(base); + if root.ends_with("/v1") { + format!("{root}/models") + } else { + format!("{root}/v1/models") + } + } else { + let root = base + .strip_suffix("/chat/completions") + .or_else(|| base.strip_suffix("/responses")) + .unwrap_or(base); + format!("{root}/models") + }; + let query = if format == "anthropic_messages" && query.is_empty() { + "?limit=1000".to_string() + } else if format == "anthropic_messages" { + format!("{query}&limit=1000") + } else { + query + }; + format!("{path}{query}") +} + +/// Pairs each models URL with the client whose settings fetch it: the first +/// client with that URL that sends a key, or else the first client with it. +fn by_url(clients: &[Client]) -> Vec<(String, &Client)> { + let mut urls: Vec<(String, &Client)> = Vec::new(); + for client in clients { + let url = list_url(client); + match urls.iter_mut().find(|(seen, _)| *seen == url) { + Some(entry) if !sends_key(entry.1) && sends_key(client) => entry.1 = client, + Some(_) => {} + None => urls.push((url, client)), + } + } + urls +} + +/// Returns whether the server sends this client a key. If it does, listing +/// the client's models needs a key too. +fn sends_key(client: &Client) -> bool { + client.forward_auth || client.api_key_env.is_some() +} + +/// Returns the key to list the client's models with, or `None` when the +/// client needs no key or none is available. +/// +/// The typed key comes first, then the client's `api_key_env` variable when +/// this process has it, then the Keychain item for the client's `base_url`. +/// `saved` stores each Keychain answer, and a thread holds its lock while +/// it reads the Keychain. So macOS asks at most once per `base_url` when it +/// needs the user's permission to hand over a key. +fn key( + client: &Client, + typed_key: Option<&str>, + saved: &SavedKeys, +) -> Result, ListError> { + if !sends_key(client) { + return Ok(None); + } + if let Some(key) = typed_key.map(str::to_string).or_else(|| env_key(client)) { + return Ok(Some(key)); + } + saved + .lock() + .unwrap_or_else(PoisonError::into_inner) + .entry(client.base_url.clone()) + .or_insert_with(|| saved_key(&client.base_url)) + .clone() + .map_err(ListError::Keychain) +} + +fn env_key(client: &Client) -> Option { + client + .api_key_env + .as_deref() + .and_then(|variable| std::env::var(variable).ok()) + .filter(|key| !key.trim().is_empty()) +} + +/// Returns the key saved in the Keychain for `base_url`, or `None` when no +/// key is saved. +#[cfg(target_os = "macos")] +fn saved_key(base_url: &str) -> Result, String> { + /// The Keychain's `errSecItemNotFound` status. + const NOT_FOUND: i32 = -25300; + match security_framework::passwords::get_generic_password(KEYCHAIN_SERVICE, base_url) { + Ok(bytes) => String::from_utf8(bytes) + .map(|key| Some(key).filter(|key| !key.trim().is_empty())) + .map_err(|_| "the saved key is not text".to_string()), + Err(error) if error.code() == NOT_FOUND => Ok(None), + Err(error) => Err(keychain_error(&error)), + } +} + +#[cfg(not(target_os = "macos"))] +fn saved_key(_base_url: &str) -> Result, String> { + Ok(None) +} + +/// Saves a key in the login Keychain for every client with this `base_url`. +#[cfg(target_os = "macos")] +pub fn save_key(base_url: &str, key: &str) -> Result<(), String> { + security_framework::passwords::set_generic_password( + KEYCHAIN_SERVICE, + base_url, + key.trim().as_bytes(), + ) + .map_err(|error| keychain_error(&error)) +} + +/// Returns the Keychain's message without its final period, so the window +/// can end its own sentence after it. +#[cfg(target_os = "macos")] +fn keychain_error(error: &security_framework::base::Error) -> String { + error.to_string().trim_end_matches('.').to_string() +} + +/// Returns whether a key has a line break, which would end the header that +/// carries the key and start another one. +pub fn has_line_break(key: &str) -> bool { + key.contains(['\r', '\n']) +} + +/// Reads the cache file. A missing or unreadable file reads as empty, so the +/// app fetches its lists again and writes a new file. +fn read_cache(path: &Path) -> BTreeMap { + std::fs::read_to_string(path) + .ok() + .and_then(|text| serde_json::from_str(&text).ok()) + .unwrap_or_default() +} + +/// Adds the list at `url` to the cache file. The list replaces the one at +/// the same URL unless that one is newer: two loads can overlap, and the +/// load that fetched a list first can write it last. The text goes to a +/// temporary file that is renamed over the cache file, so a reader never +/// sees half a file. +fn write_cache(path: &Path, url: &str, list: &ModelList) -> Result<(), String> { + let _writing = CACHE_WRITE.lock().unwrap_or_else(PoisonError::into_inner); + let mut all = read_cache(path); + if all + .get(url) + .is_some_and(|cached| cached.fetched_at > list.fetched_at) + { + return Ok(()); + } + all.insert(url.to_string(), list.clone()); + let text = serde_json::to_string_pretty(&all) + .map_err(|error| format!("write {}: {error}", path.display()))?; + let dir = path + .parent() + .filter(|dir| !dir.as_os_str().is_empty()) + .unwrap_or(Path::new(".")); + let mut file = tempfile::NamedTempFile::new_in(dir) + .map_err(|error| format!("create a file in {}: {error}", dir.display()))?; + file.write_all(text.as_bytes()) + .and_then(|()| file.as_file().sync_all()) + .map_err(|error| format!("write {}: {error}", path.display()))?; + file.persist(path) + .map_err(|error| format!("replace {}: {}", path.display(), error.error))?; + Ok(()) +} + +/// Returns the current time in seconds since 1970-01-01 UTC. +pub fn now() -> u64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map_or(0, |since| since.as_secs()) +} + +fn fetch(url: &str, format: &str, key: Option<&str>) -> Result, ListError> { + let failed = |error: String| ListError::Failed(error); + if key.is_some_and(has_line_break) { + return Err(failed( + "the key has a line break, so the app did not send it".to_string(), + )); + } + let mut child = Command::new("curl") + // curl honors `-q` only as its first argument. `-q` makes curl ignore + // ~/.curlrc, where a `verbose` line would print the key into the + // error text that the window shows. + .args([ + "-q", + "--silent", + "--show-error", + "--max-time", + TIMEOUT_SECONDS, + ]) + // Read request headers from stdin, one per line. + .args(["--header", "@-"]) + // `--url` keeps a URL that starts with `-` from being read as an + // option. + .args(["--write-out", "\n%{http_code}", "--url", url]) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + .map_err(|error| failed(format!("run curl: {error}")))?; + if let Some(mut stdin) = child.stdin.take() { + let headers = match (key, format) { + (Some(key), "anthropic_messages") => { + format!("x-api-key: {key}\nanthropic-version: 2023-06-01\n") + } + (Some(key), _) => format!("Authorization: Bearer {key}\n"), + (None, _) => String::new(), + }; + stdin + .write_all(headers.as_bytes()) + .map_err(|error| failed(format!("send headers to curl: {error}")))?; + } + let output = child + .wait_with_output() + .map_err(|error| failed(format!("run curl: {error}")))?; + if !output.status.success() { + return Err(failed( + String::from_utf8_lossy(&output.stderr).trim().to_string(), + )); + } + + let stdout = String::from_utf8_lossy(&output.stdout); + let (body, status) = stdout.rsplit_once('\n').unwrap_or(("", &stdout)); + match status.trim().parse::() { + Ok(200) => parse_ids(body).map_err(failed), + Ok(status @ (401 | 403)) => Err(ListError::Rejected(status)), + Ok(status) => Err(failed(format!("{url} answered HTTP {status}"))), + Err(_) => Err(failed(format!("{url} sent no HTTP status"))), + } +} + +/// Parses the model IDs. OpenAI and Anthropic both answer with +/// `{"data": [{"id": ...}, ...]}`. +fn parse_ids(body: &str) -> Result, String> { + #[derive(Deserialize)] + struct Listing { + data: Vec, + } + #[derive(Deserialize)] + struct Entry { + id: String, + } + + let listing: Listing = serde_json::from_str(body) + .map_err(|error| format!("the model list is not the expected JSON: {error}"))?; + let mut ids: Vec = listing.data.into_iter().map(|entry| entry.id).collect(); + ids.sort(); + ids.dedup(); + Ok(ids) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::{BufRead, BufReader}; + use std::net::TcpListener; + use std::sync::Arc; + + /// A local HTTP server that answers every request with the current + /// `response` and records the head of each request. Its thread waits in + /// `accept` until the test process exits. + struct Stub { + /// The `base_url` of a client that lists models here. + url: String, + response: Arc>, + requests: Arc>>>, + } + + impl Stub { + fn start(response: String) -> Self { + let listener = TcpListener::bind("127.0.0.1:0").expect("bind"); + let url = format!("http://{}/v1", listener.local_addr().expect("addr")); + let response = Arc::new(Mutex::new(response)); + let requests = Arc::new(Mutex::new(Vec::new())); + let (answer, record) = (Arc::clone(&response), Arc::clone(&requests)); + std::thread::spawn(move || { + for mut stream in listener.incoming().map_while(Result::ok) { + let mut head = Vec::new(); + let mut reader = BufReader::new(stream.try_clone().expect("clone stream")); + let mut line = String::new(); + while reader.read_line(&mut line).is_ok_and(|read| read > 0) && line != "\r\n" { + head.push(line.trim_end().to_string()); + line.clear(); + } + record.lock().expect("lock").push(head); + let response = answer.lock().expect("lock").clone(); + let _ = stream.write_all(response.as_bytes()); + } + }); + Self { + url, + response, + requests, + } + } + + fn answer(&self, response: String) { + *self.response.lock().expect("lock") = response; + } + + fn requests(&self) -> Vec> { + self.requests.lock().expect("lock").clone() + } + } + + fn listing(models: &[&str]) -> String { + let data: Vec<_> = models + .iter() + .map(|id| serde_json::json!({ "id": id })) + .collect(); + format!( + "HTTP/1.1 200 OK\r\nConnection: close\r\n\r\n{}", + serde_json::json!({ "data": data }) + ) + } + + fn client(name: &str, format: &str, base_url: &str) -> Client { + Client { + name: name.to_string(), + format: format.to_string(), + base_url: base_url.to_string(), + api_key_env: None, + forward_auth: true, + } + } + + fn models(loaded: &[Loaded]) -> Vec<&str> { + loaded + .iter() + .flat_map(|entry| entry.list.iter().flat_map(|list| &list.models)) + .map(String::as_str) + .collect() + } + + #[test] + fn fetches_a_missing_list_once_and_then_uses_the_cached_list() { + let stub = Stub::start(listing(&["model-b", "model-a"])); + let dir = tempfile::tempdir().expect("tempdir"); + let cache = dir.path().join(CACHE_FILE); + // Both clients list their models at the same URL. + let clients = [ + client("gateway", "openai_responses", &stub.url), + client("gateway_chat", "openai_chat", &stub.url), + ]; + + let first = load(&cache, &clients, false, Some("test-key"), &|_| {}); + // No key this time: a cached list needs neither a request nor a key. + let second = load(&cache, &clients, false, None, &|_| {}); + + let requests = stub.requests(); + assert_eq!(requests.len(), 1, "{requests:?}"); + assert_eq!(requests[0][0], "GET /v1/models HTTP/1.1"); + assert!( + requests[0].contains(&"Authorization: Bearer test-key".to_string()), + "{requests:?}" + ); + assert_eq!(first.len(), 1); + assert_eq!(first[0].url, format!("{}/models", stub.url)); + assert_eq!(first[0].error, None); + assert_eq!(models(&first), ["model-a", "model-b"]); + assert_eq!(second, first); + let text = std::fs::read_to_string(&cache).expect("read cache"); + assert!(!text.contains("test-key"), "the cache holds no key: {text}"); + } + + #[test] + fn refresh_fetches_again_and_replaces_the_cached_list() { + let stub = Stub::start(listing(&["old-model"])); + let dir = tempfile::tempdir().expect("tempdir"); + let cache = dir.path().join(CACHE_FILE); + let clients = [client("gateway", "openai_chat", &stub.url)]; + load(&cache, &clients, false, Some("test-key"), &|_| {}); + stub.answer(listing(&["new-model"])); + + let refreshed = load(&cache, &clients, true, Some("test-key"), &|_| {}); + let later = load(&cache, &clients, false, None, &|_| {}); + + assert_eq!(stub.requests().len(), 2); + assert_eq!(models(&refreshed), ["new-model"]); + assert_eq!(refreshed[0].error, None); + assert_eq!(later, refreshed, "the cache file holds the new list"); + } + + #[test] + fn a_failed_refresh_keeps_the_cached_list() { + let stub = Stub::start(listing(&["old-model"])); + let dir = tempfile::tempdir().expect("tempdir"); + let cache = dir.path().join(CACHE_FILE); + let clients = [client("gateway", "openai_chat", &stub.url)]; + let first = load(&cache, &clients, false, Some("test-key"), &|_| {}); + stub.answer( + "HTTP/1.1 500 Internal Server Error\r\nConnection: close\r\n\r\n{}".to_string(), + ); + + let refreshed = load(&cache, &clients, true, Some("test-key"), &|_| {}); + let later = load(&cache, &clients, false, None, &|_| {}); + + assert_eq!(stub.requests().len(), 2); + assert_eq!(refreshed[0].list, first[0].list); + assert_eq!( + refreshed[0].error, + Some(ListError::Failed(format!( + "{}/models answered HTTP 500", + stub.url + ))) + ); + assert_eq!(later, first, "the cache file still holds the old list"); + } + + #[test] + fn fetches_a_shared_url_with_the_client_that_sends_a_key() { + let stub = Stub::start(listing(&["model-a"])); + let dir = tempfile::tempdir().expect("tempdir"); + // The first client at the URL sends no key, so listing with it would + // leave out the key the second client needs. + let keyless = Client { + forward_auth: false, + ..client("open", "openai_chat", &stub.url) + }; + let clients = [keyless, client("gateway", "openai_responses", &stub.url)]; + + let loaded = load( + &dir.path().join(CACHE_FILE), + &clients, + false, + Some("test-key"), + &|_| {}, + ); + + let requests = stub.requests(); + assert_eq!(requests.len(), 1, "{requests:?}"); + assert!( + requests[0].contains(&"Authorization: Bearer test-key".to_string()), + "{requests:?}" + ); + assert_eq!(models(&loaded), ["model-a"]); + } + + #[test] + fn returns_a_fetched_list_that_the_cache_file_cannot_hold() { + let stub = Stub::start(listing(&["model-a"])); + let dir = tempfile::tempdir().expect("tempdir"); + // The cache file's directory does not exist, so the file cannot be + // written. + let cache = dir.path().join("missing").join(CACHE_FILE); + let clients = [client("gateway", "openai_chat", &stub.url)]; + + let loaded = load(&cache, &clients, false, Some("test-key"), &|_| {}); + + assert_eq!(models(&loaded), ["model-a"]); + assert!( + matches!(loaded[0].error, Some(ListError::NotCached(_))), + "{loaded:?}" + ); + assert!(!cache.exists()); + } + + #[test] + fn the_cache_file_keeps_the_newer_of_two_lists() { + let dir = tempfile::tempdir().expect("tempdir"); + let cache = dir.path().join(CACHE_FILE); + let url = "https://api.example/v1/models"; + let list = |model: &str, fetched_at| ModelList { + models: vec![model.to_string()], + fetched_at, + }; + + // The load that fetched first writes last. + write_cache(&cache, url, &list("new", 200)).expect("write"); + write_cache(&cache, url, &list("old", 100)).expect("write"); + + assert_eq!(read_cache(&cache).get(url), Some(&list("new", 200))); + } + + #[test] + fn reports_a_rejected_key_and_a_missing_key() { + let stub = + Stub::start("HTTP/1.1 401 Unauthorized\r\nConnection: close\r\n\r\n{}".to_string()); + let gateway = client("gateway", "openai_chat", &stub.url); + let from_env = Client { + api_key_env: Some("SWITCHYARD_MENUBAR_TEST_UNSET_KEY".to_string()), + forward_auth: false, + ..gateway.clone() + }; + + assert_eq!(list(&gateway, Some("wrong")), Err(ListError::Rejected(401))); + assert_eq!(list(&gateway, None), Err(ListError::NoKey)); + assert_eq!( + list(&from_env, None), + Err(ListError::NoEnv( + "SWITCHYARD_MENUBAR_TEST_UNSET_KEY".to_string() + )) + ); + assert!(matches!( + list(&gateway, Some("key\r\nX-Injected: yes")), + Err(ListError::Failed(_)) + )); + assert_eq!( + stub.requests().len(), + 1, + "a missing key or a key with a line break sends no request" + ); + } + + #[test] + fn builds_the_models_url_with_the_servers_url_rules() { + for (format, base_url, expected) in [ + ( + "openai_chat", + "https://api.example/v1/", + "https://api.example/v1/models", + ), + ( + "openai_responses", + "https://api.example/v1/responses", + "https://api.example/v1/models", + ), + ( + "anthropic_messages", + "https://api.example", + "https://api.example/v1/models?limit=1000", + ), + ( + "anthropic_messages", + "https://api.example/v1/messages", + "https://api.example/v1/models?limit=1000", + ), + // The server sends messages to /foo/messages/v1/messages here. + ( + "anthropic_messages", + "https://api.example/foo/messages", + "https://api.example/foo/messages/v1/models?limit=1000", + ), + ( + "anthropic_messages", + "https://api.example/v1?api-version=1", + "https://api.example/v1/models?api-version=1&limit=1000", + ), + ( + "openai_chat", + "https://api.example/v1?api-version=1", + "https://api.example/v1/models?api-version=1", + ), + ] { + assert_eq!( + models_url(format, base_url), + expected, + "{format} {base_url}" + ); + } + } + + #[test] + fn reads_the_models_that_codex_saved() { + let dir = tempfile::tempdir().expect("tempdir"); + let path = dir.path().join("models_cache.json"); + std::fs::write( + &path, + r#"{"fetched_at":"2026-01-01T00:00:00Z","etag":"x","models":[ + {"slug":"gpt-6-sol","visibility":"list"}, + {"slug":"codex-auto-review","visibility":"hide"}, + {"slug":"gpt-6-sol"}]}"#, + ) + .expect("write"); + + let list = read_codex_models(&path).expect("a list"); + + // Hidden models stay, because a route can still name them. + assert_eq!(list.models, ["codex-auto-review", "gpt-6-sol"]); + assert_eq!(list.fetched_at, 1_767_225_600); + assert_eq!(read_codex_models(&dir.path().join("missing.json")), None); + std::fs::write(&path, "not json").expect("write"); + assert_eq!(read_codex_models(&path), None); + } + + #[test] + fn matches_every_word_ignoring_case() { + let models = [ + "claude-opus-5-5".to_string(), + "claude-sonnet-5".to_string(), + "gpt-5.6-sol".to_string(), + ]; + + assert_eq!(matching(&models, "CLAUDE opus"), ["claude-opus-5-5"]); + assert_eq!(matching(&models, "").len(), 3); + } +} diff --git a/crates/switchyard-menubar/src/picker.rs b/crates/switchyard-menubar/src/picker.rs new file mode 100644 index 0000000000..746978991e --- /dev/null +++ b/crates/switchyard-menubar/src/picker.rs @@ -0,0 +1,1755 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! The routes window. A sidebar lists the routes. For the open route, the +//! window shows its algorithm and a model for each role, and Apply checks, +//! saves, and restarts the server. +//! +//! The window only collects choices. `server_config` edits the config, +//! `models` lists and caches models, and `server` checks, saves, and +//! restarts, so all of that runs without a GUI. Model lists, Keychain access, +//! and Apply run on worker threads, which send their results through a +//! channel that the menu bar's event loop drains by calling [`Picker::poll`]. + +use std::cell::RefCell; +use std::collections::HashMap; +use std::path::PathBuf; +use std::sync::mpsc::{Receiver, Sender, channel}; + +use objc2::rc::Retained; +use objc2::runtime::ProtocolObject; +use objc2::{DefinedClass, MainThreadOnly, define_class, msg_send, sel}; +use objc2_app_kit::{ + NSAccessibility, NSApplication, NSBackingStoreType, NSBox, NSBoxType, NSButton, NSColor, + NSComboBox, NSComboBoxDelegate, NSControl, NSControlTextEditingDelegate, NSFont, NSPopUpButton, + NSResponder, NSScreen, NSScrollView, NSSecureTextField, NSTableView, NSTextField, + NSTextFieldDelegate, NSTextView, NSView, NSWindow, NSWindowStyleMask, +}; +use objc2_foundation::{ + MainThreadMarker, NSNotification, NSObject, NSObjectProtocol, NSPoint, NSRect, NSSize, + NSString, ns_string, +}; + +use crate::config::Config; +use crate::models::{self, ListError, Loaded, ModelList}; +use crate::server; +use crate::server_config::{ALGORITHMS, Choice, Client, Role, Route, ServerConfig, Tier}; +use crate::sidebar::{self, SidebarSource}; + +// Control tags. Role rows use `CLIENT_TAG + row` for the endpoint popup and +// `MODEL_TAG + row` for the model box. A pick from the model list arrives as +// `SELECTED_TAG + row`. +const ALGORITHM_TAG: isize = 2; +const SAVE_KEY_TAG: isize = 3; +const APPLY_TAG: isize = 4; +const REFRESH_TAG: isize = 5; +const CLOSE_TAG: isize = 6; +const REVERT_TAG: isize = 7; +const CLIENT_TAG: isize = 100; +const MODEL_TAG: isize = 200; +const SELECTED_TAG: isize = 300; + +const SIDEBAR_WIDTH: f64 = sidebar::WIDTH; +const DETAIL_WIDTH: f64 = 750.0; +const WIDTH: f64 = SIDEBAR_WIDTH + DETAIL_WIDTH; +/// The window's content height, or less on a short screen. +const MAX_HEIGHT: f64 = 640.0; +/// The least content height that leaves room for one role row when the +/// generated-block banner and the key area both show: 232 above the rows, +/// 80 for the key area, 84 for the row, and `ROWS_BOTTOM` below. +const MIN_HEIGHT: f64 = 582.0; +const MARGIN: f64 = 24.0; +const CONTENT_WIDTH: f64 = DETAIL_WIDTH - 2.0 * MARGIN; +// The columns of a role row, measured from the left edge of the content. +const ROLE_WIDTH: f64 = 130.0; +const ENDPOINT_X: f64 = ROLE_WIDTH + 12.0; +const ENDPOINT_WIDTH: f64 = 240.0; +const MODEL_X: f64 = ENDPOINT_X + ENDPOINT_WIDTH + 10.0; +const MODEL_WIDTH: f64 = CONTENT_WIDTH - MODEL_X - 6.0; +/// Height of one role row: the role and its two dropdowns, then a note of up +/// to two lines under them. +const ROLE_HEIGHT: f64 = 84.0; +const NOTE_HEIGHT: f64 = 34.0; +/// Height of the key area: three lines of text above the key field. +const KEY_HEIGHT: f64 = 80.0; +/// Height of the algorithm's description: up to two lines. +const SUMMARY_HEIGHT: f64 = 36.0; +/// Height of the result area. A longer result scrolls. +const STATUS_HEIGHT: f64 = 120.0; +const BUTTONS_HEIGHT: f64 = 32.0; +// Distances from the bottom of the window to the edges of the areas that sit +// above the buttons. +const BUTTONS_Y: f64 = 16.0; +const STATUS_Y: f64 = BUTTONS_Y + BUTTONS_HEIGHT + 10.0; +const ROWS_BOTTOM: f64 = STATUS_Y + STATUS_HEIGHT + 8.0; + +define_class!( + /// Receives every control's action and text change, and queues the + /// control's tag for [`Picker::poll`]. The picker handles the tags later, + /// outside AppKit's callback, so an event that AppKit sends while the + /// picker updates its controls only adds a tag and does not reenter it. + // SAFETY: NSObject has no subclassing requirements, and `ControlTarget` + // does not implement `Drop`. + #[unsafe(super(NSObject))] + #[thread_kind = MainThreadOnly] + #[name = "SwitchyardPickerControlTarget"] + #[ivars = RefCell>] + struct ControlTarget; + + impl ControlTarget { + // SAFETY: AppKit calls an action method with the control that sent it. + #[unsafe(method(controlChanged:))] + fn control_changed(&self, sender: &NSControl) { + self.ivars().borrow_mut().push(sender.tag()); + } + } + + unsafe impl NSObjectProtocol for ControlTarget {} + + unsafe impl NSControlTextEditingDelegate for ControlTarget { + // SAFETY: the signature matches the protocol method. + #[unsafe(method(controlTextDidChange:))] + fn control_text_did_change(&self, notification: &NSNotification) { + let control = notification + .object() + .and_then(|object| object.downcast::().ok()); + if let Some(control) = control { + self.ivars().borrow_mut().push(control.tag()); + } + } + } + + unsafe impl NSTextFieldDelegate for ControlTarget {} + + unsafe impl NSComboBoxDelegate for ControlTarget { + // SAFETY: the signature matches the protocol method. + #[unsafe(method(comboBoxSelectionDidChange:))] + fn combo_box_selection_did_change(&self, notification: &NSNotification) { + let control = notification + .object() + .and_then(|object| object.downcast::().ok()); + if let Some(control) = control { + self.ivars() + .borrow_mut() + .push(control.tag() - MODEL_TAG + SELECTED_TAG); + } + } + } +); + +impl ControlTarget { + fn new(mtm: MainThreadMarker) -> Retained { + let this = Self::alloc(mtm).set_ivars(RefCell::new(Vec::new())); + // SAFETY: NSObject's `init` has this signature. + unsafe { msg_send![super(this), init] } + } +} + +define_class!( + /// A model box that scrolls itself into view when it gets keyboard + /// focus, so Tab can reach a role row that the scroll view hides. + // SAFETY: NSComboBox has no subclassing requirements, and `ModelBox` + // does not implement `Drop`. + #[unsafe(super(NSComboBox, NSTextField, NSControl, NSView, NSResponder, NSObject))] + #[thread_kind = MainThreadOnly] + #[name = "SwitchyardPickerModelBox"] + struct ModelBox; + + impl ModelBox { + // SAFETY: the signature matches NSResponder's method. + #[unsafe(method(becomeFirstResponder))] + fn become_first_responder(&self) -> bool { + // SAFETY: NSResponder's `becomeFirstResponder` takes no + // arguments and returns a BOOL. + let became: bool = unsafe { msg_send![super(self), becomeFirstResponder] }; + if became { + self.scrollRectToVisible(self.bounds()); + } + became + } + } +); + +impl ModelBox { + fn new(mtm: MainThreadMarker, frame: NSRect) -> Retained { + // SAFETY: NSComboBox's `initWithFrame:` has this signature. + unsafe { msg_send![Self::alloc(mtm), initWithFrame: frame] } + } +} + +/// A result that a worker thread sends back to the window. +enum Done { + /// The model list at one URL, from load number `load`. + Listed { + load: u64, + loaded: Loaded, + }, + /// The outcome of a load that the user asked for, for the result area. + Status(String), + Applied(Result), +} + +/// What the window knows about the model list at one URL. +#[derive(Default)] +struct ListState { + /// The newest list: fetched, or read from the cache file. + list: Option, + /// Why the last load failed, when it did. + error: Option, + /// `started` is the newest load started for this list, and `shown` is the + /// newest load whose result the window shows. Loads are numbered in the + /// order they start. + started: u64, + shown: u64, +} + +impl ListState { + /// Returns whether a worker thread is loading this list now. + fn loading(&self) -> bool { + self.started > self.shown + } + + /// Records the result of load number `load`. A worker that started + /// earlier can finish later, so the window ignores a result from a load + /// older than the one it shows. Otherwise the error comes from this + /// result, and the newer of the two lists stays, because a failed load + /// returns the list from the cache file, which can be older than the one + /// the window has. The result of the newest load ends the loading state. + fn finish(&mut self, load: u64, list: Option, error: Option) { + if load < self.shown { + return; + } + self.shown = load; + let fetched_at = |list: &Option| list.as_ref().map(|list| list.fetched_at); + if fetched_at(&list) >= fetched_at(&self.list) { + self.list = list; + } + self.error = error; + } +} + +/// A route's algorithm and one choice per role: what the user picked and has +/// not applied yet, or what the config holds. +#[derive(Default)] +struct Draft { + algorithm: usize, + choices: Vec, +} + +/// The controls of one role row. +struct RoleRow { + client: Retained, + model: Retained, + note: Retained, +} + +/// The controls that the picker reads or updates after it lays them out. +struct Controls { + algorithm: Retained, + rows: Vec, + /// The scroll view that holds the role rows. Its room is the space + /// between `rows_top`, the rows' top edge, and the result area. + scroll: Retained, + rows_view: Retained, + rows_top: f64, + key_label: Retained, + key: Retained, + save_key: Retained, + status: Retained, + revert: Retained, + apply: Retained, +} + +/// The parts of the window that stay while the detail pane changes. +struct Shell { + content: Retained, + table: Retained, + detail: Retained, + height: f64, +} + +/// The routes window and what the user has chosen in it. +pub struct Picker { + mtm: MainThreadMarker, + window: Retained, + target: Retained, + source: Retained, + settings: Config, + /// The file that keeps fetched model lists. + cache: PathBuf, + config: Option, + routes: Vec, + clients: Vec, + /// The open route's index in `routes`. + route: usize, + algorithm: usize, + roles: Vec, + /// One choice per role, in role order. + choices: Vec, + /// The algorithm and choices that the config holds for the open route. + saved: Draft, + /// What the user picked on the routes they left, by route key. + drafts: HashMap, + /// The latest choice for each tier on this route. When the next algorithm + /// has no role for a tier, its choice stays here, so switching back + /// restores it. `select_route` clears the map. + by_tier: HashMap, + /// Model lists by URL, kept while the app runs. Clients that list their + /// models at the same URL share one entry. + lists: HashMap, + /// How many list loads the window has started. It numbers the loads. + loads: u64, + /// What the last Apply, or a failed config load, said. + result: String, + /// What the last Refresh models or Save key said. It shows under `result`. + list_notes: String, + /// Whether an Apply is running. + busy: bool, + /// Whether the sidebar shows the open route as edited. + shown_edited: bool, + sender: Sender, + receiver: Receiver, + shell: Shell, + controls: Option, +} + +impl Picker { + pub fn new(mtm: MainThreadMarker, settings: &Config, cache: PathBuf) -> Self { + // SAFETY: the window is not released when closed, because `Picker` + // owns it and shows it again from the menu. + let window = unsafe { + let window = NSWindow::initWithContentRect_styleMask_backing_defer( + NSWindow::alloc(mtm), + rect(0.0, 0.0, WIDTH, MAX_HEIGHT), + NSWindowStyleMask::Titled + | NSWindowStyleMask::Closable + | NSWindowStyleMask::Miniaturizable, + NSBackingStoreType::Buffered, + false, + ); + window.setReleasedWhenClosed(false); + window + }; + window.setTitle(ns_string!("Switchyard routes")); + let source = SidebarSource::new(mtm); + let shell = build_shell(mtm, &window, &source); + window.center(); + let (sender, receiver) = channel(); + Self { + mtm, + window, + target: ControlTarget::new(mtm), + source, + settings: settings.clone(), + cache, + config: None, + routes: Vec::new(), + clients: Vec::new(), + route: 0, + algorithm: 0, + roles: Vec::new(), + choices: Vec::new(), + saved: Draft::default(), + drafts: HashMap::new(), + by_tier: HashMap::new(), + lists: HashMap::new(), + loads: 0, + result: String::new(), + list_notes: String::new(), + busy: false, + shown_edited: false, + sender, + receiver, + shell, + controls: None, + } + } + + /// Whether an Apply is running. + pub fn is_busy(&self) -> bool { + self.busy + } + + /// Stores the menu bar settings after the user edited the settings file. + /// Apply writes the file that `config_file` names. So when `config_file` + /// changes while the window is open and no Apply is running, the window + /// loads the new file and drops changes that the user has not applied. + pub fn set_settings(&mut self, settings: &Config) { + let moved = settings.config_file != self.settings.config_file; + self.settings = settings.clone(); + if moved && !self.busy && self.is_open() { + self.drafts.clear(); + self.load(None); + self.layout(); + } + } + + /// Whether the window is on the screen or in the Dock. + fn is_open(&self) -> bool { + self.window.isVisible() || self.window.isMiniaturized() + } + + /// Brings the window to the front. A window that is closed rereads the + /// server config first and drops what the user picked but did not apply. + /// A window that is open keeps its picks, so the menu item is a way back + /// to it. + pub fn show(&mut self) { + if !self.is_open() { + if !self.busy { + self.drafts.clear(); + // Opening the window again retries a list that failed and has + // nothing to show. The window fetches a list that it already + // has only when the user clicks Refresh models or Save key. + self.lists + .retain(|_, state| state.loading() || state.list.is_some()); + let route = self.routes.get(self.route).map(|route| route.key.clone()); + self.load(route.as_deref()); + } + self.layout(); + } + // An accessory app must activate itself before its window can take + // keyboard focus. `activate` needs macOS 14, so use the older call. + #[allow(deprecated)] + NSApplication::sharedApplication(self.mtm).activateIgnoringOtherApps(true); + self.window.makeKeyAndOrderFront(None); + } + + /// Handles queued control events and finished background work. + pub fn poll(&mut self) { + let tags = std::mem::take(&mut *self.target.ivars().borrow_mut()); + let picks = self.source.take_picks(); + let mut changed = !tags.is_empty() || !picks.is_empty(); + for tag in tags { + self.on_control(tag); + } + for row in picks { + self.on_sidebar(row); + } + while let Ok(done) = self.receiver.try_recv() { + changed = true; + self.on_done(done); + } + if changed { + if self.is_edited() != self.shown_edited { + self.sync_sidebar(); + } + self.update_buttons(); + } + } + + fn load(&mut self, route: Option<&str>) { + let path = &self.settings.config_file; + let loaded = std::fs::read_to_string(path) + .map_err(|error| { + format!( + "Could not read {}: {error}. Check config_file in the menu bar settings.", + path.display() + ) + }) + .and_then(|text| ServerConfig::parse(&text)); + match loaded { + Ok(config) => { + self.routes = config.routes(); + self.clients = config.clients(); + self.route = route + .and_then(|key| self.routes.iter().position(|route| route.key == key)) + .unwrap_or(0); + self.config = Some(config); + self.select_route(); + if self.routes.is_empty() { + self.result = format!( + "{} has no routes to change.", + self.settings.config_file.display() + ); + } + } + Err(error) => { + self.config = None; + self.routes.clear(); + self.clients.clear(); + self.select_route(); + self.result = error; + } + } + } + + /// Shows the open route's algorithm and models: what the user picked on + /// it before, if anything, or else what the config holds. + fn select_route(&mut self) { + self.by_tier.clear(); + self.list_notes.clear(); + let (Some(config), Some(route)) = (&self.config, self.routes.get(self.route)) else { + self.roles.clear(); + self.choices.clear(); + self.saved = Draft::default(); + return; + }; + match config.algorithm(&route.key) { + Some(current) => { + self.algorithm = ALGORITHMS + .iter() + .position(|algorithm| algorithm.kind == current.kind) + .unwrap_or(0); + self.roles = config.roles(&route.key, current); + self.choices = config.choices(&route.key); + self.result.clear(); + } + None => { + self.algorithm = 0; + self.roles = config.roles(&route.key, &ALGORITHMS[0]); + self.choices = vec![Choice::default(); self.roles.len()]; + self.result = format!( + "This window cannot show the current settings of route {}: its type is not \ + in the Algorithm list, or it is a custom-mode llm_classifier. Apply replaces \ + those settings with the algorithm and models you pick.", + route.id + ); + } + } + self.fill_clients(); + self.saved = Draft { + algorithm: self.algorithm, + choices: self.choices.clone(), + }; + if let Some(config) = &self.config + && let Some(route) = self.routes.get(self.route) + && let Some(draft) = self.drafts.get(&route.key) + && let Some(algorithm) = ALGORITHMS.get(draft.algorithm) + { + let roles = config.roles(&route.key, algorithm); + if roles.len() == draft.choices.len() { + self.algorithm = draft.algorithm; + self.roles = roles; + self.choices = draft.choices.clone(); + } + } + self.list_models(); + } + + /// Switches the algorithm. Each new role starts from the latest choice + /// for its tier on this route, so the capable model stays the capable one. + /// Choices for tiers the new algorithm lacks stay in `by_tier`. + fn select_algorithm(&mut self, index: usize) { + self.read_models(); + for (role, choice) in self.roles.iter().zip(&self.choices) { + if let Some(tier) = role.tier { + self.by_tier.insert(tier, choice.clone()); + } + } + let (Some(config), Some(route), Some(algorithm)) = ( + &self.config, + self.routes.get(self.route), + ALGORITHMS.get(index), + ) else { + return; + }; + let roles = config.roles(&route.key, algorithm); + self.choices = roles + .iter() + .map(|role| { + role.tier + .and_then(|tier| self.by_tier.get(&tier).cloned()) + .unwrap_or_default() + }) + .collect(); + self.roles = roles; + self.algorithm = index; + self.fill_clients(); + self.list_models(); + self.layout(); + } + + /// Gives every role without a client the first role's client. + fn fill_clients(&mut self) { + let fallback = self + .choices + .iter() + .map(|choice| &choice.client) + .find(|client| !client.is_empty()) + .or_else(|| self.clients.first().map(|client| &client.name)) + .cloned() + .unwrap_or_default(); + for choice in &mut self.choices { + if choice.client.is_empty() { + choice.client = fallback.clone(); + } + } + } + + /// Opens the route that the user picked in the sidebar, and keeps what + /// the user picked on the route they leave. + fn on_sidebar(&mut self, row: usize) { + let Some(route) = self.source.route_at(row) else { + return; + }; + if route == self.route { + return; + } + if self.busy { + // The result of a running Apply belongs to the route that + // started it, so the sidebar stays on that route. + self.sync_sidebar(); + return; + } + self.stash(); + self.route = route; + self.select_route(); + self.layout(); + } + + /// Returns whether the open route differs from what the config holds. + fn is_edited(&self) -> bool { + differs(&self.saved, self.algorithm, &self.choices) + } + + /// Keeps what the user picked on the open route, or drops the old pick + /// when the route matches the config again. + fn stash(&mut self) { + let Some(route) = self.routes.get(self.route) else { + return; + }; + if self.is_edited() { + self.drafts.insert( + route.key.clone(), + Draft { + algorithm: self.algorithm, + choices: self.choices.clone(), + }, + ); + } else { + self.drafts.remove(&route.key); + } + } + + /// Drops what the user picked on the open route. + fn revert(&mut self) { + if let Some(route) = self.routes.get(self.route) { + self.drafts.remove(&route.key); + } + self.select_route(); + self.layout(); + } + + /// Updates the sidebar's rows and selects the open route's row. + fn sync_sidebar(&mut self) { + self.shown_edited = self.is_edited(); + let entries: Vec = self + .routes + .iter() + .enumerate() + .map(|(index, route)| sidebar::Entry { + title: &route.id, + single_model: route.kind == "passthrough", + edited: if index == self.route { + self.shown_edited + } else { + self.drafts.contains_key(&route.key) + }, + }) + .collect(); + self.source + .show(&self.shell.table, sidebar::rows(&entries), self.route); + } + + /// Loads the lists of the rows' clients that the window does not have: + /// from the cache file, or fetched when the cache file has none. + fn list_models(&mut self) { + let clients = self.row_clients(|state| state.is_none()); + if !clients.is_empty() { + self.load_lists(clients, false, None); + } + } + + /// Fetches the lists that the rows use again, one request per URL. + fn refresh_models(&mut self) { + let clients = self.row_clients(|state| !state.is_some_and(ListState::loading)); + if clients.is_empty() { + return; + } + self.set_list_notes("Refreshing the model lists…".to_string()); + self.load_lists(clients, true, None); + } + + /// Returns the clients that the rows use and whose list state passes + /// `wanted`, each client once. + fn row_clients(&self, wanted: impl Fn(Option<&ListState>) -> bool) -> Vec { + let mut clients: Vec = Vec::new(); + for choice in &self.choices { + if let Some(client) = self.client(&choice.client) + && wanted(self.lists.get(&models::list_url(client))) + && !clients.contains(client) + { + clients.push(client.clone()); + } + } + clients + } + + /// Loads the lists that `clients` use on a worker thread, which loads + /// each URL on its own thread and reports each list as it arrives. With + /// `refresh`, the worker fetches the lists even when the cache file has + /// them, and the outcome replaces the result area's list notes, because + /// the user asked for it. `key` is a key the user just typed, with its + /// `base_url`. The worker lists the models with it first, and saves it in + /// the Keychain only when the models endpoint did not reject it. + fn load_lists(&mut self, clients: Vec, refresh: bool, key: Option<(String, String)>) { + self.loads += 1; + let load = self.loads; + for client in &clients { + self.lists + .entry(models::list_url(client)) + .or_default() + .started = load; + } + self.update_rows(); + let cache = self.cache.clone(); + let sender = self.sender.clone(); + std::thread::spawn(move || { + let typed_key = key.as_ref().map(|(_, key)| key.as_str()); + let lists = models::load(&cache, &clients, refresh, typed_key, &|loaded| { + let _ = sender.send(Done::Listed { + load, + loaded: loaded.clone(), + }); + }); + if !refresh { + return; + } + let mut status = Vec::new(); + if let Some((base_url, key)) = &key { + status.push(keep_key(base_url, key, &lists)); + } + status.extend(lists.iter().map(|loaded| outcome(loaded, &clients))); + let _ = sender.send(Done::Status(status.join("\n"))); + }); + } + + fn client(&self, name: &str) -> Option<&Client> { + self.clients.iter().find(|client| client.name == name) + } + + fn on_control(&mut self, tag: isize) { + let Some(controls) = &self.controls else { + return; + }; + match tag { + ALGORITHM_TAG => { + if let Some(index) = selected(&controls.algorithm) + && index != self.algorithm + { + self.select_algorithm(index); + } + } + SAVE_KEY_TAG => self.save_key(), + REFRESH_TAG => self.refresh_models(), + APPLY_TAG => self.apply(), + REVERT_TAG => self.revert(), + CLOSE_TAG => self.window.close(), + _ if (CLIENT_TAG..MODEL_TAG).contains(&tag) => { + let row = tag.abs_diff(CLIENT_TAG); + let client = controls + .rows + .get(row) + .and_then(|ui| selected(&ui.client)) + .and_then(|index| self.clients.get(index)) + .map(|client| client.name.clone()); + if let (Some(client), Some(choice)) = (client, self.choices.get_mut(row)) { + choice.client = client; + self.list_models(); + // A new client can show or hide the key field and + // enable or disable Apply. + self.update_rows(); + } + } + _ if (MODEL_TAG..SELECTED_TAG).contains(&tag) => { + let row = tag.abs_diff(MODEL_TAG); + if let (Some(ui), Some(choice)) = + (controls.rows.get(row), self.choices.get_mut(row)) + { + choice.model = ui.model.stringValue().to_string(); + } + self.update_row(row); + } + _ if tag >= SELECTED_TAG => { + // The box shows the picked model only after this event, so + // read the picked item rather than the box's text. + let row = tag.abs_diff(SELECTED_TAG); + let picked = controls + .rows + .get(row) + .and_then(|ui| ui.model.objectValueOfSelectedItem()) + .and_then(|value| value.downcast::().ok()); + if let (Some(picked), Some(choice)) = (picked, self.choices.get_mut(row)) { + choice.model = picked.to_string(); + self.update_row(row); + } + } + _ => {} + } + } + + fn on_done(&mut self, done: Done) { + match done { + Done::Listed { + load, + loaded: Loaded { url, list, error }, + } => { + self.lists.entry(url).or_default().finish(load, list, error); + self.update_rows(); + } + Done::Status(status) => self.set_list_notes(status), + Done::Applied(result) => { + self.busy = false; + match result { + Ok(message) => { + if let Some(route) = self.routes.get(self.route) { + self.drafts.remove(&route.key); + } + let prices = self.unpriced_models(); + let route = self.routes.get(self.route).map(|route| route.key.clone()); + self.load(route.as_deref()); + self.layout(); + self.set_result(format!("{message}{prices}")); + } + Err(error) => self.set_result(format!("Not saved. {error}")), + } + } + } + } + + /// Returns a note that names the chosen models with no price in + /// menubar.toml, or an empty note when every model has one. + fn unpriced_models(&self) -> String { + let models = self.choices.iter().map(|choice| choice.model.trim()); + let missing = crate::pricing::unpriced(models, &self.settings.prices); + if missing.is_empty() { + return String::new(); + } + let pronoun = if missing.len() == 1 { "it" } else { "them" }; + format!( + "\nmenubar.toml has no price for {}. Savings stay hidden until you add {pronoun}.", + missing.join(", ") + ) + } + + /// Lists the models of every client with the key field's `base_url` + /// using the typed key, and then saves the key unless the models + /// endpoint rejected it. + fn save_key(&mut self) { + let (Some(controls), Some(base_url)) = (&self.controls, self.key_url().map(str::to_string)) + else { + return; + }; + let key = controls.key.stringValue().to_string().trim().to_string(); + controls.key.setStringValue(ns_string!("")); + if key.is_empty() { + self.set_list_notes("Paste a key into the field first.".to_string()); + return; + } + if models::has_line_break(&key) { + self.set_list_notes( + "Could not use the key, because it has a line break. Paste the key again \ + without line breaks." + .to_string(), + ); + return; + } + let clients: Vec = self + .clients + .iter() + .filter(|client| client.base_url == base_url) + .cloned() + .collect(); + self.set_list_notes(format!( + "Checking the key by listing the models at {base_url}…" + )); + self.load_lists(clients, true, Some((base_url, key))); + } + + fn apply(&mut self) { + if !self.can_apply() { + return; + } + self.read_models(); + let (Some(route), Some(algorithm)) = + (self.routes.get(self.route), ALGORITHMS.get(self.algorithm)) + else { + return; + }; + let route = route.key.clone(); + let choices = self.choices.clone(); + let settings = self.settings.clone(); + let sender = self.sender.clone(); + std::thread::spawn(move || { + let result = server::apply(&settings, &route, algorithm, &choices); + let _ = sender.send(Done::Applied(result)); + }); + self.busy = true; + self.list_notes.clear(); + self.set_result("Checking the config with switchyard-server --dry-run…".to_string()); + } + + /// Copies the typed model IDs into the choices. + fn read_models(&mut self) { + let Some(controls) = &self.controls else { + return; + }; + for (row, choice) in controls.rows.iter().zip(&mut self.choices) { + choice.model = row.model.stringValue().to_string(); + } + } + + fn set_result(&mut self, result: String) { + self.result = result; + self.show_status(); + } + + fn set_list_notes(&mut self, notes: String) { + self.list_notes = notes; + self.show_status(); + } + + /// Writes the result and the list notes in the result area. + fn show_status(&self) { + let Some(controls) = &self.controls else { + return; + }; + let text: Vec<&str> = [self.result.as_str(), self.list_notes.as_str()] + .into_iter() + .filter(|text| !text.is_empty()) + .collect(); + controls + .status + .setString(&NSString::from_str(&text.join("\n"))); + self.update_buttons(); + } + + /// Returns whether Apply can run: no Apply is running, the config has + /// loaded, the user changed the open route, and every role has a model + /// and an endpoint that the config defines. + fn can_apply(&self) -> bool { + !self.busy + && self.config.is_some() + && self.is_edited() + && self.choices.iter().all(|choice| { + self.client(&choice.client).is_some() && !choice.model.trim().is_empty() + }) + } + + fn update_buttons(&self) { + if let Some(controls) = &self.controls { + controls.apply.setEnabled(self.can_apply()); + controls.revert.setEnabled(!self.busy && self.is_edited()); + } + } + + fn update_rows(&self) { + for row in 0..self.choices.len() { + self.update_row(row); + } + let Some(controls) = &self.controls else { + return; + }; + self.update_buttons(); + let key_url = self.key_url(); + let hidden = key_url.is_none(); + controls.key_label.setHidden(hidden); + controls.key.setHidden(hidden); + controls.save_key.setHidden(hidden); + if let Some(url) = key_url { + controls + .key_label + .setStringValue(&NSString::from_str(&format!( + "To list the models at {url}, paste the API key for that address and click \ + Save key. The app uses the key only to list models there and keeps it in \ + your login Keychain, not in a file." + ))); + controls + .key + .setAccessibilityLabel(Some(&NSString::from_str(&format!("API key for {url}")))); + } + self.fit_rows(); + } + + /// Sizes the role rows' scroll view to the room above the result area, + /// less the key area's room while the key area shows, and shows the first + /// role. A scroll view that already has the right height keeps its scroll + /// position, so a model list that arrives does not move the row that the + /// user is editing. + fn fit_rows(&self) { + let Some(controls) = &self.controls else { + return; + }; + let key = if self.key_url().is_some() { + KEY_HEIGHT + } else { + 0.0 + }; + let rows_height = ROLE_HEIGHT * controls.rows.len() as f64; + let room = controls.rows_top - ROWS_BOTTOM - key; + let shown = rows_height.min(room.max(ROLE_HEIGHT)); + if controls.scroll.frame().size.height == shown { + return; + } + controls.scroll.setFrame(rect( + MARGIN, + controls.rows_top - shown, + CONTENT_WIDTH, + shown, + )); + // The rows view's origin is its bottom left, so the scroll view + // starts at the last role. Show the first role instead. + controls + .rows_view + .scrollPoint(NSPoint::new(0.0, rows_height - shown)); + } + + /// Returns the `base_url` that the key field saves a key for: the + /// `base_url` of the first row whose list failed because it needs a + /// working key. + fn key_url(&self) -> Option<&str> { + self.choices.iter().find_map(|choice| { + let client = self.client(&choice.client)?; + let error = self.lists.get(&models::list_url(client))?.error.as_ref()?; + error.needs_key().then_some(client.base_url.as_str()) + }) + } + + /// Fills a row's model list and writes the note under it. + fn update_row(&self, row: usize) { + let (Some(controls), Some(choice)) = (&self.controls, self.choices.get(row)) else { + return; + }; + let Some(ui) = controls.rows.get(row) else { + return; + }; + ui.model.removeAllItems(); + let client = self.client(&choice.client); + let state = client.and_then(|client| self.lists.get(&models::list_url(client))); + let loading = state.is_some_and(ListState::loading); + let note = match (client, state) { + (None, _) if self.clients.is_empty() => "The config has no [llm_clients] entries. \ + Add an LLM client to the server config, \ + then open this window again." + .to_string(), + (None, _) => format!( + "The config has no LLM client named \"{}\". Pick an endpoint in this row.", + choice.client + ), + (Some(client), _) if models::unlisted(client) => { + let saved = state.and_then(|state| state.list.as_ref()); + self.unlisted_note(ui, client, saved, &choice.model) + } + ( + Some(client), + Some(ListState { + list: Some(list), + error, + .. + }), + ) => { + let shown = show_models(ui, &list.models, &choice.model); + let mut note = match_note(shown, list.models.len()).unwrap_or_else(|| { + format!( + "{} models on {}, fetched {}. Type to search.", + list.models.len(), + client.host(), + age(list.fetched_at) + ) + }); + if loading { + note.push_str(" Refreshing…"); + } else if let Some(error) = error { + note.push('\n'); + note.push_str(&error.reason()); + } + // A cached list loads without a key, so the note must name + // the missing variable that Apply needs. + if let Some(variable) = models::missing_env(client) { + note.push('\n'); + note.push_str(&models::missing_env_note(variable)); + } + note + } + ( + Some(_), + Some(ListState { + list: None, + error: Some(error), + .. + }), + ) if !loading => format!("No model list yet. {} {}", error.reason(), error.advice()), + (Some(_), _) => "Loading models…".to_string(), + }; + let note = NSString::from_str(¬e); + ui.note.setStringValue(¬e); + // The note fits two lines, and its tooltip shows the whole text. + ui.note.setToolTip(Some(¬e)); + ui.client.setToolTip( + client + .map(|client| NSString::from_str(&endpoint_tip(client))) + .as_deref(), + ); + } + + /// Fills the list of a row whose client has no model list, and returns + /// its note. The list holds the models that the config already names on + /// the client, and the models that Codex saved. + fn unlisted_note( + &self, + ui: &RoleRow, + client: &Client, + saved: Option<&ModelList>, + query: &str, + ) -> String { + let mut models = self + .config + .as_ref() + .map(|config| config.models_on(&client.name)) + .unwrap_or_default(); + if let Some(saved) = saved { + models.extend(saved.models.iter().cloned()); + } + models.sort(); + models.dedup(); + let shown = show_models(ui, &models, query); + match_note(shown, models.len()).unwrap_or_else(|| { + let source = match saved { + Some(saved) => format!( + "the models in your config and the ones that Codex saved {}", + age(saved.fetched_at) + ), + None => "the models in your config".to_string(), + }; + format!( + "{} has no model list that this app can read. The list shows {source}. Type \ + any other model ID.", + client.host() + ) + }) + } + + /// Rebuilds the detail pane for the open route and algorithm. The role + /// rows sit in a scroll view, so a route with many models still leaves + /// the buttons on the screen. + fn layout(&mut self) { + let mtm = self.mtm; + let height = self.shell.height; + let (content, old_detail) = (self.shell.content.clone(), self.shell.detail.clone()); + let detail = NSView::initWithFrame( + NSView::alloc(mtm), + rect(SIDEBAR_WIDTH, 0.0, DETAIL_WIDTH, height), + ); + // Controls are placed from the top; AppKit's origin is bottom left. + let mut top = 20.0; + let mut next = |row_height: f64| { + let y = height - top - row_height; + top += row_height; + y + }; + + let route = self.routes.get(self.route); + let y = next(30.0); + detail.addSubview(&self.heading( + route.map_or("", |route| route.id.as_str()), + rect(MARGIN, y, CONTENT_WIDTH, 26.0), + )); + let y = next(24.0); + let about = route.map_or(String::new(), |route| { + let table = if route.key == route.id { + String::new() + } else { + format!(" It is [routes.{}] in the config.", route.key) + }; + format!( + "Callers choose this route by sending \"{}\" as the model.{table}", + route.id + ) + }); + detail.addSubview(&self.small(&about, rect(MARGIN, y + 2.0, CONTENT_WIDTH, 16.0))); + let block = self + .config + .as_ref() + .zip(route) + .and_then(|(config, route)| config.generated_by("routes", &route.key)); + if let Some(block) = block { + let y = next(44.0); + let banner = self.wrapping( + &format!( + "Another tool writes this route and overwrites changes made here the \ + next time it runs. Block marker: \"{block}\"." + ), + rect(MARGIN, y + 4.0, CONTENT_WIDTH, 36.0), + ); + banner.setTextColor(Some(&NSColor::systemOrangeColor())); + detail.addSubview(&banner); + } + + let y = next(44.0); + detail.addSubview(&self.label("Algorithm", rect(MARGIN, y + 16.0, 80.0, 18.0))); + let titles: Vec = ALGORITHMS + .iter() + .map(|algorithm| format!("{} ({})", algorithm.title, algorithm.kind)) + .collect(); + let algorithm = self.popup( + &titles, + Some(self.algorithm), + rect(MARGIN + 90.0, y + 12.0, CONTENT_WIDTH - 90.0, 26.0), + ); + algorithm.setTag(ALGORITHM_TAG); + algorithm.setAccessibilityLabel(Some(ns_string!("Algorithm"))); + detail.addSubview(&algorithm); + let y = next(SUMMARY_HEIGHT); + detail.addSubview( + &self.small( + ALGORITHMS + .get(self.algorithm) + .map_or("", |algorithm| algorithm.summary), + rect(MARGIN + 90.0, y, CONTENT_WIDTH - 90.0, SUMMARY_HEIGHT - 2.0), + ), + ); + + let y = next(34.0); + detail.addSubview(&self.bold("Models", rect(MARGIN, y + 8.0, ROLE_WIDTH, 18.0))); + detail.addSubview(&self.column_title( + "Endpoint", + rect(MARGIN + ENDPOINT_X + 2.0, y + 8.0, ENDPOINT_WIDTH, 16.0), + )); + detail.addSubview(&self.column_title( + "Model", + rect(MARGIN + MODEL_X + 2.0, y + 8.0, MODEL_WIDTH, 16.0), + )); + let rows_top = height - top; + + let rows_height = ROLE_HEIGHT * self.roles.len() as f64; + let rows_view = NSView::initWithFrame( + NSView::alloc(mtm), + rect(0.0, 0.0, CONTENT_WIDTH, rows_height), + ); + let endpoints: Vec = self.clients.iter().map(endpoint_title).collect(); + let mut rows = Vec::with_capacity(self.roles.len()); + for (row, (role, choice)) in self.roles.iter().zip(&self.choices).enumerate() { + let y = rows_height - ROLE_HEIGHT * (row + 1) as f64; + let tag = isize::try_from(row).unwrap_or(0); + // The two dropdowns sit at the top of the row, above the note. + let controls_y = y + ROLE_HEIGHT - 34.0; + rows_view + .addSubview(&self.bold(&role.label, rect(0.0, controls_y + 4.0, ROLE_WIDTH, 18.0))); + rows_view.addSubview(&self.small( + role.hint, + rect(0.0, y + 6.0, ROLE_WIDTH - 8.0, ROLE_HEIGHT - 42.0), + )); + // When the config has no client with the choice's name, the + // popup selects nothing, and the note names the missing client. + let selected = self + .clients + .iter() + .position(|client| client.name == choice.client); + let client = self.popup( + &endpoints, + selected, + rect(ENDPOINT_X, controls_y, ENDPOINT_WIDTH, 26.0), + ); + client.setTag(CLIENT_TAG + tag); + client.setAccessibilityLabel(Some(&NSString::from_str(&format!( + "{} endpoint", + role.label + )))); + rows_view.addSubview(&client); + + let model = ModelBox::new(mtm, rect(MODEL_X, controls_y, MODEL_WIDTH, 26.0)); + model.setStringValue(&NSString::from_str(&choice.model)); + model.setPlaceholderString(Some(ns_string!("Search, or type a model ID"))); + model.setNumberOfVisibleItems(14); + model.setCompletes(false); + model.setTag(MODEL_TAG + tag); + model + .setAccessibilityLabel(Some(&NSString::from_str(&format!("{} model", role.label)))); + // SAFETY: the target lives as long as the window. + unsafe { model.setDelegate(Some(ProtocolObject::from_ref(&*self.target))) }; + rows_view.addSubview(&model); + + let note = self.small( + "", + rect( + ENDPOINT_X + 2.0, + y + 4.0, + CONTENT_WIDTH - ENDPOINT_X - 8.0, + NOTE_HEIGHT, + ), + ); + rows_view.addSubview(¬e); + rows.push(RoleRow { + client, + model, + note, + }); + } + // `fit_rows` gives the scroll view its size, because the room depends + // on whether the key field shows. + let scroll = + NSScrollView::initWithFrame(NSScrollView::alloc(mtm), rect(0.0, 0.0, 0.0, 0.0)); + scroll.setHasVerticalScroller(true); + scroll.setAutohidesScrollers(true); + scroll.setDrawsBackground(false); + scroll.setDocumentView(Some(&rows_view)); + detail.addSubview(&scroll); + + let key_label = self.wrapping("", rect(MARGIN, ROWS_BOTTOM + 30.0, CONTENT_WIDTH, 48.0)); + detail.addSubview(&key_label); + let key = NSSecureTextField::initWithFrame( + NSSecureTextField::alloc(mtm), + rect(MARGIN, ROWS_BOTTOM + 4.0, CONTENT_WIDTH - 110.0, 22.0), + ); + key.setPlaceholderString(Some(ns_string!("Paste the API key"))); + // Return in the field saves the key instead of running Apply. + key.setTag(SAVE_KEY_TAG); + // SAFETY: `ControlTarget` implements `controlChanged:` and lives as + // long as the window. + unsafe { + key.setTarget(Some(&self.target)); + key.setAction(Some(sel!(controlChanged:))); + } + detail.addSubview(&key); + let save_key = self.button( + "Save key", + SAVE_KEY_TAG, + rect(MARGIN + CONTENT_WIDTH - 100.0, ROWS_BOTTOM, 100.0, 30.0), + ); + detail.addSubview(&save_key); + + // The result can be longer than the area, such as a long --dry-run + // error, so the area scrolls. + let status_scroll = NSScrollView::initWithFrame( + NSScrollView::alloc(mtm), + rect(MARGIN, STATUS_Y, CONTENT_WIDTH, STATUS_HEIGHT), + ); + status_scroll.setHasVerticalScroller(true); + status_scroll.setAutohidesScrollers(true); + status_scroll.setDrawsBackground(false); + let size = status_scroll.contentSize(); + let status = NSTextView::initWithFrame( + NSTextView::alloc(mtm), + rect(0.0, 0.0, size.width, size.height), + ); + // The text view grows down as the text gets longer, and wraps at the + // area's width. + status.setMinSize(size); + status.setMaxSize(NSSize::new(size.width, f64::MAX)); + status.setVerticallyResizable(true); + status.setHorizontallyResizable(false); + status.setEditable(false); + status.setDrawsBackground(false); + status.setFont(Some(&NSFont::systemFontOfSize(NSFont::systemFontSize()))); + // The text must follow the light or dark appearance, because the area + // draws no background of its own. + status.setTextColor(Some(&NSColor::labelColor())); + status_scroll.setDocumentView(Some(&status)); + detail.addSubview(&status_scroll); + + let right = MARGIN + CONTENT_WIDTH; + let refresh = self.button( + "Refresh models", + REFRESH_TAG, + rect(MARGIN, BUTTONS_Y, 150.0, BUTTONS_HEIGHT), + ); + refresh.setEnabled(!self.choices.is_empty()); + detail.addSubview(&refresh); + let revert = self.button( + "Revert", + REVERT_TAG, + rect(right - 320.0, BUTTONS_Y, 100.0, BUTTONS_HEIGHT), + ); + detail.addSubview(&revert); + let close = self.button( + "Close", + CLOSE_TAG, + rect(right - 210.0, BUTTONS_Y, 100.0, BUTTONS_HEIGHT), + ); + // Escape closes the window, as in a macOS dialog. + close.setKeyEquivalent(&NSString::from_str("\u{1b}")); + detail.addSubview(&close); + let apply = self.button( + "Apply", + APPLY_TAG, + rect(right - 100.0, BUTTONS_Y, 100.0, BUTTONS_HEIGHT), + ); + // Return runs Apply, the window's default button. + apply.setKeyEquivalent(ns_string!("\r")); + detail.addSubview(&apply); + + content.replaceSubview_with(&old_detail, &detail); + self.shell.detail = detail; + self.controls = Some(Controls { + algorithm, + rows, + scroll, + rows_view, + rows_top, + key_label, + key, + save_key, + status, + revert, + apply, + }); + // Tab moves between the controls in the order they appear, including + // the controls inside the scroll view. + self.window.recalculateKeyViewLoop(); + self.sync_sidebar(); + self.update_rows(); + self.show_status(); + } + + fn label(&self, text: &str, frame: NSRect) -> Retained { + let label = NSTextField::labelWithString(&NSString::from_str(text), self.mtm); + label.setFrame(frame); + label + } + + fn wrapping(&self, text: &str, frame: NSRect) -> Retained { + let label = NSTextField::wrappingLabelWithString(&NSString::from_str(text), self.mtm); + label.setFrame(frame); + label + } + + /// Returns a wrapping label in the small system font and the secondary color. + fn small(&self, text: &str, frame: NSRect) -> Retained { + let label = self.wrapping(text, frame); + label.setFont(Some(&NSFont::systemFontOfSize( + NSFont::smallSystemFontSize(), + ))); + label.setTextColor(Some(&NSColor::secondaryLabelColor())); + label + } + + fn heading(&self, text: &str, frame: NSRect) -> Retained { + let label = self.label(text, frame); + label.setFont(Some(&NSFont::boldSystemFontOfSize(20.0))); + label + } + + fn bold(&self, text: &str, frame: NSRect) -> Retained { + let label = self.label(text, frame); + label.setFont(Some( + &NSFont::boldSystemFontOfSize(NSFont::systemFontSize()), + )); + label + } + + fn column_title(&self, text: &str, frame: NSRect) -> Retained { + let label = self.label(text, frame); + label.setFont(Some(&NSFont::boldSystemFontOfSize( + NSFont::smallSystemFontSize(), + ))); + label.setTextColor(Some(&NSColor::secondaryLabelColor())); + label + } + + /// Returns a popup that lists `items` with `selected` chosen, or with no + /// item chosen when `selected` is `None`. + fn popup( + &self, + items: &[String], + selected: Option, + frame: NSRect, + ) -> Retained { + let popup = + NSPopUpButton::initWithFrame_pullsDown(NSPopUpButton::alloc(self.mtm), frame, false); + for item in items { + popup.addItemWithTitle(&NSString::from_str(item)); + } + popup.selectItemAtIndex( + selected + .and_then(|index| isize::try_from(index).ok()) + .unwrap_or(-1), + ); + // SAFETY: `ControlTarget` implements `controlChanged:` and lives as + // long as the window. + unsafe { + popup.setTarget(Some(&self.target)); + popup.setAction(Some(sel!(controlChanged:))); + } + popup + } + + fn button(&self, title: &str, tag: isize, frame: NSRect) -> Retained { + // SAFETY: `ControlTarget` implements `controlChanged:` and lives as + // long as the window. + let button = unsafe { + NSButton::buttonWithTitle_target_action( + &NSString::from_str(title), + Some(&self.target), + Some(sel!(controlChanged:)), + self.mtm, + ) + }; + button.setFrame(frame); + button.setTag(tag); + button + } +} + +/// The selected item of a popup, if any. +fn selected(popup: &NSPopUpButton) -> Option { + usize::try_from(popup.indexOfSelectedItem()).ok() +} + +pub fn rect(x: f64, y: f64, width: f64, height: f64) -> NSRect { + NSRect::new(NSPoint::new(x, y), NSSize::new(width, height)) +} + +/// Builds the window's fixed content: the sidebar, its divider, and an empty +/// detail pane. The window is as tall as the screen allows, up to +/// `MAX_HEIGHT`. +fn build_shell(mtm: MainThreadMarker, window: &NSWindow, source: &SidebarSource) -> Shell { + let screen = window.screen().or_else(|| NSScreen::mainScreen(mtm)); + let room = screen.as_ref().map_or(MAX_HEIGHT, |screen| { + window + .contentRectForFrameRect(screen.visibleFrame()) + .size + .height + - 20.0 + }); + let height = MAX_HEIGHT.min(room).max(MIN_HEIGHT); + let content = NSView::initWithFrame(NSView::alloc(mtm), rect(0.0, 0.0, WIDTH, height)); + let (panel, table) = sidebar::build(mtm, source, height); + content.addSubview(&panel); + let divider = NSBox::initWithFrame(NSBox::alloc(mtm), rect(SIDEBAR_WIDTH, 0.0, 1.0, height)); + divider.setBoxType(NSBoxType::Separator); + content.addSubview(÷r); + let detail = NSView::initWithFrame( + NSView::alloc(mtm), + rect(SIDEBAR_WIDTH, 0.0, DETAIL_WIDTH, height), + ); + content.addSubview(&detail); + window.setContentSize(NSSize::new(WIDTH, height)); + window.setContentView(Some(&content)); + Shell { + content, + table, + detail, + height, + } +} + +/// Returns whether the open route differs from the algorithm and choices +/// that the config holds. Leading and trailing spaces in a model ID do not +/// count. +fn differs(saved: &Draft, algorithm: usize, choices: &[Choice]) -> bool { + algorithm != saved.algorithm + || choices.len() != saved.choices.len() + || choices.iter().zip(&saved.choices).any(|(now, saved)| { + now.client != saved.client || now.model.trim() != saved.model.trim() + }) +} + +/// Names the request format of a client in one short word, for the popup and +/// its tooltip. +fn format_word(client: &Client) -> &str { + match client.format.as_str() { + "openai_chat" => "Chat", + "openai_responses" => "Responses", + "anthropic_messages" => "Anthropic", + other => other, + } +} + +/// Names an endpoint in a role's popup: the client's name and the request +/// format that it speaks. +fn endpoint_title(client: &Client) -> String { + format!("{} ({})", client.name, format_word(client)) +} + +/// Says where the client sends requests, in which format, and whose key it +/// uses. +fn endpoint_tip(client: &Client) -> String { + let key = if client.forward_auth { + "It uses each caller's own login.".to_string() + } else if let Some(variable) = &client.api_key_env { + format!("It uses the API key from the environment variable {variable}.") + } else { + "It sends no key.".to_string() + }; + format!( + "Sends requests to {} in the {} format. {key}", + client.base_url, + format_word(client) + ) +} + +/// Puts the models that match `query` in the row's list, and returns how +/// many. A complete ID shows the whole list, so another model is one click +/// away. +fn show_models(ui: &RoleRow, models: &[String], query: &str) -> usize { + let query = query.trim(); + let shown: Vec<&str> = if models.iter().any(|model| model == query) { + models.iter().map(String::as_str).collect() + } else { + models::matching(models, query) + }; + for model in &shown { + // SAFETY: the combo box stores NSString values. + unsafe { ui.model.addItemWithObjectValue(&NSString::from_str(model)) }; + } + shown.len() +} + +/// Says how many models match what the user typed, or returns `None` when +/// the whole list shows. +fn match_note(shown: usize, total: usize) -> Option { + if shown == total { + None + } else if shown == 0 { + Some("No listed model matches. Apply uses the ID as typed.".to_string()) + } else { + Some(format!("{shown} of {total} models match.")) + } +} + +/// Saves a typed key in the Keychain unless the models endpoint rejected +/// it while the app listed `lists` with it, and says what happened. +fn keep_key(base_url: &str, key: &str, lists: &[Loaded]) -> String { + if lists + .iter() + .any(|loaded| matches!(loaded.error, Some(ListError::Rejected(_)))) + { + return format!( + "Did not save the key for {base_url}, because the models endpoint rejected it." + ); + } + match models::save_key(base_url, key) { + Ok(()) => format!("Saved the key for {base_url} in your login Keychain."), + Err(error) => format!( + "Could not save the key in your login Keychain: {error}. The app used the key this \ + time only and did not keep it. To try again, paste the key and click Save key." + ), + } +} + +/// Describes one loaded list for the result area. A ChatGPT client has no +/// list to fetch, so its line names the file that Codex saved instead. +fn outcome(loaded: &Loaded, clients: &[Client]) -> String { + let chatgpt = clients + .iter() + .find(|client| models::list_url(client) == loaded.url && models::unlisted(client)); + if let Some(client) = chatgpt { + return match &loaded.list { + Some(list) => format!( + "{}: read the {} models that Codex saved {}.", + client.host(), + list.models.len(), + age(list.fetched_at) + ), + None => format!("{}: Codex has not saved a model list.", client.host()), + }; + } + let mut line = format!("{}:", loaded.url); + if let Some(list) = &loaded.list { + line.push_str(&format!( + " {} models, fetched {}.", + list.models.len(), + age(list.fetched_at) + )); + } + if let Some(error) = &loaded.error { + line.push(' '); + line.push_str(&error.reason()); + } + line +} + +/// Says how long ago `fetched_at` was, such as "3 hours ago". +fn age(fetched_at: u64) -> String { + let minutes = models::now().saturating_sub(fetched_at) / 60; + let (count, unit) = match minutes { + 0 => return "just now".to_string(), + 1..60 => (minutes, "minute"), + 60..1440 => (minutes / 60, "hour"), + _ => (minutes / 1440, "day"), + }; + let plural = if count == 1 { "" } else { "s" }; + format!("{count} {unit}{plural} ago") +} + +#[cfg(test)] +mod tests { + use super::*; + + fn list(fetched_at: u64) -> Option { + Some(ModelList { + models: vec!["model".to_string()], + fetched_at, + }) + } + + fn choice(client: &str, model: &str) -> Choice { + Choice { + client: client.to_string(), + model: model.to_string(), + } + } + + #[test] + fn a_failed_load_keeps_the_newer_list_and_shows_the_error() { + // Load 1 fetched a list that the cache file does not have, so load 2 + // fails with no list at all. + let mut state = ListState { + list: list(100), + started: 2, + shown: 1, + ..ListState::default() + }; + let failed = ListError::Failed("connection refused".to_string()); + + state.finish(2, None, Some(failed.clone())); + + assert!(!state.loading()); + assert_eq!(state.list, list(100)); + assert_eq!(state.error, Some(failed)); + } + + #[test] + fn ignores_a_load_that_finishes_after_a_newer_one() { + let mut state = ListState { + started: 2, + ..ListState::default() + }; + + state.finish(2, list(200), None); + state.finish(1, None, Some(ListError::Rejected(401))); + + assert!(!state.loading()); + assert_eq!(state.list, list(200)); + assert_eq!(state.error, None); + } + + #[test] + fn a_route_is_edited_when_the_algorithm_endpoint_or_model_changes() { + let saved = Draft { + algorithm: 3, + choices: vec![choice("hub", "sonnet"), choice("hub", "opus")], + }; + let same = [choice("hub", "sonnet"), choice("hub", "opus")]; + + assert!(!differs(&saved, 3, &same)); + // A space typed after a model ID is not a change. + assert!(!differs( + &saved, + 3, + &[choice("hub", "sonnet "), choice("hub", "opus")] + )); + assert!(differs(&saved, 4, &same)); + assert!(differs( + &saved, + 3, + &[choice("chat", "sonnet"), choice("hub", "opus")] + )); + assert!(differs( + &saved, + 3, + &[choice("hub", "sonnet"), choice("hub", "haiku")] + )); + assert!(differs(&saved, 3, &same[..1])); + } +} diff --git a/crates/switchyard-menubar/src/pricing.rs b/crates/switchyard-menubar/src/pricing.rs index e551bdd719..ed2a2382d9 100644 --- a/crates/switchyard-menubar/src/pricing.rs +++ b/crates/switchyard-menubar/src/pricing.rs @@ -79,6 +79,21 @@ pub fn estimate(totals: &Totals, prices: &PriceTable, baseline_model: &str) -> O Some(Savings { actual, baseline }) } +/// Returns the models in `models` that have no entry in `prices`, sorted and +/// each once. Such a model makes [`estimate`] return `None`. +pub fn unpriced<'a>( + models: impl IntoIterator, + prices: &PriceTable, +) -> Vec<&'a str> { + let mut missing: Vec<&str> = models + .into_iter() + .filter(|model| !prices.contains_key(*model)) + .collect(); + missing.sort_unstable(); + missing.dedup(); + missing +} + #[cfg(test)] mod tests { use super::*; @@ -183,4 +198,11 @@ mod tests { assert_eq!(savings.saved(), 0.0); assert!(savings.percent().is_none()); } + + #[test] + fn names_each_model_that_has_no_price_once() { + let models = ["sol", "mystery", "luna", "other", "mystery"]; + + assert_eq!(unpriced(models, &table()), ["mystery", "other"]); + } } diff --git a/crates/switchyard-menubar/src/server.rs b/crates/switchyard-menubar/src/server.rs new file mode 100644 index 0000000000..0b9beb3a51 --- /dev/null +++ b/crates/switchyard-menubar/src/server.rs @@ -0,0 +1,429 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Controls the installed server: check a config with its `--dry-run`, save +//! it, and restart the LaunchAgent that runs it. + +use std::fs::OpenOptions; +use std::io::{ErrorKind, Write}; +use std::path::{Path, PathBuf}; +use std::process::Command; +use std::time::{Duration, Instant}; + +use chrono::Local; + +use crate::config::Config; +use crate::health::{ServerStatus, probe}; +use crate::models; +use crate::server_config::{Algorithm, Choice, ServerConfig}; + +/// How long to wait for the restarted server to answer `/health`. +const RESTART_WAIT: Duration = Duration::from_secs(10); + +/// How many backups one file can get within one second. +const BACKUPS_PER_SECOND: u32 = 100; + +/// Switches a route to new models, checks the result with the server's +/// `--dry-run`, saves it, and restarts the server. +/// +/// Returns what happened on success, one line each: the saved file and its +/// backup, the restart, notes about the edit, and the check. An error means +/// the config file was not changed. +pub fn apply( + settings: &Config, + route: &str, + algorithm: &Algorithm, + choices: &[Choice], +) -> Result { + let path = &settings.config_file; + // Read the file again so an edit made while the window was open is kept. + let text = std::fs::read_to_string(path).map_err(|error| { + format!( + "Could not read {}: {error}. Check config_file in the menu bar settings.", + path.display() + ) + })?; + let config = ServerConfig::parse(&text)?; + let edited = config.edit(route, algorithm, choices)?; + if edited.text == text { + return Ok( + "Nothing to save. The route already uses this algorithm and these models.".to_string(), + ); + } + + let binary = server_binary()?; + let backup = save_checked(&binary, path, &text, &edited.text).map_err(explain)?; + let label = &settings.launchd_label; + let health = format!("{}/health", settings.server_url); + let mut lines = vec![format!( + "Saved {}. The old file is at {}.", + path.display(), + backup.display() + )]; + lines.push(match restart(label) { + Err(error) => format!( + "Could not restart {label}: {error}. The server uses the new config the next time \ + it starts. Click Restart server in the menu to try again." + ), + Ok(()) if wait_for_health(&settings.server_url) => { + format!("Restarted {label}, and the server answers {health}.") + } + Ok(()) => format!( + "Restarted {label}, but the server did not answer {health} within {} seconds. \ + Check the server log, by default in ~/.switchyard/logs/. To undo, copy {} over {} \ + and click Restart server.", + RESTART_WAIT.as_secs(), + backup.display(), + path.display() + ), + }); + lines.extend(edited.notes); + let routes = config.routes().len(); + let plural = if routes == 1 { "" } else { "s" }; + lines.push(format!( + "The switchyard-server --dry-run check passed for {routes} route{plural}." + )); + Ok(lines.join("\n")) +} + +/// Adds advice to a check error that comes from a missing `api_key_env` +/// variable. The check runs with this app's environment, which is not the +/// user's shell environment. +fn explain(error: String) -> String { + let variable = error + .split_once("could not read api_key_env ") + .and_then(|(_, rest)| rest.split([':', ' ', '\n']).next()) + .filter(|variable| !variable.is_empty()) + .map(str::to_string); + match variable { + Some(variable) => format!("{error}\n{}", models::missing_env_note(&variable)), + None => error, + } +} + +/// Returns the `switchyard-server` installed next to this app, which is the +/// binary that the server's LaunchAgent runs. +fn server_binary() -> Result { + std::env::current_exe() + .map(|exe| exe.with_file_name("switchyard-server")) + .map_err(|error| { + format!( + "Could not find switchyard-server next to the menu bar app: {error}. Run make \ + install-macos from the Switchyard repository to install it." + ) + }) +} + +/// Checks `text` with `switchyard-server --dry-run`, then replaces `path` +/// with it, keeping `original`, the text that `path` held, as a timestamped +/// backup. Returns the backup's path. +/// +/// The real file is `path`, or the file it points to when `path` is a +/// symlink. The new text goes to a temporary file next to the real file. The +/// temporary file is synced to disk and then renamed over the real file, so a +/// reader never sees a half-written config. When the check fails, or when +/// the real file no longer holds `original` after the backup is written, the +/// temporary file and the new backup are removed, `path` does not change, +/// and the error is returned. +fn save_checked(binary: &Path, path: &Path, original: &str, text: &str) -> Result { + // Resolve a symlink and replace the file it points to, so the link stays. + let file = std::fs::canonicalize(path) + .map_err(|error| format!("Could not find {}: {error}", path.display()))?; + let dir = file.parent().unwrap_or(Path::new("/")); + let mut candidate = tempfile::Builder::new() + .prefix(".switchyard-picker-") + .suffix(".toml") + .tempfile_in(dir) + .map_err(|error| format!("Could not create a file in {}: {error}", dir.display()))?; + candidate + .write_all(text.as_bytes()) + .and_then(|()| candidate.as_file().sync_all()) + .map_err(|error| format!("Could not write {}: {error}", candidate.path().display()))?; + if let Ok(metadata) = std::fs::metadata(&file) { + candidate + .as_file() + .set_permissions(metadata.permissions()) + .map_err(|error| { + format!( + "Could not copy the permissions of {}: {error}", + path.display() + ) + })?; + } + + // Name the real file in errors, not the temporary one. + check(binary, candidate.path()).map_err(|error| { + error.replace( + &candidate.path().display().to_string(), + &path.display().to_string(), + ) + })?; + + let backup = back_up(&file, original) + .map_err(|error| format!("Could not back up {}: {error}", path.display()))?; + // The check and the backup take a moment. Keep an edit that another + // program saved in the meantime. Compare right before the rename, because + // the rename replaces the file whatever it holds. + if std::fs::read_to_string(&file).ok().as_deref() != Some(original) { + let _ = std::fs::remove_file(&backup); + return Err(format!( + "Could not replace {}, because it changed on disk while Apply was checking it. \ + Click Apply again to apply your choices to the new file.", + path.display() + )); + } + candidate + .persist(&file) + .map_err(|error| format!("Could not replace {}: {}", path.display(), error.error))?; + Ok(backup) +} + +/// Writes `text` to a new backup of `file` and returns its path. The backup +/// is `.switchyard-backup.`, the name the installer uses, +/// with `-2`, `-3`, and so on added when that name is taken, so a backup +/// never replaces another one. The backup gets the file's permissions before +/// it gets the text. +fn back_up(file: &Path, text: &str) -> Result { + let permissions = std::fs::metadata(file)?.permissions(); + let stamp = Local::now().format("%Y%m%d%H%M%S"); + for number in 1..=BACKUPS_PER_SECOND { + let suffix = if number == 1 { + String::new() + } else { + format!("-{number}") + }; + let backup = PathBuf::from(format!( + "{}.switchyard-backup.{stamp}{suffix}", + file.display() + )); + let mut out = match OpenOptions::new() + .write(true) + .create_new(true) + .open(&backup) + { + Ok(out) => out, + Err(error) if error.kind() == ErrorKind::AlreadyExists => continue, + Err(error) => return Err(error), + }; + let written = out + .set_permissions(permissions.clone()) + .and_then(|()| out.write_all(text.as_bytes())) + .and_then(|()| out.sync_all()); + if let Err(error) = written { + let _ = std::fs::remove_file(&backup); + return Err(error); + } + return Ok(backup); + } + Err(std::io::Error::new( + ErrorKind::AlreadyExists, + format!("{BACKUPS_PER_SECOND} backups from this second already exist"), + )) +} + +/// Runs `switchyard-server --config --dry-run`, and returns its +/// error output when the config is invalid. +fn check(binary: &Path, config: &Path) -> Result<(), String> { + let output = Command::new(binary) + .arg("--config") + .arg(config) + .arg("--dry-run") + .output() + .map_err(|error| { + format!( + "Could not run {}: {error}. Apply needs switchyard-server next to the menu bar \ + app. Run make install-macos from the Switchyard repository to install it.", + binary.display() + ) + })?; + if output.status.success() { + return Ok(()); + } + let stdout = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let stderr = String::from_utf8_lossy(&output.stderr).trim().to_string(); + Err(if stderr.is_empty() { stdout } else { stderr }) +} + +/// Restarts the server's LaunchAgent. +pub fn restart(launchd_label: &str) -> Result<(), String> { + let uid = command("id", &["-u"])?; + let target = format!("gui/{}/{launchd_label}", uid.trim()); + command("launchctl", &["kickstart", "-k", &target]).map(|_| ()) +} + +fn wait_for_health(server_url: &str) -> bool { + let deadline = Instant::now() + RESTART_WAIT; + loop { + if probe(server_url) == ServerStatus::Running { + return true; + } + if Instant::now() >= deadline { + return false; + } + std::thread::sleep(Duration::from_millis(250)); + } +} + +/// Runs a command, returning its stdout or a message naming what failed. +pub fn command(program: &str, args: &[&str]) -> Result { + let output = Command::new(program) + .args(args) + .output() + .map_err(|error| format!("Could not run {program}: {error}"))?; + if !output.status.success() { + return Err(format!( + "{program} {} failed: {}", + args.join(" "), + String::from_utf8_lossy(&output.stderr).trim() + )); + } + Ok(String::from_utf8_lossy(&output.stdout).into_owned()) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::os::unix::fs::PermissionsExt; + + /// Writes a stand-in for `switchyard-server` that runs `body`. + fn fake_server(dir: &Path, body: &str) -> PathBuf { + let path = dir.join("switchyard-server"); + std::fs::write(&path, format!("#!/bin/sh\n{body}\n")).expect("write script"); + std::fs::set_permissions(&path, std::fs::Permissions::from_mode(0o755)) + .expect("make script executable"); + path + } + + fn backups(dir: &Path) -> Vec { + std::fs::read_dir(dir) + .expect("read dir") + .map(|entry| entry.expect("entry").path()) + .filter(|path| path.display().to_string().contains(".switchyard-backup.")) + .collect() + } + + #[test] + fn a_config_that_fails_the_check_is_not_saved() { + let dir = tempfile::tempdir().expect("tempdir"); + let config = dir.path().join("composite.toml"); + std::fs::write(&config, "old").expect("write config"); + // The real server names the file it was given; the error must name + // the user's file instead of the temporary copy. + let binary = fake_server( + dir.path(), + r#"echo "invalid server config $2: route gateway cannot forward both" >&2; exit 1"#, + ); + + let error = save_checked(&binary, &config, "old", "new").expect_err("check fails"); + + assert_eq!( + error, + format!( + "invalid server config {}: route gateway cannot forward both", + config.display() + ) + ); + assert_eq!(std::fs::read_to_string(&config).expect("read"), "old"); + assert!(backups(dir.path()).is_empty()); + assert_eq!( + std::fs::read_dir(dir.path()).expect("read dir").count(), + 2, + "the temporary file is removed" + ); + } + + #[test] + fn a_config_that_passes_the_check_replaces_the_file_and_keeps_a_backup() { + let dir = tempfile::tempdir().expect("tempdir"); + let config = dir.path().join("composite.toml"); + std::fs::write(&config, "old").expect("write config"); + std::fs::set_permissions(&config, std::fs::Permissions::from_mode(0o640)) + .expect("set permissions"); + let binary = fake_server( + dir.path(), + r#"grep -q new "$2" && echo "server OK: gateway""#, + ); + + let backup = save_checked(&binary, &config, "old", "new").expect("saved"); + + assert_eq!(std::fs::read_to_string(&config).expect("read"), "new"); + let mode = |path: &Path| { + std::fs::metadata(path) + .expect("metadata") + .permissions() + .mode() + & 0o777 + }; + assert_eq!(mode(&config), 0o640, "the file keeps its permissions"); + assert_eq!(backups(dir.path()).len(), 1); + assert_eq!(std::fs::read_to_string(&backup).expect("read"), "old"); + assert_eq!(mode(&backup), 0o640, "the backup gets the same permissions"); + } + + #[test] + fn a_second_save_keeps_the_first_backup() { + let dir = tempfile::tempdir().expect("tempdir"); + let config = dir.path().join("composite.toml"); + std::fs::write(&config, "old").expect("write config"); + let binary = fake_server(dir.path(), "exit 0"); + + // Both saves usually fall in the same second, so their backups get + // the same timestamp. + save_checked(&binary, &config, "old", "new").expect("saved"); + save_checked(&binary, &config, "new", "newer").expect("saved"); + + let mut kept: Vec = backups(dir.path()) + .iter() + .map(|backup| std::fs::read_to_string(backup).expect("read")) + .collect(); + kept.sort(); + assert_eq!(kept, ["new", "old"]); + assert_eq!(std::fs::read_to_string(&config).expect("read"), "newer"); + } + + #[test] + fn a_file_that_changes_during_the_check_is_not_replaced() { + let dir = tempfile::tempdir().expect("tempdir"); + let config = dir.path().join("composite.toml"); + std::fs::write(&config, "old").expect("write config"); + // Another program saves the file while the check runs. + let binary = fake_server( + dir.path(), + &format!("echo edited-elsewhere > '{}'", config.display()), + ); + + let error = save_checked(&binary, &config, "old", "new").expect_err("file changed"); + + assert!(error.contains(&config.display().to_string()), "{error}"); + assert_eq!( + std::fs::read_to_string(&config).expect("read"), + "edited-elsewhere\n" + ); + assert!(backups(dir.path()).is_empty()); + } + + #[test] + fn saving_through_a_symlink_replaces_the_linked_file() { + let dir = tempfile::tempdir().expect("tempdir"); + let real = dir.path().join("dotfiles.toml"); + let link = dir.path().join("composite.toml"); + std::fs::write(&real, "old").expect("write config"); + std::os::unix::fs::symlink(&real, &link).expect("symlink"); + let binary = fake_server(dir.path(), r#"echo "server OK: gateway""#); + + save_checked(&binary, &link, "old", "new").expect("saved"); + + let link_type = std::fs::symlink_metadata(&link) + .expect("metadata") + .file_type(); + assert!(link_type.is_symlink(), "the link is kept"); + assert_eq!(std::fs::read_to_string(&real).expect("read"), "new"); + } + + #[test] + fn reports_which_command_failed() { + let error = command("switchyard-does-not-exist", &[]).expect_err("missing program"); + + assert!(error.contains("switchyard-does-not-exist")); + } +} diff --git a/crates/switchyard-menubar/src/server_config.rs b/crates/switchyard-menubar/src/server_config.rs new file mode 100644 index 0000000000..a2e3c335de --- /dev/null +++ b/crates/switchyard-menubar/src/server_config.rs @@ -0,0 +1,1705 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Reads the server config and rewrites one route's algorithm and models. +//! +//! Edits go through `toml_edit`, so comments, formatting, and every table the +//! edit does not touch stay as the user wrote them. The server's own +//! `--dry-run` decides whether the result is valid; this module only builds it. + +use std::collections::HashMap; + +use toml_edit::{DocumentMut, Item, Table, TableLike, Value}; + +/// The part a model plays in a route. A choice made for one algorithm carries +/// over to the role with the same tier when the user switches algorithms. +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +pub enum Tier { + Judge, + Capable, + Efficient, +} + +/// A route `type` the picker can write. +#[derive(Debug)] +pub struct Algorithm { + pub kind: &'static str, + /// The name the window shows, in plain words. + pub title: &'static str, + pub summary: &'static str, + /// The roles, in the order the window lists them. The list is empty for + /// `random`, whose roles are the entries of its `targets` list. + roles: &'static [RoleSpec], + /// Required settings written when a route switches to this type. They + /// match the values the routing docs use in their examples. + settings: &'static [(&'static [&'static str], Setting)], + /// Whether the type accepts a nested `subagents` policy. + subagents: bool, +} + +/// One role of an algorithm. +#[derive(Debug)] +struct RoleSpec { + label: &'static str, + /// A sentence that says what the role does. + hint: &'static str, + tier: Tier, + /// The key path under the route that names the role's target. + path: &'static [&'static str], +} + +#[derive(Debug)] +enum Setting { + Text(&'static str), + Number(f64), +} + +impl Setting { + fn value(&self) -> Value { + match self { + Self::Text(text) => Value::from(*text), + Self::Number(number) => Value::from(*number), + } + } +} + +const RANDOM: &str = "random"; + +/// The route types from the routing docs, in the order the picker lists them. +/// `noop` and the experimental `prefill_router` are left out: one calls no +/// model, and the other needs a checkpoint file rather than models. +pub const ALGORITHMS: &[Algorithm] = &[ + Algorithm { + kind: "passthrough", + title: "Single model", + summary: "Sends every request to one model.", + roles: &[RoleSpec { + label: "Model", + hint: "This model answers every request.", + tier: Tier::Capable, + path: &["target"], + }], + settings: &[], + subagents: true, + }, + Algorithm { + kind: RANDOM, + title: "Random split", + summary: "Splits requests at random between the models, for A/B tests and baselines.", + roles: &[], + settings: &[], + subagents: false, + }, + Algorithm { + kind: "llm_classifier", + title: "Judge per request", + summary: "A judge model reads each request and picks the capable or the efficient model.", + roles: &[ + RoleSpec { + label: "Judge", + hint: "The judge reads each request and picks a model.", + tier: Tier::Judge, + path: &["classifier_target"], + }, + RoleSpec { + label: "Capable", + hint: "The capable model answers the hard requests.", + tier: Tier::Capable, + path: &["strong_target"], + }, + RoleSpec { + label: "Efficient", + hint: "The efficient model answers the easy requests.", + tier: Tier::Efficient, + path: &["weak_target"], + }, + ], + settings: &[ + (&["mode"], Setting::Text("capability")), + (&["base_threshold"], Setting::Number(0.5)), + ], + subagents: false, + }, + Algorithm { + kind: "composite", + title: "Judge plus stage router", + summary: "A judge picks the starting model on each user turn, and tool results move \ + requests between the capable and the efficient model.", + roles: &[ + RoleSpec { + label: "Judge", + hint: "The judge picks the starting model on each user turn.", + tier: Tier::Judge, + path: &["classifier", "target"], + }, + RoleSpec { + label: "Capable", + hint: "The capable model takes the hard steps.", + tier: Tier::Capable, + path: &["stage", "capable_target"], + }, + RoleSpec { + label: "Efficient", + hint: "The efficient model takes the easy steps.", + tier: Tier::Efficient, + path: &["stage", "efficient_target"], + }, + ], + settings: &[ + (&["classifier", "base_threshold"], Setting::Number(0.5)), + ( + &["classifier", "classify_trigger"], + Setting::Text("user_turn"), + ), + (&["stage", "confidence_threshold"], Setting::Number(0.5)), + ], + subagents: true, + }, + Algorithm { + kind: "stage_router", + title: "Stage router", + summary: "Tool results and agent progress move each request between the capable and \ + the efficient model.", + roles: &[ + RoleSpec { + label: "Capable", + hint: "The capable model takes the hard steps.", + tier: Tier::Capable, + path: &["capable_target"], + }, + RoleSpec { + label: "Efficient", + hint: "The efficient model takes the easy steps.", + tier: Tier::Efficient, + path: &["efficient_target"], + }, + ], + settings: &[ + (&["picker"], Setting::Text("efficient_first")), + (&["confidence_threshold"], Setting::Number(0.5)), + ], + subagents: true, + }, + Algorithm { + kind: "advisor", + title: "Executor and advisor", + summary: "The executor answers every turn, and a stronger advisor reviews its final \ + answers.", + roles: &[ + RoleSpec { + label: "Executor", + hint: "The executor answers every turn.", + tier: Tier::Efficient, + path: &["executor_target"], + }, + RoleSpec { + label: "Advisor", + hint: "The advisor reviews the executor's final answers.", + tier: Tier::Capable, + path: &["advisor_target"], + }, + ], + settings: &[], + subagents: false, + }, + Algorithm { + kind: "plan_execute", + title: "Plan, then execute", + summary: "The capable model inspects and plans. The efficient model takes over after \ + the first file edit.", + roles: &[ + RoleSpec { + label: "Capable", + hint: "The capable model inspects the code and plans.", + tier: Tier::Capable, + path: &["capable_target"], + }, + RoleSpec { + label: "Efficient", + hint: "The efficient model takes over after the first edit.", + tier: Tier::Efficient, + path: &["efficient_target"], + }, + ], + settings: &[], + subagents: false, + }, + Algorithm { + kind: "auto", + title: "Recommended preset", + summary: "A stage router that starts each request on the efficient model.", + roles: &[ + RoleSpec { + label: "Capable", + hint: "The capable model takes the hard steps.", + tier: Tier::Capable, + path: &["capable_target"], + }, + RoleSpec { + label: "Efficient", + hint: "The efficient model starts each request.", + tier: Tier::Efficient, + path: &["efficient_target"], + }, + ], + settings: &[], + subagents: false, + }, +]; + +/// Route keys every type accepts. Switching types keeps these and removes +/// the rest, so settings of the old type cannot fail the new type's checks. +const COMMON_ROUTE_KEYS: [&str; 6] = [ + "id", + "type", + "context_window", + "tool_calling", + "reasoning", + "vision", +]; + +/// Target settings that change the request body. The server keeps one +/// target per model on a client, so it rejects two targets that name the +/// same model on the same client with different values for these. +const REQUEST_SETTINGS: [&str; 3] = ["omit_body_fields", "reasoning_effort", "extra_body"]; + +/// Target settings that a route takes on when it uses the target. +const TARGET_SETTINGS: [&str; 4] = [ + "system_prompt", + "reasoning_effort", + "extra_body", + "omit_body_fields", +]; + +/// One entry under `[routes]`. +#[derive(Clone, Debug, PartialEq)] +pub struct Route { + /// The route's table name in this file. Callers never send it. + pub key: String, + /// The public model ID that callers send. + pub id: String, + pub kind: String, +} + +/// One entry under `[llm_clients]`. +#[derive(Clone, Debug, PartialEq)] +pub struct Client { + pub name: String, + pub format: String, + pub base_url: String, + pub api_key_env: Option, + pub forward_auth: bool, +} + +impl Client { + /// Returns the host in `base_url`, such as `chatgpt.com`. A port stays. + pub fn host(&self) -> &str { + let rest = self + .base_url + .split_once("://") + .map_or(self.base_url.as_str(), |(_, rest)| rest); + let authority = rest.split(['/', '?', '#']).next().unwrap_or(rest); + authority.rsplit('@').next().unwrap_or(authority) + } +} + +/// A model on an LLM client, as a target names it. +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct Choice { + pub client: String, + pub model: String, +} + +/// A model the algorithm needs, such as the judge. +#[derive(Clone, Debug, PartialEq)] +pub struct Role { + pub label: String, + /// A sentence that says what the role does. + pub hint: &'static str, + pub tier: Option, + slot: Slot, +} + +/// Where a route names a role's target. +#[derive(Clone, Debug, PartialEq)] +enum Slot { + /// A key path, such as `stage.capable_target`. + Key(&'static [&'static str]), + /// An entry of a random route's `targets` list. + Listed(usize), +} + +impl Slot { + /// Returns the slot's key path under the route, such as + /// `stage.capable_target`. + fn path(&self) -> String { + match self { + Self::Key(path) => path.join("."), + Self::Listed(_) => "targets".to_string(), + } + } +} + +/// The result of [`ServerConfig::edit`]. +#[derive(Debug)] +pub struct Edited { + /// The new config text. + pub text: String, + /// What the user should know about the edit, one sentence each. + pub notes: Vec, +} + +/// A parsed server config that keeps the original text's layout. +#[derive(Clone, Debug)] +pub struct ServerConfig { + doc: DocumentMut, + /// The `routes.name` and `targets.name` tables that sit inside blocks + /// another tool writes, each with the text of its block's first marker. + generated: HashMap, +} + +impl ServerConfig { + pub fn parse(text: &str) -> Result { + text.parse::() + .map(|doc| Self { + doc, + generated: generated_tables(text), + }) + .map_err(|error| { + format!( + "Could not parse the server config. Fix this TOML error and try again:\n\ + {error}" + ) + }) + } + + pub fn routes(&self) -> Vec { + entries(self.table("routes")) + .map(|(key, route)| Route { + key: key.to_string(), + id: text(route, "id").unwrap_or(key).to_string(), + kind: text(route, "type").unwrap_or_default().to_string(), + }) + .collect() + } + + pub fn clients(&self) -> Vec { + entries(self.table("llm_clients")) + .map(|(name, client)| Client { + name: name.to_string(), + format: text(client, "format").unwrap_or_default().to_string(), + base_url: text(client, "base_url").unwrap_or_default().to_string(), + api_key_env: text(client, "api_key_env").map(str::to_string), + forward_auth: client + .get("forward_auth") + .and_then(Item::as_bool) + .unwrap_or(false), + }) + .collect() + } + + /// Returns the text of the marker that opens the block another tool + /// writes around `[table.key]`, when the table sits inside one. That tool + /// overwrites the table the next time it runs. + pub fn generated_by(&self, table: &str, key: &str) -> Option<&str> { + self.generated + .get(&format!("{table}.{key}")) + .map(String::as_str) + } + + /// Returns the model IDs that targets name on `client`, sorted, each once. + pub fn models_on(&self, client: &str) -> Vec { + let mut models: Vec = entries(self.table("targets")) + .filter(|(_, target)| text(*target, "llm_client") == Some(client)) + .filter_map(|(_, target)| text(target, "id").map(str::to_string)) + .collect(); + models.sort(); + models.dedup(); + models + } + + /// Returns the algorithm a route uses now, or `None` when the picker + /// cannot show it, such as a custom-mode classifier whose groups are + /// free-form. + pub fn algorithm(&self, route: &str) -> Option<&'static Algorithm> { + let route = self.route(route)?; + if text(route, "mode") == Some("custom") { + return None; + } + let kind = text(route, "type")?; + ALGORITHMS.iter().find(|algorithm| algorithm.kind == kind) + } + + /// Returns the roles that `algorithm` needs on `route`. A random route + /// keeps its number of targets, and has at least two. + pub fn roles(&self, route: &str, algorithm: &Algorithm) -> Vec { + if algorithm.kind != RANDOM { + return algorithm + .roles + .iter() + .map(|spec| Role { + label: spec.label.to_string(), + hint: spec.hint, + tier: Some(spec.tier), + slot: Slot::Key(spec.path), + }) + .collect(); + } + let listed = self + .route(route) + .filter(|route| text(*route, "type") == Some(RANDOM)) + .and_then(|route| { + route + .get("targets")? + .as_array() + .map(|targets| targets.len()) + }) + .unwrap_or(0); + (0..listed.max(2)) + .map(|index| Role { + label: format!("Model {}", index + 1), + hint: "This model gets a share of the requests.", + tier: [Tier::Capable, Tier::Efficient].get(index).copied(), + slot: Slot::Listed(index), + }) + .collect() + } + + /// Returns the model that each role of the route's current algorithm + /// uses. A role whose target is missing gets an empty choice. + pub fn choices(&self, route: &str) -> Vec { + let Some(algorithm) = self.algorithm(route) else { + return Vec::new(); + }; + self.roles(route, algorithm) + .iter() + .map(|role| { + self.target_at(route, &role.slot) + .and_then(|name| self.target(name)) + .unwrap_or_default() + }) + .collect() + } + + /// Returns the config text with `route` switched to `algorithm`, using + /// one choice per role, and notes about the edit. + /// + /// For each role, in order of preference: keep the route's target when it + /// already names the model; use another target that names exactly this + /// model on this client when the route would get the same target + /// settings from it, or when the server would reject a second target for + /// that model; change the route's target in place when no other route or + /// role uses it, including a role earlier in this edit; otherwise add a + /// new target that copies it. A changed or copied target keeps settings + /// such as `extra_body` and `omit_body_fields`, including settings meant + /// for the old model. Targets no route uses any more are left in the file. + pub fn edit( + &self, + route: &str, + algorithm: &Algorithm, + choices: &[Choice], + ) -> Result { + if self.route(route).is_none() { + return Err(format!("The config has no [routes.{route}] table.")); + } + let roles = self.roles(route, algorithm); + if roles.len() != choices.len() { + return Err(format!( + "{} needs {} models, not {}.", + algorithm.kind, + roles.len(), + choices.len() + )); + } + let clients = self.clients(); + for (role, choice) in roles.iter().zip(choices) { + if choice.model.trim().is_empty() { + return Err(format!("Pick a model for {}.", role.label)); + } + if choice.client.is_empty() { + return Err(format!("Pick an endpoint for {}.", role.label)); + } + if !clients.iter().any(|client| client.name == choice.client) { + return Err(format!( + "The config has no LLM client named \"{}\".", + choice.client + )); + } + } + + let current = self.algorithm(route); + let same_type = current.is_some_and(|current| current.kind == algorithm.kind); + let old_roles = current + .map(|current| self.roles(route, current)) + .unwrap_or_default(); + // When the type changes, each new role starts from the old role with + // the same tier, so a composite's capable target stays the capable one. + let by_tier: Vec<(Option, &str)> = old_roles + .iter() + .filter_map(|role| Some((role.tier, self.target_at(route, &role.slot)?))) + .collect(); + let mut users = self.target_users(); + let place = self.new_target_position(); + + let mut doc = self.doc.clone(); + let mut names = Vec::with_capacity(roles.len()); + let mut notes = Vec::new(); + for (role, choice) in roles.iter().zip(choices) { + let existing = if same_type { + self.target_at(route, &role.slot) + } else { + role.tier.and_then(|tier| { + by_tier + .iter() + .find(|(old, _)| *old == Some(tier)) + .map(|(_, name)| *name) + }) + }; + let choice = Choice { + client: choice.client.clone(), + model: choice.model.trim().to_string(), + }; + let (name, moved_from) = + choose_target(&mut doc, &mut users, route, role, &choice, existing, place)?; + if let Some(old) = moved_from + && let Some(note) = kept_settings_note(&doc, &clients, &name, &old, &choice) + { + notes.push(note); + } + let mut others: Vec<&str> = users + .get(name.as_str()) + .into_iter() + .flatten() + .copied() + .filter(|other| *other != route) + .collect(); + others.dedup(); + if Some(name.as_str()) != existing && !others.is_empty() { + let plural = if others.len() == 1 { "" } else { "s" }; + notes.push(format!( + "{} now shares [targets.{name}] with route{plural} {}.", + role.label, + others.join(", ") + )); + } + names.push(name); + } + notes.extend(self.login_note(route, choices)); + notes.extend(self.generated_note(route, &names)); + + let table = doc + .get_mut("routes") + .and_then(Item::as_table_like_mut) + .and_then(|routes| routes.get_mut(route)) + .and_then(Item::as_table_like_mut) + .ok_or_else(|| format!("The config has no [routes.{route}] table."))?; + if !same_type { + let old_slots: Vec = old_roles.iter().map(|role| role.slot.path()).collect(); + let removed = reset_route(table, algorithm, &old_slots); + if !removed.is_empty() { + notes.push(format!( + "Switching to {} removed these settings from [routes.{route}]: {}. The \ + backup still has them.", + algorithm.kind, + removed.join(", ") + )); + } + } + for (role, name) in roles.iter().zip(&names) { + set_slot(table, &role.slot, name); + } + if !same_type { + for (path, setting) in algorithm.settings { + set_at(table, path, setting.value()); + } + } + Ok(Edited { + text: doc.to_string(), + notes, + }) + } + + fn table(&self, name: &str) -> Option<&dyn TableLike> { + self.doc.get(name)?.as_table_like() + } + + fn route(&self, route: &str) -> Option<&dyn TableLike> { + self.table("routes")?.get(route)?.as_table_like() + } + + fn target(&self, name: &str) -> Option { + let target = self.table("targets")?.get(name)?.as_table_like()?; + Some(Choice { + client: text(target, "llm_client")?.to_string(), + model: text(target, "id")?.to_string(), + }) + } + + fn target_at(&self, route: &str, slot: &Slot) -> Option<&str> { + let route = self.route(route)?; + match slot { + Slot::Key(path) => { + let (last, parents) = path.split_last()?; + let mut table = route; + for key in parents { + table = table.get(key)?.as_table_like()?; + } + text(table, last) + } + Slot::Listed(index) => route.get("targets")?.as_array()?.get(*index)?.as_str(), + } + } + + /// Returns, for each target name, the routes that name it: one entry per + /// mention in any route, nested policies included. A target with one + /// entry belongs to one role. + fn target_users(&self) -> HashMap<&str, Vec<&str>> { + let mut users: HashMap<&str, Vec<&str>> = entries(self.table("targets")) + .map(|(name, _)| (name, Vec::new())) + .collect(); + for (route, item) in self + .table("routes") + .into_iter() + .flat_map(|routes| routes.iter()) + { + visit_strings(item, &mut |text| { + if let Some(routes) = users.get_mut(text) { + routes.push(route); + } + }); + } + users + } + + /// Returns the file position for a new `[targets.*]` table. The table + /// goes after the last target outside every generated block, so that the + /// next rewrite of a block cannot delete it. When every target sits + /// inside a block, any other place is next to a generated target, so the + /// table goes before the first table of the file. + fn new_target_position(&self) -> Option { + self.table("targets")? + .iter() + .filter(|(key, _)| self.generated_by("targets", key).is_none()) + .filter_map(|(_, item)| item.as_table()?.position()) + .max() + .or_else(|| { + self.generated + .keys() + .any(|key| key.starts_with("targets.")) + .then_some(-1) + }) + } + + /// Says so when the edit sends the callers' logins to another host. A + /// client with `forward_auth` sends each caller's own login, and a caller + /// that has none for the new host gets HTTP 401. + fn login_note(&self, route: &str, choices: &[Choice]) -> Option { + let clients = self.clients(); + let before = login_hosts(&clients, &self.choices(route)); + let after = login_hosts(&clients, choices); + if after.iter().all(|host| before.contains(host)) { + return None; + } + let was = if before.is_empty() { + String::new() + } else { + format!(" It sent them to {} before.", before.join(" and ")) + }; + Some(format!( + "[routes.{route}] now sends each caller's own login to {}.{was} A caller that has \ + no login for the new host gets HTTP 401.", + after.join(" and ") + )) + } + + /// Returns a warning when the route sits inside a block that another tool + /// writes, which overwrites the route, or when the route uses targets + /// inside such a block, which that tool can change or remove. + fn generated_note(&self, route: &str, targets: &[String]) -> Option { + if let Some(block) = self.generated_by("routes", route) { + return Some(format!( + "[routes.{route}] sits inside a block that another tool writes. That tool \ + overwrites this change the next time it runs. Block marker: \"{block}\"." + )); + } + let inside: Vec = targets + .iter() + .filter(|name| self.generated_by("targets", name).is_some()) + .map(|name| format!("[targets.{name}]")) + .collect(); + let (verb, pronoun) = if inside.len() == 1 { + ("sits", "it") + } else { + ("sit", "them") + }; + (!inside.is_empty()).then(|| { + format!( + "[routes.{route}] uses {}, which {verb} inside a block that another tool \ + writes. The next time that tool runs, it can change or remove {pronoun}.", + inside.join(", ") + ) + }) + } +} + +/// Picks or writes the target that serves `choice` for one role. Returns its +/// name, and the model that the target named before when the edit changed +/// the target in place or copied it. Reusing a target adds the route to the +/// target's users, so a later role in the same edit copies that target +/// instead of changing it in place. +/// A new target goes at file position `place`, where the next rewrite of a +/// generated block cannot delete it. +fn choose_target<'a>( + doc: &mut DocumentMut, + users: &mut HashMap<&'a str, Vec<&'a str>>, + route: &'a str, + role: &Role, + choice: &Choice, + existing: Option<&str>, + place: Option, +) -> Result<(String, Option), String> { + let targets = doc + .get_mut("targets") + .and_then(Item::as_table_like_mut) + .ok_or("The config has no [targets] table.")?; + + let current = existing + .and_then(|name| targets.get(name)) + .and_then(Item::as_table_like); + if let Some(name) = existing + && current.is_some_and(|target| names_choice(target, choice)) + { + return Ok((name.to_string(), None)); + } + let old = current.and_then(|target| { + Some(Choice { + client: text(target, "llm_client")?.to_string(), + model: text(target, "id")?.to_string(), + }) + }); + if let Some(name) = reusable(&*targets, current, choice).map(str::to_string) { + if let Some(routes) = users.get_mut(name.as_str()) { + routes.push(route); + } + return Ok((name, None)); + } + if let Some(name) = existing + && users.get(name).is_some_and(|routes| routes.len() == 1) + && let Some(target) = targets.get_mut(name).and_then(Item::as_table_like_mut) + { + set_value(target, "id", Value::from(choice.model.as_str())); + set_value(target, "llm_client", Value::from(choice.client.as_str())); + return Ok((name.to_string(), old)); + } + + let mut table = Table::new(); + if let Some(source) = existing + .and_then(|name| targets.get(name)) + .and_then(Item::as_table_like) + { + for (key, item) in source.iter() { + let mut item = item.clone(); + unplace(&mut item); + table.insert(key, item); + } + } + set_value(&mut table, "id", Value::from(choice.model.as_str())); + set_value( + &mut table, + "llm_client", + Value::from(choice.client.as_str()), + ); + let base = format!("{route}_{}", role.label.to_lowercase().replace(' ', "_")); + let mut name = base.clone(); + let mut suffix = 1; + while targets.contains_key(&name) { + suffix += 1; + name = format!("{base}_{suffix}"); + } + // A table with no position is written after the last [targets.*] table in + // the file, which can sit inside a block that another tool writes. + table.set_position(place); + targets.insert(&name, Item::Table(table)); + Ok((name, old)) +} + +/// Returns a note about the request settings that a target kept when the +/// edit moved it from `old` to `new`, a model of another family or on a +/// client with another request format. A setting meant for the old model can +/// make the provider reject the new model's requests, and `--dry-run` does +/// not catch that. So the note lists the kept settings, or says that the +/// target has none, and the user decides. +fn kept_settings_note( + doc: &DocumentMut, + clients: &[Client], + name: &str, + old: &Choice, + new: &Choice, +) -> Option { + let format = |name: &str| { + clients + .iter() + .find(|client| client.name == name) + .map(|client| client.format.as_str()) + }; + if family(&old.model) == family(&new.model) && format(&old.client) == format(&new.client) { + return None; + } + let target = doc + .get("targets")? + .as_table_like()? + .get(name)? + .as_table_like()?; + let kept: Vec = REQUEST_SETTINGS + .iter() + .filter_map(|key| Some(format!("{key} = {}", setting(target, key)?))) + .collect(); + Some(if kept.is_empty() { + format!( + "[targets.{name}] now names {} and has no omit_body_fields, reasoning_effort, or \ + extra_body. Check whether the new model needs one of them.", + new.model + ) + } else { + format!( + "[targets.{name}] now names {} and kept {} from {}. Check that the new model \ + accepts these settings.", + new.model, + kept.join(", "), + old.model + ) + }) +} + +/// Returns a model's family: the first word of the last part of its ID, +/// such as `gpt` for `openai/gpt-5.6-sol`. +fn family(model: &str) -> String { + let name = model.rsplit('/').next().unwrap_or(model); + name.split(['-', '.', '_', ':']) + .next() + .unwrap_or(name) + .to_lowercase() +} + +/// Returns another target that names `choice` and that a role whose target +/// is `current` may use. The role takes on that target's settings. So it +/// uses a target with the same settings as `current`, or else a target whose +/// request settings differ from `current`, because the server would reject a +/// second target for this model with other request settings. +fn reusable<'t>( + targets: &'t dyn TableLike, + current: Option<&dyn TableLike>, + choice: &Choice, +) -> Option<&'t str> { + let same = |target: &dyn TableLike, keys: &[&str]| { + keys.iter() + .all(|key| setting(target, key) == current.and_then(|current| setting(current, key))) + }; + let candidates: Vec<(&str, &dyn TableLike)> = targets + .iter() + .filter_map(|(name, target)| Some((name, target.as_table_like()?))) + .filter(|(_, target)| names_choice(*target, choice)) + .collect(); + candidates + .iter() + .find(|(_, target)| same(*target, &TARGET_SETTINGS)) + .or_else(|| { + candidates + .iter() + .find(|(_, target)| !same(*target, &REQUEST_SETTINGS)) + }) + .map(|(name, _)| *name) +} + +/// Returns a target's setting as plain data, so the same value written in +/// another layout compares equal. +fn setting(target: &dyn TableLike, key: &str) -> Option { + let mut table = Table::new(); + table.insert(key, target.get(key)?.clone()); + DocumentMut::from(table) + .to_string() + .parse::() + .ok()? + .remove(key) +} + +/// Clears the file position of every table in `item`. A copied sub-table +/// then follows the header of the table it is copied into, not the header +/// of the table it came from. +fn unplace(item: &mut Item) { + if let Some(table) = item.as_table_mut() { + table.set_position(None); + for (_, child) in table.iter_mut() { + unplace(child); + } + } +} + +/// Returns whether a target names exactly this model on this client. +fn names_choice(target: &dyn TableLike, choice: &Choice) -> bool { + text(target, "llm_client") == Some(choice.client.as_str()) + && text(target, "id") == Some(choice.model.as_str()) +} + +/// Removes the old type's settings and sets the new `type`. Returns the +/// removed settings as key paths, such as `classifier.base_threshold`. The +/// list leaves out `old_slots`, the old roles' targets, which the new roles +/// replace. +fn reset_route( + route: &mut dyn TableLike, + algorithm: &Algorithm, + old_slots: &[String], +) -> Vec { + let kept = + |key: &str| COMMON_ROUTE_KEYS.contains(&key) || (algorithm.subagents && key == "subagents"); + let stale: Vec = route + .iter() + .map(|(key, _)| key) + .filter(|key| !kept(key)) + .map(str::to_string) + .collect(); + let mut removed = Vec::new(); + for key in stale { + if let Some(item) = route.remove(&key) { + key_paths(&key, &item, &mut removed); + } + } + removed.retain(|path| !old_slots.contains(path)); + set_value(route, "type", Value::from(algorithm.kind)); + removed +} + +/// Adds the key path of every value in `item` to `paths`. +fn key_paths(path: &str, item: &Item, paths: &mut Vec) { + match item.as_table_like() { + Some(table) => { + for (key, child) in table.iter() { + key_paths(&format!("{path}.{key}"), child, paths); + } + } + None => paths.push(path.to_string()), + } +} + +fn set_slot(route: &mut dyn TableLike, slot: &Slot, name: &str) { + match slot { + Slot::Key(path) => set_at(route, path, Value::from(name)), + Slot::Listed(index) => { + if !route.get("targets").is_some_and(Item::is_array) { + route.insert("targets", toml_edit::value(toml_edit::Array::new())); + } + if let Some(targets) = route.get_mut("targets").and_then(Item::as_array_mut) { + if *index < targets.len() { + targets.replace(*index, name); + } else { + targets.push(name); + } + } + } + } +} + +/// Sets a value at a key path, creating missing tables on the way. +fn set_at(table: &mut dyn TableLike, path: &[&str], value: Value) { + match path { + [] => {} + [key] => set_value(table, key, value), + [key, rest @ ..] => { + if !table.get(key).is_some_and(Item::is_table_like) { + table.insert(key, Item::Table(Table::new())); + } + if let Some(child) = table.get_mut(key).and_then(Item::as_table_like_mut) { + set_at(child, rest, value); + } + } + } +} + +/// Replaces a value, keeping the spacing and trailing comment around it. +fn set_value(table: &mut dyn TableLike, key: &str, mut value: Value) { + if let Some(old) = table.get_mut(key).and_then(Item::as_value_mut) { + *value.decor_mut() = old.decor().clone(); + *old = value; + } else { + table.insert(key, Item::Value(value)); + } +} + +fn entries(table: Option<&dyn TableLike>) -> impl Iterator { + table + .into_iter() + .flat_map(|table| table.iter()) + .filter_map(|(key, item)| Some((key, item.as_table_like()?))) +} + +fn text<'a>(table: &'a dyn TableLike, key: &str) -> Option<&'a str> { + table.get(key)?.as_str() +} + +fn visit_strings(item: &Item, visit: &mut dyn FnMut(&str)) { + match item { + Item::Value(value) => visit_value(value, visit), + Item::Table(table) => table + .iter() + .for_each(|(_, item)| visit_strings(item, visit)), + Item::ArrayOfTables(tables) => tables + .iter() + .flat_map(Table::iter) + .for_each(|(_, item)| visit_strings(item, visit)), + Item::None => {} + } +} + +fn visit_value(value: &Value, visit: &mut dyn FnMut(&str)) { + match value { + Value::String(text) => visit(text.value()), + Value::Array(array) => array.iter().for_each(|value| visit_value(value, visit)), + Value::InlineTable(table) => table + .iter() + .for_each(|(_, value)| visit_value(value, visit)), + _ => {} + } +} + +/// Returns the hosts that get the callers' own logins: the hosts of the +/// `forward_auth` clients that `choices` name, sorted, each once. +fn login_hosts<'c>(clients: &'c [Client], choices: &[Choice]) -> Vec<&'c str> { + let mut hosts: Vec<&str> = choices + .iter() + .filter_map(|choice| clients.iter().find(|client| client.name == choice.client)) + .filter(|client| client.forward_auth) + .map(Client::host) + .collect(); + hosts.sort_unstable(); + hosts.dedup(); + hosts +} + +/// Finds the route and target tables that sit inside blocks another tool +/// writes. A block starts at a line that begins with `# >>>` and ends at the +/// next line that begins with `# <<<`, the markers that the installer scripts +/// use. Each table maps to the text of its block's first marker, with the `#` +/// and the `>>>` removed. +fn generated_tables(text: &str) -> HashMap { + let mut tables = HashMap::new(); + let mut block: Option = None; + for line in text.lines().map(str::trim) { + if line.starts_with("# >>>") { + block = Some( + line.trim_matches(|c: char| c == '#' || c == '>' || c.is_whitespace()) + .to_string(), + ); + } else if line.starts_with("# <<<") { + block = None; + } else if let Some(block) = &block + && let Some(header) = line.strip_prefix('[') + && let Some((table, rest)) = header.split_once('.') + && matches!(table, "routes" | "targets") + && let Some(key) = table_key(rest) + { + tables + .entry(format!("{table}.{key}")) + .or_insert_with(|| block.clone()); + } + } + tables +} + +/// Returns the first key of a table header's dotted path, bare or in double +/// quotes: `name` for `name.child]`, and `a.b` for `"a.b"]`. +fn table_key(path: &str) -> Option<&str> { + if let Some(quoted) = path.strip_prefix('"') { + return quoted.split_once('"').map(|(key, _)| key); + } + path.split(['.', ']']).next().filter(|key| !key.is_empty()) +} + +#[cfg(test)] +mod tests { + use super::*; + + /// A composite route with a GPT judge on a Responses client and Claude on + /// a Chat Completions client, both on one gateway. + const GATEWAY: &str = r#"schema_version = 1 + +[llm_clients.gateway] +format = "openai_responses" +base_url = "https://gateway.example.com/v1" +forward_auth = true + +# Claude caches prompts on the chat endpoint. +[llm_clients.gateway_chat] +format = "openai_chat" +base_url = "https://gateway.example.com/v1" +forward_auth = true + +# The gateway rejects any thinking setting for these models. +[targets.gateway_capable] +id = "claude-opus-5-5" +llm_client = "gateway_chat" # chat, for caching +omit_body_fields = ["reasoning_effort"] + +[targets.gateway_efficient] +id = "claude-sonnet-5" +llm_client = "gateway_chat" +omit_body_fields = ["reasoning_effort"] + +[targets.gateway_judge] +id = "gpt-5.6-terra" +llm_client = "gateway" + +[routes.gateway] +id = "switchyard-gateway" +type = "composite" +context_window = 200000 + +[routes.gateway.classifier] +target = "gateway_judge" +base_threshold = 0.5 +classify_trigger = "user_turn" +message_hash_fallback = true + +[routes.gateway.stage] +capable_target = "gateway_capable" +efficient_target = "gateway_efficient" +confidence_threshold = 0.5 +"#; + + fn choice(client: &str, model: &str) -> Choice { + Choice { + client: client.to_string(), + model: model.to_string(), + } + } + + fn algorithm(kind: &str) -> &'static Algorithm { + ALGORITHMS + .iter() + .find(|algorithm| algorithm.kind == kind) + .expect("known algorithm") + } + + /// Edits the config and checks the result with the server's parser. + fn edit(text: &str, route: &str, kind: &str, choices: &[Choice]) -> Edited { + let edited = ServerConfig::parse(text) + .expect("parse") + .edit(route, algorithm(kind), choices) + .expect("edit"); + if let Err(error) = switchyard_runner::Runner::from_toml(&edited.text) { + panic!( + "the server rejects the edited config: {error}\n{}", + edited.text + ); + } + edited + } + + fn capable_target(config: &ServerConfig) -> Option<&str> { + config.target_at("gateway", &Slot::Key(&["stage", "capable_target"])) + } + + #[test] + fn every_algorithm_writes_a_config_the_server_accepts() { + let gateway = ServerConfig::parse(GATEWAY).expect("parse"); + let models = [ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway_chat", "claude-sonnet-5"), + ]; + for algorithm in ALGORITHMS { + let roles = gateway.roles("gateway", algorithm).len(); + + let edited = edit(GATEWAY, "gateway", algorithm.kind, &models[3 - roles..]); + + let config = ServerConfig::parse(&edited.text).expect("parse"); + assert_eq!( + config.algorithm("gateway").map(|a| a.kind), + Some(algorithm.kind) + ); + assert_eq!(config.choices("gateway"), models[3 - roles..]); + } + } + + #[test] + fn a_target_one_role_reuses_is_not_changed_for_another_role() { + // Capable moves to the efficient model, and Efficient to a new one. + let chosen = [ + choice("gateway", "gpt-5.6-terra"), + choice("gateway_chat", "claude-sonnet-5"), + choice("gateway", "gpt-5.6-luna"), + ]; + + let edited = edit(GATEWAY, "gateway", "composite", &chosen); + + assert_eq!( + ServerConfig::parse(&edited.text) + .expect("parse") + .choices("gateway"), + chosen + ); + } + + #[test] + fn switching_models_and_back_restores_the_file() { + let gpt = edit( + GATEWAY, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway", "gpt-5.6-luna"), + ], + ) + .text; + + let config = ServerConfig::parse(&gpt).expect("parse"); + assert_eq!( + config.choices("gateway"), + [ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway", "gpt-5.6-luna"), + ] + ); + assert!( + gpt.contains( + "[targets.gateway_capable]\nid = \"gpt-5.6-sol\"\nllm_client = \"gateway\" # chat, for caching\nomit_body_fields = [\"reasoning_effort\"]" + ), + "the target keeps its other settings and comments:\n{gpt}" + ); + + let claude = edit( + &gpt, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway_chat", "claude-opus-5-5"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + assert_eq!(claude.text, GATEWAY); + } + + #[test] + fn changing_the_algorithm_replaces_only_the_route_settings() { + let edited = edit( + GATEWAY, + "gateway", + "stage_router", + &[ + choice("gateway_chat", "claude-opus-5-5"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + + let config = ServerConfig::parse(&edited.text).expect("parse"); + assert_eq!( + config.algorithm("gateway").map(|a| a.kind), + Some("stage_router") + ); + let route = config.route("gateway").expect("route"); + assert_eq!(text(route, "id"), Some("switchyard-gateway")); + assert_eq!( + route.get("context_window").and_then(Item::as_integer), + Some(200000) + ); + assert_eq!(text(route, "capable_target"), Some("gateway_capable")); + assert_eq!(text(route, "efficient_target"), Some("gateway_efficient")); + assert_eq!(text(route, "picker"), Some("efficient_first")); + assert!(route.get("classifier").is_none() && route.get("stage").is_none()); + assert!( + edited.text.contains("[targets.gateway_judge]"), + "unused targets stay in the file" + ); + let removed = edited.notes.join("\n"); + assert!( + removed.contains("classifier.message_hash_fallback") + && !removed.contains("stage.capable_target"), + "the result lists the removed settings, not the replaced targets: {removed}" + ); + } + + #[test] + fn a_target_another_route_uses_is_copied_not_changed() { + // The shared target has a sub-table, which the copy must keep under + // its own header. + let shared = GATEWAY.replace( + "omit_body_fields = [\"reasoning_effort\"]\n\n[targets.gateway_efficient]", + "omit_body_fields = [\"reasoning_effort\"]\n\n[targets.gateway_capable.extra_body]\n\ + top_k = 5\n\n[targets.gateway_efficient]", + ) + "\n[routes.direct]\nid = \"direct\"\ntype = \"passthrough\"\ntarget = \"gateway_capable\"\n"; + + let edited = edit( + &shared, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + + let config = ServerConfig::parse(&edited.text).expect("parse"); + assert_eq!( + config.choices("direct"), + [choice("gateway_chat", "claude-opus-5-5")] + ); + assert_eq!( + config.choices("gateway")[1], + choice("gateway", "gpt-5.6-sol") + ); + let copy = capable_target(&config).expect("capable target"); + assert_ne!(copy, "gateway_capable"); + let targets = config.table("targets").expect("targets"); + let (source, copied) = ( + targets.get("gateway_capable").and_then(Item::as_table_like), + targets.get(copy).and_then(Item::as_table_like), + ); + for key in TARGET_SETTINGS { + assert_eq!( + source.and_then(|target| setting(target, key)), + copied.and_then(|target| setting(target, key)), + "the copy keeps {key}" + ); + } + let header = |name: &str| edited.text.find(&format!("[{name}]")).expect(name); + assert!( + header(&format!("targets.{copy}")) < header(&format!("targets.{copy}.extra_body")), + "the copied sub-table follows the copy's header:\n{}", + edited.text + ); + } + + #[test] + fn uses_another_routes_target_only_when_the_route_keeps_its_settings_or_must_share() { + // `prompted` names the model that Capable moves to, and has a + // system prompt that the gateway route does not have. + for (omit, shared) in [ + // Same request settings: the server accepts a second target for + // the model, so Capable keeps its own target. + ("omit_body_fields = [\"reasoning_effort\"]\n", false), + // Other request settings: the server would reject a second + // target, so Capable shares `prompted`, and the result says so. + ("", true), + ] { + let text = format!( + "{GATEWAY}\n[targets.prompted]\nid = \"gpt-5.6-sol\"\nllm_client = \"gateway\"\n\ + system_prompt = \"You answer for route other.\"\n{omit}\n[routes.other]\n\ + id = \"other\"\ntype = \"passthrough\"\ntarget = \"prompted\"\n" + ); + + let edited = edit( + &text, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + + let config = ServerConfig::parse(&edited.text).expect("parse"); + assert_eq!( + config.choices("gateway")[1], + choice("gateway", "gpt-5.6-sol") + ); + assert_eq!( + capable_target(&config) == Some("prompted"), + shared, + "{omit}" + ); + assert_eq!( + edited + .notes + .iter() + .any(|note| note.contains("prompted") && note.contains("other")), + shared, + "{:?}", + edited.notes + ); + } + } + + #[test] + fn a_move_to_another_model_family_reports_the_settings_the_target_kept() { + let gpt = edit( + GATEWAY, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway", "gpt-5.6-luna"), + ], + ) + .text; + + // The judge target has no request settings, and the capable target + // keeps omit_body_fields from its GPT model. Efficient stays. + let edited = edit( + &gpt, + "gateway", + "composite", + &[ + choice("gateway_chat", "claude-haiku-4-5"), + choice("gateway_chat", "claude-opus-5-5"), + choice("gateway", "gpt-5.6-luna"), + ], + ); + + let note = |target: &str| { + edited + .notes + .iter() + .find(|note| note.contains(&format!("[targets.{target}]"))) + .cloned() + }; + let capable = note("gateway_capable").expect("a note for the capable target"); + assert!( + capable.contains("claude-opus-5-5") + && capable.contains(r#"omit_body_fields = ["reasoning_effort"]"#), + "{capable}" + ); + let judge = note("gateway_judge").expect("a note for the judge target"); + assert!( + judge.contains("claude-haiku-4-5") && !judge.contains(" = "), + "{judge}" + ); + assert_eq!(note("gateway_efficient"), None); + } + + #[test] + fn rejects_a_missing_model_or_an_unknown_client() { + let config = ServerConfig::parse(GATEWAY).expect("parse"); + for (capable, named) in [ + (choice("gateway", " "), "Capable"), + (choice("typo", "gpt-5.6-sol"), "typo"), + ] { + let error = config + .edit( + "gateway", + algorithm("composite"), + &[ + choice("gateway", "gpt-5.6-terra"), + capable, + choice("gateway", "gpt-5.6-luna"), + ], + ) + .expect_err("invalid choice"); + + assert!(error.contains(named), "{error}"); + } + } + + /// A config whose last target and route sit inside a block that a script + /// writes. A hand-written route shares the capable target. + fn with_generated_block() -> String { + format!( + "{GATEWAY}\n[routes.direct]\nid = \"direct\"\ntype = \"passthrough\"\n\ + target = \"gateway_capable\"\n\n\ + # >>> sync: generated by sync.py; edits between the markers are overwritten >>>\n\n\ + [targets.generated]\nid = \"gpt-5.5\"\nllm_client = \"gateway\"\n\n\ + [routes.generated]\nid = \"generated\"\ntype = \"passthrough\"\n\ + target = \"generated\"\n\n# <<< sync <<<\n" + ) + } + + #[test] + fn a_new_target_goes_before_a_generated_block_not_inside_it() { + // Another route uses the capable target, so Capable gets a copy. + let edited = edit( + &with_generated_block(), + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + + let config = ServerConfig::parse(&edited.text).expect("parse"); + let copy = capable_target(&config).expect("capable target"); + assert_ne!(copy, "gateway_capable"); + assert_eq!(config.generated_by("targets", copy), None); + let at = |needle: &str| edited.text.find(needle).expect(needle); + assert!( + at(&format!("[targets.{copy}]")) < at("# >>> sync"), + "the next rewrite of the block would delete the copy:\n{}", + edited.text + ); + } + + #[test] + fn a_new_target_goes_before_the_first_table_when_every_target_is_generated() { + // A script writes every target in a block above the hand-written + // routes. Another route uses the capable target, so Capable gets a + // copy. + let text = GATEWAY + .replace( + "# The gateway rejects", + "# >>> sync: generated by sync.py; edits between the markers are overwritten >>>\n\ + # The gateway rejects", + ) + .replace("[routes.gateway]\n", "# <<< sync <<<\n\n[routes.gateway]\n") + + "\n[routes.direct]\nid = \"direct\"\ntype = \"passthrough\"\n\ + target = \"gateway_capable\"\n"; + + let edited = edit( + &text, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + + let config = ServerConfig::parse(&edited.text).expect("parse"); + let copy = capable_target(&config).expect("capable target"); + assert_ne!(copy, "gateway_capable"); + assert_eq!(config.generated_by("targets", copy), None); + let at = |needle: &str| edited.text.find(needle).expect(needle); + assert!( + at(&format!("[targets.{copy}]")) < at("# >>> sync"), + "the next rewrite of the block would delete the copy:\n{}", + edited.text + ); + } + + #[test] + fn finds_the_tables_inside_generated_blocks() { + let text = with_generated_block().replace( + "# <<< sync <<<", + "[routes.\"quoted.key\"]\nid = \"q\"\ntype = \"passthrough\"\ntarget = \"generated\"\n\n\ + # <<< sync <<<", + ); + + let config = ServerConfig::parse(&text).expect("parse"); + + let block = "sync: generated by sync.py; edits between the markers are overwritten"; + assert_eq!(config.generated_by("routes", "generated"), Some(block)); + assert_eq!(config.generated_by("targets", "generated"), Some(block)); + assert_eq!(config.generated_by("routes", "quoted.key"), Some(block)); + assert_eq!(config.generated_by("routes", "gateway"), None); + assert_eq!(config.generated_by("routes", "direct"), None); + assert_eq!(config.generated_by("targets", "gateway_capable"), None); + } + + #[test] + fn warns_when_a_change_is_inside_a_generated_block() { + let text = with_generated_block(); + + // A route inside the block: the tool overwrites the change. + let inside = edit( + &text, + "generated", + "passthrough", + &[choice("gateway", "gpt-5.6-sol")], + ); + assert!( + inside + .notes + .iter() + .any(|note| note.contains("[routes.generated]") && note.contains("overwrites")), + "{:?}", + inside.notes + ); + + // A hand-written route that ends up on a target inside the block. + let outside = edit( + &text, + "direct", + "passthrough", + &[choice("gateway", "gpt-5.5")], + ); + assert!( + outside.notes.iter().any( + |note| note.contains("[routes.direct]") && note.contains("[targets.generated]") + ), + "{:?}", + outside.notes + ); + } + + #[test] + fn says_when_the_callers_logins_go_to_another_host() { + let text = GATEWAY.replace( + "[targets.gateway_capable]", + "[llm_clients.other]\nformat = \"openai_responses\"\nbase_url = \ + \"https://login.example.org/v1\"\nforward_auth = true\n\n[targets.gateway_capable]", + ); + let login = |edited: &Edited| { + edited + .notes + .iter() + .find(|note| note.contains("login")) + .cloned() + }; + + let moved = edit( + &text, + "gateway", + "composite", + &[ + choice("other", "a"), + choice("other", "b"), + choice("other", "c"), + ], + ); + let note = login(&moved).expect("a note about the login"); + assert!( + note.contains("login.example.org") && note.contains("gateway.example.com"), + "{note}" + ); + + let same_host = edit( + &text, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway_chat", "claude-opus-5-5"), + choice("gateway_chat", "claude-haiku-4-5"), + ], + ); + assert_eq!(login(&same_host), None); + } + + #[test] + fn lists_the_models_a_client_already_serves() { + let config = ServerConfig::parse(GATEWAY).expect("parse"); + + assert_eq!( + config.models_on("gateway_chat"), + ["claude-opus-5-5", "claude-sonnet-5"] + ); + assert_eq!(config.models_on("gateway"), ["gpt-5.6-terra"]); + assert!(config.models_on("missing").is_empty()); + } + + #[test] + fn names_the_host_and_port_of_a_client_without_its_path_or_login() { + let client = |base_url: &str| Client { + name: "c".to_string(), + format: "openai_chat".to_string(), + base_url: base_url.to_string(), + api_key_env: None, + forward_auth: false, + }; + + assert_eq!( + client("https://chatgpt.com/backend-api/codex").host(), + "chatgpt.com" + ); + assert_eq!( + client("http://user@127.0.0.1:8000/v1?x=1").host(), + "127.0.0.1:8000" + ); + } +} diff --git a/crates/switchyard-menubar/src/sidebar.rs b/crates/switchyard-menubar/src/sidebar.rs new file mode 100644 index 0000000000..222c557260 --- /dev/null +++ b/crates/switchyard-menubar/src/sidebar.rs @@ -0,0 +1,331 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! The route list at the left of the routes window: one entry per route, in +//! two groups. +//! +//! The table view asks [`SidebarSource`] for its rows. A pick goes into a +//! queue that the window reads by calling [`SidebarSource::take_picks`], so a +//! pick that AppKit sends does not reenter the window. Selection changes that +//! the window makes itself, when it redraws the rows, are not picks. + +use std::cell::{Cell, RefCell}; + +use objc2::rc::Retained; +use objc2::runtime::ProtocolObject; +use objc2::{DefinedClass, MainThreadOnly, define_class, msg_send}; +use objc2_app_kit::{ + NSColor, NSControlTextEditingDelegate, NSFont, NSLineBreakMode, NSScrollView, NSTableCellView, + NSTableColumn, NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTableViewStyle, + NSTextField, NSView, NSVisualEffectBlendingMode, NSVisualEffectMaterial, NSVisualEffectState, + NSVisualEffectView, +}; +use objc2_foundation::{ + MainThreadMarker, NSIndexSet, NSInteger, NSNotification, NSObject, NSObjectProtocol, NSString, + ns_string, +}; + +use crate::picker::rect; + +pub const WIDTH: f64 = 210.0; +const ROW_HEIGHT: f64 = 28.0; + +/// One row of the sidebar. +pub enum SidebarRow { + /// A group title. The user cannot pick it. + Header(&'static str), + /// A route: its index in the window's route list, and the text to show. + Route { route: usize, title: String }, +} + +/// One route as the sidebar lists it. +pub struct Entry<'a> { + pub title: &'a str, + /// Whether the route sends every request to one model. + pub single_model: bool, + /// Whether the user changed the route and has not applied the change. + pub edited: bool, +} + +/// Builds the rows: the routes that choose between models, then the routes +/// that send every request to one model. The group titles show only when both +/// groups have routes, because a list of one kind needs no titles. An edited +/// route gets a dot. +pub fn rows(entries: &[Entry]) -> Vec { + let group = |single_model: bool| { + entries + .iter() + .enumerate() + .filter(move |(_, entry)| entry.single_model == single_model) + .map(|(route, entry)| SidebarRow::Route { + route, + title: if entry.edited { + format!("{} •", entry.title) + } else { + entry.title.to_string() + }, + }) + .collect::>() + }; + let (routers, singles) = (group(false), group(true)); + let titled = !routers.is_empty() && !singles.is_empty(); + let mut rows = Vec::with_capacity(entries.len() + 2); + for (title, group) in [ + ("Multi-model routes", routers), + ("Single-model routes", singles), + ] { + if titled { + rows.push(SidebarRow::Header(title)); + } + rows.extend(group); + } + rows +} + +/// What the table view reads, and what it reports. +#[derive(Default)] +pub struct State { + rows: RefCell>, + picks: RefCell>, + /// Whether the window is redrawing the rows. The table view reports the + /// selection changes that the redraw causes, and they are not picks. + redrawing: Cell, +} + +define_class!( + /// Gives the route table its rows and queues the row that the user picks. + // SAFETY: NSObject has no subclassing requirements, and `SidebarSource` + // does not implement `Drop`. + #[unsafe(super(NSObject))] + #[thread_kind = MainThreadOnly] + #[name = "SwitchyardSidebarSource"] + #[ivars = State] + pub struct SidebarSource; + + impl SidebarSource { + // SAFETY: the signature matches the protocol method. + #[unsafe(method(numberOfRowsInTableView:))] + fn number_of_rows(&self, _table: &NSTableView) -> NSInteger { + NSInteger::try_from(self.ivars().rows.borrow().len()).unwrap_or(0) + } + + // SAFETY: the signature matches the protocol method. + #[unsafe(method_id(tableView:viewForTableColumn:row:))] + fn view_for_row( + &self, + _table: &NSTableView, + _column: Option<&NSTableColumn>, + row: NSInteger, + ) -> Option> { + self.view_at(row) + } + + // SAFETY: the signature matches the protocol method. + #[unsafe(method(tableView:isGroupRow:))] + fn is_group_row(&self, _table: &NSTableView, row: NSInteger) -> bool { + self.is_header(row) + } + + // SAFETY: the signature matches the protocol method. + #[unsafe(method(tableView:shouldSelectRow:))] + fn should_select_row(&self, _table: &NSTableView, row: NSInteger) -> bool { + !self.is_header(row) + } + + // SAFETY: the signature matches the protocol method. + #[unsafe(method(tableViewSelectionDidChange:))] + fn selection_did_change(&self, notification: &NSNotification) { + if self.ivars().redrawing.get() { + return; + } + let table = notification + .object() + .and_then(|object| object.downcast::().ok()); + if let Some(row) = table.and_then(|table| usize::try_from(table.selectedRow()).ok()) { + self.ivars().picks.borrow_mut().push(row); + } + } + } + + unsafe impl NSObjectProtocol for SidebarSource {} + unsafe impl NSControlTextEditingDelegate for SidebarSource {} + unsafe impl NSTableViewDataSource for SidebarSource {} + unsafe impl NSTableViewDelegate for SidebarSource {} +); + +impl SidebarSource { + pub fn new(mtm: MainThreadMarker) -> Retained { + let this = Self::alloc(mtm).set_ivars(State::default()); + // SAFETY: NSObject's `init` has this signature. + unsafe { msg_send![super(this), init] } + } + + /// Shows `rows` in `table` and selects the row of `route`. The table + /// view clears the selection when it reloads, and it selects the first + /// route because it does not allow an empty selection. The window must + /// not read either change as a pick. + pub fn show(&self, table: &NSTableView, rows: Vec, route: usize) { + *self.ivars().rows.borrow_mut() = rows; + self.ivars().redrawing.set(true); + table.reloadData(); + if let Some(row) = self.row_of(route) { + table.selectRowIndexes_byExtendingSelection(&NSIndexSet::indexSetWithIndex(row), false); + table.scrollRowToVisible(isize::try_from(row).unwrap_or(0)); + } + self.ivars().redrawing.set(false); + } + + /// Returns the rows that the user picked since the last call. + pub fn take_picks(&self) -> Vec { + std::mem::take(&mut *self.ivars().picks.borrow_mut()) + } + + /// Builds the view for a row, or `None` when the table asks for a row + /// that does not exist. + fn view_at(&self, row: NSInteger) -> Option> { + let rows = self.ivars().rows.borrow(); + let row = rows.get(usize::try_from(row).ok()?)?; + Some(row_view(self.mtm(), row)) + } + /// Returns the route that a row shows, or `None` for a group title. + pub fn route_at(&self, row: usize) -> Option { + match self.ivars().rows.borrow().get(row)? { + SidebarRow::Route { route, .. } => Some(*route), + SidebarRow::Header(_) => None, + } + } + + /// Returns the row that shows a route. + pub fn row_of(&self, route: usize) -> Option { + self.ivars().rows.borrow().iter().position( + |row| matches!(row, SidebarRow::Route { route: shown, .. } if *shown == route), + ) + } + + fn is_header(&self, row: NSInteger) -> bool { + usize::try_from(row).is_ok_and(|row| { + matches!( + self.ivars().rows.borrow().get(row), + Some(SidebarRow::Header(_)) + ) + }) + } +} + +fn row_view(mtm: MainThreadMarker, row: &SidebarRow) -> Retained { + let (text, header) = match row { + SidebarRow::Header(title) => ((*title).to_string(), true), + SidebarRow::Route { title, .. } => (title.clone(), false), + }; + let label = NSTextField::labelWithString(&NSString::from_str(&text), mtm); + if header { + label.setFont(Some(&NSFont::boldSystemFontOfSize( + NSFont::smallSystemFontSize(), + ))); + label.setTextColor(Some(&NSColor::secondaryLabelColor())); + } + label.setLineBreakMode(NSLineBreakMode::ByTruncatingTail); + label.setFrame(rect(10.0, 5.0, WIDTH - 36.0, 18.0)); + // SAFETY: NSView's `initWithFrame:` has this signature. + let cell: Retained = unsafe { + msg_send![NSTableCellView::alloc(mtm), initWithFrame: rect(0.0, 0.0, WIDTH, ROW_HEIGHT)] + }; + cell.addSubview(&label); + // The cell view recolors its text field when the row is selected. + // SAFETY: the label is a text field, which `textField` takes. + unsafe { cell.setTextField(Some(&label)) }; + Retained::into_super(cell) +} + +/// Builds the sidebar: a translucent panel that holds the route table. +/// `source` must live as long as the returned views. +pub fn build( + mtm: MainThreadMarker, + source: &SidebarSource, + height: f64, +) -> (Retained, Retained) { + let frame = rect(0.0, 0.0, WIDTH, height); + let panel = NSVisualEffectView::initWithFrame(NSVisualEffectView::alloc(mtm), frame); + panel.setMaterial(NSVisualEffectMaterial::Sidebar); + panel.setBlendingMode(NSVisualEffectBlendingMode::BehindWindow); + panel.setState(NSVisualEffectState::FollowsWindowActiveState); + + let table = NSTableView::initWithFrame(NSTableView::alloc(mtm), frame); + let column = NSTableColumn::initWithIdentifier(NSTableColumn::alloc(mtm), ns_string!("route")); + column.setWidth(WIDTH - 20.0); + table.addTableColumn(&column); + table.setHeaderView(None); + table.setStyle(NSTableViewStyle::SourceList); + table.setBackgroundColor(&NSColor::clearColor()); + table.setRowHeight(ROW_HEIGHT); + table.setAllowsEmptySelection(false); + // SAFETY: the caller keeps `source` alive as long as the table. + unsafe { + table.setDataSource(Some(ProtocolObject::from_ref(source))); + table.setDelegate(Some(ProtocolObject::from_ref(source))); + } + + // The list starts a little below the title bar. + let scroll = NSScrollView::initWithFrame( + NSScrollView::alloc(mtm), + rect(0.0, 0.0, WIDTH, height - 10.0), + ); + scroll.setDrawsBackground(false); + scroll.setHasVerticalScroller(true); + scroll.setAutohidesScrollers(true); + scroll.setDocumentView(Some(&table)); + panel.addSubview(&scroll); + (panel, table) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn entry(title: &str, single_model: bool, edited: bool) -> Entry<'_> { + Entry { + title, + single_model, + edited, + } + } + + /// Describes the rows as text: `#` for a group title, `-` for a route. + fn describe(rows: &[SidebarRow]) -> Vec { + rows.iter() + .map(|row| match row { + SidebarRow::Header(title) => format!("# {title}"), + SidebarRow::Route { route, title } => format!("- {route} {title}"), + }) + .collect() + } + + #[test] + fn lists_the_multi_model_routes_first_and_keeps_each_route_index() { + let rows = rows(&[ + entry("gpt-6-sol", true, false), + entry("switchyard", false, true), + entry("gpt-6-luna", true, false), + ]); + + assert_eq!( + describe(&rows), + [ + "# Multi-model routes", + "- 1 switchyard •", + "# Single-model routes", + "- 0 gpt-6-sol", + "- 2 gpt-6-luna", + ] + ); + } + + #[test] + fn a_list_of_one_kind_has_no_group_titles() { + let singles = rows(&[entry("a", true, false), entry("b", true, false)]); + let routers = rows(&[entry("a", false, false)]); + + assert_eq!(describe(&singles), ["- 0 a", "- 1 b"]); + assert_eq!(describe(&routers), ["- 0 a"]); + } +} diff --git a/crates/switchyard-menubar/src/summary.rs b/crates/switchyard-menubar/src/summary.rs index 9c18cb6e26..49e5123951 100644 --- a/crates/switchyard-menubar/src/summary.rs +++ b/crates/switchyard-menubar/src/summary.rs @@ -5,7 +5,7 @@ use crate::config::Config; use crate::health::ServerStatus; -use crate::pricing::{Savings, estimate}; +use crate::pricing::{Savings, estimate, unpriced}; use crate::rollup::{Totals, Usage}; /// Most model rows shown, so the menu stays short. @@ -49,13 +49,39 @@ pub fn build(status: ServerStatus, usage: &Usage, config: &Config) -> Vec { rows.extend(models); } - if estimate(&usage.week, &config.prices, &config.baseline_model).is_none() { + if config.prices.is_empty() { rows.push(Row::Separator); rows.push(label("Add prices to menubar.toml to see savings")); + } else { + let seen = usage + .week + .routed + .keys() + .chain(usage.week.classifier.keys()) + .map(String::as_str); + let baseline = std::iter::once(config.baseline_model.as_str()); + let missing = unpriced(seen.chain(baseline), &config.prices); + if !missing.is_empty() { + rows.push(Row::Separator); + rows.push(label(format!( + "Savings hidden for this week: menubar.toml has no price for {}", + listed(&missing) + ))); + } } rows } +/// Names at most three models, so that the menu row stays short. +fn listed(models: &[&str]) -> String { + match models { + [first, second, third, rest @ ..] if !rest.is_empty() => { + format!("{first}, {second}, {third}, and {} more", rest.len()) + } + _ => models.join(", "), + } +} + fn period(name: &str, totals: &Totals, config: &Config) -> Vec { let requests = totals.requests(); let mut rows = vec![label(format!( @@ -282,4 +308,66 @@ mod tests { assert_eq!(money(2.181), "$2.18"); assert_eq!(money(-0.125), "-$0.12"); } + + #[test] + fn names_the_models_that_keep_the_weeks_savings_hidden() { + let mut today = Totals::default(); + today + .routed + .insert("luna".to_string(), counted(1_000, 100, 1)); + let mut week = today.clone(); + week.routed + .insert("mystery".to_string(), counted(1_000, 100, 1)); + + let rows = build( + ServerStatus::Running, + &usage_of(today, week), + &config(priced()), + ); + let labels = labels(&rows); + + // Every model of today has a price, so today still shows its saving. + let saved = labels + .iter() + .filter(|label| label.contains("Saved")) + .count(); + assert_eq!(saved, 1, "{labels:?}"); + assert!( + labels.iter().any(|label| label + == "Savings hidden for this week: menubar.toml has no price for mystery"), + "{labels:?}" + ); + } + + #[test] + fn names_the_baseline_model_when_it_has_no_price() { + let mut week = Totals::default(); + week.routed + .insert("luna".to_string(), counted(1_000, 100, 1)); + let mut prices = priced(); + prices.remove("sol"); + + let rows = build( + ServerStatus::Running, + &usage_of(week.clone(), week), + &config(prices), + ); + + let labels = labels(&rows); + assert!( + labels.contains( + &"Savings hidden for this week: menubar.toml has no price for sol".to_string() + ), + "{labels:?}" + ); + } + + #[test] + fn shortens_a_long_list_of_unpriced_models() { + let names = ["a", "b", "c", "d", "e"]; + + assert_eq!(listed(&names), "a, b, c, and 2 more"); + assert_eq!(listed(&names[..3]), "a, b, c"); + assert_eq!(listed(&names[..1]), "a"); + } } diff --git a/crates/switchyard-menubar/src/tray.rs b/crates/switchyard-menubar/src/tray.rs index 7a39c87dab..26cc92d8cc 100644 --- a/crates/switchyard-menubar/src/tray.rs +++ b/crates/switchyard-menubar/src/tray.rs @@ -3,25 +3,29 @@ //! The macOS status item: event loop, menu, and the menu's actions. //! -//! Everything platform-specific lives here, so the rest of the crate builds -//! and is tested on any target. +//! Everything platform-specific lives here and in the routes window, so the +//! rest of the crate builds and is tested on any target. -use std::path::PathBuf; -use std::process::Command; +use objc2::rc::autoreleasepool; +use std::path::Path; use std::thread; -use std::time::{Duration, Instant}; +use std::time::{Duration, Instant, SystemTime}; -use objc2::rc::autoreleasepool; -use objc2_app_kit::{NSApplication, NSApplicationActivationPolicy, NSEventMask}; -use objc2_foundation::{MainThreadMarker, NSDate, NSDefaultRunLoopMode}; -use tray_icon::menu::{IsMenuItem, Menu, MenuEvent, MenuItem, PredefinedMenuItem}; +use objc2_app_kit::{NSAlert, NSApplication, NSApplicationActivationPolicy, NSEventMask}; +use objc2_foundation::{MainThreadMarker, NSDate, NSDefaultRunLoopMode, NSString}; +use tray_icon::menu::{IsMenuItem, Menu, MenuEvent, MenuItem, PredefinedMenuItem, Submenu}; use tray_icon::{Icon, TrayIconBuilder}; use crate::app::refresh; use crate::config::Config; +use crate::health::ServerStatus; use crate::icon; +use crate::models::CACHE_FILE; +use crate::picker::Picker; +use crate::server::{command, restart}; use crate::summary::Row; +const EDIT_ROUTES: &str = "edit-routes"; const RESTART: &str = "restart-server"; const OPEN_CONFIG: &str = "open-config"; const OPEN_SETTINGS: &str = "open-settings"; @@ -30,111 +34,203 @@ const QUIT: &str = "quit"; /// How long the loop blocks waiting for a UI event before checking the clock. const EVENT_POLL: f64 = 0.1; -/// Runs the status item until the user quits. -pub fn run(config: Config, settings_path: PathBuf) -> Result<(), String> { +/// Runs the status item until the user quits. `settings` is the settings +/// file that `config` came from. The model list cache sits next to it, and +/// the menu bar reads the file again whenever it changes. +pub fn run(mut config: Config, settings: &Path) -> Result<(), String> { let mtm = MainThreadMarker::new().ok_or("the menu bar must run on the main thread")?; let ns_app = NSApplication::sharedApplication(mtm); // Accessory keeps the process out of the Dock and the app switcher. ns_app.setActivationPolicy(NSApplicationActivationPolicy::Accessory); + // An accessory app shows no menu bar, but AppKit still finds keyboard + // shortcuts, such as Cmd-C in a text field and Cmd-W in the routes + // window, through the app's main menu. + let main_menu = main_menu()?; + main_menu.init_for_nsapp(); let mut log = crate::rollup::Reader::default(); - let glyph = Icon::from_rgba(icon::glyph(), icon::SIZE, icon::SIZE) - .map_err(|error| format!("build icon: {error}"))?; + let (first, first_rows) = refresh(&config, &mut log); let tray = TrayIconBuilder::new() - .with_icon(glyph) + .with_icon(glyph(first)?) .with_icon_as_template(true) - .with_tooltip("Switchyard") - .with_menu(Box::new(menu(&refresh(&config, &mut log))?)) + .with_tooltip(tooltip(first)) + .with_menu(Box::new(menu(&first_rows)?)) .build() .map_err(|error| format!("create status item: {error}"))?; + let mut shown = first; + let mut settings_seen = modified(settings); ns_app.finishLaunching(); - let interval = Duration::from_secs(config.refresh_seconds.max(5)); - let mut next = Instant::now() + interval; - let mut actions = Vec::new(); + let mut picker: Option = None; + let mut next = Instant::now() + interval(&config); + let mut actions: Vec<(&str, thread::JoinHandle>)> = Vec::new(); loop { - let should_quit = autoreleasepool(|_| -> Result { + let quit = autoreleasepool(|_| -> Result { pump_events(&ns_app); + if let Some(picker) = picker.as_mut() { + picker.poll(); + } let mut redraw = false; while let Ok(event) = MenuEvent::receiver().try_recv() { - let action = match event.id.as_ref() { - QUIT => return Ok(true), + match event.id.as_ref() { + QUIT => { + // Quitting between the save and the restart would leave a + // saved config that the server has not loaded. + if picker.as_ref().is_some_and(Picker::is_busy) { + alert( + mtm, + "Apply is still running", + "Quitting now could leave the new config saved while the server \ + still runs the old one. Wait for the result in the routes window, \ + then quit.", + ); + } else { + return Ok(true); + } + } + EDIT_ROUTES => picker + .get_or_insert_with(|| { + Picker::new(mtm, &config, settings.with_file_name(CACHE_FILE)) + }) + .show(), RESTART => { let label = config.launchd_label.clone(); - thread::spawn(move || restart_server(&label)) + actions.push(( + "Could not restart the server", + thread::spawn(move || restart(&label)), + )); } OPEN_CONFIG | OPEN_SETTINGS => { let path = if event.id.as_ref() == OPEN_CONFIG { config.config_file.clone() } else { - settings_path.clone() + settings.to_path_buf() }; - thread::spawn(move || open(&path)) + actions.push(( + "Could not open the file", + thread::spawn(move || open(&path)), + )); } + // Informational rows are disabled, so nothing else fires. _ => continue, - }; - actions.push(action); + } + redraw = true; } + for index in (0..actions.len()).rev() { - if actions[index].is_finished() { + if actions[index].1.is_finished() { + let (title, action) = actions.swap_remove(index); report( - actions - .swap_remove(index) + mtm, + title, + action .join() .unwrap_or_else(|_| Err("menu action thread panicked".to_string())), ); redraw = true; } } - if redraw || Instant::now() >= next { - tray.set_menu(Some(Box::new(menu(&refresh(&config, &mut log))?))); - next = Instant::now() + interval; + let changed = modified(settings); + if changed != settings_seen { + settings_seen = changed; + match Config::load(settings) { + Ok(loaded) => { + eprintln!("switchyard-menubar: reloaded {}", settings.display()); + config = loaded; + if let Some(picker) = picker.as_mut() { + picker.set_settings(&config); + } + } + Err(error) => eprintln!("switchyard-menubar: {error}"), + } + } + let (latest, rows) = refresh(&config, &mut log); + tray.set_menu(Some(Box::new(menu(&rows)?))); + if latest != shown { + shown = latest; + eprintln!("switchyard-menubar: the server is {}", state(shown)); + tray.set_icon_with_as_template(Some(glyph(shown)?), true) + .map_err(|error| format!("change the status icon: {error}"))?; + // A failed tooltip update is ignored. The tooltip is cosmetic, + // and the menu bar keeps running. + let _ = tray.set_tooltip(Some(tooltip(shown))); + } + next = Instant::now() + interval(&config); } Ok(false) })?; - if should_quit { + if quit { return Ok(()); } } } -/// Restarts the server's LaunchAgent. -fn restart_server(label: &str) -> Result<(), String> { - let uid = command("id", &["-u"])?; - let target = format!("gui/{}/{}", uid.trim(), label); - command("launchctl", &["kickstart", "-k", &target]).map(|_| ()) +/// How long the menu waits between refreshes. +fn interval(config: &Config) -> Duration { + Duration::from_secs(config.refresh_seconds.max(5)) } -/// Opens a config file in the user's editor. -fn open(path: &std::path::Path) -> Result<(), String> { - command("open", &["-t", &path.display().to_string()]).map(|_| ()) +/// Draws the status icon: solid while the server answers, faint when it does not. +fn glyph(status: ServerStatus) -> Result { + Icon::from_rgba( + icon::glyph(status == ServerStatus::Running), + icon::SIZE, + icon::SIZE, + ) + .map_err(|error| format!("build icon: {error}")) } -/// Runs a command, returning its stdout or a message naming what failed. -fn command(program: &str, args: &[&str]) -> Result { - let output = Command::new(program) - .args(args) - .output() - .map_err(|error| format!("run {program}: {error}"))?; - if !output.status.success() { - return Err(format!( - "{program} {}: {}", - args.join(" "), - String::from_utf8_lossy(&output.stderr).trim() - )); +/// Says whether the server answers, in the words that the tooltip and the log +/// use. +fn state(status: ServerStatus) -> &'static str { + match status { + ServerStatus::Running => "running", + ServerStatus::Stopped => "not responding", } - Ok(String::from_utf8_lossy(&output.stdout).into_owned()) } -fn report(result: Result<(), String>) { +fn tooltip(status: ServerStatus) -> String { + format!("Switchyard: the server is {}", state(status)) +} + +/// Returns when the settings file last changed, or `None` when the file is +/// missing. The menu bar compares it between refreshes, so a changed file +/// takes effect without a restart. +fn modified(path: &Path) -> Option { + std::fs::metadata(path) + .and_then(|metadata| metadata.modified()) + .ok() +} + +/// Opens a config file in the user's editor. +fn open(path: &Path) -> Result<(), String> { + command("open", &["-t", &path.display().to_string()]).map(|_| ()) +} + +/// Logs the error and shows it in a dialog when a menu action fails. A menu +/// click opens no window that could show the error. +fn report(mtm: MainThreadMarker, title: &str, result: Result<(), String>) { if let Err(error) = result { eprintln!("switchyard-menubar: {error}"); + alert(mtm, title, &error); } } +/// Shows a dialog and waits for the user to close it. The app activates +/// itself first, because an accessory app's dialog opens behind other windows +/// otherwise. +fn alert(mtm: MainThreadMarker, title: &str, detail: &str) { + let alert = NSAlert::new(mtm); + alert.setMessageText(&NSString::from_str(title)); + alert.setInformativeText(&NSString::from_str(detail)); + #[allow(deprecated)] + NSApplication::sharedApplication(mtm).activateIgnoringOtherApps(true); + alert.runModal(); +} + /// Builds the whole menu: the summary rows, then the fixed actions. fn menu(rows: &[Row]) -> Result { let menu = Menu::new(); @@ -152,6 +248,7 @@ fn menu(rows: &[Row]) -> Result { } append(&PredefinedMenuItem::separator())?; for (id, text) in [ + (EDIT_ROUTES, "Edit routes…"), (RESTART, "Restart server"), (OPEN_CONFIG, "Open server config…"), (OPEN_SETTINGS, "Open menu bar settings…"), @@ -162,6 +259,28 @@ fn menu(rows: &[Row]) -> Result { Ok(menu) } +/// Builds the app's hidden main menu, which gives text fields their Edit +/// shortcuts and windows their Cmd-W shortcut. +fn main_menu() -> Result { + let edit = Submenu::with_items( + "Edit", + true, + &[ + &PredefinedMenuItem::undo(None), + &PredefinedMenuItem::redo(None), + &PredefinedMenuItem::separator(), + &PredefinedMenuItem::cut(None), + &PredefinedMenuItem::copy(None), + &PredefinedMenuItem::paste(None), + &PredefinedMenuItem::select_all(None), + ], + ) + .map_err(|error| format!("build the Edit menu: {error}"))?; + let window = Submenu::with_items("Window", true, &[&PredefinedMenuItem::close_window(None)]) + .map_err(|error| format!("build the Window menu: {error}"))?; + Menu::with_items(&[&edit, &window]).map_err(|error| format!("build the main menu: {error}")) +} + /// Drains pending AppKit events, blocking briefly when there are none. fn pump_events(ns_app: &NSApplication) { let mut expiration = Some(NSDate::dateWithTimeIntervalSinceNow(EVENT_POLL)); @@ -178,15 +297,3 @@ fn pump_events(ns_app: &NSApplication) { expiration = Some(NSDate::distantPast()); } } - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn reports_which_command_failed() { - let error = command("switchyard-does-not-exist", &[]).expect_err("missing program"); - - assert!(error.contains("switchyard-does-not-exist")); - } -} diff --git a/scripts/macos/uninstall.sh b/scripts/macos/uninstall.sh index 66f670e17b..ad4314229f 100755 --- a/scripts/macos/uninstall.sh +++ b/scripts/macos/uninstall.sh @@ -68,6 +68,7 @@ done step "Done" say "Left in place, delete them if you want:" -say " $SY_HOME (binaries, config, routing log, logs)" +say " $SY_HOME (binaries, config, routing log, model lists, logs)" say " $CODEX_CONFIG.switchyard-current.* (configs preserved during restore)" say " $CODEX_PROFILE_CONFIG.switchyard-backup.* (profile backups)" +say " Keychain items named \"Switchyard model list\" (keys saved from Change routing…; delete them in Keychain Access)" From af6f85253b1447825141297d664349213297d967 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Thu, 8 Oct 2026 11:39:24 -0700 Subject: [PATCH 02/39] feat(macos): add app installation and session usage Signed-off-by: Elyas Mehtabuddin --- Cargo.lock | 2 + crates/switchyard-menubar/Cargo.toml | 2 + crates/switchyard-menubar/README.md | 96 ++- crates/switchyard-menubar/src/accounts.rs | 204 ++++++ crates/switchyard-menubar/src/dashboard.rs | 690 ++++++++++++++++++++ crates/switchyard-menubar/src/harness.rs | 659 +++++++++++++++++++ crates/switchyard-menubar/src/history.rs | 192 ++++++ crates/switchyard-menubar/src/main.rs | 19 +- crates/switchyard-menubar/src/sessions.rs | 392 +++++++++++ crates/switchyard-menubar/src/tray.rs | 57 +- crates/switchyard-server/src/lib.rs | 15 +- crates/switchyard-server/src/routing_log.rs | 5 + crates/switchyard-server/tests/server.rs | 5 + scripts/macos/common.sh | 1 + scripts/macos/install.sh | 57 +- scripts/macos/uninstall.sh | 2 + tests/test_macos_install.py | 68 +- 17 files changed, 2422 insertions(+), 44 deletions(-) create mode 100644 crates/switchyard-menubar/src/accounts.rs create mode 100644 crates/switchyard-menubar/src/dashboard.rs create mode 100644 crates/switchyard-menubar/src/harness.rs create mode 100644 crates/switchyard-menubar/src/history.rs create mode 100644 crates/switchyard-menubar/src/sessions.rs diff --git a/Cargo.lock b/Cargo.lock index c41149c891..8fe27dd58b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3257,6 +3257,8 @@ dependencies = [ "toml 0.9.12+spec-1.1.0", "toml_edit 0.25.13+spec-1.1.0", "tray-icon", + "url", + "uuid", ] [[package]] diff --git a/crates/switchyard-menubar/Cargo.toml b/crates/switchyard-menubar/Cargo.toml index e4ede3faa9..15973929e1 100644 --- a/crates/switchyard-menubar/Cargo.toml +++ b/crates/switchyard-menubar/Cargo.toml @@ -20,6 +20,8 @@ serde_json.workspace = true tempfile = "3" toml = "0.9" toml_edit = "0.25" +url = "2" +uuid.workspace = true [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6" diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index f0b5027115..fa96d3d8c9 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -1,6 +1,7 @@ # switchyard-menubar -A macOS menu bar companion for a Switchyard server running in the background. +The macOS app shows usage, installs coding-tool settings, and opens local +worktree sessions. Its menu bar shows server status and estimated savings. The server does the routing. This process reads what the server wrote and edits the server config only when you ask it to, so quitting it never affects @@ -22,10 +23,11 @@ make install-macos # or install-macos-dry-run to see the steps first make uninstall-macos ``` -That builds `switchyard-server` and `switchyard-menubar` into -`~/.switchyard/bin`, writes a server config and menu bar settings, loads two -LaunchAgents, and writes a `sy` Codex profile. Use the CLI profile with -`codex -p sy`. +`make install-macos` builds `switchyard-server` and `switchyard-menubar` into +`~/.switchyard/bin` and installs `~/Applications/Switchyard.app`. It writes a +server config and menu bar settings, loads two LaunchAgents, and writes a `sy` +Codex profile. Use the CLI profile with `codex -p sy`. Open Switchyard from +Finder or Spotlight to see Usage, or choose **Install…** to set up a coding tool. Your server config and menu bar settings are never overwritten once they exist, so edits survive a reinstall. Logs are in `~/.switchyard/logs/`. @@ -318,6 +320,88 @@ Reinstalling backs up the profile before replacing it if its contents change. The profile sets `model`, `model_provider`, and the Switchyard provider details. It leaves `approval_policy` and `sandbox_mode` to your existing Codex settings. -Codex.app cannot use the profile. The installer leaves its config unchanged. +Codex.app cannot use the profile. `make install-macos` leaves its +`config.toml` unchanged. To change the defaults used by Codex.app and Codex CLI, +choose **Codex app and CLI defaults** in the app’s **Install…** view. For older installs that replaced `config.toml`, `make uninstall-macos` restores `config.toml.direct` and keeps a copy of the active config before replacing it. + +## Update the app from source + +**Update from source…** opens Terminal and runs `scripts/macos/install.sh` from +the checkout used for the current install. Keep that checkout and a Rust +toolchain available. Update the checkout first to choose the code you want to +build. Routing settings and prices stay saved. The installer signs the app ad +hoc for local use; the app has no Developer ID signature or notarization. + +## Install coding-tool settings + +**Install…** shows where Codex, Claude Code, and Pi are installed, their user +settings, and their configured model. Pick a public route on the local HTTP +server and click **Install / refresh**. Codex CLI gets `sy.config.toml` and uses +`codex -p sy`. The Codex app option changes the defaults in `config.toml` for +both the app and CLI. Claude Code gets `settings.json` environment settings. Pi gets a custom provider in `models.json` and defaults in +`settings.json`. Unrelated settings remain. The original files are backed up +beside each file as `.switchyard-original`. If a file did not exist, +`.switchyard-original-missing` records its absence. **Restore original** +keeps a copy of the current file, then restores the backup or removes the file +that was originally absent. + +The app checks all selected settings files before replacing any of them. Each +replacement is atomic. If a later replacement fails, the app tries to restore +earlier files. A crash can leave Pi’s two files out of sync, and rollback can +fail. Another process running as the same user can also change a file after the +app checks it. The original backups remain available for manual recovery. + +Restart the coding tool after changing its defaults. Project settings, shell +variables, and command-line options can override them. + +Subscription routes forward the caller's saved login to its own provider. +Choose Codex for a ChatGPT route or Claude Code for an Anthropic route. Pi's +custom provider uses routes whose API credentials the server owns. Configure +those credentials on the server before installing its route. The app never +reads or copies OAuth tokens, switches accounts in running sessions, or combines +subscription quotas. Claude settings with an explicit API key or bearer token +must be cleared before installing a subscription route. Shell overrides still +need to be checked with Claude's `/status`. + +## View session usage + +Usage lists the actual upstream model, public route, timestamp, input, cached, +and output tokens for each completed model call. Select a recorded session ID +to filter the view. A recorded turn ID groups related calls; a turn may contain +several model calls. Older records and tools that send no IDs say **Not recorded**. +The viewer reads the last 8 MiB of the log plus one byte to check whether the +first record is complete. It keeps at most 5,000 complete records and excludes +partial records. It labels a limited view and counts unreadable records. +Classifier calls appear as routing overhead. It displays neither prompts nor responses. +Observed tokens do not report provider quota, reset windows, or authoritative +billing. Refresh reads the log again. + +## Start sessions with separate logins and worktrees + +Codex CLI and Claude Code support named accounts. Enter a name and click +**Add account…** to open the tool’s own login command in Terminal. Complete the +login, click **Refresh**, and select the account. Switchyard keeps these account +directories under `~/.switchyard/accounts`; the coding tool owns their login +files. The selected account determines where **Install / refresh** saves settings +and which login a new session uses. Existing sessions keep their login. + +To run several tasks with one coding tool, enter a Git project path under +Install and click **New worktree session**. Each session starts from that +checkout's HEAD on a new branch in `~/.switchyard/worktrees` and opens in Terminal. +Uncommitted files stay in the original checkout. Each launched session has its +own model settings; launching another session does not change user defaults. +Codex and Claude launches send a session ID for usage correlation. Pi stores +its session under the private agent directory beside the worktree; its requests +need an integration that sends session and turn IDs to appear as a correlated +session. Otherwise their usage is still listed under **All sessions**. +Use `git worktree list` and `git worktree remove` to manage the checkouts after +saving or discarding changes. Successful launches keep their Git branches and +the private settings directories beside the worktrees until you remove them. Named +account directories also remain until you remove them. If launch setup fails, +the app tries to remove the worktree, branch, and private settings it created; +cleanup can fail. + +The app does not manage task dependencies, resume history, remote workspaces, +or review comments. diff --git a/crates/switchyard-menubar/src/accounts.rs b/crates/switchyard-menubar/src/accounts.rs new file mode 100644 index 0000000000..a8c7fd4092 --- /dev/null +++ b/crates/switchyard-menubar/src/accounts.rs @@ -0,0 +1,204 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Named login directories use the coding tool's own authentication commands. + +use crate::harness::{self, Harness}; +use std::io::Write; +use std::path::{Path, PathBuf}; + +// PendingAccount removes only an empty directory if login setup fails. +// The coding tool may already have saved login files, which must stay. +struct PendingAccount(Option); + +impl Drop for PendingAccount { + fn drop(&mut self) { + if let Some(path) = &self.0 { + let _ = std::fs::remove_dir(path); + } + } +} + +fn root(tool: Harness) -> Result { + let name = match tool { + Harness::CodexCli => "codex", + Harness::Claude => "claude", + _ => return Err("Named accounts are available for Codex CLI and Claude Code.".into()), + }; + let home = crate::config::expand_home(Path::new("~")); + let mut path = home; + for component in [".switchyard", "accounts", name] { + path.push(component); + if std::fs::symlink_metadata(&path).is_ok_and(|m| m.file_type().is_symlink()) { + return Err(format!( + "{} is a symlink. Edit its target yourself.", + path.display() + )); + } + } + Ok(path) +} + +pub fn validate(tool: Harness, path: &Path) -> Result<(), String> { + let root = root(tool)?; + if path.parent() != Some(root.as_path()) + || !std::fs::symlink_metadata(path).is_ok_and(|m| m.is_dir() && !m.file_type().is_symlink()) + { + return Err("Choose a supported coding tool.".into()); + } + Ok(()) +} + +pub fn list(tool: Harness) -> Vec<(String, PathBuf)> { + let Ok(root) = root(tool) else { + return Vec::new(); + }; + let Ok(entries) = std::fs::read_dir(root) else { + return Vec::new(); + }; + let mut accounts: Vec<_> = entries + .flatten() + .filter(|e| e.file_type().is_ok_and(|t| t.is_dir())) + .filter_map(|e| { + e.file_name() + .into_string() + .ok() + .map(|name| (name, e.path())) + }) + .collect(); + accounts.sort_by(|a, b| a.0.cmp(&b.0)); + accounts +} + +pub fn config_paths(tool: Harness, account: Option<&Path>) -> Vec { + let Some(account) = account else { + return harness::paths(tool); + }; + match tool { + Harness::CodexCli => vec![account.join("sy.config.toml")], + Harness::Claude => vec![account.join("settings.json")], + _ => harness::paths(tool), + } +} + +pub fn add(tool: Harness, name: &str) -> Result { + if name.is_empty() + || name.len() > 64 + || !name + .bytes() + .all(|b| b.is_ascii_alphanumeric() || b == b'-' || b == b'_') + { + return Err("Account names need 1–64 letters, numbers, hyphens, or underscores.".into()); + } + let root = root(tool)?; + let binary = harness::binary(tool).ok_or("Install the selected coding tool first.")?; + std::fs::create_dir_all(&root).map_err(|e| e.to_string())?; + let path = root.join(name); + #[cfg(unix)] + { + use std::os::unix::fs::DirBuilderExt; + std::fs::DirBuilder::new().mode(0o700).create(&path).map_err(|e|format!("Create account: {e}. Pick an existing account after Refresh, or choose a new name."))?; + } + #[cfg(not(unix))] + std::fs::create_dir(&path).map_err(|e| e.to_string())?; + let mut pending = PendingAccount(Some(path.clone())); + let variable = match tool { + Harness::CodexCli => "CODEX_HOME", + Harness::Claude => "CLAUDE_CONFIG_DIR", + _ => return Err("Choose a supported coding tool.".into()), + }; + let login = match tool { + Harness::CodexCli => "login", + _ => "auth login", + }; + let mut script = tempfile::Builder::new() + .prefix("switchyard-login-") + .suffix(".command") + .tempfile() + .map_err(|e| e.to_string())?; + writeln!(script,"#!/bin/bash\nrm -- \"$0\"\nexport PATH=\"/opt/homebrew/bin:/usr/local/bin:$PATH\"\nexport {variable}={}\n{} {login}",crate::sessions::quote(&path.display().to_string()),crate::sessions::quote(&binary.display().to_string())).map_err(|e|e.to_string())?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + script + .as_file() + .set_permissions(std::fs::Permissions::from_mode(0o700)) + .map_err(|e| e.to_string())?; + } + crate::server::command("open", &[&script.path().display().to_string()])?; + pending.0 = None; + let _ = script.keep().map_err(|e| e.to_string())?; + Ok(format!( + "Opened the coding tool's login in Terminal for account {name}. Complete login, click Refresh, and select this account. Switchyard does not read the login tokens. The selected account applies to new sessions only. Account directory: {}", + path.display() + )) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn unsafe_names_fail_before_any_side_effect() { + for name in ["", "..", "a/b", "$(touch bad)", "a\nb"] { + assert!(add(Harness::CodexCli, name).is_err()); + } + assert!(add(Harness::Pi, "valid").is_err()); + } + #[test] + fn selected_account_changes_only_the_owned_config_destination() { + let account = Path::new("/tmp/named-account"); + assert_eq!( + config_paths(Harness::CodexCli, Some(account)), + vec![account.join("sy.config.toml")] + ); + assert_eq!( + config_paths(Harness::Claude, Some(account)), + vec![account.join("settings.json")] + ); + } + #[test] + fn a_login_setup_failure_removes_only_its_empty_directory() { + let root = tempfile::tempdir().expect("directory"); + let path = root.path().join("account"); + std::fs::create_dir(&path).expect("account"); + drop(PendingAccount(Some(path.clone()))); + assert!(!path.exists()); + std::fs::create_dir(&path).expect("account"); + std::fs::write(path.join("auth.json"), "private").expect("auth"); + drop(PendingAccount(Some(path.clone()))); + assert!(path.join("auth.json").is_file()); + } + // The subprocess isolates HOME so parallel tests keep their own settings. + #[cfg(unix)] + #[test] + fn symlinked_account_roots_are_not_listed_or_used_for_login() { + if std::env::var_os("SWITCHYARD_ACCOUNT_FIXTURE").is_some() { + assert!(list(Harness::CodexCli).is_empty()); + assert!(add(Harness::CodexCli, "new").is_err()); + let path = crate::config::expand_home(Path::new("~/.switchyard/accounts/codex/named")); + assert!(validate(Harness::CodexCli, &path).is_err()); + return; + } + let dir = tempfile::tempdir().expect("fixture"); + let home = dir.path().join("home"); + let target = dir.path().join("target"); + std::fs::create_dir(&home).expect("home"); + std::fs::create_dir_all(target.join("accounts/codex/named")).expect("accounts"); + std::os::unix::fs::symlink(&target, home.join(".switchyard")).expect("symlink"); + let output = std::process::Command::new(std::env::current_exe().expect("runner")) + .args([ + "--exact", + "accounts::tests::symlinked_account_roots_are_not_listed_or_used_for_login", + ]) + .env("SWITCHYARD_ACCOUNT_FIXTURE", "1") + .env("HOME", &home) + .output() + .expect("child"); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stdout) + ); + assert!(!target.join("accounts/codex/new").exists()); + } +} diff --git a/crates/switchyard-menubar/src/dashboard.rs b/crates/switchyard-menubar/src/dashboard.rs new file mode 100644 index 0000000000..791afe5a86 --- /dev/null +++ b/crates/switchyard-menubar/src/dashboard.rs @@ -0,0 +1,690 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! The app window shares the tray event loop and loads routes and usage on workers. + +use crate::accounts; +use crate::config::Config; +use crate::harness::{self, HARNESSES, Harness}; +use crate::history::{self, History}; +use crate::picker::rect; +use crate::server_config::ServerConfig; +use objc2::rc::Retained; +use objc2::runtime::ProtocolObject; +use objc2::{DefinedClass, MainThreadOnly, define_class, msg_send, sel}; +use objc2_app_kit::{ + NSApplication, NSApplicationDelegate, NSBackingStoreType, NSButton, NSControl, NSFont, + NSPopUpButton, NSScrollView, NSTextField, NSTextView, NSView, NSWindow, NSWindowStyleMask, +}; +use objc2_foundation::{MainThreadMarker, NSObject, NSObjectProtocol, NSSize, NSString}; +use std::cell::RefCell; +use std::path::PathBuf; +use std::sync::mpsc::{Receiver, Sender, channel}; + +const USAGE: isize = 1; +const INSTALL: isize = 2; +const REFRESH: isize = 3; +const SAVE: isize = 4; +const RESTORE: isize = 5; +const ROUTE: isize = 6; +const TOOL: isize = 7; +const SESSION: isize = 8; +const LAUNCH: isize = 9; +const UPDATE: isize = 10; +const ACCOUNT: isize = 11; +const ADD_ACCOUNT: isize = 12; +const REOPEN: isize = 13; + +define_class!( + // SAFETY: NSObject has no subclassing requirements. The target only queues tags. + #[unsafe(super(NSObject))] + #[thread_kind = MainThreadOnly] + #[name = "SwitchyardAppTarget"] + #[ivars = RefCell>] + struct Target; + impl Target { + // SAFETY: AppKit sends the control that invoked this action. + #[unsafe(method(changed:))] + fn changed(&self, sender: &NSControl) { self.ivars().borrow_mut().push(sender.tag()); } + } + unsafe impl NSObjectProtocol for Target {} + unsafe impl NSApplicationDelegate for Target { + #[unsafe(method(applicationShouldHandleReopen:hasVisibleWindows:))] + fn reopen(&self, _application: &NSApplication, _visible: bool) -> bool { + self.ivars().borrow_mut().push(REOPEN); + true + } + } +); + +enum Finished { + Refresh(Snapshot), + Status(Result), +} + +struct Snapshot { + routes: Result, String>, + history: Result, +} + +fn load(settings: &Config) -> Snapshot { + Snapshot { + routes: std::fs::read_to_string(&settings.config_file) + .map_err(|e| e.to_string()) + .and_then(|text| ServerConfig::parse(&text)) + .map(|config| config.routes()), + history: history::load(&settings.routing_log), + } +} + +pub struct Dashboard { + mtm: MainThreadMarker, + window: Retained, + // Dashboard retains the delegate because NSApplication holds a weak reference. + target: Retained, + text: Retained, + tool: Retained, + route: Retained, + session: Retained, + project: Retained, + account: Retained, + account_name: Retained, + add_account: Retained, + accounts: Vec<(String, PathBuf)>, + save: Retained, + restore: Retained, + launch: Retained, + settings: Config, + history: History, + sessions: Vec, + routes: Vec, + install: bool, + busy: bool, + refresh_pending: bool, + route_error: Option, + usage_error: Option, + status: Option, + sender: Sender, + receiver: Receiver, +} + +impl Dashboard { + pub fn new(mtm: MainThreadMarker, settings: &Config) -> Self { + // SAFETY: The app owns this window and keeps it after a close action. + let window = unsafe { + let w = NSWindow::initWithContentRect_styleMask_backing_defer( + NSWindow::alloc(mtm), + rect(0., 0., 940., 720.), + NSWindowStyleMask::Titled + | NSWindowStyleMask::Closable + | NSWindowStyleMask::Miniaturizable, + NSBackingStoreType::Buffered, + false, + ); + w.setReleasedWhenClosed(false); + w + }; + window.setTitle(&NSString::from_str("Switchyard")); + window.center(); + let allocated = Target::alloc(mtm).set_ivars(RefCell::new(Vec::new())); + // SAFETY: NSObject init has this signature. + let target: Retained = unsafe { msg_send![super(allocated), init] }; + NSApplication::sharedApplication(mtm).setDelegate(Some(ProtocolObject::from_ref(&*target))); + let content = NSView::initWithFrame(NSView::alloc(mtm), rect(0., 0., 940., 720.)); + for (title, tag, x, width) in [ + ("Usage", USAGE, 20., 100.), + ("Install…", INSTALL, 130., 110.), + ("Refresh", REFRESH, 250., 100.), + ("Update from source…", UPDATE, 690., 230.), + ] { + content.addSubview(&button(mtm, &target, title, tag, rect(x, 666., width, 32.))); + } + let tool = popup(mtm, &target, TOOL, rect(20., 619., 240., 30.)); + for (_, name) in HARNESSES { + tool.addItemWithTitle(&NSString::from_str(name)); + } + let route = popup(mtm, &target, ROUTE, rect(280., 619., 310., 30.)); + let session = popup(mtm, &target, SESSION, rect(20., 619., 900., 30.)); + let save = button( + mtm, + &target, + "Install / refresh", + SAVE, + rect(600., 619., 150., 30.), + ); + let restore = button( + mtm, + &target, + "Restore original", + RESTORE, + rect(760., 619., 160., 30.), + ); + let project = + NSTextField::initWithFrame(NSTextField::alloc(mtm), rect(20., 573., 680., 30.)); + project.setPlaceholderString(Some(&NSString::from_str( + "Git project path for a separate worktree session", + ))); + let launch = button( + mtm, + &target, + "New worktree session", + LAUNCH, + rect(710., 573., 210., 30.), + ); + let account = popup(mtm, &target, ACCOUNT, rect(20., 530., 280., 30.)); + let account_name = + NSTextField::initWithFrame(NSTextField::alloc(mtm), rect(320., 530., 370., 30.)); + account_name.setPlaceholderString(Some(&NSString::from_str("Name for a new account"))); + let add_account = button( + mtm, + &target, + "Add account…", + ADD_ACCOUNT, + rect(710., 530., 210., 30.), + ); + for view in [ + &*account as &NSView, + &*account_name, + &*add_account, + &*tool as &NSView, + &*route, + &*session, + &*save, + &*restore, + &*project, + &*launch, + ] { + content.addSubview(view); + } + let scroll = + NSScrollView::initWithFrame(NSScrollView::alloc(mtm), rect(20., 20., 900., 495.)); + scroll.setHasVerticalScroller(true); + scroll.setHasHorizontalScroller(true); + let text = NSTextView::initWithFrame(NSTextView::alloc(mtm), rect(0., 0., 880., 495.)); + text.setEditable(false); + text.setSelectable(true); + text.setFont(Some(&NSFont::monospacedSystemFontOfSize_weight(13., 0.))); + text.setTextContainerInset(NSSize::new(12., 12.)); + scroll.setDocumentView(Some(&text)); + content.addSubview(&scroll); + window.setContentView(Some(&content)); + let (sender, receiver) = channel(); + let mut app = Self { + mtm, + window, + target, + text, + tool, + route, + session, + project, + account, + account_name, + add_account, + accounts: Vec::new(), + save, + restore, + launch, + settings: settings.clone(), + history: History::default(), + sessions: Vec::new(), + routes: Vec::new(), + install: false, + busy: false, + refresh_pending: false, + route_error: None, + usage_error: None, + status: None, + sender, + receiver, + }; + app.mode(false); + app + } + + pub fn is_busy(&self) -> bool { + self.busy + } + pub fn set_settings(&mut self, settings: &Config) { + self.settings = settings.clone(); + self.refresh(); + } + pub fn show(&mut self, install: bool) { + self.mode(install); + #[allow(deprecated)] + NSApplication::sharedApplication(self.mtm).activateIgnoringOtherApps(true); + self.window.makeKeyAndOrderFront(None); + self.refresh(); + } + + fn mode(&mut self, install: bool) { + self.install = install; + for view in [ + &*self.tool as &NSView, + &*self.route, + &*self.save, + &*self.restore, + &*self.project, + &*self.launch, + &*self.account, + &*self.account_name, + &*self.add_account, + ] { + view.setHidden(!install); + } + self.session.setHidden(install); + if install { + self.refresh_accounts(); + self.inspect(); + } else { + self.render_history(); + } + } + + fn tool(&self) -> Harness { + HARNESSES + .get(self.tool.indexOfSelectedItem() as usize) + .map(|(tool, _)| *tool) + .unwrap_or(Harness::CodexCli) + } + + fn selected_account(&self) -> Option<&std::path::Path> { + let index = self.account.indexOfSelectedItem(); + if index > 0 { + self.accounts + .get(index as usize - 1) + .map(|(_, p)| p.as_path()) + } else { + None + } + } + fn refresh_accounts(&mut self) { + let selected = self.selected_account().map(std::path::Path::to_path_buf); + self.accounts = accounts::list(self.tool()); + self.account.removeAllItems(); + self.account + .addItemWithTitle(&NSString::from_str("Default coding-tool login")); + for (name, _) in &self.accounts { + self.account.addItemWithTitle(&NSString::from_str(name)); + } + if let Some(index) = self + .accounts + .iter() + .position(|(_, p)| Some(p) == selected.as_ref()) + { + self.account.selectItemAtIndex(index as isize + 1); + } + let supported = matches!(self.tool(), Harness::CodexCli | Harness::Claude); + self.account.setEnabled(supported && !self.busy); + self.add_account.setEnabled(supported && !self.busy); + self.account_name.setEnabled(supported && !self.busy); + } + fn inspect(&self) { + if let Some(error) = &self.route_error { + self.text.setString(&NSString::from_str(error)); + return; + } + if let Some(status) = &self.status { + self.text.setString(&NSString::from_str(status)); + return; + } + let tool = self.tool(); + let found = harness::binary(tool).map(|p| format!("Installed: {}",p.display())).unwrap_or_else(|| "Executable not found in the usual install directories. Install the coding tool first if needed.".into()); + let info = harness::inspect(tool, &accounts::config_paths(tool, self.selected_account())) + .unwrap_or_else(|e| format!("Could not read settings: {e}")); + self.text.setString(&NSString::from_str(&format!("{found}\n{info}\n\nSelect a public Switchyard route, then click Install / refresh.\nCodex CLI gets a standalone sy profile. Codex app changes the base user config.\nClaude and Pi get user settings. Existing settings are backed up.\nRestart the coding tool to apply defaults. Existing sessions keep their login. Select a named account to change where settings are saved and which login new sessions use. Add account… opens the coding tool’s own login in Terminal.\n\nA subscription route uses the coding tool's own saved login.\nA route with server API credentials works across tools.\nSwitchyard records observed token usage; provider quota and billing remain with the provider.\n\nNew worktree session creates an independent checkout from the project's HEAD\nand opens the selected tool in Terminal. Uncommitted changes stay in the original checkout.\nUse git worktree list and git worktree remove to manage these checkouts.\nProject settings and shell variables can override user defaults."))); + } + + fn refresh(&mut self) { + if self.busy { + self.refresh_pending = true; + return; + } + self.status = None; + let settings = self.settings.clone(); + let tx = self.sender.clone(); + std::thread::spawn(move || { + let _ = tx.send(Finished::Refresh(load(&settings))); + }); + self.set_busy(true); + } + + fn apply_refresh(&mut self, snapshot: Snapshot) { + let previous = self + .routes + .get(self.route.indexOfSelectedItem() as usize) + .map(|r| r.id.clone()); + self.route_error = None; + match snapshot.routes { + Ok(routes) => { + self.routes = routes; + self.route.removeAllItems(); + for route in &self.routes { + self.route.addItemWithTitle(&NSString::from_str(&route.id)); + } + if let Some(index) = self + .routes + .iter() + .position(|r| Some(&r.id) == previous.as_ref()) + { + self.route.selectItemAtIndex(index as isize); + } + } + Err(e) => { + self.routes.clear(); + self.route.removeAllItems(); + self.route_error = Some(format!("Could not read routes: {e}")); + } + } + self.usage_error = None; + match snapshot.history { + Ok(history) => { + let selected = self + .sessions + .get(self.session.indexOfSelectedItem().saturating_sub(1) as usize) + .cloned(); + self.history = history; + self.sessions = self.history.sessions(); + self.session.removeAllItems(); + self.session.addItemWithTitle(&NSString::from_str( + "All sessions (includes calls without a session ID)", + )); + for session in &self.sessions { + self.session.addItemWithTitle(&NSString::from_str(session)); + } + if let Some(index) = self + .sessions + .iter() + .position(|s| Some(s) == selected.as_ref()) + { + self.session.selectItemAtIndex(index as isize + 1); + } + } + Err(error) => self.usage_error = Some(format!("Could not read usage: {error}")), + } + self.mode(self.install); + } + + fn render_history(&self) { + if let Some(error) = &self.usage_error { + self.text.setString(&NSString::from_str(error)); + return; + } + let index = self.session.indexOfSelectedItem(); + let selected = if index > 0 { + self.sessions.get(index as usize - 1).map(String::as_str) + } else { + None + }; + self.text + .setString(&NSString::from_str(&self.history.display(selected))); + } + + fn set_busy(&mut self, busy: bool) { + self.busy = busy; + for button in [&self.save, &self.restore, &self.launch, &self.add_account] { + button.setEnabled(!busy); + } + self.tool.setEnabled(!busy); + self.route.setEnabled(!busy); + self.refresh_accounts(); + } + + pub fn poll(&mut self) { + let tags = std::mem::take(&mut *self.target.ivars().borrow_mut()); + for tag in tags { + if self.busy && !matches!(tag, USAGE | INSTALL | SESSION | REOPEN) { + continue; + } + match tag { + USAGE => self.mode(false), + INSTALL => { + self.mode(true); + } + REFRESH => self.refresh(), + TOOL | ROUTE | ACCOUNT => { + if tag == TOOL { + self.refresh_accounts(); + } + self.status = None; + self.inspect(); + } + SESSION => self.render_history(), + REOPEN => self.show(self.install), + SAVE | RESTORE | LAUNCH | ADD_ACCOUNT => self.action(tag), + UPDATE => { + let result = update(); + self.text + .setString(&NSString::from_str(&result.unwrap_or_else(|e| e))); + } + _ => {} + } + } + while let Ok(result) = self.receiver.try_recv() { + self.set_busy(false); + match result { + Finished::Refresh(snapshot) => self.apply_refresh(snapshot), + Finished::Status(result) => { + self.status = Some(result.unwrap_or_else(|e| e)); + self.mode(self.install); + } + } + if self.refresh_pending { + self.refresh_pending = false; + self.refresh(); + } + } + } + + fn action(&mut self, tag: isize) { + let tool = self.tool(); + let account = self.selected_account().map(std::path::Path::to_path_buf); + let files = accounts::config_paths(tool, account.as_deref()); + let account_name = self.account_name.stringValue().to_string(); + let tx = self.sender.clone(); + let settings = self.settings.clone(); + let route = self + .routes + .get(self.route.indexOfSelectedItem() as usize) + .cloned(); + let project = PathBuf::from(self.project.stringValue().to_string()); + self.set_busy(true); + self.text.setString(&NSString::from_str("Working…")); + std::thread::spawn(move || { + let result = (|| { + if tag == ADD_ACCOUNT { + return accounts::add(tool, account_name.trim()); + } + if let Some(account) = account.as_deref() { + accounts::validate(tool, account)?; + } + if tag == RESTORE { + return harness::restore(&files); + } + let route = route.ok_or_else(|| "Pick a route first.".to_string())?; + let login = login_mode(tool, &settings, &route)?; + if tag == LAUNCH { + crate::sessions::launch( + tool, + &project, + &route.id, + &settings.server_url, + login, + account.as_deref(), + ) + } else { + harness::install(tool, &files, &settings.server_url, &route.id, login) + } + })(); + let _ = tx.send(Finished::Status(result)); + }); + } +} + +fn login_mode( + tool: Harness, + settings: &Config, + route: &crate::server_config::Route, +) -> Result { + let text = std::fs::read_to_string(&settings.config_file).map_err(|e| e.to_string())?; + let config = ServerConfig::parse(&text)?; + let clients = config.clients(); + let choices = config.choices(&route.key); + if choices.is_empty() + || !config + .routes() + .iter() + .any(|current| current.key == route.key && current.id == route.id) + { + return Err( + "This route cannot be installed by the app. Choose a route with models.".into(), + ); + } + let mut login = false; + for choice in choices { + let client = clients + .iter() + .find(|c| c.name == choice.client) + .ok_or("The route has an unknown endpoint.")?; + if client.forward_auth { + let url = url::Url::parse(&client.base_url) + .map_err(|_| "The route has an invalid endpoint URL.")?; + let host = url + .host_str() + .ok_or("The route has an invalid endpoint URL.")?; + let supported = url.scheme() == "https" + && url.port().is_none_or(|port| port == 443) + && match tool { + Harness::CodexCli | Harness::CodexApp => host == "chatgpt.com", + Harness::Claude => host == "api.anthropic.com", + Harness::Pi => false, + }; + if !supported { + return Err(format!( + "This route forwards the caller's login to {host}. Pick a matching coding tool or a route with server API credentials." + )); + } + login = true; + } + } + Ok(login) +} + +fn button( + mtm: MainThreadMarker, + target: &Target, + title: &str, + tag: isize, + frame: objc2_foundation::NSRect, +) -> Retained { + // SAFETY: Target implements changed: and lives as long as the controls. + let b = unsafe { + NSButton::buttonWithTitle_target_action( + &NSString::from_str(title), + Some(target), + Some(sel!(changed:)), + mtm, + ) + }; + b.setTag(tag); + b.setFrame(frame); + b +} +fn popup( + mtm: MainThreadMarker, + target: &Target, + tag: isize, + frame: objc2_foundation::NSRect, +) -> Retained { + let p = NSPopUpButton::initWithFrame_pullsDown(NSPopUpButton::alloc(mtm), frame, false); + p.setTag(tag); + // SAFETY: Target implements changed: and lives as long as the controls. + unsafe { + p.setTarget(Some(target)); + p.setAction(Some(sel!(changed:))); + } + p +} +fn update() -> Result { + let executable = std::env::current_exe().map_err(|e| e.to_string())?; + let resource = executable + .parent() + .and_then(|p| p.parent()) + .ok_or("Could not locate the app bundle.")? + .join("Resources/Update.command"); + if !resource.is_file() { + return Err( + "Install Switchyard.app with scripts/macos/install.sh before updating from the app." + .into(), + ); + } + crate::server::command("open", &[&resource.display().to_string()])?; + Ok("Terminal is rebuilding and reinstalling from the source checkout used for this install. The app restarts after a successful build. Your routing and prices stay saved.".into()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn usage_load_does_not_depend_on_a_valid_server_config() { + let dir = tempfile::tempdir().expect("directory"); + let log = dir.path().join("log"); + std::fs::write( + &log, + "{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"actual\",\"session_id\":\"session\"}\n", + ) + .expect("log"); + let settings = Config { + config_file: dir.path().join("config"), + routing_log: log, + ..Config::default() + }; + let snapshot = load(&settings); + assert!(snapshot.routes.is_err()); + assert_eq!( + snapshot.history.expect("history").sessions(), + vec!["session"] + ); + std::fs::write(&settings.config_file, "not valid TOML").expect("config"); + let snapshot = load(&settings); + assert!(snapshot.routes.is_err()); + assert!( + snapshot + .history + .expect("history") + .display(None) + .contains("actual") + ); + } + #[test] + fn installing_rejects_stale_ids_and_insecure_subscription_endpoints() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("server.toml"); + let settings = Config { + config_file: path.clone(), + ..Config::default() + }; + for endpoint in [ + "https://chatgpt.com/backend-api/codex", + "http://chatgpt.com/backend-api/codex", + ] { + let text = format!( + "[llm_clients.upstream]\nbase_url = '{endpoint}'\nformat = 'openai_responses'\nforward_auth = true\n[targets.model]\nid = 'actual'\nllm_client = 'upstream'\n[routes.public]\nid = 'route'\ntype = 'passthrough'\ntarget = 'model'\n" + ); + std::fs::write(&path, &text).expect("config"); + let route = ServerConfig::parse(&text) + .expect("parse") + .routes() + .remove(0); + assert_eq!( + login_mode(Harness::CodexCli, &settings, &route).is_ok(), + endpoint.starts_with("https:") + ); + let mut stale = route; + stale.id = "old-public-id".into(); + assert!(login_mode(Harness::CodexCli, &settings, &stale).is_err()); + assert_eq!(std::fs::read_to_string(&path).expect("unchanged"), text); + } + } +} diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs new file mode 100644 index 0000000000..9c8a76a6bf --- /dev/null +++ b/crates/switchyard-menubar/src/harness.rs @@ -0,0 +1,659 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! This module installs and restores user settings for the supported coding tools. + +use serde_json::{Value, json}; +use std::io::Write; +use std::path::{Path, PathBuf}; +use toml_edit::{DocumentMut, value}; + +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum Harness { + CodexCli, + CodexApp, + Claude, + Pi, +} + +pub const HARNESSES: &[(Harness, &str)] = &[ + (Harness::CodexCli, "Codex CLI profile"), + (Harness::CodexApp, "Codex app and CLI defaults"), + (Harness::Claude, "Claude Code"), + (Harness::Pi, "Pi"), +]; + +pub fn paths(tool: Harness) -> Vec { + let home = crate::config::expand_home(Path::new("~")); + let codex = std::env::var_os("CODEX_HOME") + .map(PathBuf::from) + .unwrap_or_else(|| home.join(".codex")); + let claude = std::env::var_os("CLAUDE_CONFIG_DIR") + .map(PathBuf::from) + .unwrap_or_else(|| home.join(".claude")); + let pi = std::env::var_os("PI_CODING_AGENT_DIR") + .map(PathBuf::from) + .unwrap_or_else(|| home.join(".pi/agent")); + match tool { + Harness::CodexCli => vec![codex.join("sy.config.toml")], + Harness::CodexApp => vec![codex.join("config.toml")], + Harness::Claude => vec![claude.join("settings.json")], + Harness::Pi => vec![pi.join("models.json"), pi.join("settings.json")], + } +} + +pub fn inspect(tool: Harness, files: &[PathBuf]) -> Result { + let text = read(&files[0])?; + let model; + let endpoint; + match tool { + Harness::CodexCli | Harness::CodexApp => { + let doc = text + .parse::() + .map_err(|e| e.message().to_owned())?; + model = doc + .get("model") + .and_then(|v| v.as_str()) + .unwrap_or("Default") + .to_string(); + let provider = doc + .get("model_provider") + .and_then(|v| v.as_str()) + .unwrap_or("openai"); + endpoint = doc + .get("model_providers") + .and_then(|v| v.get(provider)) + .and_then(|v| v.get("base_url")) + .and_then(|v| v.as_str()) + .unwrap_or("Provider default") + .to_string(); + } + Harness::Claude => { + let doc = object(&text)?; + model = doc + .pointer("/env/ANTHROPIC_MODEL") + .and_then(Value::as_str) + .or_else(|| doc.get("model").and_then(Value::as_str)) + .unwrap_or("Default") + .to_string(); + endpoint = doc + .pointer("/env/ANTHROPIC_BASE_URL") + .and_then(Value::as_str) + .unwrap_or("Anthropic default") + .to_string(); + } + Harness::Pi => { + let doc = object(&read(&files[1])?)?; + model = doc + .get("defaultModel") + .and_then(Value::as_str) + .unwrap_or("Default") + .to_string(); + let provider = doc + .get("defaultProvider") + .and_then(Value::as_str) + .unwrap_or("Default"); + let models = object(&text)?; + endpoint = models + .get("providers") + .and_then(|v| v.get(provider)) + .and_then(|v| v.get("baseUrl")) + .and_then(Value::as_str) + .unwrap_or("Provider default") + .to_string(); + } + } + // The display keeps the URL scheme, host, and port to omit credentials and queries. + let endpoint = url::Url::parse(&endpoint) + .ok() + .map(|u| { + format!( + "{}://{}{}", + u.scheme(), + u.host_str().unwrap_or("?"), + u.port().map(|p| format!(":{p}")).unwrap_or_default() + ) + }) + .unwrap_or_else(|| "Provider default".into()); + Ok(format!( + "Model: {model}\nEndpoint: {endpoint}\nSettings: {}", + files[0].display() + )) +} + +fn read_file(path: &Path) -> Result, String> { + match std::fs::symlink_metadata(path) { + Ok(meta) if meta.file_type().is_symlink() => { + return Err(format!( + "{} is a symlink. Edit its target yourself.", + path.display() + )); + } + Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(None), + Err(e) => return Err(e.to_string()), + _ => {} + } + std::fs::read_to_string(path) + .map(Some) + .map_err(|e| format!("Read {}: {e}", path.display())) +} + +fn read(path: &Path) -> Result { + Ok(read_file(path)?.unwrap_or_default()) +} + +fn object(text: &str) -> Result { + let doc: Value = if text.is_empty() { + json!({}) + } else { + serde_json::from_str(text).map_err(|e| e.to_string())? + }; + if !doc.is_object() { + return Err("Settings must be a JSON object.".into()); + } + Ok(doc) +} + +fn map<'a>(doc: &'a mut Value, key: &str) -> Result<&'a mut Value, String> { + if doc.get(key).is_none() { + doc[key] = json!({}); + } + if !doc[key].is_object() { + return Err(format!("{key} must be a JSON object.")); + } + Ok(&mut doc[key]) +} + +pub fn validate(tool: Harness, root: &str, model: &str, login: bool) -> Result { + let url = url::Url::parse(root).map_err(|e| e.to_string())?; + if url.scheme() != "http" + || !matches!(url.host_str(), Some("localhost" | "127.0.0.1" | "[::1]")) + || !url.username().is_empty() + || url.password().is_some() + || url.query().is_some() + || url.fragment().is_some() + || url.path() != "/" + { + return Err( + "Install requires a local HTTP server URL, such as http://127.0.0.1:4123.".into(), + ); + } + if model.trim().is_empty() { + return Err("Pick a route first.".into()); + } + if tool == Harness::Pi && login { + return Err("Pi's custom provider needs a route with server API credentials. Use Codex or Claude for subscription login forwarding.".into()); + } + // validate returns the parsed URL without a trailing slash so callers can append API paths. + Ok(url.to_string().trim_end_matches('/').to_owned()) +} + +fn codex_settings(text: &str, root: &str, model: &str, login: bool) -> Result { + let mut doc = text + .parse::() + .map_err(|e| e.message().to_owned())?; + if doc + .get("model_providers") + .is_some_and(|item| item.as_table_like().is_none()) + { + return Err("model_providers must be a TOML table.".into()); + } + if doc + .get("model_providers") + .and_then(|v| v.get("sy")) + .is_some_and(|item| item.as_table_like().is_none()) + { + return Err("sy must be a TOML provider table.".into()); + } + doc["model"] = value(model); + doc["model_provider"] = value("sy"); + doc["model_providers"]["sy"]["name"] = value("Switchyard"); + doc["model_providers"]["sy"]["base_url"] = value(format!("{root}/v1")); + doc["model_providers"]["sy"]["wire_api"] = value("responses"); + doc["model_providers"]["sy"]["requires_openai_auth"] = value(login); + // A stale env_key would make Codex require a local API key even when the + // server owns the credentials or forwards the coding tool’s subscription login. + doc["model_providers"]["sy"] + .as_table_like_mut() + .ok_or("sy must be a provider table")? + .remove("env_key"); + Ok(doc.to_string()) +} + +fn claude_settings(text: &str, root: &str, model: &str, login: bool) -> Result { + let mut doc = object(text)?; + let env = map(&mut doc, "env")?; + env["ANTHROPIC_BASE_URL"] = json!(root); + env["ANTHROPIC_MODEL"] = json!(model); + // All model roles use the selected public route, including subagents. + for key in [ + "ANTHROPIC_DEFAULT_OPUS_MODEL", + "ANTHROPIC_DEFAULT_SONNET_MODEL", + "ANTHROPIC_DEFAULT_HAIKU_MODEL", + ] { + env[key] = json!(model); + } + if login { + for key in ["ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY"] { + if env + .get(key) + .and_then(Value::as_str) + .is_some_and(|s| !s.is_empty()) + { + return Err(format!( + "{key} overrides subscription login. Remove it from Claude settings before installing this route." + )); + } + } + } else { + env["ANTHROPIC_AUTH_TOKEN"] = json!("switchyard-local"); + env["ANTHROPIC_API_KEY"] = json!(""); + } + Ok(serde_json::to_string_pretty(&doc).map_err(|e| e.to_string())? + "\n") +} + +pub fn install( + tool: Harness, + files: &[PathBuf], + root: &str, + model: &str, + login: bool, +) -> Result { + let root = validate(tool, root, model, login)?; + let originals = files + .iter() + .map(|p| read_file(p)) + .collect::, _>>()?; + let mut incoming = Vec::new(); + match tool { + Harness::CodexCli | Harness::CodexApp => incoming.push(codex_settings( + originals[0].as_deref().unwrap_or_default(), + &root, + model, + login, + )?), + Harness::Claude => incoming.push(claude_settings( + originals[0].as_deref().unwrap_or_default(), + &root, + model, + login, + )?), + Harness::Pi => { + let mut doc = object(originals[0].as_deref().unwrap_or_default())?; + let providers = map(&mut doc, "providers")?; + providers["switchyard"] = json!({"baseUrl":format!("{root}/v1"), "api":"openai-completions", "apiKey":"switchyard-local", "headers":{"x-switchyard-origin":"pi"}, "models":[{"id":model,"name":model,"reasoning":true,"input":["text"],"contextWindow":128000,"maxTokens":16384,"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0}}]}); + incoming.push(serde_json::to_string_pretty(&doc).map_err(|e| e.to_string())? + "\n"); + let mut settings = object(originals[1].as_deref().unwrap_or_default())?; + settings["defaultProvider"] = json!("switchyard"); + settings["defaultModel"] = json!(model); + incoming + .push(serde_json::to_string_pretty(&settings).map_err(|e| e.to_string())? + "\n"); + } + } + let incoming: Vec<_> = incoming.into_iter().map(Some).collect(); + for (path, before) in files.iter().zip(&originals) { + let backup = backup_path(path); + let absent = absent_path(path); + if read_file(&backup)?.is_some() || read_file(&absent)?.is_some() { + continue; + } + match before { + Some(text) => { + prepare(&backup, text)? + .persist_noclobber(&backup) + .map_err(|e| e.to_string())?; + } + None => { + prepare(&absent, "")? + .persist_noclobber(&absent) + .map_err(|e| e.to_string())?; + } + } + } + replace(files, &originals, &incoming)?; + Ok("Saved the Switchyard settings and kept the original backup. Restart the coding tool. For Codex CLI, use codex -p sy. Pi can reload models with /model. Project settings and shell variables can override these user defaults.".into()) +} + +fn backup_path(path: &Path) -> PathBuf { + path.with_file_name(format!( + "{}.switchyard-original", + path.file_name().unwrap_or_default().to_string_lossy() + )) +} + +// The marker distinguishes an originally missing file from an empty file. +// Restore removes installed settings only when the original file was missing. +fn absent_path(path: &Path) -> PathBuf { + backup_path(path).with_extension("switchyard-original-missing") +} + +pub fn restore(files: &[PathBuf]) -> Result { + let mut restored = Vec::new(); + for path in files { + let original = read_file(&backup_path(path))?; + let absent = read_file(&absent_path(path))?.is_some(); + if original.is_none() && !absent { + return Err("No original backup is available for this installation.".into()); + } + restored.push(original); + } + let current = files + .iter() + .map(|p| read_file(p)) + .collect::, _>>()?; + for (path, before) in files.iter().zip(¤t) { + let Some(before) = before else { + continue; + }; + let mut recovery = tempfile::Builder::new() + .prefix("switchyard-before-restore-") + .tempfile_in(path.parent().ok_or("Settings need a parent directory")?) + .map_err(|e| e.to_string())?; + recovery + .write_all(before.as_bytes()) + .map_err(|e| e.to_string())?; + let (_, kept) = recovery.keep().map_err(|e| e.to_string())?; + eprintln!("Saved the previous settings at {}", kept.display()); + } + replace(files, ¤t, &restored)?; + Ok("Restored original settings. Restart the coding tool.".into()) +} + +fn prepare(path: &Path, text: &str) -> Result { + let parent = path.parent().ok_or("Settings need a parent directory")?; + std::fs::create_dir_all(parent).map_err(|e| e.to_string())?; + let mut temp = tempfile::NamedTempFile::new_in(parent).map_err(|e| e.to_string())?; + temp.write_all(text.as_bytes()) + .and_then(|_| temp.as_file().sync_all()) + .map_err(|e| e.to_string())?; + Ok(temp) +} + +// Each file replacement is atomic, but the set of replacements is not. +// A later failure triggers an attempt to restore files already replaced. +fn replace( + files: &[PathBuf], + before: &[Option], + after: &[Option], +) -> Result<(), String> { + let staged = files + .iter() + .zip(after) + .map(|(path, text)| text.as_deref().map(|text| prepare(path, text)).transpose()) + .collect::, _>>()?; + for (path, expected) in files.iter().zip(before) { + if read_file(path)? != *expected { + return Err(format!( + "{} changed while installing. Refresh and try again.", + path.display() + )); + } + } + for (index, (path, temp)) in files.iter().zip(staged).enumerate() { + let result = match temp { + Some(temp) => temp.persist(path).map(|_| ()).map_err(|e| e.to_string()), + None if before[index].is_some() => { + std::fs::remove_file(path).map_err(|e| e.to_string()) + } + None => Ok(()), + }; + if let Err(error) = result { + for (path, original) in files[..index].iter().zip(before) { + match original { + Some(text) => { + prepare(path, text)? + .persist(path) + .map_err(|e| e.to_string())?; + } + None => std::fs::remove_file(path).map_err(|e| e.to_string())?, + } + } + return Err(error); + } + } + Ok(()) +} + +pub fn binary(tool: Harness) -> Option { + if tool == Harness::CodexApp { + return [ + PathBuf::from("/Applications/Codex.app"), + crate::config::expand_home(Path::new("~/Applications/Codex.app")), + ] + .into_iter() + .find(|p| p.exists()); + } + let name = match tool { + Harness::CodexCli => "codex", + Harness::Claude => "claude", + Harness::Pi => "pi", + Harness::CodexApp => return None, + }; + let mut dirs: Vec<_> = std::env::var_os("PATH") + .map(|s| std::env::split_paths(&s).collect()) + .unwrap_or_default(); + dirs.extend([ + PathBuf::from("/opt/homebrew/bin"), + PathBuf::from("/usr/local/bin"), + crate::config::expand_home(Path::new("~/.local/bin")), + crate::config::expand_home(Path::new("~/.npm-global/bin")), + ]); + dirs.into_iter().map(|p| p.join(name)).find(|p| p.is_file()) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn preserves_user_fields_refreshes_and_restores() { + let dir = tempfile::tempdir().expect("directory"); + for (tool, _) in HARNESSES { + let files = if *tool == Harness::Pi { + vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ] + } else { + vec![dir.path().join(format!("{tool:?}.config"))] + }; + let original = if matches!(tool, Harness::CodexCli | Harness::CodexApp) { + "# user comment\nmodel = 'old'\nsandbox_mode = 'workspace-write'\n" + } else { + "{\"custom\":true}" + }; + std::fs::write(&files[0], original).expect("settings"); + install(*tool, &files, "http://127.0.0.1:4123", "route-a", false).expect("install"); + install(*tool, &files, "http://127.0.0.1:4123", "route-b", false).expect("refresh"); + let current = read(&files[0]).expect("read"); + assert!(current.contains("route-b")); + assert!( + current.contains(if matches!(tool, Harness::CodexCli | Harness::CodexApp) { + "sandbox_mode" + } else { + "custom" + }) + ); + assert_eq!(read(&backup_path(&files[0])).expect("backup"), original); + restore(&files).expect("restore"); + assert_eq!(read(&files[0]).expect("restored"), original); + } + } + #[test] + fn invalid_inputs_change_no_files() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("settings.json"); + for invalid in ["[]", "null", "{", "{\"env\":false}"] { + std::fs::write(&path, invalid).expect("settings"); + assert!( + install( + Harness::Claude, + std::slice::from_ref(&path), + "http://localhost:4123", + "route", + false + ) + .is_err() + ); + assert_eq!(read(&path).expect("read"), invalid); + assert!(!backup_path(&path).exists()); + } + std::fs::write(&path, "{}").expect("settings"); + for root in [ + "https://example.com", + "http://localhost.evil", + "http://user:secret@localhost", + "http://127.0.0.1/path", + "http://localhost?q=a", + ] { + assert!( + install( + Harness::Claude, + std::slice::from_ref(&path), + root, + "route", + false + ) + .is_err() + ); + assert_eq!(read(&path).expect("read"), "{}"); + } + assert!(!backup_path(&path).exists()); + } + #[test] + fn pi_preflights_both_files() { + let dir = tempfile::tempdir().expect("directory"); + let files = vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ]; + std::fs::write(&files[0], "{}").expect("models"); + std::fs::write(&files[1], "[]").expect("settings"); + assert!(install(Harness::Pi, &files, "http://localhost:4123", "route", false).is_err()); + assert_eq!(read(&files[0]).expect("read"), "{}"); + assert!(!backup_path(&files[0]).exists()); + } + #[test] + fn malformed_codex_provider_tables_do_not_panic_or_write() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("config.toml"); + for text in [ + "model_providers = 1", + "model_providers = []", + "[model_providers]\nsy = false", + "[[model_providers.sy]]\nname = 'old'", + ] { + std::fs::write(&path, text).expect("settings"); + assert!( + install( + Harness::CodexCli, + std::slice::from_ref(&path), + "http://localhost:4123", + "route", + false + ) + .is_err() + ); + assert_eq!(read(&path).expect("read"), text); + assert!(!backup_path(&path).exists()); + } + std::fs::write( + &path, + "model_providers = { sy = { name = 'old', env_key = 'OLD_KEY' } }\n", + ) + .expect("settings"); + install( + Harness::CodexCli, + std::slice::from_ref(&path), + "http://localhost:4123", + "route", + false, + ) + .expect("inline table"); + let doc = read(&path) + .expect("read") + .parse::() + .expect("parse"); + assert_eq!( + doc["model_providers"]["sy"]["base_url"].as_str(), + Some("http://localhost:4123/v1") + ); + assert!(doc["model_providers"]["sy"].get("env_key").is_none()); + } + + #[test] + fn restoring_an_absent_original_removes_the_installed_settings() { + let dir = tempfile::tempdir().expect("directory"); + let files = vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ]; + install(Harness::Pi, &files, "http://localhost:4123", "route", false).expect("install"); + install(Harness::Pi, &files, "http://localhost:4123", "other", false).expect("refresh"); + restore(&files).expect("restore"); + assert!(files.iter().all(|path| !path.exists())); + assert!(files.iter().all(|path| absent_path(path).is_file())); + } + + #[test] + fn inspection_omits_url_secrets_and_invalid_toml_source() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("config.toml"); + std::fs::write(&path, "model_provider = 'p'\n[model_providers.p]\nbase_url = 'https://user:SECRET@example.com:8443/v1?key=SECRET'\n").expect("settings"); + let info = inspect(Harness::CodexCli, std::slice::from_ref(&path)).expect("inspect"); + assert!(info.contains("https://example.com:8443")); + assert!(!info.contains("SECRET")); + std::fs::write(&path, "api_key = \"SECRET\n").expect("invalid"); + let error = inspect(Harness::CodexCli, std::slice::from_ref(&path)).expect_err("invalid"); + assert!(!error.contains("SECRET")); + } + + #[test] + fn replacement_prepares_every_file_and_rejects_changed_inputs() { + let dir = tempfile::tempdir().expect("directory"); + let first = dir.path().join("first"); + let blocked = dir.path().join("blocked"); + std::fs::write(&first, "original").expect("first"); + std::fs::write(&blocked, "not a directory").expect("blocked"); + let files = vec![first.clone(), blocked.join("second")]; + assert!( + replace( + &files, + &[Some("original".into()), None], + &[Some("new".into()), Some("new".into())] + ) + .is_err() + ); + assert_eq!(read(&first).expect("read"), "original"); + assert!( + replace( + std::slice::from_ref(&first), + &[Some("stale".into())], + &[Some("new".into())] + ) + .is_err() + ); + assert_eq!(read(&first).expect("read"), "original"); + } + + #[cfg(unix)] + #[test] + fn restore_preflights_symlinks_before_changing_any_settings() { + let dir = tempfile::tempdir().expect("directory"); + let files = vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ]; + for path in &files { + std::fs::write(path, "{}").expect("original"); + } + install(Harness::Pi, &files, "http://localhost:4123", "route", false).expect("install"); + let before = read(&files[0]).expect("read"); + std::fs::remove_file(&files[1]).expect("remove"); + let target = dir.path().join("target"); + std::fs::write(&target, "private").expect("target"); + std::os::unix::fs::symlink(&target, &files[1]).expect("symlink"); + assert!(restore(&files).is_err()); + assert_eq!(read(&files[0]).expect("read"), before); + assert_eq!(std::fs::read_to_string(target).expect("target"), "private"); + } +} diff --git a/crates/switchyard-menubar/src/history.rs b/crates/switchyard-menubar/src/history.rs new file mode 100644 index 0000000000..8e0abf7a59 --- /dev/null +++ b/crates/switchyard-menubar/src/history.rs @@ -0,0 +1,192 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! This module reads recent completed model calls and filters them by recorded IDs. + +use serde::Deserialize; +use std::collections::{BTreeMap, VecDeque}; +use std::io::{Read, Seek, SeekFrom}; +use std::path::Path; + +const MAX_BYTES: u64 = 8 * 1024 * 1024; +const MAX_RECORDS: usize = 5000; + +#[derive(Debug, Deserialize)] +pub struct Entry { + pub ts: String, + pub model: String, + #[serde(default)] + pub session_id: Option, + #[serde(default)] + pub turn_id: Option, + #[serde(default)] + pub route_id: String, + #[serde(default)] + pub tier: String, + #[serde(default)] + pub prompt_tokens: u64, + #[serde(default)] + pub cached_tokens: u64, + #[serde(default)] + pub completion_tokens: u64, +} + +#[derive(Default)] +pub struct History { + pub entries: Vec, + pub limited: bool, + pub skipped: usize, +} + +pub fn load(path: &Path) -> Result { + let mut file = match std::fs::File::open(path) { + Ok(f) => f, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(History::default()), + Err(e) => return Err(e.to_string()), + }; + let size = file.metadata().map_err(|e| e.to_string())?.len(); + let offset = size.saturating_sub(MAX_BYTES); + // The preceding byte distinguishes a partial record from a complete first + // record when the byte limit starts immediately after a newline. + let mut previous = *b"\n"; + if offset > 0 { + file.seek(SeekFrom::Start(offset - 1)) + .map_err(|e| e.to_string())?; + file.read_exact(&mut previous).map_err(|e| e.to_string())?; + } + file.seek(SeekFrom::Start(offset)) + .map_err(|e| e.to_string())?; + let mut bytes = Vec::new(); + file.take(MAX_BYTES) + .read_to_end(&mut bytes) + .map_err(|e| e.to_string())?; + let mut history = parse(&bytes, offset > 0 && previous[0] != b'\n'); + history.limited |= offset > 0; + Ok(history) +} + +fn parse(bytes: &[u8], truncated: bool) -> History { + let mut result = History { + limited: truncated, + ..History::default() + }; + let mut lines = bytes.split_inclusive(|b| *b == b'\n'); + if truncated { + lines.next(); + } + let mut entries = VecDeque::new(); + for line in lines { + if !line.ends_with(b"\n") { + break; + } + match serde_json::from_slice::(line) { + Ok(entry) + if !entry.model.trim().is_empty() + && chrono::DateTime::parse_from_rfc3339(&entry.ts).is_ok() => + { + if entries.len() == MAX_RECORDS { + entries.pop_front(); + result.limited = true; + } + entries.push_back(entry); + } + _ => result.skipped += 1, + } + } + result.entries = entries.into(); + result +} + +impl History { + pub fn sessions(&self) -> Vec { + self.entries + .iter() + .filter_map(|e| e.session_id.as_deref()) + .filter(|s| !s.trim().is_empty()) + .map(str::to_string) + .collect::>() + .into_iter() + .collect() + } + + pub fn display(&self, session: Option<&str>) -> String { + let mut lines = vec![format!("{} completed requests{} · {} unreadable records skipped", self.entries.len(), if self.limited { " in the recent log window" } else { "" }, self.skipped), "Input includes cached reads. Classifier calls are routing overhead. Each line is one model call; a user turn can contain several calls.".into()]; + let entries: Vec<_> = self + .entries + .iter() + .filter(|e| session.is_none_or(|s| e.session_id.as_deref() == Some(s))) + .collect(); + let mut models: BTreeMap<&str, (u64, u64, u64)> = BTreeMap::new(); + for entry in &entries { + let totals = models.entry(&entry.model).or_default(); + totals.0 = totals.0.saturating_add(entry.prompt_tokens); + totals.1 = totals.1.saturating_add(entry.cached_tokens); + totals.2 = totals.2.saturating_add(entry.completion_tokens); + } + lines.push("\nModels in this view".into()); + for (model, (input, cached, output)) in models { + lines.push(format!( + "{model} Input {input} Cached {cached} Output {output}" + )); + } + lines.push("\nRecent calls (newest first)".into()); + for entry in entries.into_iter().rev() { + lines.push(format!("\n{} {}{}\nSession: {} Turn: {}\nRoute: {} Input: {} Cached: {} Output: {}", entry.ts, entry.model, if entry.tier == "classifier" { " (routing overhead)" } else { "" }, entry.session_id.as_deref().filter(|s| !s.trim().is_empty()).unwrap_or("Not recorded"), entry.turn_id.as_deref().filter(|s| !s.trim().is_empty()).unwrap_or("Not recorded"), entry.route_id, entry.prompt_tokens, entry.cached_tokens, entry.completion_tokens)); + } + if self.entries.is_empty() { + lines.push("No completed calls recorded. Run a coding session through Switchyard, then click Refresh.".into()); + } + lines.join("\n") + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn groups_recorded_ids_and_never_displays_content() { + let bytes = b"{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"actual\",\"session_id\":\"s\",\"turn_id\":\"t\",\"prompt_tokens\":12,\"completion_tokens\":3,\"messages\":\"SECRET\"}\n{\"ts\":\"2026-10-08T12:00:01Z\",\"model\":\"judge\",\"tier\":\"classifier\"}\ninvalid\n{\"model\":\"unfinished\"}"; + let history = parse(bytes, false); + assert_eq!(history.sessions(), vec!["s"]); + assert_eq!(history.entries.len(), 2); + assert_eq!(history.skipped, 1); + let text = history.display(Some("s")); + assert!(text.contains("Turn: t")); + assert!(text.contains("Input: 12")); + assert!(!text.contains("judge")); + assert!(!text.contains("SECRET")); + assert!(history.display(None).contains("Not recorded")); + } + #[test] + fn reads_a_bounded_tail_and_keeps_only_recent_records() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("log"); + let line = "{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"m\"}\n"; + std::fs::write(&path, line.repeat(MAX_RECORDS + 1)).expect("log"); + let history = load(&path).expect("load"); + assert_eq!(history.entries.len(), MAX_RECORDS); + assert!(history.limited); + let mut contents = vec![b'x'; MAX_BYTES as usize]; + contents.extend_from_slice(b"\n"); + contents.extend_from_slice(line.as_bytes()); + std::fs::write(&path, contents).expect("large log"); + let history = load(&path).expect("load tail"); + assert_eq!(history.entries.len(), 1); + assert!(history.limited); + } + // The cutoff falls after a newline, so the first complete record must stay. + #[test] + fn a_byte_limit_aligned_to_a_record_keeps_that_record() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("log"); + let line = b"{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"first\"}\n"; + let mut contents = b"discarded prefix\n".to_vec(); + contents.extend_from_slice(line); + contents.resize(contents.len() + MAX_BYTES as usize - line.len(), b' '); + std::fs::write(&path, contents).expect("log"); + let history = load(&path).expect("load"); + assert_eq!(history.entries.len(), 1); + assert_eq!(history.entries[0].model, "first"); + assert!(history.limited); + } +} diff --git a/crates/switchyard-menubar/src/main.rs b/crates/switchyard-menubar/src/main.rs index 732c6d02ce..9f31fababc 100644 --- a/crates/switchyard-menubar/src/main.rs +++ b/crates/switchyard-menubar/src/main.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Menu bar companion for a locally running Switchyard server. +//! The macOS app shows usage and manages settings for a local Switchyard server. //! //! The server owns routing; this process reads what the server wrote. It //! shows today's and this week's traffic, and what that traffic would have @@ -9,22 +9,31 @@ //! routes…" window edits a route in the server config and restarts the //! server. +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod accounts; mod app; mod config; +#[cfg(target_os = "macos")] +mod dashboard; +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod harness; mod health; +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod history; mod pricing; mod rollup; +#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod sessions; mod summary; -// Only the macOS picker window calls these. They build on every target so -// that their tests also run in CI, which does not run on macOS. +// The macOS windows use these modules. They build on every target so their +// tests also run in CI, which does not run on macOS. #[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod models; #[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod server; #[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod server_config; -// The status item, the glyph it draws, and the routes window with its sidebar -// are the only platform-specific code. +// The status item, its glyph, and the app windows use macOS APIs. #[cfg(target_os = "macos")] mod icon; #[cfg(target_os = "macos")] diff --git a/crates/switchyard-menubar/src/sessions.rs b/crates/switchyard-menubar/src/sessions.rs new file mode 100644 index 0000000000..3032f40cbc --- /dev/null +++ b/crates/switchyard-menubar/src/sessions.rs @@ -0,0 +1,392 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! This module starts CLI sessions with separate worktrees and model settings. + +use crate::harness::{self, Harness}; +use std::io::Write; +use std::path::Path; + +// PendingSession attempts cleanup until open accepts the launch request. +// A successful launch keeps the worktree and settings for the coding session. +struct PendingSession { + project: std::path::PathBuf, + worktree: std::path::PathBuf, + private: std::path::PathBuf, + branch: String, + opened: bool, +} + +impl Drop for PendingSession { + fn drop(&mut self) { + if self.opened { + return; + } + let _ = std::process::Command::new("git") + .arg("-C") + .arg(&self.project) + .args(["worktree", "remove"]) + .arg(&self.worktree) + .output(); + let _ = std::process::Command::new("git") + .arg("-C") + .arg(&self.project) + .args(["branch", "-d", &self.branch]) + .output(); + let _ = std::fs::remove_dir_all(&self.private); + } +} + +pub(crate) fn quote(text: &str) -> String { + format!("'{}'", text.replace('\'', "'\\''")) +} + +pub fn launch( + tool: Harness, + project: &Path, + model: &str, + root: &str, + login: bool, + account: Option<&Path>, +) -> Result { + let root = harness::validate(tool, root, model, login)?; + if let Some(account) = account { + crate::accounts::validate(tool, account)?; + } + if tool == Harness::CodexApp { + return Err("Choose Codex CLI to launch a worktree session. Codex app uses its own workspace controls.".into()); + } + let binary = harness::binary(tool).ok_or("Install the selected coding tool first.")?; + let project = std::fs::canonicalize(project).map_err(|e| format!("Open project: {e}"))?; + let output = std::process::Command::new("git") + .arg("-C") + .arg(&project) + .args(["rev-parse", "--show-toplevel"]) + .output() + .map_err(|e| e.to_string())?; + if !output.status.success() { + return Err("Choose a Git checkout directory.".into()); + } + let id = format!("sy-{}", uuid::Uuid::now_v7()); + let worktree = crate::config::expand_home(Path::new("~/.switchyard/worktrees")).join(&id); + std::fs::create_dir_all( + worktree + .parent() + .ok_or("Worktree needs a parent directory")?, + ) + .map_err(|e| e.to_string())?; + let output = std::process::Command::new("git") + .arg("-C") + .arg(&project) + .args(["worktree", "add", "-b"]) + .arg(&id) + .arg(&worktree) + .arg("HEAD") + .output() + .map_err(|e| e.to_string())?; + if !output.status.success() { + return Err(format!( + "Could not create worktree: {}", + String::from_utf8_lossy(&output.stderr) + )); + } + let private = worktree + .parent() + .ok_or("Worktree needs a parent directory")? + .join(format!("{id}-settings")); + let mut pending = PendingSession { + project, + worktree: worktree.clone(), + private: private.clone(), + branch: id.clone(), + opened: false, + }; + let files = match tool { + Harness::Pi => vec![private.join("models.json"), private.join("settings.json")], + _ => vec![private.join("settings.json")], + }; + if matches!(tool, Harness::Claude | Harness::Pi) { + std::fs::create_dir_all(&private).map_err(|e| e.to_string())?; + harness::install(tool, &files, &root, model, login)?; + } + let program = quote(&binary.display().to_string()); + let command = match tool { + Harness::CodexCli => format!( + "{program} -c {} -c {} -c {}", + quote(&format!("model={}", toml_edit::Value::from(model))), + quote("model_provider=\"sy\""), + quote(&format!( + "model_providers.sy={{name=\"Switchyard\",base_url={},wire_api=\"responses\",requires_openai_auth={login},http_headers={{\"x-switchyard-session-id\"={},\"x-switchyard-origin\"=\"codex\"}}}}", + toml_edit::Value::from(format!("{}/v1", root.trim_end_matches('/'))), + toml_edit::Value::from(id.as_str()) + )) + ), + Harness::Claude => format!( + "env ANTHROPIC_CUSTOM_HEADERS={} {program} --settings {} --model {}", + quote(&format!( + "x-switchyard-session-id: {id}\nx-switchyard-origin: claude" + )), + quote(&files[0].display().to_string()), + quote(model) + ), + Harness::Pi => format!( + "env PI_CODING_AGENT_DIR={} {program} --provider switchyard --model {}", + quote(&private.display().to_string()), + quote(model) + ), + Harness::CodexApp => return Err("Choose a CLI tool.".into()), + }; + let default_files = harness::paths(tool); + let account = account.or_else(|| default_files[0].parent()); + let account_env = match (tool, account) { + (Harness::CodexCli, Some(path)) => { + format!("export CODEX_HOME={}\n", quote(&path.display().to_string())) + } + (Harness::Claude, Some(path)) => format!( + "export CLAUDE_CONFIG_DIR={}\n", + quote(&path.display().to_string()) + ), + _ => String::new(), + }; + let subscription_env = if tool == Harness::Claude && login { + "unset ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY CLAUDE_CODE_OAUTH_TOKEN\n" + } else { + "" + }; + let mut script = tempfile::Builder::new() + .prefix("switchyard-session-") + .suffix(".command") + .tempfile() + .map_err(|e| e.to_string())?; + writeln!(script,"#!/bin/bash\nexport PATH=\"$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH\"\nrm -- \"$0\"\ncd {} || exit 1\n{account_env}{subscription_env}{command}",quote(&worktree.display().to_string())).map_err(|e|e.to_string())?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + script + .as_file() + .set_permissions(std::fs::Permissions::from_mode(0o700)) + .map_err(|e| e.to_string())?; + } + crate::server::command("open", &[&script.path().display().to_string()])?; + pending.opened = true; + let _ = script.keep().map_err(|e| e.to_string())?; + Ok(format!( + "Opened a new session in Terminal.\nWorktree: {}\nBranch: {id}\nModel route: {model}\nRemove the worktree with git worktree remove after saving or discarding its changes.\nPi supplies session/turn IDs only when its integration sends them; unidentified calls remain visible in All sessions.", + worktree.display() + )) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn quotes_shell_metacharacters_literally() { + assert_eq!(quote("a'b $(touch /tmp/no)"), "'a'\\''b $(touch /tmp/no)'"); + } + #[test] + fn rejected_launch_inputs_create_no_worktree_or_settings() { + let dir = tempfile::tempdir().expect("directory"); + assert!( + launch( + Harness::CodexCli, + dir.path(), + "route", + "https://remote.example", + true, + None + ) + .is_err() + ); + assert!( + launch( + Harness::Pi, + dir.path(), + "route", + "http://localhost:4123", + true, + None + ) + .is_err() + ); + assert!( + std::fs::read_dir(dir.path()) + .expect("contents") + .next() + .is_none() + ); + } + + #[test] + fn failed_session_setup_removes_its_worktree_branch_and_private_settings() { + let dir = tempfile::tempdir().expect("directory"); + let project = dir.path().join("project"); + std::fs::create_dir(&project).expect("project"); + let git = |args: &[&str]| { + let output = std::process::Command::new("git") + .arg("-C") + .arg(&project) + .args(args) + .output() + .expect("git"); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + output + }; + git(&["init"]); + git(&[ + "-c", + "user.name=Fixture", + "-c", + "user.email=fixture@example.invalid", + "-c", + "commit.gpgsign=false", + "commit", + "--allow-empty", + "-m", + "fixture", + ]); + let worktree = dir.path().join("worktree"); + let private = dir.path().join("settings"); + git(&[ + "worktree", + "add", + "-b", + "session-fixture", + worktree.to_str().expect("path"), + ]); + std::fs::create_dir(&private).expect("private"); + std::fs::write(private.join("settings.json"), "{}").expect("settings"); + drop(PendingSession { + project: project.clone(), + worktree: worktree.clone(), + private: private.clone(), + branch: "session-fixture".into(), + opened: false, + }); + assert!(!worktree.exists()); + assert!(!private.exists()); + assert!( + !String::from_utf8_lossy(&git(&["branch", "--list", "session-fixture"]).stdout) + .contains("session-fixture") + ); + } + // The subprocess isolates HOME and PATH. Its Terminal stub supplies a + // conflicting login to check that the generated script selects the account. + #[cfg(unix)] + #[test] + fn generated_sessions_use_explicit_accounts_without_changing_user_defaults() { + use std::os::unix::fs::PermissionsExt; + if let Ok(fixture) = std::env::var("SWITCHYARD_SESSION_FIXTURE") { + let fixture = std::path::PathBuf::from(fixture); + let tool = if std::env::var("SWITCHYARD_SESSION_TOOL").expect("tool") == "codex" { + Harness::CodexCli + } else { + Harness::Claude + }; + let account = + std::env::var_os("SWITCHYARD_SESSION_ACCOUNT").map(std::path::PathBuf::from); + launch( + tool, + &fixture.join("project"), + "route'$(literal)", + "http://localhost:4123", + tool == Harness::Claude, + account.as_deref(), + ) + .expect("launch"); + return; + } + for (name, named) in [ + ("codex", false), + ("codex", true), + ("claude", false), + ("claude", true), + ] { + let fixture = tempfile::tempdir().expect("fixture"); + let home = fixture.path().join("home"); + let bin = fixture.path().join("bin"); + let project = fixture.path().join("project"); + for path in [&home, &bin, &project] { + std::fs::create_dir(path).expect("directory"); + } + for args in [ + vec!["init"], + vec![ + "-c", + "user.name=Fixture", + "-c", + "user.email=fixture@example.invalid", + "-c", + "commit.gpgsign=false", + "commit", + "--allow-empty", + "-m", + "fixture", + ], + ] { + assert!( + std::process::Command::new("git") + .arg("-C") + .arg(&project) + .args(args) + .output() + .expect("git") + .status + .success() + ); + } + let default = home.join("default-login"); + std::fs::create_dir(&default).expect("default"); + std::fs::write(default.join("settings.json"), "{\"user\":true}").expect("settings"); + let account = home.join(".switchyard/accounts").join(name).join("named"); + if named { + std::fs::create_dir_all(&account).expect("account"); + } + let output = fixture.path().join("arguments"); + let captured = fixture.path().join("session.command"); + let open = bin.join("open"); + std::fs::write(&open, format!("#!/bin/bash\ncp -- \"$1\" {}\nexport CODEX_HOME=wrong-terminal-login CLAUDE_CONFIG_DIR=wrong-terminal-login ANTHROPIC_AUTH_TOKEN=wrong-token\nbash \"$1\"\n",quote(&captured.display().to_string()))).expect("open"); + let tool = bin.join(name); + std::fs::write(&tool, format!("#!/bin/bash\nprintf '%s\\n' \"${{CODEX_HOME:-}}\" \"${{CLAUDE_CONFIG_DIR:-}}\" \"${{ANTHROPIC_AUTH_TOKEN:-}}\" \"$@\" > {}\n", quote(&output.display().to_string()))).expect("tool"); + for path in [&open, &tool] { + std::fs::set_permissions(path, std::fs::Permissions::from_mode(0o700)) + .expect("executable"); + } + let mut child = std::process::Command::new(std::env::current_exe().expect("runner")); + child.args(["--exact", "sessions::tests::generated_sessions_use_explicit_accounts_without_changing_user_defaults"]) + .env("SWITCHYARD_SESSION_FIXTURE", fixture.path()).env("SWITCHYARD_SESSION_TOOL", name) + .env("HOME", &home).env("CODEX_HOME", &default).env("CLAUDE_CONFIG_DIR", &default) + .env("PATH", format!("{}:/usr/bin:/bin", bin.display())); + if named { + child.env("SWITCHYARD_SESSION_ACCOUNT", &account); + } + let result = child.output().expect("child"); + assert!( + result.status.success(), + "{}\n{}", + String::from_utf8_lossy(&result.stdout), + String::from_utf8_lossy(&result.stderr) + ); + let arguments = std::fs::read_to_string(output).expect("arguments"); + let lines: Vec<_> = arguments.lines().collect(); + let expected = if named { &account } else { &default }; + assert_eq!( + lines[usize::from(name == "claude")], + expected.to_str().expect("path") + ); + if name == "claude" { + assert_eq!(lines[2], ""); + } + assert!(arguments.contains("route'$(literal)")); + let script = std::fs::read_to_string(captured).expect("script"); + assert!(script.contains("x-switchyard-session-id")); + assert_eq!( + std::fs::read_to_string(default.join("settings.json")).expect("settings"), + "{\"user\":true}" + ); + } + } +} diff --git a/crates/switchyard-menubar/src/tray.rs b/crates/switchyard-menubar/src/tray.rs index 26cc92d8cc..5c6f7859b7 100644 --- a/crates/switchyard-menubar/src/tray.rs +++ b/crates/switchyard-menubar/src/tray.rs @@ -1,10 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! The macOS status item: event loop, menu, and the menu's actions. -//! -//! Everything platform-specific lives here and in the routes window, so the -//! rest of the crate builds and is tested on any target. +//! This module runs the macOS status item, its menu, and the app event loop. use objc2::rc::autoreleasepool; use std::path::Path; @@ -18,6 +15,7 @@ use tray_icon::{Icon, TrayIconBuilder}; use crate::app::refresh; use crate::config::Config; +use crate::dashboard::Dashboard; use crate::health::ServerStatus; use crate::icon; use crate::models::CACHE_FILE; @@ -25,13 +23,15 @@ use crate::picker::Picker; use crate::server::{command, restart}; use crate::summary::Row; +const OPEN_APP: &str = "open-app"; +const INSTALL: &str = "install"; const EDIT_ROUTES: &str = "edit-routes"; const RESTART: &str = "restart-server"; const OPEN_CONFIG: &str = "open-config"; const OPEN_SETTINGS: &str = "open-settings"; const QUIT: &str = "quit"; -/// How long the loop blocks waiting for a UI event before checking the clock. +/// EVENT_POLL sets how long the loop waits for a UI event before checking the clock. const EVENT_POLL: f64 = 0.1; /// Runs the status item until the user quits. `settings` is the settings @@ -40,11 +40,10 @@ const EVENT_POLL: f64 = 0.1; pub fn run(mut config: Config, settings: &Path) -> Result<(), String> { let mtm = MainThreadMarker::new().ok_or("the menu bar must run on the main thread")?; let ns_app = NSApplication::sharedApplication(mtm); - // Accessory keeps the process out of the Dock and the app switcher. - ns_app.setActivationPolicy(NSApplicationActivationPolicy::Accessory); - // An accessory app shows no menu bar, but AppKit still finds keyboard - // shortcuts, such as Cmd-C in a text field and Cmd-W in the routes - // window, through the app's main menu. + // The Regular policy shows the app in the Dock and the app switcher. + ns_app.setActivationPolicy(NSApplicationActivationPolicy::Regular); + // AppKit uses the main menu for shortcuts such as Cmd-C in a text field, + // Cmd-W in a window, and Cmd-Q to request quitting. let main_menu = main_menu()?; main_menu.init_for_nsapp(); @@ -62,12 +61,15 @@ pub fn run(mut config: Config, settings: &Path) -> Result<(), String> { ns_app.finishLaunching(); + let mut dashboard = Dashboard::new(mtm, &config); + dashboard.show(false); let mut picker: Option = None; let mut next = Instant::now() + interval(&config); let mut actions: Vec<(&str, thread::JoinHandle>)> = Vec::new(); loop { let quit = autoreleasepool(|_| -> Result { pump_events(&ns_app); + dashboard.poll(); if let Some(picker) = picker.as_mut() { picker.poll(); } @@ -78,18 +80,20 @@ pub fn run(mut config: Config, settings: &Path) -> Result<(), String> { QUIT => { // Quitting between the save and the restart would leave a // saved config that the server has not loaded. - if picker.as_ref().is_some_and(Picker::is_busy) { + if picker.as_ref().is_some_and(Picker::is_busy) || dashboard.is_busy() { alert( mtm, - "Apply is still running", - "Quitting now could leave the new config saved while the server \ - still runs the old one. Wait for the result in the routes window, \ - then quit.", + "Switchyard is still working", + "Wait for the current operation to finish in the Switchyard or \ + routes window, then quit. Quitting during a settings change could \ + interrupt the save or server restart.", ); } else { return Ok(true); } } + OPEN_APP => dashboard.show(false), + INSTALL => dashboard.show(true), EDIT_ROUTES => picker .get_or_insert_with(|| { Picker::new(mtm, &config, settings.with_file_name(CACHE_FILE)) @@ -140,6 +144,7 @@ pub fn run(mut config: Config, settings: &Path) -> Result<(), String> { Ok(loaded) => { eprintln!("switchyard-menubar: reloaded {}", settings.display()); config = loaded; + dashboard.set_settings(&config); if let Some(picker) = picker.as_mut() { picker.set_settings(&config); } @@ -248,6 +253,8 @@ fn menu(rows: &[Row]) -> Result { } append(&PredefinedMenuItem::separator())?; for (id, text) in [ + (OPEN_APP, "Open Switchyard…"), + (INSTALL, "Install…"), (EDIT_ROUTES, "Edit routes…"), (RESTART, "Restart server"), (OPEN_CONFIG, "Open server config…"), @@ -259,9 +266,22 @@ fn menu(rows: &[Row]) -> Result { Ok(menu) } -/// Builds the app's hidden main menu, which gives text fields their Edit -/// shortcuts and windows their Cmd-W shortcut. +/// The main menu provides Edit shortcuts, Cmd-W for windows, and Cmd-Q to quit. fn main_menu() -> Result { + let application = + Submenu::with_items( + "Switchyard", + true, + &[&MenuItem::with_id( + QUIT, + "Quit", + true, + Some("Cmd+Q".parse().map_err( + |e: tray_icon::menu::accelerator::AcceleratorParseError| e.to_string(), + )?), + )], + ) + .map_err(|error| error.to_string())?; let edit = Submenu::with_items( "Edit", true, @@ -278,7 +298,8 @@ fn main_menu() -> Result { .map_err(|error| format!("build the Edit menu: {error}"))?; let window = Submenu::with_items("Window", true, &[&PredefinedMenuItem::close_window(None)]) .map_err(|error| format!("build the Window menu: {error}"))?; - Menu::with_items(&[&edit, &window]).map_err(|error| format!("build the main menu: {error}")) + Menu::with_items(&[&application, &edit, &window]) + .map_err(|error| format!("build the main menu: {error}")) } /// Drains pending AppKit events, blocking briefly when there are none. diff --git a/crates/switchyard-server/src/lib.rs b/crates/switchyard-server/src/lib.rs index 9ee6700712..fd68d13833 100644 --- a/crates/switchyard-server/src/lib.rs +++ b/crates/switchyard-server/src/lib.rs @@ -1693,16 +1693,17 @@ mod tests { use super::*; - /// A successful judge call lands in the per-session routing snapshot under its - /// model id with the classifier tier, while routed calls stay off the observer's - /// log path — they are logged with terminal usage when the served response is - /// observed, so an append here would double count them. + /// The observer logs judge calls with their model IDs, classifier tier, and + /// recorded session and turn IDs. The served response logs routed calls with + /// their final usage, so logging them here would count each routed call twice. #[test] - fn stats_observer_logs_judge_calls_to_the_routing_log() { + fn stats_observer_logs_judge_calls_to_the_routing_log() -> Result<(), Box> + { let dir = tempfile::tempdir().expect("temp dir"); let log = SharedRoutingLog::new(dir.path().join("routing.jsonl")).expect("routing log"); let mut headers = HeaderMap::new(); headers.insert("proxy_x_session_id", "session-1".parse().expect("header")); + headers.insert("x-switchyard-turn-id", "turn-1".parse()?); let metadata = metadata_from_headers(headers); let context = routing_log::RoutingLogContext::from_metadata(&metadata); let observer = stats_observer(StatsAccumulator::default(), Some((log.clone(), context))); @@ -1736,6 +1737,10 @@ mod tests { assert_eq!(snapshot["models"]["judge-model"]["prompt_tokens"], 100); assert_eq!(snapshot["models"]["judge-model"]["completion_tokens"], 7); assert!(snapshot["models"].get("routed-model").is_none()); + let record: serde_json::Value = serde_json::from_str(&std::fs::read_to_string(&log.path)?)?; + assert_eq!(record["session_id"], "session-1"); + assert_eq!(record["turn_id"], "turn-1"); + Ok(()) } #[derive(Clone)] diff --git a/crates/switchyard-server/src/routing_log.rs b/crates/switchyard-server/src/routing_log.rs index cd1a21f737..674db1b6c5 100644 --- a/crates/switchyard-server/src/routing_log.rs +++ b/crates/switchyard-server/src/routing_log.rs @@ -58,6 +58,7 @@ impl RoutingLog { task: context.task.map(Cow::Owned), trial_id: context.trial_id.map(Cow::Owned), session_id: context.session_id.map(Cow::Owned), + turn_id: context.turn_id.map(Cow::Owned), model: model.into(), tier: tier.unwrap_or("").into(), prompt_tokens: usage.prompt_tokens, @@ -108,6 +109,7 @@ pub(crate) struct RoutingLogContext { task: Option, trial_id: Option, session_id: Option, + turn_id: Option, } impl RoutingLogContext { @@ -126,6 +128,7 @@ impl RoutingLogContext { trial_id: headers .and_then(|headers| nonempty_header(headers, TRIAL_ID_HEADER)) .map(str::to_string), + turn_id: metadata.turn_id.clone(), session_id: metadata.session_id.clone().or_else(|| { headers .and_then(|headers| nonempty_header(headers, LEGACY_SESSION_ID_HEADER)) @@ -159,6 +162,8 @@ struct RoutingRecord<'a> { trial_id: Option>, #[serde(borrow)] session_id: Option>, + #[serde(borrow)] + turn_id: Option>, model: Cow<'a, str>, tier: Cow<'a, str>, prompt_tokens: u64, diff --git a/crates/switchyard-server/tests/server.rs b/crates/switchyard-server/tests/server.rs index b8f5bffe4e..a000f8f735 100644 --- a/crates/switchyard-server/tests/server.rs +++ b/crates/switchyard-server/tests/server.rs @@ -4040,6 +4040,7 @@ async fn routing_log_prefers_canonical_and_preserves_legacy_fallback() -> TestRe .uri("/v1/chat/completions") .header("content-type", "application/json") .header("x-switchyard-session-id", "canonical-session") + .header("x-switchyard-turn-id", "canonical-turn") .header("proxy_x_session_id", "legacy-session") .header("x-switchyard-origin", r#"custom-agent/"quoted"\path"#) .body(Body::from(serde_json::to_vec(&json!({ @@ -4099,8 +4100,10 @@ async fn routing_log_prefers_canonical_and_preserves_legacy_fallback() -> TestRe let first: Value = serde_json::from_str(records.lines().next().ok_or("routing log was empty")?)?; assert_eq!(first["session_id"], "canonical-session"); + assert_eq!(first["turn_id"], "canonical-turn"); assert_eq!(first["origin"], r#"custom-agent/"quoted"\path"#); let second: Value = serde_json::from_str(records.lines().nth(1).ok_or("missing record")?)?; + assert_eq!(second["turn_id"], Value::Null); assert_eq!(second.get("origin"), Some(&Value::Null)); assert!( first["ts"] @@ -4208,6 +4211,7 @@ async fn routing_log_keeps_the_canonical_session_id_until_a_stream_drains() -> T })), &[ ("x-switchyard-session-id", "streaming-session"), + ("x-switchyard-turn-id", "streaming-turn"), ("x-switchyard-origin", "codex-cli"), ], ) @@ -4232,6 +4236,7 @@ async fn routing_log_keeps_the_canonical_session_id_until_a_stream_drains() -> T let record: Value = serde_json::from_str(&std::fs::read_to_string(log_path)?)?; assert_eq!(record["route_id"], ROUTE_MODEL); + assert_eq!(record["turn_id"], "streaming-turn"); assert_eq!(record["algorithm"], "random"); assert_eq!(record["origin"], "codex-cli"); Ok(()) diff --git a/scripts/macos/common.sh b/scripts/macos/common.sh index 9978601f41..bf67ceff63 100644 --- a/scripts/macos/common.sh +++ b/scripts/macos/common.sh @@ -10,6 +10,7 @@ source "$(dirname "${BASH_SOURCE[0]}")/../common.sh" SERVER_LABEL="com.nvidia.switchyard.server" MENUBAR_LABEL="com.nvidia.switchyard.menubar" LAUNCH_AGENTS="$HOME/Library/LaunchAgents" +APP_PATH="$HOME/Applications/Switchyard.app" CODEX_CONFIG="$CODEX_DIR/config.toml" # Codex reads `--profile sy` from its own file next to config.toml. A # [profiles.sy] table in config.toml is rejected outright as legacy config. diff --git a/scripts/macos/install.sh b/scripts/macos/install.sh index 43c97c9c07..bfd2490aed 100755 --- a/scripts/macos/install.sh +++ b/scripts/macos/install.sh @@ -2,12 +2,11 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # -# Installs the Switchyard background server and its menu bar companion as -# per-user LaunchAgents and sets up a `sy` Codex profile. +# This script installs Switchyard.app, loads the server and app as per-user +# LaunchAgents, and sets up a `sy` Codex profile. # -# Keeps existing server and menu bar settings and backs up sy.config.toml -# before replacing it. -# Run with --dry-run to print what would happen. +# It keeps existing server and menu bar settings and backs up sy.config.toml +# before replacing it. The --dry-run option prints the installation commands. set -euo pipefail @@ -41,8 +40,11 @@ if [[ "$(uname -s)" != "Darwin" ]]; then fi step "Building release binaries" -run cargo build --release --manifest-path "$REPO_ROOT/Cargo.toml" \ - -p switchyard-server -p switchyard-menubar +( + cd "$REPO_ROOT" + run cargo build --release --manifest-path "$REPO_ROOT/Cargo.toml" \ + --target-dir "$REPO_ROOT/target" -p switchyard-server -p switchyard-menubar +) step "Installing binaries into $SY_HOME/bin" run mkdir -p "$SY_HOME/bin" "$SY_HOME/logs" @@ -50,6 +52,41 @@ for binary in switchyard-server switchyard-menubar; do run install -m 755 "$REPO_ROOT/target/release/$binary" "$SY_HOME/bin/$binary" done +step "Installing $APP_PATH" +run mkdir -p "$APP_PATH/Contents/MacOS" "$APP_PATH/Contents/Resources" +run install -m 755 "$REPO_ROOT/target/release/switchyard-menubar" "$APP_PATH/Contents/MacOS/switchyard-menubar" +write_always "$APP_PATH/Contents/Info.plist" < + + +CFBundleIdentifiercom.nvidia.switchyard +CFBundleNameSwitchyard +CFBundleDisplayNameSwitchyard +CFBundleExecutableSwitchyard +CFBundlePackageTypeAPPL +CFBundleShortVersionString$(sed -n 's/^version = "\([^"]*\)"/\1/p' "$REPO_ROOT/Cargo.toml" | head -1) +LSMinimumSystemVersion12.0 +NSHighResolutionCapable + +EOF +# Bash's printf %q keeps source and settings paths literal in generated scripts. +shell_quote() { printf '%q' "$1"; } +write_always "$APP_PATH/Contents/MacOS/Switchyard" < @@ -154,7 +192,7 @@ write_always "$LAUNCH_AGENTS/$MENUBAR_LABEL.plist" <$MENUBAR_LABEL ProgramArguments - $XML_SY_HOME/bin/switchyard-menubar + $XML_APP_PATH/Contents/MacOS/Switchyard $XML_SY_HOME/menubar.toml RunAtLoad @@ -202,4 +240,5 @@ step "Done" say "Server: http://127.0.0.1:$SY_PORT (logs in $SY_HOME/logs)" say "Use it with: codex -p sy (requires Codex CLI 0.134.0 or newer)" say "Settings: $SY_HOME/menubar.toml" -say "Look for the Switchyard glyph in the menu bar." +say "App: $APP_PATH (open it from Finder or Spotlight)" +say "Use Update from source… in the app to rebuild from this checkout." diff --git a/scripts/macos/uninstall.sh b/scripts/macos/uninstall.sh index ad4314229f..ae0dc6531f 100755 --- a/scripts/macos/uninstall.sh +++ b/scripts/macos/uninstall.sh @@ -33,6 +33,8 @@ for label in "$SERVER_LABEL" "$MENUBAR_LABEL"; do fi done +run rm -rf "$APP_PATH" + step "Removing the sy Codex profile" remove_file "$CODEX_PROFILE_CONFIG" remove_file "$CODEX_SWITCHYARD_CONFIG" diff --git a/tests/test_macos_install.py b/tests/test_macos_install.py index 6a2ce3a792..eaba334e98 100644 --- a/tests/test_macos_install.py +++ b/tests/test_macos_install.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import os +import shlex import shutil import subprocess @@ -22,6 +23,7 @@ def setup(tmp_path): scripts = tmp_path / "repo" / "scripts" / "macos" shutil.copytree(REPO / "scripts" / "macos", scripts) shutil.copy(REPO / "scripts" / "common.sh", scripts.parent / "common.sh") + shutil.copy(REPO / "Cargo.toml", scripts.parents[1] / "Cargo.toml") shutil.copytree(REPO / "scripts" / "config", scripts.parent / "config") home = tmp_path / "home" home.mkdir() @@ -38,6 +40,7 @@ def setup(tmp_path): } stubs = { "cargo": "exit 0\n", + "codesign": "exit 0\n", "uname": "echo Darwin\n", "install": 'printf "#!/bin/sh\\nexit 0\\n" > "$4"\nchmod +x "$4"\n', "launchctl": '[[ "$1" != print ]]\n', @@ -88,7 +91,7 @@ def test_install_escapes_switchyard_path_in_launch_agent(setup): } menubar_arguments = [element.text for element in menubar_values["ProgramArguments"]] assert menubar_arguments == [ - str(switchyard_home / "bin" / "switchyard-menubar"), + str(home / "Applications" / "Switchyard.app" / "Contents" / "MacOS" / "Switchyard"), str(switchyard_home / "menubar.toml"), ] @@ -274,3 +277,66 @@ def test_scripts_reject_unknown_arguments_before_any_work(setup, script, args): path.relative_to(home): path.read_bytes() for path in home.rglob("*") if path.is_file() } assert after == before + + +def test_app_bundle_has_a_launcher_and_source_update_command(setup): + _, home, switchyard_home, _ = setup + result = run(setup, "install.sh") + assert result.returncode == 0, result.stderr + contents = home / "Applications" / "Switchyard.app" / "Contents" + root = ET.parse(contents / "Info.plist").getroot() + entries = list(root.find("dict")) + values = {entries[i].text: entries[i+1] for i in range(0, len(entries), 2)} + assert values["CFBundleIdentifier"].text == "com.nvidia.switchyard" + assert values["CFBundleExecutable"].text == "Switchyard" + assert os.access(contents / "MacOS" / "Switchyard", os.X_OK) + update = contents / "Resources" / "Update.command" + assert os.access(update, os.X_OK) + home_line = next(line for line in update.read_text().splitlines() if line.startswith("export SY_HOME=")) + assert shlex.split(home_line.split("=", 1)[1])[0] == str(switchyard_home) + for path in [update, contents / "MacOS" / "Switchyard"]: + assert subprocess.run(["bash", "-n", str(path)]).returncode == 0 + + +def test_app_launcher_preserves_quotes_and_shell_metacharacters(setup): + """The launcher must pass shell syntax in the settings path as literal text.""" + _, home, _, env = setup + switchyard_home = home / "Switchyard ' $(touch unsafe)" + env["SY_HOME"] = str(switchyard_home) + result = run(setup, "install.sh") + assert result.returncode == 0, result.stderr + executable = home / "Applications" / "Switchyard.app" / "Contents" / "MacOS" / "switchyard-menubar" + output = home / "arguments" + executable.write_text('#!/bin/bash\nprintf "%s\\n" "$@" > ' + shlex.quote(str(output)) + '\n') + executable.chmod(0o755) + launcher = executable.with_name("Switchyard") + result = subprocess.run(["bash", str(launcher)], capture_output=True, text=True) + assert result.returncode == 0, result.stderr + assert output.read_text().strip() == str(switchyard_home / "menubar.toml") + assert not (home / "unsafe").exists() + + +def test_uninstall_removes_the_installed_app_bundle(setup): + _, home, _, _ = setup + assert run(setup, "install.sh").returncode == 0 + app = home / "Applications" / "Switchyard.app" + assert app.is_dir() + result = run(setup, "uninstall.sh") + assert result.returncode == 0, result.stderr + assert not app.exists() + + +def test_installer_builds_in_source_checkout_with_an_explicit_target_directory(setup): + """The build must use the checkout target directory even if CARGO_TARGET_DIR differs.""" + scripts, home, _, env = setup + recorded = home / "build.txt" + cargo = Path(env["PATH"].split(":")[0]) / "cargo" + cargo.write_text('#!/bin/bash\nprintf "%s\\n" "$PWD" "$@" > ' + shlex.quote(str(recorded)) + '\n') + cargo.chmod(0o755) + env["CARGO_TARGET_DIR"] = str(home / "unrelated-target") + result = run(setup, "install.sh") + assert result.returncode == 0, result.stderr + lines = recorded.read_text().splitlines() + assert lines[0] == str(scripts.parents[1]) + target = lines.index("--target-dir") + assert lines[target + 1] == str(scripts.parents[1] / "target") From 495cd8cc15445de10ece11b10783c5ad5d67f712 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Thu, 8 Oct 2026 12:56:55 -0700 Subject: [PATCH 03/39] feat(app): add Tauri desktop and Ratatui terminal apps Signed-off-by: Elyas Mehtabuddin --- Cargo.lock | 3200 +++++++++++++++-- Makefile | 8 +- crates/switchyard-menubar/.gitignore | 1 + crates/switchyard-menubar/Cargo.toml | 11 +- crates/switchyard-menubar/README.md | 509 +-- crates/switchyard-menubar/build.rs | 7 + crates/switchyard-menubar/icons/icon.png | Bin 0 -> 1233641 bytes crates/switchyard-menubar/src/app.rs | 4 +- crates/switchyard-menubar/src/config.rs | 24 +- crates/switchyard-menubar/src/controller.rs | 609 ++++ crates/switchyard-menubar/src/dashboard.rs | 690 ---- crates/switchyard-menubar/src/gui.rs | 155 + crates/switchyard-menubar/src/harness.rs | 3 +- crates/switchyard-menubar/src/health.rs | 11 +- crates/switchyard-menubar/src/history.rs | 48 +- crates/switchyard-menubar/src/icon.rs | 84 - crates/switchyard-menubar/src/main.rs | 78 +- crates/switchyard-menubar/src/models.rs | 120 +- crates/switchyard-menubar/src/picker.rs | 1755 --------- crates/switchyard-menubar/src/pricing.rs | 27 +- crates/switchyard-menubar/src/rollup.rs | 35 +- crates/switchyard-menubar/src/server.rs | 31 +- .../switchyard-menubar/src/server_config.rs | 145 +- crates/switchyard-menubar/src/sidebar.rs | 331 -- crates/switchyard-menubar/src/summary.rs | 16 +- crates/switchyard-menubar/src/tray.rs | 320 -- crates/switchyard-menubar/src/tui.rs | 459 +++ crates/switchyard-menubar/tauri.conf.json | 30 + .../tests/frontend.test.cjs | 50 + crates/switchyard-menubar/ui/app.css | 3 + crates/switchyard-menubar/ui/app.js | 152 + crates/switchyard-menubar/ui/index.html | 5 + scripts/config/codex.sy.toml | 2 +- scripts/config/composite.toml | 2 +- scripts/macos/common.sh | 20 +- scripts/macos/install.sh | 31 +- scripts/macos/uninstall.sh | 6 +- tests/test_macos_install.py | 40 + 38 files changed, 4898 insertions(+), 4124 deletions(-) create mode 100644 crates/switchyard-menubar/.gitignore create mode 100644 crates/switchyard-menubar/build.rs create mode 100644 crates/switchyard-menubar/icons/icon.png create mode 100644 crates/switchyard-menubar/src/controller.rs delete mode 100644 crates/switchyard-menubar/src/dashboard.rs create mode 100644 crates/switchyard-menubar/src/gui.rs delete mode 100644 crates/switchyard-menubar/src/icon.rs delete mode 100644 crates/switchyard-menubar/src/picker.rs delete mode 100644 crates/switchyard-menubar/src/sidebar.rs delete mode 100644 crates/switchyard-menubar/src/tray.rs create mode 100644 crates/switchyard-menubar/src/tui.rs create mode 100644 crates/switchyard-menubar/tauri.conf.json create mode 100644 crates/switchyard-menubar/tests/frontend.test.cjs create mode 100644 crates/switchyard-menubar/ui/app.css create mode 100644 crates/switchyard-menubar/ui/app.js create mode 100644 crates/switchyard-menubar/ui/index.html diff --git a/Cargo.lock b/Cargo.lock index 8fe27dd58b..f7ae2b6562 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,6 +31,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a" + +[[package]] +name = "alloc-stdlib" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5c1865780388bfa186411ab5f247819487fc4864c6e9c3106611fa347586e1" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -102,6 +117,15 @@ version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arc-swap" version = "1.9.2" @@ -177,6 +201,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -286,27 +319,60 @@ dependencies = [ "tower-service", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec 0.6.3", +] + [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bit-vec" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.13.1" @@ -316,6 +382,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.6.2" @@ -331,23 +406,74 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c" +[[package]] +name = "brotli" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b851b75c23ca7873623d612fe49bd1989aeb03d08fb9432187eb253d3d4c6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941cd9bd4ddab83cb46fa5a2d428f1c857b24ac78cb876cf7beb710840934bd7" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "bytecount" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] [[package]] name = "cairo-rs" @@ -355,7 +481,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags", + "bitflags 2.13.1", "cairo-sys-rs", "glib", "libc", @@ -374,6 +500,58 @@ dependencies = [ "system-deps", ] +[[package]] +name = "camino" +version = "1.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbad30e4b4c14a39e3cc8aed085a12a327257c316619c93581e017bc52be591" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "cargo_toml" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f4b26e751e711a5302649417f2da046dce6391b2ea30a4820f37462314f0b9" +dependencies = [ + "semver", + "serde", + "toml 1.1.3+spec-1.1.0", +] + +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + [[package]] name = "cc" version = "1.2.67" @@ -386,6 +564,23 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a347dcabdae9c31b0825fd6a8bed285ec9c2acb89c47827126d52fa4f59cece3" +dependencies = [ + "fnv", + "uuid", + "web-time", +] + [[package]] name = "cfg-expr" version = "0.15.8" @@ -415,7 +610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.3.0", "rand_core 0.10.1", ] @@ -496,6 +691,39 @@ dependencies = [ "memchr", ] +[[package]] +name = "compact_str" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -512,6 +740,39 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + [[package]] name = "cpufeatures" version = "0.3.0" @@ -530,6 +791,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.17" @@ -546,88 +813,394 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] -name = "data-encoding" -version = "2.11.1" +name = "crossterm" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.13.1", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix", + "signal-hook", + "signal-hook-mio", + "winapi", +] [[package]] -name = "deadpool" -version = "0.12.3" +name = "crossterm_winapi" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ - "deadpool-runtime", - "lazy_static", - "num_cpus", - "tokio", + "winapi", ] [[package]] -name = "deadpool-runtime" -version = "0.1.4" +name = "crypto-common" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] [[package]] -name = "diff" -version = "0.1.13" +name = "csscolorparser" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" +dependencies = [ + "lab", + "phf 0.11.3", +] [[package]] -name = "dirs" -version = "7.0.0" +name = "cssparser" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d57d423b3c82e89b9a24ca3091fee61f456a26edbd28d26c65906f4bc1dcd8f" +checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" dependencies = [ - "dirs-sys", + "cssparser-macros", + "dtoa-short", + "itoa", + "phf 0.13.1", + "smallvec", ] [[package]] -name = "dirs-sys" -version = "0.5.0" +name = "cssparser-macros" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", + "quote", + "syn 3.0.3", ] [[package]] -name = "dispatch2" -version = "0.3.1" +name = "ctor" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "bitflags", - "objc2", + "darling_core 0.23.0", + "darling_macro 0.23.0", ] [[package]] -name = "displaydoc" -version = "0.2.6" +name = "darling" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" +dependencies = [ + "darling_core 0.24.1", + "darling_macro 0.24.1", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ + "ident_case", "proc-macro2", "quote", + "strsim", "syn 2.0.119", ] [[package]] -name = "dpi" -version = "0.1.2" +name = "darling_core" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 3.0.3", +] [[package]] -name = "dunce" -version = "1.0.5" +name = "darling_macro" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" +dependencies = [ + "darling_core 0.24.1", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "data-encoding" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "deadpool" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +dependencies = [ + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.18", +] + +[[package]] +name = "deltae" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d57d423b3c82e89b9a24ca3091fee61f456a26edbd28d26c65906f4bc1dcd8f" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "dom_query" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac5fca71e65e94cc718a6e2af65d6e0f9c6027751c2aa562fbb5087fda639bc" +dependencies = [ + "bit-set 0.8.0", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" @@ -644,6 +1217,26 @@ dependencies = [ "serde", ] +[[package]] +name = "embed-resource" +version = "3.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6168487b5e7eb2673e6efe1200b1848016e436a6ca0b8031bf04bd9d493a249f" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.3+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + [[package]] name = "envoy-types" version = "0.6.1" @@ -661,6 +1254,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + [[package]] name = "errno" version = "0.3.14" @@ -671,13 +1275,32 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fancy-regex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +dependencies = [ + "bit-set 0.5.3", + "regex", +] + [[package]] name = "fancy-regex" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277" dependencies = [ - "bit-set", + "bit-set 0.8.0", "regex-automata", "regex-syntax", ] @@ -707,12 +1330,35 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "filedescriptor" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" +dependencies = [ + "libc", + "thiserror 1.0.69", + "winapi", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "finl_unicode" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bb028c8b4148c9ee0cca68fcd9add6044e81d3619f48577ddf13a263d047a2" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flate2" version = "1.1.10" @@ -747,6 +1393,33 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -928,6 +1601,57 @@ dependencies = [ "system-deps", ] +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1007,7 +1731,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags", + "bitflags 2.13.1", "futures-channel", "futures-core", "futures-executor", @@ -1048,6 +1772,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + [[package]] name = "gobject-sys" version = "0.18.0" @@ -1123,13 +1853,30 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", "tracing", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashbrown" version = "0.17.1" @@ -1159,6 +1906,22 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" +dependencies = [ + "log", + "markup5ever", +] + [[package]] name = "http" version = "1.4.2" @@ -1266,7 +2029,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", @@ -1307,6 +2070,16 @@ dependencies = [ "cc", ] +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + [[package]] name = "icu_collections" version = "2.2.0" @@ -1389,6 +2162,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.1.0" @@ -1410,6 +2189,17 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.14.0" @@ -1417,7 +2207,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "infer" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4200d433cbd5178df7797c9c2e75b348b728e39631cf14520d1e2fc424201f4" +dependencies = [ + "cfb", +] + +[[package]] +name = "instability" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3b5acc1e2fd9375041a388da33d1eb8aed5f7a8c0dd3543e3ea2805adfbe20" +dependencies = [ + "darling 0.24.1", + "indoc", + "proc-macro2", + "quote", + "syn 3.0.3", ] [[package]] @@ -1447,6 +2270,99 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jiff" +version = "0.2.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b005715dcbeb0089a3c0dab99f2ff1cc3b2525323552703d648585d342a383" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link", +] + +[[package]] +name = "jiff-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c" +dependencies = [ + "defmt", + "log", +] + +[[package]] +name = "jiff-static" +version = "0.2.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc9817253cf7c7ee4684451bd327e88d6f3658014e54a29198625590650695c" +dependencies = [ + "jiff-core", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8377070c6bae868759445e5a77f66d84f0b72f3a054bfb00e6d038b8282da7" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni" version = "0.22.4" @@ -1456,7 +2372,7 @@ dependencies = [ "cfg-if", "combine", "jni-macros", - "jni-sys", + "jni-sys 0.4.1", "log", "simd_cesu8", "thiserror 2.0.18", @@ -1477,6 +2393,15 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + [[package]] name = "jni-sys" version = "0.4.1" @@ -1517,6 +2442,28 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json-patch" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7421438de105a0827e44fadd05377727847d717c80ce29a229f85fd04c427b72" +dependencies = [ + "jsonptr 0.7.1", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "jsonptr" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a3cc660ba5d72bce0b3bb295bf20847ccbb40fd423f3f05b61273672e561fe" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "jsonptr" version = "0.8.1" @@ -1537,7 +2484,7 @@ dependencies = [ "bytecount", "data-encoding", "email_address", - "fancy-regex", + "fancy-regex 0.18.0", "fraction", "getrandom 0.3.4", "idna", @@ -1579,16 +2526,33 @@ dependencies = [ "serde_json", ] +[[package]] +name = "kasuari" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" +dependencies = [ + "hashbrown 0.16.1", + "portable-atomic", + "thiserror 2.0.18", +] + [[package]] name = "keyboard-types" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" dependencies = [ - "bitflags", + "bitflags 2.13.1", "serde", ] +[[package]] +name = "lab" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" + [[package]] name = "lazy_static" version = "1.5.0" @@ -1625,6 +2589,15 @@ version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + [[package]] name = "libloading" version = "0.7.4" @@ -1635,6 +2608,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" version = "0.1.25" @@ -1645,22 +2624,12 @@ dependencies = [ ] [[package]] -name = "libxdo" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" -dependencies = [ - "libxdo-sys", -] - -[[package]] -name = "libxdo-sys" -version = "0.11.0" +name = "line-clipping" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" +checksum = "e752191d037c44ad111a8caa762921926658402f01cc1253f7bef2020ece4f5e" dependencies = [ - "libc", - "x11", + "bitflags 2.13.1", ] [[package]] @@ -1675,6 +2644,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -1690,12 +2665,42 @@ version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +[[package]] +name = "lru" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef9ac18847474e638e3702b76c65d4eb93428471a74778ef0f1be711717f89b5" +dependencies = [ + "hashbrown 0.17.1", +] + [[package]] name = "lru-slab" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +[[package]] +name = "mac_address" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b367b50a9be9a5d3b5718c1da74e5d6b9c17647f89752ee2562a470cc3c4eb1a" +dependencies = [ + "nix 0.30.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "markup5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + [[package]] name = "matchers" version = "0.2.0" @@ -1717,6 +2722,12 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +[[package]] +name = "memmem" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" + [[package]] name = "memoffset" version = "0.9.1" @@ -1738,6 +2749,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -1765,6 +2782,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", + "log", "wasi", "windows-sys 0.61.2", ] @@ -1779,43 +2797,114 @@ dependencies = [ "dpi", "gtk", "keyboard-types", - "libxdo", "objc2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation", "once_cell", - "png", + "png 0.18.1", + "serde", "thiserror 2.0.18", "windows-sys 0.61.2", ] [[package]] -name = "nemo-relay-plugin" -version = "0.8.4" +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "nemo-relay-plugin" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2186727d62ca3c1be2e56ae302e9f7799db00c2dfc2b5ab58ebe2ec820c08be" +dependencies = [ + "futures", + "nemo-relay-types", + "serde", + "serde_json", + "tokio", + "tokio-util", +] + +[[package]] +name = "nemo-relay-types" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bccc10dd27dda5035f9ba9dcda9b9a5ad17abe6474e43d7147b006163e95b" +dependencies = [ + "bitflags 2.13.1", + "chrono", + "serde", + "serde_json", + "typed-builder", + "uuid", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.13.1", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nix" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2186727d62ca3c1be2e56ae302e9f7799db00c2dfc2b5ab58ebe2ec820c08be" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "futures", - "nemo-relay-types", - "serde", - "serde_json", - "tokio", - "tokio-util", + "bitflags 2.13.1", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", ] [[package]] -name = "nemo-relay-types" -version = "0.8.4" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bccc10dd27dda5035f9ba9dcda9b9a5ad17abe6474e43d7147b006163e95b" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "bitflags", - "chrono", - "serde", - "serde_json", - "typed-builder", - "uuid", + "memchr", + "minimal-lexical", ] [[package]] @@ -1866,6 +2955,23 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -1915,6 +3021,37 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "objc2" version = "0.6.4" @@ -1922,6 +3059,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ "objc2-encode", + "objc2-exception-helper", ] [[package]] @@ -1930,17 +3068,10 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags", + "bitflags 2.13.1", "block2", - "libc", "objc2", - "objc2-cloud-kit", - "objc2-core-data", "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-text", - "objc2-core-video", "objc2-foundation", "objc2-quartz-core", ] @@ -1951,7 +3082,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags", + "bitflags 2.13.1", "objc2", "objc2-foundation", ] @@ -1962,7 +3093,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags", "objc2", "objc2-foundation", ] @@ -1973,7 +3103,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags", + "bitflags 2.13.1", "dispatch2", "objc2", ] @@ -1984,7 +3114,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags", + "bitflags 2.13.1", "dispatch2", "objc2", "objc2-core-foundation", @@ -2002,28 +3132,25 @@ dependencies = [ ] [[package]] -name = "objc2-core-text" +name = "objc2-core-location" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" dependencies = [ - "bitflags", "objc2", - "objc2-core-foundation", - "objc2-core-graphics", + "objc2-foundation", ] [[package]] -name = "objc2-core-video" +name = "objc2-core-text" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags", + "bitflags 2.13.1", "objc2", "objc2-core-foundation", "objc2-core-graphics", - "objc2-io-surface", ] [[package]] @@ -2032,15 +3159,23 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + [[package]] name = "objc2-foundation" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags", + "bitflags 2.13.1", "block2", - "libc", "objc2", "objc2-core-foundation", ] @@ -2051,7 +3186,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags", + "bitflags 2.13.1", "objc2", "objc2-core-foundation", ] @@ -2062,8 +3197,54 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags", + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.1", + "block2", "objc2", + "objc2-app-kit", + "objc2-core-foundation", "objc2-foundation", ] @@ -2175,12 +3356,54 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + [[package]] name = "outref" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" +[[package]] +name = "palette" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddeed8580d347d2abf3dcf06a5f0b3dc020258338526b277847cd4248a70fc64" +dependencies = [ + "approx", + "libm", + "palette_derive", + "palette_math", +] + +[[package]] +name = "palette_derive" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88537020289b719d81be994ccf1bbf4990f477e2f69ee52fe3e45f43a02e56be" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "palette_math" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e6eb142958d64335fb0e345c5b9ead2ecd6fc438c307e9d7d3c4fd428dbaf12" +dependencies = [ + "libm", +] + [[package]] name = "pango" version = "0.18.3" @@ -2235,6 +3458,153 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pest" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45d3aca230fad2e6f6317ca0a72724338c4960cb97168a85cdee66df4a9a21a8" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284b60557f2c4a2e72ad3f2d34d42685a2fa4a6a61d0d2a10c0ae2a5e916c2cf" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9d1f08a115309ee99268cf85e5228e0e56aa9caf8841ec12866b6be07c3109" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "pest_meta" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed93ba1a9ffcca32130a5188701c81c0c49cf00d4b7c5007d5148951d743adcb" +dependencies = [ + "pest", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.8", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.13" @@ -2267,13 +3637,39 @@ version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +[[package]] +name = "plist" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896bade328c13f7042a297ea5ac5b0951f6cf989dea5f32c2fd98da398195cb" +dependencies = [ + "base64 0.23.1", + "indexmap 2.14.0", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + [[package]] name = "png" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags", + "bitflags 2.13.1", "crc32fast", "fdeflate", "flate2", @@ -2284,7 +3680,16 @@ dependencies = [ name = "portable-atomic" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portable-atomic-util" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +dependencies = [ + "portable-atomic", +] [[package]] name = "potential_utf" @@ -2295,6 +3700,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -2304,6 +3715,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + [[package]] name = "prefill-router" version = "0.3.0" @@ -2544,6 +3961,15 @@ dependencies = [ "serde", ] +[[package]] +name = "quick-xml" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b1177fdf999d2321d3fb46ff47159d9c1fb9ad66a4879f8c50a0b504615e9b" +dependencies = [ + "memchr", +] + [[package]] name = "quinn" version = "0.11.11" @@ -2622,6 +4048,15 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rand" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.5" @@ -2653,6 +4088,12 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + [[package]] name = "rand_core" version = "0.9.5" @@ -2677,13 +4118,120 @@ dependencies = [ "rand_core 0.10.1", ] +[[package]] +name = "ratatui" +version = "0.30.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3274ba0a2c5e1bcad2a2005d20f4dc59dad26b2eb0940fb094500dba4099d57d" +dependencies = [ + "instability", + "ratatui-core", + "ratatui-crossterm", + "ratatui-macros", + "ratatui-termina", + "ratatui-termwiz", + "ratatui-widgets", + "serde", +] + +[[package]] +name = "ratatui-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c" +dependencies = [ + "bitflags 2.13.1", + "compact_str", + "critical-section", + "hashbrown 0.17.1", + "itertools", + "kasuari", + "lru", + "palette", + "serde", + "strum", + "thiserror 2.0.18", + "unicode-segmentation", + "unicode-truncate", + "unicode-width", +] + +[[package]] +name = "ratatui-crossterm" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567584a3b0e6a8203c23de40b4861497266725eb5363dbfd18a1edd603cca9f0" +dependencies = [ + "cfg-if", + "crossterm", + "instability", + "ratatui-core", +] + +[[package]] +name = "ratatui-macros" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed7dc68daa7498a43e4d68e0eb078427e10c38fbcfbb1e42d955f1fa2140d814" +dependencies = [ + "ratatui-core", + "ratatui-widgets", +] + +[[package]] +name = "ratatui-termina" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0bf912d9e66f057a759d92e386a280ea886b352ab757d6ac4d653c7ed2c43c2" +dependencies = [ + "instability", + "ratatui-core", + "termina", +] + +[[package]] +name = "ratatui-termwiz" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf03e0380b7744054d6cb74224fe3adf062a029754933f575ca1e3b4c2ce977" +dependencies = [ + "ratatui-core", + "termwiz", +] + +[[package]] +name = "ratatui-widgets" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1" +dependencies = [ + "bitflags 2.13.1", + "hashbrown 0.17.1", + "indoc", + "instability", + "itertools", + "line-clipping", + "ratatui-core", + "serde", + "strum", + "time", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + [[package]] name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags", + "bitflags 2.13.1", ] [[package]] @@ -2725,7 +4273,7 @@ dependencies = [ "ahash", "fluent-uri", "getrandom 0.3.4", - "hashbrown", + "hashbrown 0.17.1", "itoa", "micromap", "parking_lot", @@ -2768,7 +4316,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-core", @@ -2838,7 +4386,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", @@ -2889,7 +4437,7 @@ checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ "core-foundation", "core-foundation-sys", - "jni", + "jni 0.22.4", "log", "once_cell", "rustls", @@ -2950,6 +4498,57 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -2962,7 +4561,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags", + "bitflags 2.13.1", "core-foundation", "core-foundation-sys", "libc", @@ -2979,11 +4578,34 @@ dependencies = [ "libc", ] +[[package]] +name = "selectors" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d" +dependencies = [ + "bitflags 2.13.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen 0.13.1", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + [[package]] name = "semver" version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "serde" @@ -2995,6 +4617,18 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -3015,13 +4649,24 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "serde_json" version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ - "indexmap", + "indexmap 2.14.0", "itoa", "memchr", "serde", @@ -3040,6 +4685,17 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + [[package]] name = "serde_spanned" version = "0.6.9" @@ -3070,6 +4726,81 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +dependencies = [ + "darling 0.23.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -3085,6 +4816,27 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -3117,6 +4869,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "siphasher" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" + [[package]] name = "slab" version = "0.4.12" @@ -3136,17 +4894,65 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", ] [[package]] -name = "socket2" -version = "0.6.5" +name = "soup3-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", "libc", - "windows-sys 0.61.2", + "system-deps", ] [[package]] @@ -3155,6 +4961,36 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.13.1", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + [[package]] name = "strsim" version = "0.11.1" @@ -3188,6 +5024,17 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "swift-rs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45c444e496845d3f2a351146bff59aae4975b2280238df1dfaa0c7d1846f38e" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + [[package]] name = "switchyard-libsy" version = "0.3.0" @@ -3195,7 +5042,7 @@ dependencies = [ "async-trait", "futures", "http", - "jsonptr", + "jsonptr 0.8.1", "jsonschema", "opentelemetry", "opentelemetry_sdk", @@ -3246,17 +5093,16 @@ name = "switchyard-menubar" version = "0.3.0" dependencies = [ "chrono", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "ratatui", "security-framework", "serde", "serde_json", "switchyard-runner", + "tauri", + "tauri-build", "tempfile", "toml 0.9.12+spec-1.1.0", "toml_edit 0.25.13+spec-1.1.0", - "tray-icon", "url", "uuid", ] @@ -3341,182 +5187,532 @@ dependencies = [ "reqwest", "serde", "serde_json", - "strum_macros", - "switchyard-libsy", - "switchyard-llm-client", - "switchyard-protocol", + "strum_macros", + "switchyard-libsy", + "switchyard-llm-client", + "switchyard-protocol", + "thiserror 2.0.18", + "tokio", + "toml 1.1.3+spec-1.1.0", + "tracing", +] + +[[package]] +name = "switchyard-server" +version = "0.3.0" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "axum-server", + "clap", + "futures-util", + "http", + "http-body-util", + "humantime", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry-prometheus", + "opentelemetry_sdk", + "parking_lot", + "prometheus", + "reqwest", + "rustls", + "serde", + "serde_json", + "switchyard-libsy", + "switchyard-llm-client", + "switchyard-protocol", + "switchyard-runner", + "switchyard-translation", + "tempfile", + "tokio", + "tower", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "switchyard-skill-distillation" +version = "0.3.0" +dependencies = [ + "serde", + "serde_json", + "thiserror 2.0.18", + "tokio", +] + +[[package]] +name = "switchyard-soak" +version = "0.3.0" +dependencies = [ + "axum", + "clap", + "futures-util", + "humantime", + "parking_lot", + "rand 0.10.2", + "reqwest", + "serde", + "serde_json", + "tempfile", + "tokio", +] + +[[package]] +name = "switchyard-translation" +version = "0.3.0" +dependencies = [ + "async-stream", + "base64 0.22.1", + "futures", + "pretty_assertions", + "serde", + "serde_json", + "switchyard-protocol", + "thiserror 2.0.18", + "tracing", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37f381f4e048e6cdf038b5705f8cf14ad108279d46eb968140a7b291aba9400" +dependencies = [ + "bitflags 2.13.1", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni 0.21.1", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "target-lexicon" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" + +[[package]] +name = "tauri" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed99ee9694a2deb776d91cae48ac7411ddfc89ecae2f9b5041111d8c88f2ace9" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni 0.21.1", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", "thiserror 2.0.18", "tokio", - "toml 1.1.3+spec-1.1.0", - "tracing", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", ] [[package]] -name = "switchyard-server" -version = "0.3.0" +name = "tauri-build" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59563ca5b331fd97f27ee9672ec8d36d33bb3c9e2c9f6710a1a5687256052e45" dependencies = [ - "async-stream", - "async-trait", - "axum", - "axum-server", - "clap", - "futures-util", - "http", - "http-body-util", - "humantime", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry-prometheus", - "opentelemetry_sdk", - "parking_lot", - "prometheus", - "reqwest", - "rustls", + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", "serde", "serde_json", - "switchyard-libsy", - "switchyard-llm-client", - "switchyard-protocol", - "switchyard-runner", - "switchyard-translation", - "tempfile", - "tokio", - "tower", - "tracing", - "tracing-opentelemetry", - "tracing-subscriber", + "tauri-utils", + "tauri-winres", + "walkdir", ] [[package]] -name = "switchyard-skill-distillation" -version = "0.3.0" +name = "tauri-codegen" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e50213e463086ecc283d7e9f51c30cc0fd304ad457425158018be26dbf0d0a80" dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.18.1", + "proc-macro2", + "quote", + "semver", "serde", "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", "thiserror 2.0.18", - "tokio", + "time", + "url", + "uuid", + "walkdir", ] [[package]] -name = "switchyard-soak" -version = "0.3.0" +name = "tauri-macros" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8129fb43bb6e0d6b73ad3315cd172beaab17cd28899c594b1b32c80edbbfd99c" dependencies = [ - "axum", - "clap", - "futures-util", - "humantime", - "parking_lot", - "rand 0.10.2", - "reqwest", - "serde", - "serde_json", - "tempfile", - "tokio", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", ] [[package]] -name = "switchyard-translation" -version = "0.3.0" +name = "tauri-runtime" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a57a2a9b8c8b7fc00d35b510fe808ded7f9f1b44fc1cdda6aee38632ea5413" dependencies = [ - "async-stream", - "base64", - "futures", - "pretty_assertions", + "cookie", + "dpi", + "gtk", + "http", + "jni 0.21.1", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", "serde", "serde_json", - "switchyard-protocol", + "tauri-utils", "thiserror 2.0.18", - "tracing", + "url", + "webkit2gtk", + "webview2-com", + "windows", ] [[package]] -name = "syn" -version = "1.0.109" +name = "tauri-runtime-wry" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "7f9e7e0c9f80a5130773cfabb6df4dc924518fb1b2c923726966804634b57d22" dependencies = [ - "proc-macro2", - "unicode-ident", + "gtk", + "http", + "jni 0.21.1", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", ] [[package]] -name = "syn" -version = "2.0.119" +name = "tauri-utils" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +checksum = "2ff55a614843b9a3f010f211df637c94df2607175b8d0f6e0f4a7c19e18621ee" dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf 0.13.1", + "plist", "proc-macro2", "quote", - "unicode-ident", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 1.1.3+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", ] [[package]] -name = "syn" -version = "3.0.3" +name = "tauri-winres" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "dunce", + "embed-resource", + "toml 1.1.3+spec-1.1.0", ] [[package]] -name = "sync_wrapper" -version = "1.0.2" +name = "tempfile" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ - "futures-core", + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", ] [[package]] -name = "synstructure" -version = "0.13.2" +name = "tendril" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", + "new_debug_unreachable", ] [[package]] -name = "system-deps" -version = "6.2.2" +name = "termina" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +checksum = "9048a889effe34a5cddee0af7f53285198b16dca3be510858d38dfdb3e62a04e" dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml 0.8.2", - "version-compare", + "bitflags 2.13.1", + "parking_lot", + "rustix", + "signal-hook", + "windows-sys 0.61.2", ] [[package]] -name = "target-lexicon" -version = "0.12.16" +name = "terminfo" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" +dependencies = [ + "fnv", + "nom", + "phf 0.11.3", + "phf_codegen 0.11.3", +] [[package]] -name = "target-lexicon" -version = "0.13.5" +name = "termios" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" +checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" +dependencies = [ + "libc", +] [[package]] -name = "tempfile" -version = "3.27.0" +name = "termwiz" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" dependencies = [ - "fastrand", - "getrandom 0.4.3", - "once_cell", - "rustix", - "windows-sys 0.61.2", + "anyhow", + "base64 0.22.1", + "bitflags 2.13.1", + "fancy-regex 0.11.0", + "filedescriptor", + "finl_unicode", + "fixedbitset", + "hex", + "lazy_static", + "libc", + "log", + "memmem", + "nix 0.29.0", + "num-derive", + "num-traits", + "ordered-float", + "pest", + "pest_derive", + "phf 0.11.3", + "sha2", + "signal-hook", + "siphasher", + "terminfo", + "termios", + "thiserror 1.0.69", + "ucd-trie", + "unicode-segmentation", + "vtparse", + "wezterm-bidi", + "wezterm-blob-leases", + "wezterm-color-types", + "wezterm-dynamic", + "wezterm-input-types", + "winapi", ] [[package]] @@ -3568,6 +5764,38 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.8.3" @@ -3674,7 +5902,7 @@ version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ - "indexmap", + "indexmap 2.14.0", "serde_core", "serde_spanned 1.1.1", "toml_datetime 0.7.5+spec-1.1.0", @@ -3689,7 +5917,7 @@ version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" dependencies = [ - "indexmap", + "indexmap 2.14.0", "serde_core", "serde_spanned 1.1.1", "toml_datetime 1.1.1+spec-1.1.0", @@ -3731,7 +5959,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.14.0", "toml_datetime 0.6.3", "winnow 0.5.40", ] @@ -3742,7 +5970,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap", + "indexmap 2.14.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.3", @@ -3755,7 +5983,7 @@ version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ - "indexmap", + "indexmap 2.14.0", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", @@ -3785,7 +6013,7 @@ checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" dependencies = [ "async-trait", "axum", - "base64", + "base64 0.22.1", "bytes", "h2", "http", @@ -3814,7 +6042,7 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "indexmap", + "indexmap 2.14.0", "pin-project-lite", "slab", "sync_wrapper", @@ -3831,7 +6059,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags", + "bitflags 2.13.1", "bytes", "futures-util", "http", @@ -3949,7 +6177,8 @@ dependencies = [ "objc2-core-graphics", "objc2-foundation", "once_cell", - "png", + "png 0.18.1", + "serde", "thiserror 2.0.18", "windows-sys 0.61.2", ] @@ -3980,6 +6209,24 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + [[package]] name = "unicode-general-category" version = "1.1.0" @@ -3992,6 +6239,29 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "unicode-truncate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" +dependencies = [ + "itertools", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + [[package]] name = "untrusted" version = "0.9.0" @@ -4008,6 +6278,19 @@ dependencies = [ "idna", "percent-encoding", "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df16f50ef4cc145211879a3867ba757076b25dfee812040dcb0658bd9ae7904b" +dependencies = [ + "icu_properties", + "regex", + "serde", + "url", ] [[package]] @@ -4028,6 +6311,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ + "atomic", "getrandom 0.3.4", "js-sys", "serde", @@ -4060,13 +6344,42 @@ checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] [[package]] -name = "vsimd" -version = "0.8.0" +name = "vtparse" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" +checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" +dependencies = [ + "utf8parse", +] [[package]] name = "walkdir" @@ -4190,6 +6503,62 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + [[package]] name = "webpki-root-certs" version = "1.0.9" @@ -4199,6 +6568,112 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "webview2-com" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f89fca7a704cee10dcb3654c1dbb8941d1783132f1917358af75bec37a7d7e6" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a07132775117d6065853d9d1178157b8c90e228de47129d6bce2c7edebedfb" +dependencies = [ + "thiserror 2.0.18", + "windows", + "windows-core", +] + +[[package]] +name = "wezterm-bidi" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" +dependencies = [ + "log", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-blob-leases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" +dependencies = [ + "getrandom 0.3.4", + "mac_address", + "sha2", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "wezterm-color-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" +dependencies = [ + "csscolorparser", + "deltae", + "lazy_static", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-dynamic" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" +dependencies = [ + "log", + "ordered-float", + "strsim", + "thiserror 1.0.69", + "wezterm-dynamic-derive", +] + +[[package]] +name = "wezterm-dynamic-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wezterm-input-types" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" +dependencies = [ + "bitflags 1.3.2", + "euclid", + "lazy_static", + "serde", + "wezterm-dynamic", +] + [[package]] name = "winapi" version = "0.3.9" @@ -4230,6 +6705,43 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "window-vibrancy" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111e51caca442cafd9bab396628ac4d814880eaea4e63dfd76a12e9f342b5580" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "windows-sys 0.61.2", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + [[package]] name = "windows-core" version = "0.62.2" @@ -4243,6 +6755,17 @@ dependencies = [ "windows-strings", ] +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -4271,6 +6794,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + [[package]] name = "windows-result" version = "0.4.1" @@ -4289,13 +6822,22 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -4307,34 +6849,85 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -4347,24 +6940,48 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -4395,6 +7012,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d6f32a0ff4a9f6f01231eb2059cc85479330739333e0e58cadf03b6af2cca10" +dependencies = [ + "cfg-if", + "windows-sys 0.61.2", +] + [[package]] name = "wiremock" version = "0.6.5" @@ -4402,7 +7029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" dependencies = [ "assert-json-diff", - "base64", + "base64 0.22.1", "deadpool", "futures", "http", @@ -4430,6 +7057,50 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +[[package]] +name = "wry" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a819957a01b3119af85e638a38d242af76dbc87d130dca67bfd0441072e21ff0" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni 0.21.1", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core", + "windows-version", + "x11-dl", +] + [[package]] name = "x11" version = "2.21.0" @@ -4440,6 +7111,17 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + [[package]] name = "yansi" version = "1.0.1" diff --git a/Makefile b/Makefile index 7136e3a263..86ecf29290 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ help: @echo "install-linux Install the systemd user service and Codex profile" @echo "install-linux-dry-run Preview installation without changes" @echo "uninstall-linux Remove the service and Codex profile" - @echo "install-macos Install the background server and menu bar app" + @echo "install-macos Install the background server and desktop app" @echo "install-macos-dry-run Preview installation without changes" @echo "uninstall-macos Remove the LaunchAgents and Codex profile" @@ -24,14 +24,14 @@ install-linux-dry-run: uninstall-linux: @scripts/linux/uninstall.sh -## Install the Switchyard background server and menu bar app for this user. +## This target installs the Switchyard background server and desktop app for this user. install-macos: @scripts/macos/install.sh -## Print what install-macos would do, without changing anything. +## This target prints the commands that install-macos would run. install-macos-dry-run: @scripts/macos/install.sh --dry-run -## Remove the LaunchAgents, the sy Codex profile, and the codex alias. +## This target removes the app, LaunchAgents, selected Codex profile, and legacy codex alias. uninstall-macos: @scripts/macos/uninstall.sh diff --git a/crates/switchyard-menubar/.gitignore b/crates/switchyard-menubar/.gitignore new file mode 100644 index 0000000000..2c41ac3ead --- /dev/null +++ b/crates/switchyard-menubar/.gitignore @@ -0,0 +1 @@ +/gen/ diff --git a/crates/switchyard-menubar/Cargo.toml b/crates/switchyard-menubar/Cargo.toml index 15973929e1..86d37b52ca 100644 --- a/crates/switchyard-menubar/Cargo.toml +++ b/crates/switchyard-menubar/Cargo.toml @@ -4,7 +4,7 @@ [package] name = "switchyard-menubar" version.workspace = true -description = "macOS menu bar companion for a locally running Switchyard server" +description = "Desktop and terminal app for a local Switchyard server" authors.workspace = true edition.workspace = true homepage = "https://github.com/NVIDIA-NeMo/Switchyard" @@ -22,13 +22,14 @@ toml = "0.9" toml_edit = "0.25" url = "2" uuid.workspace = true +ratatui = "0.30.2" [target.'cfg(target_os = "macos")'.dependencies] -objc2 = "0.6" -objc2-app-kit = "0.3" -objc2-foundation = "0.3" security-framework = "3" -tray-icon = "0.25" +tauri = { version = "2", features = ["tray-icon", "custom-protocol"] } + +[target.'cfg(target_os = "macos")'.build-dependencies] +tauri-build = "2" [dev-dependencies] # The tests check each edited config with the server's own config parser. diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index fa96d3d8c9..cf30ca266d 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -1,40 +1,168 @@ -# switchyard-menubar +# Switchyard desktop and terminal apps -The macOS app shows usage, installs coding-tool settings, and opens local -worktree sessions. Its menu bar shows server status and estimated savings. +The macOS desktop app and terminal app show usage, edit routes, install +coding-tool settings, and open sessions in separate Git worktrees. The server +handles routing and continues when the app quits. The desktop app uses Tauri 2; +the terminal app uses Ratatui. -The server does the routing. This process reads what the server wrote and -edits the server config only when you ask it to, so quitting it never affects -traffic. +## Install and update -Click the glyph to see whether the server is answering, today's and this -week's requests and tokens, estimated savings, and which models served the -week. The glyph turns faint when the server does not answer. The menu can also -restart the server, open either config file, and open the routes window, where -you change a route's algorithm and models. When a menu item fails, a dialog -shows the error. +Run these commands from the repository root: -## Install +```sh +make install-macos +make uninstall-macos +``` + +The installer builds the app and server, installs `~/Applications/Switchyard.app`, +and loads two per-user LaunchAgents. It signs the app ad hoc for local use; +the app has no Developer ID signature or notarization. Reinstalling keeps +existing server settings, prices, accounts, and log history. + +The installer writes `~/.codex/sy.config.toml` for `codex --profile sy` and keeps +`~/.codex/config.toml` unchanged. Set `SY_PROFILE` to choose a descriptive profile +name and `SY_MODEL` to choose an existing public route ID. New installs use +`composite-gpt-6-sol-gpt-6-luna`. Existing server configs stay saved, so set +`SY_MODEL` to one of their routes when installing with a custom config. The +profile leaves `approval_policy` and `sandbox_mode` to your existing Codex +settings. Reinstalling backs up the profile before replacing changed contents. + +Open the app from Finder or Spotlight. Closing the window keeps the tray menu. +Choose **Open Switchyard** to return or **Quit Switchyard** to exit. The app +rejects Quit while an operation is queued or running; try again after it finishes. + +**Settings → Update from source…** opens Terminal to rebuild and reinstall from +the checkout used for this installation. It builds that checkout's current commit +and keeps `SY_PROFILE` and `SY_MODEL`. Keep the checkout and a Rust toolchain +available. Update the checkout first to choose the code you want to build. -From the repository root: +Run the terminal app with: ```sh -make install-macos # or install-macos-dry-run to see the steps first -make uninstall-macos +~/.switchyard/bin/switchyard-menubar --tui +# This command runs the terminal app from a checkout. +cargo run -p switchyard-menubar -- --tui ``` -`make install-macos` builds `switchyard-server` and `switchyard-menubar` into -`~/.switchyard/bin` and installs `~/Applications/Switchyard.app`. It writes a -server config and menu bar settings, loads two LaunchAgents, and writes a `sy` -Codex profile. Use the CLI profile with `codex -p sy`. Open Switchyard from -Finder or Spotlight to see Usage, or choose **Install…** to set up a coding tool. +Tab changes sections. The footer lists navigation keys. In Routes, press `e` to +edit the algorithm and model roles. Tab changes form fields, Ctrl-U clears a +field, Enter submits, and Escape cancels. The terminal restores its screen and +input mode on exit. `--print` prints the usage summary without opening either +app. `--tui` cannot be combined with `--print` or `--validate-toml`. + +## Routes + +Each route label shows its public model ID, algorithm, endpoint name, and model +choices. In **Routes**, choose an algorithm and enter the endpoint and model for +each role. **Refresh models** loads the endpoint's list; you can also type an +unlisted model ID. ChatGPT's private Codex endpoint uses the saved Codex model +list and configured targets. The app keeps drafts until **Apply route and +restart** or **Revert draft**. Refresh keeps drafts unless the settings select +a different server config file. + +**Apply route and restart** checks the complete edited file with the bundled +server's `--dry-run`. It preserves comments and unrelated tables, saves a backup +beside the config, and restarts the server. A failed check leaves the file +unchanged. A restart failure after saving is reported separately. Apply re-reads +the config and rejects concurrent changes detected before replacement. A draft +from a different server config file is rejected before saving. + +Switching algorithms writes the new algorithm's default settings and removes +settings specific to the old algorithm. Targets keep their existing model +settings, such as `extra_body` and `omit_body_fields`; the result names those +settings when a model family changes. Check them if the new provider rejects +requests. Shared targets are copied when an edit would change another route. + +API keys entered for model lists stay in macOS Keychain. The app sends keys to +curl through stdin and omits them from frontend snapshots. An endpoint must be +configured to use authentication before it accepts a model-list key. Submitting +a key always requests a fresh model list; a rejected key is not saved and leaves +the cached list unchanged. Model-list keys do not replace the server's +`api_key_env` credentials. The app and server LaunchAgents do not load shell +startup files. + +## Install coding-tool settings + +**Install…** shows the current model and endpoint for Codex CLI, Codex app, +Claude Code, and Pi. Choose a route and click **Install / update**. Codex CLI +gets `sy.config.toml` for `codex -p sy`. The Codex app option changes the defaults +in `config.toml` for both the app and CLI. Claude Code gets environment settings +in `settings.json`. Pi gets a custom provider in `models.json` and defaults in +`settings.json`. Unrelated settings remain. + +The app backs up each original file as `.switchyard-original`. If a +file did not exist, `.switchyard-original-missing` records its absence. +**Restore previous settings** keeps a copy of the current file, then restores +the backup or removes a file that was originally absent. + +Install and Restore check every selected file before replacing any file. +Malformed settings and symlink settings files are rejected before writes. Each +replacement is atomic. If a later replacement fails, the app tries to restore +earlier files. A crash can leave Pi's two files out of sync, and rollback can +fail. Another process running as the same user can also change a file after the +app checks it. The original backups remain available for manual recovery. + +Caller login routes require a matching coding tool and provider: Codex for +ChatGPT or Claude Code for Anthropic. Pi requires a route whose API credentials +the server owns. Configure those credentials on the server before installing +the route. Claude settings with an explicit API key or bearer token must be +cleared before installing a subscription route. Restart the coding tool after +changing its defaults. Project settings, shell variables, and command-line +options can override them; check Claude's `/status` for shell overrides. + +For older installs that replaced `config.toml`, `make uninstall-macos` restores +`config.toml.direct` and keeps a copy of the active config before replacing it. + +## Start sessions with separate logins and worktrees + +Codex CLI and Claude Code support named accounts. Enter a name and click **Add +account / open login** to open the tool's own login command in Terminal. Complete +the login, refresh, and select the account. Switchyard keeps account directories +under `~/.switchyard/accounts`; the coding tool owns their login files. The +selected account determines where Install saves settings and which login a new +session uses. Existing sessions keep their login. Switchyard does not read, +copy, or rotate OAuth tokens or combine subscription quotas. + +In **Sessions**, choose a route and login, enter an absolute Git project path, +and click **Launch session**. Each session starts from that checkout's HEAD on a +new branch in `~/.switchyard/worktrees` and opens in Terminal. Uncommitted files +stay in the original checkout. Each launched session has its own model settings; +launching another session does not change user defaults. Codex app uses its own +workspace controls; choose Codex CLI for worktree sessions. + +Codex and Claude launches send a session ID for usage correlation. Pi stores its +session under the private agent directory beside the worktree. Its requests +need an integration that sends session and turn IDs to appear as a correlated +session. Otherwise, Usage lists its calls under **All sessions**. + +Use `git worktree list` and `git worktree remove` to manage checkouts after +saving or discarding changes. Successful launches keep their branches and +private settings directories until you remove them. Named account directories +also remain until you remove them. If launch setup fails, the app tries to +remove the worktree, branch, and private settings it created; cleanup can fail. + +The app does not show provider reset windows or manage task dependencies, +session resume, remote workspaces, or review comments. Provider limits still apply. + +## Usage -Your server config and menu bar settings are never overwritten once they -exist, so edits survive a reinstall. Logs are in `~/.switchyard/logs/`. +**Usage** lists the actual model, public route, timestamp, input, cached, and +output tokens, and recorded session and turn IDs for each completed model call. +Filter by session or search for a turn, model, or route. A user turn may contain +several calls. Classifier calls are marked as routing overhead. Missing IDs +appear as **Not recorded**; Switchyard does not infer them from prompts. + +Recent history reads the last 8 MiB of the log plus one byte to check whether the +first record is complete. It keeps at most 5,000 complete records and excludes +partial records. Usage labels a limited view and counts unreadable records. +Overview totals use a separate incremental reader, so the history limit does +not truncate weekly savings. Routing history stores no prompt or response text. +Observed tokens do not report provider quotas, reset windows, or authoritative +billing. Both apps refresh usage at the configured `refresh_seconds` interval. ## Settings -`~/.switchyard/menubar.toml`. Any key may be omitted. +The app reads `~/.switchyard/menubar.toml` on refresh and before each operation: ```toml server_url = "http://127.0.0.1:4123" @@ -43,234 +171,11 @@ config_file = "~/.switchyard/composite.toml" launchd_label = "com.nvidia.switchyard.server" baseline_model = "gpt-5.6-sol" refresh_seconds = 30 - -[prices."gpt-5.6-sol"] -input_per_mtok = 1.25 -cached_input_per_mtok = 0.125 -output_per_mtok = 10.0 -``` - -The app checks this file when the menu refreshes and after each menu click. A -changed file takes effect without a restart. When `config_file` changes while -the routes window is open and no Apply is running, the window loads the new -file and drops changes that you have not applied. - -## Edit a route's algorithm and models - -Click the glyph, then **Edit routes…**. The window reads the server config -named by `config_file`. - -1. Pick a route in the list at the left. The routes that choose between models - come first, and the routes that send every request to one model come - after them. A dot after a route's name means that you changed the route - and have not applied the change. -2. Pick an algorithm. The window names each one in plain words, such as - "Judge plus stage router", and shows its `type` in parentheses. Under the - name, it says what the algorithm does. Each role has its own line of text - that says what the role does. For example, `composite` needs a judge, a - capable model, and an efficient model. -3. For each role, pick an endpoint, which is an LLM client from the config, - then a model. The endpoint box shows the client's name and the request - format it speaks. Hover over it to see its URL and whose key it uses. The - model box lists the models from the endpoint's `GET /models` URL. Type to - search the list, or type a model ID that is not listed. -4. Click **Apply**, or press Return. Click **Revert** to drop your changes to - the open route. Escape or Cmd-W closes the window. - -The window keeps what you picked on a route while you look at other routes. -Apply writes only the open route. If you close the window and open it again, -it drops changes that you did not apply, unless an Apply is still running. -Choosing **Edit routes…** while the window is open brings it to the front and -keeps your changes. - -When a route has more roles than the screen can show, such as a `random` -route with many models, the roles scroll, and the buttons stay on the screen. - -### Endpoints without a model list - -The ChatGPT Codex endpoint, `chatgpt.com`, has no model list that an API key -can read, and the app never holds your ChatGPT login. So the window does not -ask for a key for it. The model box for that endpoint lists the models that -your config already names on it, together with the models in Codex's own -saved list, `$CODEX_HOME/models_cache.json` or else -`~/.codex/models_cache.json`. The menu bar app reads `CODEX_HOME` from its -own LaunchAgent environment, not from your shell. While the model box is -empty or holds a listed ID, the note under it says where the list comes from -and how old Codex's list is. You can type any other model ID. - -### Blocks that another tool writes - -Some tools write part of the server config between marker lines that look like -`# >>> name >>>` and `# <<< name <<<`. A route inside such a block shows a -warning, because that tool overwrites changes made here the next time it -runs. New targets go after the last target outside every block, so the next -rewrite of a block cannot delete them. When every target is inside a block, a -new target goes before the first table of the file. When a route outside a -block ends up using a target inside one, the result says so. - -### Apply - -Apply checks the new config with -`switchyard-server --config --dry-run`, using the `switchyard-server` -installed next to the menu bar app. If the check fails, the window shows the -server's error and the file does not change. If it passes, the app saves the -file, keeps the old one as `.switchyard-backup.`, and -restarts the server with `launchctl kickstart -k gui//`. -A second backup in the same second gets `-2` added to its name, so a backup -never replaces another one. If another program changes the file while Apply -checks it and writes the backup, Apply saves nothing, removes that backup, and -asks you to click Apply again. If `config_file` is a symlink, the app writes -the file that the link points to, puts the backup next to that file, and -leaves the link in place. - -While Apply runs, **Quit** shows a message and does not quit. Quitting between -the save and the restart could leave a saved config that the server has not -loaded. - -The result area lists what happened, most important first: the saved file -and its backup, the restart and whether the server answers `/health` within -10 seconds, notes about the change, and how many routes passed the check. If -the server does not answer, the result says how to put the backup back. - -When the change sends each caller's own login (`forward_auth = true`) to a -different host than before, the result says so. A caller that has no login for -the new host gets HTTP 401. For example, the Codex app's ChatGPT login does not -work on a gateway such as `gateway.example.com`. - -The app changes as little of the file as it can: - -- Comments, formatting, and every table the change does not touch stay as - they were. -- A role keeps its target when that target already names the chosen model. -- If another target names that model on that client, the route uses it when - the route would get the same `system_prompt`, `reasoning_effort`, - `extra_body`, and `omit_body_fields` from it. The route also uses it when - `reasoning_effort`, `extra_body`, or `omit_body_fields` differ, because the - server rejects two targets that name one model on one client with - different values for those. When the role then shares the target with - another route, the result says so. -- Otherwise the app changes the route's own target in place, so settings such - as `extra_body` and `omit_body_fields` stay. -- The app copies a target instead of changing it when another route uses it, - or when an earlier role in the same Apply already took it. For example, if - you move the efficient model up to Capable and pick a new efficient model, - Capable takes the old efficient target, and Efficient gets a copy of that - target with the new model. -- A changed or copied target also keeps its model-specific settings. For - example, a target with `omit_body_fields = ["reasoning_effort"]` keeps that - setting when it switches from a Claude model to a GPT model. `--dry-run` - does not catch a setting that the new model rejects. So when a target moves - to another model family, such as from `gpt-…` to `claude-…`, or to a client - with another `format`, the result lists the `omit_body_fields`, - `reasoning_effort`, and `extra_body` that the target kept, or says that it - has none. The app does not change them; edit the file if the new model - needs other values. -- Switching algorithms keeps the route's `id`, `context_window`, - `tool_calling`, `reasoning`, and `vision`, and keeps `subagents` when the new - algorithm accepts it (`passthrough`, `stage_router`, and `composite`). It - removes the old type's other settings and writes the settings the new type - requires with the values from the routing docs, such as - `confidence_threshold = 0.5`. The result lists the settings it removed, and - the backup still has them. Edit the file to tune them. -- Targets that no route uses any more stay in the file. - -The window cannot show the settings of a custom-mode `llm_classifier` route -or of a route whose `type` is not in the Algorithm list. Applying to such a -route replaces its settings with the algorithm and models you pick. - -The check runs with the menu bar app's environment, not your shell's. If a -client reads its key from `api_key_env`, the menu bar app's LaunchAgent needs -that variable too. Otherwise the check fails and the app saves nothing. The -window says so under each role that uses such a client, and again in the -result when the check fails. To add the variable, put it under -`EnvironmentVariables` in -`~/Library/LaunchAgents/com.nvidia.switchyard.menubar.plist`, then load the -agent again: - -```sh -launchctl bootout gui/$UID/com.nvidia.switchyard.menubar -launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.nvidia.switchyard.menubar.plist ``` -That puts the key in the plist file as plain text, and `make install-macos` -writes the plist again without it. A client with `forward_auth = true` needs -no key in the config, because the server sends each caller's own key. - -Apply does not add prices, because the app has no price source besides -`menubar.toml`. If a chosen model has no price there, the result names the -model. Savings stay hidden until you add the price to `menubar.toml`. - -### Model lists - -The app saves every model list it fetches in `model-lists.json`, in the same -directory as the settings file it was started with. With the default settings -file, that is `~/.switchyard/model-lists.json`. The file holds the model IDs -and the time each list was fetched, keyed by the list's URL. It never holds a -key. - -When a role needs a list, the window uses the list it already has, or else -the one in `model-lists.json`. Only when neither exists does the app send one -`GET /models` request. After a list is in `model-lists.json`, the app does not -fetch it again on its own, even after a restart. If a fetch fails and the -window has no list to show, the app tries again the next time you open the -window. Clients whose models share a URL share one list and one request. - -If the app cannot write `model-lists.json`, the window still uses the fetched -list and shows "Could not save the list" with the error. Because the list is -not in the file, the app fetches it again after a restart. - -Click **Refresh models** to fetch every list that the window's roles use, -even a cached one. The app sends one request per URL, and fetches the URLs at -the same time, so a slow URL does not hold back the others. Each role's note -changes as its list arrives, and the result area then shows each list's -model count or error. If a fetch fails, the window keeps the list it has and -shows the error under it. - -When a role's model box is empty or holds a listed model ID, the note under -it shows the list's model count, its host, and its age, such as "249 models on -gateway.example.com, fetched 6 days ago. Type to search." While you -type, the note says how many models match, such as "2 of 10 models match." -When nothing matches, it says "No listed model matches. Apply uses the ID as -typed." - -For an `anthropic_messages` client, the request adds `limit=1000`, the most -that Anthropic returns in one page. Without `limit`, Anthropic returns 20 -models. - -### Keys for model lists - -The app never writes a key to a file. To list a client's models, it uses the -first key it finds: the key you just typed, then the variable named by the -client's `api_key_env` in the menu bar app's own environment, then the login -Keychain item for the client's `base_url`. A LaunchAgent does not load your -shell profile, so a key you export in `~/.zshrc` is not in the app's -environment. A `forward_auth` client has no key in the config, because the -server sends each caller's own key upstream. - -When the app finds no key, the role's note says so and a key field appears -under the roles. Paste the API key for the `base_url` that the field names, -and click **Save key**, or press Return in the field. The app first lists -the models with the key. If the models endpoint rejects it, the app does not -save it. Otherwise the app saves the key in your login Keychain as -"Switchyard model list", with the client's `base_url` as the account. -Clients with the same `base_url` share the key. The app uses a saved key -only to list models at that `base_url`. It refuses a key with a line break, -because a line break would add a request header. - -If macOS cannot save the key, or cannot read a saved one, the window shows -the Keychain's error. You can always type a model ID that is not listed. - -The app lists models with the system `curl`. It writes the key to curl's -stdin, never to its command line, and runs curl with `-q`, so curl ignores -`~/.curlrc`. Without `-q`, a `verbose` line in that file would print the key -into the error text that the window shows. - -The app uses the Keychain rather than your login shell's environment. -Reading that environment means starting your shell from the app, which runs -your whole shell profile and fails if the profile waits for input. The -Keychain needs no shell, and macOS asks before another app reads the key. -After you reinstall the menu bar app, macOS may ask once whether the new -build may read it. +Use **Settings → Open server config** to edit advanced routing options. +Model lists are cached beside the app settings in `model-lists.json`. +Usage remains readable when the route config is missing or malformed. ## How savings are computed @@ -284,10 +189,9 @@ its token counts. without Switchyard they would not happen. Savings are the difference, so routing overhead counts against the figure and -a bad day shows a negative number. Today's dollar figures and this week's -each stay hidden until every model seen in that period, and the baseline +a bad day shows a negative number. Today's and this week's dollar figures stay hidden until every model seen in that period, and the baseline model, has a price, so a partial table cannot mislead. While this week's -figures are hidden, the menu names the models that have no price. +figures are hidden, the Overview names the models that have no price. Codex's "Approve for me" reviews count too. The server config that the installer writes sends them to `codex-auto-review` on the ChatGPT backend. With @@ -299,8 +203,8 @@ so reviews do not change the dollar amount saved. They do lower the percentage a little, because the baseline grows. If you change `baseline_model`, update this price to match. -The menu bar needs a price for the model ID that the routing log records for -reviews, which is the reviewer target's `id`. Without that price, the menu bar +The app needs a price for the model ID that the routing log records for +reviews, which is the reviewer target's `id`. Without that price, the app hides the Saved row for every period that includes a review. The installer does not overwrite an existing `composite.toml` or `menubar.toml`, so an existing install needs the route and the price added by hand. @@ -310,98 +214,3 @@ an unpriced review hides its savings and shows the missing-price hint. These are list-price estimates. On a ChatGPT login there is no per-token bill, so read them as "what this traffic would have cost at API rates". - -## Codex profiles - -`codex --profile sy` reads `~/.codex/sy.config.toml`. The installer writes this -standalone profile and keeps your existing `~/.codex/config.toml` unchanged. -Reinstalling backs up the profile before replacing it if its contents change. - -The profile sets `model`, `model_provider`, and the Switchyard provider details. -It leaves `approval_policy` and `sandbox_mode` to your existing Codex settings. - -Codex.app cannot use the profile. `make install-macos` leaves its -`config.toml` unchanged. To change the defaults used by Codex.app and Codex CLI, -choose **Codex app and CLI defaults** in the app’s **Install…** view. -For older installs that replaced `config.toml`, `make uninstall-macos` restores -`config.toml.direct` and keeps a copy of the active config before replacing it. - -## Update the app from source - -**Update from source…** opens Terminal and runs `scripts/macos/install.sh` from -the checkout used for the current install. Keep that checkout and a Rust -toolchain available. Update the checkout first to choose the code you want to -build. Routing settings and prices stay saved. The installer signs the app ad -hoc for local use; the app has no Developer ID signature or notarization. - -## Install coding-tool settings - -**Install…** shows where Codex, Claude Code, and Pi are installed, their user -settings, and their configured model. Pick a public route on the local HTTP -server and click **Install / refresh**. Codex CLI gets `sy.config.toml` and uses -`codex -p sy`. The Codex app option changes the defaults in `config.toml` for -both the app and CLI. Claude Code gets `settings.json` environment settings. Pi gets a custom provider in `models.json` and defaults in -`settings.json`. Unrelated settings remain. The original files are backed up -beside each file as `.switchyard-original`. If a file did not exist, -`.switchyard-original-missing` records its absence. **Restore original** -keeps a copy of the current file, then restores the backup or removes the file -that was originally absent. - -The app checks all selected settings files before replacing any of them. Each -replacement is atomic. If a later replacement fails, the app tries to restore -earlier files. A crash can leave Pi’s two files out of sync, and rollback can -fail. Another process running as the same user can also change a file after the -app checks it. The original backups remain available for manual recovery. - -Restart the coding tool after changing its defaults. Project settings, shell -variables, and command-line options can override them. - -Subscription routes forward the caller's saved login to its own provider. -Choose Codex for a ChatGPT route or Claude Code for an Anthropic route. Pi's -custom provider uses routes whose API credentials the server owns. Configure -those credentials on the server before installing its route. The app never -reads or copies OAuth tokens, switches accounts in running sessions, or combines -subscription quotas. Claude settings with an explicit API key or bearer token -must be cleared before installing a subscription route. Shell overrides still -need to be checked with Claude's `/status`. - -## View session usage - -Usage lists the actual upstream model, public route, timestamp, input, cached, -and output tokens for each completed model call. Select a recorded session ID -to filter the view. A recorded turn ID groups related calls; a turn may contain -several model calls. Older records and tools that send no IDs say **Not recorded**. -The viewer reads the last 8 MiB of the log plus one byte to check whether the -first record is complete. It keeps at most 5,000 complete records and excludes -partial records. It labels a limited view and counts unreadable records. -Classifier calls appear as routing overhead. It displays neither prompts nor responses. -Observed tokens do not report provider quota, reset windows, or authoritative -billing. Refresh reads the log again. - -## Start sessions with separate logins and worktrees - -Codex CLI and Claude Code support named accounts. Enter a name and click -**Add account…** to open the tool’s own login command in Terminal. Complete the -login, click **Refresh**, and select the account. Switchyard keeps these account -directories under `~/.switchyard/accounts`; the coding tool owns their login -files. The selected account determines where **Install / refresh** saves settings -and which login a new session uses. Existing sessions keep their login. - -To run several tasks with one coding tool, enter a Git project path under -Install and click **New worktree session**. Each session starts from that -checkout's HEAD on a new branch in `~/.switchyard/worktrees` and opens in Terminal. -Uncommitted files stay in the original checkout. Each launched session has its -own model settings; launching another session does not change user defaults. -Codex and Claude launches send a session ID for usage correlation. Pi stores -its session under the private agent directory beside the worktree; its requests -need an integration that sends session and turn IDs to appear as a correlated -session. Otherwise their usage is still listed under **All sessions**. -Use `git worktree list` and `git worktree remove` to manage the checkouts after -saving or discarding changes. Successful launches keep their Git branches and -the private settings directories beside the worktrees until you remove them. Named -account directories also remain until you remove them. If launch setup fails, -the app tries to remove the worktree, branch, and private settings it created; -cleanup can fail. - -The app does not manage task dependencies, resume history, remote workspaces, -or review comments. diff --git a/crates/switchyard-menubar/build.rs b/crates/switchyard-menubar/build.rs new file mode 100644 index 0000000000..403b166158 --- /dev/null +++ b/crates/switchyard-menubar/build.rs @@ -0,0 +1,7 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +fn main() { + #[cfg(target_os = "macos")] + tauri_build::build(); +} diff --git a/crates/switchyard-menubar/icons/icon.png b/crates/switchyard-menubar/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f84c31d04912005258e638d5f90b3f3035fd474a GIT binary patch literal 1233641 zcmV(xK(|fE?_Zx^ zetv$=zrTL{`h5QR<>&9;Uw?m|Pkw!Ve*Wh7&##~BfB*j6|7-65{QEc8{PmsBbD!V* zp3e*ZoCiJ6I^XHO`SsVYUw_Wu&-Le%zkkjJ&-nED&l&r#U%!8SK0T9oUijSmOm;^0 z4Dnn#A9%(9=+=kdSK3-p~SF|^ar`+1-L|LM7h7`gD_ z*?Ho5)F0F5d^VK-36C`v@hVr(+b|{(=G+Gv_}n{Ri!iKyqd zf1dS`tv`Q`jD4swUuSL~`kn{OC?X>xLr1pt@45cG`poq_>Wu&M{y%?y{rdg+ob-Np za&)8!27SmpJ~a4^ah&)3TJIU>qi1G)m*Per;U}t^6KQ z{f9c-{3?P{hoK9eJNPQSpEu6+XI#%W;@ivntVcE+V=nOA=%(Z;bgG}nHsJd|VIM!I zKH+1GJ@fMXMwZUA^zN}ai-V^3A@npmU=oberEqeU(r4yJ{<29`M&W2Hc0Yr zd#3A`J>zqhig_H?*7<$B#RowAIuJtku6fuG{MNRfBiWE5Zzri@R424eZ1Y7EPc-T{Ta(M z{$tc)gWw@xhdw;{2;oo3PkgRzm+TSjfoMg$Ya3GZ{CqSHV2mwQfapj16dj-E4mLcr zj!&?bi+CaN@Id}EWR>*)89AYR*cSj7TgM)n9(?%7-3PP`MnCf(9fB{l^h$pWboBfW zUE0qd{XdsHnD}GA&jkIfOSi+0TjzC)up)GDyKND^e1qin`6Kv|cId;WW2%D-h==7H z&7*l%R1vmE*bJh0WC(bcR`?lTVgSpYa2Gw*wvnRy@cF_P zvs!jXCkoq1Kg7pad5X#Woclk|KXD;rjL^Dd2Uz0v3mTUN2J;Gzj?Zg8`+1*ne6DBw zH$p@IfJXomY&jnqABc5q&+~lnOtL5+G??e$2Fe+&VSenFrNK+D{2TCh$+&G6q|Ncq zyZ=2X^uy<$H`Hz(67QQ%wnwr!!yn)X`sg?8BUyRyl;rVoxzP*UQCRQj*I;_j>33m- zU_KARy77tkGCyL?$U*QDu%KzE@zEC1W>ZEPABexg%w+JHFdsl-0Q z713MTQ^y>i@jZT^?fz$e!5P9Ftq1RR2Xd|XSJ%2YE1$ zj{uZDLb|r{ALseY_tvA3?}*chB9yPTYK?N7SrNy_KMfszA9O`**>MVq4d47{;wg+L z_r;ExF0e~QX1@b6IowJvrR~s3Pbz;2dm}nKS7ho)l1AS@b58#ATU>MUkAKG3{4oxd z+%E*Ra&nr#uG{iEl1Dnj#uz6YCN00d@yAeX#xFcBg8orFQ8780dGaQ3y}<>>k+h@j z*U#9856>9>Tz=@yZ^}2F_;WBD@ze0rzG-aX`SpyAc$mB}J^!x!wDj!x6}Gte5Bf6N zK|V?}{$oW|%uJjI8wB~(7uFH^w$Im(9n>6@BaM9_)<4?kf&MyaV&;WrZt_F(q3sc{ zByEYt8avsbIrbgn^qhl1iPiWH#*?JaCz7XqXzbE5*uP8u{{H&;&wu`(qNoXej>93@ zoaocMT+c~TE)k*>vcU=mc?UDA$WgZ(1z~^#|C#_sS0hmnCEpG%N*N|8VK+cc2}cOH zfD-{Pla@(j#zCYAGIabi37FqMzkWaO$wMjl608H3r8K`Eg^`+_0PT#K!CD2q7noC` zW_SZ7Euky=60kNc!SZHY1@-mRJoJYK?f`m&`43$l0JmjANhc0>C6T1+mlIH8G;%3b zYGB*p$CCubu#YioFiF`W5ALAtqqIqu{}egez*@#kJ@FXMXp}L|q-CIh1!x|5nE66S zI;a;r0UGBQro}ejV}wK9H-~;3>isAM)&Mpi(Gcw>L27vf8Z_06FFD`n!ZYuo>BHLr zWgk6dh%3X%=bvY*;3&D#o0CX(@HTXg&O}7XyOV%BiH#71HZ1n#`ReEIV^0(~;g(Jm zye1AL9|_EzKpx$+BZPA|8hHY^DS}&bk|YVRmlS7CGDWh;lZuQ?;{H7+{v>#pEafWO z(vsHU>!{H0{jF^hnhF?zJ;jl{`yQ|E$*2z*e?N1c6uZYrXrX6(3Pd8%kxL_Y%t^YM z#N4@E!OW4(oh0e`{G1@cNo_ti{5m$bX&B+nTpA1-0V45$5CeWfw1x!X3Zlg~5%>|(Hd(=O=Pu63kKOt{N8h68@Tk|;>K zFyP1BOGO>Out=-e3dInM_$Q%x1le$YK<`e%MyJAoG)~OCptosqq7FsA_w(yLM@-Dh zB*#Y_^b92Vj!h2UQ#^C{Absj2lw}@`Pa>?%E|R2ebHi=>Me(#^Eb)iQ#Mav#M9bG& zgN7IyyOJ~C?5LjpXZV@K3k!i5F=9u{%n+bufU#PxCH8t54&oKDVo?lBqxv>?#h{eU7oNU>ltm$pxotl%jTqzm{%TH{rLGBT%CM6a_P4lVO57r~T@O1*m-D>nQhCq!Le= z$tv-nrYE*#clqsEV_Xj{G>4V%irL}rRs&iwP*_cKlx)pI z5~FFn7!M>@7FjPpk3PB3U&yI`t`VNM>w4nHJJu01*ogdmsm!Zg$(|I zuh%SpmduOBnnT6Fe`2G|Ao^RyyDD5ICv6N2)wuoI^4;_UNTk68RI|Ee>GA;@Zx;Wk z{_#5%Sy8G721yBlCz3gd^8~nNm=ostUxO+nk1xT}{U2kIgw-L63IkGdkLYn4hCD;S z&%LUUY9-L&?I=B+z@O8xI`PDSiv!%8I{dknh=S8#V9{}$=;_W)a%qp_7#__tp!iIC zl0>5GbRJa&5s-{eEdVA1qw!yc0jcx{d`ti~d^d>WxGP}?=GzftED$*Yze+T$MBnpB zIb@ChMP~HBBM(We6qa_ELx7z1OsjAfh&W@4CK&b*pIdiYK0R|M_0PqRQFMj;@cfAR zKn!%h6FiaG6k!@diz))6&;Nb&z;l`jDX}D@6g3S!{mRcZvoNag0H*!m$j|?N7LCPw z+YRxJfz-M0IA$8Z&|4yKNIk)@F9~S-{RF#KM;rHm2Hp38zFJo>!IgLnP%S5-mmS%H z*Ahl}5(Fz@G4jSo(mp8YFBw8o(TO|TO?dd}n$Z2~9QoLW4-Fo<`2h6+>nvImz#h9q z{;1modR%h$p)UdB2nd3C$%p~oyvueBU_9>*kAM9m*uH{Mn9|eLH2l;vr=#!TuQA{F z3cm?@^7x<=0LeBbkdI9?FjE&U3vCLnuv#+zjh>123IfjRgrCPo{N@}!32v{T)5w!x zaIiENe8&IWGvj(O^#(3X8XW$xvz@*u4~Y&$-@`LpF91zuExuYOM*fd^T=LE&m}OaW zJ$%xtrcNzuh?0ejQQRPH9==mYe>EtS)B4EC=U0_)Xo48n9^Ucw)7j_t1G4qvA+9NzG z#?V-x{`fV!f)j`W?kw-(0lQI7Ht%T)vV2P?|6Kkla z`2LfS`TZn>W5-0#$8Q;5X^e>%eoM-Qk3{=`3XxcAxH#w0atT;eDH;*jP7RHby>7tMZO=%S~EDQp^5Leok*e=XUPsb;s_t4kAPC?_L zr-}pOO$qea%bj3KBS|io7!2TX{zZSg2qFJz3Q3XNau`Y0lFxdFu7$sGuh%JzJC{&$J@hE77Wy(qr9EI*yvL$ujp4Hk4M?52 zz-OJ2ZXU`xnQr;hzrkr0<68;n>!O3n3&?V1rM2m;e~*DWpFDODxwE2o|K0@=%I10c zgJvI`{b{g1SkbgJh7FLmUl@L!qJ4@(J12GFV0=dG5nQ4b)&`}CA!M=C%&~^)+<;>% zqnyY@W%Yx9Gf4U58JBaMyr%Ce4gcYDvdfLLKPvq2Onz&yzZ)E;$-%i;$chC@a)hFvY6PD=*XY0S)Up2nn%2=s=wmOQsv6?8 zzhlkOn4=Glon`S}yA`Aa$Y*p#g^A&VzZ6DI;%YKJu!k|~>`n>|$p8BI3KdNQbfX=x zaIVv`@#puS-m*o-Oa{=;?J%O2Qgs{Svm*kNhM3BK?M>*5$y0zx&5;EqcaZ|%I**VJ zs>^Xhvdx#vs3TE7?|ixzE77ihc6U_MU9^65L!NlL;zd(PKoT?=wa1n%s@C&WK>ay| zS{liim>5#g+`;)X0d*uK(WbF8*a%<7q0Dy*$l(!6!%juL^=lpm(1Kafc|3{7*)~aA z0_fRX^)i!ZGT);>H=D)~{mvFn{j<8tDQj4!??fGx<5SQ)A}gD)pdwdeq6icPmJM6Q z__6Z_4x@9{i=da-AUI)PNEy+aUHM6ujq@X=CRvHN!x%~McK#tvZ0iZ)8E|#CHf>aV zkXE^hZ-pN(+CqEqOvz1al9G3a7Q&W=HftU*!71QqulL$?qgtP!z{=Y^LCxH;+SyW6C~$LfcG9ewdJQ5dgM2$<-vv93R71 z(_VOfb{%U4tNloEwvsU3!ouJ!`J$})XQ3cCj2Ou{z_zcV2eGT{ho0`DwG?ZX7yPVe z*jLNvnQ!uk&0B4Cr?LK?Esh;j!KO8wlD~uBT&sK}Ur~q9Rby0g-g0Yy02ydfe8DPV z&)GTwD=Bo{Gv5?A;)^4k57rp_;iR!?D-1=nqU70NY3XBiV;YoY1+wROR?hBmY&_zi zIVv{)!gtx9QkS5Q+g}Q^{r-Kn*reY0y@yGMPlGllAwUds{Wb-`!r9cH>5L}EI*H3* zDytK>5E*y2U2g^2CbdI0kZx}u5uO^GFy83bM9vW^RTA3l%O9U&wdn5n!wJw}t4?sW z4U6wlVw%{R*aY$2toS;13|n=+_$Fa#83o%F>+QTdNG}+q0&K=JvF|ZavNiktx&`_f zqYdUOL7WGq!4HL>QCj+oppV!V%Pan&GL~LGA28tsoLs9R@Ph`Hk>|P?43w1bA34e(K0-Feqyerwh=8tB<6b!=8Bx1%6t4UFF zGM1;X#2+{b_H2pXvBqIj^TK(NX9%-)L~xo+HU{?ukNl4BIMc}Yd;3WJrbKykOH4f;nanZ8j)nKGCL`(I%G3NXetV;ZoUszy_Hs)z;_Hm+)3bA4n7g_DsVH!+MvVDM`S9YHIM44$D5Lyfls7A*OL+@16scDQN=_6aefB*XZ z=WMZ@_>zc<5q;ik8Ik2RP6KXz{!WojaZ1v7z$)0u!;K!ad5GQobo_1D=b{$ppWRg~ zR4$I{z4Td{({19jWpf%fWvk2b&0@IQudO(5ilMu~+gm?kWhb@KGV;O2vhfQC7e+K@ zz`GLO055R7&^PBCG{)#H#||_|ag2Sfl|4#IYq7zss^`s4jGYyuj5qbJPN0vxiLV&Z z>=ah|)+3EQlutV=IbUL5H~z}H0o%dkINxggtWW*xQLyla}$9 zH@%mPpPU)*twh4$``BM{A0O^lG{T?;mNyblka7o08(pW|VNFY$#;EfB=d zrJq(fD`@_e3~zxJ;a0V&s0^m`5MP*op>J87TWWg&(8IEukDa@Vjh&wnNR>DpFl#v|5}v=uzZ0{ z0YG-|&e)Qmnr#JW-(>J5qXwTe2&AW+)p^ciki2?q=zyY`tLy?~4#RI$|n+hc9bV)ru#+_$Rw-;!EclesxvgN$*v%2Z*@|!4GcJS$VFh~f9 zh>e)*slE`B$^}pGpgC)$C<_cF69RCsTb?^qK;1Rg`08STZxCy^?THHH_8UrupV?+R zh6%1=b7cb<3<#tauybnl!ulND6bo4CoghYG%EGZm<81#tq#L7tMsNtl!Oww*S_ce_jd^(Rx|7 zS#OumBxd!(!~$n)J?RHK{S^GtNA>&6`{}aI)<%mS!^bo^fJ`;o?23>%Blu+3f3t3$ zm6b<+unDB4m5TuTEq;<{VyCf|&I1b7P}SJ9QGLcOT5Q zf;*lGW(yZvU*;TK(a+QW#GleTB#4QVNA6{xNzY&*#$3R!^HIqjc-4N83F{Sy=ojzI zKmpZth_N#akImQ%k}jLW?O?ljd}Q?0ikPUvRxaZoiM6C0!J8q3;R9seg@PI3Sp}R} zAau(7SZKd+Ft8X48uVj~rvj2Wro(6<$0~54QRBhLPVUd|w3!6_^xIac#0@Phuop$c zG#P{z%0U35%|qDe;72Jg@n^}ss8Ov8dWiA#!84t#$lrFkWR&Aa*Y)!Z7gC0o*0s*R z)Q@zea#PZw@z&2Jv?)-7b%>dRvxnG zzT^DSdF0X$4aR06uJ!XK$>_!r7=^63;oQAKZ@fcXlCVdfI6c(B}HJ=lmK_Nb_OAapY4n&87l$lfz2nH z)8|~C32G0M>0sHZM1BR}NZ}7*j$+FZSU{~bGan}cldP3&$0-1`5!gDNHvuX-0JNn_ z!5|y72uGHh1~`>deXctl{C0?-r5yYjAB$~GcaXulB7yKFN=n=AO=8S1V^W5IZRYa% z-{WY;aE-ttMKZ|^$b!LEXnb^53f$1o#X0~58F>9T`0;bb5Nn??yx#`m8S)wH=jizeLDC5&HX_bY@;N#flN8DOT^wAAp-?oP>5@Mt1CmFvr8HP((oBJubckED3{zrv z_VrgoGCzdrSskwkT!_+JmAlP zF$S$A?=#Rm!%iC@R0S;2Uf^Q^mxFb+f-Zrj8WVUS0WXIxeSXXgrY*l=Uq`Wg*}h5h zvV(`NNW%SQ4?ub_R2at4)IHnLVGnaBCZS;(Y;>?x$gk6uDETBZB?vr^KmNLkL(^zc z+wR0apJ61KmIPgvmfJ@%5HuaGVKo?Zci&wIt-{L|G24cKVhKH8b>469aBSWig;b1o z?3rSx46;^DsQ4TnMNX8sh^%C;ITSamuBDj7e}cy2C09`;tmy2j@+Mg~PY zD`7R&rm?0SOFj_qWnbjS5<`R*dlmt&c=mLqs>taMZuuG6A2wQ4`+-#_4Fyc(QOD-h zpOx~bBte@^exRe+vC@n~GAA2rn@iaWMv&}B{wZGcvBBZ8Gv{$=vKbldSK$vU8j^tI zo3WQhl!B&oZ3J=D3HPuV@$?xBcLLKop&Hw9uvoATSF{5j1#U)ddwj;MuvyM0NIrFb zguXwPj#!r@1qy;C2Z89sorvB`IAmnBMR&So8kPghAmx(ya|(0d!B;(Y`6G)kd2)sA1PM0 zsppEFGco`#o1!GkYrCjtjKIHI(IJ^svv#cx=E|aD7c3trR;$o)_%%f--C~-}NVQXv zzs&qHS;?7VV9a!U=CdW6F2`{ewOR&p#qIL4%@v|#$6RT+6ZTBJ7QaADQ9iBc6@Dq^ z&a))5M^Cf5Ci+?Ns%n?N${t9Xyf!Cb&Z+Tt6e}^`aE*vS13>z z9T$lzM#ayK-9Xjyje0LuBRutJ%N~Br|l` zIgFEEeNOa1X1rUzchMn$4M?2?X*@Zw31j)(IlD0|QaGJqR z-L+<;Xn8?5fjfheEYEXAbdTJB8&6iqiEb!D0~wX_un-a`jox2flmH?g&$Xq(W_Y?% z?#u$5E6l-AWE>uXP}2>?o!O5y${iqlRW9wY@bVpabH$cKp}HXX%(eI87*IRz>5%PR@*;*l;N!=xR8Or-26&yg@(nxT#RPNRn5@u}|Pt1{Q|jPC!)@ z0R-^_U6I4{vmAPNTZH_dpVJ+!F=RWrQ*1ihVAy%iTvPmkTvj(7cn9fwmQM~Ce+=PS zPmJz~-<5zeDWRWwnw?^GDMB8Qaj~BV2+uOn^ZsY6t6BY4qF_5Sphdy2*B8;5A!t)l zwpPR(`f9aZ*#pwk4p;V+c8tZk6MPf^!Bz*KN1nn65^x4tUu{kfa=W zr5U?}q0bX^Fj)@oGW+(AG^1;X^5ujN0viSX)^{ZQx*%q>HGE{ZqV~OxePH3)6Nm47 z8b4&@k^HL!9Fo!7wz*`;aTps&hld^xJhwZkw3&TX&Wdy8(sxT9p7U{3H1ymg^Lr~T z`Q0MITA>?#4Oj&IEk`q+*$!0pN~3g8_asPrYYFqUYzwgrI-Lvsr(4ra8LAV}7NGKY!m3J$ zPg)n-a8egC{>;AvTH1X1Qw5&UyGpwIJ{`O&yPM8OfO`ngY0hHI!Z92h7{B$z|4`(Kb4GuJZEMw5G?Z9Cekd$fLqX>5BF4j$!FvRz01lAK zl25OqMkAS3$1yQxcVwNLEuQ|BBo=V1H1 zVkXA8&r_Z)5xbGaxM^PA@oMmoXezv$!X0*@@N;@)m1Nwu$AXgLHbT5ZEp(WRC)G&h zxP&oGLnc^Xx4RMM|(G$i7q|vdxuqjMhTmOI;L=UXgPSFDZZuCm9iE71o z!g(~`PyD$G_b#%|Gll7+Xto!km2ocO9AaG$SMh!oHWYOb(WKD6f%bF0kMc(HNAsW0 zcfy*+n~xrU@bf%*e7$X?{RHfg#U)Wu5WM0YjMvzjC@%90Z$8CdkcLHN#4hL62Q4xm zbYy#E5{*vh9VahSi(TB5O4$r%6ZUib@DxxoZ_kY|+IdyxZ?zH~D^MqgU=MF26g^BD z5gF@o7Q$9;D*qJ9eXp)L6!-CsriO|HkVTV3^p?)UG)mUxrzcP9yJe4oW0!EI;YluS z@>21B;x((M<10om9@R;=KAcT zA~q?;iY7osp=SzfiWCn9jU7GeDy2dF3we%=cZ#sKPsz<_v>IpZZ{(Zwv@Zs(;RRk% z`CHgE1q|KudH*^8Dp*!?Jv2h@+d53&&evj`ELOsoN54mIT~zC)kP{z|3`hq?4vdch ziH{A@*_^>%4_E&4pZ^!v?8GCbX9S8)Flhl#P=`t>>a>Aadr_ytJq8A=Zz43Sdt-z( zeAEP4yjY#6CIO395%OmhLlL~kDFfhO)*ZMkKn3HRuh9AAagEY~u5q&ICcWpbFIcqE zq4gtx=EsaxiLm)zUHha>xCTRj=L94-4O>R`SSQU=`|FxQbw4db&pW|~>BdeFI5xfa z%Yu#uHcdS}{apK{KbS{6Qa+-I!{@=Eb)$$$XGr@tU74w+gymPDDZ`P}#C z94k`b3^rw@ha701tiU6DNn`>H`MQj?WXwgL=n2u**?txF)LJV9XylQi-}oDY40LNa zc=aCGY*^@|nf}$j?Uuog&{K>&~#&<4OKB}vit$Tk{VIn`^P?;D70-fTW(0 zac}$IKso$Qvb=4ezzq^F&>0naE5P;`mDtOCt!od^`Xp$wXD{EQLZv*j1B72+eDeZ@ zmyXT2yi%9;X2$bLATTLzFuM~j@LQr23yj1{xk+{{&li6rS-tS0aK-X*%_jl(Nkr;^ILP9mjX-w|Y1sJp zT8Xmx86Hk|_#`hr)aPmq*~AB53fz1AAHR9{8M`Z*fCr71#=bwx_(tc_XmkD%U4V6G zwJzfE8e;)12W`2yd?W5{BF=J^-JX;1Z{`W6g=fZG zeO^~!Q0rycB$KBbEwsmXeZTywAFsF#Hv6$kun)^5gJiIm^^I&_@YIrK$*?6+e-=Fc(wPXtvb)D}O+ROJYpQT|u z=|w}Q;kjNkJqrhVz*&k9ll-GBoh?v{X~wegGv`S2os?OOf=wSvd{_oivyNLA(Llfv zz|OwfyXSxBYz}p_2K(m@J-UlhP(Ba+(94Ah#jM86n1hQ?C_vlSXpA!>;QSN=iC4orH3EL@+8Ij| z=sY`;a&!PT+azCwI@t~6ls1mPe}E(b%5NK&Eq>1Ub&-mL$9`~J1sh-TA;W!tZ2zl9 zMUM}9f_%Z-507ckkybEaptZ2f8O2A2Ixf!mtGCDyec3V|>h2j*zk`|dj&mmC=}>Q~ zcrwL^*c~;Bn)S}tRE|Y_^ZUh~$#q~p^&C*$Ru(HKG^;Z_7EvTI8Yfr0<+=W^2iAG8 zx(a@f)Rlcp7Iu*h{64avCKSaRvM0Th#MvVH9#7Bj{yg&CMfJ>m`0(KD<+;l|L8q&L zJ-7kylg*O8M?Qox5N|jJ=;D{QCO#?```%-Ut{gVVSI>Lk9wm5*+J3(J=9t^|CFc_6 zY(z`?p}`msY_DB=wRw`?^U$;Nk@WFk0lkd=E_n&3QeMz1^8iI`NNXBFBHi+vt8rl_ zcI75K7_784;H2%KVy7ly&86S6JwwF7T-e{_BwFe_X8B;kv(mR^={&@qel(hg(R%HWRMrp}OE0f*_201wWdC#aR z5cn8nD2pRT2z|hi_7esjDe@VBfm(r5jS|K_!-=BB8BCW2ms&32kx~VO1@{@)BH{K% zFWp!bOY6D7>2eH~jTn!^o0AxfeyHNCuHPZEtRgE-llY5YoGO{~6R4 z(E@tL%jhI$K@ZDw4JHRLjN!DNpQcs#CLS)U11}$wvOyG`?*b^RaMOVw?ty$<#eVsN z;@OsqbQm2&5Z&L!{GHHr;9rGjxyeojBq@;RU5Qe-*!Ze5{$mTzwRlXan0&gyK5Rh( zr2dJl$>&E8uIG@)`rLN+Q@kCi8VoG@K82mR#~rfNEOj-J*3bX`OhWs2WLmtkPIQ8- z>|{Hdw!?E>R+Ka)4sb*_t?&}D0b}aTl;sP382AK`9&b38L=Eu@d}$Ts$j|kA$#n_T zJUhl}-lb>%`StthEL_Ds@SJ`lHUPA-gVdPiAL6^63`3zsHsz2k80g?S*_YVNJ*N0- zjSe^nGVG)t<=M7n{5O0Zi;xi|+F$v~2_m5nLvY*LGY;Xwh1IVDTDB^Rj-W^*$*?d; z4zNn=(H%XWwrbAOlU;IGVf;bO8Aa$#hfUuCuEvV7$4BCm{&P8>@G5mDuDBlmfrK0vx_m&C&7W!II25Y~Rw) zi*E+T^f=$;(08Mu>hGdwa&W;H#y3}iC1oICwrt|Vlxn(Ny&@SnMfCOr>Lq+KAlM@Uu3OYX3c+f{rEDKpY8R-ZApe8Jug{_+<6%v+Mz)G=p&wDn|s z=#Jgr;?KlAjHSlo4}Li*`-G$pO~qRM`8Dy-BjX%lZiN|^)@*iFx1A0d$Ir>8@703^1fL^v8u7a=h zkBud_U##C1qrLE!&lTMn2R$P_D~Lk+$1ts6RtZZdK_CRr0KMwLTmj<&2Be(WBQ}Xj z@ac^(GXXL<5|X5fOf26YSGkbT#uOtY(a$6%n3RvRSc;{&flE5%NeA0KfE>aj8e2e$ z?$hn?a&0S(fc5Ni+SBsTK&mo0z?U}qbzTrbaLgEh)yoUFVVms_9A_?wCVEtIU6@Pr z+tEOW1r?xvex9l>1ElJ>%>K1Eoj6}QLn`~7NKe4k3F=oGIe?DCb}|`!;M=`^`^h`E^_bh|&>l}Q9N1ebVP;Z`nuJ}0J&x$0=s<)7f99nf+_CNCEkNz_ z!&VXtkH_w{B=lD!v9V`?Iex*f7yi?cZ5mU@m(Ag@^41kd8FYTmRT-dq1-5zA>)-o* zbJ1DtkS!dmU{BRwi3Qub8hg**dNM(Y^AS%6bdtW$3dl)lxd7<*-cJ9rX+zgN<}d6x zfyGCc1Y}D$PJ-+dTma-n!}4>aKJKr6z_W6YiMURnZ18+}oqB%-WZ>5m1UzQ*=QY}R zKKk>Lew zCAplz&0Ic}Q$4F?s(4sMz?V#)oVIx8V$ytxq|?zoBrdt7N%`G$E7g2=z&G>ZXP73) z&LnxWjX{0k49K$nEk6!kbGiqw4BjaWyyoxmu7c^N|2Mz>Qow5Z1eC2bFJo!NSZ1 zD1JFxaYv_3rBz@P&mW48(T+^&o&7Gx|Cxn4eD{{bqXWbJ-|z*+CAuK9N6$l(gmg+V zG;CDtL*s+^2v65I={$V|$abiIK?qv}z zbI-iS_Bl(W-6-_C{rKodt!hFORjmT+9EfyC_AAdA8;w zrbPL`;!)6w=Uyu#R?|1J)?0qIhdK8BL7y4H@bSE3$Mo>|Sczu2^sx_U$n+e~ikY^e zw&H_JbtW0nx*XHq269C&eoWo=kH$mTMbn&d7tu$EXnEnv)ugrt?`ZhDqPCB zMlK#(nRPhj6Mp{t-?M_K4R;8w2cLf=X)4%cAM;e(XLU*m+Xl67fJ}sLVU2uHX~0t3 z76#TZb5NdAP6UNEGA}~k!h$usS0|t53Z-xp2psO`n*kLvv6W-VTD}Cx6*M0Dr^E7; zr@gXkXfT(dqliKmXL3GCQLuvHC74pk@PPAf2av=Qli?YMyOZ>ObTV|8%P1W>gN?H3 zjF;S;&!yBa0STN)mMzmkgg=zw+>K(yi)=|aqaQg0aD~Jr=X!n{teq$fuDrLa!F&tf zvcpZr5%c34x4&49IG~5ds7K!Plnpt2OR^}WI!(MuQa-sA+oc>JOqtUIGJ}~X=ua9} z5RMt2OZDE(*geyD8nIvT(VyF2zAMVkSfQ(luA%J^HC}lvj zuk3)vWh=4h01{nnV$bd@6ETX%wc_hSG#DPXJX$(JkVX24-w&{VDU$C_szftdjUnUH zHsyeJ1@*Cs0g9)pMCwlm@V9kZ)acop1mz0SuLZrT{>Ez;EKS1Y9OX+46w9 zSV*q$Wzr|#F>p`meMd5}sLSbvzcaW4$+9)4WYD~kJs$ZnzK5jPr%>+vXZYhT?lG#d z+|F8=J&GNLJ2sE3x`A+i*lE^~hNBL*O@a_0~c#BlJwdWVhdr%{@Rq$q|bn zgh_kBlRGS8)V4D&q^txsbj`9Xx_Ea~G{FGNY93cWJ~&9YH^DoFg!~Fa00O}{taL{x`FpthN>R0lC7YRyUqjjny+i+QVMRFqy6Z7&PJ2x8gGZv zSe8GGXL{RbS$Y)GESte6qfkeN7e4k@P~%VR&h_E*kIrzp8~UJ;ICdkJ^6Au^+>c{D zah>*BWYa<8BM8g80&B>YijQ2uftHoIC|d%Z#+UF8XYtwZtJy$O)3TxGl&G0BYkNpE z8pto4@6-ie#`E@9E7_&bt^{p0ronea(5({(Z($3RN4$l_fKf&!v^DC+N5jR;Uj;qT z+13x3*yF|LmLV2P%g{weVrwNw;ZtGYE73z+G4{3!OBs6?c{5jDSBZPc(B5uy4O~15 zzd9-Y))XsV1T5yBr!b6nBo4rceMTHy4~kg~n!uS19Sy`uyl<`$oWKpue=eM31wvVP z#UULvm^00b2y)SQscUWhMqTB*^xwDbshIfoYF=U)C>vwebezX--&>!dP_^bN&%O1! z-9!j3UrN~T91aQ$ob_oe44;cCwnc6GTUNuB^ONo9eZToJb0&6mu9D3VDx2uJ;63sx zrX%x4ZBlQ1`jRg>Lz>*Dw!_**V9$B@JP-B#YEmPOrqNJ-j}e1@c{uzMFKk=OfyCrM z*@jKR2JvTWr72YP;%Bvu2MaUd8yV_ymakv=)I3Y?YCC^7{D|KICi@xLLBK77vI9FO zvWmAmCt#a_ogs|P)+A07$24?dEAZPd&ivtLRyV=rBK#(-%x}6T9~MUFANh*N_!`k2J#$Y38jNMGPtd~q|NV1lgJu4pe3=dt`c|~_+U_uUgngdl zU4o!=d%oA-GmfhoO^}TQ-5a3DYr8Ape5mc(zEy-FMpfMe$Qcc8kQqoNcI^Faj{@(m z3vNGScl|{s;^_3*=@3YO;esXhFTRuNYo*i}-4A8l6@&Q_99MF2U2uWTNdm}rp3c3s z)d4}UJKi-~$Ydg@_%J2V1VZ&4z?O~FN-B5`0KCWf6OE+@#n<8;MF(T$-3g|k=?29y zP5=ZIfay6oXNb>rkSG~?l2(&YoOUS<6*cy!NE={DV6}Df$g2Phtym>}u5R9=9|U8% zQ<50)x*P=y^K=YKy864w=h;{Gyz`M^>=#+?Ui*+gzf*RZSnZV+)KfnX4;9N)G#rYp zfB^T3=fq!3yu1V}dcxtQ-oVcY^w}A*NgJExH|*7gN=lqIwCDPCV5>O1110$q@~`Jc z8I!3Cxax=Xd?1t1WhPF07%vIY%g=OyxZmBKzw(Q~e_=muW2Ca=ee<;5&%K>h{GlCi zFvo7X4kZY}mT8Jj`5!+`v$iRr3#4*y%ha9^|0NGrC#@;8SV;GQcgtt_;z`bTuiAjm zwQ{QMKDYZBo2X#>@5}oGj%xY*mT4w{cam$!2jPVq`XNyw$n1{#0 zVfubG6(QE3%?dWmwcV6v0$%oZ*oNd0;u2tCH&MNGubSkxyVZtJyfD6EEcX0N*D?x% z_SKakc=2;vMh+2*fwW^!>@$Yq=pbT{-85jDWL4y`XE-#KvbJbjvgt$#wj$wtkX-e- zYw&xuHR%hM*l)JP6N|X8sb-WNvGtZ-8sg=iwobz|UEj~dtc$DR@ta>yo@2Ot2;Y8& zNqr7*k8gd~0`=?Hk|#*{Okv^rlp2pa(q_m)5E{8{KJ z9m=LFGuuDMX1Kr|7em8p0RWlIg#Uq}1MC{vz zwHvzKF}~!un=E)gpOKxj-ixhj%FFIqt`J%vFDV146F=k#Y|;xz6U`bHq9RoxzdZXeK&-q&-?q+=SD}S7h&S4m$jn2Pz<6MIzBYIfYXo!iCR3KfAMxW3Fv~=t$tW z;`%^*D|s914!~s7)g8~kNXB>u>IB_N>|tCf5~zcR;1>ZBH%cV3>fQ^1!9gN}XchEC28GV4C8w_5Aa@-pDn%^I{|Low? zKuf<{4ww48?S;wj+VG8I0qs2_Ae{2C@?H$6I5*;(du$c z`V#!pClh@8j0}Af#8S_D!W9RUHr*Lw>D&SuYe{Z~43Nk!8Yf~w0?WsK%69BrIYwZs zdA`FM9s+4uUe2r>3cF2vmH2C}?^K4B|DylV~MO|**L)4TcD<(;R~m6Mn)&M zw?nf%@Wdq-t)l^a4QA*^#K-fjTZidSp5h`px^_aQKdTBCJoNdl)$Z=@zjy_6aQ5fF z0o}2C0msAnW3A_0nbsRaDKMygjT7mQOwtC$Ch2=ypq2Q3y0ynY9dm(guI718Hlr99 zYs4<-agkX_qFwCe~iq+o1oYfCC@F ze2{s9RiHa*A`HZBHE73)uRgr`BxAgTcSZetKlq4(xUMAz65WLtLqL&iS)b}QeJNz^ zB>(6ApW=ZIa;6RV;$eCm>E%DF(gx9it$n_1%M0c+OKuw?U6H70U;Z;$ZR;jG)&Tw1 z51uncyD4mJ21H#8BZjT^HT8RN#p)LbRdv>sAeB0qYmCzMZld5q_YTC`pLkwqV7NO< z&kdb!SP4TIti7sGe(Uq|G_4Vf;*jwqItK-hOlzLM|A7Th43E8l*0A_U^AqZzNA`qsW_Jy2jFD`5`-`XI5Nsr-ymQ zvMYt-3%8E`eu~FB7qj3jtY=Ly&3B?zH3Ab@4qE|77n7?9Yj$Ao_(M{_B{dW07Vkf<~6IRi)@TbQs zeaSr>Rm%+_9b@XDk^?WiBlPePr z#`-FE)MH6J-#@-B@mu?XVx8YZoYtS$4NCAeQlB3sb9dfn$?6)J-Ig80Z{HilzIUwZD=l*PPdHcQ3k7)fo zj#v?TLkv`B1K#MU^1$YcTd!k_O4m#aea78i&b7|p(-~OY&If1vx{*f8iHCy~l=cN0 zH*x|sqp_2&L7Z#d?DNxkx6W@gAl$jeNWE{(57e)yF;ByZD zMoPe+$t(WnKmSddZU?7ufEf@S{rT(DW1#+uPr&nZSb%7q_`4_MAfb%TxVE+Ij-dJq zM%i`k&*`Ah6}Q4CG2aYbFoptT#xAi)5FLZ_xJmDkn4l^v4>UK<7hp|?V9lIA#{Fq3 zoBN)#9jfCWNs29`7K0HIcNVpA*>i6}p8Z{yGX(zZA9OI9Qq#19QLwUxwDF%IcG_%~=u`QfaieVshc3K5{+*MzeYagCV6xF@(RV4P%- zX8;D2F=XS&j3)sduGa(kBU>UKK+oi?85|x4o;|S7Rz=;#y?>5Be0wSBdwGlMwA3Iw zV1+KsmL6}Nn=m&7N70){1Q6%Gp6&F^nKFm-UkF2GKMv@6`r+943P}z7(zQKC$+HNz!g$()X~_uJvC0 z`>vmNfW90>(M@(}!35i?Tyr}m`|X|CslV^%p5(xGI#N~eQ1*K#`d-Xl&1YV$!rZnc zJCOVKjP_1(itm!Ju-N0LJNXj4GqzTN(k2rU1#GgREr5G!dbATpB4Wt^Xj;1e#=n!< zToKhyG|uNw2mQ#DY~Bm6C8KT2UkXi+Kin&PM#kBx*%`ee#=rQPpdxtsTr+;8LW$mv zvu!hravO!++U}J|2p)+YcOoo!u@i1LT`{)pTV5}2|5D<^nKO}tf>U7IO)tKNGWHA) zt1LpFdEU8Tu&x3i;7qTe#@iOrv*!I?J;|SD4rD&&+vB1^4E9&_~xl$usinIo&Pr<3QMk)F|nD!sgw(1)Fd&2 zi&>aBbQuFq-g$1GKqoQ>pUJng_!mDC0uT${>Ca%o9q&pOe8-ZZ(lI2|IsbkC_Uqwa zEO4(hip@5aEtgw1*|FX$&%B-VH6A_};v+mdbIZ;cXO+vR7|vwyDQpt^!ft=TgOya~ z&(f##$nLWt5>M!rKi_3Nw&h4rz&MlG4u? zjTTF9kN{PpRJ%p#N4ucNr=9u0Z!@kfombu}XUx^^E=#i*lhOaxSwfYY%d<8-(gn-? z8jHklV6LJsREAjO$f*dfbDdyH-!Qvz12|A)5d2Srfp_4M&Qgsry^ZDa2GGiR13qJ; zpEM}$w2;NB65Mnj`Ym$&pGhuC=1V`k%9^`7Y5K{M7L&d0Xv{)1$EpnSKhqk}IY~z@kf_?DfbK`;yEwc^d$DitKKKl4b`dZ;r zn5bzenzhZ3uJl;MgUmaAW{yb_jbww?{j%efm&$R2_m7Fu3Zl2dL}}UT=G>JoJ6k4= zSCH;OHe2BEZfL@xTm_<9ZilV{uM9d$sW)c3vk-tkXKRZZnVnLWoxUXw+q38%|5LV6 z3GSEWklv=r1Hz5NY^jh61ioBuR5Xqtcu-W3O60|PwJeZl;8i5BuHW(2QEskwV#n~l zcLPIiJtn#lD4(itZJ$EE0hpI3T-D)DQ04u{fW^qzi9tk*WU3RJB ztR`$4_wO3aPAb?bG5|p0W9ay=K*Pnv}Xbb7G3xZ<4aBrrZO;Ap|@)GpfUZ(3~%bWtI&&|KJ^zmc;Yd?Q< zJ;0GZc7N-tl`-_}KwrN?rZ)Mg+ha%0Kd>j--UC~4Bw)P#UHRV^n{)YP*!kQ?umRBN zd-{FP9qL+o5!UFC?0MF{7w?viM;3RND$gtU0;m_}Ft1*Kxc@#T8}=gmuh$l`C|IZS zwBIZJe>#>BWfNdF_;tf%i^aQXSEH2A+!6TDNVXI!Eq-|cZN zdmBOIc_#A7t;3OAsUCOQSNPpmIs%l zkvgpXvx;lsJQ0utL~j4CU@`_WEB}krnvIt z*S{LNIx{r%n4KV|87^_`JH{{nRmQPjo)to$OM&55AxyhMoUxo0^0v#DKLoud!7Mu2 zF3c_MM(^gh_&L#&x)tG-{VsVI2GApREph0&S9|PtwnKdhx7GND*wFNgm~IIf`hR?L zXk%I9bBjj8<9Iy@$}Po*H->S`55z0|3nM834?pr6lYS%EzNVHS0LIAwYChV!scoSU zi@a$kM#WRij&=aN(RhZMNZ`KbT52~6{H9fd$K-$P&c*|p;pcxkr&>6a z=l4Il4n9gNN;k)VMNuq6I;}F=f%%SE{4K;SF5w30c^-sz(-MZ z6oc!HuoE(=J6A3J) ze!{149$Co7pn@%uQ~7x5W!tT{JX2y4tw`&Y*00S7KNvG`!SclTem5AvzrUObM;e~% zx=3XlwrnNsenKgFh1-&!=R(ghe#S7d#eY95i2mQ;(FoQ~(!BlDk|}?td$aA)V>IwW zIfW7yB!lTFcKpd8BLF|&>AfPvU2uv4?T)~+%twb4+h9*N<=dD7HVJ|;*HN@SED(-S z{uTdY(v%8Wkq0??wauSq_fBn#@o1mW#BJZ>@?qv2I z4nUToBOKVth4qf|2TqJ>{Cnk$WC5V!3K(Qu<~iAY&@amE2@ucsw^1>`99cY|Ln9eQ zbf*W3ECfX~PFHd|#!C)Z_mQ7%#`2DKoV%Mh2`&blT;!93Zab;8lK@pn)9+*LPcU$I z^*MQ^IW2t~HAT{bPL6bt;a}j<&y5k+T%62TSN~38OXfC2Z#+@Kk--PjY`$kDgDQx7 z362xdwX7x410XZkDuDDZi*wB(;p`c18Zdy#b916lf`K?q-n(__*rs%{zVWDKIx@CE z&JI`bT;AW$c>!rJ?|QQdey8o>d$~3`Dh-d$P)_Jo@O0Bk$3^hDbovKWzSyuun9?~0 z`SW{vUYf?nRs!vM<_y9?gKbTkLF&B#!cJ~HTlfON{&_EU$(|ls0?a|i@(Oi7f5bdn zMeXRf?kCvCb=O%!D>26(u8yvR+`6`k&S*#|9ehZQefvSba6+FYnd3(kUJ&WNEKy+K z!Q_!;M3?O(Mv|~jKyaQ9;S?6?;_FWg|WYE70=fJf4{Dhdr6?vV(zWGY=^K? z`^ZEFq+c)Fil(F+cZP;nK$;1~?_TmV(pUB?JU_Q1rqKLlXX%nPXV8S4kFFn#ZQCR) zHTJL*b$Xj(k38RVna;vWu5c{C_K|U}F!;G;Ogc{)E*yi{0Xu4Bn=p2(vU3wUt<~xF zb-nHK`S>K%Eu*w0wq>&2YbDrVkw+W0kA2CEyaws>Ipau+EE|FJGd}0}+Wv+z)~oi< zd&aKotPx-*N?fodk~F|>EF^l>?($2%4#_w30Q4%6_VZ&0-55Zh_kvX{Ya8oa_5)aD z;;XFm@h$ejZ~S6nDV+VeSK~QO>X_#qKf8s|fS}p_{a1|k4~$sj+}J7~hh8idD=9Uf zt0}3HeL;Psd10lEF=h9W;6C?+iVt?1ahyV7e64lC*x~#q@lBHUO%vr#;PcT@e)u)- z#&tI$CQmkKPo~6Q@+>_Qe)$3GK(BU-U(qyEYTG=_vv$)deVSGoToBP?M~lJ1HKy;# zg%h0g6G)yeoSoPrlMVKHfJ4!v&s9yHihfSMYGWCQobA?|e)xCYKp#5sUGSHZ;%ADoS-#{Iu0;OYX~bj;$UY;&aG~gq|LGUn{W7=6d%OAR%7L4a@=^g!)r&nOAU2Ft zWv+$!K-ZFYrOmE5g+>3DW*WWQ{D9CCpZT?s-O8&;x?h^{08%Y)|0+~vJdjt|HO|`@ z9or;Y)1L1di}jcmyS~`CBa*pad4(w8pI!|#GP3=X>F}}wkG4H4pMW>8ccN1XC@$~Q7H$&S2Xma2H&LQlPBtGHSWMytxN#BvJ8+Ns04CYkXT*^= z`jife&#wne7^Wflu1BR)g4O&5_ME)wA7iozab(UxJptVunO%nPp1--|KsHx#0k!YE zlI5D`bShkq(42TlLbsfqq;8x;q=xsXn3+#EIAG8eKHrXRf1hm<@4%Tss|G1B6XW`3 z=#P98l--Udpk4Q$@l4mcsT9^tn7{uUh-o(QW;--Il6x zMFZ@yfk_t~OD9W5SS!Q|3G=u?B!gKx@i)M-9%B=+i#9jlJD*dt+Wx=&04(6X0K}z3 zvjwnLnr20VI@9A9o@5~Sdo>6s0Qh`<@<0g;;P@HX-1Et(-vAaB(^oD%imc4JS<7Zg zO0;e1Qwl`)%k%Gixv`kWo^#9gzPR#RFP6r7IjaMZa3SvtaIWn_GC~0-?HA4MGv;gU zGWB`i-|5)43}SmI7OEFdu0qJ;Pm^3d4G_Iz$pN%F>tvh6R|4}TjJ}3Nu{a99@fJ17K6<{q9{#a>#Uvh+8XXvT**+}%KwFjJ!XL?d3FA%jTN`fv{#y7^ zF!CNyg}6zK_DH4lF0xYO#t1hB=yhBN+4f=;?dA+xt!(k`N#IH zJWojH1OOYCsLYu_7)SBQcHqs{iVue1XGOox5nB%1EBctE=s@8ZXdBFv)b15Oj5C@Z zw&&9^&L8h_Z#id?7gj(!Y>gaBcXg(b=kuIp$9c8hIatK_GzV>1_W4a%wdtWjw+k)^fWp!Iw|^u!>q1h;{%QzNlOr1Q7Tz&GB}2Y1%_pVm^aV~1foC4~ zvUBtMG-X3hMwVvqTxGH2q4xJ{FqYZKQ4*ay!Qc8x*?Pq+Ca#?t8fs)eHAJk6^5c`~`n`#AE09S;ebwcU9i$zSb*v=8*HznCJ)_J8Xa7ZP*p7 zuDnxllnA<45q_JCstBi1q_6>=hh0!hZfa|*iWN4w2fHnKt9chVND(B_^4y8WnPo=d ztCTx9&!H_TS+~3je@gzQ@#0w-bDEsWZk@gQ%g1KUviZq5I!34>>G;b|FD_UpS~CBt z>pJJt1?$i)gpL6?{tWbRF7kZxneV4irMt=7jBn={qHBBQUw|=ir(Y`CFI*Z;Dx)P? zmOpkJrox-XgL6uQF=2ZoLxr@$4CB7t%u-5Vsr2W7QkAp!Y*?f)Z0r2dwu#R@kKEm| z!fW#2^P(fe@5Q0>h&dKw?6n9-Ub%89o*PLvhXt# zzc3EZLt5LL=UIdKuc9b1(LC)nXC2Ax`!hD@E;4KAxZElm2z{Ps&&HTt(`H+NE1?R+NdF35ApP$&64R4VI?c zp2BWBf1CO2E|l;U?~>k`HPbG+;-mv>)O zrr=P={^DTuwiD@Qc}8CH(RLhNE=cBHoW5CKR_6X0yQn3RHt*VoDILrOlV%kQ^<3k& zUkW0~%Dj~{)ODtBft~r5&Q>(?$`sI%{{3Z(zMZ&=1zzu4&w2AJoM>>10@#=P-5I{* z7SB0$vx~4bHrQn!61&epa&HdKVOsR80wq_l#p*OBdGkBi9%`@3(Q`$6;-o8~qQGLy z!z%K9OKMwgz-#(m^N7}UB^!;&&hm!teEjv}mxlh2n5JFnRHJl_aGuMZhv9 z03-2xui{>T^Y)1<%#`^Tz|pFJ+ltgPHr~|l8mn~jc@#7b!t-wDZ5N| zaH|y+pqJg*80wYw8(b((JcbO<3vtf(#o9%4(ybqV$&~H*-F*3AL2p%eE_?RXH~3Q$ zQ1^4b|5$O&anOyws2W=Y?NQKZ^17DD_TWu}*DBrT`FBV7F2M9NvY`!o#Pzh&VKJd( zS!U`^Ds?=iB7{?qHzLDM2KBxj-w1a;JD@1xNI!HEYmcjj9qaeM_?#D|?RY4E>?V+- zLy2!ZrjeU|XBuAPr_Oa+t^LRd@cOP$ z^5s`fs^}$|Klb*BNLE=}25jkMKg37HPq%Tk<-U0FnhxyG|Hq1<1<_tC*Q!D-G+A3= zmYroIp*09I;`0;phI81COe>6q4ZQO}qVsxQ`AJ%QjXjGL!Uxp`QygSev7cYtf1!ww z%hK||l}u_P|AwWk6>Cuf=f(FF4&eM}HM4e?qD^kBI`(<^Y#kgqrp|^#`uF!G50Zt( zgHgPDh%H$@~%?>~9x%bd8a@8HGl7k)t8+)qEkIp#h)Uf9_)es1Os@cSC#Za?uL)1g{`Et4{vj7wn|7-n9ZGn1H&Uj>|%9k^Lq@ z8~m>QnwJAoB`ohnl4d2t|ig8k^UyEOD--1D5%CK_O00pe8V29R7ycpJifSl&|V z=l%h502N%-(rwfN)&niybPHPgS`1q>{sK0RQ$FvEJZ9U7!V+cp-+w~pPR5BA z;cpl5=%S16aA^K`Y>Lj$s)Wh#H%|UNAgp&2gaho}vL61p2tM{OI9XkdB&#SU2mbw9t!J8bNLE{-ej%YMI=e6SpImBO;|Pr-x9lI*Lg zWT9>2Wv9lcnqCA{+AB}=nD=7)p-opkvMB>yti;NfxUjthUG=mV@Ip;mruw1TZ#3CIqJdz%noy))s~g>X-bHqHAX5T&r}F+0;9R!l z`S-WBVbYclENXF{?Zcxp$5M1R@wr0xEK4*zfTLXn1syKCHJs99&3K-3eEjxdDl{#Q zdfO@5ZBGSF;9ec`>x;}2)ax;ZCjC~khQZO^ZqB3!->)D_&kFUQqS~|CiJg#Ag|#}Z zQ67T(1Tx#O#y-SKmJIm5(fCP@Naro{mbn*uibkc+GkegtpOAexQ35q@?xuhzZXSv zZ0GWf7?{s1fIti<>L@dhs;CNs0Yer@NO3fNGW-}M7gLU;j7ppq?JdXGt|P$oXbLRZ zJ}+PfFWUYiU$hO*nwI4-qISe~Fro56k2=cFeDXSJ_IzSn)3`ay&nscemBna&q=yd< z&ArD~w&%0Ip+JewPQX#l4vwv@fYv)bzKRJkNAoxS{-|kpyf-!059|op(s7>NN&nor zjx@iHUTfamw(!~>H!D@&(5zYlhbix z86EG+O&R~y3UwCG=Zz!l+g>_nWVDC)gZ8NkbMHq!kf*{afMBy*Fb{*LkI=i%WGc>` zWb7HktTvj#IWPQ>>J#HW+gRZ2()cRkIN7)kcv)b;bzho8cad<@SVdgVqhTFnf_Wx= z7aYHFHr|-eh~Fpo*+)KvXX0;W7{*mzM#asiBLcaJ@`p@_j+|}P+M0j$wE=h9-XzDx z<2Fug4(D0)#fw$^-z#JTI*u6)nv`Ip^$DuL&zApfeBu9vBg z1@WN3U)cp;z2cvplSnb}$UfuAyuDYb661)OjB&60)~}yFXWj2>Iw)>p4)=U2f4XgS zu;`1k|FZaEt+;*iVyrXhasAA0IN;;nW9R2t|Ctp;^?+r8&9sh08c>LDBAD;HCs$0; zHc#}jUlXtBLU{wh?($ba0HDc%k^n2N3kYY&O@qXKD?3I1z8okOWAuD7)ojTME0f1) zV1I3bk}*K7JPjiD-$zE~!1;^r1P`Y;_?Gbg7HkyJ+2i2gp$jVCehRGJIt!*Caq$wg zXzMt>&byJo<7g$+#qh8g+$BnKcfW&6)SPU4c?pIbg*;|E(Ok( zPJ1`7!r-FF1#p*DBcY!p>X4lQal?ie>J%|)S6M84{jnX&%D5u}N_G*X-s1^E|D1j&q!YUI$ad@U80DR?q&ZdpaBd;-@_fw`@VI-*ghAqnnmCWU&WtO9w>`c z+zh+)V(6F{bm*Xj5}SQyEH$oe6G@jXC%~`74g?$a`~2Z```$~HA+I;-ud}&K$%V~s z?9_!O;X3wHGYe*4|iA zGREd-(l|Mk_oO?RcfCOa5QqFVjsTgFcRCfKHIb@)w7bQ@N1ive7WfJniExy;)$=% z;9$OC%db)974=#29M8@ye2nd9Yt8v0jfEi+e*u;(lG(zOB@Q#7@mTwKQ z$McpuWbwRM0=j3)IrsM^ZmPKvE5sHYbq!ACoCV;ss!;P_(@1ipsSQk1md0M9m6+08 zCXJatHs4D$AS1V2I7FUH&w0LK4$dH2v8@Eo2XZw5K$TsYuZ4$^upD}QpGB}O&MBb$Mv~HkmReh6z2Xt=3?$^=rFgegk54wm8?tU)RUe~~Om~DYE z8JLy(aKeLezKo;|CcxcGKA>q{dygJlV0zh~rQ^mO>jtezm}t&^zl!HCC{WjHTPfgC z9opE*O7O;yX#J|s3yj?fo!yCX6+6eTxX5@Y6s94#JwPAZa=hq9->Q!3IgiGmg-LMA z)C;IXV7Bc{CH>}yU79+t>L(lm$X?Kd7ISb#<@9lgKPmT>-E-d`~bk2VQlHW%@wGVRbs|%&7^$XN@Wv3n{2OEM#j8SMW|LQbajJf5UEA4ajcpoh+q&8r?4*Zd!ULhv_P(4lUN{@ttiZP(q=Q<2oSn!FmjI z&KMWSqD;$w>&(c7)8r3g=cW;A&IEY;0(F9r!dtp*WowxbJ#_6kcMhKwXeA~&-|HL? zz0dKEbaTt3&oz8Iho%Em%LwRso}+C7h(qv@D{je`2eNBhuVnUmDFjNk zUvjEsOxTV&S@;4ddm9vbH6=U7o|ju;Qt!oIjE&$bHadciPe^}#jybI7O3!pQ8d+=3 zVI|Uq-xeJEG5Y|Q%YXD0&Ru-(6G-<*YQs_`+N_B~Wb-aZ?nZ$!yHK#;@GP+_mNX2iwgNX0{EMxsP2lW5=f< zzR(voXyh?gDnJ7&9$2za5fAuaz2Q4vyOCw1#6P_Z{-fkamb~K)(v-gWC|+S8cmot z_pwo9{1}po1@@)pEVx_1&VMR5Bb@LuKHYN~X@%d%CW8OLLR}ncD8dHGw70wlG0IMR z`mJvlX4dmLaM0x1@dJMNabtS@!cs%VA>rUR8-5QQO}(M@vqlTa;eC#@@u0CvWXSk` z@`zP98ajDgLo1(AR*9aMypfW5Z*!gx10!j_q}JOOH(yyyNV%h9*X<{0gDsmSqd*H@ zF`~x*ktD~LdFBV_J-Y=7JJD*YyXmq!nu~as=V!(BOP+{@0Dp6o$D$~x8RP3KohO?Y z(+0$LXN<|^u@Iae?xM!6PR$$pY>s1Ai23J}s1!mRUR#zSD-GQ+|Ans#+pNErk1DKL z829(e1I1At8?YO^A@?r}GvXhtA(%t39t)I|%H0;~XEJGl=O^bBKA&G%Q)&P2&p!Y6 zpa1;lZy$cgoCF4619XKZu?>b8{``(*Oj_PXgLfwsMB|;L2|XDfWgh6lTl}WT ze&O7ffe})sv}v{GG`6T;fvqE6+4JEJbX{uTr!4d3Akt#!l#P*92h5~@?5BS ztF!qG^eriuVhTXZ^Ny1Y{(Ss2jAYAeBvg9Uz^bOS8qRl=X0oM{L^BcZdOe2fiF>Al zJC0Mv1yZ~~p09bPB_8KK0XNZ%e2W@LMgpX^Vf~gcqdcjQjVR~J_6sV2 zk6!~Mp4oF-%l0kB3vWZF;>NQ3JCJLKlV$e8Zaz+)X7LqRo|_qiGC&z2X?t=RTLrb{c*+1>G0=s%R*l6MtYu z!rQ#B%{{;QDc)V2CJX-ki`HC{V z8;L;OG?Pd#7gpZ9u8&vOeVsKykQN0mP#__KC z^suiV2ASu+Y2DZ>Jv48u_A1XPSuzMrp_M!=nX?`I$0`+VjmNW$ByV1M1%8zbL*I!Z z{C&0;;z~IZ+di>bdd6!X!)>iN=U`*fy9xpOdYg|If3dfXFrHln zhGnO1=V|*fjs)iFaPM)Jo1WiyvysM1Y|I;|-#cmW%_m;|f_4$trJ1N-d)`O+(UuLw zy0?R6e53@oi(~c^c~NXXpbL{9rI&#|NoqBgt>z>(0$KR(oH6CRu<1(!krLTug|NEy z3p~BC#5O4VS|>JVUY`OyeajHTbb=1O6^e`nUK+IgT+z>+_xDN>-#SI{dvy%rjY`xZ z#$c@GT$-l$(x|)z3_j<9gK@nC47l`@n8?+!7t-Sd+u2|LY>HF!Sxeih6JbyiXN$_*v9|b4Y++o#`!(Ps@(o9rr~@JrnAMxYOv?*t&s&|7Br5O zKd&PD8OPR%@T2uJ^hvzQ&%Y(a%l)oG(YLs1f8T|TWq`{H^dutF94nvARnolC(57;I z1s-PgSY+aS$DCHt=l?LznXDVfe7|Lk@!g`v7aL@{u>e$9dNn%3C+cs-8l*D|**mXt zJIcliWSDj_>NuNbR5~=R}3@64-I1Hk7$fV z$_k=y#tFa;1ie8-n5Eo0uW2Gl2sEL+f`p0WDEFCc3~C8QnW+d-SR6<1=mP;;=r&{B?v^cy2aCSD@jEB!Zcj)6U^;@+Q6d)WuxhCbEVh(aG_ zEeY-OOebH+2k?b%ibK3;e~}^4BYL2tb+(bbZ8iJh}$* zxH`%0J~J|NC(b$3Yd=!S-MVHMrm zL^#R^fM%sbexAmq#M`f5e`d^wzLGI(23WwLJ#mkoEuZZ~9J-_p8N5>iS8Yg!3|}U`3HH*!dU6$;FI%tq2j~Ahxc(U{8XPZgyAo5o(L+<* zxuMsjwi=Kh8RLrD586keq8$#y0{^ndV9bKaRzsGs!j4-@IHuVW#aW&S7Fqe8i2v4v z==;padw%i_Pb2~R)}CfdwebF&3vF2_g7pu!wA7eo9O<8(T9D3~u*7RyyK2%4OCoNQ z-6ckokvXmawpm{zxozJjUwp18Kl6g+M6cMAUbVz+(e_Fc%NGFZk?YxYfN{Xp#7rF# zKHZJDqhBJ?u<3dhY-lMTlHEJm;;sFRMcR%xbh+i`XKlB2Xq>ZVoDXm+?9K;+__pVR zmLXFpJ(Mk2&C1R_Z(Wp4ShfsXop%xMzJKSjR7^D1s0NPco8P(OA|DR}{I;>%_9xb3 z2&b;OAY<8t%%#O3GM%#lr$}ndljkw6PQE@gDAB8?v6J&L7OULiJ;wdMf~8fATxX@t z^BiaS?_JdUb^GeIMKhZMsgo`LFjp_R)shv@l#RlnXI4!z6#{=6!d!l4`}kU2Y+cOw zAG!P#h@ya#kn^i(jNg~Mde6FD!F)-~?E(~YJrr0nD%XoJEr1F*%Q4k`{5*~2f;Eb;4Ek2!HNv2q%^Lv`PK}m2>1^i@~o?TlV z$~3Rh<&(t68Q=p%m9+FODe3N6?%@?w#3*$YS5CT20RRGvPzKoAvcU6J2aEVS1D&5| zCDiDlp|L^LBnr((84axRVB+yC7b=`aVAFm)&b*B9T)?jHE~g&F`{bMnmT%`HehuY+ z-u@PVSf4E(*@cb4bnxN1M1~0T82nHWDy3Bc10BG=K6?sVHRnH+wH_0nv<5*ivBF== zFanM$SYBnLp}n_L(EWL3#=Z(83n1&?r}zVa&%?n%y?=m%0DxQ*K40J<#=C(BSJ*ZA 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 ^O7CFYM!)VtSKJ-ayBXyrO<&<{hw?ZSkD3!h(} zu;H}s`m%YRrQg@*y>1X#Q5q9{C((p0ow({m7rnhg${s(^Xv)&hMOketdvrGjG|fyc+tfef|9VCLO0yMjTx6ZeBMhh;BU8Fxev1YD zmaX!KD+UcEBs-h0!HuCd3+it>nEm~nLG=G9dUL@oI3DiLmzOcnf@3xD{nohQ=Z-mu z{;V#9VO>k)4tNxZIKi^s=zZ5=1S3Z;of zu$Dn#g_Mru20r+Gg#1dFAt*=(Z6~Xf)TQxESN}71?^Q~l*(*-o3PYr65=#t%+lg0K z)Lun~9~Vw00W5A=>7MU-_+Pl`TJ!8}nlrB=hN6FdG&dG<+Oa(QvRCH?6cH8l_|Ys` zeFD{m0Uq!=4&Vd_=b4k=3w*$tUF5Zkum>reE}(rzQO!4cb%F1nf9*>ugBRZIfGo+Y z4oLF;&`Lavu-&x2=g`|e767wNoX@`O`MirBzUF27g%fZbkevCvIFxH!O;z|`dPI># zHmF;{Hf8S$zUxuFGOn(H5wlhl&o#^8>rU7qk@AasqhcQVa`SU@_1n*$4}T(-0ps;P z2Eo?(Nq%>tDR?c7D~g6> zpDgcxcff-C_n0R+O?&_O+1uDy$7+gWt39Vlyv_A8Q#wbi+X?1(@c3~LSB`vSl*tW( zGxG;4o0d;^z&78J#xczT_4C$d3&d(|#fuz_k~5|?>2KnRHcGBil;de@J}CiQ|e^$bPx5BvInspthe zkVLg7$qqjv{H^=ZnO{jGVqD`|bkVD*IrB4*hi=h_cRN2}$P`@Rd&VvVTVu{^wXA*p zB#m=E$1&=Fn~54K_7sg~#E7-Dddta}?9E9qzY69d2h$o6Hc;_%UwH8TX*?@m*ES@iTf1A3)=aS?7g6|;@3?k?`98)I zs|S1S@2+_G#l|S+uurTro`LyRl0LX`nkB~;S1}ektht45cTV6GVwe+9k#yvfs#mKD zvob9_-igLJH!m|AF-3BA0QgA`6C-dwXXUlF#iCF0i-*2xN|D=(E@*ywEWP;iy;j_M zGO>k}AAPSO7*Cn5=YKvM?(@Edk@yVq_nfh$QMEi&9AuvsTzvi_)`MRS2h6Y1f|p{Z z>9pM%Fq2Hm=im4<#BazeMJAVBRguldn9fWf6M-g+XLEn$xZ2GJuRPx;>Hd~?BnG&e z3`po@H~OfBLM}C4(wh%7cC3Oxp0!&>70>J+(m8%*pEo-gthIJD;P>!> zSDsKZ1H7G8+MP?a@3^*>OAdrGTQXHShvrG^-SW-LPGI=Isz_7eM+sT;+=cJnMdhv7 z+N-yA!{d_q!l6sX#wTRO==SmAQIODk?(?R_&wu`VRuE+sfWD&;^pHEaxtB4SxX*Z} zQdW+Vg9_L>ziAoc&zB+uK}0*3vG{H1>AdCmPTP(7zJEf_`3u19O>u#SF|BV;UIM^9 z68J4?Re>WClysJU<{NB-Kw+E&%I&nY_bEGffBkQ;S8rDm{OjeIr?#(n3+}%clK3;C z=JAWB8t*BfFfm3DW%M9q4g)SRm)egJndOLdNHK`9!|fPe&ZMx6_g;QG7}eHN+YHj7 zlRpN@q$h$D(rp(WV~lUdT7-J!B%f^u%mlri2nvrFz`q#_0MyjeT$P}hF`$rF&cqP0 z`+vf74C(o3t`~1-+oFu4;e_rBkmoXRU7&yv!50iVlZKklze&>_(oDLz6!F5tfXPc5 z^{_mz?Bq!#src$HO4#u-!?5erh3kFbRXJq^EfuIhe#dS-y-OF!!)gu$9%8@>V5l9Eb=uI8~5lY23bIJDz3lGym2T z?l55epGKMIos|@RwM0EH)Hi{6-oA2QagNfIYko8VCF47j6pKZggdqo@R zn(%lvNkBMWWYfOCWH;Eawj7<+WI70U+qq5#jt)IvOkitUxnhEspG$W%5#r62>``$i zQjTuLVQTOTaNnC8FzJjRS|8IOPKUF&g z^s1V~q!Z72C3hMwG{=nH1Oc{ND>geKG-SNDs@oTR=^TDujwi334lH3zc1s_`8-cg| z%8`Pc;RN3@y!5u0#ZOblG5gUmF6kiwfu%71$RiU&Ge(`GSqTbYHLTJcY1fcZKCVQ05-^%=8ee$1b@pI`Ep1TJvK z!l!avS55=P*YkX>U}3WiRtl{-I7dJzfw#90i@;s~Z*M+T<8`|J~Fo z!W7ouPX*mMRwvu1NKbt2+?6I+<7>}Foj>B)`1CFkhHj+4c8&>uglX5=?Qo*UuF$i^ z)_;Ci|3SGjifr2m9`HXoT@x->W1(zDG^|;#K9ZO3zzoi{!SQ8m|V?<0d`* z3^#GJKtZB6{WYd@E;Mpm(y@Y@cOheshxF769%IuTEBLvg*Yo)i#4kk?o;jH!!&_XN zIr8(NDH>t(`OBAeB5x;&pQ}sB=RV`tTaj3yH$$%WS&kuzlx(?3?!Q-uhXJ!5Js{znzd%C~P}2qk&WxX<^XnautVF#m*D?^f?q2!fan0Ogu-ZP@ zKu+;3>~2HU9Rh3b$yu>=WMlu=`13n3{5WW{)N^_j}CT%4W4>gBQ~O-6>YeFWJOls&Wf{mc<_En&Sigz9#DU z{<2Th(eP&%`{>8IAR1s|ALRMPKc7FbA_D%4B(Y46o)j4_e>M91^cXzr)8{#pE?mtU zWvl4Fh7O@w4sp-eJ1{u^9Qo%V*q)4&hJ9$ay8p6QbJO+PSq0t-$qB=q;;D^p1m%IF5~mrZ4Y9*?1#QNrW5kO=uCwuaWS zC-rUx!YjxxeerBDPGc(4V|WQ2lwf(wR?=eRAht@$OReU+eXHkCz9kXWaeL4qjHfZ$ zuWMxy0~a4!EXM=vb1}8L#Lnln)fZOZ2|vqD+yTT6R#|9H>4-AQ;q*!u2F2(7Z@A?u zbVDDFqgIkrb7h?3p%pCUGkaD29lUaecOy*rKOM=n5>7U0tkd({bI7iAynK6&b+1nV zNh`U~{K6u$Dvlk$D(kHWE!(p(@N9K+KA)9KERl_j+m{NYdh-Y3-}3wVFISDa!K&=j8KYMKdpu_Zhov1eX9ZTF z|I*{ptaHy(B+9nMjNz3m-RJ39AE1ZkH&zF{Ub}Gbo1AU?wP{j*3Rq3P=lJ_m2ztxQ zTzQG-cWwRKtF%8?JcYuFl^Q>11+lg%g1tbYzOePiTqf0Bs9)kfk6qh;`x@qv=+EqV zz_w+ZReGU+4#gA0z)o>Rsr(%aYWvI};r;U~!Qc7*jpvuFNZ#zbV|Uv}+~;n2TQ2fQ zH2T*nsSXH>A4dm|Un@T|MN#RbeJ$o2tkne^2P9 zUjv;p4tiMLJ}r5c8L99Gb_>e)8M~iJq~h@qM^YY}52DL?59nJlJ@w^Wt?Q2-p9j?O zAj7h(R7~iqQ9VcTnb%QGy)Sqd^Yx?xZzwnd9WQK}JC965D9m(Y$sJuJWqOZiTb{ zi@LgPYvLm4qIP32Uf}!IcK-JFZQqUY(QvXL4@f^NEgfTTyDQtEotc=o9Al1#f*&+M zGk4PNKljt`W>k&Ay#mNiZ()GSamRK(x}!x2uzLlTw=adByKz=@@KFog(h>EVzb+81 zZUQSjmH=QI76$8aN5Jy)&~4nhn=^%w^Bf;NG@B7< zS@)YU*1VdGDULpl8U~MGt+uG)SUtj-{}=sWAtlnbfVUFTFGVFM%~=>=K}g?d5AK7q z3Oq<$c(e^2m1P7~|Hz%5rJz1GECshh zqpQN466GR+oGWD3fbZwmpU-}_(@pcp%4}QJNx5IuL1SLK=+WeMf}5akx*RJ&TasmZ zLxHL=xj+?Z{QRl0Rq)@831AGJY%+JVL5@$JA#EM#+*Tg^PmK_K~mK ztW@ze=V0vn-GPj=4s^{a*2rGso(i~VPlCzev7i11pKtNe5|xlgQ&(-GDO! zxeFYc!#7#f^l1;zxMq$@@(vGLh7lB-IA4;Gd#m8W6Xcz`BWWhiUuU;@d4N?Io9mi4 zjXf$f#CT&4(U8UOl^9x|AK71i%1NZ&R*l5(ZL~!1UAWt!f_&CnBg!qC@grH)QHfm4 zleWkn$c(-`bK4oZ3t&!l%b(|KymP}OJ{#92W6z*{>)_8iD=V-*J|ko8ky~zpHgEIp zX`@hJAF6Kqk+g*sZ=AA5v2aiZpl3`{T<=|ew7q^3kc@xz9@CQx16GmcvEeRApV&A! zVKtlZxwPk;aEUrr(g^!3JE;3ClM6Wt{~m~o*&`+n88MzovPdpYJQ1#3D~F(L&+~L} zGi3bPwBR`xbLdpwY3!NDH*YCl{L<(n9H5)FFcwYm0p?QjVeFT<%4anqhOte%v?Mmf zax%}(ymDP=IWw#Rb`BpG&#uDN+wUlf)$fn}|DB?x3W6*MR{`TZ&&5fNb*&@`URJ;) zzZX7AwjvTJqApqgwHkWzeSG8g#@s1FbSRG7(49lgyC^r~ucMCQgI*+MiH*jICRYgF z%`1&O1(IF(S}J8sNvv1fUSfsOYmu`J`{MKa?3|O?`6|0_@Q=lHBx-GQRn)zF?rD^A zPJzkrVa}1O858mvPFi0Y7}?+zO<}}PK4Zleri))PiN=RqigYZ59gd3uvfKOocGyJQ zsl7U(x6Lehw*kZ)c-C7qA}fC3=g;$cwFxp^FLItSK3BRQoID72e!=)_wn4v!2*#t)C2PrPQCor?G_(d^6%{^8xhyvLWt_SMK^T@A`k z9vShY=!j9$y-+bUNH9@{$D*NzY1od3X4|pOjy5?AsbAOI+(70cDSSyCMUmXU_{RlTl zM%|@W^EmfrH#fcKT#C5-IfF=vJMUq49H7v+3NXQFJn!UQGQ}64sxt{2<+_DC2~q|! z_sW*MOI2k}{>-y4Dl=b2fG=GK@XfO|dO0FQ4S9BTjqMJo-65UHFp!ACbRa<*`JI!c z=e7<8PU_OY?3pZQBA>=tz>x_eodI;twd`ez;`J$LbS3t+&ed*Q;^@TJj0^JD(J~E7S7$F8 z>Z~JOJGAC@UK+CMcZ_L>}AiAjpE&0X}(Qx}$TiXnp&R@@1MK_qC^Q zR)S{vkTWdVpLB)WK10q(a;-YC4YzI8J76~FoR4$i(EK?I_4p5sv%?1g`uH@DeP+w^ zQbbT~J#$v{3{6DGb>2w$F~2X2;CYIvd!`*2rMaAF0PM1h~LNO()dR%;PdDHKX2#KykHl@MRSy7|wCc?9gTz*AZX}hG39on`$wkm`xzoFnYUPfa_BiaY^tvJTKeQU<4^H*Wp z8T7ryJ+#R@Hw^SUNjUn&qYYT+i&Yu032X2+oo>ns&MKd$PvACHoZ!)Hq~F<&1AHGn zu`M7C(EaQ*liww~#l}S7Cpav>5j0E!S~i6RQ(y$)mxc2pgXb@Pz5T?t*T}sXka;z# z>@#+H_?NwBLcJ0P9s^eRdj3my=Hrt%n~#hYJ06kjv%%%jUF00D@osz1=PkdgWKH6? zyEsdmN89z!V#>~PufFWv7~NCYvz;-6bo zssW67o_e^L@8Y~(GYtoHeeiHfo|^^+75sZ)P1_=aPv{ii(9NOxZezNAHn;ty?fAi6 zTZZsNG%^zlNY8Zr`8=KhwvjSa6YswXA)0wf_!A!`**~q{R}PMNOIS3oB!YafT-izu zYi;#K0fMhNIgj8N>eX`w5}K1`8P95vX<4b<$I8V#ayEBTiIm8NpZD{14p=oP$M$bq zaQxeB6VLgAcA=kSZ`&EL6fqNNq-zJ<1y`)8_wRef=$G6ncl1G?>EzYUb9g^j7E(?R zM^;kXfEvEtqA-;j8kqzy6(_pMXp-%W7r2X zIzkoPaURfMyc!pR;M%;4j)2daxmRQGn{(T9`~_RuO&4Y<=y9&+5jjW3LdA&(9FK9Q%4p5-O01T|fOwxhf{9q1faAU5~h4m$HD$n1uQfRq^P6CaJ z&TZSl6+!_cNp47OPZHQNA-i;T`3o&DE;@$Ywe}QAH7A2A1;h7wE9rs?5HCk8xs>B7 z-OO_txm}K8!JDgagKgq=QjfB=6Hgkfx5(Hs`EC1yf1JC;RZh{fNrLjqN;u9n{iMu6 zwt7~_*7sA4uzh=qfB=wH+>CAYa(wgd$kLO1ey(4g$OWF~GbT%Bh<;#9Uj6Bg!nv!q zM)4UNl6(2YB=U{M06V_Ro9!!gsQM-Gn-SZ5nimn-SeHi*x^5?xhXj@_=L zMy(J6HqzS`Hqkts>@}+=T|!L3g21vHoKGYQ^CQ3by$fdN`Pou%1uT9SV7Fin+?9i; z5gMlNtz$mFAhzh}SbT?ROH7CHNN<#?sdD;TgogpR!>pZzbtn7N^BJ%cMO-w!fTqR> zI~g%bdV&$G@-AqJgaUX}wz<0OWlOnH?YZVD>WqE8F<_WT48Q`uKll8Kqn_7^VWeZk z6Ek=6T=wo2qs`~D6-0F43zpiTKa=!0pF5ePxlpoJ%1Y*qDj^`Uo1Nt9=%$}twr+XN zxA*Jh#6fL^ze2T*5oBvWg)j(Gb)|~d%RkbWphy`^nq4B4khB^-_s+Ruwk-!+y7`gY zl$PCX8B)wD{BWM8Gnp2TYCipa89(YKu2(apWYI}yY?pT7m-W8qKG{BwliyeGIC|Nq zAGsOd)ulN^ntEVm$vFz?(LGu!f?3KNp>}L#an>e|RbI#a%%&(tM z!-X(iV^pJ^C5t1^TFvg50d#jUl8MrcW5=b{$no4ZHgUF^%Y~mUTj9@3YlB%F*X`|E ziBnPFG4*aZ65W|O+p4H3M)ptd`&@t>0aQSz4{F)bmX^_vCs{u-Ar;q~T_8q2$GHbi zVEnY9DdV?=mF&B`V(P|B@k4hE{$5y=Y_BsfJeB~8eonvmu`fHi)hBlkd@q3m;##DJg z=7%_-B|bbouTnfS_R%p-_>2*@7)gJC~Io0?pV5%aVB& z9IR#m$Iy&ZEH_ZOYWi8SGIZAU<3i{A_S3NqT|CVE_VF^k%a`8yw^k70r-{?xqJMf> z(y92zIL0BXQx09CR@e;KibSvn{_Dpb1Rh>*kC2JL*pSVO`KQ|K-c0YaS?3I_;8gSW z;kJ#Kk}QF-Gr_$d+cwJGg>+UfX~hklSh_*U%wrJfKmq`BKRTpkMBh5p?F;_Q=A#KY z%HWsT3maljJ4yY7V=tm~#(m~ z3#_1;ecHWWW-!!pFde9zgh;woikBkrcAB^CG8lg_y0((4^u{i3R!O)-Uo^J{>!SYUmvWLFRkT8J)?8c@0>+jc~c@Kcdt!6v+V;q8MFM!Xwg;tjG zeT6l!{n*&;1V}u~j)@&5!dUQ%J&E5N`>5{0LnLexj#UE&Wdnp~et}*nFn#{SnL+V; zC@6i?dfIip^7CUq+c=_s?=1$4cbmVWy-A+r0YU8Z&sV!}Uc`OvZ`GMq>CYS>*P5oc zuu0*gK)F{0YrNr2@??>L(0i~~ohKvk9sQuq(bzgk8UKujL*$d-edcK4?=HFS;Y>#y=?bR2J6eiatqUCr!Kq9Vl3s=N!>ZkdRA|ol}oGWFgB>>&7{5j zLxXHf-?@DbI0ka5c&l$Kx?iq}MTHl?ybENO=cD9v5skvcMUO21PJp^svXs2FKPmo? zaVfj^=JSRpSs{ARURG&V!%#q`jp^gE~Xc)w-PJsz6&QHf#~>3>iHB6^oM+X^GjmmU5BwX z)wiEswFt9Zd}YFSbt6}Iw0h@3bn)CaKHJ#uAi>Qs-X2AEdSn4fw=Fa8*bb@17oGAu zw_a(tkij+Aoc$QYA{+qi%eQko)=zxrV1`Q4;<0XyV-Dzjbsg_7ox9pI7z4ifcKVQ? zue!*BAE2MHUf~TV^+-DjLSseoM0V<=0OtOpp;q1ZmfYd+D_X=17nYIUQbsVJs~G{$ z(AI)#85o8<+d(JMnP$)DBW;(=CZ#`Yti(uX%W4vL6xFWZk2%YDhkk^+bR^ux`F!~b>0Q^|=M zAGsPa7ARW+|N18#s+f91uqg@w6Ux+bimj?8{%+Zsv;l-Q&xzyjo)}ic-caS;&Mh z+Xkm@TL6JFPs-fs`e|&oERGcHGlx<-y(aQfAmVBg5_%I*`~Rh4=V!kZh?+8!Y-ZxF zk`iqko9sv|AwhLs&Q2OjTtuO)NH3{9-$%*Ggd^G6JMa=LaLDlkz}oJNST{qSZU+@( zcnkHu-k=i3D**dF$Sc}nZUxc^h}L$0+kV*qQu%? zF%EW*JNKrFYih!{aE!e)md|uY(ef_@gPO;y!#4E@oi< zbWG_;Ui{?3yd~caE`Qa^3)APd(=9K6nVN!*-UA_;>%t-wQ{Xk;gY4Nt5nen+Y<4lq zuyPD*B~2X~$s|diXJDG}Zxhge!3lTh;(*3Ro<-O=L^)4Bk@MgG9&+OO)6x5F6z!|; zz;Acyn5{D)jWb(I(J@D!DQiqlP;lq_QJn{ zVfyKpU{V)mOG|B=qVB5gPt_^biM*V#GqiWn2py5K=kQ1ALWES*DhPmEarUineCa?v zZqCli{j@9ZMcQ4K=@)GuYAKSfd)aDu^UU9S&Y%wph6QzDHznoU_5)I6ezbc4qD<^l zmQ54enR!0%*$qp?SO)71s{bA3D{^7ETdlmZ&#*MvcOV0*^pE_8&yyo&J zZ=Sxp8S4kWH6c1yOYK;u;)b79;Ew&Uo{5?BH_skAuL|&NU1@pI@5a77Gl}01TuNQ5 z8+;W+m9Xu1o|pLS0)y8Z*t=atRs>dMdl@U3OSDgQ>+_#9s9`H>+S4m} zbi~k2l`qN3o!GFu88gM_$v4mXuE^j^K*dC!DYo*%*_A~4iDofj!t4Zl-Zoq7R#Il{ z{j~~aH)me{qWQy38NH%toe5zHgG^MhT&redq#=Ct@r&1%?YVfFm1?}22l{LU7qo-> z&Zy5SG}63^xV~FE5hGEX8_wslDZ2^9g@QTnPds-Fkt%#D3#!EN5Ggq*Sf|2GC}LF`1n-FjZDvgKg>9Yu5_2ido5UC#@0t%V zqjI<{0TBYOpleK^=gc_JkZyfGN(Y~)otw@JOcm%^%aPpyQs~Dj zwYo<|py#}R6>H zU8rSWmE{h+^lQ zFLh~Uwio&5eUFX|nsrf@$*<=+6g$5Vwz_gkF59wEC-nY9tH>fj%()*2i*9CeN^x8D zsf~RV1qjCQHvhV8j#j&=gAX072BP(1?gzWNux2a?23iNu86eOFIPu|oEmQxp zKeA^)bD`)AR!%`8tVH$>xXPx!n3?Aq+m_S)+)1(Jh$_I)s)THLc_q3WbY-qge$;lE z|FF#z_j1q#7zp^vk?IZs*G30ld7MkzuU$!kDk?}XScIJdC9W6HDZ^58WswD)vV&$Ddg*yMjE0@+PfU)r(%{i-_@6~P&P~m6kYuX-$eVMPePde0d2OM40 zO1NyDI#^`~(G4gMlv@4}^ALuO5K~8+KU%SKc6)+W$FRwJqR!T^%3fA%bTQjgz!JGIdH89boTmR*({Z^XZ^{HxAIlm;#A{Cd`X|Cp@}w%^PL3W1^dsz$X@Ptugu9@-|YZtLA%%T z0^a>@_78#67BGTIf6}*^Nw>KN@V^lgt;5~GW2)M`996Qw&#}ap0|+8^d*j) z&unwb4q_*swQUxzsPQtd^MntOai2})@t+a0u(IiS{3>x*rb`^+C)jNQAI*JD(Inqr zq{F^ZbJ~q0U8vI(J67~rUKPV?+^~~XFpv$tb*RlScO)80J+`HD5Vjk{G+|1x9%!q* zD?X2xJuDdx^Ne9opTRj;EdK4L_d9>#O_{*!SYFsjK_DJ$@+U_YeEi^ZF4)RdKkqa4 z87-hGW#h-1V`JnQ9I*$aXy-6VhxeZqYq)@q;sN77KF_b&=auoxJ2_63>xMSXR~4{_ zxXvR8D?jgh?6%iT-41$4B66udkmJA!GCLNO9cM8#e&Z#^RUz@Ri4TD7^RPtomFq2? zaN{V_TOLPtD0rwhn38##BaK?eJy^zgp7N2MV#pU3dYG@z^`Rkmq|iXmcFNhp^yl~Q zPl0HHU>mbToKY=T?l#~k00<_Zx!`#apa6UUk_B+!a9qWDzDx0E*icLK_&kD&PM*)V zO2$wqz&I%w9Z?*O7<-r*C1F8C3`@WgPeTB!Kx>3R4(f8m9QPJZ5p-q8#%v@If-?DM z1&!v*1&ckVP9zOIX2Jxhua#CI`cg7;V7qMST$15$N$M-%jpy8yqPbY}BUW0@GV_3J z6sTIkuhgBn3Hu!N$nnM)lp)w)07WB%fy$AOmOYf$Gm~5lk@3O7y+E zU%M!i_ig~-90qMPo$2%I@5i|$(Z^1a1*Y~YA13sl&ys8>Fl54L->-T0vynzY2PC)P zdfxfAT_KZ)g;os{Vpqn|`WfaEq`O{ucQ?Mxg}^z99wZ|nT@9f7yr#{2&MDoDeOS6_ zX|x&G!(>-Tw$LCtd!$$f%X(UY&Q-iNUK2f8AZdHMpW~$JwgZ$O(38dS=epsWwk69X zM=k+Y?*MarqUKz-e07v#n?my*dt|Ff75@t`?Sy;)rRO7=S|DDssYBrfgk3)70pxlo zbzs}a`hI3sx3J`o&)3;;;>#%pauq};@XTY-WqT?;s}ow$^~?4^2CR$Jaj%wL*I~tj zc_*FoN+NV*S}m4dleg_6p>{SH=g>TxP zTZU~)WZU>WCQsYuiHCcfP7YKc#{)}mdHDAnvHC62iEv}Bc4N}2ho4uOVQ@ar{uDDl8{U;T-Wk32>sWcm zqOD>BV%APzE}ivI?v;kNpF`IRdoEu4*NwrquB^C)KcPXI+0H5o$vky`-dg9q;GpL^ zEogHlo#Wxrk~eJAxK~>n3%|+NlC_5pg+V(7v+U6hjza_nQ#M(pi(wSN&Vu-(8O-@4zjGCbL~DHd$rgcx`i zuC7>)y7d+xLU9jGbMBH7j^}wv>m*V@9HOlq*y$jcGx|h7g%>Z5aW{Z_Q{RL zxso#WF>z?ju(_Z5AFghbAC%lw=B%<9`9RnSH4sEnBD=OUuqx>;z4{O2>A*L~(^1KzzVFigB|gE_VdDcgQLmBDJuc zvUeT1Tk$?{vc{2nKN#>o|E+Y*vo|)1Lt!|&Z5Tk-UYc-F070UTCvWxaA3DJfB(-9w zV^zoq2*gT$1jn$jsZ0~YD85yuJX3`8aObk`gub-Bg0HF!e?Hta3pJ{v=y%Ct4 z!%Wxvo)@Oe!Veiy(JEiknt?^vl<5xTZ*tYw^O@Stw!y_pu-@;n1FlQ<0J5H$64bI< z3~GG%sLpABHUpL4mw>Vm^k!6LsvnU1yg19LeZ}t1Feq+kwu8GQp*5#=KDyG$tT#C` zkf2VAFAae8J1oV1*<~N}nfM&txdGDKkAa9+2hnDLue;;LGeY#O;7srJO__fs`(Ea! zpCi-n3H{IK2OF{rBXag8>U6kvZcu{;d2L6#Kn;E|_=c0Cjwo2{0KY-0Y45;odFeLA zi+Me!*Y^NyX6v}#_A-Gb03qIaN#q2u1?H_`OwM#dvK4G}z1WfaK>0Ky!rcJtGVb-JB2Krz$=>!=lzX`|h&gaKz4bK}tJHfTptUAe< z%DNS@0H8Xpk9^I$MIW(ZbsJW&zeKI#8z-WJy5KRU5haNMB_N4e9N$6G$OqW~k7Ewr zEqt)Ic^$iQMC5MB=w$2}c`(+juCSjYqI{>XK(XcUv(gKGpy~PfJ)00=;OCzx*V(Fw zj!$H=khRWMQITW4wnvjDcJAnxWZt^vU|4Qz1>(PL)WmAPKEA|U7`Fv9m~Q( z+kYt7e?C7lbNiyTC8#wM{Qq>DUdiJ9q%ht75cH=!Ty~Z6X`O0Na!fd|Dpr4N|FQ#( z*Ft{zH=X?e%reip3x)zoqbV;y;kB3neCo@~pT6J}aalHI2-|pr*CL|Tc}&9tVl+5> z*jJf_tR9kV2=yMGjx4iwH@>v!R!uZRL!GYyouChV<(+wD=H_e8SAMPV@I3ahF>SX~ zmZsRH*tUzc7v>5$gQJfYQwE5Q8ZRYbV)^3uLEh*YlP2=>Y`VCylX+YTTKPG|0tD#S zTz_q#QP)sE3)|vy2fEayWs@q7!RP0B$1k?+)Rsb|ZA6LqN%5C4;pj)@Q6LZeA=Y_K z*tL*;|7l}@51Y%Ha~Fh{oirPuBXibZ#rm{;0blRKdlB&}mO$p;inr#8t;StEv=)}X z+5=i!CYt`++An%woNs=HSRx9bj(=bu$4$SaBfSl?W?^mc5((~y@8TdVHQwx74H zD6-EG;N?-AYZ{BA$>Tlu1z=PhSH(!r^H<4hv{1$^gKJ#;t9SnL{Th#C^7y?Mg1_?e z<{0O2yLi3k>{xc5@fSF@w{(Nf*yhl#oZqz50>@EBD(3g-*Dg%8#v_03{Oq1r9$JkO zb4_EhTXvY|nl0w&5o6dgAueGI2sF?DVZK+lPgo`e4x!P3VIh7ooNzET&eEzO1;LsV zQWT1ISj7Ms?Yq(j1MtZF>L6U5hkRDkV}pGFE>h+#fP8sQX#4_{GP}zqMyRk_MAPHS z7k7!=;7#M$!Ui@KsF&$TlBf6neofB4{&eE$`*;Y_6mtP>5g+-v=z1(q(BtFk4LeB` zGvDuz3?8M00bNURbKRaFZO95L5-}Tuy(P5_aBybJHyV;QmIq%WFiu^2Px|w{d|esZ zO1yNUU^X)}IJezkp<>wtR_Oivv62aD1Rf`uKwy*Lj&zc~H-Ajy9az_vL3G~p-LqRl z&N-otssLKm&$VVkL2|kTVBoC<$1Yw44C`R51Cx@G)V8g9Z+(vyIBy_r>oq;cmdkRW zPGEi@!vr8RSB+QpejZ-3O5U9J?hX(YxkJylfUS!c>=rhgOMkbVu!}SCDdbd`K=S&s zUCixU2?3Xl9~)46+e(Ktx6(=JR_lqMwfIH4FadXXC7--1D71_J@NMGbE=<8&`+eLQ zFhQ1z6H&VnNagbkVAxJjAz0cN0HCbKg+VzWT(SmI*(YAJ*lv3T zOf8cwL!U;G19FQR^WQ7Icw?NG!@&!>uZa2YvX`g(ta&J{spoKHY9854^bIf3f$f`q z@1jW+1-5@wkrYMKHoQH@qLmM0UXcrUlrCx-8#EwYm@js!&Q%d@zuA#50fQcya8Fw} zO!xL|FCrr6o-T6bqZh1Q3E#}cn8J4V*P4HdWOdP{PWSu@7a_UZ_B6b-zpKFT&EKwq z8^^tD+`&8a2e?jl4E%euPn&D>+NF)OCxHNX72i}Br9Rx}1;n5|dct5dN+y(I7*tx5iW?Bgo zEc?3Rn=?%Kqvd0lwO;XJKRa~C^f%UdiPMPTckEHg-?x}M1ili3yzbL9@s!dnA4o_M zN3D69Uif=S?`?;G8|)q5lJ2V!gDyZx945GpT}P5WJMSF)R2*uiVRseF{1=~8JXH+! z6bOS$pUarb`FxRx7rJtVfewIHHV4>UdoN6Z;#sNyEwVf@D57`QK2x2kM=*TO{ zzMH1NbHt1(V(M=?l;9dUSMLM>za7}Qba{Rr*#(V_Tb>c=4409->NIE4P|w$@yCcs! zqJgW*MK8)o=mmd;SlY?$3gdTEqG)x;wTb1@XnVVqB@eJ$w`XFG!9)!?6G)qjvH78$gs9=KV`Jlzf2EX%;Bhusunvrs zo%xbGCJ#u?YbTJU*i^DoMLLtkPAE;&Mbz@>M~HR(R5JlKoltrnaQ27%@Te^p!m#IA zUFhMM_WPx4b0UldeWkAbnH3py?0LP&-;o2i(Uo zVufe&saH0RR9=L_t(A686U@4cT_T;fB9A zjb6;z`Fng5Wk?s|vqu))q;;-2X8=tz3bbt}7Y_;#^F=BhL{H0ZZM_NyOhcb-Ep_J2 zq48{7Qc4?|vdDJ)SGE`>9i$u7u|u=oMkz9U5^dTxrFgdS`J(yx>d%}>rp5zyCi@2C zWb4zb{hjwdE11q%5*=*I9z@3~RzXr(-MZ#q$#Ae1#hz-VRU#$(T8+2;8|{Ibr&j1u zwg>^RnZ2;D-eEc0XVfg6*COnC?ZQ9!Q0Gyp~KF1y>9(7xJ!aIGYOexDBA z817drHqU#uPZf4pD@4z*fDLG8TrfAN_y-0Bp7y)veX|U>*vq^=nUG5Ki63H>OfDQ4H4Crlluw_ zv}!8#s8yxI%Z0jOcyGm!&XcdQMZA6O?Z{=D)RSoY{@= zB=}`)%ACt#9AO`Q`Y4x>b#MD9kA)q z$s=oL%!;pwKle}0b9}ohGTJiPI?o~{3qLtC@I32Gx6jIGBt)3r*eNs_zcV_clPN%u zy56fsGzvA7erYg>JtUzuPjuj8+f4CHD}ZG)x5_0l84?;VoE5`oHMHIfti^2{<-Tci zU0@sAXY3NJrL7n>4&u0Wja?Lpvt$E8U$@ly`u)u1=fXy3h&n$fcHqt0b9`xNm>p)u zZoB=~JWh<4T{uQ|pLoxwk5@rNuX`1upFjDf z!{f-y&wu{=|7Jd6&;|{xj5_Es_#VUU@%;4p2&`-kqqKap4oM#*Fh4(kYMkv%^edm6pSMJF(+;p} z%}qkFjl!~vuLjOau$H=K9GnM4v>ZpHkE=WKixT=H?77J2w9;GT@Z2JypRaSDHYE*S zd?Qt^;q~npUqF)`uU>pTwoKFW)k_YYqwOM^0+>!Nb6?48Y4Y&?na!-CexrXJ^xBfa z<33wFN&j{Lpd|Y9`524$GdLKuWj>^c^e9t(-qBMoDJy*)I0+G`J5ohmfCO8u5pY)Zt zP{6h}6Xf$95ScTxXRCo4q5VkYBjZTt(Fy=Xdu->DE<4GKme)rr%W6{P3hdz$$OM6W zWE$XTXkcG3+s%}2X4b_gyyEt$4s`Y1woRcML1lEaf!%(;O{aB30Bit1X^xe2Z?MmQ z%T7#TOGTRV@f=_+0KIhGW26ky$34$ivcF2%_;*gikiQrjIH;9QZM(ICb3fgK?B{+o>I%$$pEGcK-jeJNg~o2s%2z@l9|y!3H=Q=T6>m)m|zSo`zY?r?%K z^4%SGwauQm9JPE$eWZttViW0-6Uf^U{&ATIB$S9$!OO(J^T+Q7+QCl2h#p#yPqYy) z#ZD6+jSR~U%bsXk+~(Qp0AG>#=X)hn?uH>7tt3^=;0?S)pH4uZEAw{}S84KkOUz%1 zH3^z*s93z>6yEPC%mwmK^k+n_9vA$#wwK%(>gVM?zE_-(t@2ik^xI{l&vo8pW416V zZn6McCS=q3*JTxL!;C`*Devvzm(muBf=pOqRjxmqTN6f(Q0A{7k zosVHph#!Ckn0UL+@`A#jn`c(Xx&7t~!h7Rip2sU=hYDL`=W$vv%_+ICSt#hP^JzGrapFc(Tyz}utk5V9Z6CHtvpVd?n zozo5K74^(R$c{#BlV9Oj3-b}v%ze!F_)IR!tMfOyzne_Yzlw3fsN}Eqwvxad^E?WN zSH;S2nDfzL|2zJj@*zxaK5o&6@1g9{54HcH1lGjV|I^qA~5h8cVLqPJBZk*&xAp0WHuvEdP< zp;GO7qTPRf{#ld&5nR{~4t{Dctq+~fw#zT`CC|;<@U-yy0oN~u zvW*nf$b=O>Dl%bf>&~w>3TWAW&*{h(NOm_q*|vz!IMW_oT4w-uz7|-lbW&T5f>nw& ziVr0ae*cm4*vS2R-?QlknVDT_bboyJ*?yWU^3putMRLh?W9f|u&(DLgEJLM4pta}* zOrov${T)|W{;Hqo@XKmQ?BqZi%O33FC}l}l?BJ)^Yue54`RU<>u^Q-AyGwQaapth| z!qHLv_vb(V`F}-*N*n>;kT~CheKUa&_$AQs6Q&v+LZ?&0L4|{C`-=$1dai-n3Vh$j zvXj}z3Cyx}2w(1PBe$OwhC=-mFn{J%!djj>G{!RGR^jbzdLKwoWUkJ8^S7?g__yI( z_2uOhW~>glPGw;yYow%Ft$yaKZrA3UKn`2HPght>z$dUdc5(z7bghv=E{+Vn$lk&P zl^(2RtZy>@_hnCD8FdB^`CP{FnTNN^xuMoQ4_jI&Za{eqvc~f1c%L&RxDt!O`wApa z@GYGAeD$i5D|d$&V0j57GVmOpkaYd?zn zo&bu=;Jp64(qwH3(IaZ`M6mGoystmlbJ-y4Ou)}!0nM|NBNt;PnZWrJSVIFrpx*6G zwJPBRapV7IWu1$e)4<{LT^LL+1AZlql$4CWUl3GdDGz(`(K-{gOE>Xv04~Xsmx<#! zP!LQ1(D~fkI*}z>3UbZ;=?ptpyW`fcSq&TK@+tBxunF7mb1**t6Dof?=hI*zJN>L8 z1z72EBSAcwuc$J&9Ktpl;N2S^cF=CzdD;0s0P@HH0xlpn21;jT&Bu=%JCk$Svi881 z2NMu}v%MqOTr#$kBB|n*P(kQ+7imBLB&sHvYjnxmbMA`$s2gKIb1ndzZc8PRvQ31N zO@!VV=Rb>GPhDhpQN`XU06QYTn~kD#AO2KuzvyNelPyK3dx{hH_GXqe2RRQEA53|O zBOQzXOh@;lCc_6^U;f8(oA)F$gNzk?p4~tc2MZ zo5WAI?@k{Zn+C#TvqV?}XQAztn>#`GmP|44?W-nX7(ubU&~rq=r-QwUF+Io%e36vc zI{EAM+%Ec{S)r2$BVm@{{^^ib&`*5L0G702fWC^z{u%vy)JkspxsIz4m{fs&h=P)l z(ZTv$t3z=1K>PDN>vFS)K%GpPIVd)Ha3`=GrZvy!s(k(T-S-Axuc9)1gw)c(Ja`Il=goiX8IhN{T7qB|j;+z~i@vf$!crda z?JIV{^!$#v8*JRhFLdb7!=K=SOdx*n=W;j%Gyc!e?Y12GcH=5OJHMuYBb#^g<>qs12JwJZ3nRWcOD+plZY z)I3PMe$6e}Cyf3)OHfoigH3<4CtEDRzvL_qR!YabnllU74go;(`S&RnKOOOnThb7L zf|Cc+^Ha{I3B7U*z!{2tKA(ML@TqQ2eDxW(w*1qI#N=SkgH7vtJn^Lp^a1l3TH6Q3 zXFGO2S0lkX)5m8JP8`dtf@(&%G+fbG&{y z*PHLO!2bJ+4Pv81-OfQBk(A%+tEe_d(D)kUEokQBd*bFd?-Lu(-#Yi0esATGZaWKHnjv9~-~1G}4h`>q{`=qm5B%X- zbb15&9sqx?MB?fy>A?>O2htZjzn{oFbka-4*D>LAK5lV2d7X zQAb8!TLkGaa>@gOQ(d|3U(o|HZlLW0;9n!61v%7J8u}XVLLY9M_xINM%TVWsU{TL_ zI>DykbLuDoaWMaatgk(xO&@g2trZ$a49@*$>2UaB&|cDbl8%ulG+7`B_^g~u0JdrL z26$_<7c@7$ZVE>CYQFTv{lu#y`rB%=Gw5p&;)GW_{C^qyw_jbiEv*mx#+-BQUDRn; zaVQgE5&`BIKr)9)E{yHu&K6cM7ZHwZ$?`wLb&?C`Ux*zE4T4!rK@>7$gX9GO9IJf5*uLS)s_T-_-?*rqT15dO5v zdIcTcb`^Ah#YV6Lzo@X^CY@(8R67R>K7~PtVwkq2ix_D;(>@5b`uo>*nLpg?y zmEr5wsCGuO)k9{R4)PtlA!_5esU`P-W|qBkgOk$Q&K3UVDM;1lK9^+4PYpl*`6o56 znBT@5VcJewQ@^K5u6aogbRYF~Z&CUYUTYc8u&`y(K(1R}p8e#L512OQj%S|u5PCku zL#uO>n6K}cBRGF{iXSVo^PE{Ulf2DD^7Kox>G1YLr|!Oe%7^*5;LV61_`HY0#zLP+ zLQlW>>9>tJso%3vAxW-#Oj@Jt0{n`zB*!cynMYVbBm2lR6b986Hl$2gmas}p#rWlQ zH8t>m77T`tGRXwnF=Zq+cqYin<9kOq>HK>5TVvDTJgd(*#<7L)%cT1(>P0>#J=ozq zu`8Rps)(FB>y;Wq7q7{#OV60hqAo?Ku)Qh9*)&t};SnPsDK@YHX~_Gu1Iw*j{@xTc z?4Nx2h(}&)*P2z_mMo$1S*orr$u-Ppd(bXb@!{HyKHEdhv-3uO8SKAuA?fx`K|~08 zH;F}7+NOwa9N_tcF+LonGhK(cMU==29hj?+qUJq+#UH<9~=m zeEHDTZR4_f(Z130`8)d=@zi)%Ya@#@_q)-2*Q*E~BB(j>w#V2i>M@_xvY?z$>^!i{ za9qu^+ZVx9AJd>mJb0Vu{@T!sY5#Z!2`m~Y$30IKFkV)UgvC$rwGAeVS+?6vtb-CIA28C9gKj{y z@pVWv3NZbV2YK25YP!7he)u|nF+pST{`3_iZe6 zoQdzXEIs_J1ndw8cKp!@Dp=Wkd zx~+OJiQjcU3T!Q@3E^X0323h01-QDqPe9W_e=D7V&lu87R8OA_fl$D%4z8!B1Mo;) z=DVpSGUR`d6uO>Y#7H;bWoKvLMOixm0_=_GxRZ$deizm@__JMw+y#JMy7sBxySE4E zfaN^Dt~VH7$@E*2243}mXeD##&wEV5EfI$#1KHU>l2Q7!Hbo!UgEUdVHFz`VNnTGo z;=)<;ST@gc$_I@7uG0ZN0(k&h`#~i!*bHzNY9uauOB`Xn_R&$X*l<6y&xnXXqzOr{ z$?o(!xWD_F_z|rdWI{>Lok?HfXP=p)l`=>^nFLngcux88>PDXDwdnaNc1E^{heL0z zNX2$hNKo6qk*rw|GW{y<=lf){%`4h<>d2xSWozSU&LL`m^J7*(`nKkz^QB5g)ldTd z_-)G;4xE8xjrfmdG1O;SA&ESdfwCML23y^WLr*wDk5jVHiRV@( z%|OU}iY5G35jHDSdj5)6xay)cB0i8DUcpZiCBoxVwvA0`yJ_2KFSUy9A!Zq|?71&k z)&341<<^8C+XTJwmS>~m0Dk!#AUr2J3+7Gny~XFC&ngD4M2bK6iUsHub;xusoiIFE zkYUi)+t$sP|4!qUDK|Xy?*ZPRGX{eM*Nh$5dmUflgd`6f*O#M!0KKC1UrBS}(76-G z0)y7yS=dvIU_aM4Bx$-Ih9B||(OzZ)Te^qz(CD;Vw{D-2x77dDBuC!Y>gCQcv4`b8 zo8ES8Zdu3C%*+&r3KZwnd6Ry$>jdMY(8lEUwNeFBiZ4fuvhB&<$pEy-_s4od27zrx z(`V24d=7uLu%odgn}iJgXLD8LTpx3HlN1_i%<_pnK1stk>!d){_REwPmXf&jRnEwn zs|*G%Qx59n#-~o+6>P;hOq};6h;$=Kqd>}XL!Lb3g~r_c&HLzrGvGpN=+<))b{ z*f|x_Q+9gl@C!g9enWJee3&`v&AS~&M6y=FOftadIv!_1E7o&9@wuR;YlxjlU)ved z>{j>$Q^p((vXYlA1805D)~kA_@CBHGF-c$Pb*4;!f)DZ0w8L-nowVa4|E~szO!e*$ z=(Dy#(!2DY&;`;kcoZ37uD29-+R-Qa%{oDm5TLZ)guld(;B1PLVSNHn(djL=U44}-$*?fG*5 z4V_u4_SQZK;BK=Izer;~?u>f{8%eO}KhGeG&f89YC`Egbvps`?%RP_>CB#zEp@0}T z9T7pnLrgTf2}s{r=?}jz8Q_?PJ(6`Qf9@WR>#38?e5>#G=jTQQ zOy#Sp`&r+|cEocA%=K(luwhadRs5U>(qng!j^M|^(oEuPSxd)}oOwFn>Ol#>y-*fA zV~xPN6SuWHig=trP0sry+^?jST#W%)UxmjK9MXyLWp26!3J#U@?8Yn z>b{f0Ep>?#TmEAM{n3%?q8kD8{r?n;yb@;ZO5~a(oh_vjAW`$H;BQ0T0g;jf8dk_PrWF zm(p)yPNHdo)!6(w=jg&Lgz6H=gza7*`V7pJT{H3w*%~l&%J>R^p)lFXVa@xapPSv( zxX+Gl@qO`$gj6{z$2$MP*2qt1DDfK0tj6tJ$V%AKz8W`5%pSU>MNb?k%vfrVNz?I| zw%)Iz?ZyX8%4}RN!i{8|aotQ5Ga-8Pqp{D9H3r}0j~k1nXbbF4H*WjMgN1=FML&pQ z6)g`zk3FgD7~Chmn|^(*$U7GyX|yVj@rqk*N0!CFz5U};5qBqXEiX5a@s#}S zMu`m~TT=JE`g&tg(jeaQ22D+W|4p0+EH-)D5W~qOK1CRzyK)!S8R$X{a99yV!ZS9@ zJfrVU&iM8g6Di`BBGC3FDH0Bc16n6Wy2-YmDZK?< z7qj$GUE1L~j`@oNy$HE#K2W4p7lY-=vj6D~vx9xo@MugA7I{9iox8=d= z5o~l_=as5DZ*Al^hr=3lVBU7fcH{kw6N?t$*9xocMI86}xiOPlej1zKG2zU4R(y2L zv2a?QS(LambA9Xc$hGs9?H&i$bKSV&>(&eL0eXA=-11esn8N!lpR{dxhv=5PRvq(k z{Zwk^DZd*Z;H}{;S4uX{7(>C*KIbVmodZuS>vzJ(ynX(rR}ifO2=5L{0^5Uukl&Lc zS<&$H%pzEXDp*b{dCF84$WI6HkbOXaO!!H7!=!1P7XVNI39vC7CxTfe;XcSQEQ6I@ z+dnj9BN~gmjn4-i!H==*X$D#Q@Nw)sQ-a#p?&O=Cc4CH^2?_ zazf7r_W-cnG2p;p%FFzrk(qKg6L(P@Cg&p)voLrZU=i}RRT2Z&B0ChCGHB2*<5I?> zg5wEx1}9CEc%Uh_8T%O5^}j1=;$U545(wI$h}G(Jo$5b^#O+{p)`QOi65<26E~g{p zn?#r8?qU2p2nzX>aLh9-1Glcg=5N!k7AEAd)(1>xdY|k09TKG(T7j4$vo|B#XH8h? zsG3R6Xl21q`WeL^Qj7cMGjLya^_CwM9l14~l8dZhAc0mzq<~JpVKy>C$3jG}GQ4fU za1Z=!dlo6l%IYYy)O{p%r5A9c&V=UwRM3VTQx_!VYBDLPjk^Bf$e*t(75V zZH{$OaR5H2*eIEwD>mGX+4h<{g^B;8pvFXxD1~#kjNcmX43R`4$=$&0Iz{o}DY=jU zD(W_ik@r;}(!mOJX43g=H^~)DC}?HtAo@(6X|(tOJP?2KkffAP8=dJbEAoXXHc0l! zPZ5<#+p`je@9)BthC6h`wz*cy61Sbu$!7vP`a1R%^EXU z4q{tX%)5R*q5C3%0y^-Cjl3Ok(ULN8x}LAqGHt+E#AH%Ifn98b|1;UMPqE~WB;~{BextG1>6sClIhrXM7HrDH(@)<`pum6O3*~? zZA*oXs55Q%krb;rXuL@z%HN)O>bx-8hf%PW3^Ccp&cyg6(;4SC#=j;x`4r13F?lGm zcAZgkk8HAIA;{)=p6$wYn6ms#^BFdLu(emk8qe9^tnH@kTIjc$7Q(_ko{7ipIf0F~ zjQ2aY{J>sk&iAIJjVEkdDF-OHCb_FZdn8d(&B9Oiub1wEw@cO&2(z$-r195zmXLk5 zViAkjYA_f<_DYf?Elpkbd|-=6E&TqXYqoWlY(&Pokpl0P zjo67#O=u>qno}R>(;XKj9_**tK3cAa59*DLg%cp7<0Y%n&Q|ek%R1m`M7AH|vnR3Fs4R@`Ds zJB>O|>eWS_UnfM>l13YW;>sw^95ybx!Yh|ocUgF#17xjLw{7Fs=ZVNig zhK74`GP!`|oV$^G#xHoj;$P!}rW{vaKJnMrqd9BI#K0dn+roH5*hw-enhA@x0m0eO zqc{Zpr!TTy;=9b2xr5HVSxxUtNb5MD>BSt6m53uohdfADR){Q{5I-Zk%3}@K1T!1Pr%XoI>;uL^0c~wJoAhm+oTmtW3PXq? zAzRL?+~YWZlLYDfaiJjkSeJL<1&OArx!?iY2Qfwvz1dVlJ~+Oe=?=CEi+;+j`wHkF zuND0>7uo{-K953(`{=RSZqDVIGX#~*X`T&8vd<_IehmoG=MOyyAgyEsWE1Tm2Lpq? zZ95%u2j^{`H&xEIv&q5NoH)1#OmvI4K|f=_`mAo^*Nrhc!^ zAR66fDA-77kmo`$M#5%NQEGq@y_=nrJ;pfBm4NW`G3Vji^Isjz6)8Nv;MrNcF{@AQtT{t7*7g^-kE}o}T-&SsVj1MTpXPqt8 z=v4bTmRbLe1nJ>fcbWpQ<{U1ZCnMb?kQoVu12Qw)y{p8a8I2NlT3kEB3 z&g7QB#z@Rq|K}Dw)}LX=Je|n-ljEhS1I3v{rNbj&=eAQ&wp#%P#7#g(9`wI@o`P>B ztuuz$jR~3(Jd{ad(AWGLz_%Q9;4`54Q^2POjD6qKnaB#%?_f=hee-=AIk@Hq`qzi5 z@|kI|>3+jJxG|unN5p%+<_XDsLVMx&ah)s4iDTV&-OXCZTEfL?VoODyyplIW!ZD`E##xF2@l@wxahbWW9mP< z!0X3wOayiOTwANcwum8ddrMb6%+OUfK0X6oPzzk>T%F?g)HDxsY@I^elcZ{3*_3$( zigngUu#TR_;KM~8f1m04QT9=w00e+zaKOam!?qV$mfvKd-fWvlo&}=}JwS3ne&7_s z6zuP=`L!*V-Q_BTMt0h^$t7b%q6e}1)0~76ZI?GzSp3La_fK%eD43yv@9Z_3NplTww)Uht)4`2qBKS;knG= zxB=;}&6SGmDiB3R?MG$qPl94K5IxL6R4RU?P%1k9HKZ$JnkgS#2fZl#-_F{Oe6Sg!zAFJ{F3db8pCdJYy9&p9*W*?A2cO`C8MDr zgS^|`{iEb;eDS03?gzEavo{$rKVl*9&ayO;uM?Zpuf#MRqYwYAWNRL2`>1(n=$ngN1=UI%C?|a6#JZ#yFKEC5j6FS`k3YkT_KHrtNUsD?L5Dl66 z!@XikvINTN`p0|gxyR00ZYK@441J|dH5P>5?d$6dRLWB3klgq3(|k4T%E3gVt}qnR z?+svz)G5@Pwq-Vp(&x`Khn}M|h(>q2?A`2WAXu4&8NL`y1&#yG}&w1x}NkC!+hAhmtare?`NplQ3F~< zohO5kvnK$e&CA|XR|%?BovlZX&|>xSh+fzqm&#)TVI{(?l3zdW=pDd{AW}3eweSqv z@^HCaeYTdP>YqX?b*<0fN#&mup0RO);o&%!|47kve!*g@apd4t^P{K%137hOzIr?M z`_fl}{6UXfrFbQS+8FP{t&fqz{>bc>is8K{niiTcJ@NVhuIGF)ek@DbW01b2sI-#a zNJgC3x9mKH9YaqKOT@Q$*!P{(;!tsrJYvv^yhrgS`aU89uq{C*=Ib$XHN{N4DcIkW z<8_ank7P+FX-a>lA7DVV1EyhH#e?gQU6b6h2O!0yZ<6@;Gx2IDyZd#BJh~NA(2R|r zp58tLI(5^e9w#AM#+8Bi(dTgau=?EbzQJ!d5QsODCwA~V>0r_&bG^XN_%x70d=SS!x(Ksv z+e|hRLrq*4H#P%j7I3N{A-NAvt=E=?jrE`f!1=cF&Ie{?&AwjtOG$Sp#gQo@4v-Dd zxKiAoJWn&jPA1GoEsL*Lr$NuAa5Zk&fm~!$^5;WhC#79t3lB2RGw|86 z27%@e{kU~`*)EJ@^820uGy+rS?I`~5XGU&=RY0H9&{GXcdo|RSS=){Unc$kuwV^|N z-a=#HbNtferG^d~jKM71iDrPEFtn`T_7$yTVhacNuN&80J3RP|IAS%=J9gEtbaT>_ zjZByN(Fd%1hl+Gu&jyL-EiE52e(d}<2I`$EXs_s})JP%flyXc#AXq#rE)gRteqw=# zHg4ra^kjvVqU!K@xZn6cMsV;oO#r}E?e~eFv`Rd(KlMO%Pudk;PkIxxlEl4RENqYf;e9_gP2mjSW^>HW?9lPMSXc&Kgg!-_Hf#8SUK z=q0WrjII(320=aFMHbpajR3N3ycxnnmml~|7uyB>T98S5fZu_oXf|WV5s%UyJ@{D3 z?ZFybjK=S)kZ9cYQ0%b`MuaNIuf#i7hqQFy{2HsGNw|u4pu!$A$13HroVHMI(Vn(& zxW$a|>$7hs#>zAL9C_HV%g={4tASf`ZTzRtk`tKpn&ZdJ=jysK;{T(LEr2Y~# zCc3mYy%-jN(Skm@Rj1-Qa002V^{_rllrXu$G`NL4w!b>e=#WN|B49L}$K3j(bn#Dm z#1|+@0D)Mm0cadD7Or}F`q{k>AAqU>P9&VG>nc&?2k(*t2#D1P6wG?ry1OgkvygA5 z(U@IIEGBXsfM$589bm5}pzF1w^o7HQJmYrI{Udtcjd$NfGB;fmkS?`cN4JarkuAm*kg4(&M@1#lr5V8F-fJf%|a*0*eODZbVu1R?4N48i|Z^SPx=l{hHYy3 z7|90$C!F8nYkEDmlC$1s2_kzwM_15xG#+w!wiS#|Kww?F1#a`X{0a713P0Rzk&3E4HsJE!yzP0Bk(`Kx?pR)q`p(#<_fzK&3jd_IeWOq3X%b<&; z3nSe`PX#3T@0<-I9<$kjI_L3v-cRvS>j>mac5P!|5@qmd(YY{CXp}wKJ%hm>zV9b} zHtt~$sb&10AU<8LUiG}XpZuf;8%`b#tf=udJzJ;DhdwZ#t{f?QN(;A-j&8Uk(0=o9Yor~h6tk>wG(uzfrWisGRPM)QpWZGpY_b+&29;)Lgcn4ffD5iNPw6tA{@%|NLL(?+upwv&g=E})UbR) z-#eQ`AWzoAtZ2DC(`Sq04U4ws)v}8ov&9(K$fwy9ga*hG4|{v`i!_y`9l3|yFuiFO zJG!B0TgLtu_`tFZdLX~F;}ws!=b}ah#et#GK$%TjV074u!SfGvc;L+bPm=2$AE1$X z(vM@{_x4Wxb;}R)kS3z=LY={55hj)(!ts0h9cRmQVt>T~IRATLJ<3MnKIqUi2c^;O zTm)Zy-}QI4Pvv_y?X`_EkU}V>GfP{R>K1Idz0W#ZG(CR*DgvGQ31y^LJ~u9#2o>fd6nQ8PQEC(NkZ)+Y69%AQZG~v%a-Rl=sw^!k87v26QZARd-fS3|g>KIZop-0qex9rpgMoK_X76Hh| z80}Qy$Yf^>%$}Bv*6*WZ*mf@-CQft%*vV5nNr9x*nZ}>T04D}z1ts?`7#b|km_U2b z_rArUW%it35fG?x5D;P*7;9S*ZIR_6?Sk#zhAV^?234YM$3^r7G5NHM&BJ!$T;;-m z>b7tG61nNa&eFK)2M6ylyN}UakrVknO(LB+(6dJRjp?!$3#i#ABKv@oH zKR`=|OOPMk^s}7fq}S>Q4mgUfyb{*$J7I0vXR@8i>8aD@#w3%vZsVL8gb%(ks2@JJ z6Ho6|2>0-i1kw35GJ4gyLl+Q`IC$7BuLRUA2-Nkx8Z96tfYH~(Zp(&gMO){3Pq%&q z_1spg4AyFkZIxF-&lBpuYO92%KlpdfOk$@l{Tw>O;DLhWY=?)^cz))#lg~+b4I2&{ z7oS{m&#koBiC> z{6V(y-F?fpD#&+g_7vmz5EU2hY3JB8@uto}F{`u^Va=t_4J4O{$IqicBfBK5 z<0LsIUi0a50)T1HCA|%yd7~99=c+napy-PeF|id8oX)V*wBw0~mY3g!t!)P$5|~Fv zA%BMgT8Xs_>jUFW9cFxU!iBaqm0O| zXX@5Y#PYidrJf*Du$gsd?sg$uD?jM%%uuK<+XKdO8w&8L&dLesk$oCL;-?#zJg!l= zB~K-DvSc1_zeltHkHg<|ecy_^%P*Y2UBQQq9{zEsQFoU(6GP$G*@Er;NiLT!hF;{_ znV|Ym{xtuMkz04Y*T>^H?OJC1XX25zGd3JMwCNXtfJ4vT?PDcDHwGU%-~_Lk)pMIU zf~@{ZXS^?$?v0790)(H>>{v$*gWutoR|Jj~r*|3HMVW!~5$jIBP)r}#E)eJe@5k;9 ztY?{Eyfcl&jyq-^XU3=7&VGbl#@L{@v2#zd$0x3Q0Bq_EEM~#YbJ(kxH?{DbAXY_0 z{pszzXlx^|X&Bq52z$2c|z{DA7*?z3J}!aUYT0q0(Vs)NEO!FiyYui75gG4iq3}C zH~QUdRu#i{vG;fO6C1YeM(Ev?MNY`NI_Q+#U)jE<2^(QC&G_OSS>H7~82$jTn~8wc z1ioDjD#mjU{`-+&vk_5j6c!lR7^BSJL%VSP?mSE zC%m9-4t)lH#gTSgqDjdq=(CHL%fP#MDm$4kI+kWZZep`~f7xwapZVoDoVU-Pzcen^ z_9l13dV$&k!Fkd2bzGjwfRQLvKp_LB!j63%2bj$g>{;!mqt8znu@G=)q9y)E6hPR$ z%ER{qJl-b736V(HScUSYzP{z*O5k1bBL9 zOvq1AZ~*y{zkX zGfzLrPSfasKvNy6KA_hC)PvNU#(S%%w6aB>7kvsSF%~eo8Y0oG3eW?6hC}VAKN&;P z>7L*p*guEnng09mG=P$J0+y}=umHq|F5czU;I#i!t9PWguzjR^L}$w3*#7Y0bppVe z0rm<$dMx@yaR$8t$D$1h^j3%6i8WOerL4?=k6jeCtx>wSC0qgO6Iy)4%h!6&PC>kO z_pKFd;AU?f&@Z~n&UoXrQbKspk1z*OORkdeDJ(Tz+eB(_9=4)A;Ytu^mRxyBq~|72IgC;K;|!cszHq*J~3wK zc#Aa*17?ANU*6nWe=(b%W+L13g)N%4as{+1RPT3fleWGq8Kd`@e%U0w?Rg=a%0mA3 zeG5l#oVdm-mYq~%?-9RcW5%d=Y~pQ~0*WjpiG7GaQ!Km7Ao-MHi>|-h`&@CCMG?^_JC1cHw6(d@*pl~19QgsC5POOzL{ z%P(uk5#O|%OT1giG<1|bCl1>#7awL}L%O8guLk3u@50;g6V90l!or{GbRcz7W?0 z8v{4cS9=Rf5pzh~e20gLhVNDUuFoqkSK`7QZ^#QKSf^dv@1LXEWBlmsl)Ihs9lPN1 z;H`~=giZZ7-=A2*cvs(QML0e*TL-3kib?kh5Mn`Kg%MBbi>H-4uuYPOn?Y7{%5R6I zplkTE#uECMO(~^FZkf-Ny3tP|-arCt``K+i;7QNly~zw#tw_&wR$&*<2G@as*TexI zQaw1UDa5?x{dsor0=$PYi66-sL{-<}8L>pbgr&DZ!opyFDd~mg-OysBJ~_`;Bc_=#2bZ z-unox|a4zY_?ubKHHPsQI!zAau)>@cPlxPwyI{ zx!UTa1Bie!yitO+wiVFXPs4fd%Q*lQ-Oy#0YvmB6^x{n))C}XFYwMYp!MgrudDl2; zSLDZu92+UbCK>vU;z(zkea%_F@ z02q`s#IVg1AG!eF|MLP5d#sG1z0R=nM-SxeVq#VRqd*|QNb(=i5fi54-vQ_Dloy-1HWEQP;fQojc6TyQ#f|P1 z5{R~q29*`eNG%0&5x#4jg`X}ONmafU-ijH0DX- zt>j3`bjO_JPFruLxG{C&j7?`s0PzkN*Yh9|> zNq^!PvL%q@UeEM?iJ=(^x`p3DR(nOA$+`X7@afx^1=k6!rD*^(=#@j}k^L@o1~_`l zyM3JHCqc;xP*n&e?v(!Yy*BHZn+jkqKp*<|DkbZS{N_Etl=fUUJp>i%YsI@XU0rP=pckWYJB0#$aIFxL@TjF+XgjF%1?+_!V2OuX=J+$-z~d& zY$0}%Xj|lXm^!=8`3>umFeFw>F`;dE8)a&cV_wr6dOv&$d!3(ZOFDnO@+Km}>(SJ`|tbjhN7 z-YO=9zUDi1Pr7XS#@{N365U8lHE~!=;YmJXML;XT$PwAUm5$H2spuka(H!bAs<>4& zuB0CI9asQxM?S@}He@#W7twVawKC}{4oUnEKSb4=9K9uX>iG~2iW}Jy zSzE3q2h)Wi=Ty*2g&4y-5dke+bUeqV$i@$Oh|@g0gdodChz8pyGK7=u7Vr7<_T|er z3(9f(6);(-ht<*`N?=@_BN8Q*a?J$6t~Rs7adjBbmi7Jfd8;FpK5Acf4csJYL=IIef9!dU6$!@=ptY_wx^ zH9l?4msNrMeFcp=^GG8-Uudsl1ktahcla64JETp(HoBp_dPfHTa@PI6wW@)<^R`sW zpc`A+L0{kNES*QSh)l!oO&+ngv;Vuc*yP+Gq)sHrKUMc3oYbO~!PWru88qH@1CuEZ zqYwAy$YLLz3`8jH!zMqi3Tb~f}Uqg`8+Z%IARs?~;Z@I%0sKKNtVk@4KvXLje<51G8^szZWc z_^D9Ryg2IDO5a*?3u)=0<5he*+n1gd1 zMP|wrio_Pz2VGCVs;vQrBWl}=0Cb$`C-6=i6&+J2ob;j&dZHt)R(Xy$2Qr?w;)wwgfMyH+mHxbnmh?U<$`(ypJ=;( z!`=5NVh|6!ANTv8;Jr9bTC64={Egx9AXSC|HIv*Q*k#Y z1U7G*|A3r<(S&jRx3Kh@i~U-UuM!dAKkcvS1oJ8a`0LlJy-TNpm3J;ZS zR)m=zFbY|JpN$K!g<8$GK;*uEB zTgA2v3wumIw`3eLa(z?hQDTL;-UpddaZ9Vn%C`$A!M2iST%EmEH}Jed7u&BhV~D-N z0Sl5lreS{``r!QyF{ydoj3aeSpS2b7pcj462H`|9qGh+k5$$-l%od+c+&XAx%Vxve^0%LKe_ zI#&FS=xpI+(wV+{(ylGqiuXRs%aIQ9Wz4y_I3#mGsL3s-`bkn@Hz2mXjjwFIA9PAn zrkd@iEC`Ft&w}xvJlisL&_Fi8_(I!ZWT52=h)FT99j9+QOv=o3@tv272WY30cjU-3 z&tT?W1klZ3GglmBR$ESYTK_M1&fWQH=1UdpSj8J$c5kiD|vC=-&iPO^|1}& zcJ`JG;NtDaC+}+aF3tozMoUZhc7CA)v+N=ncPY5eEc z0J8gDi?ATWS*wD4?L}H$(lh`;H}YUDbE=x|{XX3d93Itk+KTr*rqlWn$PAPrFW>3nrISwgih@E9{*MFhk1`5%q>vIAM7n__!>bJZnaHcJ~4yqfg1P_(CLUPW- z^nw%N*-9`trwifhPO_7q(tQRq4N$b|u%!voHkXH=>tSAKpQr7w6>U08<8&YdS4L)} zp8&R!In8fqfLLLN)9yohIJUK#Vw6=DbIxFfWx=|Q?!o~CJgy0@iazysE#JPcNEtpw zMNlrm7SMt%j<0Ds?JopmLY{!T^Zm8D6Wb~{`2qNwWO$zM7b{6=eyTfHk7^xa2gtc? zl(%B5`W`jFn2+v0Q&6QMh(Jqs*xiDxP$XS0t7Bh^IJSPlN)`R?KnTFjV@0tt!$Q0PHv8NG=={-*w;Z0y#I6_Ts;9J`W?Gl1iY44$xv_#XQbbx|Mr~} zDM*Xl4Gk%qyE zz6ygH$AAuBKT2LVSGCHJyy^E08S`qk6meNZ%k%pR79tPs(%`S_tBiwDpkYO%3eI87 zcYRWR0y<;t)$x~Csqjph#E8N3!D~ftu4SO zeWN3gtc?OCFo5wFa2J}eM5_@m8{=ksOOM@<0SOU3mo@>#X6vVl?sZ^Hlf@Ty(`J8|LmFOK1B$z#h{-_O;D7?YEuxW+uNXtfXT6=y>JNn%f1CXqCp)dd5l zV%0($Wyj~halYlm1+epRXhSzO=*Re*SjYrxnO`-W#7Yugoh5+eJ^cpswDb+D9VP3o zdS!K763tA+=vv0xEVWY$sO2`&|C;siJ$)Lwcqv>c8O*%Fj3tE{q*J|cgysWYI zW}Iqh7jE~;Nc!&-ENp``xAzOXg^t&jvq|u8{1;qpwX{vaRm(XUgAw;ZW`@u@-$a_u zTtbPiFka;0Ha_gcarZ_ywk2+udG^F2w(n&tYKXz2F*9>_1iD7vvBPNUR>Y0EMTo zYC9(WITpqf*qAd*$el4ZmLpznpN8GG#DbYu#P7qVaW#wb8t=;wc^GkNBbP8`V1ii5 zKd_3&Rx?zO%(c9zwyc}FAcYW4yH@2Si0Nl*<)!qp4XpK9HuYLf)x0pKZU36xi>B|6 zKI@%{(?lonzvwXYr{(}``TqH8yMva1Wn<(gr1YihB^$72@I@&Y>&<2Vlq=3V>h#lz zNi>fwOKM`4?GSE4)^T8&=}`G~^z(}h7Zv07VgRoY4j>vYP*TT<3_E6Y@l6|0WIHER zHu&Mt^&S{Fzxb;9x+}p?iXf5m=w{^dH$NPb?+U!4^X0I-eT#}bNJQ&Jq2EfFu>q0b zMMWPP@C|7DdM4*WWLw4R8gq~$9H)DiD2T4Z84%PcDY-hX)?6yUn9C9+G%~)aw(}Zv zP^cRURbK*&1U}gpl5#icgMtr17lasf*6CP~u%II|Xka3WV?c+DLFGt@C4n~$d8EEN zu8drKpY@5=cj_Ixa}-4Q6#@|gBr&i`={XtIwm>rI?T2stb(} z`XV31qPlZit5|{ebos0FL@s2ANZmLw8$(Mfur z<^Bj3p?`M8@@?nO910)%Obc4$t$q6&So&ae4DgnajDK_j5m}RoLCAOL5{597MbzE< zxl#i#u7aCEj8`qrK&WVxLKo%4wn^MGo=DOrc@+4TDWncc#pkk1(kFCQIUxs8<5+F; zX=w3I8Z!JHAE(1z9})=tE+&+z=R08~F^oz?IudLnNotG}J3%s`T;n;PJ;03#!ECP{ z>j0nIezEhGpj=6KZ!r~&Gm3poW@GS7l2ozD#P>=}pE|by(`}^%LDi>EIq<%DS7I>> zaq^jw-S|Nz_Ov>5xL&`Dc6@es2CKmX*lfXpOP*910+f@F&8PSctIJMTqvJ72l5L!FEL zA85qtAnX*6G$kpr<6@}f3gA;X*lO4Vg6o9Mx<1cVFvip78{$B@SPu#vrPHkOC6L|z zSQw;l1_Fd_gA9s0Zr&@vk5&QLRocrGmR#HcK7HePm65iL+t4h2h5PI0ox($t7H;{y_R>yTDrszAY}~FF&3u7Zq31Qx88-fihqUoS zd11$guZhlt>}Up}Pt+M1-NE@u%$rRxSISC`|}D#}(ph9BK4Q(o(j^1EJ|g`J$eq;>U~wYuqWU4O=*@axlP* z?MNol_g+w|d{1&56f(bKG`ik%I8!#Dw@Uht#`7e3jrV)fjJ<44pjXtp;p0IwA9I0~ zDC1pfM$$rn)^q27)_f+u0xE&+p)VEz3UAPFf!8j`HBpYfNdkt!XgQdCae6Yu9y!st ziuQvEcEX=wny$aDbE&Ro$Lr6EZ>y0#yG13JLTjo=OpF~2IZYrL5=evHl@Rlic6ANy z1;!hhh@P&@R`CW!ui<2kP)-|o zDUykhT<@N%X3zg$Tgr7zSOwSC-%6CrwHgmS(d7-yzMc7$!6F|7i~{{7FD&UY!frGR z<{AxP=1s3i_IRc|=1cubhbsR%^~CliiLWEOC*nN*Y#8qPEtN_bd3LkNk@-clxI++B zgM#ZD#x)iDIN4V0$l0vyZ-FEOU|4+sy@;d4SPPZUsc0~g*`;f(geipAxeJ*S?NJa-Bk%7GB+5IrzW4S@{2=e3PpgMAt1i+Hr zSjLs8Y5j_R#@QuZbUm?GeW^pC`QSbb*nK(%$!Ch8nrFbp=~z&2pusPmVQ_~|X6TlL zv!2JIOB_xTI?32Pz`{tSw{y|^CCjnq!Pha|-u7s333tB3Dl1XXe9$#C; zEt3XCu?^~a_f!^lc{CMebO6IHoFz$!WCP^(`WZP{H%(+^Tl`k$%Ve_#ZkY$Z2x$X0 z2Z$Fa(8CP=C3~}EUdb?>TaZ;X%E;(Bw&#u3a@eKxEVkr)btR|W6$o7g*pb{=mSwX< zpT1}KU;{I~8!K>T=ChyGepIv)_?GUlK$_ozP0=3(c3OR(NdD)o?!2_)xwc3u@|M!VN@a1I>4P=$`n zI`g5=C(EFjEx#;uSMyW{ww zqQvew>t}ddi|DJUB{7Oo1MspLOk&`?)cwrPW%w2nPt_PCUK@_Wws zIFHox>&!4eORG0}z{aFQx5dZC&$4gw8)u9?7sV-tW_q3oBB2C^Meu(bK*UGM##xry zc2RKzgGAs)(^R_N@)!I;Oa_~Ph7~9HMgncBiiCnR*yAH_ z*oQGqvTPYIRyGlzTTiZAt~m{?35<+)&XquZLhA#%&b<=8ciw<+8DX`tEa;6D?rQi+ z(u?yI6oLH6FE=rLT~KM_EuZzk5Mple;#i1&bX?!^*F2jUua5m%*UrkcWk-(IY1aY8 zLAoDtKmD0M)B90SBepe2v&q9*Mvf_4XNF5=;YgU*6CQrdv7T0qY6isLi1!?i+P{(h z;&qQ!nKkf0SW5Dh+RIhSRM8;sm7ZFs96y9d#q;1djfe5P?esZkDS9itMl=h(i>eVP zaO?EgKE$cb->6sjdMi(5U)b3W;ZR^Hy>r<3aBt!!%8W2%lw^QBVbOUH@YTSn()Z|{ z^D;f*;9=lLk2N+hF%61+)@#PQNowbPk}>ioE1>J|*i=4h+l>;NS-`TLaqeO!>7@^` zE3*)g{DyL3j4N}No#b@jUCV6b(=mvyq3;*PhEF59RnAViKpA4?UsCM$0|yTQ{d(0^ zes4XnE>ufiO|9r5vc~?1k-$JC9rKP}$%whij)L#vZOsoc4u9BW0$*F73!lUuFOS;% zV8c0#5^%fis`2*3THfBwzD&4*IpOJ_Y1-D~7e=0q@X5(VPUYuSFpIsG-;l>xF}=7` z-Ptof5g9CRc5<<~vSXkrk`%r*}n`h#^=Qsa6}~sHnaZR zHwZs-fdu?0=eXyfT`~5%Q%B$`W0}#n*B68MphhIYwd^UDDgd_)fOJyxIe#$OjbMnX z-h#p(8I4(;M{=+eegyAQd;zpzcobV~knlcr$DIA9Q2}qm#-!5#g$7xBwaj)5wSCNa z&6N;S_aVn?aN2>90)XDf_Cdx*S7<;;Go1TZqTnSS_<072JwMi7dhP~izP|bGV#5Tf z0o=1wDIE>{H@%$x@iriH`R{fM9-Gb$0WE6P0LK&1LIY>HLdTBnlT-oSZB8)a9^^kE zD(WmYlSiIzP6U#re;!f6+`6wGo$ls3KWBrHy?il`m1t*jNdi7q#RKBe6={c*WSA4U z=+tuJW(v?9khF$Z(N&Ho29SEJXSvgW-Q{A&`f+g3e=u->0g1j}i8By2&W&C8ktaPS zXE+f&!ZrfvDG_A(aRdnfwi8c=1)?Lil!BB^eU@`*9t>Kcvq_y8R3R?I_j^Jzj|lOO z=ZP-f;W+)7Y)N#qOmhm8(Nltd1hWlB^sW@Qdy z{&58<#uV6=i+2(o!^r(30P^JlsWE=_mA4^Y-784c)^INWv$j+4<;Urz7}HFn-Htq- z67QG~18>PdHGTI=5m3x_gMb+ct(|ZiM8xOUua%@o@LRh531^oixh`5s=c;2h^Do|T+bsCtC2KQVF~k1K`DhGEnCrWy zc~AD7ixU+?VK%G9=zCg3!Y&l36QsE+IRZ+qh#Br@ym#pWZMw`?I5zd{7~mRntz_;o zNmruiNrK_?>)my3R#xEJueEP>g7N&D6(~cmwC#_K@Oed@LE$Z&xY7tRZVWV3B%cks z({D);KvRziEU90+NH`$CLm}zXWEPT5GbUdU)T6;O$y>=Rn{lK}RWx!DN_%aOxd9(z zj!Yin$<~cZ2)~cj(3Z8v4f2~VCg^tiDl{G}Ea~7ljtM)8HC+fV(3>m|&88QB$Hoz^ zjOf3+4r6=@(HTY4o$N0+fGyfSed^U43D#>1lZ`bT`X8Hd-VeDOD_^B=gEoMBNLp&( zvYR!BBx7|yM-vQMx>q#O%N5_PL=hWe=zML*gnjGmqe0iuz#uJ~IOWmw8{;fxgKk3pNOLqHq@yo2 zNCM9cyT|8L$N9BIzVjd6W@|U~3BB|y+zgW#HRA^klP$-0k)0F?GE89Y4Q0tK~_$|-Y zQs>VR=;09BXN97OY`ZiyM&{z!5%-_!2u@NoL#} zhT{W3*Yd#}G@Pr8pKZVG`(>AnqK2$k*f_Q>@X7wkR&MN6{|H-Owz*>c$OZT}L)g_3zD~DL)g(87CrWDcOyGV~TX=2wi0K%9z572_LzT zh4;sZI<=`uea+Xz0Qq|7$|EDrRRWWZ`h#MluUjXh4>evD>wsUCGo-QbsSV)g|Jclv4fkuusu*Rq6PAW&5&gi#3Y*E|rh0aoQZ5K&<9}F*H0Cpx1B)Yt#!99 z5f6hdW+5n_r(u9yU3xUP6GIY#_9%{YB>8udPb*{Uo^paWpeRr(ziOJtE{|lei&^mn zTHWR`&l2I%|JE{eWoq6|=GaC7^qw(x!ojv@>1YS{qo5C8FCDe2O8lFi@kLjI$4an` zt+CRLCNS+Y6$nEv>Xj1(C;L0ftegU;+@xjdf$KfSSK^>^AR9uOpp}@81Y+> zPur(7M-)#OsAF~eDNM>>5&LMw5DErgZgBcK1D&-Rjh=t@rxH-f7Awh-d;AQMUH*W{ z4|SL;@oAd%7)`VIeU5N8hy+7OCJSSx<2Bi+#x`a-R$Txa#+;{!*J_v~+%C+H)iAkS+aex!i~S2X6sLbiG$Hsd^vhDfH}1yJi$Cl-m&Fk%T8R?$}WxON-jn~9W#!` zxZtCamRX5q7SR$rLiSadh!{sGWLK!8qBfGdj*%>rDNarqz%#~p&6UhoDHpt&KC&PI zY&}*^GoGc_XHJ6P$XHLf3YgR~(mGbZ6B9uUJ(u|6@DF)_ez-9UinV$!GEBZl_MT^- zN1*DN8Czsm&$EqT3~QUdd;o3NxKupn2*uyzBgU#4Fv51sdQbXA^cWlEE$!?3BWo86 z1jIrp;<50@s)$3vvrrdC96}ujzM!Afz083WZDJ#&xj}jq=BU=61&tL-_;&ZM7BmOoH>@moWY+4lGzlJ7WaeI9;k1uhqqy6}d zc|;aQ-?~|LG1$$xWLzuUjNBcu~74Z7w(7gAg zN21Onl458NYyl=!x_k5n5t26;G{-1GGCeH`wkL|OgM6IKYLqer+2ftdrOkhjneko} zP9RZqc3?78kIo4q(SOD8_Hsks$^4!x zcS!MDU|52C0qSBQD~Z?%FN;sS*6fPFsv9S`d%293x(`4Nxv(o>vK7e;M^*2$10!q= zuoRt&?@8@Qua)E)N%P7bA{i1n)BoPFJ;ji}4p4{lg}6snkYH~82_Oqk6C?`PEU=BO z0t88mSJng;hj7xL`7NZh)Otw*wE9x-|X60|<%yDUK1-EgMEDJ0cFd#^p zf;#G^|umhEmQJ=zSrI0v#|rl&;HiI8v()ERzx>DDSr5Q zJ^Q^2QOlMam+1_V6glg=qIvOG`ia81tjAgLbUqOGo>i;#vGpVg_#Oo5U27t?nuo zZWK+inPUUEnfy*dTk<2hj{nHqy)~!w#s2h@4{lI1mGyDSqIe-cop{{R7x{l!)gxPD zU39J}PnpJ^h!NO+6*%Nq$|fOh(DUWPovRWPGnT}*v15VZvw1PX0`^P3%-`nS%5|LQ zT(0_BS%l&cpE0pXbcuMxcI0d;tfS7wDkO6?E)vW_%*)^xTRxnm@9Rr%uu2R`_-Rv> z+}2a|tip!gLeDbUxjQ<^rIWMo0IRP;U0_l~qDgWY(`dD9@LZ1t#?-jbw*MXrla$7d z(k1A5k*T&jaIWz@=hN%cwK~=Emz8CltNip1)zXw9k|QrVa0Le{zuVr?_lowx2B0kR zrgGRT3kGcUcH6r>kED9)har7(ar<5vIV&;qtSG`T|LT>Dcz!R%l8xpo!n^o3+mH48 zn3yL(s$j>OOpq?a({V0Uc1J5j#Z&tT8$3D8#2By(l9w9qDrmxv);J!py`hMn9ou5{ zZevFnTbGQ$Hm_}8tKE1K2C(>f=?R0PjJfjR`n++QSD?ZsKAAw!{QC038Si)QWqU}w za^>Dv41E25oqg1Dr#z%y9(m*Q=XSy3nPT`EwoU>HgOo{&h_(2 z2_73(?YnPh4Z^YG7{XyA1m%#@sUr#fwe1k5049#eez2O7%sLIeZu!JQ3koX3cUjqY zMOs}ZN~$YblxD)o8wh6pLldl|?KB!pIYAY>Y4%s~tl(-HZ*(81d(c&W0T@)%;q?O( zn0N@IGjEMY(w6xWYzPZlU{~V77|8)xXvG4LWWkQuTicY98(47}{#d3jR~{Z(gD^!U zs}Rv6=tCzO#y_4f$FL1aedL&}>e5}mt(PSmp zqPgZH;4thBoT=&kzU|j6N(dNgUZazUvm~fG*E3U753*y}U>aQ}+|xV(NPZFsCwh>2 zDVcE`)Zk_8hYNmVT_d-)nJhc6ILRrT&w_w1t21ipbLf+$>y?N=mx}FWI%w_tjkq$x z9mr_BQYfE)Bl=(CR8gj05PG&u9sTtR${sWJJR*(bu;rP0?(p7&Q}At7L`cEd!AA!H zNyv+4Z|D31MHBH2>1gprOE%hhHa~PZ1Py;dY*^L7q!v4wC4go%MO%S z)}3b?Gaysj8h0IL>lNGlLlUi&8f=FCTFquqtbnKkP?ub(`v}yFUfgDgpgy>avM^R{ zbH$o%0#-6(eDu2pt(MiT;lZah#Ce6*E3}$q?1^q?q-V1t9EJG;e{r>*vD-*GXoxdA z5IchZJ@^U+ua}*Q45U#)`jgv(qbUoX6C1H40}ci!hSU3nf%B5CaIBB*UoFN+)j0Z>eau@tt9!L+%EA&h6k?*r>aU;OQeNF&K@lq!p zNj4^E@|R)*%?5IBd1~1jB9uf%R;!_DtAPPr#IV)%QTWJYODNo1M;xC6+QSZeen18O zKl%Bk)8$h{D-?(19&Uw8jJLtYPR6+Tp#6gF+rUd`7IAFD?V4i$gMpEtgiH-wXnDIA zBxCQfa>FSJ;D#oC;x*vUL&w^BQZ|b?jY)oEm#Y|fZC9>qfHmvy_!NLk)3-X#Q%JDH zh5*A>Wu>}&ZFJhw;ew>_S0^Q9Fflh3GXh1in*?YtS&2^e3Q^0DJH?778V!qF20D`O zx3xd;ww?98eTaQH{IoF!<*CVI#V0*xtW)DJIpx`VT4@#V7(F!ap^_yVniu^L=0hXV z57X+e#5hoM*d#v4=MgpIgxO`IZKwRq*bUo3VpI7x%u(1dqZRH+!xO%YtvUQeaduz} zcuL42JVcrtT9>ur(}%y)KCnR0?`NZ48iT?NpJmB5F)QaC4|w)STzq}%!cuK9d}AF516NNvv3-cpk}snBi_c@k|!fRWS_h40GsPp z;U3^eYoc^)%;oyLcM1SS?(|DznF`k_O6my_tIW1^ zs+wr5ML&|ANc(#U-W0Js) z&za}VH^MfQF3RqMaU zK3NWoiF=KIS-wO5OrvYM)s8DDw=REmeokY8BS48WP(AHWMlHow_!F_ps_-uH!8eR%GfCjh@Ov$ z@+pNLP*OlC_F_5+U(GDt)(77vz_z{vGA6DSXBfCTkqOY0g92k%MS}z;OumP&(=k=0 zxq!ueZ^7;Us8uK&+yYfCc z#R4gSUa#tjJfP62L^8pZA3rnfNhG$u3BZ(PJl`GqufmrN_!#?428?8C1H5zg7cwg6 zb9a&J8O?hpO|do1k%@B-0st!$6eB6qb3I!_rTZ^MRnY>rNn2jPZXZy1u2+Zu>aO-@ z>P%1Zi26CSQL98ck#Rn~2(3N$ulv}^sm?$+bNwEx+00!cw8?QkbZ2M^Y8F2um;``< z!W90{Fx{v5YPr0~@kw%Gh~jg3j?ipR1M=yy!sk3Ye;QiYBGGi%$=Oj~&qhaF5J>}E zB}~#}AUhx(a3arg+P^t~B%Atgtz7apNU8mMikxaiF4%r&CQXmsFaXDX>;1fdCnbzy z6A4K@4#~?E=;-sCLgYu=UCHMeX!<>B{%u|KHHkb_}W1}PiyTw3I&2-s^`*njgVT{Y%5g|4NDfTwT!#XJbhFNT!J!Zn8>jm9B>O#o%EUQmqo#O4PN{Yk4%lgg%zUFR`2WB059HVfC z1s^RPzZ$&!S|oGjBZrS0!}Jp18n0L7)V1TUQHW}uhn;<$wmQ^gsd#7tq+T*+uxZtQ zccPf7+4{TK)z^2U;n)qt1>6gVDnZ0^&Q?5vBCz!s^Q7)Fc8!~sA4q{Lb0Sft=W$|3 z?x~pLXK>Ckrx0Sqp%`ENOV6NtcG^(h5qG){o5nFGj=g%hWwiCoc@&Yq|1%@^QcT(Z zvRyMC^3D_2XI|X^+F@lL8^u*z9<~U!uw;%n>iSS3_lV$$Dn99Yd*{ zjO?7wVAb}ymIv-eVRer_a8-%yhLeG3fYuh>|h1)o)eU2LDWtjmzZ??(27X)3Uf7#%#27}%~Ut|BJA zR{UV~{eTbs)*k1056EBB2dyIOWWVGhlnJqCO{xin0-EDN-;kU_!WK0pn)y@s95=-pvv?{kOgx8Gwc_!o zZ2OhhwzHHirR<8vHuU^HInI%f#B?NEiIv(GTZfA#TC;*`$ZFh5(Q}Jg=91N*WxvE9 zjM+A2`UT6LRu7U!EZm+)YRm1+;r#Tf#N>N5=kT~>Y5KG@?`ZsK3NWTSbiP(9B0hBN z)VezwHAAeP`qY&;B z&f(dxYuVEssi>Aj8O1s;s-7n&Mpy7usg)y1oIbbXkYhQYUCHoXITGW|O6puK79K`; zhuoabkBoQ}3h3u;WTOnC%?OgNVD(xah!Ny|poUfmf=$aF3w+I*bnQt@^(<~5grSdw zW9SgN5{ebi-&gXI0a<}OCVXI&=pa??20!cF3JiKa+FoUD_AwG<8>DJ1^zm|hCz;WP zjUXr@ia9ega+2UnF8f{Xrkm}<#U;s+<{WJg0obE)Zju|c4w zReF(W7riIomh)w&uBk((yMk^`K!-k?MG;I4I*B0Drza)5%9~jqO*_u2IPBrmH3$m>eFP91pfJ zT+b?!&x`gduvF3 zNwyVNz|;CkpEeTJTkkA(v!I+#3@L;;Tcx=$;I5i3YmCbrZh`kBa^NcLRlfhimB^fG1YO=u-7BY%_U;yv^ux`(?Y zh|m5^Hm>4Fclj9`z(y7rsO?4^EDqoUU51=!z~?#LLu#&N{1}VQFdn@_vYj@Io$ON-JfEVJAk<*o&E5DQT>}DCp@8BvPx+yeG zF+ncONNkjGMZu2WS?HwPi-FhTsko+V;K-K#OoYInp8%3 zJe^+8LrFBJ16v#^@6oLbrzF`NzEC}f8wS1WS0*{(@DSDx{jsrayPqH#*K4(6&1&qd zVg0cMjz2d(<~t$dO3oe}Tg}UuNMAnI4%*K!w$?a_v7BCYz9znhh4TDU?I^NJlv zA-bMmdgxIuZYMXS6*Y-L^}eI1W96D`_t&Qt0hCSn5#}~d()r-#LB7Nr4(Dn`igF(E zw}H=Xi<}oqQBe5VM3X#dyfmWDnFu?k0ml6D9#+A-V)Vpd779zhnjY`~C?2SI0lUy+?nS+ZA?AmI(DRw6oEZ)<1}S)K;FpBr{SxBryx`|ljfU8hj&0e zjQwO+`*dgjC&G8|^xhaPe3_VdWf3KkreX5!(~s5=-(Fu5 zNVXvogRy!3C1cG+iidXf4`i zEILaK1_A|c;0f7@!4%!mAjSuWU0UHdi(j<@+3}NNljtKw zQKy=o;l$1|i1p5NaS{w%dH?Z4zpUSB3|OR;TKc*&nuubO)bGDVG9M&QP=T@59}3Px ze+2+c>%(GmhE2yqBIcnmeQ9%(C zgre94sszS;JCy;HFuvi63G{lbO1{u6NoUiMqWe=M8rD(H30?iVx5O2ROzMQ}s^dm= zJ??&wo{8U6pPa3Y1m?JwuX54t$5sHZH{ZIs>TI2K2%>{#$XI?SXh}eFA19MT2O#Wi z-1K`Fy4-=T5jI$LgRyY+jvr9i97~Xg&DD~hYp(B+8F#zy0#x1^ewn%+4k3W)0ey{Z zIQ(()Fm|T-C`8{h_PnqPidez^&IQH+DVtW|m01GXE9qrj8#uBPhX5A?bpzEuM19pnI_Sl%H|IAwpP@za5UW)6D&!}KndjIz~dy068)GQ{mXfhMJ+|5dY6if z;$r-Oni)iI7TGL^NWu#}jLL z<#ZB97WFb=0PaU0Tbb=l>TvdHE3y@AkMI18l}_i;qHlMw!gtg+jS+OeG*#DdtgEOv zjUH&Httf4TyHIO-upo|@MbBwH_KK^pJmd2pc~4#5bXVf%ytI-!PRdBzPvKq9MY2({ zVYw48PF9GM9W-Lxdj7#`SW7Gtp~M6?*#)nLNJBoH(1ov>%VE1YVrdOyQmvNK`-iPiMvu=Ghe;>f*?3~o#38Bd;J{2wIVP4UNWkrYg(ump zfOpKyR=wjYe01Se*HqIfnk100HcLcxs~lJCV?~j$co#WNaT6JW>Z-nqo|FV(xs^nW zKnq$}7SqMOWhneF`AC6lI8FH?^1kVD?2GOhz7xe`KWfVxY^|{llT;}_oJgn7eXWN~ z8b{9Jw?@Ma5_Ch>1iX(`Z6t}s3 z8it1QKDU7e+JJ_1`q?AGsZ_Bnoo+m4#)18`PWQ#stKsWmd4oS>ulL zWjF8cGjxx9D2Hsh*5|Yvi8l)4OW)eYw=F!dN_N=l(X$78PqW8Bk<347d{{Bof7fq~ z!9{qr2B|Q@`Qd?Y$~APH5nGSdx>&#v`STMpPRlf!9l(dunW-1{1JaFCLzr=T;qZxX zD#tz~mdWdxv+5Pna%o1HM8ARx%a?o5A=KsHs!09FY9*~)Ad`25T{ ztfIjM8Wx!3d>mX2*_w$b+f0BmB_F&}hR#|*UUt)5f|K;KA{*z{<_TqlS|2vc&}8r7 zI@I@TL*VL2(&qzUjDRi%`?y=jHZek`hh>sZhymB!Pt(PYPoG}z_8Rkf)~CxvIq-oZ zkf;7Ai6$cy8gd7ZDt0{ojKt)*w1DdX&?8WQY^nS9;pqgI23Tht1p=I$!8q!gBC9`mfmK*(eV16lR^nuZ4bNSfu}8q>RE z7NGscawp-DL^JLWWMRFe*GUh^>b_ z5hnBnN^yo$6C-Ft=zOnN)kGG;w_MBJK-d00I<8GvmQUkM_o;z z1v|EMFU=+o1+D9{ZX&w=F6@|953%L=U2^&)^UIFXA3I4V1A!oP1~T9;l04`85uoZb z=}kRTTjvbxvauL=cwhf584izct_|-9-IJD&oS^_Wl8jS`9pLqRaxgG#u5r}eK4&cN zgXg8AQ0k!%DaISqb+KDtyJLOLV8>@4cy>QYBm=5l5G>2gxM~3`9U=}os!8IBqBo@~8t|^eVAjJN( zELDL**Tsq!zu%OrLY&&=Q6*F?gG`3T7JYpOk9D6r+LM>iS-`cGa_dFYy0ClfrR5to zm$?FCf=;E;R+Ong$29l`whah3%qQ(m|2-0pdN*XhC2C-P7A0ZPg1@EY*FOisDUmM@ zr8ryL8S7mv=1;pmbY&b0)n|rkMP(=EWX~wW!j0Pc`@H5MMl*KVTk=5OgC%-S@TW|q zO;E78`GPwJkZGzQ2BsK#8Sqn%91M)&Y*k?4YXqI z(r|83vxc+BYRnP9m`%IQjlw1rY)Ng`0;x zMNh+-591!qrx}yx?S2kpThK~&MEM%WOa@Vl{XLLdUeGvKpR+k+*->p3zw&q)?nGn8 zY!VS~I~RXpGT`o9({g$>m9}FLPea!&(`gBTbCkfCaDLYv&FY)~=?ycx`3pSa5Ht69_G$;zR%4D_Awg@0BiDTXef!_ znxXVqUM+0Y_VO$oIKRUG-b~EdVlKjB6F(GWDnl`ui8?NSV;Oh~#tg(7(04UkjE_@h z0<8g?oK%Ci3Z4OI+5nxR3$2@}rSYr|1$Jc(@QjWQRYgZv@B}CYQ2VLN2uw%Z1_TNd z$F+)2t-K~h;;=G2r|b&h3W_#;YLD1-zvi$!8Jixzjdf(3-Hf9u53r>9mR=^Qkm8V@ zLtfQ?*dEV3KSh(Z`M<1rVA`k%S7V`Jvd-!9v*(DgSbM=9z-f$Wt71 z3~l7&PPZg?qr9&CBiXgPS~3Pd(23E2Q_0KfzQywdnggyI0P1`eCo1IZv~6N{Ls>}m zbm*wY$Kr^e$Bu8Wx`qV`V6Wx!aw7L_6=Gz24Dt3*eMB(O%1W z4+AIj!a7-y_1u3RUy)5@HQNcP`zkVPjU6^sQte~{umNT>JCKosFF)|m;mmCfK_hh# zdXDHqvJJ;;4T#;XmV(b%9SNV!1_%2X{nC6^5<{z=sH;~JP+RpS$srq8<3Etbw2iJ0 z8{oieja#&V?JB2UfLv^fRrT9AKND>4E54C)vJP?!swHzOG?n}ak54QhyP@Qi?w8MWaNatt zcdLMMwz-YkJ6`fx610yk)%q}ncAZlce2oPeqsh#g!IciwtB1mwG>p#pY(GB1LA~%Y0f-3bkOm{;FN}$ zkTNbc9_nk5OOV32!#qOMkHmKD&abo#_k@j4Y&&`vnWrYOV_0@`nbd4G!-$5oOU7#3 zHn*=O_T)+%!HpWZUt6>%&`w zM!x?wlc-J2i6#78R6%^42K*FOzLYNs?(y~zb|bM%{uMGz98#Ba)pPuJ)K6HFJVMi_ zUj=tE7(~&&TVJj7VwaKd`!I z>UiR>sgJ;ZSg|i#SNYPMBULmir&9SB`XLzQwPLu&mnJ6W)inn;=Q!@n>>zt>_k@X^ zmRAg@&y~l7P1iW|rnkgzvE>yri5K!s^x+aKXN;VcA-iu$t; zM$nXEf0SK$^8TjB8R*r_K#cwNdi(O_80crDOf zv;d2~TZYGsSK?L{xH6&he3W!=Fd-Jc#VN>@qtI^0Xnu_3;8d)eVfSR`63|Vq^AsI; z-y?A+h{uQo%b@7f8AXwgtQHXX3|%5;EIw{f_0jiP>Ra8H;whXJxA~lfL#w-nZtdk8A z%+vDBQ61ZxF%xv1R1+hUI}98%_qGovXwMfiJQ6>mm-!C|?!Tc1S~a@XkCl9&gH%qD z^Pr_Y6T;SCzBV(G$<>l$CvJHa6FmOD12%z!ULl3h2my_ft6WV213t!%*$i;=Y%6AB zeXdsV+)lDw%zzG|Ti-SUfo<@lwk(lDzyCOace=HExwtxa?L*((bp?nKS>xOy9Ok7~ z!iX*o8W0=~^VD`Z`;Wu^;osUafy=DL8a=Eqh8hW!h+*+NGRLm>&C_Sz4*eqd*40RQ zI4DE{sKDWrgD4aV!iu9zv_(#LY#*5mEtfGKht8LCEZc8CL1xbVb}XzM6|1UY2pT1iE^!&iQN=rLFOhXDzjraWfF2;q1mf3-&mLJ&x%CO65d;`m3Pm&a^QBQwC`z^oP zN(4FBI2ExD2ZiO^4Hs9(9sKxlLR^9H+h~w*hgNhFcRQdbVhJ&XA32-ajIYL50XB=_ zVWZ`4VRhmz#@_y&JrWv~d8+Q+*g;;u8$0&TOe%F^R@iKeCC{s^45uB|=!+ovKE#X@$|RNx4HWP;zYX&6*4-h1fL-d1MH2``&_9^3xmoiq@iaouTDd2hEdci$+2v_G*( zGQl~wp}iSXD^paK+ouSM3}#K##{3AD;Xg>;#!>*%oZ7YwEmriW&1ddIV`C&_+80N#br0 zOysXz7G>v-QTyL+z}j|mn)7FauEwzeM`#C@U(o8BC*QyyEdm!!y?X)mt>yTH$75Hc zHAls)Xppm=hVwDvLt{nRZ*K?>*CttH?i@hb5Q>Eo(d<57+S11u7x}}Qd#@sAuC^Z} zUr-oVw2H5H1I;L+>osY-k>=<>d5+%SMT{fBy-Ih-a*D;uT({3#{OS4dSezbJ==Z6% z;L|vSmx7^SD_iE?%rDu&;0y8pjM~^kLWg{#1yUHa<0b9TNbmyvulz!o|R-D_aGTIH?%H^X(a2ZF%NTo%qnR?xx>7XO)vQG+P+}=h;f+=<3MA zOwU=A5&?k+-DS_}s{(x|*d=qbx-1^fToUNA1L&vjA#~HvBH`MOM8?iQ1qm_%VmRl4 zC243TVV8@V$wha`4M&v;Q*JLSR7-i=5vstacXwy{%+u((76=R(boS`f*|Y*++q}s6 z&~+O}$x@%kvR3UV8DsJxnOcb#@(uJGx+tSJ11DYh_CQAhxd<$5n>#$>JOsv+*bl96 z-|ZbXZ~+9oO!KhmXnJd2eO6KIS-7)1-vposV0Us{b4nLq7@4?-wJi64h*t=@0|(Q6 z0Z2O~9Ca3}N=)?#x)ts^5N4+h_^QHco*9ti@ty5Wd7xtljuJE!)h-+Sscor%!iw|4 zU&$%t(6)yiTyp&OPyICNFm$T!yJ(?cq&tzZ#Yu*tqIqQ(=86qr`l9`XU(af-^9O9< z2*AD18Rk{LRMG*U+rFb18GCsphx#6xVLDyzb&i-~`xO>v>BeT#Iev-uDE=7orne3t zJ?Sa;k^`-=60P4^wkc!tc54Qp8w{$;naRiC7TIV6O9vLymZX59C*gWL!@wQ-a}FA& zEey;`z+>b|yA1AuR#$*=>X8}^d65j}+Rl%dF!r(LD+sAEC`_TZoW9w#M#uS~ip;HK z4StwbD+N~hmztUBb{^l`%0LDcWczb;b_RY+UV1g-(p!tKrrz|LL1{guf;lr4IHOjf zk~J)>OI{_%We1}>BMH|2m40OCi2Y7;WF*iyxf*Nvsu+FIXp18LgeW65mF zI;|f~LpPwY=m15hYaRtsP1G!its92KI7z;)Ka02Q!bES!Ik18rC4Yt@A8_ogDF~~3 zM)nX%5x5~Z*aYYmLQLDF9Ud6h6qKB{@yc{qNdVn!V23PyYiD z)F@;L@645dN2XeKv?aUgy?#%V-!r}n=1gIw&eg?Oj6p;9NIkGv)345q>T}lY3MJ3A z-Fjpjc6zL=lO1o{byiI^Kc$W;{Ar8D9v{r+@IB_SY${f)4*B$IMAZN-^is&0>`*Q_(Fl9IUS76^b9C6?N@ul68|(^TIfylS2KxlB*>C=(B{|qF!1` zLf@5@2f8wt6gH(nljN+(G_kg^@oB77<0qRaWkg_ zN?=I)IXo-&B^}$t94BQ1+mR{hVm6h@Miph%fRWX_%7HTKxj-ajl~-W;Z71=|*iVdps-Fc!`4vc+lWU}H69;#7z2r*yL${;7ja>*4=V0Gj!> z=(XmPhO#vtHjrgE9APdUT<~;|}d)tCOEYzTUE@Yh>5;e(~czw?XnJSq;Th5ez$eGgKG$bek5qu|J4)A zQSM};R!YeDwAk^IJP?7L-geg1oJr-dWhvMh`;|@WM9EC<$3g4)N@iwkhHkjFsnEZ> z$YP&e)j}q!4-L2spZk+`0Cs)ktq4p+Y#&H|wc{3^Zcz+S#5Mj?2K6||rdj)2DnlI3 zR1hs^ERav26!6_cj;FPwAPqB~C~a>s1n?oy>5dWxO4Q_bBEH84Z5kv7f9KkB=F)5I zFRWr-1-9S;ZXNUqY|r&@kerM)hz7OCC0)tE!nJD0!L((G1}=fo8O6CiG9o>=ey;gk z&p2mkX;{5Kb%D%z9pK6BXQ)tjRLl!oH>7iVl8s%QP@XrPJl~@+7T>XjSsT8FKN;^x ziiT_1-6LnC(asiVdzkUEYjVC7tR;0(+ee63s`n>&pkoo=D!6z^w0Rnuv)%Y{j82&V z(D^xCgm)t1#>wiSmi@_Lt92+n5VC=2fE1FC{fM(g&Hf)OK%8=qRbbxw(@f~(L1Y7+ zFEKVqa@Oy4aA_ybKx1W5t^4iMBqJkP<#UjlhqiwZMiisR^UM#jke#M_zLs{^xSV$x zu1+>w^4==JBI9|itfsnixQ!V^)?hdD9KUM|8w4c66K~{+umA@OOz1?J_-Z@cKCN?W zl361PI502oKELZ4_*v5u!L(_u3Ae8gx?FBhb7{HIm)L&9TgZ6pM9M)S#Y;~jBasiY zmz07WjYO7jfGyBm9q8wbCJ)73L%?p>`ew=ri+!<&AfFT3UT-M**So#+9r|p{FbiJD z2?DNVT-FB{U6+2f9GE{{45r9gW?fJS0#nc&T+qSi@#lI_0;mLWNmxoI;IV_fT3%z} zQnZ>0?}xxm|0*dJ1_Y~04_cY@g*nm%H@6l5tyixSGCz1uPXBC5L4{;?F{psUHd;$J^Nefvv@)TeqJ$jgf3P z{E)8W`Js8wQR9{IhiFJHf)6u>fk*@FQwY-M_NDC3+_umiK8fLup0^F`$JFj!z+KcM zcP(pGRmsKq_p(FXn;}0~&uw~L|EfrlsYEU@cIlqZy|R26Pk?~ZNa5BFx@k#+H9sAE zaBLgw6!GZ!NA>`IZX`mX*Dx>mT*+?P5OnI&{tmHBlR{Q6O<_zU9Q++GFwbN!5%}Gvax7Wr`0}-k7{>VdmB$LmnZO#u!LK>XPK5d`c3Mj^8ZforpVUVZ}#p+QvtS zO-)B*+iOBy91^zjd^E1|8)lYQU4{qt1Dm&Xd-yYmQv*{JD|!=ujjdGe(1zO#b{6M)YxF~Gj_#3Ct30oU_~=0V_Onwkd#M7d~es{Mr=_mD3YeO zuBr3Q{FYOZN42f7sH~>27JX9r&16p1c))@~{AM-D+9!Y)rh@6d!O^^qiTTT)6h5j) z)-m7FgBV-%DMh} z*EP;+s?<$Be;!+$PCf|;r0_GWp|bVS?VDL2|r2n{p_=#6ZSa#qJ8 z2}7M+o^~JuPVzf4FIyq*U}0b>9G($RIh-~*z9LGh-H&2N<9JS+o#trcOM{zd+Ha2L zCyqycD>&f1!}crpm@baNM=~qLA@GNDl#fXRiDU%hO>tmVdEk@iN1gnx55A0!oti-u z#GO!dxotGvffkgj(BF2fUzp0dp5n|}Kt3C95#-JegOSb6Kdop4LB7AoQ)d%(hXD2} z7t_j-z>eBbtD?3G7omxra(?Oee~RKW-gjppJDVd=wkLd z19hx-lI`@Q?5-Hyv{p<^hs&@D@cig z$yx302+=G7^8!KCf&PB)3z`54`lN0xckRvR+Q=+B6im_5I>^Z`o0*&zjir&n!B7tC zF^m)qPhJtjvuLrq5p7`G>I0OgidAA;+7<9HjT&n;QQ1py?Wfvyid~Ndha9RK&EghyWaq>=y!}hUCmf_v{+=ZCa zv8(RaKByVCBjahBTKowb0>ZA}b%u;qvXl%&2}e?jexhwvWIjUAAb50Lfd+v>k@>(K zU>&zY<8o|+ zMvK7&>zJ=PpVXy_qKiuA38Ayo4RHBTAA4U`iT~JyY+^=FE1|{Q27(dhGpZO z3`Frp!M=HjtuCC@R#4sd<`CB;ROnX6zVTw!k~_(ezuUNd6dyxF>A)Zm-_cHGY_Ck6 zhJ1{mANoQ6X4`ST&~{kRNnl}Nr}HlO)ZsM8y%FPWAA0b(g+-kHRPVT9(4Ln;0%f!t z0N6?D0#gzxj{L>Bc?Q*~T({g92w>lbzI= z-j1#|e5np-H3IqHff3;+g`sG>jYF_aCumgnr{Gjuc-0DHD$G2vTkWnwZ9BbnXy`BWhw&}82qT>|z9dzb&lWW`CMGDXgR;Up!=W2<)=D#;wQyDd zK}RKxTgK_zGVy5}B&VZL<@<1xb06@bZb(IO!E>U)g3-jBg2}VhEBVhgnwA%WtnOZ} z?s&v^`VI0dpU5*eJl{T-(7U`CXT}~$Cd32j=Tm3-ocCZjo>#U)&v6kulMe>P7Hf#Q zZEFU5xe`WlgT&{s`*!Iow#Q1AI)fUGK*_iw2L&5&ce9Wmtbh}i zSakEE`G%DR?S?tUuvKg~u z4F#@kOlOX?5_mqmGG9Qd{L+3l>9~qSb|}QI089PME!S~&aM~6C2&)eJqi`!I*E9N^ z73iSAgrwatP@|B_Q#RShQ-xdOFdXj!gWVr0ficjzWbf0a@gk=b`N> zq*yGhAkf)Z_e<~Oa486b@6p)Ol?b; z0+q_v-X78c#e<9tBigI32JIOP_9rI*p0sh1JdzS8C8q}2QYaO9SuzNFTuWG^Sfv|y z2lzLO|IVqcaXP-P?xPX- zE;lP-EWVd4j^ z(V4ZljXVo&3MI1XK5a&8pz0K{(BNbmH0>jev9)i{CVzvQC9^C*O9eup;i z-YdGs4k=e=3u{x2m5g;F(=1$thifZ_?oO_;C4e>C&OY+7#RLLRd)=zuq=Ii9 z5isA+U5|2J%{Vw+c~DfqRkM z&UMOfBAFOt-KSS98D^jvUBdSofpGawQrqSxF}E>J4I!9q(~CM28ACDviI$;DdhW*i zSEp<*qddH}AB%6N3=jXZ5^6LkdO!7&N%7q*qj_2PKCnejUaO!lewgRvb@VrMAssbV z@;y4G09bQ2)@eq$sKEE#&6@ds&O;c1>*DK!|M_q$ZpRSJv%&X)4lH<{?{rS(gG@w^ zg7+R9?yg@NuZPs+U(~?5c3pUiDpkNV{>AvLO3)$7l@nG^^0R%@@Z;hS5<%=#rpz(X zB2!`Amz1CxgJ%fE(cJvwkZFHjbO@H77;YeZ`H*rX{r)s>x|0?*wZaC)5sW*4J*|^N z4A=YOVq*3g)3+@$&W`T&$j**O+{C4>xky1 z{9M>nBMtS>7RvfuM|IjZ_88z+?5FxERPp*g&(3ceo9_a_5swV3#sA74;G8JfINHyQ zumA2naXR5(Sw4-i%RWgqh*O7}K3p$6;PHBU>IXbI&Q1b8a-pd4i!nLub{C+Pk1Gg~ z=Gv1d^O=9OWv7PTnh4)IeFe?zh)1wJma!7-IAuiH;uE=^9N`hbmc(57+7$Rj;r_8a76P6x4q9l$&$W9HoM`KQ?LIrdqwo5hxlXJe$h zNIJnx{A%8#*&9DY>juPz()a75jf|c51J!6Do>e1aji<|f22a&6Pg&V9@vtIie6?Mf zb2HAFh+os@8B~zDZ#xI9bL+4BE0!L3(2r2zWD!4LI$Tu239HtJU0nSZvR!8^O?I7w zH1Zg$u^dQnc`Wc#cC%%($d(4jrv~0Zcd1cWTy!(288E8nUpJn`FvxYC9RrYaI}Kqn zjcA4)1ssfxc{<^qb8jbOoU3X)nB$(*oS>Nn_iGE$v$NBcJH2pZpY3D2q`cybP)h}_ zqOa|gN*>H3GN;@$vaBN>v%TF-_hYxOI^Xp%-st12c8*Pd*X~u+Dg7I{-tVQ=c>Db2 zd!1U9n9$I%qprX6IHpsuZn44-gX)TU3n{QTgfPzvC|f^PyeL7XnbB#lcl%&ij%OJU zev4#%2nq0TuKCU#8|!9A1UkTuaj>ts4rf#;R`bL@gQAIndoyz?_Syzb@9=WUHmnA$ z%~=aUj6jxB3mkrIusO{DRyoH2SanN;yn=P@q}jc{gwhVTZ=+GQTsBBLNzon5jxu#Xq^Mo)5Y! z$-aUscTLy8AXAyolMdRJSnz1|lh7!B<(r7wT!nN?4sT5(&-*2`9~1OX+s(7tl(eS& z9bm?H*#@ln%f1_c>H*N1PO{8yR{s(J0uUS;sXGjEuAfFeaRu<%y)~W+d`~~c`U?=L z%Nnb~jxSAcI>k8i4IAa-@~IClZr8XA4^s}L%hKBvu*`Yb-}+PFwG$$rzP>(P2VP$| zWX(y`wQNYQdJwmSGgi>hDooo5M%@w$3q0dlOzeEc+>akn;=1FSGXt7p7M1Cz^z*Rt zN7tt5;3@e(fhn0I8yi+5Y0p5#GJvG5X;;^0+e2WThr~)1Tce}HHCqRhSf;JjJSnrn zC8FWMstx{yt9BAqovV&7a82zUBo{%u&Msn4Hg>${^Y!(eWyOAXHp%wYNgPRFWJ}ql z&Vr+LmrYxikN(HqsCOhI`PVVIHGC!SW1m$JoCWTQiDt45tG*zEqu^ovV&oh-o!?J> ziA>gauS&5L-I7m95eT17`M2Ma9(E+kRskn;WbbYT=N=uBn=aVueODlR{@DR3RIxf_ z>YaTKiQX@KBK00VpD_sjjs*0s2IvOezR!uvjvq)z+4f*B?(DD==y+y7clv70qy*S2 zC3{>|n1kJazz7o4+2lqsQmoONF=2~c;&e3-S#O2;NRQ`Es zGG>D89_$vO-?rPu`UpgxhwW!e5+cV^q>a&syIEr$wu1@nlgE=IlkGLE9?1-06}`_R zKBhW+4!ipx=1x9Jen%l{&<{;}u;@C7_vE|j+0(pZVO%njLTR43s#wfR^Z+OUrpNRO;lE|Zrg_I^ z^q(`CAAAErm2YR^WnmlI0Aew}YjssiW-j?H*%YrBD{1s;GNsH>7N=K)-G^>d#%(u| z2f8&t7(h(iS+~g!0Eawa#YvM^DKt#G;J9>Z|CrnZS~77NhF^tHZ^3$Nd;tAgXJzvR z<3caknxXZLH<46T!Z~S%W~|Q$ zVnOG|wwyUbn)NSuw%Q2OM1NvKZQagdn{1);Xj89?Y&pk`e2pk$mm}pXFka!~!aDKC z;UH|qkPECn?e+APi$TuBekSwR6e`9a)9K55)@KM+U_Iv4HiY9VjK=7 z7W`e9>iKwh)2|F2I`*J&!_IRI{e*34c-gd)y_)$T+cnsb8gC;+`epMIdSi@Ae1FH$ z(IsGR;0f(Ig$IuOkmyGIOuN19z#z$33uAC*pE7pHfkeJOc;cHrk*)$$-0zeG!B;KZ z<#^?mtEN!3gt)QihIYp2JU{bqWr%${5YWoS*1cI#_4fJ8H|Z0;DLG{?j+8Ihbe=)4 zg#P-4D~bRN>mJUvRxcs@e0K(}Y7v!{j!)aSetcyysG%cHxv6g(YJ1c=4 z=Nd30jc%HCg7jGb9IDXtO~Ty2-;&n>hm}Ahr$LkTOc8^Hodk!r!Z%uz=pj0;)3L|C&lHaC(bZjPIEbsp0Fk{&b`P;TRFRxt-nkzKj`|Q+A6>@>p*<9aj9fwHVUvH4=QTTqSPu1 zbG&;DqZn?v#A+CWp(kvOM^VN>qu8Es{CU29;e(vi`;RB!9O#6A(`EvQP%5jd9(ncP zGc*6ho)hQMP3C36p=wSjUu%6_#YEy3cm2y>9RHl=#W4?zR|%n$-Qlu%D%-f8&qI^I zN+8*EoIQG|Veu zBe%ka+t|;TF22;;6+ZZlJGRA2w7p`=bDchf$*NHZ0an&;+cUT2Kh3d&}fqXaTn-D4C>!TZbZ`1@{AQp0owh!wzX>i6WjvdJY?#%4pA|LF`x2hYVr`y z=`Zabe0EK*4ttO>+E{h-ivYtluibw}VRt+;e?PznN+$3Id<8INy`slytc2A~kV6*+ z9-B4#9V~V~>PK=4HAiekCflUrEEXoK6(;(7`7AWB*POX~6!65*U1*Z>TF#5j`N?xc zC*ZFNpdjD3RyvI)z;)~hfC^y^2f7QR$`24ja<_u|Dcr)`(=9GtLUfC#yD??zJTX$o zPd#wv?s|k>oSX|DI-`MW*BqaOdil>?aI4|KS=jbz?w$XnF0&lqoJ-A_yG1eAtao;?Zgu2iq1W9?#TPgf>9SH9s4Tf0O<1B5Lbpdkou~MR+JdN&j1lw6?PiP17Slg?*mmOCu%F&Rm{eOov{-ht_Cv@Yvdx{3FpEdhz`0oN*khhyrqou+?rDF2LUbypHdL4 zVW{NB7Lz$6`Fb7*>qN_@A`4jCiS(eo$9ccsd%EwA=ha7fWZ>qDV55fblU_e;^D^>t zkcQ=RQxb?X^cB8|&jR7DKhbc#i=x}-S{?~xTrjx~k`J?ugFKDsG=E0mxg3Va z>*Cl-IGR+nadU;;{Ebgf^4cq8&AZwCA2vL7z+E3>DVlJk^z-<)(yho)o*e%n&dve^ z|4oxZ@wARko0(zy-pxl_2>6KQEpNOT_L=RG8*XxlWe zvkoC|c62*#UP-y+X3AgK zwXyN388>k5W6bSuhdPaz@#v$rAJi4sKW+EOqX%D41+d@W1@Dn3sL|ZwA&u_*e|En) zGJG8!aF#h_g?)BqSe^S=l|kP&WhVaP){J7z{6M@Z5jXrX^E?lp682qNCUMLkzl+a6 zlktZmdLC~?gj=P3lw-*I=qr#hh0%kJe0bO6Xd0MF)(6QgPw=f{r=8bhPDJ{qt-y{X zp{}fZGPU^1`Aif(;OEY>X;-Ay!ffb~(KY3I7XTmFy=Na#k^2`L&ht)DGC2rijUJD4 zY)-!CX^vM$Zep%TEmLxDm~M`&=!WCJ7km};%$MYmC&v_VxQ?Q^RuB)|JN2G6lINzr9`5kckq;Ueb|L(0 z57337kQaqGHek8LGi7+l+~D?VDJ=@?9?HPX8;0?>eLE=W)i`Ue*|cIl3t8A6KR7f6x?Zq$-pdo ztOIhNfJ?T>i5VI}>nMh;;S46yVWfj;cRa;GDzQ2XDPKS8@>pG6a(XFt^~kXwWX*){ zQ4wlt5|gM(oR4!ZQY47U;&HYLjuN7-l2emWlwuAaxD z7mFQwes#E`QwPssvSQHJ1DI90xxBr}(Ps=*5S6*<5ljpwn4x0^zonZ^>&+LAcZ}Uu z`~yISRWaG0TUW<^WJ@L$zNT?2Kch}JB^J}kTBZVkQi0p?A)iJ<%mEC(UjW&pyauLQW7jE$RQCEki@MJW}<4~ zhKB%iboZG2lCH?DIZ0U>;4WS4B~v_O0C39TE)@{VEKZSio#{NP@D$)xK7)h|`l0EX^)ol)I zDCy({Kc$-nwk8JTA9_TjiYIZk*3BO7uK63Cq&Kn|>b4z1W!iJ@E_h)TW>zH4?%Zhy z$7tq|Mi=MwcPflLC5xXD7>^)#*$>M8eJrz^&7Zq#>6!1AF$e;EiLv0hcAd31B>b^k zWzjRZk*mM#zplS=*3-s4D4R~64&zeKRM+nLr_X%bg)C24yMy68f|-;b*}tQ62Kj{@K2T-sgPx9 zVvV~UY#T940k@cC$O=~DrP*xp5DgE(rXj#Bj{6{)PCq)ZU1{L@?|9KEQm zHD~v<$%@s=qBmF8K@<`%V~+#-CO2(j%NfX{9w3%bjEFnbzGZK|Vov5w7=!tFt3PmT zT}oTOey?X>)d=L}Au%+0h#9Die6;d`hNGEdJ&8|z)XkAQNqoZi#gD;?f741$b?CNd zyjbzwLsMuU3CfX5rYQ}^-S+iy5OAwAPBMMcHqveeE*Dg0l3SRaIz!)>sn0~EThi3E zGcFybPJWJO{OaHF-q9gn52_-kR#|#v_2A>5)ht*aYqi$SvrHa^3Bu>+jabdHp>;7{ruksM+PVJ2dup_HT1JD*=|0wr-DxA}hHzGCkm zcuVh=7*S0nYegG)FWrDd!0tUXpA8!`8}8~KzkJyu3j^{^%ii)mnx8sChV2kPHAcOT z<61uF!4JiPuVSbnFn2zo4Nd&_^`rQ1_@{dum;5~WvX6p^TqahMf0I8~V_W-u&p*$Q zR>wR~JQANx{Z-CST9xf}D+VqFsUwi*N-nM*9x*#Gh37qXQkwCN?BiQTYui1r8g&$H zBlPV>zr8zAo*cWYYd}})+C!Xurln?`YzvrOjNAV#eWtA5u(jy?j&XYhksT+KFtZYx zhpy#+1ArijF#g0%s?XQXT3^*ItU^Ta-5qpC8TyQ_Ca+#B*wulHhtpbf>sp3!S?J7x1FjWldvaO? z+4rD6hIejV_rzza^>T6;BVXme%U|1|XlzGD+DK>vzZ)QX0HZ8QdJLn6JBv4=hYEW! zqUyKPldi70$s2wP7xz?L`5pY6y*P*C1x1-amH)%$x{uwgln)|1z?14Me(plb90Z8( z*nfb(vFx4b5j-GpchP4i^=<{kK|ggE8r=?nIL6=qew6rWvgZB=fH0z2e^j=le1xKb zVae~A3ozrJj14F%qZ5eCf_iN5YwQ<%p4Z!v)Y%IR&as_A8u&J{&%X;Lad$j_10e6c zV-H$ye&C!0V4V~q+R&r%eC~fNetqS6I}5mj=Au)&dV1Ne>5g%o&Ux5bb)Qm$cYwQ(Mt9`yH^0dvc zBh6}dhDqMd>nFd44pSxO)Di9uLjc3GE$2=)E!&=iSCUGiY#)Vv-Y46(1CgB^+CMaN zb$$9^gZL5<&LkoCLZ0s&1uWew9a!%tKZS#iW!1jN$QG$XZqDIhdlVm(i}^`^Z9G|M zC1}UoLB8w}9(-zC`xA<*_KWL0r(mS4$cT&R?#y$TRzE}bL_VLgXUg>$Aq(EuT8&=7 zsr->1P-Zk{wU?*~iT#$cyV0YWgq*QC4!$R{_04PhBM)virBq?$p<{g6=g0FkaQ!VA zZ8~-*-VJ%Dkp{6RmOV|I?Y+CvP_i2zgnhJ?DG7G>yX7BmvUMv8SBIr?8VNktJh^hj z57iJd$zXnJ{~e2KJ~IE~OeLPv=x6s|Yo&!=p!tlmCdt2!PmGDJ16L!=xwH9Tj$}n) zJQnCH-P1Ox%-7_~DbkY$SOl@oN`ODc8A8To@GXAY!f1kcuR&wkRq0fN4>hS^<&wyt zc=g1z8)pv;)X4#DmB!>LF-HG=d=k6bm;Wk!Rt-un3XdkGJdZLqaL2|8z<5g2>7mH5bPvoh%GGq#k0gUmE z@Cn;#xX5{|m7TZbJmXI#aeIaNrTJbB?>Y8rOvra+LT9pNr;Dx2#5vL*J&QU%Y(&eD zVjw2tjZJ;+uo{CF&P%a8uC3@iGS7C(y0Pi=*~+p*JnOIc)$?1|?mack?_TN6g3MvD zlbX+Ra%*O}$&YALK5^0(n4|v_UEF@=Va)N4KtQs?Nb=SLd!DN}Y12;M()Y`6e0svC z0dd}B#9&rsJYhxHsop-{1t;6LIN_XU+~Xn6>G}3<-!4S*XY3?F{$P8=u}Yj<@Tm~u zBLez;PgoCsYekO{#mOZv-5+st@I{5rZ|C|EiF6#}S))M2=ZJrWl?5@b=SBARxF`P? zfgi^l{_dFG3nQ2_8PYWK45mrzz=euVLa}J;WMtRi^m-O3u&Py}a z{k`er`)gHwaBh6NW!SnWF9!RLTqDc=^WW<-+8$zxBn;oaTm_ zQcKqWPC&80OPI^=KiBUQ+`oh2^Cw+}Gbp_!Jea_VWM#1WjE9D8VZKul*lWyLQ7xo-1&>J;4I=Apn?v_S_7+>maxAKWsFRSEiVrmyl_ zV%(Wr$>jCa?a5>#^=UmZr0XYL%^2VzL9CuSupwSOKJd_I(szS=aCd@P+B=wB0?y5k z<1M!z*=GaTe+Jau3tj=jP9$>4ym=P89Tt2X&OKpINNcc;ZJzzCqP00*H)V2-EeRzlH&R4xPIKJW2%vX#if2vlXMpID>^s za3V28*}?q%H~A|IB|qDEEVlIee{RS0dffKNJbsV|FXbnzpmWdngj96Q=F@{bOdB@w z?Wd;(Xt_e;(a3;<_}#^y7mq|!lDzULjb8XicmGtd)6AUQ!1GGpJjW<&XL>3it~%4nMrRkB6WQU!m>ws&TA`=10kz*h->kNoRUM^ zR@`v0B(pC+jp?n+Y=9wt>HFg6LmQ~9{Ubboa0}#X;7xzdA8rXBn#HWs517I|OdScp zVndJj=0}h~W*qbru;ai5YxKH0GDj>BgU<#5=0;fb+iQOnyNYfuqR4;xjPp$qR-`x# z%+>cydoX-*%k{oLWti6k?OIwN;*42<NH_tp(4lQ~3 zjAmQDU37<2xIAH!12tBeKvs-oS+^Iibja;asO3<)7;-oT8<^C7X(sJ*vej&>gcvX+j~_T>wfl5EK@4qKLk%#DP?K-S7u#MS}SUi7HEUAigub8Ki}knSJ`z)tkWJN3*QUOu-%EE;5$2SIbu zcXpSs6JP{RKBFjL@Wqu_NbCq)X`b$q+Z}lAq>F`d@(P-+J;m6))Z46%`;(;nUT?L8||H{VBj9f>%M+AAYgVo~&|Zk!oRi=G5+ zN{W|eR)^)$&;>q2%Ybn5ibc)gcbE)7r<>=(Y2T!rXDNIg-GS#Cf~-jGIMb<~1%Slj zvRy+>>a2XCOnZxl+6t!%W)pl#E;yAWIgr4n?ZEbw39u*^?cE68tOq&hF!I!X(120C zK1~oR*a)DRJ?}gt=Ie)r;t+FhskstzJ%D@Dg?v(cp;p~g$J|;OIsBBUl|833_xs9$ zaqp0YUUuH!-wH@QZm$dybuB0Ie^9y{?U(ni@f66D%>W$0_YAPbZzhugY0;GyTQ_{4 zZBF@J4)L`+qn-Teq-`JmZkc)bk^OdOq}&_=l@vD~8UP>>&(G%^rJtEU?+(@po)tFJ z{1gx{*k$v@X#yH6*@AvV73v_9Yw?36S8F%u1&HPUfUhl@vx!50muuw8m+xNhjn$8x zmfkL%^UeVMJgUT|`%@uxC#&yR=(Vso=(DiSkt)OhSxH4=r6K9bf_VJvjM5n_2Yc

~Z(gu%(dBFQW~4wt3K=e7J34%cyMdtXYHxjU}efS)+W~>TcVcevhcTP(t0a4Gl7*D4P$SR!xgH0w=ig?-SOW;F5qT^_&I%tgBt)d ztbP`c?HBYM(TjE+Gz{$%%DWK)@xwj;Hg`t}Ct3Vd;xM)+VJw!Oo@twPAW6RunTyURBkaI$v2-Y!>BS*&^ zWXX+JBF?P2=Wr`55DVO**G06Cwn*>Xp%PiO(?Z3$!}T75p{Oj}CBrV%vHY^^m`zqeC+TeK*$Blb6c-#a{sZoa4E#L8{t{<#a* zeTSWjm;0UCC5z{Qtu<#g-{fT8SMxp#e(`idts3@V-fAF;+}C;5%?a5o=#z!jf;7^} zqcAPMr7=4m>iDky{dz0-`*-*qh}7U3b2&+~qLF=LgZ_>y^y5$Fyzby)>Hs6jH>B}~ zou$k)j)QR9K4$#HWa7DYL(80~;!}=0-^N888@t#ZYipb6H1VLuvu(*7a~Fv8Ozsa` zOaQ2gFR7up0~~Hb;EVT-?rjzlhUMK>bTDWjn-P>rz`|fv)2AcL^z*!|?$B5{E&-?F zS>WgW`Ru3%z}*#L7*QtbmQLjE0ZP(w#$pKp;TdPoC(AzX%dMwl6p+Ufz16N#eC*j;(WM*GJI_NhA+M@0x*P@NPQrjBfylIgdNo2xT8T zCAx#V?8ID`7tp8|s_SrW4Vi7l>>2D7^(PD4az0grnm`Vz4hK07(w4!z7s_LB)xl7J zYTj>JaH}zH)o=rWnnB39WmWGOfriXDbcW%!rqLotfsB)YBzUmKRX%~f;WU&W-zwweHiUYFnPTTv|Ij1p{Ad`15tfv z+Xxw-MZpLAJJ4b>XoJVZ2~A%N7(v5>9@@8HfBzc@)nlIm#0fd49lH*S*Ia{seI3R< z4hS*1MBGPE6}{s6<0uCYDBl(I(~Gf+0B!MtrPs=$jy65~+W zCh`OX;i@O$Hil9z?96We+dH=Z9(prZJe_`##axE4LnKHTX9gY6SVv zfX6rhwoazwc`g?7;qSc1y5%>vFS@0HZT_-BBL2eXyHHn!O?y9E?Gt|};#G$IU!Hxl z<{}%0AjiWuUF8?F&1!#{CQ5Ccm1ZiE&GK+de6H=W+7B7_l8?3tO3}3V;7|vEcVY*&%jW|u+f;s| zf8Ty_>1oEd{SAXmd~qM@OP)r~kk zKFUGaHZ@%8{!P<*mq-;Hz5GCrNin!T*{dcWat1OAEJk_t24p=20=}2FEd;d~G46f9 zw}FCO(KK=B)QkHzR?^#Qh?mT1PLdHyfAMAKT4TB162%u}W4w&G@xfXq(QQGhPCGEz)_8V>f}G>%x4-GoEZ38E!GLbyhYN zazH(Kp-~FBS^3-aJBa5)a!dA5L>&5|*jkOwlDAPb&2waTBvPV#)%R8T0Eo21wPU~chkyj#hOvZLsj}a1hgW~;e2|dv zY}PfB`y-k03?uQg*D+|jnfKc7+MRLT-NC5f+^%4e#mG5+CXI#0>rvSP&_BsD;TchM zV0)AGbh!2(mgQj*uz&k-sG@x>FC0I3PFVRAgsh()8xxx6amWYN!^S~20Pzni$24}@ zf{7RCQ9b^hjMnD?=J)%{PF%mVRQ2a$70+;axi0}c07oxtO%UK&u1WOu>JD+To&|*d z`-n_$>`Gz*ILg63$vy*%BiZlor`z+gk6O7gQPmFSYcKdXgwRNnr0*;Tti86`c{~HC zyk{S7cVC%j(H-C>*D^39SRVIl+}hjz6gX;}1E4{-<(m}LC?VwYSI7=v6^(81%M+pz zK0+|h79h}N;5?D!ojz9FfHjRj@;|rr^P^cTQ74rX9PkC$bGqnweg3KS{l2>KBm0r0 zPsx4!j|K;M!uBS%uLzi9wC(}U`$JG^c}&B$Hq{5KD{=lzm7y+~OX@Tqd+oqEp*rqL?1)pv+f)3c5faf`t@Od0!V-|er zU?}n^T7x2UAd7@ayygowfRv6&XRDc|^!4jQ@!f;+Sk9R&PX2HJ>cPQEnj>3?uX3Qx z-G_f*$7?RruKPRK<4qdmhgze9`_ot_g$deYBzUf1CtH?WIN1k(UU>#|@*4Xmt`+OJ%0OMb?p1zBhR3sY z(4K%V7|dtX^cao7?%Ts89-uj%TM`Fr#BMUVKzDB~kY$Lf{vA4;qRgvc3wzm%}pzu4-3Dm04iOKrCO1!qQf)>tqwmea8 z#52eAjzjV@>?&ixy_>+s^G$;k{g;n*QdNAyxm?7g(iz{5^}8dZNBcOp=CxdjH!~C1 ze4|lXj$hZY(d=P+WZJ4TAAun@lG0Bah>D&Z_p}F;wTve=B2B#pQ$yFbj2U0T9;fG5 zazI^}y2ZTJ4X;ACbS7|J0);zGNHdF6HaSHB#{C?J=d)1UEX3-+y^0M4LmGk>2WwW)J=M|0fH9enl*q6x4|C$Q9r^c&OR0OH65HlKf* zC>GEpJhrfGC(A^Ljk~*eW)f&5m5>PXbVqfS#6wcll%LG1=f(gGz#;TdR%KS9M>j$C z60fbx$jW+m($4(^Gcy=qu%AGQMwe$45yW6_aW3jSldeRwyfBeGz>0(s4`h?8CBwCC8c+u2CHFRd#WOjtEl}yxeCbK*zu7pwNnJ)mZ z7I3B?f3hijzqSZGQm16(l-rd$Mra=#^X~_98xdlAYWA6BIx%fbqdV7g<-3 zJqJ7QlZbmo#z>&uA0RBJu@ATUP^jhVp?QYQa><*gTzoUICgm@55T?nh!)ZrG+yMF9 z1&kRlVdD`rM$soQ8S+M1UwJqB=ek7~AhF;6ddq?7v+%&Cd1$-ND3QI!mPA?Ug?C8T zv1is;UA%a}uH(%=$^K6Iu*guWNlHhD?^>(DWp~~5XkrSUTCu2PD!Q41$tb$gS1#K#lJbg4wVkYU2*g;=D^tB9 z3$m~Kie}8IU}e&lfisNWCfjlYkV^ZuunAX>zOCmfe`4Lxk8HI47Lv`vVhc-#@GQta z#AA{(+Bo`0;d%7T-eTatk?ewx{&U zyfG5Q!_E7h>(I&!%E4ojdNrwt3rH;lC*S-K#{qXp%){pkGu%coc}py~ZO1Jatn*`x z+nKX2#xNg7f5e=c^iKLTu!LTG!BM=yc%_h)(`G!Y z^KKBQ-gZp67p06-Mss1BnBQfi*WB-`Y!Z(MndG&a8MX`5Hh>sf^dP|O$(NN`=MkDW`VS57P_vg<*g4NNF zly5toktiFs;O)cY@BpTxTlh{h{j0=S@$^a>sP}k+amkd&I)aA1SLgNItd=MvF~CM05{$20+zQ&aH%3Ii0%Z_vbsyf(rJ5vJw z*|(fG;CDZ2%zJ_i@pSt?3yohQ|L;POk}G|W=E0=2V_LAoXU7b{HxpqRlfIk8{Adn| zQb)pP0)#w&*%KysIfkddw=C~&W7FD%(~}7R3H0i_>Yb17%;fi!)=clCCJdbg6Vo0(qrQHMLnc;mAa|z2 zLPniWa%9$c{2mZ-E|e(;UQVW_FuTV$ejJe2xau4;5~P}OWLLe<`~%@`c2K$xd#m?2 ziSUz(*u+??Lp!AD?{d*uFuXYh7;Fm3n#>pw^%barhK>fHDg%Ig#07zCvzozwyR}l z#4aRHKG@HD{K5B>Z%U%&aWpFKGf$sTfd%C8yF2b)MaXr5zaMgPBS3zq?nCY<1O0`s zL%58h9dIWx4Dh6U!zgt0`CMf;OUJ(UDwx>4jumyTBK^pKPniQl9oolj7Zlo2Ckk6G zdGK_WA3WRc$7YU)qKTb!pLxcdxkEe$mUxcA1cmL&Y|X;#IaA5GnFpDIJk+paqYhoT zl6Tz7Le{k&S@QZ_GG$rMa;jT=3=s1W z^RoH4|Fi6%M)rnWX8gDEdbLG=cnFEH-O>AI{lI!UTo&=j!!A*j$MfRa(aJk=jn=kx zwiHeIiu)gP@O{JEmoH!3bCv{PwA0;=D*)_i&O|#qOK^V?dhUyN1D^&n0>1A;-_vkmRrwlN;`hoi`ZU(el^>}0e`ufASz0F1D>!+<~XDEz} zWs^&E(31WUprLz>LE&Ta5K6R@lCoI@1GBoi#%J^N^+S5!XfK1e?qhIFYE{6rc`qK_ z9VX{Op3dYWJKUe2FXzz1n2h9nOwWE6ilj7JvTXyx`Top~sXZaZ;($3}x0RHExl2TGpWY{qi)G;3wi;H&Og1;w50 zi3!+&Ts|8rvH3&Z?(I6>erM}|v@MN-lvBL5nV8)^(?4ynHT8d(+%=AV629aLEF$a7 zdVnf5HLPu55AGNTw&p%RjRtQuK&* zE@nVG3l6a%)WG>|9{inse3B^!e>y>Y>>Nsh^qAMyk0an!knF91 zBG=d7pAmrBrZaJ&G19L$Ek~eb(*h;x4mgcb9O)0nHn;g*b~w*@vgPu{axz~RXf_GX zs*$BE&;rv>{%2&> zY}D*wi!65!am&IUj9Uinh0ON-=JWJZHRY`C@$9)0qd%`E$xePR8Q8_E=i)ZU32gX) zrAFAfwVF_4{0iA!E0gGl$2dM{NW6`eFJ3EE-X83o>4Wbi$8?KhPIx^JPp?eIE+Thw zb`S_>O!Pw?|2dWjU?Hk|%*r@d$gMLatHLzPHx5ei$%CM1qNF{4J)G4yS9-$geVE9m z?H=310zJjOXq-(r)Bqye7Nd zgt_if3nAmWdmeZ1A`TAqB9Qh)ynZTQ4gjSq&3`42;e?j4iD2i4os#4n2s&8SRinlZzd%GLiTv>bH4vffI9yQed4HRl+niT z0kmSai+)OSa4!p7%72#(-kwR|Al^Y5sLFwnAOBDX=I^u9?Oq%$kT-bCEeF*B?i=bq zB`>RE-t(D3Xu!+_0uIv27J+)LC|WB743Hmwmkif_+W_ev9+C{Q-z~8N7y~rR5xmej zc0+=uGw^_>dTMBqu{t*^Hd^^$>k0PXdo`cpuj=9Lvc&qdt|h;X`DIEocHr-R$ws}F!5$>${BgEvY| z5QLCU1o+Ii$wTP#D_QigZ#>7#b6a%Xq>~6$&mWfIVf(K0o<0}LK`WoxXku&y@If$C zbjixCfWQRL9QP?K>r!mzM*BWwdL@*$jd&Un|K6!h0#bMXTkn~e!Wm-lQYqMox9a9W zvUAx4**&dvtHMdfsAB5yKT8G{_<$dZZPX{b!#a2&$%pf}rlAk>Zd+~tqU06cm0l!b zE)IJ6jU7M2hURZ2XlrxQC%=9V&WU{laHpK!i>i3Pear_qW&MnTt&`%n%QEN7M}B?1 zzI^^{+jkm3ziKt1Xy3l}I@9txgYo_A>+`42{hZ5KRhON78nMC-WCAu}chKQJ>@~3Z zM_4$;_FjLwx+?YDo-*iUZ?&u$Bz_f~$mcCX!F9nFKY{eiHV9vnJ`+C|rUjt7%8!L|aPG5_}GHtqj17kJG%dO!dw35z^gyGU7ondo}1uY9v zHhu1AA<@5eEm$csc>IADg5&%sCeo*!@2*(*^2DI?tOLmdRe(uU7?JZ^?X%yFXuZlI zIGJ;i?CfG}b-J4#C^9mZCe|#h%f>p$fg2n2%BAg3hFqWP;ZHUQeA0HUeDYDxB|ihx z<3}`M?n5*kNuCeRY@$Cr^7(${Oup+!aDw}XepAaywLI}5{l z5@YzCY>#n$!m_<}5b`%{lu@xww%D$$v6Q#W`}&i7e&`|ilr7`3>e8bm*wHQ*iyqcj z#dt-9NgPa}f>kt=NzTK#`;wg(OY~2|5 zY=%{beMYb_;}idOo7SzkeP3x`1ubs546H|+{dzbDYp>?CRopz7TPs<-c`nm$Q;3@w z2!7Yjb?VT(PdGq%jhRyzaf%fh31!a=+p14tg8!YiCP{qwX5DuF+xeaTB-1QglO1lv zpRt$Wz)guCQAi%eKQ)jcss8o3$XmWyy5BYia-LP}A{XZudemyZ*rDWD=Ft=6m;dVV zl^K_v^Ob(LcK|~Egt9qoTj$f}WbeCDMXa$>X{@TD`?=pg3wp;PMK-j;SF(xxRCE^n z9=Yq-k>DjZ;SJbe8i{7qE&IdKup$Hn?En;Q^WOeomG*ZnQL^0sWxQhjcN|XyyKI|ZE zdM%}a1GM4Z4>_M*!7soACy%AkJNGmEzd??n1+nkj!6^{YUPf+n-zlTHw17@q&jgU{Bacflq z!N|kUQ#YSw3l6Pbt-EI#0o2wcS@ZGkkQt;dIMPywi$jgwsj>GQ3%e1E8TD=iFC#06R7)E(9w*9?;xiPD4a;60hoDm+qe7;*`%;| zuE0#AX;1V?GOAp6+n5vhzCGfJ<5!@(gW+rbW)=3K_}>^gsWNDqh1Z{&S#0o!r)kSreq|DG?UKYv0wS%^OMNsIh~fa?Kxu7 zdpt}4*-z0vF>z(AEFD_|^jo__l4me2c~w*0rSCucvp@6tsc*i2@X)7EpC1xNB@a~) zhrRgp>Gf;B_G_0sI)pwpU#B>KQjO6cM^50kpP;uCSDo;9BqJ7XIr`oKpO>5Uv{4S)zHw7MDD!+KIYQDkNC<7!up`L z4l2L%Ge7gwuP>L~zrG(UiPF@0jX6oG`uvAK`tj?Z{qTp~xQBwj`L)jD8IMMz1B*7$ z$B2v)nd;-;tAggw#A(5o!ElR*ALv?&yLgjigkv_AD4Wvl!6Q-TV&$OjWbuPLnR9Y7 zwu?+7CR+H(1k$#=^GAhBV%a=u$Kt&sz)3#e(|M9WzFHV6pj3i3aJti z`poEW=zU*d9PAOleUn1^LM`Jz@98EdH;GLdDTTHJ=wW!^K{J=hFg5apP{2;mD|kq zXazj&uw=s8$5_&Xj?eN@0hmzveOJ54Ri_?CT{V6M_rK7iM) z!iHm#@VA8@qt@{Xi6O{8%dQov7MO5F+?I&Q60Z||=qG4{=eu)`5LTV7?H$iI4Atu& z;0F2b<(C#8__Oi;NDGV?GB+P%UOIX@F-qq9p6KcJDDra}-<|(o%&j)qIh;*{#MB+Q zu}b=No^5gMM~sz4eg;-8h%>|3k!acjQLB@XbT4o;w+Jv5z1>NSRyj->o{YZ|1^S%T zY-{Dsf#3HgpL~{5a2pf4%k?z>V@J$j+fEd~)k&u)Ze(7aCZk;vFhsc9o=)hmd``8*_s55s>2?su*x? zF`>(}<(%kNOMgYMN;U&fE%0AszknfR2JD&6KulOP^MzUkF_XX!LazX06>h?o&?Ua( z0kEk1PygrJ+SnLiJ;ig~>9ziZJ+FE~w0~UKQXQ=9=y6@}m&dm;cD#=vEG6i0;T(LZN*@}o( zkuNd3wit=+5D}^yrUDoSfW?ahqE9ktrzLr`MgzETCBs^Q7lsaF1+_T%1`#Cnt# zB8|yK1j|k!Z=wfn1A(o~`r0%cgn0rNXTkp)d{=0IDZRV$U@9n%fP zL^b6Ld~8Rgz1Qo~Igc?ubS+*#pWB9=e%|-5ukX%Qn#F_9pWj}euaSSgg2pd(&VY&v zmN9|A2K?V$D?{FGnN(md9n?8wHOE8mI#}^m2pcl3?}KD}74hi0hytLSuFO^^8<1EO ztwe|G`8%aC+#~$yKs2-onlYOU2MoPq9-g$6FlC2+NZg5o!jfFcC9!CqSQo29GUvFN z2Iu-58cVs)Ie?`EPVPAIcFDx&*LUCkv)BLpfA+7x{@s7?-+leu&;8ta#+CTfO2I+P zrr~$ry&pOIPyg0``ugAgum3l%fA|mo;p_X~|K9mr&*tjDj7>azNYoBYM|<7$ak2Il ze9piIU7*=MB51?*B_tcThuBp5!JjDyxNlsvS41){WRfzt(TN{4^hjQ4n`QIzl*80c zOesM$lVY+J5^*0$y~Mb-JuCWr_wA2f|IWYtZ@>Q3pZrrt$3K7hT&uAzayGWP?8C+X z_wT+t*Hqy7`TYCW|N38l{kQ+^KX`rlQi;I?tE=#L?41$^_j7)()3Kymwug4FD}JLg z_j9!N;n)QvM`d2V-r~P*QvEc~l(X#VcN<1DHlUl=tGgsmxP02Q9yTyciV(G(_WASa zc?`bM1Y+zDS)_lpjCS(Ki9MdlXt3KdEK5e)$>u(b5v^l*prosCl-#w^pzSfEgTkI( z5i1^@Gl)8%c5m7$4vo3Mm(q^(Dq5Y{cPsFABBdGN`PKp0!H1SH`|YNmaF67%b=y4u znsd-<)&4BB=~=o#A~!7N@f|r(VKlf9tLorrZ^gHfYJSh^+@NhkwNJ0tmoHyl|MWM1 z{owZHb)UjN)L{nG2lKl<^p5r<`NSg3^Ax5dM0(ud5p66!2f;jyD1=LX4d zZBuUShKPipM9;WVy>}x};h4Tjb{(;(Wl=&ro=d%3t0C~SeJJTMd=!#uA$o{KUT8k1 z8HxganG^LoUjlx1`S}qqK>ihv6$#hMpB!@&+S#UR(5ra>cHrD*D7qSL9Wcli)e8rP zvp>@uOmOYt1<8O83GZ?n{q;kvGCoxiU_z$I0We*CcANY|QkPfkr0bfaU(^l6Ew9Rz zYJkVqD8X?XtXqw4I0qB4&6Ny!cMT-%OV3v!21)+wUFwmzaJ+}P zmT{&^Z5ey49`eJ5wPpL6Xm3xajT{`urs=^&fTm^LpGG`yvDJB0`zSSc`yAz*8%=iD zZE#9kCb;4hO@*Y##&&Gxy3PRl#8_RT2zw%b9G@c}pcRBH_Te0zQSgMXhiK<3==fNo zqr3_Afh$lWqud?lMx)VO+}b2vbKin=Uygc?m%o3C`++Qx&dSM)q`@xdIoNkTyPkaY z!X|AIc!QERN4wqwebb6GVVBWJEFa@zYV;nif|YNh%C9rtw93~On|>r0&s$(Mhgk9c4KN z6W?Lmj3^y>IYOENl9;d}tg?KZX9n<|#8ZQ|96m^ElP+^RL?tu;R2AKp4$NirngWxV z`d6K_7lpL?C-lj|%sU~)fIW_~?_J$^)a!v0&_QEx#|~9GD1sTy#lSVzt%4S1mYSZc z!%76P-4Y#I-pf|JJ25W$ITgN_bPv*m<3$5Wiuj|i7cX?L$3`axUO~Ec_lLHtoAw*V z61F%t2ji11vgm!i*{RH##s1i*TnZ;Gc+nOW-+cM<`q7Vn`1;wO{khj){i}cV^_TzhUw-}Y zhd+9KxsrVkTPvS!<$5c+>)UIapg;4c|McrW`+xptumA8r_}{<2`SQ){>+46@62xby z51QHTF43Ti?g&D?J#QwiB}Zk<&kE!3zI*+F|G^)4{agRm|LXNe|L7ln z{l-82&1yX9=99`v)HanDzBupybQO!fd;Q?&fAIQ+|HCi7{^S4XKYsoCufD&&_fub9 z-@d-B`G3W#ANv9Ef8uG=+g#2Z&J)-mLF3%?9r3`9GY5Sll`3iv-rg0Z z+y0JnIGP=Zqn+49JUHUQ-cnumTmrFu(U5uW29j99{NLwE$DL)mdN=Wxo4Z*2x!?SZ z+xn@is9ChYOEdA<2HZRJ4!<#XaLuekW5&ZN-t+NL`9>g|m2!UVXA@{?+_x8MR zPdgzDS_9i8@EQc6?P@S#It?6VAEr6q3ox^wH{-qJ1;rb#!JYOB)*X3|3{7+@TVK!B zcE`#oi8dqdc`fc(LF_#(Bp-DU7G>B6OY48ukM?n?HKb)Sn@V(3$#OO-&^>)s&&Up_`pRTgxKt z0BxM`2XdI!ksf4?OJhW?mkl(YbL2_6BjpPQuDJfa8s58MoH||nt9IG!dI5Qo&QSxD zM|ab(Bz3MjuL3N8q}!04VVjXx5(P(o^wl^Mg-Fwh^t=0i2uP3N$z~?koNem*IGJI; zDjq3wHyb6iI6*=Zey%ZjHjD`(dvTZ2d#xZcpbE6e;ow(rS*4}p2es7SO%E}|>QtaZ zb#>JHfnFfseJZmHD@fQkDooKtWR9`2OS}a-LB9+jC#nkw52}R08ZtIlOxX#-xn4yT zD!PrXl6$(hTlKT0ON>92JJt;61st%YQl}ho0=`I8R(AwOjdjIN<`NL-PIqez9!|k~ zJm}o9&|0DxEl7ZPQ!LO8P?I({V!;G;oPU6SK!*|)OhPIIq6TJJVO+IAlc#`=iRHr6 z_06TY>_|>^IKE*QS~9=3LY&>8QN|5Zw>n zcF{3tYUdq5&8;lrur$wzvm79RGv##v!UcSKTsnxc3_ft*DiW65hL!<$P4 z4z2AykWeC=mY*Ylb3&P8lFvg@FvG#B6aoXTx?;ytKj(Z#pWzO_;-MZ-8#4SU?8vbD zO(4_0^`RINJD$$DbcBxpL-e$@t8RGvl`iUPoPmF|^zZtq z*YEqizwh-2{`o)f`s086kH7wfKk_fU{`o)n2VOt>vp@U#!7u#6>*s&&XJ0@4Ge7hC z-Z$TSeeauZUY|aH_Lg*)KK%IGZ(l$9;Xix*=5PJh>FWLUU;8Jo|Nb}r$?G5e>aV{3 z?%(~dU;o8_@&A7PH~-DwfBnke|CQHo{?>24e*EKat5f*c(@&>xbjCOAmSiN&2XWci zrioj;+CDTvWk-bMylMhPHHn)HA~8~Au~+z5#J(Q9?_vV5OB4hFll%jcGxcs3BjDg| zz|eqn)8T<;khoQ{d?vz1AY?m*vpm`c(RR`v`#l!xI!o-wKl;(@PyDez`TFC3;!mA> zzWw&c)k%GwF9Bb3{akYR?YH0d3bogAzJZqj0RR9=L_t*R^XJd6U;3rr_xcNe?$4b9 z(e?BB^EW3ksO;FGbK{wvK)ObLtuiz1jxN`>W!4Gm#_$&lV=G}enuuo82LFvp%ZG*j zwH&f>fMiT~U~DI}Q?2ohsoJnGm_SvAFy**l)G%8JbzpY9J#wX1Oz-j_{%U57qJ3v4!B{dE&x#Eq_ zJ3A3br;|vm1pgcsO!W+I!~16z*QG+ z$5*hu#|QMP!Me8_NWNaHm20K)ne%(y{rNQc$UoMZ&!-sMTdUc}Kt_z!wEbG!QLg0n ziYMYc$cDk0Z7d2jTzN(uOW|fFHhaGY`(3%D(Lv3^EaCyiki-CKK$gGV_Kk?U`gv29 zR4iHBW&#g$XMi(Y?4%&po8$I-vBAgnIY+Z|8li*YBF}BvVBf1oj+I}jcMAjRp=(7* zjzn4eRNx$1;Jn+r9nSbkM@v%L6M^{MXt> zqrGHi=bh%R1xK5DI7M&bM>W5ANRInrJI8xlF4P1taxL~f5}aU@5d(_8#_~@qTvHr; z8|MIXcbAHLhVCk9?q*rBVV&q+s8jzFP($nVahILB-Q84=8+ zfktHa_l^kn_+1jn)PZ%@bWuJu&9+fbU`302?6q=qQh!_Rk;^F>9VDh_Y8)*q$F5rS z+oSiGK0W1Eh>4N+uUM>0eVPQZ4b%58wBE_W(_kIe=%Kv;9k+-9;_{yTG;JPN)-hZp8wUuhX8#tpepwOK-A zyf$=CbPys_F^8Rk+X%uq8z{;Mph#uCh@y@{(i8;q2QxawJcB?TGV2O9<^dk6bC7yi zV~0%ao1s^0C4O+0=ci&uU7)U( z`KW-(t|GH^7JuEP0J_-PAz+PjZreGWA?z~dansF4WjBBf9UZ(CFVHn{eWv}?Ym2!U z4C`1YybQKvPcTl)5nt^N*L&bJgM)4;uu1B29Bl~b;=wbZvCQ8K8kSiBy$=3qw;gCI z8Po4$p~nHW9QgHd>#AgU1Yho&nm;^{IDn8%5G#=}l`o*6PV{wpl4yYKGv21 zMOr0&@|f5{Hj>+k)&zxVo;fA9}p|KI=W|MU7g|Bt`(`rCi|Z@>QGfA`;=l|@&v$!A=zauyf9Sl?@b&b5W6?W6Dj8K_lwu&eE(Ydfm$ zdXoJxmee~Es97g)?v0Yunum)NrlA4=OZn)YvajiT!v}OSS}ju0aDef8y?)^rf8q5r zKl?Ms9)9|KtuCt-d)NKvv);4d+Aipf@%=j|0Ixay{4f6C7|QQXOW51%>!O5sySlHWnQ?06yj0vm&t)z~6i>TXE_7 zmrLKz`#v4nh>TQ`==$zjp?Lj!$<4JTm;6QXI~}12$1T6oUN?M!iAnVDI1ArT77rgC zb^(V8=PrM4eHM;EGnET=ejwtmT`XLQ$0TlmBk;G1yz(~#YYfa8IkJ-LAJ{4m#t4K3 zpP^s$e@GOsWI?6&JzQq zSukoS*YDa?e+xxd=6Fz-9g=0PQvKQB9^_t5D)Hy?1d03eHTJ_vx(JD9;29w~; zphS8WJcr!2%v!%y91%MP=8R#<3a_&3ju!@=B)*rOCWbT2Xc=8AOW}ly-I(iG-AC*m z*`>IQl|&PLQdJlXO+cCG9fmMxvaf3m@Y(+@?WF@D5C#a8_7H!Qlcfe}e3no8pWr$gDGP*+*c zN8GPVGYcc2)`7Ft*=??&o0}2fbG>~O@`}!CoO`%6J(?>mZzvY*l_ic_^wbQ=_~1fI z*cqVSr3DWUtG`S?G)@9c-^L0p6@U%GM~Z7@0nm@FjfP4RF!Jr?E1> zG>g}HXCUqfEc`S&c1}xFBJ9|#Rj`@ri)BzS#tIm11eHwB&_*}vb}V)6s+tx@EOa-=qksj* zltG@u%>gur2*9YcP%7C2r+=P-u2)yw*BXH$83P>wxQx%_w>2zU4dHKRosJ(dEJY%N zPd$T4Eq(zp*@dT!ySo8fX=BuM|J&X9!8x%YpuMF9!4p*WnLP3#0v!UmSnWcEio&N0 z!*5VG#+hpGp}dPkk{uV=B1=osVr(q4aUmY7ubaZ?BB8;V4vp>e4=bA=;}$fJS40XU2KEz|h;*oG!Mtjmhb(np5>Sn79}Z zHxSQQQZ&muBk4*CgsHP=o8RXu3b)18qpcpXStdVa9(wrHRb?(Wov3%id3U0S^M{q4 zV0?Fm+X>CY{rU9@G|};wuKGCE@ECN%9LIbb;Et7rYV28jZPCLV5*SUZQ$IPerO!@K zVvMT@Oy5{G`Ip#}z6%kG?YPI)VMZGdC*3SGGXZp{(_q)GyEx70=L)u-Rm7v1WUy1_{V8l4OEu!$;5#J5UgYk^Hr9T}Ll_JK~m`90aWH zPb5u8_sc%(Zx#dMlhcu^a|GQG0q4$wa*{w8sAO~%Fl|dgkR-4AJtrAQwQoMF;l5Cy~u0z+`&ifs_0{FAE*1A zJ|BLm@Ov;9vIIHA-VF)$H@o0me3ZXxx(!=4x>kAL^o4;Zj59D51XaRN&eJYmeeAsK z!+f>30@FLn2M~MVoGy)vI-)^EX*$suTYSz~Y5rf&xstzMuOx6MchBc-8&n`VGTRfn zwyym2&6kQ2uQ*KSqp*=qb_Vf*t%S2wZb!(Q&-Q&vCIX13EQ+H~=F6bqGjZZ5lk zW*Woqk~uD5VjE4-({_>ZOIF`pxUb$d8$P%~N%W=61?vbWCZAAWtHGx`w1-`4DVDGu z8JIRGbJQGw_DAwM;m@&SZJ4Ii0ZU;8l^PtX84ziiQEX08IKPtz@`)(X4%%wEz+O$uODht z9wQrUgo20X-;>D%|I9x#)`@@VF$qf)!L0*N zHWZdDytM6~tIv$(2bRV;XNkCi%?!CPc;Si!inCaP&j*HgjECJ#3?Ta-r{UJlQnLHI ziKC|?UmD#@1vVM`y*j6@ecR39(`W}*o=-m+TN+j7*y}}={~gG3HE<`kNG#Ul_Lgyq z>!)ss26;9cet4WpkEt8w?CWfXGgm#S<`KR9vV%+p!vsfs>6xy(O~NF-Bev^a<(w63 zz-S0-v~zZ?Nq}wC)o}n&t}2<5hTg8Cnd2pF!&fXt><6mq{I*CkFtEFeV~ApVdEnK! zDRk{__!#*l;)cQ)RHg7jm}eG088lQZ#|=n~2>eI@H&69#FN0oIS1TxA=l>_NuuC=Hr(m(%rH9T{t!%ftC`igI`}mb z{+fqPG`ijc5GN?^19|uA7Ow8GEcCrTvj%|-5}$V$zCisLk1jwU;DAWrZZcJY1?k|i z0BuFb5|DURfPl(aN_V#dR;Lm8w3NBq1wkpD>qyd|xuGAdO{lhgu<&sSIg3!DGku8z zujZ}!vI1I*W~qf5@cQNlJFE|0)<=tCqg^ z{qMj2%%AzwuRr@||LiGF{iVP3FTeh;|H=R5^?&|9{YS5V^lQKRdi$=Tv9YAi zG`e@xx)9apJ7~gt0Jyo0?5^g^Vnvu z48{tW_;KOw(X7FLa~jFtI%7=; zM|_%CU*p;~;`%uWou^oD*niMQTg9J8bkTSCoD??2w9ju>f#~zF-O|_7pnJW$x1lR} ztJS3%$rbZ_cN$8s?dG&&!uknoh94c+4YDEnRa_%_vvYs0M(GdcpG?BpPo)@B^2u!; z;hw}NOhocH^c-jC37^?cEn8{3JLrPMDMfPFX<{$Ut^doyL(^2c6HU&T-Mn?Mc-w3@ z|E!;7JBxKTlxbMN%RLq|SLbqFZ|Z}}+b88ckxdtowN;UD7UMy(-!8n(B z#7%D>=5#pdK}-4hrb&|H@X@A0=06h5Fs1Xg*`__@CvI2MP&lA`dzs!SO=y_!)CkU^ zqWp7cGG(T8iMtgw_P5W`r`Z;D%2IHv$0okhLNEsl-jQd$StRa3|>Zi!Z6_)iGgV_ISPTw;WQjT71UDsR zwHW3;eA9`w_v&zI&dy{>=qkH0#;5sOw7_lI71@h+Xyq4_Xlv&OzUnDqsyfV(rf;DT zh^T#85o8Zr!|ervNaaVgnu@+9uVv-;0eq^tefV+OYVvP<|dZnUX6JV6f6etT2h`-z>saOAG)j<-HwKc<4 zXz1tId6!N)w?Z{Aa6;fp`i}8Ip9NHK7C}UL$?NU}a#0N;NigrR`-xV&+S)-p3+N0G zXk;vijs=Je^yr`OkStJC%m|Diwh`YZqDzxn#t z{TFpMU-I@B02ZJLtzhuI;|QoQ~e=@b^>i*u2K4GX}t#q8U0Pv=HQ|dVPK+ za_Z~%*Z=4b{tsV&@PGLSU%&jzf8q5n{@H)=^&kF?|KRnv{^sBD_H;ebUTpx(&^n@Z zVzZkH!EDnx(ayBndYaCZb0^uHR_qsptmP+9y@zsXd9r0@lm7UeCM>{N^4fN2=h}vE z2+3t%?Nb4K2P<*-suA4T#!X$h^DGI2ZpkZrr^Xa{S-3fGSaNh++WEQ8CDQgoZ*SMu zWWB|l-wG?Bm4|mu6>qQeZq7X3Yc;QyYs+pA161;OM)&@9y4p*GSE3)?=jOiV41C3o zKH)9dbFB}RZK2)>`H9N)4p$RV>|}=~D8M38`-$g3iQRr^s(8Y(k}o=K@zq<60(eEF z%bjWOec(6;plqlU4`@=ZgY1u;QLF-3yXHF1Erb4uN#)10ZCU-Rm;vIW^ITSU`3Xda zoMB~eGscBp(({^u^(#R#bya83M6irfvnpa_*`UkZhRq|SUuVo(#fGc|Vu<)b>3{EQ z@0Af9aF6ZOO4!SMKwn+7$aj3dVYl$25-u0kZ5{>-_FQp)B@1F39M234Bl@#gf<$W4 zQ_+hPl+Prk6Q6Y`+FVz`ypm&cIe(pX@>gYy67j;{E+P->i(fFte@^PO=T@nI@4G%R6J;VDXFJ!{%sv>V8(vCxMp|25ZBX z=DDF>@Z3Ev6egw)vlAM2oQzWpBBSQBtXIrx0;VCOu454#I)z4p$b^#TGm%Z&*ssF6 zjF`az_KMkw<>XqB$gcMgkM-<^J;av2SgAc^e9)H|2lizfMuWI8@#&eI%lu+n+d0>f z>_3g&eWuoJ9Q`acHc&^GUw6!;HW1+suR7_!ZVBIjyN%w6K?ZiVyz{E^;fj~67wd_R zZ@WqO#Qg^(>I|VLjMB;I7Pj!Pvl>`!S7+?>J9IbC2*e_$Y>mHo=e!sMN;?jnJf5B} zJ!_xrhYOe2xDsn^_9{_7<4>c&v63_i7K;F~Du%im@2!YPT-0=yeDnvVyK+Jf7+&*? zo*ksn=Q1wdvV>I{x~KQ8=;yDw6Q9BE^1EQMl2Jo$b+EQ(VRH)4f5M5wt=0m5(Dk2 z5=d6xC0Bp6P>TaPk7}Ri#(BxhlnI%2m+W>P0lXz07_h`X);(E$ zC3{?Ve#!oPs=%g_=WTc+6&O4Xa^AgtVQ`i@>HM~F!*-Mj3e1ugSP?Q+GErbJ;nFW# z(dBrf91L1CSdHR;yV5C5!tSJ6g5L_E=4I+3e+ zGH}o4!r}9wpU#q#KtcPaL7G5=-B;!Rpm@FiqL=a=0fe(S4x;6VOQu(tK!2*h%;3wN zTj8CZ0jOEa--+Ck4B7}}bRPhN$w^B_;}8WuvgLu3OES>d$98OSpskpkO=5=u0hR*O zeq-NU2_QPh|372@0j>F2ormJ@=~Fc7GpeKByTnKc2_%6{Hz0^@iXCGcV#jfdO}X)n zotw3?a_?RLwG!KLNL=EUYfOqMHXUrL0SSRf@G-V$3OZqgJ($bRso1U7n7EsiYt9^Z3N0pWg`6!ora^SZvGv}*jg9X-{kF4EP z>{~yiy8nL4DW|k|{@gp;+2^0t{@VxsXZ!GnKHQ#r?zuKQ+s`2hK++Z|9mULd&+4W^ zGn5e(t*|GX3|*DF5zPQYzjc*0tM$wu%9o+KZCr=Z5tC$tQTD?*80X-&8X6Z?XD8)n zINdlKECzv=l__Ts%yc6NY*G$F0H7teyC1cFENox z2MXSau1&5+0>`l0(vpoy!IceGt80woJt=!O-SF?ZhwfV8d6 zPIucQX`v0ly+NmtN^^dUt4!G7gh(q{_HfSV3l^#oU>5u|UE+{|Dm zo&dlQ32rg2^rI?f;6W_RCqeCELaMMY$ypkV&3*G{z>7?BGP`a{R^&mdYyL++xsF%6u|A{no7J)qV8VX@c1b-=v?XRfs8S@x9ob zShh?ArkTz41iw?kiv*N)$;B#F($tevB)gFJ8B9%_7_^iL@E#-$T_F5XFw%G<=cSdQ zNHCEz{|X^cbr!l!`w>S04HgfNlYt%K>ttu27H7j9!r46c$8S<9d)CvM(i=EIByZ8; zPB`cl(oGo->nH! zj3vIDK5sow$puzMQzQ|AyhBe&!jlO17Hi}2H|$YGzEv506ao<9gGHD)jX9y%C|quC@0TBH&+ zvYhHbT0bb*s{&lO#(0WhA?GQ`LEeRCS$`|!HC7=oV5c;qAi^MM2cSavEwcxPEFB0l z(CGlgW3idFJ7G8$LXSX8fU1z>7)%5xX{;bfCQ4y6&^+5%rDoDA4>!&?($E$Fqqh0$ z-;Wk_F&}p_B+wD^B7<}oSFXE*5MygZUq5C?=ch zLDDh!Q!?)$4>H%S$apAGu5a*xJj=It6k6ajXbQiN9SU3wado&PXeRe5=EoolHNfKA zEv@D ze(D_OL0Ja@gz+X51H{RYr8Hxue;`D zZTt39+R;aEZNLBf|GDkkyU(hc@|j3U$)p`H*9cZ-Vg)jbGIJR+276ujpn7@fz(VA> zaIHEJRb-+Q)5%PGk3hkgBrwJk6|4xFQ~jg53^G-ngXD3H3acUQP7C-lWI&se^7DT% ze|Kz$!`7y!+Drht{U_Q5^)sssm&_y8%3i4w!EY;8LDc_V@nE85c8cCtFce@h&id+a z&CIr?{rlSS$DZ8Y`HpwACzWwd?d%yd; zZDxKUX*V{EHf}Jwtv!-~u*M<>0V*Kak|4wA4-vf>Kqs+%a96Q=d8Jm>MIg3Ufq6St z*f#&bSqMUBq!}tc@HXtwY;~abOj^z09V-!yKGMz|2mwRkTRmu;AFW0;VcNzMfLh^G z_0?d%Vtlb4Z0RuqX#h9VX~)nCI6VXfTx@2>zxoNt%%+@20GCd)?5+^ zKC=eGCDS>^ET+kDkGxj>4BFicEK1dBsdh`7BLf~{TdBVx_7cAD6~S2rAvdmc8hf6y zInLr0y2luZ35egoc4G*_M3wfsUP@HG!qF1!8{Xzpyzp|AK(j1uro5=jIsjwLFKxSU;ILnfc~Cz6{{5MjWtXE$wA0G z|0#jFG-8u{u~*Z+h7xqAZN>eQ?Ule84dk$7dQ~K`AoT~tPPX@qmeM{mT*Y&xQ$JV= z3X&z_yF%m1_mE4TNRX;6o@Aq(Q9Rn{AyT zgH6Ot+EAJN8JG#^U+5#*3_3CSxF%gx+pPGuu|Y{+6{jhD85gATI2&6NVKF3^IXy zyp9j#%bh1=8c&C8?VtH=vvU&9v!r|Kc2f6iTwh>s2OBF4E$C^b1>bim9;s=+5Tue| zEPGM(m&gc^m&j}C8x5R`{o-r5p8gbUIxu6cL`oXKe82~S6X95rR+C@pXNEjxHN5aQ zF6Ow4p(gy#c8##7Yk)Wd&k_V5{DGXicp}j6LsfCg;35t=G`6fI-}t<(g2?Zg!b-21 ze5oML1ye@Hrey#1_*_AZG3$LC@d#pO$ZkSUN-^6rOM4#trbS?tx)Zz63@V z05k(McwWvgpQn6Mg}55*)IXw36hPtq`I=l4?v#M*XkAs>M-UhQ3na1CeVKe_u0dK6 zq<>t4>}OM^(QYSN0g!%R*odAZ&_%Gb8g2yOWFJOAPJtz-p#&oxz|3c2PTrER12LJ| zmooz^0|lvGCi9aVGg*e7I!&xFCvb zA1WUK`z@JQKG$6rI_C;d0ra4*qNU$D@o4}|~dC1_D z*MzZTk|83*8$5a&fOS% z!~w}zFIP)KQ)%sZJ3BanuzQ#&DZz0#&MIHyzE0CAJE!!!tacE7Dt0iWK&Op3Uqo6J za={>|MJ~Wc(EwPd1%St+Z&Ms-)#2 zJb%5`s|k=L+ZQ86H!5t7Q~(4#p@5m0s(ct{`@o)w)^uY9M6S&slZFts1f7Xr0TU*DzwCkl`JO?|5ud=g zndL@%2llWp#c=Lrj8|K@f*x>gR|d602XdU6@hv=SLOLy1A6!c1hnY-qarxzF@;BZ0sMt<+(a3$}m4d_g z8mX@K`Aj46Q`Qq$@Wc+#2KM(%{D)qk?-tMDHpu5LXZwgLWEJ?~vr;E&fX1)MLlVSR zQ0!Z5EestlkQ;YK#bXVmC3a$ckthJ(vJMlz zH!eG*3qU`ENCPHt9E6i(M3`_2^w@%w#Uzwes=>y^XaUh!6@r{Op%yUPy(sut7#*9N z${{yIGZ{lWOSS+33k?pbQ74(g0OGJwXhj3zKMU6C`LmPC7et(4D|cL{UrmoATj0Mk~ym-fHZjY`LeJ0iJPrVT>?a)=AgcTd zU{7TsYtFSr9=#j%%3x~d&{4YYh$-pn+ zEFd_-F-|z|5bwgzs}+$YEo$v9TsfosaWsp>()>3KRSq?|<{sG1^>PfpjpCx3tb%U}9K?bqJ*Ywg@~ z&uNQG2LrhGgb`%5t>8IvW}i7UNRq)iVO-N|ZE7{DNK`RT{+WOZHeSXHlNX5xE4^wY z#?!yDZQHi?>%abMZSS7F?T`NWzXW;r5CB(=ynvK58nDX4!DFhwx&Ewl$6i(24Rk8U zJQcmG)dAHZO<9V`X9bzaWjYCBD3h+m(M%H~^`(rjtUdK6Dncj>)47h;snCItWR)NN zuH|exd1lH0BthZc{{8Nxv0{^JoOI!Q*w-p6ntH&-?$PRvP2A| z)oFiPKU3@A(xR&@u^mb>KP+)Y!=N z$+_bB6)R`W)~uBXGK`(V{@@G6SK?`3s~I&P7L zh2F6C*l(${qli}m8wSCBqnwq%KsW$NgE+1f{#9O^s${6@l0ESKaQbt8lmOcheBt;K zAV_~SOLNqeOdCWJ>M$nC9EdbYwjzM6$uy!T{IaZkBDrwxHQ^)^;1D>%IF%3Te$#gw z|mWm2=Gx?nwv`d|$E!YK|jlIS_1iWEYDDC3ngo$4xds=0RfUwfF0|A1> zb}$E=0YT=O0Gpw+h!0UuK$j2W5<6b^YurCS#vsDTSsFy0?TDTRGmspT_enr{n2=cK|1|33A0y@`XG&rSk--s!+kt;>3yIR40V9 z6N9S)tSOz~z?IBOyHE5MW@{wLL=?x=ug6AZ21@^qi7E&*S#5tWGw9RFkqh9YQ_(;n zWQG9(b-XVOa5zsi%9YvE0H&hJl&Tc)0GPOcvaTv1#Q?|NQtlVsitAUO*AYnvEQ~zq zL7o*W%6OGIH8?b8jTPErWegl_%^;KMs>P@RDzb46-0nYln4izjs|^O@LHMmWEDToo zzK2a+gCj5wB)C)zoA{dwSpWqX`8;k=GgZa7Phe5cAsQX%+@mBV(2MM)7%s*ua8?Ac z*75LMG-(S+kys+=vKLzZ8Adw9j4D_JqjbOfg$AJW(9;ydvfZ+82}b0#@yY1*4H@xJ z>ElCgvprWc^bH0V_kaYbZE1^lrr9T<2j%pri(fv?IIm!&g3$y4r>q-sG{E|enq zV#ow{M@F5>G$4IE0f^J_2Y+P-KINCv;zV#x^iMGq@*ciaFm@AUqs+EeWVjzHnR?b# z(rxm20(0WUmB3;FIJEK#t#+UXpu1u`+%JeY1ZX6)7JFIbSp3gGXwq6fS2Kkm=m2=S zaguX`08Bk0aHPQS7&xY`qtk+WSEnjLX2F&RJ?8o& z?8Y9Ti7Hqg^sP&rintv(aIh`fIYI)UhyzbqJrDsZOISe!)6@W84-oa2wHvYEY-R(} zS?Jft*L!d@+XGD7Iac=l>FGAx&r34gf7Pmn@;bj!f6wkAwn5tVqVvKAq@34l)TY+9 zUXn-wn$h{H;X9rqf?w4>=iD_A8~#NFf>k%=%2TS91dm~VR4+kiq7qqb4K$JSKLEZ8 zfJZwy?gQI(0A&GE^v@YE7F*wd7&&K46W5$iMPF;em)ZwHUk-$+b^|~7PsbJnBm=#h z-=dk=8Snz{<-KITl+WPHVSvz4xJYjhC?5B65=(i2wWD2$fP=JS zDnTqfv(Qx9j!>0p!{xeyyqOru#L3#a7nX+d8T9uU_*TBl-^Gqdqbv3+LAByDk9<~G zF?9gtt=MZ^N6;L)fY8papI0ygRepMJ*)OTq8~GTtp6j4s{$QgOj~51#j-h5@*C)!? zB)FD|Ok%Tf5|Ei9^M~qUr;qdw9z5*l8+_$I0lE5-oW9J-QxCD8R0+;|MsXbnNe-b*h5+de%_NJso)ZRk^tAW+F+^Q;oz}Ty#k+u%cWDvmj6G4hPVaG z2kT1Uhq?kXBe6-pMyfaQwglRg51`L5&JfcAzWXBinR)ey0ZpJE@M45pxs)g$G>YXw|t)e3pleXyI7>bL9 zg8Ug;>?QL#eiu|V(osD-*ViB1L7t_I)v=_lqOt+FqXr&*uF$ctHImM8Q&KFSqg7K$ z1Nj>9Yr%UlMpYoh9JNbV(lyq|hG^AUl5`T18Gc2sR918ZG1P-F*+FDK&y)p~4AFzRy87q*}-*YDRa>ex)CV+yp^~>|P z_=9q)jwmuVP(34nnhH;`LJG4oV(4S(ccJYPpO0&xR96FEAhdd5UCuRo@vdk56D;Mv zYX*ma;ln|XGOEhBvghSCyf!K~L^I`lf363DVE(kkJzZHoswDU2S1sj810qqpSA^QZi|F&1$$RQQM1cY`^yxRegy zwP^5k%p54!Gy4bgOhXU>U&zP&J?IP1GRcK3s|uE@od+o(aCbd#hpL|&6Dqw+q+kXTfL zJL+6e9i_TS083>I|kC8!^j zB$BN}ovij(>+3owLd@^YV(4NTh;&M#_5`#`O?uT_ z5Ip4+id)bVJ|(w2qnH&#LWCT=%(uquUeye`-|`*kHDvbjDPsj0L1WSHLfc%cbW3@k zG7h0Br$^X}I=8eFYsPo3JJhbl_$;mylx3A)9^9iHIDol>xyCoJC!H?*7hN#Xxq4Qs zFT@~jpaHWZgIBP(;mi%^x75v&bTHU@WnDy0qiR_3MDSYzkkW3JLrfl@4AiBqr2Opn z^GeUGP#R^4RJ`l^gB=fhhIUA?XC_p*=u^l6J%7_mCOpY9Q(4)$cKTC=OgN?^j#a&UaxJbhTNsZKV(k zD~0^tP8yIczHk~O@aL#MP-S6F=F5aH4eU6m<9{09CwrUz7M7seU&W6Hcts%un!r+e zGK$k^*zQbJoHP+quMPHHykHZWZ7<`F;oyXKGT+wPi86#~)(HrUkxCw|(2Qb(&ZO(%}UWM1+%I-87PyyfAuezz! z?-G!OTpI!@xY`pcGC;z%qLEbyd<2z>88pRiN6Jmm6zl`?40W78pZ0^$#)!;ud_!Ue zc}wXoWDCDH*l*+|j5p{3ZR?bm-F}Pp!oD#H+%HbL7*_R~?vgH>qW0 zG_3&0=hF8VTrWvkk{5KoVZQ*c%sr6ri$5bP&S1U!1VZ4r%jkO#e2vg&ZGW5qkC0cu)bJ$Xk z>N$7?xhq|7G|-l+Ig=mO+jGiYr710w2>PqI9?r#b-$Xl##1&OhKshNR`THX9p#&sC zT#PFk+lc7-n<-osV5{j)swm9p;UyVKtAUUhvt;ypsb*3zw#NSp!zTV($4;g(iW1RM z>NT#PKPMF{z+K!bgDNgsbaygS98QTVlo*r%C+h5^v4hR_a~5h)Mt*08Zf2+UaUsJL z85r4?Ly24VWmT(~G{agdeWXt_*IW)zuZ~C3TrPbjc#?=@IgIy!d5X17o}Y{c!vF(K zQQ!#uA&UzC^L6+7MO%hK({B7`#Z25+lw$HwJO@8QdDEa&2MN>~0v%u{_f)T)JnvBq++*dy@N?FFjb`fG|NEU;b^m#5#JUd1Y@gGVE za};+$Dju?DZPK=wV&d%K`XTE`_X~7_!>B`{4Fu_dBcU^_0fJL7h{s;={(O890Bt~$ zzwLVZm;>-DJSG)U*n?sWrIC}Ex4>xtld-m1-4ybM+fKgAV5Vl~10c$N{*b{jioxka zdlZ0n{(F_X$}Tyxl=BFTVC*#9pg&Z;4D!0j3<>m8ztBKSWgS%P^W_;6sk)p^06^<5 z$(mArB=4mPpCFgqOE|CGGg|vW16{{uHVO7RzCdS2W6ZSsnM_q3BtHjAvaONXtQ(Q+ zP5qzr1Sc#ut2@57Zo$)#jb#l1?hH0r(6-^;(bj8a*=6u`*Iw7If72VRqC>OPta8X& z%!MB7XSd8aKs3|OkTC-&0=@tNLk}9@ySiqF$lH5ss}>08|N7@^D}IL1^2)Nmzq}H_ zNBob@qu3*Z?&+_U)wQK+Zd38HIND)Loy_iSJRN;xFP?QUXtL(irx(7+a6&3VUNZ9CIFpSAF_$~ zv#<%B{-iV*L%>Phye>d7yodADAjqTrP`L@XZyiiQZ3weRC^Kuf0k^eXZup%AM}U+i zD+;ZWCS&cQeK=%E0SsY?g9lXR$A4(A%k(It`yDM4KhErXUdafu9&8EmCno7L=SEVH zHgO8-AQ)41mS9}KSX|J_86LXibP^KaHe?-V#HO484N^*|?XJn2Mo*ywXuqVtN8gP1 z#J-DPrP$D@k0Cme;poGG_DL&KlS!gZxoBwz`jUhi`u*Axy#MZhYg_CbFn-rcowPs4 z3kzl;)MNLTtC`p+$fqX{j;#xGjZ!Cwk-1K#F@jhrS0dQJXXgFm(Ui?b_iIs&!t?Bs zW_3M?r^E+rM_7kL+R&i`mrDH)x`Dl&I3{S)|L!s*0$)WQ1;(0|_Qa6+z74u#AAOz) z1{G64?0l?s#dC4*q+kRaU<)gjoMR0i7~LhT<=X)Khwdx56lE|d7#*zQA22BLY}_YA zJ6EG5VP-%u8B8m#@XWAJbTROAjOYx{(q$(TraKd7nX8SS`if=_*Ru ziWSX0%oJ+fGsrnf3Y8)b>PVbx1Qv<~g>RxZC}ktrT5W{U#xSc~Y)8m7j5=HUQTo&G z8v?CUST^MWtT`kda8RLB>|t5wHi22@6i{)OiR&Xz`&|TcRY^GD^Xcz9O{43Xi^ic4 zL<)mI*L}ZcMDRtAQaKNG%8YuVrjLgA`mz4U*xZcDH;# zBV=iGjsm`XT{6|jvEc7q6O@6aAw4>Sytf2}tgQ`sJ%xz>)RrIa)RSECIC)5xMyCS+ z$HxH^agZedGzL;Ks|M$eGwm3TKrOp7N=fIfS42oavaOCsm!zQCVp4i*Y5%7rNd_T z6`BXb%OZ~CoI*^5ks@;{OpC%FouxF;cuOtSPwkX6MWZh>dDP(t|CvJ*Midn}GQ4s` zsYG+bGXn$$k_MJAZ)_y?Tb9I^Q7eC9`NKITU4%UAaF6Z>*QZnl#qTkn-eOE?6vn3> z@DADLnZV+(K(E7LkAu|N#s=+w@q5M-sbDk1K@3I9hR4o?uO7TN+9HX~2&L0;$qZQ^ zq6U~GNkE+0F&H$EVl{3A>`5T8W{mRQxONN}kx$dnKrohpjcVIcZdHa#If{%Dt^o{c z2Bolg(TzEfMLj#gc?xUfcTyRtF9PzBDd|~PVO+5#TCM(~5gMLfg5@y|8NY#pu`YH< zHmx3M$-(u}7|M5??&4+Ai2M-=BEw)N4gm&+NMpL+UCuh+uZzIsjTor=5gR`W;3V4ns%qcHX?WuvSq5-z2E-! zpK2fa@Q2zRx8GsG2UArgDbj5P&{Xnjn~+&)XjWT_KPD7P-eX<;95kc+(KofU!_$37 zB~Kg@?R&3II%rLGxacJQwoaC1appxaRdE<&SsmsvYMSwvc%tf3`*YRSwbRT8|LU*W zh7B9r6<1ttRYm>TJ)mcFE$vAyV6)3k&c5p=9)Om#lD_r#8aPWBK~&GJqjN3ue;^(MX2UQOSq@43ld>KQp}!ZO|^ zyH?l>W0w5J;Sh5f7tRz3`pK}AIuXpMh_-9su}og$K8^c>Dkl0p=~Gw|LbP-y@QXE& zBq*&~<8o2`(Eu*?lA8L?57G(~&nZrKR0V)`D4VoxYF$9cxU{lz-6+z+FZ6l&TXt-as;BF<1MZ$sB_nHlbc< zlO??}2qX5-SS?uZQRS9yL4S`GK4Hhgu13!+NIuR)FoCqaL^sM_a*V})8#363t}=-b zNY?@S2WhNOw+*fX?U4!pNVa{zh@20H_M79nMU|HM{4r=e`bGp$bce4#IEZTWbRb4Np$pa0d=Ng zX=39*VU^Z@Nt@cTPVLW$mwZaKlJEHnAZ7r}BdU+Z;7#ni!h_j`V8r*654{b3a-7*n zYbrk+vCyPABtP&j(#8+=lvk5ujfLYQ84K+sOG0M1okC{e^HC2ti;u+_m7aZk;ulO* z?8^}?>Tij@n^i_F6OR8Vqe6ky(#gs|S}gtqC!TLJ_ff2+FAXncK3a&RP;MBAB0O( zNyWgNKsrR}V0{Ik%pUb=kiqZ*C8tdqbPnZS7opf0aDIx9Tw0_Q3nmp8-$S)lX3+CG zI!!PoEA6JEIXE+^N+uMgucsP6SUm*Pw2yZ>3lkO_jI>y%_4r9?Deox8W?58ZTPWa{ zX-zoD6m!-LV~oG@lB}Nqk7*!DYZPW>L;fXY^H5J_kjOIv@bRx{G(RaaWt{`Sbk5?f z(ozFoLek~noRW*W;iATyvAzB6 zKiz)gU;K+UGc#v>?f{~?YU|^Vkt@)sa&K*LILeNWJQR0OKt0-MOtdG_?7M-#Z9Rve z0PasPq@0rlJ?jlu)QE*GTD?`=V>qjTA4@_-2c06LS2Xg(A*-}OLbnuxU&rROO0Tum zHZwij9^SdL{ox<}LHp#VKG_x)7SidP0T7SK3mp8Zwr~Hw_TU2#SU}0Fr>I0sdozQD zKIU{v*mkbdVGvSpQP+bD;0xU=*fy~hqTl?@UcqDzh+6cR`ZV03{1oT2@KEv5o>pfi zGVU-pX1hUt)83GlXvJ{_Ro50yX`2g84;jQR!?WK!x^jSa+469(Uy42^#f-i_WKi-L z4m9i4hOEM`5|p$%0m{bny~=FH1C3!H5;#UjfFbL4oI~A@peHz|k*0}5?QJE{SV6Mt zC-j5Zx52JuJ#;9(-W3R$09Pj36^E>0@R=@n?nP9{P?}I(Ndg!6#i9%y7|#8p^DlOX z+Pmdd-j_4Q)SgybPeI{z@Od5c#2Uz)DmVvSpZYb!s`-7|9*`SI%3>z5>Ib#2LIz9F znU5Ad&CS+;6~t-$L7P%r6M`l&p16(be5ILcXQpMPa}g)0*c0~LUI`rX+w5cLNDC4t zUFt*?Tqz&W{cxp*s+|gar>$6oY=7bKicYjDBYGu8R3_(sNaWoTRfYsEnJtsdKn3x9 zuRsj2DVWtWjFSi5j7mM}d!{H(?l;X!S#QNH6kwu!V2lI)uLem6-wwN*?nfryVXcad zCPXs)?c>a(u1w+z3I-S|U}vEp^-(E<(jL%xQrocdG!wxls|9iG`Z9yTb6G~Lx3=Uf z?~^(eODSX<_GG-JGTLw%q1mLO0Zk2BD9Ut5TEz#NBNu<@`qKB)EfdTo1A^oCbEcY* zfP?_`bvZ@aN|iR$_acr*06TV7{8^R##q>j~P2~rfY^ZCY5w%s*ip%d{y}=8Eyykg4 z3e0z$O^L!E4!;|amu!Gs3XQL#yZUK9EWM@%$@SKGTM0aCG6w8FrF{+*_Yi(7N>fr$ zL@$t7h-K#5gR0brOwtCX5pq%{qGvAg+4g=W)`8G-C)3wT|6O%drOhfck|s&pr5i-m z#_0iNf=>=!%%fQNk#d1!sQzN8aNsvfe8Urj&UCMz*Tx%EpxWpe>{I#lqe z%gdMm0y;kwu|#6ZF+e7|t<>MkwNx1j8x?khiOsdFvT;(Ve$6Cqt?gbxtAgd~4+hnu z%89Z={1yln2L2)uh+;<0SR!v=6RrU9oS zgEm|cc^b8{aXM@J0D&Ema3cS(*Ex6*0Kt?gZ-dlHv>^KGJUJnV0j*}L5d0XiqtKz? z%X?PCb5w~VfG#W#2}s~4Hxzu33Qluw6&MjkNMSp+5i4rDeqTQ=t)4O}ou-JaM^O@) zEscHFY!iGV8C^wSt_pfiCiCf~&J^nOm77qnra+*07G>h#73?=ToL5>U_>`hAxMs|! zB{Ga&GW$r&vg8v2)8{i9sT64D*T{J@gMfxCL6E@52YSzaSC*~{IF&YxJOo+NY1T+g z(iF=dqiUk?vw=z@uleT)I`miIG`TziDlxDK86bgG4`L+{DFhYQGEXn{I)Frg=V%8~ z7N;t9(y==6R01NCn4AN_Tq^}g4;22vGg>u7iOQWxr93#aJ~d>l#J&fU@P48oHQ)fC zU2nzf?DquDR6&!%Cuk49jN2eIgE6R#G@vd4Y#3W=95Is>gOD*WP$j}arkq)^qfr|u zp{}dS0nemG6;v)c+Tc~YtjZsiNj%mjw{m!awqgJ{cr^B)IOMudGS@s;rDjfJ|5Cj> zBk^oMT~4J@*=N~48rGmC^56hM(!r9Z!O2nx#;S}=8pmd8_L^3`w#!2?R?lTrBfM98Y{p< z$YLdISRSg|3)ov-8XNm4w{weLpZGxsGA7zmP*Xf73;}N%9FIY{4&j~R3}mbj^&BEYxNIFdgrSIhs2M` zCs)Gt3IP934-TQ_oOj{u0h|DZtOa4x0Axy@;^SgYwr7K_<-hyAHDg-?*$QAe=;#%R#qNmx!TBYqQgFF|J(jfwSUrH?g>Jc~{v{@i zj2D$8H(6C?U(5L@kX@|k(n(B;a@zZ}4YPF;f`hmc=Q1%A#=wQ>Paz1}-#*x=&JCN8 zU`#7uSXoRvFe0d1DkNcFXFpYWI{Z}yjF_>@ER9G7T(!iJ6_y79jL9J+AE!Q_1mGg! z%mffBn8a?KnE|bwH5B%?><=o2&)V%`t<2ll#Z=n}W zG*Y=MK8#j{Rva$rOJ8>9NJ!Y7ryP zG57ECyi81Kz%1=qQ)0WqZ?d<14`~sVu28uy7@R*puux#jBsvKMV!x6h3Jz@eoY=zZ z$M9!Nw#-@lBp)9%k^k;%P!rzq<=HVxtU{mWrc9DN1Q0?aplVp@U3eP}Yz!3uD>0&)`Auw)%oV$2Mio@rExT?ranpGH6|U7NO4yy_q)aZVZ_E`u_QY7Fea zP}a?X!<=mdFq%PF!|0Ov=^CoCNbo2PYC3YFeM`_u_HNjed`koc7Co7y8WC*0BtgCm zYJdra7WhaQ2}v(XOH?U?BP^;Wo*_X-0q$T(CmrZLsEcyS1WVG4)QSyOsYuj2*Qi?M z#Q-G}0qjkyor=6HKaaJ~12IeWw)X4f22W&$q(PbVLW70?cAgi5_GPgYeh*y}2ym3% z#&gL@Ju?r%AJIUi`iu%rctZ9l@0s+;^@)L5TO(x5YUUB6_yFCsB1!Gx%*un_8neN4 zEoeY#maH1rY7=rkQ2vtDit!BclJu7wEQh$q+XxJ$bu|RU6zm31O((q?Z%kG%sWZj4 zY8qsQVWoM_#n7*Oi)`@>2q8m4Y-X7!jq|}dN#G?j`O>J4vDkc~J-`?^lf6o#G%GGS zWz~y(Myy|4XBj8S%(-9SQ3;k3h>kgA?{}diE<*AJGGIvm%0o7Yc$xxZOp;&|Be8Nzjs%H=2PX&y%!ju)BNuH!l8t@or+{BFRwY7Hs1sAmIuDiA! zJh)`RA*;l(dw6QRZ^Ll@pU}?C)Kq(R_wM$g4}YY6-~)fzZoc_j)>aPBnx36ybq4N- zG4?U++O?}a{q$4q{s-=BH{NhV`^;xP+b+L+M|=J2-_Tz5%2%|bjy~GYE3)Us(e6^^ zHUWS$OL(mvfBf<7sux|={_-#XvTfYBkum^@9I}Ban*hdu4@J);IjsXCB58)hNgY-1fmI3sEW|E=kq-1( z4P}5~ko8y>JHu+m{*}NaBpdllZ9Lem>O6@|!98FD!gz~?fv;@m7e#=G6-1SsxD~ty z_b&pG@!i!GZ}$l2bHZLX+al#$o|{)`H%1mbC;%IPdZF9gLakN+pi||R+8${q$@eAD zMtLbg?Sc{rfW!(4{kVWvVnIpid z6TnZ=d6Ed=)2ez;5}@jX{6BQcp$}En!d5G5nC5F)Fi|Dcufr=X1F^G4{T;SH59Wn^ zT-wcO8@HOc;h)JM@uTd$WIPY{o+y9L%VDP&AJ372-zzlAb%c$WfT*__5j!HD?~q-(Yh1Qjfp=}ir`EWjUS?a=SowBNfnygXxYGR{Ard9kT$yaE&R1xN1^abSJi4#?fh$2yZ0M%1| zYmw{0zdYwg0+AVxfE~^ih_^fd49BJ*M`BwECbG}ctBV{zI%s{hA1MqpnCtih4@M^+bYxmtCgCLJe z5Dh`{;&-l}IF{?KLGa`&YSA$H=r;)7=J$>2a~Eb4cm>-OW4z==KjMLULwtDkv(nrW z9Adbq2Z_>eBEK-uDU?qDKHdwkJllfF=diiSGx@gOCvje%L*Y@_H9$KMAP`}Qzv%-f zY?I{}3S1R~E6-ladE^@8-e*>`=|f0UmFLQj%EJsOs80q1m1z7hJa>vRCMwF0nVxEtKvG<+Fd zW<`o-s-@uOISq!6fiPj94w;=(V`Nk+P{gor>w%|aei#K})X?r8=}WCFtc9<&W!noF ztOm9nLLCbNhGf=>3b&CqU^qk%cfTwHA_>aFSjbT!Frw=+Or#n&QW-{L7_vi@3IXA8 zO#FJ3VOD{cq@l)=0Opn<0dT#4F13gRzF_b`38o=M`RS=!Y}M_8x&PE`7|?}esw+6i zWq^y|e~(#IvU&xC=!T!tN0DW85HNlSXV5S>EEPwgWddjk-ccqFpg?YI?e$K%rpB(e zS*gAR4Fk<9T^(!(I5C-lmjBJqph%^rmbz@HzKs8*Y|?g_m=E>`K}2a^rJ3L4n><5< zmc0fGAn&*@pxwcsjcdvIkgdviO7DZ%NW%cn%M4Hj&PN?VC0y|*p%bMa;1KHgWVVq{ z->VX645gs7zuEm-9a{q3`FH}cq7I4xl8U1I+vT92xva*h&>(Fu%sXilaw*R(=#?1} zbQJnkJ#IWSE$geihJB7Fn*L#B{FI&JvSH)K_QDswupN2S;qAHS_O$u=c?Pq@_7ngt z4Or05o;`cppZ?jOwg2?K|J-)&+-du5t-Fx@8AjLYcrbvh$@KIrN$9c19%~=}_$S-9 zzx~~I&pmgyfA$N%(2m}^)viUL2q2FoCk#O%Kj_{MyYG&}b=O_j-v5{Hk1B(Zk&(^r zwo$f>5_?i~0%Qq3RHswqfo6>|z*h|%I%%vf7Ckkx6tfZ&j0x{4v*8BtqJaMD9J0DG z@6TieRK9@Nb>HPTBp$e73^gWek+b*z$s)RT$m&?`nTj8Mc-SrqWNMJqZH`fEsqB_p zgXQ^LFkC;!%IUPXy6Zur9NaoeQP&~>(*ByAnX$m?a%3iFW;txa_RF z!8GO6#jF&A7ErsH|A_#q?r~f^QkbeLzcxWkjKA1cgF`tHgwmj?thdQ2IpCxNIIQ^L zUh4sYc}@tQ2765pnp)?jNpNoOVlG|sJ2>RdT+A&GAiI_i;gQ6;k372|X}AL)9N=&W29OU}A2m z+UC0X?mr7JiGQdz3Fj}>+5Wt!*wv0B12~mdI!<+l{D|OC&>v(*55%K_NE1EOR#g2h zL-Y3SW(E2|@~dqn{XH3ph6-I~r)`x9gp+|g(#BA!#p~8-zm>E}PnTz+nePXBwQ9(e zx46G1B>G!Po9hr&JO{Q%1*GARWN!`)WYFxmv zG1*7OvcZX=yqG+NB%ieUSjiPqEd?Zbr~eG?Gu2zn1;Jt*HsB6I0O(sUfFgrdcL>C! z(P%1=Sb+oS?#4 zqo(7G(aC-mVNwK5D8AAzqFP=!$lBl4Hf*_n7_YYOAqA3NbUI?tPXuJvQJ{?WtMXMv z?MyVWUnN6N93C-Raz@GE3Vu!Y`Ykf70>2PMRaeky_SP^7VAqo8s>O8e{QArmLh0v( zfh*ujf&{Tj0a_X*#(~~2CenZw-V`UB4^p5`jV4jv&mZjatFyW$#xFF1xzXjJ&crVQ zbPfAFHIeZs)#EX44Y+Zv+_TJf;#0-X9S_$oI-Nlj4;GJET_6oA6!1T$i5}??qK3gB zI4efAihuwQv;_dy+ISkqVJb(iPtY~05oq(^Ayjb4(#Lj)>=fBk_6NqS0D%f8a$d4; z2%vJ0Sk(sJ4;tm!W!d7U$YAoVRLYq_Hm5=yV-uu2n^g<3kwXb z^s|Om+sevXo12@pmUTyO-PU$J^Guta>DhYWpoc@}`ZW_@{3IV~A%o0CB$b41m4EmF znz#@4q|lDpcplIvX*okxU4*gpU*cQ@XY<&1v;vVmD)c;57(rmsyp@d1e56*N;b70y z;XH4}8cU}!pB_yb_OP=Gs72c@+H%AfX)%h>zu#6}u&GMp{SS zQ}r$OkG4h+5KXn&s3sc8zq~}3;ksTuG&?ibR;E@Bbex*%_wnQ;r;Y4)oyj7g70DzY z>=sIOv6p3MNt^kswAJw{=kT#QDzo%@AU6+}&VVH5YNl=hw?&U+q8u%A>LRI(ghQ-4 zH*HRNSUMQA*?D7tQR{4q%IeHehb)ZNP4T;}LDcJY`G*6F`vsi_{C-(EjG&A!W*)9x zEcZkq!0 zUmq?y&dSQa!&}OA5AX};@Z|POds_jr?FU;_rEe!Ll<4kkajbGNNhY*^-?ymF^H!1w zUi;ZKm(_-?E$(>I|910bQD>a$Yo6>QI9SU0r%Wm`q{99AipSPSreOnoCYuOo+JR4 zfTw_%V=#i)kFEsGpG+2lU#0w?0kpU_7({jR7%cN-xv;dP^_bcnyjFc+?2S~unjN6> zDb`Q13ew`R$BHKefrP&sR0JBJo>$yR&-?>FOzPE2uIeYny?PZf(P&9vEw=H{ogju^ z{40JgSV6%jGROmLp{xdVOzLW#vnFveaL=)V@7dx)u#)h%No%?M-Ud3b-*ujsL6P8T zBK$dLoI#kjT>>jrHxBC|_={E~)%U9X2YR4iCi2~FIKib*i431X#!L)>?ca2Lq^dO? zwZe<221&ebz_&$Z(Jjw}^G=)={t>8);UxggcTV`OL$sM^X zX-1KbuwQD&jyhj`s91AN1VHddY}GZ9m$2EAptY@P?N(6n!b%(ItBc)TG*Rk0(ggZ+ zl)XU^QR58QR~Qe#zA%Qs2h{#jpF4_c5(`+1Gl;}_0+U68g1vayE*C=sIGV$*<_P)sMGN5H1-=d72$bOJ9N08RVIydNUiR6j$KLwOP0!!%IM!wbA6 z#6WytAUYw%Vah6*iI+Owh``g>1aquYwkNhG0Qr*Hf;AGbv%4T}%*6cy5Yh99G((U} zPe)&rq6o^IpC~ARO_WgS$fYz)PyXfNr(_fCSgF(uM!-ddi6Yyy$Ccqvdx@KX$BrKrIW zYm9cN-tZx(GC{jI3Upj2!dxa&m8E3PtK-puyy6fjKu@I>v>NvSJ=+mRSXW7R$QCFt znCmMupFA_rl}=`Vsl%!nMjFJ)>L>|nLIwp9Xw@zMmYr1D!|%)brMSSpX$B2~lxaXC zAYI0cImdT3^MsomhkGZjXP}S@Tj-NUZ)t~;8E;-uo7t+k2z(~LpS*rHPXmvto zk03fNXTKNAl+$2MYcUPYY_|wGD$Xc$mC1z3j8mm^$Ug3s>M77u>~5M!l3A(7E98IN z#X+Hx4yY8FE5vK zN9-z*jqb`WTv&{rKNW0VO!d%r=8ZmapMhbZgxY;YVxqi)-VjMj?46S4_^6o ztacE4B>|Pxy`J%$L3^5O!)ACgMBjh(&W`=&;jY2N1lrYBOD(VbLf(L5ERxmvBN&f~ z13o6&rWCG1_x&ut{x-l)*r0;$nRBYij&|P}sg}|4r#7`00D!U`G6S|$4Ioe^mX?DF2--gbi&K^moMgMocmx1D%f!q;FYPGG@bCi? zAy&^-m=HE-cneINtITMvL>Q?SI6 zjK_~E?}W-7va8qej!H$ApCy)l5Hg}+Z^fLktuZdGaJ3Mr1c#{Gp%#rV_58P#Z29; zG4@LES`$}&UM}7`yp8)8S`=R)?(64u3An}plLSNpRP6L%OH9FpZU8wJ+OiXYAZbag zex!B?!3si^!?q7O?15*Uy(mtuV+IS5S+C~`EA2YjI3|OjgX+oxmKPr>0C@59;cHP8 zL{+y~WEC^9fMlheVs8z;k#+*$B}F*kBDcp~mPld}l|cV~oU?_aw(LIBH3-L`MD-^# znNa*UU4v+Z1KT+5n<|@V%F>5Xzf^3#(t6J4sq!$_5Mx>=*nyb<_ceb+?8PE!=E0_W@BfrrF}Q< zb1pzs6_&F*hewp;Q^BP$k>O|uq{o5g68Cl;pVThcO0<&GL4O}CU z1XU(mhGsA8u)`rFioVM(wp0M2+k+JW$@QkLdf&X0WKA2#n0tl zV7%!5q~{Qc9FE|SZw;w8^~VG;aKyul;qmbKQjYf5EGCDniR^cnUt`ph&(R)$F_wjaqd{s@5wXm%Dn&XeLl*8h#v~$9Y#6l!%)Ak;Vo# zH}D2|ErX?cZ~U)2pe5)eijTRV)y|}0 zinXV3l*~DnCUR>;Q(+v%YJ%~Ib(ghA)?r=99FHm~^24xqH1uWb&`*`6m+AaK4`zG6 z7`L|DlNC_g1P@6?3?MA`9ZrcF>ACiju@eJf)<~?qNXj(G7z{|+3>tHXG6Q{)NIy`g z^d6NUxeKIlTp-8Go+jOAW}C|j14pz{Mzhsy?;;y=$jnpH(EVqt5Y>0S`NNo!r%jE$ zLObQuQ=}p%0wT1f;uovTL3N3Py}d=WFocrlFK9-Qm} z0^8X^2P&_is>*d>R+y|8z_tHj{D*KO>mxEmW(T^SNqpSv;pgTK)h(e<-6%Ol-1E@E+@(9%fdj+v>E#havJ~ z4v`OU5u{)+`@P4gJb3NFiCAK`xr_bnLBM{FkW>)4#`%ZanW;V2E7cYcI@mcg<8(Fy zC?n4LLU5G{59njQ8sJvg@lInPkM*;SEpW;98S#-C$Wue0r7ub6o0Zt?_l}ez-`8W#s}EOKO_ucQu*Vj3 z?)RAWv3W4cvq7C6;qYd{i6(XB?=DAOtc1@2*(dZ*S&ym*+J-~BV-p6VV8|Sz%Rm>! z@91(W0=Pmtd=+{^R-|Ow#B($;1iHn=)F8tG#O?Bgtq`?uvMqp(A%W?UgbKiEU(y}uB*L1#$moaF~UXQTANx)^hc9lydOV!(u115)u;rZ zWfyJPXp)CJ3%%X{?g<$Y2w&~I)myiD;>OhUOq-jXZnHDqzShRq_hV(bEw6N&A>_8{ zj zG-xH~%Z&%kN-#oAVQq^G+Je8UpYu67QwANx{~y|(Ql8OQ&1;!x4F8a~m7tcKf5_kn znMqo7$##ur?tp6xIIURHX!j3$%lT8i$=MqrU+H^c@AY0oyA!&ZLJyPx-qbutMj zYz7v82=0rdDDvju^Xr*_zG$Sy-0vJKzYld;0$F&DU+aMxB-F}$Wf{{`iTjI=RT=^# z_~+H9pbZMSM?%yf_~6Tz6~%AhtJnjf3B`h0c}R?2_ewBo#Tz6cHv2e+ya?V!3*KDI z)nb29CPNQP8)4X1DxZ7~`P{VWN#F(db9s<_&f%~fIa*hWy(y)fYMV@rxGe9_X_vK0 zVv8UspPu%db};iP)lLbtqld)guzXW*XzO_FL1;9`*xjGbgkn&K1kpJ5EDDg0{Pvp7 z61I$nDX)$9nJ6o?<2=CGvDEzTQ?>?v$K zh^L8pO01`Cdab@fQvfD`K!z1mo=zm}R4RPjF2w{(hwM#{lYsjo;afXmh zky&Y=9|#Ry2N{rV1;(O|ODNg`YUwnnnb@8-B>3(GRo2$nFvAP>hynImG)DOjO0D<4VWU1Z6z47|v*`g2PG5 zTwp9l4r7d=e}wG)aZgF3Y7m>#4P((;6){jGEW0)y^d4_!c2eIrT>~*7ac>SH6##w* z2w4NbLCZlLX>y}x+*=(o}#r9MTCmW;yh-ierEc>$VT|E4oGtaGf7yCI@OE_VDkoHlyY4Xu*ZIb zM=)2?lFWg|b?A8DQl8!GCd`Q^9N!K(WRroRbF;Gpuo-=v!K*e7Z_~3dGt-{lwX1#Q zt6wpob$WJFTRyPJ@50f5zn|IsnVCv+Yb+=4&SS42j+RUPjF<0x=R55qANlL{E5G{7 z9?Y7Vq2AlIdsln-k)7?4M;>Vp-v3~G_~D1z9e3Q(?z-!4d#|67w79s~X6EK{-TUJ@ z5N@871RX}6=$A!ivSv*7Z*?%a1ChuI@2?KpcNt|tqC(rrCjdW9jw&!^z_wAQos9r} zQk+$xx0MbEGU2C#YqJK%^>xz*UQ^NBsfhlt%m9_+kq8`0+bQB3JGT{icDCi$ED>J`oClUf66->OH?0v4B5wKl{cs`g`h%E ztp~syDC%o)%yC9^*&`<*2zUmY1s-F; z6s&Dr5B$tnFnQ_Vq9x}XdideSTgM!;wHt>0Fy~q zv}0*M2R9jjt(A@gmJn4aDaYeiX-gRmZD@Zg&Vuj3zNB2!jBx2}V1EY>(8n`cb6P+$ z8ZAdj;43zw@!+IA3?1Y9o|QOSk>Vr`O|NY@gC~+3`0Pw-!G7d^C5BxC6z~g55QBj_ zTvL--F$X4d@#uh2ns z3qG1ouKLEXizstSX9m!XbOsSKyI5>Ul!-zDIt8xhs>Xst?lBs?=U;F!^W97#$XIs348I% zgT%7Rh3x{=aF75ELGr%7var4U%2X<#1Vs8VKi@N{G@^j7`-Ig_s>EZi|loWf4i>(Vk^hl4NnYd7;3&%(YEuWQ&qNc7;;eboZ-^fG?uz+Xq z)MS+)rOXUd5u(INx#=156S_e_{^XwwBnb)1_@%9aIELiW5SVoS!->)?SCuoWBSZ<+ zz(w$%g%0R|Dov%4Fu|j$R3kD^F<9EUs1YQJPUshkodA<&_)?yPLoK8#5%JPOBlj}K zK|SNYAdtpDNPuCQrAuG{@~VJ$lQM+?x1vX|)uU;-HYG$ldH(zkdO@BB#g(igj61)- zV&mMme{cK9Uw^dy#814f?b*AxJ-l;gd+f2t+GCGB+8((7fp+&jcee)~e4y=o=#lp9 zbGzHVy?Z5VaoVz*E&D&7v$DF<7B(!j*T3#Z+QPzuou%ZCL_bf)+l9e#Oda7PTUuGR zVA`E`-QB)<(>K|M&bC=vs8}_R@kO?B((^|gW0Zw80B^Z%-+p4d?%M0x-27azuQD*9 zEns|47dC8cpZ)A-+P(MQXKl`sZ#^>}$s2Sidtis;zcvx<=oKCP8T~NumtFU=cIKI9 zwEg?{$Md~XrdOR<#SAN%;sEiL<#upsv2EPAsoi(q{p}my_+~qJ;D7~Skfn}+wX2kfk^NN(zXFD@;%bI(54S`qf|ckof$C!u1@f?Yi@X~EVE z9vyx3(d}(-eOueRZ?6aFBHP_GrUfj}2GN5lJ)mIKIny(3WofB>^X8k|-FMyH=H}-^ zHVwSzLMXtfWJTLSs}}T&96G+zuXGYzGb; zXnXeVX}fmqZui`Mcf04FyW3rN-rc_a-43olXjKk2{~k+}ixXtgsB&w8~=2m}7m za&@h}?4>Vjr=50cJ8>8e`}kapZ9g{&r8XfmDYCi zNUSki1Ax2U7nOrFN_Gsea>0!xMPoP zC!cz1JK==m+qP}Twj+-^vK@8Ak!{na4Q+m5p21z}+O@T|ys~UO`q*QSTUF}QPd(G_ zyYF6;ANSsOU%T_pJKE!qJ?_DYo-Bdj9;!D%Y&}S0C9dN1KvvN=N`ugTwP43e+qhw& zz53O!X>)VE$|?ETf@kE7B>x^zfh_;R=fBV%e&}JZV2kY5E`7U?+Y=zVe7)ej^VY=*aERr{nW6;0y-UdaC+DmYyoY`A@Ega z;&dj)bSD1{+4Z;~D$K)IOCLm&bux2afy&~?<MFtb*|;7mLTGgGFie@8yxe8h() z=9B(9`CQ~HzUS+r)e9Q^hVwRd=#dv~Fg?S^ziZfn_|zr&MEsWw~euCDkkC3vMEEU+E>km5HCV@eND|I7 zht%&WGBDQJuBXka$#=pjg1z|PwH;!=GJ*5_K>b7=r@}7^Kx^PI0sGh|RC(~3xz^+l z>{sTM(KmyPjioQa65JC(1r0{%oK$u>4T=oYWvX$I+I~#d$!R?Am){qxHURaqA0)h7 z!{j~SB1y-nj^WN|H3;Y|rKZqsQk(iTvSc+$Uopvo+awk=Ap_{6rmQpGm6m<}#Z1IW zd=<}EKVHX{J~1Xbfv+na#K1EN8HrcX;R7@ldmrQ`@-)wshRuPBCEt>`H!vG~h8rV0 zuC(uE*24rq!|P)~!{IAg9Jsp*o>9n#0N}eKV6#n&-=O~&iV})ii7Cew_Z)}~BcftP z)`i&bIg(f_xv%ege4m0xlq#I9Frvj=Dr<-*pU#EZc~AZj%!R}dMR(_2jSQ|OjC*??4uq4zp^6DcGMq39 zz$9l40;3Xz3Se!_l8Ldg4P_cOX?bNvg|k8qJlltP)(Z@5b-IM~W#57qaG0we@K<(K zGNuPPGiHP3;iFKGlT|)2_EE{C3NmGItf9ybS8lbMISooNKtM}aQ&=E!FSP!GaZf#@ z^u-K4HHuVz=1TFgImw|7#rh6L0$4C^rF^+$J?0uy+DLXKRsjYd_6FWhI(#`E?ge?4 z;)YW$0bUqZSQE>-(VU(dWGz@i&^f9x%Dl$ClnM!s4SR@8x(;pyAlw0^4x0M4IJO%4 zczycETKAuei%S-)iA~Q~t7U5SDF)q_He`~OYl|)pxgIVmMBVjTZ$0zkSfK(3Y0haV<;R{{rXz&=)ki5F71I7oJ4z&9pxXX9pKpBUW+qoGl z2Hbl!?Ns}h|MIum-FM$*6$2fBb+%o#%8I_HM;&o=d&f`zY`f|uFSY>G!a{Fz)B^|E zuCE6~da&@&Ll3oQd397izt|kXU)pBygcD9^?|JWgY-~K=DaLL83!oXnp$?ueE-o7l z?c2Mr{r2zvcDws7pF;<+6UP!=MH%P3tHIP&p69V_g&C{xfL?KI-39b&r*-HHo`n^yy@W-RiU^H%(5SZbimHfNm@L2I ziYwZ|{rlU_M;~c7-gr~{!sou&zWAjtww;eWZ1m>5m6Z;8234jD_SNkH=%uBV_Uc!? zy1nJCZ*B+n@6UE!J?I*NE$}*QRa6`H@%1)pfB1)g)b6)?PB_tNvIh#p|Q?|!#^ z;nI13=S4NXKdk5e& z{bzkv1m61Vxo7vZ2OoT}%}vinarTV!<l2%`xE z^J$OuK-uzg+qiLKJN4v~tsUlaugSt$Vzk-1o^(=BTez=9FW%|T?(%ihhJ|+djw{=X zufDpy=tVDT=be9^C7pEJ!mE5xDOdfkwqb)ks|VLl+P>B^}1X|QDbpKp)-V`TFJDonU`XTgJgnNXa z@OS#a6?LI`1%JZU3I0lWGm|JM$HNXaVs9hp5=+nLaJE6K>;)lqJ8WS^`H3|E`_f7l z%$2~B*#FK1BrdkajET}iU?3eSo-mvstN2_QeUL=L@E5yJKvSbqS7lZP2%{odo>ed;R%godX=bPY z3IERrA(e6DNd=5EA=_6r6S);*ikiv+*Fpyi&>w8Mkg10K0&~a#gEmX|3|V9E0DyLl zl7yhNFZ*q?6&XbvmSX`=<{%+sfU))$yD=-Vj3SrM94d$6i9B~PzK0Iz_&o0e9!4UK z`1CQPtYDfH^qiZ}UIrTc0uPc0evAJ|f(8AM+R~tg>3YR41oQUW=lRx@ zWf-Cad0|Vq?9a-ioI9|7*bbfw3hX>#H1T1h`o*z-an_9`l4c!W)1(2d0)>r&0E+Tt z%01Z30!}x7Tw=>flZlzBJ+5C@TJ!S`^M25G8tApp(1KfnJz7yjp5+>kR%6B)Y;2$r z@?|CkKshO0CXKZ=TPGj{A7>I#U})dI)a&w~1Vl+#0$?*sL6`}Kfp26IuLi5|opj!i zF)&uWAp2X(tMYU^sAQ^(^gRkl4ngBX%q%!AaAFdL$tj=&B_k^iWp^$IlFO2qbfXVW|U(b>#Y}90Na#d`qK6)}zppIx>>=H~`f;S0$8M8eW~4 ziSIBt1Y=VUITxcXL5r9Z5APoIl)eOHs4Xnfe)v6VCWn)!s#`g^< znx1YOHf&168hXl{Q4kWSxjJ#ZU6K7-fJ~%grQ_i3tJd1|>|EQudw2W2_x;DVf8YML z+*^5BTe9TM4t(nYN|3^~JkXwg>Z$gE9WStKW`Yp`&@p%;Hk5*Q zFM09RZPVtB?b&Dd^rLP9QvfgfcRcAO)ygJT>S`I+Y!D4_Y z`qJu_mt1{y`|t-p)OPKDw#|3&+ve;DH-bdQyHRDrXNR5VOXoD%&(zt!e_uP}^wZk~ z7o6X=ZQI%o9N1z(jUHS9fL-a@0~JUr>F+=O_#+nhnVa8W`>?v^ZOM8NsH2?y$JV2d z_KKFnj|h4X5L?z70hV4-)?2t)Ci?WWfyDh~EyV21oPPJL`q{9s(2hIqxOT$v$F+U? zdr-iuvTQw#4>EI~G%mrP`l_wvFs{BP$80;M059vkeEdF-zPGcp3)W_-SM>DPYzKaW z-tAnXaBx_~OWhz~7+W!|S~b$?r=Q+l`qG!Rm%QYfcE#nFwQa{7V_=|jUTM{8U;5IQ+ZR6n`S!&xeyQz#c9&HZ^p0pC z2^^-}TQB-qI(}|rpy%QfL_03q6Oj`|mI5Fc?R4Qc3(|FZ@ZivK#~k0Tzy6Kw`ZvCz zU2^F~R@LUb^TwZFYoN!vZ z?j_f@ty_<7ha9rG&7)N(*D;gd5@_?!`aN#H{q}a(U3at%8@dc|;-FnM^npk6f(0KI zHnbPM=$dxzHP^MPuDY_Fb@th9^QKJ}9P9Flx;=uzNF0LEML#Ev5c~g3Z->{*$++K9` z)$Jo6{z&_qkAAd0`P360xJTkgKT8On$a>u)bkO<^92=9eSgaGp^k{to$9+FKGc z5WEIFhbqT>9svC8!;p0uY0tUeqFq10nb`p(TS!)a6~C*!jRau-Q-mm6>PfQ6;P?>p z5Z%Z?3j7zbG1)PJQfEjqQhPle1p3uXj+9~0FJNM5+9!!Zr5{vi3v!KeTzvDm&TlD> zuVQqHZ_xek{2}vUr-Gc8`ZMas&@ZA}65cWVV2oKic?iCcjvb~W)oi3uBmotdS=3{+ zMzl81IOALFnE@bmY(}$OW&L%|baF-J0>fZ3t?QO9IEf3$x=i4v!dvPO!44w7RAQ<+ zQ!1I5eU4Z~F(H5@jsQ{EvXY<-c}-uFjxokwlZ_R0&IBJ_YHXq=OGCL#9%G>NHe$sX zw2lF5t8^lyB8@(?(8aR>NfA+ObOB@5|()q^~MgQIO8gTw=#!`}r@W@WM% zG~LG*(>F(@!NvH8GtrU62>6-L$$aYYO(iMSs&Lg1pn)ZPf$rSFQ*;gxby7MFrARyWJK3jfbm14TDA zcV9Qp7E1uXWH=c^VcZ&UsDprDMoc@laWI--xU;$eLb(_K+@UC8uccJ>yC`#PHi&Nw zO67QE+%hjeP~68g28D5t(KyiO+ToSB?HGg`#*sm!Bx-ls{NoW8&~joHsuyO)y=4wU zKV)YiloF&8x~Nu@16rdZfdMHbIH6qYr)kVGC@E`Ne@?Esmmy*gC0{~$K*3c$-@%7+ zm^Z9WGIa_V%`XRy!tonHD8c+CP?CF9<`ZCPiq!E1dO;8UpfMpucZlnZb~$g6RHJOq6Ry-Ht6S1g?$)(?y0_lJRseay0X4WY=!4Kg*( zF$&NL?FkU1vCFclbIFkNr*?2uj&vg}Yv598fSyy~8Ggo$M;I#_w5bXRcSs{vc^cX> z53JX~C5?Geda6)p=40EXwS&r1(miEJZlcPP46fyVQ_kBjtaUDZjs5dn@Km;Wz_}Xr zbWqeNS2@h{c!Ix1U`;12N{l?Iew=0`@|-oPvZFI6=K+ZxEaQs%IX~t73(%)S0}r5` zh9*a0j_U=_Iq_V#4C?vsYTROd)KTE@!^unyfa*aQJaLcsoe2V(Dbs&98fBO<4afi# z+$e%9aDb_|QtO}jq4g8CP|h?3Uj|65>SD#JkIp{(toD^JenCJ->`%1fVo(b7;l2IQ zrqups_Gr=@gIqymkjcAu?c%-A?#t$7hs9%);$C6v&;bu1pugY2rk*|i;lKV!`=M97 z+z+i^S@G6X(+-An4RDyZ9b)hAcgOL#*e;5@XK?p3IeI&=xw!@U#opgKWr!^W zvf3e&;3U)jaKQ4i%XZj3`xtuWd4G0a_dc94fM#Q|%B2+pDR=JN*}iepP3_=;gKfj6 zL#?ghiXp2VtV}~3-|yeE;FX;X<<&R<0y`+ayyVaCS@W|qYj*yHRyd>5$^uU;g-W}p z)B4g{KNP(O-J((qw}>yNhYe)n5>PLA!bK0|b65?-n9 ztCm^?3~`?cFj&6gXAaF+d%+9OxuE^ypL%WB^I*@L1Q2FTSW~4~q3YI%w4`*I$2qd+m?Bu3d8J#kSr($cZ3pA435j zpo8O#9w=nmHsd{hQ6OTXE=H?e{ zZty@+IZhj@2jZ<#6xBNZz6H?iZ`V6r_8i!MpiOP;l{|h{mdn#w=SMkj4SJ|o1RBlu z&-+<(v(r{Jbj;CP+fTjyr`k{a#80%7PTFp5*HEQMn=Ftm*H6%`J_j4J_)^vxL)w<2 zI@E8}$2n`~c(v8#_R5#Pvi<0f|Cj}cdbJX4CHvg;S|&C8gSy&nUtE9F^PaCZIyMD@7q{o zA+mxfeH!{LT^4|D7)8L!#2-kcqi-YuobUmVkWdn0v4&%{8FT-T)t}$dAa5o<=UVeR z(k-`l82xbgG5q=0vZGEjJ0w`DFMqAS?aKdo`!N$A2*&)g5z8T8xS5yIg20>&bQ{V zTkL{`jvqA$qR2@4+ez>`p12nyrAd!yxmj=sBt;3n!cJOR-5Ebkg@}ovIGeLpBuL5F zG|!~Kf%2paG)L?FxLXP&u+N$2xM-J5u9 zsH?K)Q{WfD@hX-J%mYE_Y>S#f%Ir|YWC`LLi4mr(*70iMEXGo081`J^gWPaGT2l@?uHKgoU=2&=Sgqs}_(bwsp%fwT;$0jC@cP1cw< zMLl}nW*t(<5!tKZb4{x$#wb2p8+K6S`qVl`{eZspGKiqpsd*8?k~IM z+V=iG|MNJDW6m#{=-~QIOy+R@?blh%` z3B-AY_7TssfZU67f2;~*xm|YI<(5U=_sRfMD{{&4^cT)a0T1+758j+~^2zPg(@t-< z+;Xd(+tKX&6`XG-{3}_Yq%~^j7>l*aYVGpNcUVSuudqTTQ*STi0uJDxI}$ud-aw_+ zzJKcv+MV~@ZNQ?7!ycqC-ty)*x3kYV(}Hst4*<-xAyb{Vms&TbKCp>;=i^}eDaf~#t|qQ4M>3BxiHaU zY`U*sr;XeI5qaE`;m`70uWsqTUv&OO?bm`WYbp?Cf;A>P0WKDzJ^4Hn#uvfe*9;2lg9?@7?aAgMrapU*~>4*jigy z*l0nMuibcKyYi|R*||BL$NW(dyp#Z}J+sS~73Yy2JU-&^BifD~JK9G-`mwfn@PG#h zRy^ncC)K$VdMI_Z6R4blO8>yOw+Ab_JlwFbv0Z-oqb&F}JKx)ufk^v$0MPR$ zC;boabk_q#8`^^pJ=DJZW)CdDG~1Wwl-Qf*tK=f97Y}>t6Tzwq?s9 z9ykg8N%H}VgZnbe1W-xz*+c=+SZL! z7qXGQqtGFPOj^C7{;l}3B@rkWbtddNd!OPkD%R?_&{_C z1p`WNv0zC$HV#mNd-SRVkk!`VzWtJ*H2P-1ytF$Eurblc^c~Ag)W>(f*>y80Gn2a1 zpZ7J(-?4@{#e9OZFFH94ZOQ~kVe)XHZ>fSC{5;q~nYdZ`0DOmgL0>7~kPcI%_}(55OD;^uVRzy8b^|z(Fue>ZdE4F0AI`WIp1e55+>iI8bE@5S2G#dfn0%j zC+-n#&q#7HcEf%La>N>l#H{v@@VvFV1wze$U*a=E5P*RfmubS!`d`^RUslJq!j{fD4YD~nGZH+EZru#+z@%a!W^Z_!6 z>@;uD^f$UQZ3``{Uyn=@$dTDzCVMwWx zOkKb<6;%59*b^7yj7VSJOZG!S{~&gVAI+Ws;nE-$$62Gq7+0!aJO`v(!Eqm33KIqo zNE|h2P@Bsr2w$pf zrEfJn(`ZXTSCnt8to^2$hBW4}8%gsDwo<8MeP}^TwgUD?0%zlTn4>}gB9r0mXbE#( zFeFL40GZ0H+*-j}r4f=mKu642FRLA}C*_j?C#lcKv1c02*fCc^1;qj@Zf+1&0B}mF)3GCXwh!H;UUI{3v{u%;_q?n>G zlFxjckusDLM)YCoxbky?al|;WXIT!h@4p!LI$k%1QfJ|-Za)kE2)}yPks8jjHh7M- zR&WCyhPPK`c+etRAO;V^;9=J#s&C=j*mqCx6$dy?fkH8GnqBAI)JZO2u-Taw?i&!K~&ef@fN^VKiDy1n8RuWAQ7DB91Dv9mZF+_HaY8x*aG zJb5Danl^zycQyXkUkn_@-qCQ4b4L8gq~IMh+VWf#Yi(qA!QT-Ti);J%x=S}RGiPTy z+;RKuK31Ds4=DH1S_lUiWk1nDm6T7JFL(Mm^hF6JWMWId=BgA zXDTF3dv^RQUh%_i^Pz`$^>$RbK(37A>MvA2A%Jtig%`H@g}Jua+tb-X$9Ps@7<)g| zeg+cx4t7}tefq)Zc7D%MN4Im%JJ;5vU(?$<`5t2|^8IKX23xHE{PwrL(;nIRNSj~q z?E5~JY3o1MSHF)T0z;5;!FQw`2}F6-8_o{$=l51otiG}R_h)0>4Ak$}#5_GHfWSb4 zm}w(|@sjUsE76K=urUVpljF8Pl+z68YTP>?qX!*k=Mf+RO@o~yU}ewp0Hjxs^`C22 znRWVUr?q$e`n%h^-t}wkf(y>Istu!0tEB1l?7<>yt7R=iM81o2M;lfXF2r``ns<7X z^FRwehWPSr*#q4!t>DA-kvL3ZK~22dBj)Ef#Xf_-qP}N+j`_t z?N@*KSK8~}^t!fb^CoYp)z;cS-?2)M8GPS^yB(D8!1?KC zoYvm;u6MQ9zy1vtpzDDS3rs?(pjBVAo$Udne&5f3;d5>0BRd(?!@c#{e4o9J*6jX$ z057ykms5;i{rV2nfsbXnBptKOz6({44-C3Sy<*njGvh-|e41 zZmSgQv^C?wqE0It7UtXA-uAZk-uJ$@9eez7ZGTkOIzLt0aJ?6OMXMr(3=M$?k)xF| zrDKb9dSF5j?5fz=u$iIB@V%lRfC2en^C#Qy2}q3liN6N>n&7h7M(PWv&j-21OfhL~ z1b+?|Iz195Waye|r34w3sXF{wdlE(g|LzK1)TJGbs z;u}Dyi%xMps`Qu6^#rb_bQM)7_}%?kAu_>H1TK=!2ap2rnI&lpl`WDuopaAU;y9$0 zC;edY&&hT}q7s39_}@qa6uMW;Qsn{yi%5{*U1Mz%Nev` z`lH$i+NKYKTXA6%f1^X536)g_4_Jwku;2r2ooc!C7ZC6pee$&7%Y94L2xOn%z+|Y- zvpBT)K4c>*->UJQ_`2T{*knS7pybJpNvfla8>Nk?Y;Te0=_Kc!iO&q@$2rAkH4s~z zioxkvfba-$VZUEAWsdRI>Q8g!&7RQq<2gCHE)n!$3p9=$G?~x!CCNw@>LFQK6aqWIm3jiYN%Tz2$LHk~FkPI97>FB8crP-QNSSfZfl(PvmsTX|i~^iWf&|z!2mt}s zmAprgy=FH+(75vhfD0L+AW&`^1Y;ZwizO^dNXCojtAcR>BxRaa^d`AOAVN4vG}OB) zNSieUf8{wUxSVh_xE79-Aol=VN0Cv1!PEgxgHv?O`U_c{Ic}e8|J;njxK6VT5@gBs zN~MM%fZrE1mDhvlMe*6;WRc}tlwtx{BB6r8ongF(bX8m#0?LbO`KP)F zvd+H?gWNtc@Fl*_Lr$}IE)Bo9kLdu3$xyb5!V+WWiM4P6;7u6 zlRv$JD}rTqog4O3GrcuXuPWHkUUb#f2J+i#6Vw~Cu{|T&q*#mxK>Z7@xU3y==%IEV zO+RzU0Ho9yQ6h+y0U9OAH9y~Caj9K+{smSU(q9HT+IV5h21P*5$2dB;+QsizI}7sw|Ad`&2~171*X!@a)3DHeqRH#i!@qM{^fq>`9c2e9<;L9Uj%?`sV!(E ztieElwjh*edDJm4SNRqR6S)gcn_ew3yhyv_C)H{4s+1`MUh{GK9qfOcWn<6k8SraX zF>>zN=d|~{=e_NxfA*)_QAZtVH$V$OpL?7UV<>v;uNS2SP#upGI|#{4*aMvhZP8dR zID-9uec$Kj=G(;=U)X-@w|>)Fr&+dsZyTkFFO-2;2w4A43l~aP(0;mmM z+4amb?ZHHRO5czfgZZ*1>+_q*Cj zr<`O}w^LD($lyXe&g8!Wd4>Tf-NH0Rl7N1<@>-dR_#!h_*fS!DxllQG<9qjrNcyL~{Y;t6rueJ8px4osk`#tY!r<`(XTVC>$uPFVo8@4E$Cd;7nIh4$k={$uSYfAVc@VPU@Q-M=3j z_rGjoXImA#*zF8fa#1(KgoVuv5Gy`V-z0n%`U!+4kkAJ#LBnr;)w=4SfPukXOvn=( zPCy|05s4BU0R1HqaO$576*r(K3S(0SamG%}p8+xHaKdpFpH4yad_H*0zXyL0LtQu6&l56&El_h!6+g;glxz$3UdD|1 zTQxB4^h~5AosBY|_G9ijd}7iezn*^DB+;cVR{tu;7qS@(UUSXsxM(NKQiDHA!ga{F z`Z!-_c_WinlcxBfA#kHXT>CF<$1+w7Y*L@%L8XF@OI!U%$MZb7&MPx=m5KR=Fv+Ce zb-GW8pUeBBEfr}l1Jb-d#wyz=FjWSz#lRs9w9d4P`J>fHaqbZIrudnBE0YbVvkJad ziK1{3ex?10d#-maFs`msP?h7qlXfO%19N`F)yMT0<;x^|B(#VBh8BC{{mXA?w;T7@ zPC6yPFLFZp32RGSAUZKF+Y=qm?`it4t(xWcAY2^Uy=aLy~tAXH^kAszvuVA-Cwfu;Ya%m*!qm^Oitq zd>7bfESj%(JxTyH>v0qRzEu!$Loqc`tjVR7q;;WacvQ0Grm+kEQSAd-Lg2%%NdblyK_#ksH-6~(oo{} z!AmhOv3H6#<+Vkx`BYaPfgwmG>+S0!ffRzmnf>MGn`8!__ihcngC2VPOod)FJaP#tcKv_2l4KXdpKhje$U; zSI_#Ma4^Km&pneY8>!NCnHBwRRW2}~DOvrT6YR;%ZqdD=jlp1Jj050-28Hq)e)w$s z{n%rVx82X~HehKvvTF^bHzgPW1dAuAF@?ktzwwJ+bY=Uk-~7$?<3ILe?bzdvF%WH~ zpI2dL>qM5cRUM?>HGt4`dIVC!xpUwUaGw7w9!|+1$~PTwQ#~y@BLW*%!J%3BvDTmb z%xBwy1Bpw(4Nres0_*WW~#3VDA5NJ2qow{ioYiKroO0AqHR)CCPbA& z^>OPM_0=h$R6#Kan7r%s?E2O)-?e7^b>^9;TSonl{n$Th^Yimwff23sP_dW5X=ssX zuSeMjne7H|2^5Xful|9^qToeqX%{xdX{Vjm{^h^?jrQ8t{D_~k0v&9kH1&s#!=4KS zIe_UNEJhNCtT}%p9cJ=f2lP8w-dnEy%+LNzJM6H2=G97@TAOLp{jinQ=?JhPgFKVC zxTAv&Gy$vt>~>*owuV(bM9ZtigNyB=i!N-x_|N`XJO0??Oa^A9OAp$SYODfi!-fs* znP;A{0QK(OyI4g8**)qU>V>#p4^SU|*x_x*Wjop-n>Sk(ks7C|CsWp?i=F^Rf*UcX z-d=8X#ptRBhkBc@eqNi&?MNuI;7rJX{FlB+53>B=_S@TM|Ms&yW6u31&l-lk)%T!R zKVH6Lhtcy3ukvao3v_nffr>9nG+58Z4SnY!(a0FjDhJmwB3i_ThMlCo=`5;n=4LpK zg$?uV^{;zf`;}k*m9}}yAs*yrn;Enj?mwB{$;42X-@(oqvnfu80+)3Xa?yVy+vFUx@&&$H`T!|=)&K3!edG0SXzzaayW7d9bY17? zxOu`ruP*HYGf&LO*h~Ho6SHxmii>(D+uO#VTux1UwOX%I>y=$C+FAbGJAbad`n9iO z02A5MT6s6V6zI1k1j;?VCVeQk_M}^hR`!n$W6VPn@JN2?-X)+Z^M)y1Y&CgCJ~NY| zfX&da9TKs0i1d-|&78B_q-s;C-8->-b$sLR%38T#Iev@@ZGkwzOfJOOef^~s;!x4S zV+-su*oDsdIBzozY{}LKtw(Zg(kBujGl4RnCHos=$TJa$h z86-|32d=j^p_8*x0t7R3V}V{SYZe#)eb^d&t7FXdEUsXYLF*(W&~LAF?yNNdP{lfD z3O(rxJPx`BPf$bZZK4!G{pCR>W)M!~jwb7prX^usN6+|q#U9DtiVp>CC69LdB?B?U zor9k+708g3`@)wLi&-pUPhyi1N%0NAI41paEg`K#I4Dk~_%W8yc^<(d$Ql1GI-)R0 ziTWAXPoQaeCU`D!y`+smN=oJQnq;7Z<`7VUt%gDZt)}wipTt)AoJ6%bKj3m07cm0c zmz3w!f}B#u6Ud8Zzj^yWR7ufSD2dC1AOZgf?_;0C?-%1+H@2{pv~n9F^EItfDciYmT*wY+1`jwCyc|Co|!cSRr71CJgEb9rV9FW7Mm1Q~~9>fR2)Q z2uz^Wi>yc0K(c|RGa`!v;v<4K#R4pXVQ>%xOp~;eQnjOxx2KVD+~L96QehXPK%5dh zPnV+@y#Wk{wOkZ|eno?#LU$B=s+^0^9gSE2kJEApC)s=1oWTIrXXe}i)au$602}-} z%m(H4xeQ{wVLygoWY(?=n9qPfvbq~3nT3JGnNz7oWR*)OfyJY=tT&yvcpQ`t zc$|Qq&#TCA5*P_BWm%aE*4u&iwFzEKz7oAuDJ6__K3oDx`d!Pyr%d&m_#u9v4>&;? zC?XB^KJk*71e#?)j3Pz(7IGRlO9zW@2~VaIDo&rQ8=r}*F&`rZw8Qd1N@j5=&uWDM z6t;{{||9z1B^qP2O7^ZC5R4l1hg$UeYmF^9lGjN2*^M6+1- zc#KC|NTgl}BX4M{L!II#f!(~H|8nd1Z*BM7eYb&wJv$shB39>Qk#rVQSrtHUt+l0H zcKHjWx=eH?s|PZPfif?6*3UScZcEFHZO02Px0XQ)_OSvsTI&&{UdhUC0Je)u2iu9q zpU_S};|yQhl{^zCof@sm%CW*|?t#2s_0a*|OJ8tV+kD6&91nvJvX)Nf8CYCdar*t* z*S^~Bz5iaT+*<7cq1E2DX~kMM*|i34=GjBFf+%Rq^okyLq;e^F!e|1Ovr&~rH*~Zy z2KyQ!hijxC7A8}uGlNW-xFcaru1B4p{^b6eJ_3{b_|@LynPCBt_ssocjya~i`(5vD zZ+z1mto>6D6c})Cw2o?!bZDIia;Gstab-#4Y~MKk;{^zi#CulB5&Rs1n@&HcpL$yR zjsNpE+6!Lr0+aC`An717=9u(|0Os0SKSQOrZw%mjIQL0kH9+LReqZmO`}v=5XPtYt z1y85fEZouB@=Tjr6%f>_7X5efl)%{&F9{48&4$fj^2a(DWJO~SQoZ^$uWqmXk=M2j z8#j6@%V@_o6|LF&S|Ay$w_p6sXFuC+`@tRM+!+s=XLVreQvcUwD`s@{)mOJuPdm-z zENEYKp!%5!G9V!#tL`y}-rj3zaj6}D?D6f208T-%zRPzw-E|t1&Ir0MPM=P|nZ zA+zeu?~$wT>*M?wAuRi(oS_p5iIFc6_dxPpR=@0iW_SC^pZLjk_Bm(!nLiRJU9XA; zdN47B&?jDgCCLkrGZ`d>Z0`E|C0D=Lf_JB#dTLu9GH&pMFMr?Q4IeZQZ)n-?#Re0+y=0(pv`Ib~~imIbAV`2n=On0g^d8 z?TP;*L9~g$vAzc5Q$eDldjQh1;!1$&%CH5A^Vk6F`>Kb@BS9}|yNcyT05}6G+BqeE zPrgWvk>e4}6YdIaU0onNg8_dGS*ztsClqAwGu4SAe|Ynozr$EI}BV zAYNcknx~k?QQ6KKshKDNs9PVjZR;F|l$h;{!|Dgpw5wt0S+F}=RLR*!1;7hGFV`{b zq)71b$2;#Bo$)BZXnPqxP#lC<-A*?ma$N95c!BugL(*E}5Ceu&fMC$W>cCH^E>9m8 zftwlx@p~!EW#?>a(h3s8xnv<eSAP4v=dRc=R?+U znIwS|`V0N!5U`8$W1*4Q&M;^`xj^_y=7)K6zU6b-7uuZK0xkJme+NHQDN}jl`4TM| zsDX{ZK%UsaLSwL5oK~ujTewes|I! zCGV^al|^EM*~`Rz&Mnn~*y3)SrO!AB3#+#8NUExfC?N4R!hIdEn|(c;_K<_oZ|LTd z1ifS2bd?EyimaZCsvTqOoo+HbZ{$dLf7rW*LtlY$dNH9b6NIUiftCWD-EKX1T% zsA;Ch30qNJdNaWcKB(HifpwcImdTbmHfwb?Y)isf2 zFh=3wzz_(-6zbi(6DzB8CX?Q5@CJ^C# zqCsT&K0%D?p!&7`nflbqb2u~=My&2x;REob%0mr|(|Ctd*8j@><8%(A$_l03%rqV{ zeW*`Vd;~3kqmXPt$;~R84B%1b+w%leX4afI2QZ#;8HONO>PgI%dQlk=a$i9@Tu(nQ z#${RR$nJ|TB47uDUe*CxlyaiT7Y9QPaO&UfXJpLGw#OcQtljXn8*C1Cc1eKrCetOr zm5N_LhQZM8l>_ZR3WG1}=3#aCvdDEiWya zZs?$*pDWR`@Vx@Wo+?PS@n5kCrPYTzv!XZDv4HIMS5_uD06E>BeRg;I(wDwc)({YK z!&s~}8}`0m6$hucwRY{b*ZSEnagGLpo*1XIqta4j;WeZTMWoYnar!$xQz7?S{O#M+I!2nrS^i$E^Y6A&wH%e!Da`bKb~(oC+^p20~L!NNc43Q)hq#l zJTxA`W)GUow2Lmj*a8%*UAGy{Mk_thYxdlg*#G`4<3&_App7KtV74fOZOBAEp}&3= zTFv#=c5nabx3{y;Jk#WzS5M}7SXS-WE3Q`8+U8B0+ue8F)xP%Cue1aE4`kAf+N<)i zfCmY3QE7oKnTwW`BH zN5W;GH3kiuRUSR|_!I5#zxt(UIXUA2VfZI~pQn04!csf@(8Jo#zT+M3Rj+!r(^d?U zt+}6%hUI0nyS!}A^44d5hLF)wZ^5?g^zG*#O`btA25|K`7;nG#5r-eqe&OeSzFmCL zg?{D}MIsK7_q7l=qy98{M1obyrBT4Za&~(4go!@(-cIl>Z+$B-??GdufC#V^% zUa>k;KpeC?wZIt8PUvkKw5hYbVfC`MJ*`1ttlJTXAKn%g7G%97IAqVR0BI9D%jHONpR7u^jPFQDG%m zRK+o(MvT5hx7HC|y^fxA5ite3x`=ywWf*N7&?`ThsAC`o<)bz=RaTh_!ItBEcH9K{YwN zzmG(41PmGAh{Pgv6#{v{RusP^extsleheQO9Z86piVOvP)5k7>I^c?vvH%!BEGsb= z*r5r&YYTYYJ9L%Eq|Kfvp7@3&e^9@qA5^d!CV#443rr9F%BP>FvxmL{o6a>Ae&mLU zQ%hHo^;MLG{8q>%4M_U>49|y5fuBt*H2o{D;)hBCt)$RWY#RxMydU^P?10z>`tOtW zKV%i?O4VB?@2cCMN216*jocqY94o$q_H6M==|1Guac-;aV>M}ob= zd(qV@e#ph-fZy58}@nBgu#BF}C>>!WnW6TF1- z(Q_(7kVoG^80cW2l93@wvtNfcD_|s6CUKiFm%{CXLc{y9aT1+mbO?sCfRoCYAjHi4 z5T!>&mB9_wzMQJX)bNKKR>!wO;p6NA?2m%GTG1k7bi)s4m4p%%u1_KrrU=68d+fm? zcY?9Lq=UFt1un*8>(R3qq$je@Md`qQ`d4{^M0X0skyaq7W*fwuL1XYuxmIiIe%F5Q zI+#(XeAJ$s>=a7WH89=dc2?Vjk1?=P=gg}kRf=J zyg)kwavHr~gKms=sjNkA5WGfKmF{mh!ZBCLI^%keS${c39aqYiR15xljEy=b4d0&m zO}z-Zk>HP&{zj$|op(G326xCm1QKyB7xoeJil{VYA@vyKmj6x~7?{n>@ zn{H}*_v|%2y1d+jHfg)q!QV;DbscAG}^cU2*3)afy)e^zE3(P z8jKRSgPkPILNy$;{<+WnU3Cv$uK1#Eb{|Ui^}) z+7U+{-X4BvXPaA_BfWdOBMZH#zz`YT&o-HDi;K^;i!QjR9edodNkt4;DQ#h%a8Q=o z#*LfW_inwd-FoXS_MMrzX|H5r!V_8)XN7>$Ez}r&&S|51(M|cxQRhQmLO;MF>R?4* zmtL9RM!&aX>ubHbnym>v=pZ@1#YW4Alb<1DIzL6*!Cb4>dO?i7a7L3=hV-?W?Uf1+ zaQhvzYSAhfqSUSb0C0NEHP^I%`cHqp&CkunSufsx2?5Jay3^J^Eog%O$#nww-p4Xw zTSMl=leWfG z!RBUqMOP1w?P#xf`ODj#ciz?3mRH*B!aVH>y4Y*2&CU9GW1s%?XWQ$qzrLM%>M0hW zOOV;0gen@fy83&ab`Ck@kaqdym$wgo@Pj5xEO6M*{7Ngs3$~x93xxYDecpXPW-LJ5 zTjO1P(IxG;86lPnH}6019)Bdmt|=RXg9F zapsxro$vVB_KUyttF13F{HvNyB7#a}r|ET6gd&|6`Y2kf@!Ror;w}B`p*Q`bcFHNI zSTKclqktFb3)Tch(tn(h2bqgDczvyVVnDcnejaM;XIw3|pLzSw+SyPhN>_Z1O)jOO zNI45jW7R!K!0+jQDGdroP*1q|?jX7aNoXThI#Udx@@58f=?~FfO+OXS(J$w2W8K8O zO-Fdrf0Kl~LN~M>#GggrL@EOu>xrO@*e>qBMFkIS`tWO*j2Uzj!O0wh_|Ji*!1nGm zTWBB-SOcwe5z`Y)IA!0okcg`>7U_x-<1ca^`k&aA`%-q_xF6OR_alvxu03%(*)V8Q z{34-Z0pnwQs+7}GtJNv+Q`Ax!_ICpJ2(C3dlEDyk1i{brgMD1FKGu#mIY)z#uA>rn zfFI9*Aczs*Ft8Tfd&Ic#3|S@WQObc#Ko{^N_Iqe)1(+s=j0C*c6t_zST(n#U%Gl(& zOoyxq;qdo-DA>EaJ#&vntfTNejzx$)mGxC@lv9O@4cZZD7vqH_rxMxEEF3u zqz0<Suy8a?_C>PQ)IXnfpaN0YUpZ<|qzMb(mD3Mw^((>TD=mfTCpq~IY^7-`VSgfa;uY5j!~3?7@_7uK{+R=?yp zbAcgfEDBl-&Qz9|=XypQ=G`|E<+QwJC|g%vbwD3;9-PcE;7~LQN_gEEVc%jBbTMG+c0Hp2bLP*erW@}uVSE!P zReL7?Z~>63$mhbUBp97prx_#xUrpNU00T-8K!PPb6V4Cr?XrUfy25MP=Mzqb$co&M zFqxeO`W@|li9e?eCyp;10k$(hIXjmvs~tHc*ga8b zI_HK!Gxl_{)EKf2nLD6t0MSXONmmB6MKw%Wqqx?xVbzJGUn;y>ag*HhLFwy$a@?wv zGVYXfPM<=8XMl`{v%*BZjR zR;Yo-p+jLb_$5PN7YyUXxaUZfks89_kaBW?S96_G24!5mtJ~l+q-XX+x7G_?Vfw?Y4<(wKzsPX z2ipS=K4?Le9x&=ZckkL2=LaImqG!o>z_2=v&YRJUApn>HUJDNuK#95~o!V6ka?P}_ zfBoz2;RkoN?I&;dN*FVq-EQNV1l<2AIt=~V?I)hp&N%Cg_UNNKz41^4^=PQV-Y^g& zjC2#5b_#o2T0GD$xM)Y)zWsz~vF2^(z#rs2nPbQQJ22e?C=fOMER>!--zy4EJYl;9 zh@9X0PQn2XegTbIIAL1O?C~}{S6+EV+j`W|1!%zU3f%fSr;XHsy&G=0vE6&`eGb@0 zaKkGp5umI9h6agJ+($sF^jMsHRog1}ssCm=a%S4-u-~hn@#5ol5YqkyfQ>|!9-K(q zIqcYcS~?}El6;)~Obi7U*Lk6366W5|ujv!8pK*KBqaNk4fQz}$y%pDi18w_>C$?Yu zrC({s9J|dy{Fzw~D$xM<@j3A0EhtPT_MnZN8DQtTL@PyzsD6G<4@}I>_NoM5Cm&J= z?t8Go?F}DJRDU8c#I+A{?>rMoc&}vpxnKDC_P2lcckPKMo(v~js=C9Lruk?CtX0pv zJ)EK%(=Y35bL{hqwlk0=cJ5lwU(i^>)j5zu!(f?Nkpqvh}L3 zrJ9rod@DGzM;KOZxe!*?UpmE!WF7uWa+YyHy-rn%~*SF)hA8!c? zbMtd)pP6v=l|#S{ab#}78W*GuroeQ`ViYr$L!;ta5x6y zlEflhFds?w~5Vz0^>+6JLIjg>k9DqB_BZ0DKPwl*`<=4WQw z-u?UAB^O=X-u#vyZws3j+Va8PRu3l(saD*ZTK_pDq{;;Q*e06gq}p4S;qTyYaWQ_JScw=EP;b7hKDr7w8FGE2stE;Q5lV zKWf{nJy}8BYMZ;g>g$DdbklOV0Zpg?FnvnN%J*cG1Z`z7X_rRF zv{fc&VLlc@&HWHt0n0*sNSAjaA$QON^j$SU5O#~=D9Kx-7s3d_OGvC5*blNFe9yHr zb6SGb2!b*3Iln8$_2_`eJag>1AFxkj4LJ`#a8P|X+84l>;(sbD^ff_KKA|wDQ8A6q zLqenA<8eyyHQ({9+Mxf)b;=Fb&lEdy9+ip{4GswgY5qW*b;qhCQ3%8>=^sYId{RHO@RjH)9~zUkj5P`fhIS}_a6QQoL5Gpx zfJ@9^MWM=h>{!DPX7{lBb%rFnxRDsPMQ6QUp6Dw>0XH;RB z(JYw|HCicqD*_L~F{0!C{os+wd#gG#Noxwga zuuFhS92J}&<-dcJv+@d6c_lGG&EnN{0)b+9kT0YX42A-e-3#pnU3p29k0}njPXKEeD~0RWAD*!)7f;)*NUSO5O+(*akAjAlT# zP(rZJdlR?z;+MR*ZQi`a0!|u0(Jbe9!+%6V(o8=Cf*J8%9dhImN44|LKfitRo8OH0 z=h*+Bm8%gbT8(omy@Jcnq3VH@i!Qp*!2J&P0;Ep6r?!1H(7(sJ=H_f)zkb6FZTIe7 zZFY7(E5R&KB(e=v@^%`izsIv|)&u3A=OxP-_jg&?$2BuG-3}f&&~Cl$)^>2|pn;|x zASUo=l@Zu>*jDR~kyPncb&@;tr5Mw|7sw_wIYzQ%^tLo_Xf!w(FT)ZRy}r+q7|^ zZQ623JM^%_+Tn*CVL{7n#~fqx?Vx(EI)tCm=?1;dHJE2X)i|4|zb?DvlJ?ryyte)E zAODv&WkEWeG2}t4alc{7530Ui0LG!MJXDlL0JR6g`z1Ya(LaCei6`35hj$u%c3SOE z>4DWvn>M$jjykFxf84Ql4p?7PYu^{=>bQ9*_F7aO!M-*y#VT0(vpooP*(H~@3(vox z-EqgA=F?g5fr6_8tF1t%ZoBldOWQ5Cd@lkc(sCT?A9CDd{%)5|ON(fj6RWH3+;h*fGstWW;_NZ-XkP2` zy;m!B9$9ItZEj|^J^ILF?TcUhvfZZ#t9mfgWpU@pS>y4=mF0HkS!cCZzVcOe-qFbS z2$E~txtImps`Rlu^2np@_B-xqk3afoyYIgHEZJb+zJ2Xr1U&nMHg4Kv0k6|eKe?T9 z%Bk&w^Dk&e9(|+*0(-z>tgdsvBK;H}TQ1PnZQI)Q*I(bh{q67AIaAG!?#pU+0ykz4 zpbAC75l~yFB^){Gd8EWtaN0id;p)E1f7MGXX!w)^w zo_zAjwrlsUwtwF~JL9QW4);Ae?C`_dG26DalTO<1Z3&}7tnZQUQv&%i0RKhLD?<`Z zu~S3ekdNcNpe6V|plj@hcEU(LOq<8Kzi#j+xui0Oit;25fu&+K zhgN22yQxfX79dgl0Qh+Q3_4BflKp^>P-1s<;IIHWf4uD<1^oj=XHW!Np8lbC(8!hb z$0Lz7Y1Oblb9{U-3>Ij$N<5@k<3TV*oif-EftGMSdxd4rPrM|KHMv{ioBq=7z(@p5 zIin7_U=NCkj0xpP&{Kd}aUb$R`jS{ztYwMB149BdabU8QN`XwME`@sZj}!Mzu~LJ%@khm@SnjAnqI{<6 z$_(uEKX4xn#?(D`8%q-7N%wh)-yDIfz@Qbs)dVLdcVoY?PoC5OK6SAcG!?-iT*t5i z-YbDIeP7&VV9J6gmC9(vBxC~_ypegAjx#NTEmmqPZej#kP)-NhnsE#<@!*t_V#BPzxi7yv=q_2@Z+2E%Ak7oN!U|y^LmK zlVqyY+A0i?T{^UW3g%+)MxI>*I+1bCAWu)Xarowz1S+s%BCtiLtJGNSPQKp*Mwsjt%RVy;qFPq4MKp*g*TSe3 z@&#Cv!K-9yIJy0APlBup6oxgxZ8Ec3NzBHUsy!iV8k8ciC(6G$b`himh%x;n7OnhY z5J82X(2%VU+BHQM7wEju2#qGt!Z^=VN*R32Y%&I}?79%BV(Dlwsb(e#Jw-S@_ct>f zk%>VgL}}c5to1+q>M$@2=jTsFyIujTt42Ymf?kgXbr6$#h6gik0 zrc@E7l1m;yP`vPf21|tg3EIebaW0b6o|Lf0J~ESq^R3lo)!0EMij)p1JuBbQSXB92 zX>P*d;CHK@nHYsQb_vW^8D*L%j8&XKB{h^~&**50-Ic);v7Ngx=Lg=ST^G+VQv;38)mrgvtr`tkW06U`ytLFl_32NwAAie_`aD+{ zDwO|HmH2xGsJQ)e?RD3-Km7eaXa^1~T3aFqTyUUr2k_uD4>pP)#L`}{<1z~Z_?a^O zngC^K?m3u+wkfc`Tn+?4A4J-Jzx;|9wvT+|BW=%fd)w@M2fMX>8U;_t07E$2^vqma zJb0jOJ!)G!ar<_=rUTVz_mhXk`>HZ2C#r<{*&}z{c~|@XE#G%w)Xrq-jz)MiSf zRm97&=h^B|Wdf=^-tx9Lx4-(} zUs;8RPccuuOW!8GH`<(Wr7xogB%kl)l|vDji-2GcNZay!q=oRYgs5p-xIjXvRzxtU$({}dI$tRy| z^1BC1(;-Gh6RKgnjbGPc2=d(W{af4DZn(i{+SepxR?i%r@#>vk)pzBKu58;++1~a% zx5wV^W5Ag@&|jmChHLt`zVL-Fwa9y_EuX#h zQ%|=?AA77lyL-3MqF3a2pmcs=p&fnn(Y9W;)^gTYmk|dJ>~9xda8Y~h>t5aFH_RFT zpd}uCx9IjjQ%-VH{NpJbSGO(*^{Ug2ezUDD1t;|#M4tU}9zb}Iw`)6a?r%l?>Mgy68e&#NLK0Y0a%W!hB=zSD9D zfQ}#$z;)=ekUQ#=n;#SgiCtmx1CebpTCrl0Xyb^@T3Jvg_;OeRk_e^&|AM|YB$oK} znGA(CvuT^9+fn@!O~B%q6vvSc3od7ByJvB8i|w74h;cf!yA0_w^m%Fm zTekMkAW@D{mj`k(K}JoeEyiUe*M;rQKtitP_;PNOBHiO-}LkBujLfHz8YhA2j2I9ZVb+Hv_RicQay8g@AMG1iTK zOb#RiDx=SwD{Dy_xHs`4@ms{l2Hz*{BYPXX$Mw~r%er{dXe5N>UHxa-v!r4TVzvn$ zn`~uPJSbReR zkLui|f7|Vi9DBxo6gPmMF9id__oI!eL8UyXCnX{L7syDh3R{Y@HZ9KSs8nTJ>jKs5`A@HBde#ed?QHt@4 zOpu-WKsX)ow{ zi5ykmAl7MiT|-03N;0!$NEu8D60#Z+FdzHa*39t|6Of7PF&9t(CVM5bk`u=os{#=K zGKm(%lnWOz&|r*O9vq~SMwLbeWo@c23E_+HsDg>-L?~XXVMHfTaMJDyfV32SssxV# zdj%`P6EHX`WXuEWLqT&XC|j}D0>TT(Oz}YdAXQy{vV>H0#8Y)Xte(QT72-@6rJ-ZZ zXJuAWX4Rx≥mAA!^7OSg%p>0({3?I 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

t&7p`N$OUI;nKG1 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

?%V^1TPnczd~1;ud)$M^ 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 z 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%0ALx%$Ku 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%0DeZMYM>GyjJb zv`BD?&6l%_@~UM9NmiF00w&`X;rv`zlmJ99AK18aobYb19F=b6U3ub`w&29nbdm=e zgv+h_1lwK0-nYzhdmw{XsHPxxhMufdvjRcm44_}(TY+3pY-sZz_Zj)#@23s89)I}# zx8vKZZ^sY+_`Pv*wi;ts4(CcJ#q2Ru$WM7E9#KACihJ;Y@uxYm!LP_r#~tGyE#xR{ zihClR={$IRqmNH)l?9fN>k@#}*TH9}FH8I&JCJ|pxg^~oNrb^v^1c=*OPR0cZ`_&7 z4KP@h&#Bd!+@RF0K)!4UIqWoc0eTLs?14&PKG#SM0ya6*&j#yY(m)9UCKyPPY0jv9 zHs4*p$2r5m2YhIWdJ=|B-Zd#fRAO;r@Faeni_!k>>RC`C5<97HmNL@s&a&B=%v8Vb zl^Eq~jY8i;6#;-=>%H|j&JeCZE$#k}+U&jhr6^lc0we9XkH!6>QKcvHHJ=8sG!mWa zXH0+r-ZL9Q$#re1yhogOVoBXV>rQs(&O;%Y&7+K}Ja*rt1(vZc<(;Wp84P!mO->h1 z|9m*iAbLw2#2jgVB}12_`F3L&QKGr3-Igh0tXMQ3EGZ^l(V$mLNPWi?9SQFVhWcLsIc0?+*<@3WL*!!Es2e3tb##J81#_ zD$h=6k9QUrtL%I@z;PCMj1)0uNx-=8YPBI<{=q;W%akeySSZXE*)b>R0$?`dqm}AQ z(Rxt@Tg>5SnS5g4Af<$i+*05$en~TB(@&tkaP%)klL9+tA!yDJj1>p3{yCk6=gcA6 zTu*J;v`}0Ko~D2)U|?A&aH=v>^kuVpOiscn$f1^yi{;TXd8)Eg+^e-Sq%b5<1@Ne| z4PoDb90g$XKebX@qiNB6L81VxGcz(B2QYvksN6u5u&VZdh@LCrV}|FVvIveN_ggSK z+hqgRS$9tdx8@Lm_ti%p-dPS8>4qPp7LarPF3?y7u7Y0i3^+f{2(L8}6dkMQy1|mR~gk0kYQkj|L($+0Y(W0X~|hN2Zrxz*SHd*_WPXqJV*6u39Uf2Us1) z<1#@?EM>IgPqdCT=TT+IijI#WAT+BPHktk)43iuPL}>keagdpou_+X(pVZnk5; zy-BC{$!0v5t>o_CA15cL@x0w`29CDTMsD8ad^VT`?|09yI}=5>b}uHQ7#wMG7Q6&~ zWAMvy7St@s$MlZL6PbLFwT_pClk#izJ;OdUhjb&P8p(jv@kN{4RO=v55i3;^3CmP0DJz+%iEEq# z#dyQiW`NRvZ?2%1I1xw!HJ^kb63z;=L=aG+We>^;B}Wu-88?n;L1qL8O{XklLIqYf z+s_>zk3$NX;FX)*@i;x*jLqrkc>U}wcx?uXE}lIb&t7cf`rihmadcsRIxirb%?8L$5a5@3hT#{td2`9xG8QKUY{k~eaP&02R{?9t z)rPKc#$F|8?b}JC?j%mEgZZt*?tX7^RhCiiqM#)}F1nvsn^Kn{z+qgw72iYmHCH0+ zX)+mbJkDo2;for}+b0$dj#{p-X?s;nZaq^hA@J3;PlKNg7k7 z2k+JsPT@Rc>qa<}P(zTB1>7wbl`*LbOqjie;IgY3x2flY$TQe-{nzukn9Q&|15YH3 zAc*E%5f6d~8(oS{Tc~J>|1FEFIYeo1-tp`Z&tldFzN=qbvR%C+t5~dx+A_hRdtz;Y zLr%um-##0^`}_~%kACppc;%JT@$Bn~KUPt#oJlG*4-FO8_^)lwv4PIeu{rdul#D0T zfvWH@$Or0Or;#M$#W@v2+6)yuOkHf;*svB#48-95hZax)Jpdm%Uo#(uU-x8d$6;P? zlAfM!H$o;ArlV|;{>Q%??%-U%dIx-bOa_EJs{lXs7ZUp9(k5Q9xi-R1;G;adl2j(z zD~Y7+{!BUNux_HE~CX{Z{QuB__RI z&(c46u%d^Fftc`XeCZ<=Og}Eqqxm>JxxuguFfRaW?gjRG`Jk=GN#g;u?sp{XiTmdB z_v+0oDlQpX*M?_NUzJaSJZ9KkTY&todsf#$qhI5XBf~V5!D27h2HJZYIx7 zK!~kLn4JNJGNtdCC?@>bnottijP2P1%mNwGo+fYL#46xph5!RCO`3t101HG+NYh3;9?*;bnDfq@x>5wl(02irISCm|k&`ccVc2V38nPhMe~Ri7imWEwgfjpp zv|b3*6qvFMmBlvyopYAdRz_w2%d3fOj2h}Ku%Aqj^o=u;&?W_&A?p&7K-2^*Xe7hEGQc10T?t4_bI4QRz3C%5`Va*mN`QeoPb}q;~!If4u2?Ok9 zc*8--)|h4}>(G|BgV(CXNhs22vjpQ1M}fct7U!%f;fkaMwchL%E|g`93=d`I;a!!P zSDsYJKRIAa-(m=MWez7R*jy-=2d$#gg9Kfd0^l*(!sxsnYCK?lyk82E7Uxc#0>cK% z9YLBpD@8aYr|H-#Dyj`5OH!6f=Wl{U%5b$L@W2%-7NZPYe?))E#)G^{-RJ-sfr*lF zR7?P(T{p!^GfRpbCR%3J8{DhP29tiXfCIrE%O3L1Eelwf28g2!pB5N(em5ONUP9oi zbRnLYbw;AU0_ zt;flFI-OSn-G?bxck%IA9kk!=V?N6K@BH_C&73Xt=+VQNGc+rW4*M}~cH41vJzHdD z#n5!jBo4#57e)rIRg_vHm;%YER5|pYdGB0N_BBT&vk<%)6n$*l&`rmKj@sKQ?If)r*mLg zHJ1l!I2PZM4U#{p3{P7=Y?C}ovwCD;l9K@E@lI7E8Fw2r+=rXG|M{pjOy)-{J zTQP30kH+cgX#`u}eEodvA3Yw=pFbPlK6w(ejIOV)W7gN4|21c99Ivt+?c~9;vlF%= z+Z}e%if*^dYQM>oVNM6u2hG$vOOK@Llg^o&g+q%pTyx?g;~WaCW`wjXTS67DM<|{| zrLWNi-FlUg?_C-?Q;|3r{O5B`2hA45s65O6h->KnhFu3-VvfGVWpL1mG~5RCxs0^E z9V3`C9OnmJf!_WkJZ*%2b{6Tl)?6yhM6-PYI;7C3(hQOSr|^ctF`Sg`KMAagk>%kml+S z2`lwQ(lHKmWSwFSU5p4HFL`Y3OUlcBR!9*nUPa5{eqA80*7xW}E*mJGAGv?%( zjpMXncn|lP|532U|F|Dj2{m#QJOAdpbA6d;<$%w8p-hN@>_twJ*Iz+Kt2c)3B#AQQ z8lBc?uZzSr1=-x$?S2gEBHWGhNu#X76y%vjG?#p9#8OUw&gZg#Tl@?9Ih3$D)moBe z&0mpaMSH8sWcs!AbG6<#KA}SguvgW7ONTpbX2EOox7&OfCm5~EaKQ9c)Ov7^;*$zY z)%PVi`u%B5Kx>X$tR){?dMfBAY*^<+f5<|=I=$1*R2L&pK0+{wv!5CbAgR1&3PT4G zYbYRW>dY{bCC3oY=iL#%5t|!UX^BxszIBwFgDhL1um@&DpKcH3rlvNurb>fa3Sh zL;rYrUhY?A8>CarAaKP+!xBPM!6iRn2n^Wb6bH!oihm+QC_0wQ!D|^pX`GmGT-HJa zvH<)nJAhc0(I(uuF+&57cbx+IhJzwGC{gyoBf&t)0_$GdO(9u24?{bBc2YVt#3i|h zu4Igw1TNyk0w)OPG0d{ybdi3l4=qsfnO{+qGUINZRu`8jm| zP-Kjt@@Ml$Y(ZC!41m<5+m%X-8NAE3I0E}VD=RCynB~8q0q_+9XiymBdGgmwz>0yx5J`9&W~NyEV-ynVm*~Xe2A^{q2x; z!7Z9OV<6lmyi5eAd(RY<(~(c5MO1AL>iKzI$N(>CT`~_=kSz?1;QE zWF2aixB`JhtW&ZO_u+x^JeO9rV^ND3Wr9>`7NB8U4PzFB^Fr5UfheTUgR%h%@N;`v9tsw45o+Ewd8W`DZg8w9$u}g z!bxYl=_x&4GZ86wtlbfDiyYyt3c%-@!IA0N9PmsyKqbDQ+d_BVDIb*hc8j(eB>G0{mU-yx+f*F5Nh-yH= zBuaTXD8HMXv1nh?eAb{MWHN%EXCMYT0#`V}FWRui_=M?foB^TD*lhCurh_@>TBX8? zmQ~R@ZU%u4bQ4)KlID2TDZ8ljLM?#sJe5w}YKv8uM%7lqR!d=#D6nK5p9Rqar6Q8M*ul{-rJ7o! zkw(pV##W0ix4a*A?H8%i!6&72I4kS+zc{awv)%A4$Z~J*z+hPti97CycSUB-Vf8cM zIXJZ{1=}#LY_yU;9$hcTM4rc8N4jU1dQuLYRD6LhORa_%0V5_zEd#=k53pB^E}#Q5 z@KJIBtzQlA=T~8zqV)#kUnn*)t~t!})tGyufD)~TnVqk{cHod8mrB0Ntf**=bWR{({d!-?t@1s zpYQg&m}``+=pcL!HXA^EFAC6|XtqK*G>#U*QeJECo9_aa&IhxZg{27|>l+;0<{Vu- zK*iNvkEUO6|@-pEBH z9M7MpPt%<}=vrVcc!S`ME4fzAx(v43pQ_yBN%6C=vz2TkJO&vGr6Zk?o2th2l|=_x zkgdffBZ=U#hpIr}V@=Q7q4I1cHd)W^MBl&WU>*1 zF?RppRSO8fwh$fa>Y-=p+A^OCKIm&!M8@E-e^AVM7LURY63cG9C=~}1n$sl5#7qpD3Q0T+*ReAzN z{GiX$NWixEpF^X;4r>66d};aXXMlHgq>QeVsg9?Ohus5fPsw5P$#< zf=?hWI1h>`*scI&&K$63XIl?I>koi>A1t03yO7pNjy|m3Iosm#zK!N2fS^L4&?$f! zlx=7(l(-y1Y*(;w;>BCazs;61?5l3HQV*n3Y7_@%k&8hxg%Br zF`NQk%4wN41OZ0hJU0l7Xit#*)ngl|;=^ylODc4oq-%tK`*=oqAfb9A==z&X*S!Q*r!i{QGNabw&$M?>c} z2olIyi6<7YL;%>7Br-=393V*+eVD4LZz*WPc@73hNgpQL$HJZ)pmc$rqCVv8{SIB}24S5QtCU=qVS90Q zjd(=Y0E<4r+Knw{;gwOz%uNgGfJVXZIOF+0EsN2El?Dsw*@c)iKJx4^+%oilhbtZE zLW~zZ62!t`0{y~OC|itJr)5RUp#x`w5>Q|eYaIaW3^-Ee-E@fZ^q@-MN}5WfadA6JDROrQrD1|Lv14a5@$@HW|SQYiYWtYU3BK-C?M`y@9#QKR9O+n^plsKHhFJ>d+<{_X|r`4&zIM^$fyU;aDfmo zb*_kFiadIPkOc1$)VLeZF4MbJ-M#N)bHmV;*$ zLmp;;h)z@Dg<8*~rFzC}@i^%y13J419G%@e9j`uoG#=c0B`S)ZJbN;(uC6L^A!YsK z=j6w!KfwR13>>XiJVL9oy|L0!=e0oLB%HI9oz$R-V%v_L5tWjD{1i zxI-I*yo;?>MzP(G|DJ6X4b#T+CJtmU%lHO#R5+H|=FWF?R5?1afGvaAMwaq*2$dR+ za7RtpGG*IKG+}L^F;)DNKKNk^Qj%nhuRI~hn2mdP9W5p#&S^iUebC$2kW8tIDi%T? ze(nd;WWak2bb&X_`NKdPc~%KFa)4{?85q;EC58xrIvDBnf#5B-5yj|Yv3-t}4fmS7!2hUR?LY}Z%csziqPTsr%Nqe?adXItEx zdQVk4AQ0K_yrJfj>zoJvinTS2Zf&QjKdi-I%@WH)aOZKZ)i|$VHwGD`*^}g~l2Q9b zz)!sH{Emv_J9?Y#bIa!dJGFQZ&@}yRrne;I<$ZXPd!VVXZjIxi04m2hmQaWGtx7;=IZ7_*`6n%h8O+5#+`ta z{j7M{&mfaL`WY>wYGmbTTPdoBU#A6!$ge#brY*RyO12m2!F7XvqYt!!w zUvvCHP?iBcm%YL(#9V$OR_UaF(*%)rkxjXPFQXRQXI!Jyt}$_0;P@2ZG*dWJJ$K zqYXG*-1$u*Z5q+CRxHG0Fh9vGz%)`nJR0giq{#^bnFjEee`ge!21^l`5nCfXYeYew z0y8;mE2k2M6obA4u+}r#4$m?dSdrig0*0c6WyQ}Xpz0(N5Sx?96gNjDVV&#+3iXWN z)X>>R@M-}h0ReDX-?Bl$zzhVT%UK;p2Q<1Mbg29FdC(SSH#A}4GfHTQJAFvW<7Y>A z%DC%n?JK>XDX0|R_h>Z0X}JZb10eQOz!atjd;3c8%rnVM76nk7+(3nc(U*WBH(E-% zbo}9E*|)kF3P{h4v%#eV8DzzpZD2DC=rksXtbiZDrU614kp`*Avvtpn@AxI5GJ~QD z9-w+X4pZ}1D72CBS3DB`H+%T+cVlyMG=BKQcgMxWZv5=$zaH!LN$~3uE8skcfo(1r z1HX!#N%}H);)=X}uSMs~0fL|cpT%4BbMh|nOx-yTl7K|*ctUQLla+eHWg6&%RE_6K zMm8gJ>5xw^zB$E92GMwMFj6n=i8bUaf<1i4fQZs5^0{W4_TJ4dOvxLPX#^~E;u^>? zL!FAgtPk5Yp;)ouRM$jr0w>4JbU^q zo-y|_gGI4UjC@0~KihQ{9h!rLT#^<#lL`RNd5)le3MP}ukOIIoWLGm<%xQ-AF|f|N zS<3a)>zVhBgc}Jv+)~ha$?jGS*a8xuFAGCccP!-EB3Ogqy;uKXsBXs#y_GN3Jrh*Q z@mjqc!)PmdN(Yr@4tY!87F-qMkTGHfG4nm=JIH2S%uJ2>jCROumxXzcl^6kDbEgDo zC)N+)x!|4>!uWo;H=I6baQjh9XXMW<)3pSRNWu+syhnOQ@73)o=ZL7KlW+y7 zJhugZ*&C&YE*U&)p8Z z2<&wS9G=mtQi%T-JW2yf{Nk7m`UCpgFTJ@b7C4QFwd6f)zmQ*e{`~BG0E1oS``C|Y zm;1Xvd^x_o{AT>>UEDSxUB zTb+$+AdNLBGRpVVd>*!cj{sO8L^z|Wy$fGTb*7BYGc|iD_Rn88I$?m!@1&74-emM^ zdW(t5i$FVQvb8#9CyPY#Nt%-3)cu4ab(eK%3hLnuAnyyUo88{e#N>V9Y4Qw(gW)U$ zcfpIaDa0e9u}ZA4KPiVTvjjF{H#W1SX!xA!dxkkB|4pfsTx{y7E{u2tVzdI1Y_m-Q zT-d)R@1*Opa)16o2ckPk>&&cxjIgBjqJFP8f?dbCW%Uf`h5Xc=hQX9~IEId*Js>F= z=HGW;@ZF?={P}z<=b4+&);O*OQswId%~Fv!44dtvb${-fa27*X2hch0*-ZqHl7h-e zJg90io~b9r<^%Hg@JpmTNx4w=4&`#4zxzH$StAx4A}M2bp5KF?ZHq(-PDOtp5{&X>0T7XJ~m#GhH?Z!JeWyQBvu#H>aO z-j|UMQ4u2*D+${{r-BH65MV?q!@5vpMrp1H^;QEC)OCU5dz{)OAgMj^_9`hn~s#d<(&{vRg?8rO@g`Nz4?L z1`=R!V(>iHNljV~emXn7M>h3?0vl9AhRa}UAuyG%v7Y^`T2c##r_!3+4;)CgQFe_S%w>4 zuJUm8Q^&qT#h0P2%QheoSy&0Y)$8AlwI1jbtswXSCx01YZHCxZGNt!!2J+W}l5(+Of> zIJiXYicp3Fj6$7D(ibEVc-G`LL63toUU&<>(qJdJl@n0ygCy^nN5yCA-*Bj8kOIzT z@D|Zi3vdGfOD|Y;9{w$1Sy?$UbOBgp>j-?K?>>*h948G^Ex47HGXxu+xhH1 zW(WCuv2PMYRsrMZ0%NuImIYO_8t(cs3%nK>VGE0*30--cQ>TD?WpY7hxh%##;)d(H zO&*gbou<(GEI%N6tW)+DDGlx6s4B8k`i}Xi0Fow3VqcNoX>z!=*A0)di9OtjbiCN2 z(@ArR^E?*G49>j-f))&QaB0p%fdkJ1%9kk9D1VZf?7C0j8R>)4Ipzq~;__?}zSBLb zDpQyPa^6~lF$g*x!09K6wsEH?A@`=kH)1aPLkz3Gy15=V*R!f%8%|(=?x+w7-I>8i zI8XL-&gSIj-66pCqeqX%tB+qFXD4T4ce9NaSJ&6ul*7mAjLue778qcl5zdmDd*QN) zIkt7oO3i=+ZlSyfiE5ZUA&IZT0+BpR>D7htkSuz_zB_DBC z`7txUQh^akQFT zuhtPXx_7o7_wSuYHPOxXW?bLgM5Pf15Oa=Y$$U80ac;82y3-gs!dr;6;HcS6#Np|a zD?RM<5y4xM=aMD$J8%8u$p+TOoa?Ni^~B$P+4fJ+D_YVOahd-IpaRAW+V4u#AndGG zk0#@I-?hP*tDx^kkf`_pwgcM6Gj6)DY((=t7(krKBsu~yVkjM|=}wWfR5i}L*&5Pw z`Hq@vYJ#8kLh!zv-SDR*A1>~K@LVE%-kpiFcjx-o&fkZEFhn1DClqpW? zOUu~WtBFesc_INKSVxXW-wSP{q8+F4B0c%1yb2Up9i0`t4ZJ}#&d9;TLeb;-KdWXUFG)l;X(-uJ z;|=g!;y?LsCw?!dXP39NaA-EdGjYemhG=9Zc$(4Jx5(b6jD^hzXfGBtq>sR|uvI7E4R=Z6Uqpr1U(>Mock{F zd!2_1Zn{P_Uc)ImElNyVp#T$_=QC@{lLfVw_*CcbbKUeLR-ZdBl#nf3@&`7*W&UaYD3W&i5|kVZ-cbjk{2AyppN00J6<*-1@t_UJ1=48W zJ7}JXVe{XfuxfGz%~R2th**q%cJREg6xUh!sL~+?W+4c1VI9kX39(>zzEZcVMMD!% zA^==W?zduaIp+e>04cM-3eC)) zM>LP?HDWRX2yA5nL4Ylv&J2O^l6Dg6NBwM8Vu!+@5&HWbwGxbe4h-g z_g}(SPVn6!*`5?Rup+`k{!!AOaN)|IT#3d8-N);*;;NXBPMCI z?%F^u99quNq5~OePzW4g7&M(X#(+R5AIV6y2`kivV{(%k&pS(Xl{ruDM^*0w|bMk1+=KS&5h)ZQII8PV+CqYUDHaQTEFl8Ql z(4mYkZZFrK9nCw(oW*uKwl~{xb8{1p8T;K~JbU(ZTwh%VJ*?NOTyGfr z6{u)gxAn{3q8SVyFBwj!UrKMmp$PF>eDxqUePAzhDc+sN6~jw9n|c|v6zu!t^MFA3;BHgFs`(r{V+Tl`A;qui;VQc+m~ zoT;J7S1^%C9+*p4t#zZK=*hEja(*)Iot=+&-g3S^&r9FNRHKjv0e2!Vj>wTJ>8^ zSBZ?;tYT5iQ4BV58D%qOz*ME@T+jFRhqe~4+F-OQdp~Y)jF{#FoOV|+f$GQ z%nnCT)i8XDX0*gb&^7mu87lNCKo`3#1I^NeL=^k(nG?QBQ?%fj@Lc_buj=!TF~^f7 z$0qkhP<@72Vx(-f=E+>E)q1>mz8k;(?eE7w|0jPrUVVITJpblm9N(TsfIPk%mC?F9 zow@WF#4R~eA0W0*+^NwMmVs=aEuCe`J+U$@V)1+fFTfD|p6MEIXUU+Z{AKt)L_*w>DFx@mdZ10sIPqx^#d^9fSFcb97&Cb|+?aC;}~#qxM_|fINB3 zd=NYqbJ+6l?xU1Ug588QGjW^=f0DZt{aNaN$DZc@norPJsXi~it#m-?N!vGCN_%xG zJzaHheGaTDiQtEl=0Q6;|D0zWIDOQA?bvzRM)S>1Xe~6A7^5V8fO$U9zG|O$p23-O zlnH#Dc7OhdJyh=)0j+Bk>~I!*nqJIbb*@M~uOtt2IJphqIOMb^N=y&i91)WD$)pYH zwfw#Nhv^q;g&&2#afWsF7^A>oUv*$fTfkc9ixc==_jI98h4Jy35Xj$sMID zqJjuQBkvcr6!r1~75uk@R*P^oM)J+p;#+2lRp?}JLQW4lwAvqikC8MdMB`vZlgn8M zgp(51QryB~(4PbSp$zQk-_NXqF zs{x5xSgpE!Kf$95yajC;aKt8CnYnw!mpG{S!S5Jal+j$H8*a~b7fx#^j74d#-*YZ; zVT9IuG+#%2iE0Uvs~m6H6Wmy)XfF*H^}h36(ibjkE6<8EwYfm>#=Ew;>S zqv4GofT3(~HSrt*pU47`@P)vaqaMz8DP9^v*faZB0|MmFz-#u^EQ>B;21uZB(#l5BeG$DiQAlNMVQu2&yxj8&t-)WsmugIEo8Eha=txDOeXrokM`@0e{eF%vIgt%ia#Ybmu1J&%?yx(SACz@=G-^(jY`PpDkE|W&Qkx(R2Zr>$0!E9wg<(;8& zN=_F5Qa%?Lht7522}=U1XKapVOQ_8_Jv$pGGbprPMP`3g30-f;Zq6#X*^d2mf`p8i z6#_@&c(Wm2XDdDlEE@48OD0X6o}G-xk6#C)4z1rX8KCB&+?YYeyO^7TR;Eqhs|8i%ViNAJdKE>C0Ks)-(T^5v-Q91e^j}0H20Kox0a>2}sNhL#mHz z!HBF%-m|wb#E$6=GTM#yUNzT`Mq)f-o5d?_r5nCz4CB;{`nW<#pR2*<80||_KjuJ z&fby;G-ivr*{W_<7Olo=vx@eTC+pL3b~=Maw-I=n@0_2TvZv`UCJL1fCsvm|LZ@X_ z7)HR0w45g-$Dlj5Ff&jxUTVr(dM?2RkUM>5 zl{9#DADIbeg)%Jl$ojwK4tf44fK zx>F_PTCyhWLA3QF|A_`XQE*95g6^74mbR9h(?~z$%t`WqTFWhir-Z%})65F$I`^5h zky-Y~<7dD4)%chH{9lZ>-+45C`^%@}_~^8Ps}mp9U4V>nZb-x;CXtl!z?t^i=OQyP z&}OnA8A{z)%zt6r1wo`LTCAmJ^w39x&%3>40oi6aiRKa1Yq)|sp^_(B<)!o(14lRw z?m0kZ(ExO@_T``Dkz!|NJ5hzx7`FgCgOiY}6{O;sdSV{m>VQhZ9A}Qb0NZ&|D%Jy; z)Q(e*9?hz(XE{VQc`lzq7wpOZklheDeovxNpZ#SB(3P$3*v5tg=CQzX9enx#>U%_Z z3rqrBiRVk7VJ}@E$)9S0WdJ1$7^R&^DcGKYyMS%Vv+*Fd%RJK{a@n`d#_v2yskowz zX=ssW&KDw+)-`*!j(*kFZay%O0JH{ih`)2%QPfca`>B(Z45?&KCn57kyWhg-SG1`_ zgyzSQk=GMOHw|*fI&MMqm=rOSrBzz4u~~+GINu`&_!2PEDwc9nls|vo%C&ee__?0Z z0G4M^=|n}#SerS|op@NTZRJ&Y(C(2^#ZP0YQWR{t;nCA5WSGRBy(#773Znp# zx!MnV9#%$tK2kkB5u<2*BK`c#0HHC>{URD^N=K|mnL3mQUof zAc_xUZ_aL9Dx97zpx9N3{|ircM+^j+z-#@+7>(Hn(j!zPb}&}qW}7vJabpQeGnHA3 z78M;AZPs2fP_bozS;lwdY{OuOr!iztO<^(zFYYv=$3B=5Om1y%96X`tF)}1{-=0D4 z?ZkAg^7p18h(4e4mVhZOYo%0E46ru9#1?G4k7*$1bCy91WUeWj)&)aXa12IOYYOKV zyo-0k1)8EqmMlwARhDd2zeI?XKlu|3V$IL;6-|zz9VY0SIYJDc`MNvsW@i#yJ)!6Unz;I-H79c@pKY~N9Q*SL4WL2XbW5ALy1#d7(0T9O- z&{8%p79Aw+H4+&*QC}cjubK zXw)<1$fr0{fJg+OD{~yOItDtM%%mQpV^DMlCl>GrgU=Mi%IXhUU-F8ZQDS9VJt~E4+%%AV{W&9*kRE}iqp94dspFpnR9K{+dD7mlCujeeG)6>Z6Umvfl z;_`Uh?Du0oowU1~v7c2!<~W^g<{G9cV*{WbnuzB%TlXK*;r!ZbkH_n8ycO@ezPcID zo{dHqiNnRS?fzOpI203nuV0S!7H1>V`7(dGy_-td`R zd5*A3EqGFA4{C?AwTa;+280Zt(;BpdY;hQxeFo^u+yaCN+^fCIX7oVTt3?d5Z>4ie zm667%lPEj8I+BuclcU~6e`+~6F~kB6C;J}pMYW1iFvkL9F_)q4&`S#e0yO?wb!+Noxz7@yyto7IY~-rd}|fcb`(;N}Vy<;F!$Iy8u?Lk++~pRzelt zp#d&hO5K-%n?@C5>T2A7aDO~}_-H(M@XGl5+porF zpMExOZgyj{-Y9z(j9>SI>V|9?nR}a+LfhSLT;5)fO~|1+(`*%TXmfux4!7qKP@3%~ z=l@L^0{#ceGN?fP8u|#%aQr5q-2w<%8*uD6>`SY-a9O}JkCbeaM|ce}2&T8-PCBNc z?MJpj0-Iy;`giTa9rIEJ)*j34jY_0+ew|fG{I@0WWQc)zvMre^zcXhB`+F?$$NdwK z1OT7dpH+C#c}B4WTnD=AG6=_mIx8kTLMIqlK~e^enNxCIaT*5DyYYq$gyk~QNr`kR z*pG15rwkVkEu`YUECzFOy*RIGLq?pVInp>!IF%UOVcT;HD7NZ&?=}I!ZStsS&660@ zKCOT`9KFCR>1IJP_nkx_oDp{Ie^e=C)kD@=C--Z*)ua0K>mV`59Ah8zyHNY}KPH#6(eghVTjjomedAHuH2A`K46iU`y+Kio0I|vs8 zFPYEB{VtxYBKyM%pAAnn>_seQeq0eUKj&jp@IE20{Fj1+?(>nYh@{u_1){xZ-C+D3 zEzjz^<$rQJA)hIkPlbsyq0l!h5i;BoP93Y0kr&K4?*86`Ws;GOm4yq4FRTS69-mOc z92Y*g63>SX1Q|$~Z2>Hor*>PAy_7k1gqRzJbAb2?DPS=R5B3xKTN2|j7Z&D(whO`Tn-Zn5;>HUIsl-SN6!{QuQ~-g1?<#E%QeSvU=D3yfhV5d%lOkPObK4F8QN_R#h})=FzYf+$paWvnsXm)rz~G( zTLM^FrX%l&2+}g(c=EbA5SlylEqgx{FQ13jaJnm;k-%ROHOn`p@C??~wYzfgv#RfS zU}Px}<&_hEv|hfvKssz(Sp`o3So4uOD^%d*`7D(WjBEjh%*?b1bNo*GLi-<`yU2pU zASztZKa^=_aFiq0`SQK4(Y)%(d8H3|le|Y{yM!RXglFp&S^_2^20zLGLCR2;@Ij7?lkEYIIW7V z>Hcy?xx(hfhSLvY65;rqvoAI$WBl;L?~co>oAGx){pHxKHd6Piqj9v$eQ5*(oYdlB zw!{ieYS|Ah2<~TTT91cpveb+^YzgO|&T_#-$vZ5vWK#jFhMAKo3`_uMf{zVkxv{v& zEM#SpCme*R^3cls9h~OM0QIUc06n5=14%frUPWfkFc`PRAFd}I7-a8yIkuSD);A{6 zW=R7MQrh#Whc$nIG7&+95>$>O2)-#lHDf9aFIK)44yYr^)+O^^8*$l8YkaRD-QN0lTI$z-{S)n+};Hk)YiG@ZKhxwBGeI&5#QZ^q4Tm$QUw zzq1|G`e-_K(-2N}Qt|~25nwOtZ$1Axs{l?1MO+p(I? z;FB3}vI=Yq_|j>}sxLV|DU&8WAW&BaMRvwu3e&;F2GG-dS5-=T9}~k=ZCGyn+%O|_ zXk%m~Fc`uzg(_TQ$urRH3n!1BApXJ`1&LPD1QX2`$t&DVOI#5R=R+|^41onVXtV;J zfCc=y#lqLnvyk^p<_T-B&ZWEya(vcvk$k}O$2ma30)LYsdF0|bqapgm#ec3Bg{ez} zbWq1L7Dq{kw(LyOtGM+E8{$?Z7drJNEA+y1~I;_L^nR`sZ`2-WnY|q@Z0< zZL1VZnFG0@fD&)jeGLsaYsv2RljFJUNo4rPFEJ}J@5yrEWqTPGr3206b6$Y}3S^M% zajcJqB3s=6H@ZC>t$;1QVhc2k+2`F+$Arx7*gWsbP;+_XyvhXjTP74p8;Hln6W&tF zh>|?V87`JArG!1K!44TRS_+2$1rOsNva8E}vQI)c$Z$gfhB@&af0u`vzPM?#&6eZy zi1&xFK3nZV^U} zb-D}Wp#Vv?*wVhln|g<(8(Xl=f(m$}VI=QLAymi1;1U(IG5uC+!Q*M~A+RiXUCG#n z>#WjL7vYJU3Q}YubN;va^If^W6GlC36m@dy)WE&yPLa!55UN8pbP zLZxnokAn%bk+B6D4iye>jya3G7B*C00l!T^DR*xu`(&$CrEmY{fx)E5%p?)qZt`rb_^ju_ZdGD6I24sA}M>dN($Bjsn`LXewCuQ~ohY<;W>wzQ4c#4G~hi0pMYx>TD4ld>m z%RpyRD&WhpwoFQZ98_t#&$KH3Or_LbPTB!I)JrjE0>PR(@uu4=W?(jq>jeao)cS>7 z3ouw;47wnW@nE!!nWQu5QMGB|VB%Ukv+=53VbYb1CG8tv*=HYEnLh^vd(Upj|C;?Y zb!W{tO1e|#f2#c%G^Xau_Ywp2S$Uv4B!8rVoKhde04EHp<*O`t|K)R;)UY)6WBV9x zJ9}WGgi?2rY+Lfy0`KHWp1)zrRvl!A8%m>BA|Yubf2}01ByDs4HQc5|Av{~bc)MT6 z_;gZGvGZFT5M1{LCkAd!wt)#aJM#Ix%(%0_h*EVmFU^IreKsA!)t+VIotRHk5?~qm zMKXvx50bcfG^kvu8dD2$yTPWtHPOq=d<&$RQ>q1!L`Kc2;PTz6vngtU4tog*E;H3t&7==yRy zuCA^lQ~%^714R)m+MLYVqncNAJ+{|3QRSVERJ9F4V8-PpXFA!9#;Pz#tFAHjA0$7s zmVu0O@2Qh4>!EPH^n|_N`57v;|J3fn92F6mK+vc@VnOQ^H%giU@55?lq5=V#?U>jC zdKbTtV_9TqE3m*!USZi|2HW|jqF?ekNzLcNSc`kpr-e3~Pa;LNWQi~}>=_%MRSV1@ zn$0}&^9TRn@4Q{vZ21`BARZ&1)A5EUNI71EUF$T594(Ff(mRi%*EK8&CAVay_HoBM z)?O^hT?u-$MGZwlbjyKgfs3X~RRO|E4AYIOezTww9fOcRYNepog|f#LR4vSh=hR`+ z@4_puU>)U9p%4p{Hvc%WJY)j42YiLkT6C9!A3iIzU#kBerd&KsFf@*jH{HRCGirnZ&DUPDZh1Gf7C;OZclHQ6-STYCHAZHOI(F@i!ai? zgYDq52#JB7rC8X)lN=4l;zPjStZt&XamUu8vLC)t$LmPe^Q5O(k8FC{ZoG8KgWOZf z(8NKB%SrW7;p+)TB6i0;44Beh$%G(a0+(Tgm3hEQqA-ju{H4G*0x8&nj>d`zus16N zkcyf<2d7hK0-;8SRFVbYBfn}S=VET4|_J=+{ z(vtbJtCL0k%-U_XA`z%oqg1r(thpO;%&J}++7bQknP`UMSZSBqIp^m5yR zNp=2j;OPp;Fi?bwSU+&{+wf*1&IGw-qVjA3&}=xVT}?*s7z@qzv{HDi|1=up!O%XJw zv&lv5k%AcX5!=W%008_B8c37Q!?h0RaovqmtvMwrAaN$9_>r+Xqu>b48K8xO4j>DA z#SP({oNioL^Q>W<;QbWtEy75Hr_U@he}hNzOJIZ6grZAc5m2UM0(Y!#GO0k~40gNm z`fIO`AN|R9$FF|z`|;Hm&&THUjmRR?hO6Zrst8O$!O)^?X#m!Pg+=?G*-O%poKy=2 zZJb-fq;lg;?3uw@hwq{Xe9L+(PB1`9x}`(GjX4pK15us5)7V00ffg)NXBx;d7DdCL0nCweCl@wZ zDoylHKnQL(V=-FcR%<+?Daz_vArl33Nv-WCKA*A+ZBrd9)!L`gzFv>Blk;(Qb~e_l zbvb+v;lQ1l`1}2=6gpH_<0=12=2derLS- z#v4&Z^u_0&kL#Ol{Cutx)e7AyXZQ{{rtUC;diIVKX{tiQ8K?)gWFA_Ee!iajfhhDqFLo_I4uw!^xSm9S$mi~UsN->x2(I3FR!o0_KWR!_{xLv=9_Pf zd-u-9C!c;co;-Ov)-g{kTgv%4;6X~{gWf7xH_2t4Y4cNFU0z;~F|NjHz0P?>C!4W3 zIUVO`XCZfHAnEe*DrOg@vAr@mAk^C&u$G{d^a`hpWJ&Vnajc=tJ4n%bnoVc6YkVH<+_VI!09p!cv&K$*)z%VK2J%s z5Ev`kOfQlJDW^$*k|4*6W-=Lp!V?QBQMu@PLb&X+TM#rBUZ-=-QbiHC zA}vIsgEM&1p`V`xTCq9dCzBAg?G?cAAXG8CXrYoUD06A2I<}NO!{4{$P6TLR3x*E@(?Z&S@{@wWF58fY-AD@rUUd+hR(KyQg zT(&1|nXX1jW`2I66u zyT~9+1($K+2*4n~hvYu-$kHdJ=PMy5&qn5x=_3~nVmR3j$Rd*vs%IjhSiw%>HwmOR zUmN}bd4XlSg5l}kG0ZRLa-AE$zObb!-|V}$5J)A{d5!Qb}Bg_XgIi9cY_MivV8DPXK zfc<%%7EEgJ(6Be>s>|o^9TDg|FZma~ho(#F85GlQuRu0e*ALi^l?z5%$9EXVxV133 z=mZ);v=7;4iNl}(VoOgbfiKtYzOqYrcE-n%kim`&LMct}d$N1a12g$0P?ev{%x%(9 z8IL?w-!1zb zLKeoHevFQLP&vfQH8wP1?irbKzZ$6I-kX_ zo#ZVe8kb@TpAxrpa!HA{AV%E*oCzW;bMzL@St&>ng8+q2Ap=6J3@D@24FCml z6lll{YzNJqrYZ2TU+f>wPd*s$t%xn@9D)X})tRa1bGY0gXDz;58neaO;*9Du`5rl; z;c$YWF!I#Ti|?@fJT9tlsUmBARdqB9<|&U~Z5&NPgZ6|E4Cn*6X9 z5%HVqvFZrXfj;@E<`&?b&7@PVtOoHBol`FXPg&`N_uKQ(R+7vmhahBPiw=3q zNA$19NTLGblvE@Ud=`OEGi+ekM%9bn8(C8p^oOkN{NjNG4_bp}L<6K2@-SLOdU-Pf zd!RwlX9TR~EIjmIwrak7ehqvrqzzJs^EmH+_MuP)6YePoeRl&&?NHpJvz57l%kxn- z4LQW*rJ#pO;|(U-=h;Z08M!j*1kfpgr_7=Q4aZjCyUlac7RatRM(ml)<>g3nPymlaD@$wrD0XHP#d6J^vpnUt+io*6G-CriG_K(%v#!)&o9 z3Ad7`heK2&%^~*RdH0=hes*s>d+~fcfBGx}S|_t#=X5$OD%DUHl$p`q0?{3-(&3GO z=AXzs6$sEeL382*@S`%H8>|;?ln#}_XgDf(LSvy(vYH7(I7^%#e?rF{WN@#?G+k=Y zDaC>t(!eUl8lDuz<1uv5#AVSaXU~;hg=5W)C3lwAcg48ii7LXFpPC|IiZ^_3wqT7t zl>CgZWJ~1GTjjWkfX#dcGN56cRuBa4aDou%16#~e1` zN~@x$k;@~2V?bFV3SgU)$T6VJ#UPHEbR2=unvWTuseq=ji|jvX2~u0xd<<4lFPLmJ znW~nV4LHSf(kCfrO~}3JaGiSkc8tyOI%xUZCr`)K^>wt6{Qmd9H@^Dv>+!{xUq)bf zGi3~T6LeN`o%ag42q!|d4G)`Vm3x|U>vDTJt}ZX5-CfGK%{V(dADfet2oOaJy4}q< z>{6~T1Bk$Au_qV|b}DY8%I-$)Y_+UJ3ocK?tx|j?C$f37*(D_hP;H0`SIF1&Lv@;R zkwkfG84lgVE?M5~mIjC^6ATA97V^&drmq#mDdN_)&?l}9jXd*eez z9i^A^dsQiB`wbav7}8B#ij1P8xKrAA=A;LQd!i8mq@Cd+fdwB)EL#8r`UeBRsZ$jo zW2;}E=Tz?pUF0ikbwOY5XaXI%dqcq?&}2CD7;Gxu!u^*Fntw+Hwa=}^S~0_+>6C?? zBT^}jvn!L3#eX$v&y$&Pd6I=R2hz2rww2=bW(4x;(2>{&) zyp-KitQ{YpVf%8~goHt2VdxLn+u7NLwvo3GZT61FXyCK7A>0+`u3wucCqJP?UvN!R z06nR(jVU2Kc3(8kqx^-$WYDwnMWzg@S#E)YOgAja-R}Qozwp49|HMI5_aOCW_*_x? zYall`pVMWy<^;;cV>VJ?U?lXJ-n4(y=I{VM=q-VlZ6|$m@k|l5@GNk`;(Q#-=09pY z2@?s7A6lC?r+*)`t+~QzRquD|eooS_**Vk^>;`Ultv&?bueiee+_V=J3}e?Trw`Jw zuwYX^Jo6r$;|hQS4P2ppDE%dtoQLnYU&#YOyk#cpm`1w2%@%XmXb|Jf-V{0Tzck7% z;|Inqm_1zkR?3KT$;{8CqYKVQBOEXxZoC0b^>=J6w20b~fiR%iDt=l}$c6Euw`e0} za~d$S#~8O&L{aY7w>iyBfd-jRa)5S;UCW~bALjsL6+px^tAVkeW`hUeuN5dj_D*AD zd!%K%>Cr-?3ps5LdSr%~!m`gGNEl!T#GJ{R1h_5W24?f^pg5S$ONw-}Y}7BF!WWJn z@h9b%j^2f_V*m_=72w5e9A$#TAzW*BN1Fp`i@19xr3(`X4$x^ADsWVYJarLel;5dJ zQ051u5whlhX^?5Jb%F;)Pq`({DAJ#j8Kz*ESxbYVoCoIEp|f)dG2L*2qu%Zc!3xk? z;_>`hDhH!qigIt|XjwnVOdtywY-fPf9P5cF+lqNq%R90ol<&cG!~EII zPCZ`Tj_-f}opHNgkN^DBUyj4=baos~TNU;>4TgMORrysA0a;T#gfgzusFcyq6SJ93 z&8UuF%?!y%y*K9-9LfFjl<{<~)ehb1`chI?xDnqY{kqbGKEk^#YX&+X>8>);aPPGT zuk_P}28xnQS_q3}(3T08;6DRrxhw~O&a-gNEwxYafCmQ_!4dpUv+&Gz_pB@f-<1CZ z%tpoxM8T=ztz}D>dWJmq)M&;6N8W;#4i5(_e%M8iaQ3h_uNhhGZlJ$Qm$H=_Xv*)` zFIKHf7bI=8q0jNWDeo-F12WU(xccA&47R)k9tDD8_U5L;xie34fULuvmOx2gr+MAw zgApGPLxA7mm`C}%?Zw)-Fi>fU3aW(RjmA6X+@R?MnR9&RoS)P4v#~kegzTCQ)2pki zakIUSN}gwqzzTRGs z^*VE+4u^dOA%r~y#gvq|03dqodHA!xF1CyR* zuFN{)zvi7ar>i|gagE|nlUcdnGX9E?5x^w1RsbISO0r%!5an=1(h_ulz$fpVc+cq3 zI|cX<>B!2i-=z91r&#_x?AZB#s|+SYK}R`WrhdhpMW6Zk-W}TV+{TQJiCNI@@Q}SL z0jBglVq=Aa(7Orxjlq7)Fa~eSSz=fj75bzH+$jX3(F<_NqGx*c(?ENgvYSfRWL3Ub z`NO`^L*4hUYAX#Z7hdeb*?FkxqG~nBz=7LL&AIPE2iZUFTt>pklr2#eF?W>4UbKJP zZg0kyUwu7Zd2oNc_12r?!Gj0mv(G;tFP=RgtMzn59OvgFkZALLTy8eg%u!*=o+-QL zeeU+R}Q^*WY6vB=5+Rg(Z73IT6?FG>rcsFsM6{OcF+A#lOkX9xzhl8^`9FM>K+h33IFIVG@w;qne;nT5Nov;8b5`XGE z@(y5Q$RFXn0hxyugh@xbC(z4S2wGvY&5lNRV@ETF3(=ho5 zL3eX}6T1m5s12J7Qph*?hMG7ek648^j}Z1>Ri}bJthFN>pwgGnlP4(?V0)0vJs@v( zl(mA2^O0Y;2T6*l z>Rl!n>ki$Yj6{{BgKBYxWCp`QU4Pa4%_jqWp9x!c{m*Q7YqS}-IFf)!pxt&ll3t+7 zg#7>n5Eg+b}@_K2Qa>J}eIYPl3t;RulrDu`>8TJeXYo0$c(vV*o5N2|s^t z@_RIJu zXd)BYo-C`$MWV{7aqqfAu4?{>!+P;Bofw>lZEd!17(fhi6?&EW6s@GdLWFc7pxWQ^ zU&xxuvr#aCr)y}{Bd8Ai;1H3(*T8yY5uukcW+Cu=tUXd~*T$@xz~-8Kpc(>Aes;Qd z%vrGhDssWao)hSl-z;^3I{q-;F=-ZG^?r^@jJ?UsXEYPpG=nE?eQH9wO{ zUFPbub_k7Uyq~H47uhNhpJ=r-odB!V(bygiW4$>Z-+S+^@#6W#_~oyD7xO!&lVgJP zV9lBx69c|+SANLGx5^%Ihfcn{{67h%AX8{i2wZwgDcrH@Jh~EUK^8bli*M3EsNSb$ zs7RrAo=;~`0jDlz1R^Z>DOrd6he2T3w?&`=t`%r1I@eyLKq*VgahPo?$f&wY2ggQl zz)bz5I-m_5hFn7jc8l{AUbAF?dL%Od7nND!8{7^iFXVUgoh7?-5QHUID1e(|6Xeu@ z>}q>J@A@FnN zsat!uR`xEuku8sI$I0o*cyRwg1clbCRXRrZ`*C@7nSr4>S7^qCR!3ufGUpDZ!QzP% zxdwlJms#y+22Wa|&Yab@-Nky|d;6X7_|;d(#l^+==9_QhGwaPd--*N>&}f~@3<8h~ z;lKxeH3iV!#nRv2hJm0Se8i-fbc`ZD7NVHXs`rKi#j0m~{~{@ckzhbD=*2Av9YU_= zcO^F<7s3f=19WGGZO71+(Tq%W^0`qU$e9Ksa5Ef|-qP8WYVmkAS`=T*Ko8^}ZUpif z`ee3DM7!2GgJo6=Rd8sIxteWpj@R>kr_&&3w4AJFRaUVsGGNk4OIabZMnW~OhT^+KaW^+&s_qJ7xwAEeE2B}LF z?x`dznh?M`z#XQS>~C~%E_}BJtrW1LEoJz>`7i8_O}gTAU|Z?)Nq1Bo(D!uE8ee!j zw6LM-e(qqwJbztM>16kRSf`Y1FC-L2`!X3!^?P;(_yBN2R7rxdMF{#U=*b*V#6Ine z>?aiv;r<1%i3vLnU)(Y6LhY%yb+WJeyhX!}9!OTKs6NAhOJS>J^;ab-WTlf@fVndb zNlk4()^0wopcHwoFMS4H5f51=p3Ub>`hZy0xdMw+kU#7~ByU3|%ml&1SRb#)FMsie zado{N@4oYT`6}RW)j9Ue@wz63x=eo=C)n&nKxwe7l0a>LgW637EDCI-`GE(?-GtEiOyU=>WQ%7< zRgiUPX%%C&0`vEart3U?C?$*o2Dm{t71V9I9PP!6rXfe@2$Bc1DAK{*MVNjAXoc63U={a z+G|>i!?l-nub9tXdt{WA?#zBmCg5^mtolow+Zt~xvl6Wes2F_v{#^{*ZNSo*(wM#u zqX|8?NEjtIpkaDNLf-@xG!(&h|Gb#f{ECfKL?krINkD$^eg8(Yyiv9O5CA37hC>z3 z-uhH)zW{KfoszDpWy(0PENf*C`~4#`+E2nVSWSR5=Y-!21PTzAumL}%;2i=kRu$Cl zUqW0NUp5#U-~c3!ARQd65Y7b(nW18i@CKrIK0=gOg$GRV_v4oUEYXD4FJWWg8On4q zYpDVBI|d1W=Yq~4kP(1__Ju&DP&I=R=Wp3&*@{J(&kfue$VDV6vpR9fB}*`@+A8Uq z6zC$MYw~6gLDZO05YbbemIvD!Q1UD+{tlTbX?S@=my!ii)G9p$e)-nB*)q=MmSqNB zyklI0y)0N1EIyqCyW4SgelouQy*I~`XV1nbAAcRQJm&EATpp@~98^`%v?{CaihmQ^ zjx{|nRBI=Qg=}VvE`44k*n6n*2*^XXt-Twf44w^awo}=8C zD9bcn@OSB9{Em(Y&>(t>N00PsZU&>dDs*_SJO^VBi^x(hGusz!5lRGOpDaFepjp|V zRc_vB*0P3#HOe^)pyqm@gcsLq_tPqdJ&B^-eb4x60FFwo&+3tr7iVSWA9bG75CW2R zh0yH|KDA|nk9NP~B^7CGQ6&R-S*^`yl8hzy^D*Rxu~VgF^f(Xr)_l86YcwEKf`EP8!)P(!M<&H#ghyV78We z|NCRTIUV18_4RoEVpa{TD#KUUi06eB0HbhmAcIA4!pz2XLPnVp8oY)xFFprvz^l|s4raT;#G^CNb-X?r$D0`?+K=1yemuB; zG`{n_hfy8${M(yx@ni-Q*5l?TY5I0|G{$UuIL~w^1e;j=cpOiM-@MZzy1dFXgtKL8 z$;`@{gj~~1KIdg?BN{XVN3o7Hz8BSY^(z(-dEy6n$FL z<**X;fq9U+b8b*?Z@tR$LfYm3NjvWap?9}>5fcHu;k2= z_ia)|m1dtTre1VN?S z@ovxt5+w3-2$+YwqCV*QP5>d3HAyn1_ku?w@n$tX`{c=ZaeXn~|KQ!RTBpqj1aHDy z-iJy+Y4Vsh){;RjsT;|GcDKuOU~(qt6Y2c+UJToK< zv2S*q6#~;FFKM^NXG~1snvnCaB;b|=!smGcswL^rIcI?z2A554h^TBnrSUvI(}Ik0 zB+Gd$Uy=Ne3V=3MPw%jFu>zvzlqPmGol*1*{ecVg%2!gFClXr#O8!+t#8vBMgKLjLZZeyaPT+*Hb3@m${oZ4?OK#?^=TdFiYIT zFQJ#IR~4uc1hnLAzh7G`QvT#;*X&CkfhR$luc47&CAQJm0UvGcGxqipxy{Ss(ZVkY zQdAUg8L04owM2Q^UW-6bgO3WLfTo%7OR`iOaVDT53FXLrG({sGXalxhB*^Q$ikZe8@R9#`qR2k{4yc1hifZP9aG5^ z`MkT#N5>i!NC{75ty1<_R%Z<4%>BVQ;*(8r`+p^S@~xUbQUJuN5E!JwER13>3SPX~ zoUew`tXHd*l%gEkh6>UXZ%$V!QJE{GS}Lf8)og2WFin|F0c3Pwn^BHRTB>x$QPH@X zEW;%5^`aF-^|Pg6uZ|>i5O|Qn&okSpV7&&YsOcnB>6@?ws-P3jpn>DJ_G0Z))Kk@} z8n{JMO4dRU!YhTmz$vT4TCY-_D204EAV4RsC=>+6%X(HAoRpR0YgtcrkF^2Hfno1u zRyqQt%Pb>o5J1m@fA!hvaCq?Ge7yVao8#&8C*$dptFb=5&k7>YTXk6}{x$gr0Joq~ z4^jx&0l^wzV30^ih#hyRK-7Xqtd2Lz@vKbPqT5BraE^7BqD<@O+C$HRf|NbjGuG%}zljb;IhFp&CSQbBmB}}R}9%wE577&E%IBM-_@#y%j z1Amws=&wN|1=tF*&SzTbCguFE!_UK(!2!oGn9t;sS935U$pEi@Um$b>#`Suf-#d@N z?DOyQ_uK7mTwPq|+>L!YJZDRGQ7eCTr99oQiK?ag+) z`Q}^Wz3+ZE9Iu~!`e{@yZPuHhf}EpbYBmxUOn=q8RaK}=IEiDY8w2o7AECFsh$7c% z#s{wg6GG;d0k~P)G|HN)&~tohc#8Z|Um*77odaLULCU+}ak?|K?w`&IIS)D4&Sj3# zj&Wq2M;b2+m@5Xr3>Ie6cNxcLlP2p8=+aU@3k@CZn-~XeB zYLx~h1Nxkg-pUbw4;n+&I;3ND6CnPj4r&sPN9hHWbWV|ex}JBLmn0(n ziOPid`JpNdt5sr>k5xk0^-kN*xWxiS!g|pCiM3z|r!IqYj}9!un-FKr=8msei}c&u z3{H=y3dorhd~2bH_*S-10G;qBnAYpXZ+xzCPuP!tH4^7$gVP_dID*ikZ}32hDg`yGzJFZ^aE8NBo1mvU>(GO+L_*u2s=e z2}CB>rv7ctG%N^5$~HsVP0CSSmSl@C0H0&}&B&a(&n-o_uYf66N9*zA$&2yi>T10E z-doW|b0$5kki_8r0|7455-Jdyfy410k`K*drJh*aFCjt4!AzEEpu_Q%`-n_F+^LvZ z_~C9{=G1*tXOyY4sCsZZhy2Wd8@>-!4%|s%PCexnXoVNk4)x9iu<0tIUGVS+9#2*jONi$vfg_@P}dKvopqQw5FbP0%Zdsa+V9 z1rlH-N285!d}vXcw3y|Kz2e;Ja!f?vF0Hj&<16`f@o#*#&n7pmX!GJ^I^Ztrh+pE9 z$+p?>(e>}c$3xyil7h`{#~J2aSj_Qq8p2XMLEZv6BACX+SXdWTkG;3-zg+=#xWIa`}Cn>q3kl8Vv$+V0oTMVVmN) zuLYRUx6v{N`9#Yo@&B0O!C^}A>yT&L0r8JJ?kw{K{KLq#U$C5jsSon$naQe6VQn%_ zsFLgFXm5bqTx8{dk>G&9UdsT*JQQV96#;voNH>{hViC+d8>@g}6_7E3FP>|MgFy}* zESp&=$O5O~wbX*<`~ruXlExw8UOHnf+b(zpvqVeJc#uLe|EQK^3OC<_i~}$!0v*T+ zR9lmmW}?}!&494h6O$Q3FRT2z0~Q(#Vg#1?1^@>D%=KHX9pJaXrt1qhkt~BPglR>L zvz3Z~*)b}i&veL{;HOXOa|Lb3nql=b7sa3C;Oz{SE+{ z&J(-$nz<=}1#m*1#R(VP&Wf0N0b7)C5UCL;DN|`X4lFs45f1cXC?5(9uZn*!-`*R{ zdZ3810szRAYA4sCS31HZm}hDIx`ERDI6r@7y!Ph9@zF=0j_vh+oP_hWXcXCpc4u_% z(fOfw#J$J#X@g=syQ-$bdAlT66s=cR!s%Ict-Y;5$6UZ~;<+?Tki{kERD+kK1J+hj z5u+cx?$Mn!PK^q@wVU95kOmk~!U{ZqUi)UYk`Cf%;khCRa=Htnw&WSnQnf>`Mn3Ijm8YPHD~%Vo7RchKrbYA481RXOx`2b zkumBzrI?knTn1C=K$er6>}>O$D3}NefvG$z7L`w|0%IV`^aAt_f|qFxN44Vl`RRD@ z@WEK0oCF2lY;VTJi_39&c^Mh;(L!#0G*+{h7u%Acg>VJ^itcjzc{)T3cp9kbtNW1!S5oa!k17Y3ivE#igsz0>uJQV$&(G%V}%vG&mE+^sh1vJ4Wxp z#H1x*q8e0Osj-r?r6(;I1z8Yx=YS#}CFI{p8X3@J}9(*B%{@lXcFW`R)g=kN3WN zZ~WDN{AB#yUwt#KE^fzW4k_Bt_wC2+D&Ifb&c&MdW;RUFQg&C+U}XDA_9xriz7$iC z9vC}b&cN|tg|G#r7FyS-0@g6SW%af`^`s3L?dGs#q6FlP+Ma+P@cv{6;9qMoXHEt) zGvqjiWMKdwJb+Jn8Gzn`rD)A><5ESq*_**oHhuC~!)ZU)XH zP&BKGUb#0OjC*LZ2zW8v}m6jWuP7N z<3Ky|Ie3*fV)FC%*H`=T?Be-&`0#!Nh_>aUg4`Bf#4(o+qfP5NN&`*xzMe>g6EFs< zvq7@N!iIzVE{64%UhrY{*+>e~Q<4A+LH!1HpmAy^MgE1jyfVXwkxwnEAQpS@-uFoVzh?aF(1JL^tLe@R?KcF=q zndF0xIg9Q-b-*6jV&O)eNcka=Eg@qLl`0}qIoUyUdX%Dt;wuNCxWK-dW&d76UjkPH zb;Xzf7vO(=ZPePz5xXK{M)1<0@-;a4 zq2p@YWjN{%0g!ZnN%<&d;EJ}-q$zP$LS5N99auDP4bP&N+?igMOKUKvq8MBD3tvV8K#^*+~lmV>kZXbG@dnwcwFx;2ESZ2pZCs)CZ;xrOYFf;=^7 z+IWTz0MF)=lH#3%)=h%MTQOjL4sEXkrO}T4R=bqV>1teFUxx#3I>KTpQ(+y-uO(>7 zDnrf8vY>MWF11FU867^T-g7_#nN~A*h!Y@7D*F-2Z1%6M8729(a-=|^5;RJw*@30w z%?)PaQ_B{nuDBa82JrKUFy*cD1Qn`*O4I$~U&#Z4lk{=d?~zu%0NRvu${Gj#(kL+} z0_c!I{1!xqp{gr0?rX-8oP^LBrb8f7&}IX74~jDo#XjQzmL|7y9p)_e-oaX0(M09v zf#0zwEBTI40_1+X4$Su|9zy?X97KWBFz78PLfV+0HYXT=hchv7)&Me{2FN0kLnfTs zsCQ-N9DY}K;4*=b%fY=IKRiY7gwu~zBR0A#^UBak1Ns)mV?)^NaENcTUEC z^Do{X4B=;wq}s=4TOrp6hq+Ck~_i=XWSO6b=I3VVlt@IlQ#ZXh+ch zgnP;PDkjw|km&D+KC`Uy<*bF7@Kxu{ByP$a3)oq}Ou3D2>q<7dIR`!H!GF@R=_F4Q zgWz|aly*adb6BbQ0f0lYN}M!7{8n$nT9_Ja!8O`wb+&HjHSFgBu53XjTj@AjjiMDS zDj|d=MZ@Pn73JbGp_IT{KV_e_NipbMUny5fK@NtrwS~IFmRGnFDTQWj?Sb7IP56mN(6Y{M7 zjkD=hA-FXCTlrS7U4Wm3tw^r`9_FiXyP`dhI#SMVXX%2{-Ct0;ve~2d1v+9)r;>ch zP-;^pENeF6LZ?a>HUr7S9l{cnb7s#-Oc>h<%gU#R>Nofq-4ShmsY-N!%tQe^`I&w- zVY?pmQIIFcUo3dagU2od`B4GN{X^F@5?c`k z1R|6^TaV%3?94&*T?j3%r8$0jX8-M?a>&wj_pa4UxcG`Qo95^ zR{^N*a8i)U4NAc|cl1(`Fp_TA0u?Pan3oyimg$_BP3lW$gL6aB!1}i>BFTK0w`ZyT zm5Qn^FQCYsQ4%N;2fm8dwu}@Q-DV^}ys1rzWimQtfQb!d05E}pGUHz&njo4uX8y&& zmx7eIBitl|5OfsqX=Mjl=7MuCm0bmNptzm?Xp5L4UI6D5w0MqzGG2ja@2mV3G&f~; z+%3_B-6Kic6dW_gP2ZyWKrFV%M!oBJ0$>o|z+e;zkwI&GWY5sq@anq(hx>;!-1@yP zB5h{SNwzh^!7~Do0kKpRk)2xWo5udkbafp-&}bQIvl?#FDM~l6C__c>fFnA7fu`~$t7SA|DWW^Ia&&$SO6IGX+}-Z za_u()8wTQeKMss+rw$8v-jF?Jd|MmamgOY43dBy{agOy&r=+)P5Z2lgfVeC>(vOQi zFX+kS3-qDqA0f5;-*Sp`t;9Sq3Un^eTdidYXoGUtu$al>)zNC4-pkoSbGZ6^#&oJa zeSR@sT)Y^&-E1Lu6ak|M#9&{>C#XQ8W0d$s2@Lw3$x8BN-7^EkHjAemeskW?X0;jL z|M30s=<(z6`Db5@7tdde&3avfj?uhLyzV%!>2Fj|(7`C>@3XL2SzbJMa6KbY$#dWk zBz)P_&erf1Q8!H-`b|KPuVbG-i6YOIc~$8LW$ZpO*@>eJit+3%l@cfRv*{NP8gjAzfEMZ2$m z@E324H{ZTL{`RlG8bABllX3a&@i;j@8M~X^*lkO1OxoK{nmQi)RnC5h1iGqN$?atj z0X&XCoH4Y}eRI|tk%Io}c_0cV7Bzi?M3}%JMP|Sr=(c^U0p@E+|(&1 zv+L5(M?d~|Q58j8ij1r~JZOAwNgYz%hDRMLEdOnCo-)<$f!XEO0xN^yv-R8U`26#) z#%r&?IzIfthhwuj86SWANmT65#GCB@?vA!a<|X6^TaQ@}{MrMYRcL{gXRAQyYPE{* zUR~cr(0x`EJ$U8*I6FHXk6wLs+<&kemsgkL>f&nb_lJGw<-hKi0Za zfkZqDveE2MiFV>h1RM#x@Z17?a4xed{v~&=zzg(5w@2)gv}Zg}#=G%$VGNF#45eM3 z^ZL-40JuxGbG1W1wKMy9yWW3^4)x8;FlK2 zR5Eq!4Qok@OY+eOqplFefOQs@_3J)w_*SjGCg_?rjwcoKXoLWm{0kZIyaFxQoH`{f+NW_GkgbrLOw@DjW06%`JypN|8}=FO3eW*geA@VThy@A*fr!XZ z*M+3fV^Ou*e9LPLBR;G)eWs#%Oi@75)Oxa=R0#&=V{9vG6A zhG=d*^C-|R8eRQJkuQz^no^mS*5rmgT)+T0+Ujf?x?5XM|f_*4*u8L z?3jTBFpCF)@s{U`_8w5=J(@0MCg@)f$GP0--+?=f5(mxPgDEKr^!Z+rQ$Gith0a!H zQ?V8tNv|fQ08ZNbF&^3*RTm--f9Y?M8VN-DwVmyCydP9OnG94?P zC=KPnWshztOc`+b`JhV6_{xlXbEE?JR%<2VFwbV>dFFR8s29~uGC2>8=K1Y73aAarUPsafu9c0)pUxj>MnQL!c$qoIpi}lno;8J9o%uQC4(Fp zS#YH}Vq$%*tVY>WMRIZ?YH%zAd5uRTxJWVONU6>$9f+HZ;^Edk|nOMHxj77sGC z#XENp22QC=dpgFXuRssdE&$8|GOFHd&?d9x8Q_;NOVwyIkHBXo4qt&YY`wLDbc3%INNs_k2D6Tc}^kI$^l53I`_6d&e=j|XXEVjbZkyf z;!9Uo*W=>FMYKhVfXngmSkE?GrK5a)8|XBji?(>x23SOkL#Xe;U?{0qpBK0Hgozvs zKl|%%$I0e&{NM*a80Yuyk5B&a$+)_{8Yd?wA?u{u=M#ii*%y8hB&HlTIZd*^gDbuD zlkS5?bt)O&DQSO+&?zePnbJKo5Q)&U6Mg(h;^l?8okS zKVE%(Gv5D`N8=}d{`z?1o%J|-up8IcFUEeqAJ3nx#;2dW7{C7M<@o9kFUITdJR27m zhw;`sXJhqn>ecJ<&iBs8e@jL|rc^5!=g4cz6vi};J21He{k4;Z$_yJ$pPvIaB&aVvrwHnfOz zDxre;cf^oJ1MJn0H}F;Dww?gApj&*2w7~r?K1W_fasu#)XIdA{aXUFrWa6hUzxp}? zFW>*(_r`j)8XtZ1`}qBAN0&3#dXf-YOo3{9aHwQdK)G^~anH7WoOwNJ2HEG|x7+>r z`m0&}xE}W&oX5PP`}ZG=^YgQ4=Q(BYY~?wtCTEq?zA|R%V0Eu4s|ULdXK=#l3CVi% zr#8469hd>c63Ywo$yos!S|-^EuM00hZvnfwo~zHWQWOag3UsJ@fd#Et#isqzwkV!d zLX^Q=z0PbA$+iV|=!>k7=3&Ajkh5sf#uj*5j#~XL<)q7nB4MkxX@OJI`}WI*EBME3 z$w+7j{V7ZZ-lH`+?L*Ty&7o=?W8ldFR#5;*@02srGU2U7vfBG-k3KJw_JX%VA|LwN zL8hW-I{a}ixTp94tw2)0PtBMHG|^yjSG8!<<&OgCkVTi!2)_lkS606<{Qd z*`DMFHLOh<#CnZx7TJuz0VHw4D5GgE%jGmgP@NBbuhMsLeYi+eqtSRko4G{L2 ziYGS$i)#*@61GM2e)L_=)33-`dq`X`d?U6j+XViv!Xf3Ka(>}y)_0v06j=8T5+3-M zt)f87!nbPpyHi=$JGDyD4DO-Hry)-?67+fBcGE}}WAI9MCV!3v#ejz$FOwnl#{=#3 zE72a)+J&oKeM-mONs3%l@uiCZm3aBSIm*>INi7Ug<^Uk)Q{gae3&JIkF+s2zw(HrU zybdy!c<_9QNAWx#g=+=_{t;AYQ6m)NTFSVr(XFy#@{OmMP{Y7=qm{+c*Vn(84mX(91&|1W6DXXu*CR^m>c0DvOuH1^^Fx z!&zu=kOFAi#C7BFz(?kATDJe{QEEA46WC*~t}HAY&7DZNFI*3Vo?T+bD~zUH;4^F8 zFTH+WADwL)2qLW?uk!;>4p~$2S4bHfHs|2U-UaFfoz6egIgt)lIcR1U|IO8Q+&e!T z>ywlP(Gq1E31~-gEg-D=0|Kossv=K|}9I2g!9h$~-}pp9PB}4uc8|>a#M~EqgSV<82@$ z#v+TJbh;QA%D|l&_cXR}jpA`Qs|mjtKz&&)I&T!I<|25K1aje zP2KJ{EE&enlYerr!WQ;9@{;<GS6=#^uH3xZZ9Ff6-2p_04IN^Im3f==AJty#M|OV{>{oKKbO6akJe;izs3c<1Ye!uNtzu z0p4I@3mxf{Fv;&&kHt*j2BvWn_fnbl9_%)qlJdwz9pr)GqSi`)_gp8>=Li$&CCz)5 z@*Dc8lC`omnw^sCCBr2$G7L2tPdA4k_|LL0u|{`jvZ56k-=+_UoA5Kx`7r`Tw-Fqg zbFPjyGf+JH8}7%Wx7OqRA3h#``ja=udmo;U`wtJ};_}(Jyto+`&yL2oUmcIX`Kxcn zr@y-xS5FUPb9OR*_p4{)>#r}z_dd8k{;R)yYrOOQ`{Q=MALplI{NsP}=6L6wv+>ve z>9g_k|Mbnccsj;CHqbr%a)FKcLwc&0kUO>M5blfMlw^DaWn878TYI4%{SjhrP$l=yd8r2x4-#q zIMCMXO(f)CUzBE~{Y9|OXts`uV3mO|W-Lp0t^e@v-8b3 z-JC}7dwa7R+w1MvPb@h9Z@U}2oBdc#yjgsLd-mjmen%$f;sZLj%xp#lnCw=nX_KGQ zalo&*+e%Whd!Vl3p1lRNk|jmNl6_nQu^RLmK8|q3Vy2Nj3;Xkifc_cy{TB?=Y%cI{ z`MVNh*H>aJ5AiXSwaIS7%KTqor=msL7Le)0D~ij4mS4s*nj|M|J{_?6e6)M@;G1J7 zq~WH+kzF?yIsuZIDIDRb&x9Z7>D2e;809Xz4TdYueHw1Ycl-?KP}bc@|HuQ_;*fku z20PLO?)ErlI^+k6syrDIBu`;1$DD4jXtB)+R?t;vsFrgs(VW)g0GFK4gu~+P;Boxl zY+0FAL$_l;&hKx=qX&=1H%~uH+kR$KR14sFZZl}jfSBD2{7bS8HHN`iiTIKXS&4|v zxeoqmoNS=!uFT|4TT+41t0j@jE<(_w2V2Z6Y8_1G4}G=Rl;tw<+?x<(%QE($}8&DxQ^1pMRHpYrY8h+D#rZ znG}f0j0{v|v6!Rbeb?VfEW)NL>`4146)1cc-d-~Hn;lwp;B0}IGPS3K)C;LcKtD>{ z^Pm#2C{c&$4Pe-2)7}Q?x1t2ECI{`{iPq79m=JUIvi9En1j)NzE$#A7GRd)6^M}h( z#KbaBILV}BI8Nm+ATPCU8s0O=#yyA(g3<$+#xwU0KSnyV6 ztE(1UN*TjaAWL}%+LTJlcXr{0dr5(B_vS#B4sX4&Ijsv_1+O3EaJs(Uj;Bwbj#tkg zgwx=#o4s0BSxqqwwduc|^kQe6ZK<+qfDR&4LDDaDcN?DC6*Tl^U3hQ<02R@FEQg52b3UzpUbg60?R(mLX zFg-i0awy_az|yM6l6XX%$l$^gQB`g7jEN#*Dm6UynUBjqOJfXr4}8I_@1C6Cfpj`3 zP>49O!aiqM%mL}Ao0A9*%@%U2&E(_badUk$E?!)Y%d4xgySd5o^5azo6yU^LCLzFR z#}Sp&jE)zR;~lDarIUeMCm03{k|yVzqwUQMke`qDKm1@E9j(V_pL`l$-E6X5QzK>G zN&aunYdcPQ%92cC5u9_(E3~TBq`QUjLLD^eFb)4a2pGyPOx$_Z6AcheKnn(%J038j zMIeJB_EI!Nn)W2AqATeXpI4Zbfsm&R&XrRj+smMJTu&%!mAxcLT$%AR6LNs{C0DpU zI$h0hscV;`k#3NbVXIZp>fv}dcKhvk@Y?D4;g4P$fA){QGv5Efz47R^5mjUt+pBSL zbu_;DVl{s8*WZrMKiiHkKfWHv>s3_V&T(0{yVbaOKE_Y~=9}^2#nt!+fBx3^(VxCG z?nT?y>+#`-uZ-`!dp_QI=fU_-|Ni6g@vmNtqodQY-mJzxGVx~u$87|S;?JBD!z$y! z#0;KE5r3Q2AP(RMn=TTPv7?jSLZ?0rXwWE_#&I@urLwz$?TDqp!xb#d=gTpJ3SaXs zl7{g5{E>mD;$8e)=Ag|+b>Rm5=-V~9?4qagmm8u}hCkY$>3^LEgICJKKPz^gJ$o^B zhr@XDJ8#7kfBnl}kDJ?@kdd=$CxgB{ArP{+!5ZpCtJbSafsRuPA?eVRoyl*rb!YIw z;V@o2doeCwjB$Q`K2Fc4%sw6W?w^dqZU&03$8NKafd0+(Zftkku?p`^^qb0atl1-& zEjQmrCvoswmI)-efbZ2B#V-Qir>-`Bc1l)tLMD;5KeP`l;m)HE*7u+DwuC&oEoQU; z`x^4bgG5TuDhx}R)q^(8recDIupSrLhOS%iwb_sI5yY7jOUogOb?}5-R|pU`Iha8| zmmJ-(9C{agU@|9hNUa|_+iWN#0^_w2@WMHvRHOGPBBTj>-TBu14So|mAlgGkS5~F5 zw4)Zlr=2nF5KB^o4UkZv<2BAIj#VAnCetTE&u57^g~>$Y^>@&msWzjKs^C;Y8{`#r zXELV~u*o~oB<>!;?b)^t{-J5xMG?`|XSav(@b$Ct>iMJb?X#bcec+{Pa@ZDUiOcT) z0*ycikvA-W$t$d2dmS|B#OanY8(h1=A$|-J37C(7J zK6R6A`6uRyLVr}E2XUA?V;i~=aKY8aJ%?EJ7ibNzEoeU)eTm*^y%_+LoFndM08Ivi z<3e3A&bL0(ehe%Ni83+mL1#i)?kyMP3nZSnlZ}v1@NPpg@o*mK!~}c7>>21-`hxRt zDcfN0@pKIrKTvSlQ35^`FjE``34|RCKMPT0uuF;sBq~ zsEX$NywSb|sGu!jm&8wP_G_cxxC-+dv(m1f<$m}INHHkL6VMtme?S3TRnp&b&GJ{- zSz54h#womi5Pdc!D0czw2FV zKKRaoNchumSsI}*CYU*BA7R8_DOI_EqnFO<0Ho*hjh7iXWg8|x9VzTM{C4%4gTsK1 z866TP0_zBP;W3e9OweFJRv(cdDkp^xbmy~tFcGN7_S(8iQEr34J(DiDfeIlVdMfu9 zTR50AFWqZ`LDS$sX>*lA* ziIk2;-3PM(;Jnn3D1utgV$u;Tf-_KH@$WM7V9c5`TZ3IyuCATv>`OQ4JaIlfB}*5f zcCHlB%7_G$GE)F*!cjtfY0r|CBDG8U zc87vX?%rqD0erSU$retkj>sUzbliUW$yejgfBfEf^y>Ne;*;xfcJ^S5-98M3Ia@gZ z_N<7Tj;>vu4#63C-sprZsQ`>*mjAB}%Pl99hurW%9(o$9` zqe7u%X7vXb&lz5zVT8WV9{3ZO1c1jGxZEw@Jgaz>HCsB1vdokp1T&$KogXe3n_IN> zpujWG*C17VjnSOUII^LYY#G4k<4Dl&eIbq@;wFGT?4$Z;wvF3t)=_CQosH8mIzNAX zbv>@<9E|JhXva05c0A|!EIhx!4X7}%OR>MvA~;Ov*}AHtjLJAgLuit#xzH#NL*aM8ZD%MYx6jA_`tLs;KmY3|;;+NrGwB}5N(Bz+ z;5hOYV}^Gv714Dm_=b9fc-@1VZTnfp8%a;VUC>Fk8DOW@B35lx+&1Z1r+9|u+vWPI z1&b+>cs4I1+nCP#ytsHVzW8)M-g@(`n8WsqU;KRBL}kyElTQDIC+sd$W?MxZ<;bGC zll*Eri3eOQREuF_eq#mpUp${}KCi~<*{mo!9j7Pjae8)dY!0*K+-{tm-j40fO;i`% zY`0N45G|&nwM+HGhn?8;6mCe#1;Fz-yObU2=%QSXpLaTR7MD$xdQ5Zx-R!c+XD8q& ze2zv^5B0aLSxC&}9r1QgifVeRIpM1tr$eWsI8(U z;JE*zzACpH+Vt6ZnDC~!cv)hQ$&%2{nAcIWsp99H{USY)K2O)%z;88Yu0F>`!t~E* zk2t{$+0x4!du+}k`DfB5**z;UZJ z5(tjQ(W>a)#9^E(<_mVtiSx=}qZALS-@8JqM|`dPbwvCfiqBbb)^DBqg-;NS~maIGayn3y6>IQ9bmDO^V0ur43` zUeco{zv?bbOS1L9jwTa0(FMxZ=~xs25n{2zB-X;4E^l{|yNK1L*?HizoW@3(N9Y-M zg86a!6m172fj0GEPGLtSg)spS0wE!-w)SXlYXQWrN2Z$e*Pp7R|t@r;#n6Fuwvlz;&4(U+^OLIc%0V zZAisC+$W5VL%C%Mn2=877x9p)loo*5=-uMI7JM^q@W2~T4EKs)zu$!=0gjg>eTw|z z&syK{{)T>V7?6{L)M+$Wrf~}%^Rjw|Ky!+j5rB`fI~o)V1#JNjY@h4vFKy*u)>jvo zf(#xClXk$SbmI5bu$mgeOn3i$wMg=;4?J@^e3GUr!^W;K?*RKR(b;CeI4Y=5Q?OP* z0>TrSP7B7P00I!<5=3siXU_y|hNc9PE2GrOW>|W}oyNZ_N(+=3Ap%HcC5~n`a6JgX zzpNj>33TdI2!40sSU`V}hS2n8E$~ zd4bj|U&Zdy1E(3Et`HhgFxL!PS!CsiN1zEbM@W|>xtfP7GszTiqJXP?+6{Bh zQj`FZaJs9_P||n_c?hjC=9QJCwr9lccAq#!w!>T)uWsn3JQ9FMG7B@{F`oxUF7C)> zAHb_G#%7-|GtEQ?kFW$F=PX#4h`6K3B)yFmB3GB&@vGl{JpS8%{NIf4zW2uX{cnFa z?w`-LH+@Jp&NN?}^b*cG^p_{V@O!8p)b<>%FaD=wShcVVkwg5bfzZ4m%3;%?IDiFm z%TjaiTU%fpEfLH)jq_b*fZ?40n#dHx9sr6pE2G|JpeOds`*)x!x^rhMgl=Y7!icsC zg3K&1`?TDFa8N^E5#)I~4wy@THR;nz>D@@4|ChZc^z)YaqUSIC#|92eJ(yx|J#0Dn zS#pOZ)5g~TNIq~;29z?ku$b(KT{Mfv;$^JBAk5BKVjyHY=9(*SC(gX|y%7QCg2DNN zqt0pyI7LX2q$|u*AqALGnY>WoFlacxn~qQm=GO&cHi2;saS9Dsx~ZfKyvoR6L~qYk ze`W^xJfp+xc{TUFI*xX1rza=zyYD0-u{-SJ7H1%a&P|*Jj9Epz z`g-aw;92kuGyJt>(Iwm6V2_~V`K1H#UfAi!$78qKhO={44o&j-{If4&|1|IB`w-*WiQ}ZbchX3LWcN zF1*lZ@BjmeuJbPThut_FUypY_I3NG$pM5a?^dG)GzWcpb#`V?3`0Cly@%2~F$Jbx& z#&3T1WPJNkM|KjcOM?ZW#9>1|3huat9y$|kc<=qM#$Wy0&&O|n@qFA| z%xvzHL>Xm>(XjVqooc0uaXu72o*@W4U+0BcinSWu7|^x*BQ^GQH4C$wW@&M;WlOV#pO7^e-`uNR-4t>Y)&ExV6Gu5Dfed)D7w0y zbK`OzN%yBp@A|wjmv6Cp^A9G5k&_YFTNpw(AstdQomf4tRz6B9BYkRAx$Yb~(MB0p zoQj_lbdiOW^bh;2KF8o2Xt*l;DC?w)`Rq1hz-b=$hF{5eLXHP?k&e6e=(?il(6hj$ zUQCZHWOH&Gp%Q?%jEfO_#TX7<&+88SNa|B`(isMY{vi0&A!W!H3<~N^)zMeDH z4wXEJHh>5MF;R@Th9oRG+Hw|jzKs~HqXDXrNn>_T5_^VmVGmiwihMG{Mn;*=T=hH9 ziP4k!1E??BtvVaK-b6s$eFpAFQt*ou-x7UgA2^>u&bQ^`l}4}B8`Sf_mq^^y9c6_| zmov9aS1#=4i6SKiP~9N;qg5f;$Px2JGtf;~AKphh@1>a1&&6~xE8C?k8RX@;SdvOP zWRzrQmGZ^6J?00$lqI=BN4bo&nK&7^tCOLqF}YxOlfPFrl0>Meo=R!J`Wz7x<5RFQt4=h8Rre)`vmP9H$Og;&H&ca*+cqNZi*p7JElNyOa0sxSDG7HS%RPRy-tFor( z?t}hVdH}qOVAMriw4P5g~~Zx8;T9t zfw7iojn~Ty5tSFXYp6g2;7l2C&2TtYV@#|w1)#ui7h1-Ipr>WVYyB!6r+_eGoVahG zMeZFf1@Ig=J=u-BU4U560lymj`8_87pAkZsr%}*)W1F#KfKkS}w^!q7Iy#gC zg0qi$MgUAE7(ia;Ed{9yAQ&mo);?+hPPTxw9-=ttmO0>=I<`l=k~D?(85IN;jjN3W zGF&O->%uwTX7bSye23^O?E$%3`{6dg{)?M2{`RLIjiZzO_{oodF#f0i@s|PsoG6NI zBGYWj?F8VFksA6#&X-sv6nFW_30m-pApOjsnev}TU}e_H0c)5%cn2~O=LzX)asdog z!8inh(jg&GiT{#*i%MxoK!NivA-<)oL65p$&~k#slx@C$7#4C?LJfmva=A7e$Q;md zpKSk=y2Q3B2N?rjFt9|lV_>L($I<5=lmM#rE(%buL2yUjPOK?uCH=$ zcn!>H0OQiNa&~(a6LpBM1J79| z#W2~Zo?Cqu*!Gq9Hi5e4co=TRahfb@fi%PT;ZbD!Q&l98h9Eb{t7^-npri1X^K6Hz z*}B;%z2rkC#?1LY5FEK`B#rr9i(tVE!r$&Z@oHZq3;R6IK4RX7F?L7W@fUyj&iKFl z-~VX5@xf}`u5ZTk>#xVn#r5>rMWE-|lf(G@q8;XJj{;~u?ey{LYKb+Ea#Cm0)%)oIO>gZ_6bDwRQ)|+wp;&Oca zhmXg1zx&;|+n@g3&oWT6Ufs#IZgN^igb9$^D(4D_NBD)R*ms9*iatwvDJ&DAjN992 z1$uRPHO}vykF(QR(RLIqrEYhbz;*9_wxpX?MVA-XW4FJ_JzTsR1CNxY=$skT6Ef%wy~nZst2BcQGDqt)M$)B~SD zcvpCZ^1%h4LdHgN0_0kQ7-~7|c;6iOve(2{Ch+X%rQMw_tOBsnoZ(ffPph&P{s%U2 zV!=r%sLf6)SU3HS)()KKTY;pIopzTNu&2rAcV@JJMWb!1?ogQ8^;%C;5MPQkD1}S7 zA-&Q9KLT`S(}=hH^>Re3NJGz)Z;&n9NI-VP)|w4+Q1(6&4501dThL6lJb&((he|&N zZ8z6vzC%kP)PJ4 ztbjR4_()4?Fbuc!$NC=xhtfS#0eRZ0xpC>b9vs45tQUON{yPub0}dM64W*Sp1jeTa zYAoN;1PmPP1}v!v5t%NVTjk z*Vg+!gKp$B1z5p4%Mb=lnoes12^9kc#L(mzv<@N0O_S_p7&r~*eoIOCfO%#_K|txh z3hY{s=>m2JAy{6*SQwI^PY3m&e=~fNjWXaN0cb#~o~`yP z)>FIaR!%76eIz>~Q_Jqns}?}Rtcb8#Py&uUTLU~pV*&<;gGA6Dhc-Fb*E%S{@MWV1 ze1|;Z{DT=#ht>GmFMdBh`{v8>PygZ{jQ{8PzZy3;vk3~5UkEng{0Q)d49u#WgwfsU z5+KiLuD~xtqZD054IrJ!khY4;7UbwI1sssFAS#0aSVf0ohCj5wjISJH(}gy{46{u2 z95(>~Mj?{3shYlnzNl&UgbKG&bWORHdQJeVIMpdMjI{QC%=`$VqJ-Gh-Y>EkZIjnB&owBO(4oR>KVX>~Nd|KSJY?B4nK{L{}PD|WS+ z8T~UDma{<;8(Eu07_-1tL5Fbc8iP|1s+|%^&2$m?kikCFzkN2I0(dPD!T>XP@Agjn zjl9!(hC3td_q;cS-DN0~E%jMBN8C9fo<&=RmH|uGk8 zoSmGE>)mW4H!Fw^W52r@58v32fA)WVXKc=o$KU+Tm*dyJz8>#=|9rgr!DifCJQ%Ye;aJ&^4?lb~{^WxnjL$#193TJYqj7R{ z&(5avRNjFND-T#^IKbrQQYPREI4=etV-T?TzjS$K|4OkS;OKYYn5-$gnfzf6R(u%P z5?H)gl=eywNNFn))n?~rrIPjfGa>`Cm*@(bUE`V~% zod!W`MQF9b&B@8Qyt*ELm_efNy*G9@yYaK1|9srP{~!mw6X(m>jtXtQ$M&JhZLHT% zN=X^$OhD~K+@CrP&Q~N7P1=|hPjjvJ&d);jAFozpx0@{vQy)woIXydxilWOGS7SHJ z<-!>_r67;C0^ zK?iX@JaLdU5;ptS7+6Q(&PdQXlVjXmlZ~N=+5G|o+SvljK)g}^R5e-H7bSD3TZ=$Y zP_MhL7CgKw;2i1WT%#)PWg3|;=xE_Q!{5zL&iADcz-=@-N6qHKvEf*9`5;W2quAOA z!<@{A!3h_i!#XNZhVuaByKDfybMZr-6WOR*o{qj+SKZZayBn`QJ{y1elOKn;k6FySHj+xbNn#JmKH-HT| zlg#G_nJ+^)LN-K`HHBj|69ib*D_|jEu>vxa^lbUXk{`U=gx#S@zM5D70RR9=L_t(N zI|*7o8<-W$;0J|cZw%TBvo&CUhaSA@x+fBVCM|YHIlw@(CE{u3TjI}YyE8b1&!NH+ z+TM6av(e4^35@6!FuopD8s$_JF>zA z^V8yYVgsEw-e+htumj~9e3ul`(i!lh=9%fUxI1(Nny-%lQKL_D-nubN=OB%i$~vXf z&?*XaVxmUwxf}uY8M+_*SyVodEd4q9kvpCW(wLA!7I2=ZZqu{gK_U!rVPUojmkmxt zc>zw?4va#JMSTL;ZVd0 zbC_=j(J*8wki1_dfLkHyrt~~effFJr!dVU)fH5yHfrNUM<(7c0h3VeF{OKWg;q1=? zAJEPrI`p%~ol-iQOfUzuwqI3#4lXkw8rhSaqh*omf=>)1o8t4}7|++%-6S)e8&*L; zr-dm96T)}0oJ>dxNC=<-ED;M5(0ZWO&Wk}IRD6|&8txP<&~AYOKiKGvUk-)&|7LdU z?|=XG_}~8e7vmrO@t=Qd-v~;F?N#wsA`%Qf)NQme2OB#WrOIGRT?}S zoB`y1ot0(rM39I((tWUsNE%IdFO6i?gLMG}qqsZM8_0}mnT-I0IL3M&ox&nk4;o06 z7WKy3@`AK5Sq zS}~TFJZhDYoi5{CttD+ZkdCMHO3+Bpg6nF}*zd>P-mN#LeoA^WJ|gln0BACTG|PS9 zjE~0A?lAVZ*+S^#^kkf#p2l3E=@gGjqT5+{n5~g+cDtD2gEmJp)}_;QEs_%&^ogaE zlLzv{a1-P;0#~A{(n4iru;Polu^{^G?bz>kVX$saR^#6N2jlc?Gv0jdjd8R(8J~Xo z<=EZq$7=4W-k12Qlf7CQl^ks_wC>&IJrWbzJOJS!=sfHr=>oc=l6$BO3%enBI$KQE z2hyn{aY9^8+YMLjU9HctCKw#@{K=UHJy&}J-B6CZ$Isqdm{WTJ?>X?UyJhPP z&}a{YgRT{jC>&89u^w3A<(Z?Ah<;M|_^bc<_hWrB#)H>yqZ(*)ax=d9^2PY-ix=Z} zzj`{Zo{jPB>CM<5ZpZHCFs6@uR?9tneT;keXO+;+`1adp<9dG>H;3zSa(X=0tJCq@ zUw<=hck6Ngm6Oo7XRn-$C%c>RH~X)~qlfG9_|1DUw`+5JJFcF5JHGk++wt*7PsVDj zYnSE3XT=TJ$FM=QSd+nu^G0HT>0fiA0wp+Iif`-;amh9#j2WvfK}EU{IvOqw+#~*1 zYEMpb>fxe$=ss!`RJR+=z`h{HVhdPn32wn@Np$0R(JHiB(Y<(a5y7jov$JusS&yTm&A8dmnMBut&1O5gv(xjK zGk0-u88b@a?pLe3!J$QBPTZY3Q`gzbNsG0qlDXs$s#S?@kW+Os+yiJVn6#Kh2r3cXt_` za!koX%~5SOJ)aM|BX~){dv=lFJwQf)mQ&K869WArRY5g%>GkEs_^wuqAV^w(kO?rOKN%`JkGl=`UJfxnp@0u+` z8OOCKyAvKXI^S_}jYo8Te6j_tlP(|&BpehR0?(EI0e|=3*TaPM#r~9|3@BQX2IZ1` zJ*;9}s5U10^X$4DP&+~x8L)XJ2Xqk9{Yr|0-e351bSX?Cqn@FPu0&>DxXBON-{37z zh}G<)qdWEuWSRL>?--3pA1G?K1nit2W}P<7!7mQ+cDxBnXunYo35Vc!z;&Aah|P6B zX6C9?AdUeI;{^+}+U^#-bt4Aa#74a+=za83tib&-pe|WRa;x8f7mj1Dyamh6 zwuMafge7*k;@RLdB*E8t5qb%-6>zFBY~25eYiIvD8zSn&f-I6lMYbSa1=i)PvtTCy zd$usDf7iP)@}Uh-b%nwo`hUy7hlH~|qyYy;PH2Kd?aV#jpXWs5Brd7IAhNqafFSf@ zdI^hC2<~8B5|9O8608;>SeaZ_jYz;N<6gaB#lAM*gPDH{NW`wqnHGds*b0Q^(PIK{ zC^{$&bBLlWUxttyM7ld=!yaiET+x9TKQkI|2Odd}cbdak|6BJ7W`}0yIIF%43EO9npLtz@7z%KzF$d36>@xr6Ap@>~V^Ed^=kzOgHS~zA9rJ2GHVq z#O`$lJ_xXQmcrC_?s6?N4BhH-nPw+{l=D9LOrlcmQqEEEx5-2rSe5CfeVL;k;QMeJ zz2=`idpiF0zxm(BKl{r+8-Mwie=>gYcmHPG8~3GF+1Av+UbIEXfRk<^`3J2J=Jyzc za3Rh+0EkcqgXXg+&;}Y*dX90^C6l?=;p5V&-HD57MBjb^d+ zKwU1vGWK2Gai5~?uDdOBg(61lTV~NDOQ0&2eoKNH?GHzZ`6hL{)EfYNQ-mS`z=n_; zurqO!-$zEb1*O!QmT=1g6|MuI`$|$2kE?ry87=1I5+2Uy*9`VL^E?=h(lw(W;Mg2c zlqaCI2+UL_`F=n4Q#Y)R$Jyp|oXq(`o7K3v*@r`L{+X@i=J%!}@cQ~D{+q_yBB_O! zidMQXAgmG(G7#9wz0;O3B)U`3$RVd_t*}h(f39sN5zIDb=l4&>>B(lCpP!GzVK?4+ z@9nW(osHl8@(<%?yC3V##>yr0%-O-pf|9^dk_9D;5frj&-^^kYG|Xztmj#Km-*j{V zOUWSyT%`aTy$&Udk-4@2`9{vUR?ux>M{8v|?{J=%d31@N)v`e{55af@Y1t+WJWwsL zg2u~wJlqMoO3rJnH8qrEuqeTF<;#GJ)}KBp9Dsd=T?vlHdTho=zkE8r`0S_S@mnY3 z-YX|#vtEyjr#EA}-Hoe@bneco9|R$9_qSuWza6)$v_EF?#5Yg2PhhI>hyS=-&>8xZ=H?x@oJn-{rhA)KL7oT@#Kq}2rkX} zSHulLM6-IMU5izWn8AkK)|nxbQfH;)2X86t_lQ5z1u5gfhc(TJIE~PEQN@)0K*uev zAL|Xv02Q6L!ZB=7XpU%6NY6-Rjwc{FmR|Ohlv4>%y^SqF=}z$T&5nrqXvj_LoIu~F zRYnj>z}ZpzIXO8U&tF`Q&%gL`{NTe6#`X2(`24f4qkY@l>YV9D0lzr4cz!sTpv0VE zZ0;74z);r;P((~=_`wn?T#l})ifn&4jEjq_aeXucMJHo(wi&m_t8u-(8qZ%`1i#F- zbF;$q`g%JqE-%M!Hv{rVW4*2!X&xjrb1Ao=AWXx{*e`#HY+Rf>w%)#=j9}Pqv7N-e zE<=gy>Dj6^GSJ}qAH1+Y-uzjH8Kx5{a7fuRE1vV{i6fo_Xc)}pyxW2XB*~JbMH?Vb z3{~yglZ<=y8T3M$qozY03#XUO=CmRphW8-h%WWm`(WE@lya84uc%Z1%gDXtvLcq&x zzQXGAOB6P;U=rq}H2cjQUkDO}PommTx}Kz8fqs$F?Qjf1hVaHrz`)Dx@1mN@kQDH| zX{~H6Opq@RjIO*VTma+839~wK!BElePBaXC4=|Fpe}Tujy~@DE*+Op~_Pg=V|Jy%{ zd5r(&U;pQ^y_)G1sWZmZPxB7H5zmTeIvu z5L?IQNq_yl<*TczyQ>{Yc#i zAr@vUOcbpn226S@Y;$V|M*U~2F# zCpX7_7yReo7#N(|J*T~ehlx%D*;bv=4|F|Y(`Fn@q4e@q5q9qNWtja=gU~AiR?O2n zZ_4AtSuF|hfyk`N@0+4gSS!ER&6rt?%_1g?1%_qU>(Jmc!_05QBy;6sL;wbmBohGoXX^Z zbDHU>ZkTEUAe(l;?@Hx4-!VdH>NT@|XVfPsuO+>))37bRoljUsmgt2hM9egc~8C zuLMgKm_ZMBW4jpQTL28;Cge)AI&pUvvRO#6B}i)JFP}xb?~vDZzZTqA3!SX+!0%)z z02sn)ROim~p+fej1C*RJ_=q{;Fu$kHzvzSTK#4u#T{0L+S)@2=5+exz6zYi}UC9Ry zHnqL}3Ls!kNG2d8FSjxuJctaErs648M!itOOdZVo8q$kavau8N16|iyLq3$ljP@_Z`N8^~m9Vh%&C7@Ey= z_Cz>xbtr54DdAYfdKkUPTC-q`{oD(XV%v znM_798tRbsjhvrfdR5|TC?9|NQ0B9x1&4a(#HrrjcF%|qah8|`QLJ@_<=>KVpZ!RS z_NAMZTYCasn)(Y^C4hQ`h%|f4Wrh3dB9(#nC0cxXE2+{!O%SHzq|BqSxtRQSi^F_Q zR8*?QF&eJ~ulqhZibzZyav#Y~CFZF|dIm{(MiFbg;zh_0mRrCK4GzMtB4Hs#Fgq~( zZ`FHB{!023){gaJwg_8% zEu+E69ObjimGqZ87I<|MP<<;R=OX7%m-6)EbEC=8peO64u74l{8JDvyl4oGM*b|~F z4U`4T)@F8QXj7IS=_G=^0=x^49R&c%W+|)@L0aO`l#BGkShkB>d^tED1XJ0;LzvjX zL!5od@jA)+8;*j;0Y=ws?1FTBSH)k1F@nBZeo1I&>-Egp42Kp`UUR;s^sD1Z?534t zr>CbTXWxADO&O2hk&~lSa~NOEW-=a+q^BiCa0Ee4HoRL{$?wkDQApy5uiy-^Fy=3N z4E$cR0FmWyPWztvgx7L0oyp*8E?bi=nQS|4YdbpqPiGcw@9xNCdrPinbE`gDEWGvH za5#cw@=V+e1ca@EbIFY&c>sZwNh1|7PyI=IlUN||G|!7ny=yom6?fvzMt_r?L87B@ zQvf&E^zkT3SDdk%2b0g0PeE9$$*TF>833p-c+JksAnvrkhNwoY8^RqF#JZ$KlfLryXIkROP%ypxxc zr&(5pbKGRA0XL5i1r1x<#h``Wpf8K7h1`2?SN_yb{4sg&v-jki|KUC9uZFVLR+uZT z0CHWX*Vn`s3xOfXhSq%9&4Uph$=|4kOTMG6^km(Z^_s+x2Ga(81m8Igu#c63;B~PE z??b+n4k%jp<6`@=2&00EEc*kGfnLafDVJSkz?H`H3RK9Ie4ms^N7E8)112UM6nvPv z3w)22vOL7OaHT_$YS}ZGH^Tl=y9W}bG4~0!oy%Ew1v9UrooQ+Ntd>Yo-Ue4n&X5pI zo2YeegP-eUsv@ugRPaU8{*vwJ=23hbx;FjQG3Umv6K&yQ0RUG(sK05ub*d8UEVIPP zWmYDh6wfweEOJIsNUsEOOh0YqX^CLWW32tpeT!$VuJ(cNQeuQ(ht}t~h;4+B?t!^; z?k@B-_M4uE{j4~fSYGZ~E4)Z21K;Po9n!%_jwHJfdZC^ePZ)QGY#_V5^etvtA(^kv zl-q-s4o7erkK4|42j7Dxdcc<8NHW~Zo+>J`1YDCVq%9Z(;2FsmP)>Z{qOzR}m=+%J zXW=w*BrcZk)DlYLvR;wMh&R?tN*?|dcGOxIlFB12!C6OM#sRyx(#=IfMuyi}pJQM&TVzfwbG6;Yn?`Y@ybW0No*UBZxn8Ne0V~%-0+t5*P z27)ODzH%l`6Ro6yk*>=sD2PfXi*V3A>)8%SwK*f9x9fJ#vFbqc69gQ9D?< z;X!`rl&QrZIrAdHuS%lI^&StmH7&S*n|? zM^4??A9Jt;?b^v0dB&64>yZ&pV9Em9mMu}G-q?SHL@SFIbl{)K3QwF7de8%yrEnp6 z()7NCL*V)uG^`%r5qw(?2vpd#s6N3gDy2wH6_u8}D$onZDU5+QBNy-mF7X>V$Jy}o zHCJUUKwQZI$VFs#kvW5Bh0{6OHntgc)JClpiLKu7RJG)V9G_<2L2qRW(362|>eQYq z3?u;FSYHK(N!CVC%9f>p3W!Le`?kWh6-AAHBt4TngL`G4`m760Ugv;Q>V?euC0T~x zLu7Q9tSq6!xvof@C~QCyGiKp2&82ZgB0JZT*ro!bHuGX-d7|d5)XJKXIwgBOxtd?e z#o5%}-`U-GWjJ96SO@nX;8K?y6;DWa!#lC#v!S0MCR7KjoTZ+37!@V7suQ|9@T2 zw~P#)*1k%ikOp%IRZl>odq6f*u#OsEk}=2Vo7H97S-%5;D8292ZNr> zH!GRXSB@jKB6rx6`PD)eS1TFoS5~@fDW2mO#Hf3fb)H9NRp~Nz>0hoqEhSiAfglqYXnaR`1-D>1*1 zThB2Dt`^L(mvw?HDuQ$I{FI2Jj$e`q)_SgoilV8^=Q9fk-8eju>1-yKXXi4V&SYzV;59qU=182?hPgNRH|f9FqoXxvdHG2-7R; zNv3&R+kVvbcd${7lKtzq%Bf!m5kT*rfvvFD-d@_O`a>DVPQ>#_&}yM8Z9I%=d<2#}~e zU|Z5wPpzcVdC9Vau&>$K5qtsOGDj^pap6Uh9hdfe?H;j{kw!)UKP z5E%@6GP|70|Lo8FsJwpfMftz}^IwpUwDoE4KsL*@CCDfpDn9gqA7Q&Y8Ao@XN`_>* zOS=NjZ!)Ez+q~-#wFw0elkcv4Bjogiu0{~C;Y+4RV6i|mR4LL1hOW0tP92Nu+h@^w z5PwtR1Ie5wxsHEjF_F%Pmfn-My3}d(Ms_I&aUoB*f-r3_4-n!^5?RN`tjY|DbAjPK z0mWd5b+Tm;PPiH_3)t_wZgzU{K9r!aid|)yt5{pT4@+Wg$=){o8o35MH_Xk{O zG9>w~B`Qxyh~PA~5mmM9v;MrFrcEpqxB3^#myk#`&y4moZ5AZT(d@s5#5T3pz%bmw zfv_9v;s&F^mj>DlOzai9q%=_pW}KMy;1n9w0}Sq37xhpM49 zX(;hO|1eb~F&1U#%T48j(?fwgIFDV3nNz<+Ts?hkAh#XE$&;RHGG;RJ23bo%C7&Nt z%u~!r&P)oFAp#CSUtCOJ0^5py)!?nvs{lNe9q0m?$_YuxV$Y#)yFvFPVhUa~x-IVI z0zC*Y_OldbkUM2SAY--S15gMYQ3f$V*;W99L1O}F5N|RM3Azw|c$AdCbgi1Pc^|=O|D`(_Vn6viU&x%lOqtI9x!l{ibwZggrS$S@J z*qI@S^^)f`qyrBXE2F8vZgwVW0tp1pEFunN5Hlx;;n}5~3*{&jS68GWFS&x21x0Vj zgsuP%XJHk+5l<1?iX&uwXFdP=uYXJa+F$yU z@*n^8KPTV(t#@T{xiBZ{dhS{I>DY{An9UONFj4}iqZ~)iLXi@}O9 zWH~Z|sZ_T2dDVi%^GJRmAYE()Czd;Re2^v25@BN((}9aGGp3d(t8^uJ6xKqDMPw1- zh>3rTzOhf7RTs1w@}WnD6=X&xfaJXhSi_Jbo##4}vZxxMMnU1uL${TVWN-kW;SsXu zH|th9ir|+_BnjSutb-lmmx4Zp11Pm3$#d)_TG>TV51YYNO2k8+G#avNvy#zY4^3noBI)la9nxy`(KuGDN3U1+mowqr- zjXf#dRR(UILD2~Z+v*f`EmqyQURj0E-kt`Ab}YMHucyw+laq6~oG$Ep^VyZW_SzS0 z=GxOIk4^V!J3Y(VL{uXkly$BRuZ0}o`9j2O(BdTx6O>a%EV@u6(g7)U!aTqfgc;qS zbTq@h0MLDd1z5k(TH%c1mWsKYG!$A{o4Z2E6{%amRXL}o9AVySG-MxT{AG3`$d=@G zE`+lEYl|VbO2MN=G20a2lhVVOgAf%{=@96d(`#ijSKL9i?t9zBP0#^A`ErliEPQ$%>RH)ZnKRsBhy5a1x0~5+Unr$|KePD*e;Y> zwHBipvsR4)*)d22-Lm_<<7p6~%>YPXF-rv1Ag+d4O% z77pMtIctwGA1ttBIdJPc*)t;&9$5dEmLaB2dgh>ad>(p_d6aZ6e5|FPUEVeL1)UDO z&sDZ$!%EGuY%i0uHtn_2*NJV27Hatj7)F2#Pa8=|NXSg6ge3%?D-(n0Dyt;)8r1C| zDuvBatGy33!9kx@D`WM#>XaU7mH0w#-W|)|{%e0)&ZlSc%m3zEvYrp5Kh&fm)k|yF zO%^2LLV3pcu!)Ip6Dz`=W0z?|`T1E)dIZiWJyy>Q839=W=XGVWw=%(K0`s3>+eFe8 za3FWaNk1UrvuaD(+8^D3l~+fTeUSPG@)S3r{pryK%LS^qng~^@;wubMw z;eTN=No<4fvnRF0X{(=_WModv<54E$WXkPWy%QGp7 zr6hbaV}!as8Az(vEmsGC1tEXh2N*#R9xm9bwHcIL7TUoPh+QCq(iLDi$DDpV1DJI?x)7KtaipoHm!gtq=K1_*}3J%K2)Z()qY zg|hl5glNuM;4Ck4>Ki@ad{Qa!I>3j%nUQ0eo0|IzV}%qVs}=tS1X(!%GB#(9G7S`Y z3G-m1Z9vBI*4v-Tul>8j z?iDEcesnUbo4`&v6boRMAk1n{1aYDw3>oV#mwbLswMSxE9rIf(bE+!802)23warE> z!!2Y$%y6NCthhH?p@459K!-#AoB(0AWhGFY05J4n5@Hx-X)_cPr%uCu<~cgwy@3xMx7Hvl8S2c4iOv`r+5EBjY%b^Lrb{P(zZz23T!@K$o=~dCa6s*F6q2%9DU^d%V#fos}~DvV4k2IA!T?vHXbD0-=OgP+w zbVQ?+kdhLn3GgLDl&))9br-IwVdLdAz2iK5o3d(eLOw$;hJH@o&;2VtPg^XWQRS+BPAi_Yf=<`EzrQD2TU$2M^61%-RiEze zY|Hlkj?J&rWTf-+3%Qyv>@q5|-B}xZ9W(mUZsAS@R9T*w4wHR5%gtmP#@K|jGohww zkpjV3n5GnfPq?YdGQ3w@6rtXdx6oOp?;+z6u!=LFIaX$$s(z&m>#|{jkJ8Ek&ARN# znUy5(V6OwSWq^n5jJywIYb3&1wHW*cWZDK&PTUlTJMeSaDZF(??#6!znwDDUpbab- z#@z5xuvL@BW`n})%|`Jv$a z?J>`hp9%pXOWd#^a2qHLQnFjnc&SXN^=)k3#`8>;U-wh1aCKjG9s|Vk4R)!w!v~7%|^jJkJrwfa=wwB)~WLVh8 z861h~A*aXE?ea)T{tGHIKAFR*QB&G{th<4Q1|dbGo0>9@Jw zT}FT6Jzz^}XK56liKKqk9gk?IHEmiu^q}z`WV5yYDcqCE?wLf=98kkkex>s3dD6W9 z&b*Ykqw&r9XV7v|>*7-pLUA+5vEv6|i);wL1e6>(A>wA4nH=jOdn+#A>tq_m=T#?A z<|3)s_5kT}9{8R&}Mgz%6ikVZySED{c}%;bycG|ig0UTK2oC_tCH3Wp?^98U>lMXk=b z$|c)VK`638iIPh&J@Z@|JfI(c*__zX8y7&idZ&A3QOSl5ljqtKaRPo7TYw+4(gbrY z%TU2gt_A=UnGms1xojGu>NG$mJb(&aF9TTA^Bsl`$!k1c>Bf3a09ij440Mb+9PG?B zM?e9GHSBTwpYfMK8;hg4I%7C(*3x}7H#y=bYVPhZ@ zMa&5oj=`Ay<@_74B^^za3DZi7M(={ge81cYlHbs;TyBmlW=tj8`f0}JdTkE6?a8jSlGCSIEthh1_Dp6|op~{q8#ivs z_GBW<f^o(~ho5(SI5?L}_oR<^ zhO)b-GcUCIsV}SLT24tXw;7nf@AR6_Goz^-@D^X*e26 ze=v$Qs07w8nrk^LiG0r;%b}{su!psj3toyT?j9&AS|kM0(p}Sj1-hq;Uok2@9CSTz zuUL#0dL^AR)Fl9kS-5F=Wtv+OC>_h@a(N)~nkf>V{b*v-CfDtyTq zp1c)-8mzkws4?!UTPN>*u57Cc?R50w{cCgR2=8n11Y`>6px?7rY?r4~Io`gI7hif+ zzV)r&l@H$gO!oG6WM_9G`+M86y}c#VD-RT1oLyNkUn|yBuR4uVV5q@4kOQ2}35Z0Q z>CC~ge{7dk#whe-*kww|wuZHwo}5`y!NI|<+`4sBc6PSq^!QAk9-YYU{3>P?ZOe_( zq0E;{IX}CQ<$P{5Fd7askc>bDTAiV(5&Jf4R$Vw;Gr)mljqCGqE0M9}HiGP#Aqv?TyJ2#0o`Ag!BN-*gpt_3#D#GjD6iRp{9%HbOH?i~WkCeMHl z{11@naq_@Wnasc~+VOeUSs=`TLX_}}U^Y((f1EpY7iedjguf>U2GxX{ zYp@Brt=n=d(m09k5*I)oq%X1f)Z}T(!LpO%F`Cg1MSoZn`9C}JeQ_ULtLf}S`inl0 z)wX^)!XAyzE_;ye-}Lo>f09o8e^}?4#L*;=XghSB1>wgd3;^0}um^`1N%s`!EWXG8 zMn!C{qrv**%W}ZL&?}vteC+j*jS)-OjYeP~cuMU^IoT*X`0zd(tMOcCoHg+UaApSD zSRc@SB8Z%{Pdb7bD+0Ja`x?a+;AxciDO= zf1GV;h5(`6JgSIHgP~xjr=bBQ3qC_TClGWH6-6rS{&kbQW)dO|=p=G3#buAC#2!7G z!9Ya`wB^V|EfcPoqOPCLfjlG*u3Yc;TR~LMq-+3F^Q^Tea1@sy3_+iAwTyJ1fPjZC zpp4_O z0MM|7DEjsL?&HU zt>r#aaLqJIMD4>NRL-aXVU+pTs=^Y|-3)ol$75*=9ToJb#;^yrN&+&2rIRlo+-bx= zk6=jk$B*bu%CWp;D$i&UpzrIfg{Yhwjko28Z$Fm*?qB|o^3^YWLH^<2`>V2hD6-tF zWVAEXPA8sqX2wRrEG*0O4&&jd9YP*0G9~%-#(3|v1PzJh_lmO$u#C@QzFf&Pybmh# zFC+UA#;#jQ5lEnb2+p*l+sfw8U*dk5<=iSol+=3_Yn=zq+*uw$kuX9+{z6uJi-~A& z2}1>YkeO5z2(&m$zax8M=aK+fj`KkTzc7$PpaMG=&!x_gGPuK?l6&YGtqk<=Jji16 zwg%qTA;d9NVUd0Vh)cRE{1c;^g61OANdHrymOH}$8T$+|MwgQ|}o(WX6M!*nR zLXC*>{Y4f!4|nyg;0)f9#dsb7xO&zWG__$=V-8}KkUoi-kuyB z?%S-P)qE*ur)P3>bZl+q_V*9u_U+piI6A+$l&43}%+Y7(tbsjpgk_sX@Kma4*74LD zAe~tFAapFw1x9nJJ8c1gKF69ZuU}Ay=wh{yt;s-c-QShF_YdUY#vj-Q^&qld?G zc5)@lMag?>p&~t5%op;~OD|f$>-_A}s-rM>sA*}I#x!(uIegJx*c~HbcxT|Xf?qJG z?CdOCGR`qyt380h&VgIVtjvMMT!{wO5Dx>y(>35^b)4(%sEW@~c@z_>BcTO2&GozP zf2;;)3bM-h{PbP*A3m(hf@Z_L$xeZ4uS9Xx2GX)Xb!MHXV z!4^DO$Z>2Bz^{*j?;^NO)atcR0#o_mZdcnfpCCdh*O(eC@S2 zWO^~TnQ2cRp2)+8Pfd1h?~LW{{X=>1;!QcYu_K$+N|tjSm=y^a=4|iIxCMR>nzSn3 znsHK*3BC-n=j?~ z_}peLT}@{)*&563TL*IErdF%=WVu>cyHM3P%}-RVx-5z_w^qm1Vl}I513WnPm*e`#_9}HPve#7K!QC>@Cg|Trw)K5EAulUP0h+OG;sU3H(uE`Ev4t*Hyf#d^V(wLoKaxXC{f;^>rP<0C3iLMVNv#t-# zhEu-$LE%zrWO&VTA~GfuwgS&CuiEGKbUpveJ9>H20p)f*p-PJL&fcYlVYAj*Uas zG4Q4UeY3xTq3~S3AMLzQh@8}rDUes*9Ja}NGlK( zTWK|sMl%N5W^S{V@zzrQ{?Gqu`Pvu0Aph)N{;GWcyANg9+wyrsN)M{9G6=->gTG*N z^R645u}`p_W4DPG%9@U4H-`=$AexWFXhzF9zc(>f;ghQPCpj1VfURPm3Fsk{!{EFy zUN0Y3uFmFaMkq3E@~VLDp!BRn$>aqJUgFH{Kdh6U)vJw(zUT~)ES|p0#+Mm#BJ7#; zB}XEN<1p9thFO3SGQh_E$HE$EEv0{!^qQS@H>eRj2b=-=<;F{4lQ~ia0)(FivM$a! z)(aX-c}E>fARo=ffSd*PZaN)hGq#kUY<;2TT&Piwt|nF$O3^|(${!~43I-lWpx*KD@~VR56YIKp?g} z^W26wgGrRs!G1{WN1`aS{KQ_7%y-O!7NOlhZn>CjAEKiQPBgI+{zWoa(i#P&d)I>} zPVe>oG$})OW)c|xY$&>#6a-95KD3Tr5S~LChe1##E=9qi3}Ci&mn#ZCT@xJ2o0VQd z8*kX>W$l&Hc2!8W82+QKHo#Q+eN{Q&;IwWLJjX@+_j0h61F7MnA_NM=W=TIbmof&p zH#+ZL#&-E1lFa%D7+OY`B?;h!m>Z8r%xHfxd2uNO5Dc3#&dex9#az?gfcK>gfB&5+ zrZSJbGQh8&0Rg5-G63@*cHq!+m+=#K=3%duT9%BI{T!h{xW!5cf$TZoIJ+n#fr!}8 zm<(8g2wlCH*u9Wzd=9%^)kYDuOd~WiOnL9}#44)oAOMDHDc;Izh{jXYT8C*9qeyF= zbuXs1_W97q-3546R#G3&4E9$Bf95&Zb-aBE1UtY7shG9}Ti~D)FK|YdqIDq^J$n-{ zhXU$k3?V~|9*^-f9X5bE{dD?d*I^fZ!hec=;(=&M=lpyy7}5JE=%UUtG66x$Sa148 zD|78yW>iRCcAUY1SAwtP31_Vn?fD>^$YGxM37%tPz~&}pr-7on zs0*Ng6&ZkJNYY(0%L%OuplmCk9Y;#Uo%jcMI}L;|E+|nUWleA-%DVk`81t3M=oPs| zw3Q89l}iQE;<>TsF_Wym!!*kez_O1aau}+1u;FN--ugASrUG!eW(J<5$nxDyRIpB}Y%MWIkJ&bG@&n9OO{aJsI={GQFC~-P?C$e{WAd`S=rG ztF`?qheKsTRk~0H27%vF0Ig+}?Gy<1W(H`1aibK@VvOgj3c%6<74+!fy^32Gou%HR z3{8h1Spd`3mu#?@soBBdE+1nJiFqg>1Uw3vhNFa>Ow2;rhlzdhQtU3t|9p;aRdJinrviiN833@TgMFMtA1MBGFHIJ@VS=(QGde-F28(M>gJgN(*bM8#yBlf20vt2 zq@25Bvx~JT5Y2Q0x+K|SvlHpOQ)k7(%IsnqPmy-rQ55Gx{`cfj{+K&L$_OkB0RAaj z!;R`QCA-)*^4q~SDLKR~G82!HUaEGz2}Qk+(rK z{1tW~&N)1au@Bs~_cm%G7 zJ|VvlRhh%KsssUG9bh8Z7^r?JX;!lr%bv(1PEx^xggum%%7yz=ALDm$IeZYn6*Tj; z%NwW=Mm1*>)L{Lcc1;NyehoOl8)m?MM5QErlS!JnrtUQwzX|rE`?>V76s_53Ne%-D zG*~z3oyAodz!g|-J1CVug`OL>dQ)5gEYw1o#LVQwX-G8hM|{UlZLFJQ2>g+pfZ)%8 z@KRfSQ9H`C8~0)C93MzOTgs=hw;QW0oZv2NSk6(zk?Ee=(5HC=TE%QNX3b{x@hK9m zh1U>>D!En%K{S=TQNg1iz5q_46SE4n@Un3t=@(u^opmJ&;rE>FoA42BQ#*dCv`N{G zpVZpOTGl0nCvlMQZNNW81PIS^uXZ)hpM8_jD$;drbOI~GFYFWQ5S9rAU0*Bkai^-9 z_b-za%D0(qn={ZxRrI0LISDN7yUyNV6@HVzma#t(AOf=z^LHFggkBA$L?^C#jeIH z9m7F+j{~$@)fJQioC{=(`#dBE2~}m(0^`){ogVV8gDESkql}Yr8o@|Hme&taZ2v>R zov+Qpl8nU!D~UV`%rlcWrTA%(Rc3as5%gq4LW4Ww9N{=D#e{iJ5lu%Q{0arc^LSNM zg08qBW@_OniZMz-mqQo?SWX3Z(5u6d49C1Y%3T{cnhsI~D*dIlRRIS?JVO@^>^g9R zc--^~^F;0`?hbD?XF0^R*6uXb|Hi|KJbipA|M&mqm*w^U{Y&zn{@l;WqleGr*MIeG znM`(NV;P@rSR~MA?+*fpXb$fz*2o{+(}5UeT_KA^ot>GHfS_wocDA~p>%rIsX~a2) zpcv6?e%$~5hVk?P9n;<2s zd+K`$L{j8|2a&yBlD~rDgsn2ukf+`7`U|innoLJQz#Wp|38tBriP-Y>cr)8UM&gBk z6xkoegAintvw|lreE~VWR=h(YyA(1rZ3Ew3rl9GTzUHp?d zb&gI>t<9WXU)#w!O$FG8UgopRAUI{Zao{oWUI>@~{^@LXf+`0ViB)rOTE)=9B)1MZ z-`kzY-u}eqoM~W4XIRXy))vsV3b4q~Eo;X!%rzrjv)Z43;dwbaKDN0Rc6~a3tgm>s z9K^W`c;28vdmWCo2At~m2I(L)XF3@}_&oGRIxjms*34r{taUvgnFeb*-%5A4ElU## zq+EmOM@C*b)(XZpNme0?;q*ZEW2r<6cmY2`*W|t9c~hPe&Vl;~vK<&9-IFN-Jj0)y z*w}lMqscSiuUG?QN`p1SX(p89Wb?^5DzBNrnrZE_YB*GS(^iL9a_9cG3^zSFem1qr zwaIubI|n*{NZUHPN88%>gsxx5{4*E!WHftPo;|H+XNN8iM}O{orlA%#&n(bmcM?nnk49TwGLRGNCT+K^wp^$477|ToFcHDHz%INtBm-a;Y1p*G z;lO66U7VfE3opJPPai*#&DxW3bdR*V=E<|EoS)8QcYn*;&)uDD$5RGTOKbapDo{83o%Ep0%Atam*sUxnS?xUJS-Pel;Y`o73XBqoGKvwkYUpZqB{y!~ zlsk8Za(;0kr>CxOR*QuNk|sJsZg*S86X>c-YZ)06uMli|kJd2WrXa#s}a-{-~*x%a@#;6E{j1Xyb6bj`@oJ$ed2wlVpG6OAI|n zz8IrT%=^JUmDiMaJN_SYO$odK%Z8rvahLepF-QCsIE^NoakQ*!f6-9_)0h24L7lW< z0vkxjCXWF@?zZyJAyFB6(e+r+WXv4O72z3S=XftmZy|@{wxCc{4@Q=V2Z#D{wV29} z{nQKczxoG%$Ep|qi+}QO%z<8(Hxhb7Qaan3o*wrHqLI3WKV{qFX1M!jVnv+(NioHo*)%Roif(am-wJu@3buvoE$TCA@)O zjvyoCTF5BOylsLWnP^@KR;~F78c#IczMV;2puyJ1=e*3x^e!thP{y_*&5rlaGxIwC zSfynoR3hjPp9{y)eChC&;rZ#AQpu8UF;#K}lT%iaKE}0y8mS`o;Xbz;tF1kxt~q6Rgm? z?p?R{${rCMP{9Y~hyq3@3EjXN?bm<7J%-r`sf_iXkm3J9b&nJfi@2O(Fn5XZB`sP*X9Xs0d*N zm*+!!pRW<~=MTA1L2Jp7OgkmWb@2c(=H%}<+iWk(D@?9K={ zi>M!cN%Byd9sn?5Z*l=fR=I|uOw-KCV?&S!(lE(|%#O+y&kCuQ8lq~Iqw2N)oQ3I5 zZ2z8TnZ|C!nU!22B}##&JZ_R1=+%y1wq2*T{f-POqe(b|z*Fi3v-Dt4kKUJy%QJH@tD#}fr835GS_zR47-(nF<2?!5(55lrT6 zj52ls>YPEmEd$n924u9HV3U!8E)^K4>P84AR5zGBAz=zyC><7{H8ZKn(M5EW^xFu; zJe9hB=okb(^B%EIe4$$L)SAs6rB)9fQGW&UIfV@7@^O-nu_=Y zZE7;$8eH9xQ-x^DnV07fPg~7tIlCC^uYXC(m%&;ntLE2LVo}f~Wk1!|Q$9Ms!b#@O zqYfYq{OGyt?e5CqjYHYn-Ln>1r$?u9c77&TS63D=+1cHZJGbx3!NI;<&1UlK=@Xe< zP7PCO#SN^pY{^lPmq2*sSRMpMGiu$rxtYki)%VaW= zyZ3I$gXeC_{^71=m_L1VEYBXF%hiQC*&PFx!@6Xxo9a2HQKMVMxiHZ#Q(wY%wS2pm+`h}_Z7d} zf^9B9P$qD6U_5U}Vx~mmRd1I@juOh~&gu)I#|&IWYqJVw(;OpaxZGAGFF5w{HmV`} zp$5Q12`Iui3FEvF3R+vi=;GGZ*z?9*Nv9x!L&@*J{_$^((aTd0CnHr;*dDEAHk-+G zaW2olG?A}<^}alNHkXe+xD;9SY&h8#< zsCu~=KKczDyT!Kmm?gcj2JZ@f?26}A(!1aO8|wZr*T zi2#{o?kvE8!up@6K(FjmX2&`w4qiImNNEGiiZ&qFv2<$HIs2TNkPj3XK-GP%x6{)z84bqr;JN4I@^V%@6OdwY zwULvfOL_Fkk(`~Ko28dD8hh!sH&s+cCq|=}eoro^b9waeiCit_a(J*Wx9{ARt;v?m7b^?eA0MB}v!};4 z2Xl9SPj276CA)h&vR*Gkuf=Rga+GJH6VMnt&48O*@SmIwLpW(P+oF{}!1=2ar9k`b z#5Rsq5b%Lr1T2rGy8T0XJ+KIt*t98wjR2WXK>$xQ;R?ZWw3l7c2Jd;^Y@s?N_-G%CwLdgl^?1-x^c0qwSQz9Ry2Rx-sAc8Z4s2fhw z8v0$jwai*?qo?KHZo6oOkcpI`NZ(?{VIK{{_8MrVcuy9~EBVq_ZpeT3kN=iDxOGSV z$^Y{g<(t3#sf-2_(b?@#keaZ-{GYCtNb=0*F9RliS03p#4KJ{3*sn^CE8H8@T-b*o zG1~q?G_(Db4%cvudbpr;SBuTbiI06JoY(}A8DoUc0TsE0-+I@0El)pn0=Kxrb*oKf zQeVfsBr77{V6BptVA^@1kK*~DYif^*)qwqMc56e=lpIS{PI#Xyj=&%3o5l(e)QEf7 z_j7%q0oWZlnQ9A&^QeZ+Wr3D2g!n%Lt?`{Ev9D}M@SO!r3rxo6*=Oy0gy!RDkJ-h$ zzWz!w0sc&X9G;OqN1h!N1P1(H`wzRbNuUPT#hK>52A%-4%YYB*np$XeA4we5*q-2} z>Q0ftBfy*3uhz?^_!LR=L|+`>1c8(%C3A~G`v{(KYe4AI^y^_yU^fJS;Uhs(1AGq| zpke)1TT+h!T7x)_Ko#06d%_m)Co2G=HS*BlY=fu;dKZC3Bq^}X2c78H_c{@j8iBrd zdUm_6E`J(3!#rg zhzCJb4;w+}nBUJsPw-RyZ+&CXw>Z9^!o0H+$;e=G?y1iprbKqb5ZQa0_Y~1?fJk=G z71J>TmRW_HyHrCDVa{5}zc+49xYIZc|BN2ud4q|u4rH*W0xf4$(sC+C7K$aEb0w@3 zJHV}C;s6rmsLs8O`@-oB$8UL_S|=xNo*B&ap1l@5 z|K0!Q@5$?L+?4b4bIW!esR5$bu%HYna9xG^C6u;oW)U=F1^KhZ9|7NlR!JwBo>4|* zz7~CX%LW09R>mSZF~JvA^?x?1YXPqr{cyM5| zhBPpAe0(A&Cug!)&MiPP7!2g*jT>_J&K-N!k> zXO3%Txt%4^F9Usj7IiFcPqyXO?OXEf_}H=py#qs)GJ?00(Xgm+7{Y02^kk`XYLphW`{mIeSLX&o(fNjJjyGdY8VF1}!q5({W@mU*H90{Im*sA0>_ldh|? z@;7H1#Lb+jA}A6LGw2>9F=S99hjJL6?hVY)d6R=sM=} zwN(^7{_IFD&!@6?up`ese@h;`cuU4xLzz#ntg2K4@7by*v3EQNJ60hN;q(UWMnxtR z87MhtQ?NnSsRq$^^!}QhaQy7lW)P_^x_#rO1&fpi^!fCepFKO4)8kXCVm-XMFSl;r zkjeIztTszot=AFYgmHv`P+&52W`ylRsRBtqfkE=`5CDcO`Ym0keQbOO%okrutcf+` zzXG~7?mjsw9l=PA$Q7=1OT8wU%$NwUDo(sbN@-#0ZTS?Y>2}5 z+vGo;Peaq#(-z|3nkECorr}n8#qNPcGi6%eM*zO%2UNY8KO^ug`Ox8QAGF0W?t$`^L!fBTPrR=)A2H{`$l zSHC3x>c9Uzk@eWB5q;)RFLvUqFl}{zbqLc6|B^%4zJ&_HSe*P@0it3s}HH6PlXf0QnD7 z_CQCqY6T8oV_tR&Rk5>UhUm9-?VIjyh%q|WfnH_Bib0wd0hXq!VStJ1ajOY)(wjk8f=T(KH zZD*~bIvE4Rr~zLjZgBAhW*SvN2>g;Mfl`K-Z#s)I;7@HoCUw64ht2h|>(*G2Ttm=b z(pBTb;LpW9p=ZM}1zpv29cU4E!-k-#^rr#`MfUfQ7!i=_P5#$;>jx8rX_riqT~79 ziHJQ2=YEG669k!29dipZ5F4$|u;&Cm^1d11^w)icVyBFXz+|3x2xHEwtX4_b_f~T#B;3No47j*Y~IME^|}y8#WQwlgoMiTaAs4_=?u0ae3Gs9B1~Ye6 z4Rd9%=rj^N?QAbxPC>4^oVspYVDPRv%?uC(e`+vC13A%tKpkUhSm+EBbue%3ZR8*Q zy`Pc)#n1gM`JM0np8OyGPybBb`N4^7kM}H~v|Re|Qqv=FSVG*P=TEeob370{7s}q; zf17q*RfiNQXbG8;+??07+n`mSU7neOh@!%!A2!akQnRmO70d3>n_aecFT28&DtC&WIM220Y1%fWUc?#Fshb zvu&g1ZYCB0Eu8|>05Wu_Nk{2yqM78W zsJy^4)z$cQrmF}pu)K|T;2^BN_d(0qL;U*ZQ_BVoYS2g7UI&3swkEPQ8p~q2l&hagj_JS0SHV9EULcnK#hVH*qLt zNR*SnIJIL36n1rt>5p#666qcahyf8Kh)|O{jRoX)ZmCZ zrKPu&$-!FgJ=l`h-n=O5eO8qxSg_A}L1mhKFIom+XfO}3&Y{&Q&mn&zjVF4rGrR#k zTZq^KBw&CF40>*d9z%%*d%iU=oMV#UOMwSe*i6x~5Ar(DVx zE9;yA2J{5%L+q844HB&|gcHtS95LCK9EgN0PPy*(ZIFD5U-m9A9)XU4Ovk4SO_fv1 zXWHOp!eOB&89xDQdZkt+9=UT0@~ALuYr$Z}wXb+KB+N8&D+2-4Ie`MgsH)esM1E&c z75P25!q1*5=T{USfj+QI>XdihZoD-OsQqKdmToX_a!BoIbpaq=&%~hWJ?Jkj9& zxI@l^YCDSnr{~w=dEw;uKw$)(BH5>#q-X6;`x_Yy74xlSb~TkRynZ16`TzQF%Afn` zACv$0um4Z-fB7$eS&klR8{#clFIQIKs{d+5tIpXoEN1y3E-$?eYEuLe`%_@2Fmzxy za&Bdd+e|HV>6(u2#5_SSi4RzgGIk@q2Rkj*Bod~p>a!-s)OkB?RinkEvE*sezs&cr zJJ=V}R9Mv9bnqT*6(ljBU0t?v#wH|)->xf@C+ao@^6eyY^Ms0L?10CX`me-C7)HB<==!h^h%|El#}SEErDr)LE(J@}Y`m zs4AX6^*QsV%bvlV7;UqDr{|C3WSg$AJn2>(co{Y!e@nL7Tt4y_q$|8L|1huRQ6j?r z9eX3&r;&Y|ojFRzH&{E#v+yU|DZZ}S7bIPCVxBLFN41pgo_Zu@F4JQfRi(@095Rqu z0g^nUxL+m!xgl6OuE99)Id=Vx^;^;o3LKK)31`w*Dw(9$UbA5?qK(8Nghg@Z!~*as zTw5N|SP>%o|I=5Q`;(qow~GUBw?0pHsuSW%pGUiZ!Zh(o{ra{Bh)VO75lWyD3#p5; zF~dRzLZculAJO$)DKVolj1h)IjFqof@8q-wix zqQpw+TqOlWnf?&Kz9+=!iTG);DPT$2Qq+{imkZr;$b}prfr~8cbB}6+1co6*UynROo8rIzNyagdlN*(^F*Cg9fQ>AH)-YmS2a~ z27U*xg0_)efxf@(X~uPMzuIF2lfg69%bXl&O+W=mh|Blez^DOj1Tz!p7sPS^#DIl? z3bn#B)(zf7rdT)#5a_7QCcux=4&m&7qZj|C>D3B{i(jH-A)IMN2zZ~)$&6`#HkK1i zQKb_@1mhM61m%0!ui!BX5_!N#TM>BHnPr^nzZxhS_GGrWlKsP;{KLQdXXQWnJAYRG z;N2g}|M|c8ALRSreI%RZNJgWf%opnLT2WvqDoxagh|Vw`1a#V4u}6Luw|@z`bvO}54spuL*TWH!?o6s==) zZ)aC_5BAMTeR^^tS6B0>_6sLEj60l3wqaz)R-52bN5&wR=#U(6o|F}kIMf=raJ)&C@h#D8IOz4S^0kPH!{QvBw4hP0%H^y#=<@h-VIk*y&}y!&cA|p?sx1|T96}Be)&h>g zKBexgtF!3>r2)Rmr$b~xtBNDr+G)uv2ZsZ<6ISb`^hO)mzcG{-UfPv6zIsDme&dE5 z+?vSK<8yiUy(9VH!)JDmckds_Yp>sumtMUko2#|_;QN>I8^83vJo{iFLm3+1DV=Jt zNu6!hIxc4Yp<*bFw5TL<8P--sCq9UWZT2#;CnMi-m}2kkeG{oZq`Wb_nRIQNU>Jw| z$@(&Nk(www(ETsum#yz*x%5_2Cq~MBc5Y8wj<9|^d=Fh1?o&CK%IXKvp?|l2a z_L1RuNQSp3hEVu65kjc)L%+9BBe0(7%$Ct8NZDhPPjuh#b%R$(S z14evq>`1e^L7f#Bi3PBeaAvLtxYIz{w&)7rfmgBWs2hj-7K}YVyRg}Eia9mFZ~WgE z+1uNdoxN>qKR2CD<>KN}uCA6oX9;^x^rg0p2BJzJbY)Q4b(V=uQP9RrCbG@St-Mm} zm?rY;q;te944N-mp`4B_z;Z73%~`5_y}_+1tGiK+RysN=_V??!7#%VOsNfJAiCIBQ z`|9);SFlQ>x;thD0f#isAq0OzkR|`xLJ8SJenA$|^)Oc{oo#`SS)##b((E^B3%GsQ zh2J9ZvK+cPx4kO)Z{TBK-IOg{J4p%=NjG~2ffkyz=Fm6pOowo(j@=yNhugPa0URis~ z^=jpKYo)W#bl#($X?D#H{T1g084_!Sv(}zZlVC767&Ml2>idSuP0TK{XNe@-I?L+; z-*U{xnPdVucpOe!=9%&@aW$C-9U{>(-9_a9O}|IjdBC!MyWpFg0~TKk-vVQ~L`xKy zjdy|k0{5V0aNyh2fwe!n22`LqJA`h7E+ov5!6fGCM$lcSd8{_=xv=4TJnuJVai;ty zF;%t@vS^Vp<@G>N+M(p< zC_e>jIbKZ@)n>F?&z$Qke}=t6?Xl}Kan<0X0+fUZ4DCgaJDnxW9JG%Mqopw&Bl01+4j<3Z{%nCl$9+eY> zow8UHxS9Z0SDhhB-DEJ30}?~O5|Gw+D>9F&6$L`o^B@y|0oC-4aX8|PJ} zi0lZh_cNo;+U8W-gZcsBE5}aG7$arnfDo+_*~!rEOUo~K4!&DtF56y^A)oZXbj$eC zPl2;GS~~FWTb4wgOJ(4tLnH-jWkiA6(%=D@M1&+OFA88?Q>htvhD>Lg6dAb2FN6_& zve8cs?Ft5#d4`tw9wgFAqV0W=zx%g-O8)-O{dswGbR_@vKm9fN_rLj;OwZle*K4Y? z8a99{Tn7f8Egk!;tqU+9EUUthh#B(G-ljlo28-j*3~rDf2wE>YAodSElj9(Ae>@0jO?gz zd?C4*IRN4P4xv0Eof{*dD>4X`v2DA*D$h%(^MMqWo3XYlQF z15W^q$l|Oln^q4&evmw2z6_dCz8@r};J`v$lQA*_#m@dhMrB*gl%Gg#49ZFeoIitt zV9l`Bs+h_4w%vcG+0~a*uP727IIQj3miC#wgMFDyw&ddCO3uzsJ)jcphKRywubdtV z2LuQWhhAbW$Rm6$kQiJd?JwraLAd|P4pmH0xHhzes&~7rejbz zNpyq)qG%k;V$F)U|MI@;>uv}p!0G-12dIj-r{l( zcoiR9GhA5?aS$qGkG6;c?shu%3$=rnTM7g(XIo>)olG1mI%{0>_PSq1gFNXdNt_~` zgsV!(ifGG(P}T|RRO^0 zGY`iD+1s1Q?K_9EwKbHpvrBpUf^yJjqgO0~zb7br84TeM6*UwD0tV;Im>_Vm& zGjESN9Hsq`Kk!AzF>zHn^az}=Y=@yLy=xCZqLKyGCZsjEqZst_0uPzWVoq}iXfOxQ z4PtBn;m3%poSj|X=x&DEIQneb%FwGNQ8nsd*1uk3(fzSuKgOOZh7U)0W}m0Cp7_`I^^n}CWA3qBU zG=oR-e~A;)+1Wrw(pRm1#^*snO&}t5D+iPLZk2>;)j_7n;*O!yVw9O0d~VAP`Z64O zX9#WQINVyvPyh56{nv~+JvXZnO@)}_r#M#{LF=NOP&}qLcLAR0`wlJAoMZk!a>8 zuZVi(#QtF!w^v{V^V$)T#jsyCi#dikcp?U2FAqIy@Y(Vyw}9*brO*v9m2JC4z^!( zh@lEmU@HHUyJBs;f~Z@bU(x+gmbn}Co=2y<&fik3;C-&9Nf>IMapxl(=9$q7@LzC@ z2mv(6PVefm4`#~yr6EwkEhnP7VB>!Ta0(D%%v%)cpF#CP9F3npG5{zmw>dHv=?o$H z`RHI!Mj4>9b*puhFV>!2;Om<31>qAMNx!y67EIE?F0UI2q=DFO~bgxRaxpNAAyK49b+s6!;y z04HOD#>iy1-y3;F867a5$T7&lLVr!qC-{_<5YET;qr*>JZHcUeCdf+jY5cij9nn_K zb!X73&1i_M;_$}R+<{G067^-S?dB$H`D=gq8}g6-lb?~%&RBl&7k^9shhO=&eD=|W z^an$8VC%lDmSI4sVX2R#Mu*;mTM;PFC2tW4749zjWL-^(&U&#EpnW`fQX)C?I|2r>q8BWFDiPYzHXj&T+L71!76tCT&Do#I+<2(2~I_ zWW$C?tlRn@>bM>b`!dJpe;>E5*s;SqAq1lB7$%8bsAgEB>5gB!~z$f_J-(}V!x zfzezB`TL%*06D>6$Ib6!Y&4GO3i~I7mpS&lpzJ5z4J0ee?P341+p30}6o>?;Q zgL^mR#h32N)_6;1XDj*W!xQ=7tt0v1t#i3NUdd+OlW~6}E35SL`>cb9RaOJrWre2+ z@EC|~&JKOP$T&|p+tPfRZi-QnF&@w5>ZZ;YqcweQPgRH-rm#p6vVgss!mEKaV;obC z;{GWl9IK?dj$oHMpHXBFiSE7cTb?m}l1dyj?1?0qeLN=`8%M@3xH#6wOH6p zx$W&8`Tg&GPqwzlxmVei(MZgn9j$uxO?PgsWotZ={lgu(b@#wzf>skf`s_sJa}UlK zPG73m7nrdQw>km1(;gY)zCSb$2y!|D;=l*EPT^rVD)D)@gEz9fJCVbihb9}I9X&Oj zH5?7?dm1nrYWq12dL8VUuA5q`RBxZB3(+8wVoa8?eomy90Ne?DLmsqt9B~^NNNn!- zjEByS6VH$DL+?s)9@LakmIEyh%YtZss1*Qb z$1~KS?FqK7ZLs%T4tjz}RJQcAnmXEJ58bvKPX@+w^W{t)+~1bJ^yj}JKmWJ?f^2Uc z%0K_tzb^leU-+No_~BfJy)8>(@QQhNxULpKiy`B)y&U*m^#ou+2AP3Fzz8v_VbjHJ zbqXdk(q;*nh^+!vu*c*mTm{D4L`&Xgs&we+hZJwL;jjmtmcdZ)86*f!n>2GfLWcXx zky2rNitoo4NUworAOj&Y?A=C(5j_wsXUrlT)JTNqz)HXisvrWZRDjK|MTtDA-^d>B zj6A3#;MRLl)teYGwSK4(RE>iQN*i)=MkUhMcdJR0`WC7~MCy}hVcO$v9?2@+I^X>w zrJK@+Qb0Yp06W0u^j5=|S4fMB`{&X)-a&R# z`lO(c5KPbHiil&RUCwp{*#kRTK~z#L7vQDs$RGic)FL^Go&YV&4Vh?=)qOoKwM@){)qYFx$?GS;+}YcP z@rdczk?&a(J`C1<4OkEyj*d#kTO--s*^{lUiM6{yS*jVIiCYL;53CCt1Gl9uzkpy{u)3`RY&zmm0{1U z(@VX*!Xzg;RE&3%jk_LrLF(k!I&FS92MRmhz|mv5!C5n8{)46nsvnZYS8) z>cE=!(grN*GiWA=f58`+pOFqXAiR!PV}q)tgy!STniG5#5fl%SMaL3=_vM!Z%H%gakyEEYzSmN6P_^K^X&hc{(+XIo~oxtyP!$x_>8g+Y@u z^cV&p3n>n)_6pW|a1*!YZL+kIbF$haGqj`qiGF52Ul@}f+}M%ZclKm^cOvJ^8e)#S~dGhc=hQppb|J`a_80!XxLwkN??_E+q;$yexXI~NSAFI{fWZZboYkp{BdEUl%UwPhS?B1g~KcX`Eu zXNYGI9r#7Fg5mpva|ZTVJa_3b>gi7z-5H3WAOBv^TSD|=iZpnmPQa4`XqHEceDKXGx>uBDtMg+&u1C(r8|RnKiK=z8n+O&O0y^6dDToE)E8Vu8*~(a$Kq zs?&RWYfEuh%3Xr$%#=|2VMX^MXem_4f$>e zvn2baDMn8L>|Bc@{M%%kw)`Gz>xHv4gIz)YMNkY4`p*LUKBvs>y0U5gZx412#xA=oz&c#X zSHAi{{^P&?lkyk-+>gn_PtN53^^5;re)->iOHPkgGU{ntxwR$f*j1v^)n*XsA}lE6 z>sLRDodYF103)RyYf|@|FFbL(sQc(PcpvD^CJmj7p6tb zr)^4>iEN-(V0Dtw<&uNF5&lDRwkD5XYst$x9l`TLV~tOS-*4u*0J9@V7JHK4FFD8# z-i)yYvof9pojdNLd-Gawcj*3*VH^Nqtm6OMsi0|O2s^urTX`%3cvbPdR+mmD+cFxB zvI58+6Oh^0<;dD`Pv>Mts{y{$P|ylHh70 z+O4Eb$bhni$^a@pFFlse!iq2LHiBQ)s*$P_8=KPao%t6e+w1!kkAS$#pc(lwaLJa& zfy=NLB;T-F>|6RFBbhnRuoFX|8#Q(!f^-e9A&?eyK?*8mTF1sNc}n&#G=1u84VIQ) zD!Xfh97K{pRZBw-giWF?=1e~}eGDnyh90mmDB$vq zx1a})OaxHZ%l;u1Z3NKEfD{YY8nlKhyL+Vt&$aG0pS*BHIPcBSLPnq8CmqXhaOZky z_64`AaLaE#-@qC$h zTN$|e|4`fpB|W_-9iru|BE_ZIJ#(GCaAGZSPEL+(4ULeo=is4FlxgcpNN+%;7mBTdJAZs#17lmztAC z-v`|kc8~XhLMd?5CE1h(%}+Ub(X*TEg7&9UGOxXrRMdb0dbgoD>@fkoYj}|n4r{)U zJe`15%QL~jT=kLHEbew5^>S9wmajVxvpaITvjFMoWsDx$T!E2W5Ba`!8nLwzSV7

{LE*TDIJ=O!AuAWJSDcEVW)8D`aV#WZm(x^D&Bbg4Vf?I za(;RlEhb8DBlE8UD14Bd3s%T1If&+RIS_W5#ulucp8V*^WSpXC$)R zFWN5xOOq(EPg;O95Zes_GICP&hg?ZEs%j6MEmy+2SmxkhdQ1b~#0^xhP_ByYN;71; zW(}C0io|S97PB*ry@$Pk3UCf+R+ek%F$*YS-LWV7H*_1}#%K|2{f0jZIKsW z*_N;U=v{f^%|kgj9Ll4|SMtM;j^)#b=Q0@eXnVv8>WA|?f<*RmRM3>ng5#}dsN_nkSlk9et*BCL4b6 zhi_R04eMkuck&3Fv?NCCUk$GGH?q4wvFgpq_E?@gI+15jFXZxaDWkDg6FC;^cJH{3 zRZ5R#^#})bQ;)XtJ8@AYWT8sVtCN(bw5n++H*ejL{rx?&gN~jZ%W}1p(P*5ry!3mT zz_+vO6}9ul!h%He+1z;CEB*Ptcn)p{M0R50i?Xb6mIcGP?OVyzvRkXV1^U2k=Xe!! zVn|m3hnS;1S_{@X+t#G+2xP!Widwt0QD0;M6|O2&T{42bF=#vITtfDreI=@ZOSLAJ zWYXyX171M;UdY=z05r_3L}brI_vD{U%Ltv7zzYu!O`BCi^{?dv;4#eA(92mvs#lk5 zO}v@QgL`}OXMXxk`PrZSlk(v19r^YT-jQGU=f5ex_pJ|QIn#X~$a1b&EM~t#K10S^ zVjp*9@c+D$$j{zpe}x{0z5^{*aw)2j!wiGnYZ$oAI=q-?uBjQb;Dxu-E4d3lt|sn+B3@6Nhjx-;@aHA-}ge>ym{qS@e%ubS`s5Wj#|_? zUgmKW{6lokmF`Wq_D)+q3W%}8KCyAv&Q1C+-HPOZltJhQmGmFFG)GsEUn(5rT$Kb| zr}Vs8iQG6ikXv`|T7XECCpg^gm=XFr_L~c1h z^RshnW37Q#ouOKr5%bYfC&uVBKGy6l`nj!{Wueh zo~!pLP+mr$9|eMzO|XnRt|b#vu$C|oVlO#}uu@||3+??|5tl_Fd1NgnZUgn@FE5uV0p@GHBV$L%`fD}N^{Vv&G=VTv>o+=JC7>-cexr)SB z$!b+sTr)&sVR#>MNeAv`H5Kn_lNEtp6m>4SPpN2$CmMq*A1>*yahwrYgp;f?vyj~x zd|@7eXq5oeKtoUSUY3a*V5KiI91Wz`U&~UKa_7#L{JB5-75VFb`N!m?=kCZKzWcuX z>aToPe)rq&$)iV?vRMseI3D{PB5PUTa~RBVW4=gmV`z*u3mR*uwgZWzdMaE{mO+I}w{)^5fWD)a&f`E^K6ljADEZmf>R zh_yj_A}PF31GvLzLHn8R%qwCZc8#;52k-g%NxDD>WTcmZ(WOocT98vL#We=*mbA(J z!ydZ6AigZ(PUjK~N5&2;V=6pQU;wm{#SUTP;mI;G@5IV52dn%&6p{xpFQ`DomHi@Q!L5b^7UR>Lj~yc+$u@GeSjceDlY?8ka_`=4b5I^XJCf7W zsVuH^?*~@(lW?;Mf))`a|D{~57O6N_3q-HimT~^tYp=`E(`Ob;>*@6~#U8X-41huR z=r)jgv&n&rlT0kbS$>onL<)=To|HET7=-DyaXKr%d$f=*oO`>4D#R! z=H^aY!0=sq+du7N_KeTds~ja|TjgPd^?rZD z_6uYAksrM)U;O$#86PY~MoW48(Nuo_n@{Ae?>>{uBR$8FW$NlWSLP^*vkHCg>6EBe zH_=$K0~Ny|%b`TLA5B~56vhJ-Ta97uD zY--?4$`-}yl}2rj-k>LkHz#uA=B})lB2S-O$kEZc?X?D8j20sq5PFj3aqe2<%qc$Q zvx3~iUa-B?wDbv`4SV!(e_w9gIJ9JfXU~qT<(%3|S|MbWfBvvCv1+1SOX!1Pn@)k_SbJG3h#h90ZmvTeh?1 zjcwIEhYDuq8y&i4eNT8GzHB){mV8wPp2e zrfLUhe}h4aBw2s44NeZk#>OQ)AFrb7ytx}EK|lJdOhF+iOc^BK^n(=MtGQ7Kan?>rx1&~#A3ZYbGOBptzN+=;O!Y>P(j2hC@|huXP; zR)fCVAaXfG{U@v)w00`b41EWMPvFv!o12ccMD|ZTd+EBoW%}579&dGJVVU83S?8B_ zLp);#S|(34-7v83+(VFi$bxImXE@K}ZX`cS$2yOxkM8A{UbTcAmjP%QE}tJCO zmLGZxy;|$@P2C$MWETl*tHy=Rbba{QXR@3x%!X+SH9<3^mveoMG!Hz%)sbo6_+~p! z;O9%nT?tNlD&GRa^w)57t5oU|?hB3yTMa$o_k6w%ua$qX{9;`3nzX`upMZ?)4e|%$ zGi;7GID?KbpON$rl2<_4#ASKinJ)lx25HvU1Bmvdlw=#zjh|ueC zkVr58{DbG^#g|^P)^6DXq>1-Y56n~;?fzuNN2fVBUN-@gzlZT|n;u#GddrbI2sbj> z-jdHAekO1K;H~Ptk1Vw4;hNdN9h%|HD*IT1)?iS)#(|)0?g|9!jAx}R87P#-mwG05v-T)k0A+AB_RO-+ z5-t1psbvj%Zs!rj=V6SfgK0SOb{@<1+A^`<{L(%7D}U+h@>4(dij1~K^1VO!SbpQ* zza`)P-Ussd@ue*1J?j%c*jVpHuPTa)qBJa!ofaEw@|}%$GhoUIkcKNMmHxgE@3fhF4%R+_^r)-0l%+Fk}F;$&?T^+JYkJ zU-H!hr=#&$ws*E=JQ~Z@)s+Q@wCA=~Kxps)*vP7k)*IQ|+n3$FU8C>gqa)91(@H<- zTjfeR2$Lo#Ku1wWHXOizb-sZS;xn$V%SoD51Uer^vtw5)Ys0Xw+3NRi%I@BlTutZl z`0+EDO_v_vvI;yg-u-)WWB)*&JbhLbM&xL>ZxXMf zY8wyld=9V%=TVWB>x}p&szQ9hMOeX{WuOp_qe_|JjL=g)r_6zU@OTNshG&W?3-2Hq z!>h!ov@wm~GQPc6d)v;S07$nh{~=^=y1NUzxBHsCmSlg zuVp>Dkbm%>{kZ(ZPuvw5&1KoUlFe`_t9f6ZK3vGRzxkE=O zqfUBimA7hJ4{5+m<&h6G_p^p$F*DQijIno7QH+@}9p`X4fBK)_Du-lO>gwR7HmLz> zzMKXncPJ4cbOJl@4UsgKJEciw0zrz7Mo059-43|!Fk(4{BnPy+xqbV#JbC&=9zS|y zT@E(ZI@Bw<(o9AnHufs*OmYNnHa53M_j_x*CwJ~1%8grxa`fy%9)5Nt^Vv#q39c>xiV1+rXx2 zg+%g@XCar5gLNzPScMx4?=zNfZClPl#%sN6;H{Og6+i}kBK@hXCYnXTk=48zwHM9+ zQA^ZKWmXaluoYDTGs0AIuMgunSn zHcj(ARPpj%NO7ZL7)8v0tT@Ut*HZSNio-kcC{1f-sV4wvOH&Po>WsUkc6L}_$=?1@ zzWn-q`BOjjRr#qu^_pxCcI7*7zbC))%iof3f9F#I-bF3Yu&6*XU{?R-EhOXoJr z8dt2&!`_i$pcr$|mq!mD$_F33Z?p33V_kes&zsZ%A415-tN_F+K$p}#`SX5CF0#!^ z$w@iW5Kj4WyR}F>zGVqc;U{GqmXdVL4Hh~rsR9+HpR>Le_fyJT$LCdvHSLu=(bebo z_}zT-D($h=Kh5nL{wo=i`Kug61-7B0^zzD71#R&WKV!`h_Oq;H@NT>SKcyXd%~`@{ zm%%McW<~`Se*<3gOukL5#h&jborBuOx5*s*RPHB6r>D=0rx1ptabvaL-TCx1HiB&1 zA+`Wts>mCW5kQ0qtpEZ5n4EFJlt)>W#ouj~K{{E3Gd?%67icM&%--li!7>_Bu~5r5 zX&k_ahElnB+O%z8EJ-Bqe;t(MzfFZeeZLD`dEO&-sq!RBAUIbtQMZg$A)OLHS?NUz zueD&o3gl?U3K(SO{cCe9N{(-b@I=cjEyV@(WI3{7j2Nm(t>@AXsY5M*4#Ot(mS&%A z%Yz5cn^Ie>JafA;t$cZApk=IzX(@WYrh@f>$IUTuixun}0sz$h1O4GOLsPTA2l^Rx z#G^W;ubBkoOi%0UY8T&|(?>5FNE-9%G^L*0E==sRtpNkIT0M{oH=d0`tmY!$`|d;e=#wM)o!@<1e&%PsB47F9EApk+UzNAt{aC*F zAKsPkeE&W9_@g7aIGahoKa_rdV42-;YUr#3!+Zu3X~pbeS+^zYflor5pj{fAg-%lm z=p!%-WeR29wlOPbF~R+4VdEvo;Wj0G<^~k{*JA0(0+f}Z`)y8Zp0Nd)w2n3s(T6-` zPzHD?bEpFxGhdEggpBgJ9CetSq*0&5U|v0E$hcDEC{Z^j3Mz>JHeonIMo{)E#ULp$ zp_EhwLIb{_x+sEpaGs|F-&%42;S$HEkPD{-Y*5v?YGB5@rb}8&u=X$MAm&=o&RTn_ zl#RGw&;&i4eHYzcgZ?025;P_7hvR!~#<#YJ+uq%_sv$M>&rVOR?WhOl)yX^bAg9gt z^6YMHJ+!mCBWLFqa(Q-U*U=!X-b-~!(llj9VSh6K)ZlDn>cmh@#u1?pUB+Xt^>f7= z`k}>qZqCK~&)tyw_ih@^Kl<#coSsZ&v0TY;G-|UaNlsdDJdHxCc7g!MKsdiq3mMKf zUCz7kbsruc%5-|=^C~ink%AoYoRvpRDQd_D#=ulYO&nwj2S$-01-VhSA48inE4(N) zgM&eov3j>q(Bet=!P^0b!JEnm7Xr;yhJve=*rhOXczs?+TSzla2TI3FLo3UXa@Xy7 z)H!7m8rjYW3YkDC>EsTC4(`Qzvt1yvrfaA1co-I5Rw~v`-W_wW#o*xJO|0d5x}VA&RdB%M^I!+kkv)1@%WYgJ}HZ7^_-kt5A9P5Z?oU4G9py7fC9qxnzj^$*6y_d@(iYFOd`ohoI+xe~JYJMeqySwrjcq0UI8sxzj*LI>TUz64D+_dC@^~T%A%^%90JGbQS-8+`4ef0FHta|P+w7_TRLv8u9 zSX{}@-i{m`9LRKbB^T4nXp0`byt0}NK}I}FD^u-PY7HJni`!sGs%&s$r)3bg_Dn`( z=Q+J!23Bkg4dO2G5!lrOs77~@IDzk@D@k%h@DdUe8j~oIl!x&dc3hHQq1tZ2 z+3wHpv|8;}6Jmk?nysjS0zz5@QS+0@cU1k3F7uFmO+X;^NVlq?9zEN)Jn?fT zZbd*Qo!8ZVIaQDbAELFY;aX?9IGZ*@Jf9n6X5AQ&7!iAFa^4;Nu4@x&`h2bU4&wCs zqZQ=qtA+IX3%PY`B42#%W%;Qe|FZn#Pkc%Cw)f@TPd<`g`?dcdzx6vml*bRxWV0B` zus^c4joQW-HWy~WqIIa!8M?ke_MuIvV`RuEI5goKpbj9`CbMWQoz3={nt$yi>a)V& zPqA$$r+#MnBY;twqj5M_NH^#!gU>|-`7U+)Xx@p1wZ1b12g#QRnaB2A;8gE)OY3C5 zL2w*&o;E~1lUI$AErsC(aF-1ISF47!6N&0U_sMyp3V4J$eb7{xc`|{aR!v-i518lz z_HWu}Hd4cVZuS|~N3h}6+BrpJ)E~&bd-vt>lSk&W)AgZCNBR&jP>ha?T2_=PN-~k1 z@^up3pZ5H@Q(&SgYeA` zz(@p+3JC>kXr=|Ab^V@vXHr-oEJp(A|6sfe(C5)-CjX*1j=5$Qs2wY(1QQ&N*FBnh zeHdo8tfa*_h>q)p11&EdpK*oa&QEh@X)tEBk_Y#mmoL8YMY*^*PlLc|wVi8{f1@ge zvKv~vfLbYmF*5rFP7G&YQ*e>}X5gsjtsiF7OZn*I59R3iG?}yd_PTV+p@8P`9b>o3UuWLrLd{8)bPcixq6e&-!|?}tz1=;=&sZv94w zB#$#Vi+Mz8%i}SK1w3m5?~?(LM2-)l&LR376VNRh^DpuF7QNO!6+y)1(OQWro~oh_ zS7%Av%Epqj?Q_K<^19UtzP`(qmYH=@RPRn)1G&T^po7dRb0W2%OjJ_&_1gA&wF`f= zzPheAxwjAA185GZ9)@2QIy8(@##A*QsIAjAXKU0rltdLV4A<361sqaUGV>j(^&>M+*l5$@22PT z7=}YRJiH;Jt+5=R99vr*@S@8gs=_rH7|wKHCA9M4fOqUmWn6MAh|iHj@q8Za)Z~Vh zWt?wsZ^`XDH{|y1eK|kBkcW?sWp=SJVPTFxnw#dh1ZD6oO?4{>uAvrcn~9*Y8gFmD z`KCO4^jK!ItH5dTorbMB&|X-ft5*0duj%_BT4YrN%%}0d=gr^gwAg@w?7w!Z*ie;{ z#zRZ9>443EQ^|Bsq-f{aQ896?i&`i(NfOCXam@%Ym>5jwX&8~J4>H?XlUur#_LPWq zEjhv+Y@B7R{M*&L#lKbA;Q=Z)`V{{dmeM&urXS|g8!hGj^Aq{%H*U)tZ{C)>4-RBD zU&y1QBl+ypQ=>iARnOhODeHA#o*vEQo!>u}AAbKro_(^A<)!vjbA5-FJE&kacF(>_ zsC30#hE%xec&k7p;jrMLhQla;ozIuXZEGa@o=4^|bh>bhxkyM-y>0s1|FtTj;Y_~q zlegtB{>?Y!{_`Wbyqe2*zw@zt@ZOOe-rA8nH+JOSgF_h&26A?>kVhY#%cmbq<bj)re}&f)ymKyf>x!hEm))(=b|0>;`fzS5veY+;7U~tI~kO7(doa*Ee=^0bIE9X z^1F4R+|-mU9VWi6=h^lv=>mF3(qbjebV5`3eqw!g9HxLQ2Mex`R*dw+E#~sAteos+ zo4MWHZF&3cx2?*Q9ZJn}ATS*F&)3-j7_&p{+FEt6S;^t8J$Z2dw&|iLkB;Q&lM|U< zF6>^Io#Ojev->Ks6EjF^zDV8|-=pkT*RCY%xb+*_GMY1PBdbUl(iyS0Zr`-Ti6@U9 z+n#B1l8|j+Ek*|e>%y?TvtzUGrk7VTyPBJ9aGS(^0(LB3fY8Vk@HCRS8k;xIiyK9N z=W51a(-w!+f6^!gfzkz$L6b&d5Dp|f7~qqAJP5AxO5JX1QEnwZeV(3cX^HpNKOFv; z&W~T$0W$o-+07*840FJvd@?l4nOeLh?hnkuE$28WUTg0Lky{?95E#psHhVvcz?&d+ z{muxn-YG2Za=5NspY+Fbj9T_pRj6oO$%4REAzpeqTgYkqxFG^a%6lv8+Mu+pw*O=@ zkO%h;_M0QI7P!v6S2ViUbR=Eu?{h-^3h>Xw8m~FwO5b_m zK*{IYW#3m@m5m+^ex~Xmx0m2ctz?$WI)=*#G|qAi)y6rTjC=+u2MQCotw_~u!sh^1 zBp)PbC-A&KQuzO=tCRCU$U`W`_&)rInFxg$pOi2q9X{`RsqB6}AhD|WQZ78v^N6^0?saIAMZe{dxq(aX&bi!wEZr{8qv)Lulh~IGic|D0@uUjENfRcrK>~Th{(P}O> z&Ic^}KuLcrbwq6B==iaG^ub4RwOG|!;P6AHDtLhQyW~Ik1ba*T{@iwsgIc@vadH z{1rgM>X{e1+BE4Q?qO$~&(V=Jjh?2Vm;l}6c&N2drUW_Ci>JM%Qq4H2p}eThOeNho zG$>mn?^oI3>Qq9uxV|@3hf`#=d8-4LvDSLW&U+<;{z`7$-jy%CanB5wZ+zudD-S=p zI+nM8|6}>iw?C9W_~9q=*{3IRdA5+N*-ADxU|1`QhF;1YZK&)yLSY&>QScMPRKcb> z7?SqK!Cypj(y<4_p=-JL7jvElQGG~WqHsXLl=L}-5VVkTJ{%D_Mmn>+AQII$4Emu= zF&Jc6LNhBa`sd>AP4Jxz%*x>M>wD0Rxr2G6{iOm{)MuaCMY#ijWGp2kv@j!Xp9X;g zNPnJq+Nipy_5_qP5ZP%qv>QVt@m5|T3wfziP(qzk1;z(Lr=5X7{ zYN3JQo*W!bEZbY1bVo-=a(bd!-J1BI+1}JbFm7lp8A064Dy9HbIY5g)bA9w&DrXn- zD>*nkl;<8iC!c-x&{|k}aBY1pvoZ)WHpCmt0QaQR8Vf}bDl3$$(x_A{nbkC}Br^#? zf6NagRr2|h{i-dKV>+_fkm1|}wTOlbMaKDsjL1Irfgj@nnZU*Sg6d*aNh$peV95kl zv1*;bbSAe&WEh#3Fe**(xdR0bSU0+36QVLk&oAwoOh}4k81&Gh;nr|Gq}>x0GTLTG zgOtO`QVwqR|=4d;5x{yEo&NF%M z-7|Ui$xIfPed(<{V_Ti`9>|SnLK|Z8!KeKZPKk1|acj}Q=bQ`^gW|!nte0(zkdht0 zXJT8-!D;9lBw`6|zTepzcHrL`jQqScKqMob(=wIUzkWl0{HLFn7hbw4kDi^#x4!kU zoSvS`;%Y7rUbrDIK6fb3y>uv($;jr09X(pgNAI4=dvBk}laFR{acudtmYu8ecc~6Y z%}m!>gDaJDHIK;u4c$S31=vvK2myU|aZe=tAzL3@mDPnTr3?Q+W@qLp9P~kuZgWyg zkCc19U!|+6!YKo%)C86@pi^f=LW;?d(2<_I0eJzG3%3Di!!M=wf$r&WIFOr%2lDYJ z9~mucQjNCq%;ZUYN2|CX6R4eO>edXvxI*$o1?L@|Kcp?^ZrwbvpvuFC$5!#J?5A^& z^fM_0XrHsf9_xr5;Q&%=%TYx@wrIiD`Hr#^NoBcSYj1B)?%cgC^Q)N!iLMrN+1k=p zStZA8&eD1#TjP;z?@eSd7}@;3*>q+BOWn^_zi`09PAAt_>jc)0wvvIfVMoF52`tp= ztDr&ZI^v(F)_wF@m)oW57<>7CpmjFcpRw_d1rb&sx9)*N7&Gk{a$A9z{dHIDqvRRGgho3!>-~H_$%J2Nn59Omzp2_9; z+A4-jmug_hTIu_&IGZ;VnRrfGB}aAtJjpno9sC%ymp+GRO~v{St(c4K%JEqVeU&uJ z$cO`S@N>DnP{CLBF#&74j|CD5j!Ix0@&T}|6a4P8(8&jfnK;1E@Z%&lEUd)IFU3@p zB>r5mdn}=F?Q5A)6ShASuE3j(LDm<*NLo z-c6IF)w4)eVnYM`$2M{XaMKr3wBO*|Ou+Ho);6PRTim(xz~<&To{fNX1bU#4fpK{p zL-BC6fhVU1Yw|~q7RQ_k!belGaYWN_o(R4s8BR6qT*&wAuJmA#Q zfYY=Gh>^@$zUPkI1KSc&Y;fhK!x+sr51P&Zl|3h8#Iij=uiYe0;8mBSv94@qU1x*> zn>L=(WIVNAujCt|8S-%yr4XK{(J;N8L!CiX5k*$HITWyQ<}-95;ejgj(4`_*LM zrC!cQi(QX@uRlkpn@2tmesB6drdYu{{7NU2Da-X>B#@T?pTj0Zgq1V58qIrM-W2Wf zGownNGlLG`P{Gz@Ya(C!+KV7o_7ew;;7 z7jkD+E9~nZ4sW$a3I}lGl`TVeCQJ-CU1sb&!A`@^2-oYbMVCQ&E2ITRMMyFZcFUb-be z`s1(5k9^}*dEwSAk>N(3o}J2vZ$FWD-uXn{{os*&^x3f-A6>|Fwz8Q;>S?t98xCxr zP#NkN%jG17rJ^+ggMYLG3Se8I*Acz6axLhE9@Lh)bAPB|pjNrNM)I-`oc%YL@xDbk-fzx4vcKB2GB{y?43O z1!fx|c;qA%?KL9{5OO8YsJR}pgQ~*M6%8_QxGJo`p?W4=+);0BI94JX3MX0sy2N~& zG1jubeH59;$Og*lV1Po;v`tMCJZn5@1A*5v*&50I;h~JiTXKGSZY^>&aY5VYaJ3+$ zg9eATcXn-X_hPY><71sSw6=CZwPrXkTW}hyz)lw}b!3M*F@b}~X;!loO3rCeN}qGJ zSjuE)BsXs#$nNfz%%%%DJ~@}!<(26*4Hjv#DzHuvUm7+5nHEF{=UW4`x&Jj<>EIl~ zQLb`9_wUtLUY6l-Bu^ec4a1$P42(!3Lp}5~s)=3B2DnBpToX8JvzBZB0P17E>0T~& zqctq;HwUl-4y2LN?TqDOA*yMjrBvcB0-4=m$xPEpqjqf$nnG|9{l^~VpOFv%{)Cf6 z&p-o479fhs6s=NO^_H?)UWH6rW$OjQI8lw^auu@5v4T4O;FL*+d1OGkhpJjQ0Q)-6 zh0DFCbFG%LwX>Gn_lENF8;A1BYlrgO%LlTSl{`B-lkof~^{|M`0|J6+2s z?_bCteCM%z^4?UAA1^HcqVh}Eqx@#{t5mvX4B7A}XY`?HQ5^JXnR+i0B&Q&Rwhcjg~|f&>M>MV|HMFv=JGuq&Jw$ zjk{xc;iX-9`Sn|}wKI_E>_Q$tJ(cNVE&Y|q{pSzl_WrgU-rSbS*4V18bl~~>@0`e6 z-+d}iKc30?k;rDLvTNkhcHy&bELddDNDoq&+Cf=p%GJu&%&g!}B6aGb_+mM5!@2-3 zkQIa-1#2W9q{AQ15q3sbWszT!l{S?eG~HD~UnJ9%&MW(~wI^L=BN-~3m>DdrtWU10 zzIpRdPIWl;<43Zyy=xWQ{_)})+Nj)<`Ww2)fd^XR;A>v3vyq*>iQKw-U^ddxlM{LR z?947P8b!-F?iq+p%uM5;$J}RB_)>5`F&SsAm*X(Q?K}%WtJIb&+1=TeJNNF`>=jJ} z(7?}lJPt_gdu>6YsMy%up2*hTw#_CwKbu;`l;T%UScuA(VqKDf5%eak2my{ivl=WX zEo1gjw6AJx7m~@*Ue|d$ct2+G=526*@F^zUg`*Jk1Nw!3!?w7BS4p1P29dJD^AID6 zGGL^wC*LfGDV$eTg-(c&44bA>Bla@27dvsgfD@G!T@y985Q!66j#}6!6MLNYtdcP_ zMzypA*3e(ds}G!m#D>pN^d!!?T7@0(^!$vE$;a-tbOjf)#hm3)cwkqP>pY0A0kO68 zh9bMWL)qKklKb}#$l{^7w*WUKbGm@N`COpL;0QG{!qUC{ZHh{L#^6g z*}N{0p<+ed6SR|aJysd;UV+V65pu$lwle|FUdF6b1aeD;*o>0ERvGvT2dW2*$rfUM zix=Bb1_Vtz*p>M(?%eEqK|ToUDntlsZfICKfhenvkJAKwmnfym16(8VF;`U(Ov_aw z5rME=ww8)(^L6ukRiRO$q;yOoP+%pKhlERsmT_@@m)8uu&!p}4CI$05(9z`sV@cRo zl>p{=F6e-V;n4o${+7fLfgF8D=ltyKY{~P_y(pvJgu150dBS!NqR5JW&@P~w(W)mL zfD%CS4(ZCt&H>E=XBDl}_eSH9eD^!wlErcnwp)vt8+c7dMT)&V7p^RZz-jjrLDk&2 z)JF(>c5#eT4u_Z;%IerE`Izjt;tm@54A(moq57NsefD;zVuvq-?aUo%?2@`j(nX_i z=yI9x!qqnPSt9y2m9F_vDq8llCXFN(;D@H8$Zid=Pg+Hidk?uJ?XCh7@;h9!dTp&; za7>G;{tbNXibG_apRUJl&~CD({X|hn`Zcn0kTEb;S$?Oy51cP)FN^ec5BDlXHDy_W z*VZ}1I}V{<{hT?w%riCO_xLk|&$)=g5xo3ln^0`!o8w;6)F-bIuO&_@yB3i-f3}L3 zS6ejzU-XBsqhzUA*~0XJjzfo>-Sk-qhumL^!sd}huZxtU(JF_ZDx;A6!x;q7?36Xl zN0_<;f-8+ZPrZS7f)lGUTtTWHpY>xXQxB}2psbtu!-YPY!AhA%c?B@HWjrtB*3G-} zibVTrde4=2we zPpOyyXj8+uslBdBLxzfIH|P$pGS*`4Ro)h| zD)t~A)|cZg5S)CyB1b!fS%Mp~lQBa}i+wDRN}hWoSAaN#+vWW{}>tF@hZp!C)9twCBPu zhs^PeZd|)y5i%A13IWk0_|O2f&ry@^80WuRVA|-t4v;a~k&Ys~Rl^I35E?*(@8{JU zM?+-r#)6;&43Lx;Ohfqc$g63JFM{J+%OXE)r)5M2j7Dyaa2A;Cz!ln)4=}T~` zqWwx@7d#{8EXChm5n0)y*;=Ck+O@g<#A=EWSeZn!Sm8v#Z1@j3z{|2spj<0m3~MZo4};>TIzywD;9s} zI*BBScT;yZEC@%lzi-tX$zPQH6EX*hl^JZaugCmF1al)0dR|iJdo#J-jluCyK-@LB~Ol?$=S)JOh!Ywe}7M2efsquDMjdxFtAU4lr;{ROS7hmuF31e#>Wb3|exOyH zxAJiN#jj(9v<{r@b8BnoxU!0%;mBLRnlmvRL{38GaL|B~{;t7fy{A>JTd+u>gwAPN z%DT6dy_+Mse{Wk}`oe+i9SlW=eVbEbKl7E`zBiHmgR$)IZ^>k`E$j6_o;aX)KdDslXg` z%7f94NB8bvf8S*8`|rOed%Jt)^aWN$br$44Cr71WPOWxWW##vDBbFOku9q^}8p@5s zUAcMdP%h7>^7M)7sfD#St-ub%8(Nc6n=Q`h507QadB|~8(M7el?KxVXkYkGFo(6by z4fh`0wYGZ?KY1vpXXln-o_i4pL8~S7dAGL4va`2qPD$0Dm)4SX;5aseEY(W0^c~N5 zA_rVLC9p=K2O;WA>1+Fz#UnHGdh76+_hu`Y*D9{N}@p9r?9mVwal&r9X$~V zU+(7wPKjqnr8|Ho7Eg(6l>|XQ;XP-532{{;0VsIOKb+Qz;Clj@kfU~aR#xnUq{{ua zI<8}zaexRnWC5IZZ0o2rzX{=hvXL1w(tJtF`lHGa&Un|q(MI1|2zwh&uQFR(2NC_G zCJ*iHZ=23~@wprF@=JH*l`q_s7oWQ)w{GmqYTcL9*|B``=v4mjd!NYne(;gJ`_5B2 zI=VFbNGpciWc1db_UsV=vVgs!ac!L%*cVlucK2}LBLS@|C;a%YS2!aP#w$FlO0%$O z$OoKnY`^8dfo3VlT><4fH*3WQ^bdYA8uytp2-sSMX{R-}L%XnQo7v@D*&iMt*eN92 z>^*YEBY;mNUvf5nN3a0|msM=dZ0Fe5^d)lGhj}ECMC*4;zd{~T=rK+>rNpJUN+YA2 zHjJEBPn(yL^RDfTE zD)e(_K$;B!vZpI5ep$_=-Bf{~BxeL`LI+`wLC;BN9>7v`@0XzerFpY(}z zf;Pmo+zlu@O%tBrWb`~+<_{@556@)xOPo;GbTTD5gu;W+`HW4t&3u=2fz`002;Jth zxfmgtK~`{nzd1qX_f|$Ud=-D&xmFZZdiyu_{bOV!cjq}`6N+Y;_$iZs8vmBhtfIX* z^k%?RV{){@$P8%W(|kV+2^%-+(xs^yXVB{#MgcGwcG+XN$(5;KNm7%qxhexd2q>#V zg+R5uYoo+8{FfAIF&=%h#ZZoCPClikKa!UG5)JdmVpX)AP^d#C1VpfG>~(Y2L<=cj+B@L-$n5hZTLLNRGz;elc$hL&+)2XV zp?F!EyfhZdl_dZaZ!b5!vn%+O{6twiDH@Ue05Hf^HkJxU*N3tJkbpu@5Js)Kh%Z1} zsl1?Y8)if)H381gG0^Q33EYdf(B1>PpVb=a^@V~&c1S!wA3Rx}f`fMC$kt~1MTTqj^GMhJ=O;g#*!g zV7D?9K`#6t_+Mq;#7ziztUHE0z%AARXF&!uE3*cB(P7otuTJ0?`n*Mo&LaVOv+W+P z>%Qh(v++(;L9zJ+eb7{L(ZASY82%ZEu>XJooO@mU<| z*c!?9?yj}Jxw^WNv$G3XF0^%sI^Uz@Dr6+EhyJBQx3${n^yEZNbv9iDV7>ho76aO? zqbsad&dLlzLzZ#7TF8(5J{vc6R{AW;TL*{Ra_i2%%x4REc62V&>B1euTDbsFPQe|^ z`eV?F6W|-r=DI8i!!H*VG6y5!Lq=WAuH-9kz9~oX_KoF6R?C$v^!w^8*eqqKa}#=NSzWCyXtS8FWU@1m8#lJ) z;9w+=kEfPs@bv6L209P#)=*x3^{(u1@5}k=Kz{J;XY%{sdM1xQTu5&@uz6-0%v8s- z>IR+7fS{090(z@7Gomd(RINJPQSf;dMzkbs41IR&a4@NyDEYPt{B`P1eQ{x}?p87y zuVv?OAUAGp$?XRdtBTs%9%w8lydl27+V-(#N7P(TYsVUnNeg=E7j*XJY$emxT;|h- zY)uBTv)z~d!!79#`!XI4WYAm5y%%@n@NguDhZ74r?d(ouI2y@fwwB|QxqS5Qsr=yg zj^)#LuH@OHr7UKB8E6W;wbb;ic->#E1oU7ZW?v*CBSBk6X7U6(Px4~{5_6AB*9EAj zU^1z`h7I6c2|I&zY2#t9E(j^AA(yZeoNom4%1*)$VXcmQg6?f~qsze6YAL%rJF>O2 zCGY<5Z5fXz<@~^gaFRa=FWa7y!%QoMBEY~<9yXkQ$Z?b=0Bp;hJBRk=M~_stYPDWZ zM#DiQ=hRkuRyQ34mDd~rxImbp-J%H~! z_N-YQl_Xc&o=HleUh|rxx`e7M<9>y8I6xGEpO|rLI}g7_B!k6A>&DD#*k`H|X!JhW z7&#M{WVSmm*#_h!IeLxeP1*lZtLT!GBu(KXjKt4;Cj!SPu&+72G}9}vkFzfOp$K5a zED6Tzj*IGa`FC`MNJ-TA$KB4wD20G4MjM)3p#ggPZ_u|c3tN++Y)`i2#=%7PceiAJ ze_QtVCUWoYzC8EBZF%tA4Y_l;Bg5WAmg~8ko=@eYho|z^Tc61vy#29!^wBeU{ODX} zv!!g7eQQH$^rUiC^_e9*#5{|TwdQn(&1%d-XF&8>eyP|;O1N_T4M7?iZGk1T@`fDX zX8&ikEnDa0Q-H564&4)0sIo9BMgSKet5WvGLFBdBKZkXu0;ujq#g{R|0}j@rSQ5n8 zhvFx))(Bo1=sd$(Vy zd0An{V5gmz15I>BP9ac)Giutx=TktgvV{@}80Zd>JhHJ?ucxQaRu;j zTQ^y~b#@g}2CgS9x#>Pnfi$)zc*O{w(Vd#TAcz&0E4hg0a^C{pM#Wn`Vnhq+2HYm46+RU`^L4tS;*6aXOxHHo zkERq-cWXcQ3z<3I725ivfTde)@2v$wxsj78kwl@v%mB}-iRM7BKR=`Rtg=amPJ!z< zyZpPB2*k$7ZwH1`Z~iIy3;*Xb08CV=x6jMor#f-MIx z6b4S=9;!ZM4%&}>u40Icg#?atpDZPY!A1SP6JwElrH##Js*E41NXS+{*l{>1i@(7G z6%eK@iZqyepF^_|Ov--ywYLm@EbGg*ud?1@3J zDa-Z7oD}DmQ#rp>C;L<`&#&b2axSy0m0VrTWwCVUm}dj2lS;p>e4-9V?@}wjbzVANkD4hRjV3YF|q7_kOpqC>ncHU$dvZFRR2hALx(IOAkBAPL;RTyXm zfztf!2Tqxm&=fxV!k?qa1QjU$%+|)j9(v<#zc}C$8OYKNXaXqNzb>==u3qf|L&8P`qIo^WHLKvb80UM9=-h zn>S^5XV+TFot~a~^#=Ah4VdCh-_Z{3QoA^OmYuIG^BUck8(w{wbtcPryKhxP>fo4O z&gAT5CUb2^)$yGx;vXq|ojQEafUgX$7IHz)@tm+uoJzjCN_no? z-9aP+%yjZZ3KiHIaMNTZodLM$tzc8^#^a$(_WCl^YQe*i92^Yg z`4J?@X%V$X>iD^h+==O zZ69M$2x}l7w3#U$Ev&^nM!Kp9jr3q(cB|wqU zXgD$@13Bw)xC=kHK{>k}!)U-}Ve@vh^7Q@p-?hEeN*co(*|Yw0+J{8uCTud7&w>4N z{ze49Lyu((P&=!&jJI?)(Y|a=M)LHDR^83a?pB9%2BY=eZ5 zqZCaF8qoi#3Lw z2R_Y)jld6F0#>D><$dHQP`!tse)?JZ1KAo4Wov6BySrm+lV$(yZprTcmhA6t%i;cx zOtxGHDpt3O+?B}rbSjUYoXW=^oXC40Kb6lOJ(Gu@UC8m-gU#(lJ2v$oOjg<`c4gj7+#hncho>ab40~K6 zHiTCr5EuLGl{;i%)4UrGI+y%HOUrg<5$R?68+?+oJneCK1Q2X>+YLe7qJIuZ`S%@X zac2(NGD!J^)|C{J)vJ;G#JVX(BCt93A6E?>R8H;kPnaJ}<#<84P*+`tRc!%@+h*Nu zfTDbXjbYZ{X6zC6Ass`BqfzyebG?9F6q{IEM3*-jAd=x)#>0`^zwxqc4YxgLXgtdq z1To_~f?>ecMkVl(TE73i@7h`hqv)JqZSg%=k-iYj z9(SNtiJ2Kk;XnrkYiUjxhYp%&iC;JnRX(Hg)pM{Y{kqL{(%Y06HhCuR5f=#GwqFL_ zpDI}gdM`<#vSGuXq9yA8zz>XWElr6>+yj;7sXxm0g&(q#d&0h;^TJ+y&hf_w+-I6% z5dJHc8%QXKGhjO!36~XQ`Xf3?NqcrFj%W{f^lDKk5~Whq)%iBW(0R1R*spWU#K@4# z&7$%TO2`OIT0Vw0?gk8=!M@Hc?P8z449&R}Wn%V7+WG<+_S6m_Be}GAyKJ&Jj< z)n^UUL^yMe)-nvPoBard1cTypgGdGbs{ItvVaHc)TWW37=rft99)?dSHXgc&Y*jc5 zU_oZcFn{|)9q(uV%Hq2_1V?|WwIY_YNo&BgLuuGZ(W z>MzV`;Zbl`SZIAEt7!QZAReXM2s-*;(2Z;q0OLIt9!67bp?_x21#dy1r@7WBe1FHf z&Tyb3nKmj6V9m@aMv|2kQf8C~@m~|>#9y4@4Z4SML078`bbGlb5LJ-Ui>1?eii^Y9gP<*dG>q$B zH_#L^pxrHew+4KdR)Ha(nvU)g*Qf-a0!bz$BjY@bU5uHi09zQ%8uW}F+}aXE|4;Yj z@@ymL$0zdfM@OQ5rtR&K8Bcd^?#tafdvg2kf!w~eD|heh$*mg)a%cZg_ILN>=FJ-x z{L#4weIJHV1CH$(2hxj~E@+9#>fBoqK)7R=a8%I|dWh4=>Z+a@)-~YR3}DVMO6LTe zv}HVbCVB;P9JIPK)a0tRg;@KX8g>4xteubtl`Q+(+8wFWEuJLWf~=RSGgh)R-LcBK z58Ah1o%%jJd?^e4H|F4I5ZW9}nysbx)b}>}U1WEA;K-bM5nxe=k!9}NbzINcee~X| zwK;A5zV6&r2aL`(K!ztW*X_Gz2xuW!c+DuwtEVlc^c-TZyt)c>?6VN+e5$P;dJubT zFf#dJjNm&^Uh#W6)?!cDNumP7jyM4;wG$!UGY3IfJ<5N!Z?ci`U?`KFiEM9gTcyp( z>4nVavkde&J(Qd_`K+1EgTCClbw?&UJ2sH}LMvT|ItW$UDymb9@Ck@3Wo0=@nj{_y zLRHwgf@0A1Fi27^h7(bPx;y(@a{JDnE%x~6)Pl8ZZO>(T)Xxb{FLreKydMZg;1Pef zX1&#bXuCgKH6j1Ob8wJZwYSb^noMjzmDcU-La#T0@-WJCJ5q1dJ-MO^d%{?ev-=?f zY$g^!U>*lD`XI}(Cmlqe8FHX++#HpPagFlv#xn$+lcC3frY=@N3j=Pag`mC%B>kiC z8#tDV=gD#=VDFyIo10!u<>1Cz{>tC@5&08;?gjbm@_m_3=Q8S#WPUl2-~JCD$y;wd zlC9y$Th6HQY{4p55Ekr0@`e54K*#UmEz|7$`kHawm&s&ktcZFe!YkYI^*?@B4({muoSuCA&bj=-cb~{d?=0l(@me-lBIEJMcwMVt0G5C`r69cmzFBf~Anl%s(<7xlG~ zZ141Cd$^Vd_jaYX*_L0HiER`Qvw<-NC`$Y3aPa8s)|#`5}? zZ^~q+FT?G%?BAZq*KZxl*ZI;D%zTN))R3VpYZ5+Q!DZUTUPA24Lo&!vX)M0_qL(Zqp z(D7NLq2ZOsj~^SBxO4x$;f%AhGm|$6w%ZO^TV!|p&aSRR&eyWHzauwq@5trl%v$GV zJD|P>kKqKNWGw_MoAZq%PXyMY;?>q0l{{)+SuCAeOt}n+Bo*vWB(iy6++CHxk)D(l zL)lFBqg7WLVs6JrJ5aY7L$+GmGM^O}wN2JqGONL3Prb_B110Kr$bge}xft|i(AO4E zQ3a#HdX*jay9ZWGjtulO`Y&FK${GF7wj4B=2H75HaIAm+mb1-^F>uFDRFndIwLGKZu$|$Ypb5x<9U_`;c zQuGcRIIf3wf94<3|J5p0U98Wv@-tPetXN%JXJ5(L=}bO8JC$e0XY%;*sXTjnA1GjoB&k#>d3%=H-P1%+I~pIXup=5pGlHs+Q386R?;RvwsmtqHioPZ2nl5^Ov;j!NjN z(luK#vg2YKJg~zU3s*-Q{!EN3tXJC*?Y{BNs7gv3JMAxQs75u!SYy|j5!f7RB8$y*+t~a>8EXJ^F3ZhS4!3W~#re7R1g?NF_EDcZ z0#b#8vAt*mkAzmPY$<d542Jv7jLrgxYETy1! z(gaF!kkDuc8PtziU}-AUNE2xi>dQC9e!4o>)`r5pL5E1pOFJVmE%P*ik=&MekO+_$ zh9`fXnGNB)%D51oHETFBO=T!6p=yM zWPtM!=cHge~gWf^#oH z?~d1)?`5Bf7Bv=ZEP({45y8Nw)e@LIQ4NF!3125wRq#F&1etHhJZPfNVUQX4k3RWk zxR@b8_dxk{fWPD-I2$5J=*x@2n>kQTKSP;?oj7VCxKMDBO_-AVkEkl}VuygO6ja7} zqb*6&K~xRk`|0#_D>{`>9ASV>7uh+eJ)eOx?n5R(?jh?wl>^u?&$Rx^`5^p!8EmR& zNquY?F{EM4-j7eH+{>1g1$>IL4Y-@Xl?Je2f9?S0TL?#n;!f#nC5jRfVFzok-X1KcZ-D%5aBuO~T z!l<*BN!sQM+hylesNH{!!NusVX5WKj)w2il_izrt&^9A9G79T`y`Hv)a2j_b){SP9 zYhkDxIhzq|gPw9Asy+j$v+_A(E?@A7RV!s6#3eYK9>_TI8FiEv75dDoj+DOaLY}#6 z0ixB?16UgHiHau;AZQywm22AKNGmz?KXuw$@X0drH!{Ck$b7MstGRwg15-X*KtHFi zFINknJ+fSzb82oa1ee)9P=};1uJrp?_MWzB^B|fa-oP+?CKhM=SdhIu=IRK6?s3C0Fi7f*sD6q-n(pmnJhti|J?H7=R4y(rZ7;nQh|`7s zW>pK8o#wz%>GJmNJ2KhYmdB4C$>qg`IY%5|M+*JmVCPR8M@^&3@rEINam?ObW%G*E52zkSh)y84@(wM#Uc6 zHIcAX3Mfq%I1PYtLb+GpZFZ!Sqbi*Z5ZA7AvvP>C4>S2E_cwMK&go2X1@6PX1^%!Z z3K3YDZ{%vGGGHX@#YlRdx@59pFxtrWwo0GW~C7e=MWXK;~C-IXl*2^b>jay_vlG&Y4V)74eM>SC~5+ z`ZxC9of2h?rn4;nD@>jAN3@2MVVX;GBV`0ys(ALf2Zy{OSD)RoWNmeG8E#+6D=+WM zSN`}tdHqYbM7`E0(^GlxlVdqOoyuyVl^tXIZ+m-UdPDtQo^%kEsbP%|bWVGeZ zRGs;!I(4kN(E>+(8EpD8ob+U8Jdw{nnaXmulF4`|99U_qi@+T7FQjk&mltw?1 zS&_k1!l5Y#)9gcVkLDCqN=*}B&ws$5A;+q^vhG=M8;*X?jzkU5v2ZwE@SWmIQ(YW< zvA?yNA!H<+9u}0q>_F(%z{63!WeGTH-zqRMS>rfnV{O1NTQ~4nI1)`3+P^Lzv|3E7 z`P5$Zz)U>PNCPJWlY9EReoljDTD78|*Xpm~sGmWX(O_ujsn^lH(C_Jcj1e4(&{^(d4M8_*VU6Nm=n-Z^!A5 zz$n7^ic_2CQ$7~>eSn)4?`j*=*>o;bZEbiywczgg*(^FBT*}4eOfJr^7EXq&NM+wfpc~>@JG+;i}a@f*5~uL#;@1Q(Cn~I6(3il5U5E+RS_Rf zk^!EJ8Ul7KK=vcR9{{!5f+8t0xIP2%SPeT53SZ(wp43^M!qzq_d>j*!@)^O@O>?Jc zD~bxTZi_5-ka_}Y$zEGR;?cA`I+1%EX>B0 zP(>bLoCdFzU$ED)TZpc>1#cFH)S5K$w~8yOFa({+GT9V?ny7MQT$0tZU}h@du$Q7> z1?sIhon#LEYv18y%?*8tg3^s^kFU#}*Z8~qLtjp8-2DpQ03ei&_D&U7eg|T=Njahi zMDog}+b+~E;Co8~M&awv|HB{KtOwpZ)WB63S^n7)j$jOf3eo4=7mMXYONOjUK{jb* zOsuI?xP8U~_FU-#rzc89<2?I5 zAbhagl1cxrOlMnietIQ~)m7||4 zZy7#1xMVx3OsU~o7aN;vZ@Blicu0QUX%Swe6Y(*CSO7FJ=Pl@B@x zYAp+O6wl`FBv$9I4xKiqvi|4bzPIv$*ycz@W}21oBHI|i1wi!|mrpfUEehX9y zCt^AvGbf#Jt`vsC6{SF%p8T0uNjy6pE?ipyRm=z zuVzM>p^6MQ7r^#846V2Qu(g(x$gTM3%WRGTSLBYr&{|5b>u07}^J=6kU^e60Dxg*} zUwUOF=73x+7IJYulj&6d^9)O!L#3a;x?0F|zL2ZgT;>)?np@yWXXMQ0bITaM(%{wH z180jXy~o1lZ+Jina<%;A{RrwHfLG6|Gvr`kd9X*)cJ+ia<<^OkAq=!k5k z&@n0xt>^Z9Y0e(4aGh-L$fJiE9J(}zk9`hagX}-f_y!=1v+l_`O?}SO00qA(0?BWg*EHl$1vBf;3SXH^zHWiIj#i zFdF!@j8WyI`D`Y4?%a{Pckamh?|)(+Qzw?mc{m`#ftTT`l(Q8K!T#8cj&w@%_evJ{ zy3$=iIhObUjsSWJ=TYZ_=P0b%0`SNQt&F|Qd}PNiW}RSt&|{VGg1`&pIvnLLmkTT9 z4nVKLDPjS2T)r~4t>r-fN?v~RQ2xTtep$Zol>^z?U&~{?m6{MrIX8Wd8e+ibd)i?g|GhHF{sOrrh1S2W5{ zE}!(wA$oDTln>rIlaq&6(wDIeHzSj2iluTsLy)osi_G~_7z_J{IcWZ!NRr zW#cmhC-j6Fu^O-$x$Il_bjHw9?%W^B8(+I2U;oipWNW7=eA{QBGMmiWT>-|_9n8Lj^x?nwS4ji z7xMPEz0KV0LIa8#G;CX^meYf(;E0PnXaX!5ttQj5r_Uv=Q@|b-gWw%hWCRvNOGtM7 zC00S&GtIHcRz+D^8C7`h-HCQ`RXO0~5?Q5LNeCcODW93WnH7%IdL=x4`YqKDsvGXz zxh0PtKa_`$pUB?+o-7yIg0R{jH*KPLM}vk_{-@2@dMc0vn6|Vn5VoPuksOXCTF#B- zvk#xj#re`IiGsny4Dv)a*hP)pZCbyyauqGx8lEACmo#m9qJmT%{L7^r9PZ1F8wc|2 z$y2$Qp4&$hFX=6YBXzF#4D;yuDwb5~y}Lb;$<|2b%e71|uSDZ+R`Fv2S8BtIHoRuv zKsEs5YkSp@yXKfuJ+GKSD_FcehPC8W`WW`Ss(3QC_o5TJ$tZP#?re{3M&W47t6%JO zO*GlvmYtn#+1?#nyE3if8jr>@9*#Xg6nIb*Ni^6q9FA=!lfD-vYf(?wZ`x3M#l6Z@ z4fw~r(6F~x>xGEoF$5OkU#nU{B2ZM78&0?Py)B_v!D~xstv1(0A^lgeyyGgB-FgP= z#Y*O88|r&eJz%V(0hX8n=P@2z)0I|BE*3J^nQT^3?|~SvZ1<{ov{SZ9`Mi#=)e~O> zmg>`+%vAj4j&}H;?Ap3F@r>!Th7GLo88|dC3lk2<48+v6tcqXv%xqn;mYb>fqx#4a z*%aSf#gr#ULf5A)Zu%+wJCxL*YXo*N{=uxgWXZ5wdFB%#7Z;8G;R=($H&gAK3hBgO z5yY#?%uVWQ4~|BXXbM+CN|ppdl{MjDw0T=3!()@fb_hIxHDvOq9}EY7Qa;Be5_{zZ z+`oi*K`^TGb4Zlw$kNmanQ+Zms_vB_x(Osj505?thHN%q(3_rR(7pKthTewSs}g-? zwc3AM!wBT6?PV2AVV595QRNM=2khHOw)JGms%k+MA#aQ8IwZxCM>+Yk94_pCwSS^2 z3{-;q*_I;F+U!RpMf&~WZeJoEO zJ~I5`ax5AatF0ft7+{D@Y=z&7I-&T&ysbBag5_jKRfy|(ulDf{8tSup?)iH%*`LYr zvrlC`(C$B~cp?EbI$7v5y1Q7xbL%%^djVJz-8I~2MV(tfhNx5tdPL<^Ci=rHqxHM( z?!IQo3bYNY`GxK~vv?NG^1+#Vi|o!1e6Hck;h${R3hs%HCnh7fdJVsjJxeS{d)3-s zz+@#$LE~jZ!LG?R&e&fjTLezcE@=rm*9SnK^7GnG)DLWKUUdG-?dj{6CTWrqy7?N{ zXZfYW(XT~stqTql>oJxG2O$7H~-wUNswAMuGGR9tbj8c6To z{pSB+BO{&h;`3iTQxxt82>KG9Fuq)&BXH!0VwsTP*mNRgOP`}L1@tyi$(z3 zdfHk>HY!aJGV^N!$R^j)$s;O_EUbXtb>aa)H0a_$rwy#Qa z=U$Z$KX^~hPtRmJzci-ZZMXr zf;5bKJomL9Wc-pto@Wc>TI2ak$;97LQA!!lP6t&+$4*{0E)bCMvTJV@p!>va4z!gX zoLLzN=KCk91bx`t6VD8F!?Yamx^~MVjQ~i#pMj-l=V6A&#)4U%O&Uguwu+9-)&Xan zYPFWVrkSck8ICo}Rh=DU+1Z}hzuNj~q(;w3WUD{2_cbu%MuahC+{@dLAOPmA0wYj{ zwtFT_ah0Nz`nQ7qY%Ck9jxUb3-&EPygyOiVOGr7FHvUwcy`9e<5&Mm|9 z?0n_{D6Mv~$|k+0@|0FUduD4-9Wlm31KHc3nDbV%Mm4~r!6(h$^&YF*76bvQxs_FD zrIcr3_vG+kU&f<}JbCe6=>@`&4 zt@=QFQjc9fob9vOOdj07D~E@-;yX%^N{kEw3I|Hu6Me&7 zMEI*|8^&Is%@bZjOP`Hqq4rmD`}wiF@gsNSwJ+b0yU%Hbr)TS1#cs5kH0Mst4|9iN z%tQ+v;Yoz96fomQW5VjRRlZY4qgE7N&DRz<8mU8c(wF_46WKZFOMh!Am)ee}x0Xjw zrt^T;eR=WFN-n?E^rq_yd-q&HZ|t@{&s<4Xtf)gOOO?mgI(^XXiE z|Mx$T&pvx5ldZA5`06cr>A9P-ySFVDr*nDu$%TCO$)%hhJC3rT*fQo^Eo$bT&wbLQ zIDa;CNGY%COd?&&SX-sIJW;2v^Oz=HxDkJFb1b*-jOEUq9ogL-$li^SOt$qsP10D) zXuK`c*-B1Mmh$Njmh$#@&*jPcmvVWe_K&s$)ha|dW8pL{K~T090WF@NhUQqL$0|@- ziWM-UDm&Rd;fY+}9}fbxl}E|&A&bz4k(y(MJp>aBjtIPl#GKH-Xj>THCVycCK6vJ1 z%BN^8?H6@kTD7*Xn=5Wq=5}4P8s%}b3gtOF=g}`%2ibT!~ z<`JcXp>+a-)HT^+FkZ_G&)<-py&d`RgU51qG?(FEWO~^X?TA;ns-6ZJcd>8EpTtz; z@Jio9bcaZJS(sLJ_Kll|a`WcC9G@M@Y&tdhv)U|WwBt6)aN=#s2IGm03# z{XLzk{$GOQeZ4Eq61NSGwmLf7#_bQQ;L{dE8ob#a%VeU#o1tv)jAeg!Vy*19##+7S zpI4l-x4R?zd%NB)&60yumT5r9v611dAQac9Zs(%~a!6?D_l8-qtnw9!Fq%+fLE{L# zXmX9>A5HeKmct7V;OKrW>^lof-m^+f3;cL6XQA&e7crMjWrGJI)ETR?SnWB>*|C6- z&kM2t)BBhVRh;B9-sCHS7gmXGhM6alW)+MR2&&JFZX(0m=@@gdJRn3F9DyeyfMd?o znnBpwAt9?-ZNvH61gy&xbMaJtQ#z&0WPg!821gqLBq0lcmCAM0YZI!nMQL`AgU2H|*q_MF8@qDz=C14?Y{~A< z$PzGArW_pX%HFQF`t-^`wK=p(SZy&67DT(m2$n#Xv9GXvhHYcDmI{#coY4cMpGVRF z?@L-9;fi-{m?`kgGHJU;UlX*vs9>rj zY!e!(R`BVyNzaZo(1`~ARX|z~KtskMm=ykTyGHr7I7ADILGUGuFzgMMn5bX|CJO2Z zTZPXH6vSK791m7+=ftb2zG6vh@wCnbxL43|wkikStJP@*sqYzI%lV0@Cs)~i3hM*s z@CsuloRpE5yoe-Z*b8u$rHrK2Thf46wWeK|dsl%or-HVRq?^BJ7zF4JmzuX$C3yunifnBA(c!`}zP0rNzO3ylN_cqJF*tVvc*k}dLzHKw zoErHoaR4?{3kr_n&?GiCf5xw6J;>$0~hwr^77mv@H zKJ@xr2BKoG?f;BFYG9@-KHq9Y%S2B{&V#(*1JL(wiR>tW1m z(ca8T$QpQv-nozj5cAI7MN`RpW@txiL9`J}qzizo93IY~CSXumuWodE=8K(G@RHvV z9g<6BL%y)UM?ZJ#V;t$=m3c+Zi^y20A$z4{-CuxKMdU0+GOHJQ1;b83|6B$^nHu;pnM5?xWY8eVpq%9;^lClntW5(7i!U^Uz?{oY;@N2V z#%;sgS0B17K4Y(-4I~ULyKb~N=`C}4t^-03LAGJXI9M5h#;`S0^<|Ple9qhG`LJRC zJE|A6U%V?~u87h=l4agT)stnzjaRW9c{p0ib9Z-TYx|b0 zdVTryy=T^@Yt)-qKy8-{_EGzOUd_s!pZvd9EV|z5)f&JWZ4AR2g7d zdoW588nOGs+r1(PpK-FdKGx;y48F|75l*=(12aj0qH}05g6Cml4F(HZ99N=31is>| z+|lniT4&rGeY}+4JNZ=J{_ax?D2&I-ztIvgGKC{f5$h|{CY^TBBWTy;K19Rf8u+j_ zl^Xak`&?y5Plh{dx&Pv}eBsMC+bWhxAYx}EfUaE7$X{+(oM~f31#vT>BgULYp zr$qK49vo-Q$b!-QZu%JzRYS! zYEP&A&vA)z4MI4D9=3!nx@Pis;Tf*lgN#IA$gm?af)SiWHhWeF#rj}hXQD`aC?6+e z1+`xC7vQM%L@57gv|QshMv+Zl!DGmPN}{wSpq&dq9(*}mxdY12WThmBm|1B=;`&YI3*-|})6=UBzTJ-+U!~yI4QB`G0IKhKD zlj-F6L`QeX{^5=cMoSru7V_YgyK>{sp7F_Sv5?O`IWhiF>@l0K<$QW6i`Bx~7jNl! zy`c&ib!hZtZ-3hzw!50hGM34X27$I^e^;Hf+tzOH#*KZsdFT~YTLW#8rkF*musw-o zqqdCv{|WogU|Y}YJP=$vo*Ztz$OK3b00}UYVzgvZk(4c2mTk3NZF|~wch7jH+*O{c z3H@uTJXKv?Q{%4b>2{Chwk%m=Syq;nMM_qrD3TBZh(LhI>0aD??@2pOt?;b%yx#$9 z4ta6T*=O(Xd%yQx;aS;R=pq2FQd5I7hcgY(Ol0p!tM&FQVMVL3E*7VV}i5Hy|3p}t@L9+f&X?KELkd)_w9_z+2S_79acA@iUQtnC_9<&yLT z5}l9$ii(WT(wX2}c03%vIQ#5?0Fe}al|>{rCB5Q!6WajldZO_lWf&Sqv@@DFADTVShk&V@YDGf9VA>5>pR zSs9tK9C|*p;IZ~Liyr^w&e8rHiS{EfT=>M+7IU3lSYx(FRWG+ymu_EcqHfBUv}fYX zA%nSK5yX()EKm_&f3BpxN&;{?B)g9KA-UWj8xC|z_O0X5HVLOdM{6U(o@Iw6wgqY; z^?djhA$PU19)WAj;j#wAF~@VRoeP$8>5qD{zBQ85XSU^z^V@Rn+^+q6=KPMFIlC*T zcei9~ebsPDG*{FfINm1L5^RrTGSQ^9;4o`*9R4^Y#3NAPhHeD$P)Qb@j;Q5$elb=j zfn1L1H~|`;0OA|iT(8E0S$fAT^(5Us8fRYRn z2%o=?Q=krI5uYgAFMOGp5e?pkkk7e`$OsHu-4cz}H`|xqU3Z^Y%E;TtFrlQTV5LDs zm=UdJ`^$L%2SP>g`JG^*x@JmtlJ}kk8|1{gAt=&X;z4@AfZ*Z3slhwC1)v6kIGL*H z6qy3NSb0qyN!mI@3DF&Cm1i9ONOfb3s**Fg|_Vz5?G{_9M{7dV+IBsfE4YE zA+WeDWw`K}7dMfCf)BNUk5W7h5hOQMDXp)Gt86lv#;Oa{Se%=n)lBaB(NYd>_2ler zcgcwpI_&PcT)lG1G6H;(Km-dT69hvno#D_^R9h9qoDnPiMT;q2Qw$t7q~k;5^`C@m2eLFa`ZDXA7H8qx)|TTWyJ;-!*Gav+G7f z+1l33m{r-@UXzWjv7A1$A?MGWk`p@{vbHsraeu{ngln+rjZ3%W#g{M3v(H?V=U=`o zFTZkGu3ot%dj}J999dO^W$G&+(>}3LDg>bxy`+(8#2~?*u4#7yl>@-)MJ|-X(HJ~% zB*NL|O1-YpnVggcQGwa&b??F3x=96&>oY!gswyKh11%P7KZV21+hj%%gZjKPhcPsv z1Q7ol1!l_OP&vBkOa-jSv0Rm5UGj~>_E2OA5P-rfut7WAS#8l|2Hz1-<9DU3s;rrC z*&e%IQaC9QrC)8&iC};0aIb7ABokzCh|VsUFrG2wa5}XCrZAWRfQhPw$m#8$$9h4j z-g2+bC}=i_+-u9Kt{x@iIPWwhs465gGpTCA_c+o_;%9f9)k(SIti(Ld-{%~Vp%>sI zWrih16!3AH&uC>62)9;*kiRLHy-lC>JeG5WqP-!S@t0T+e)ofo4RI9T~WzfpX zP}Ww4vbnh;n`>*bvA!y6n?qSyUzPD-EGvd%MxssN(e7li)K(`)a^vQn+}hihgZ-II z4rg*z1KMv~m#f!qS%CZMjXi63r_SEZ-Bo$lBX`MneC$CvduCUT77O{>m!Fd-pL$K6 z`NkXa`pY-W5#+6D%E*Fa!JeLtc*wE{>bV>%Spt42hbz9d&VCl@nsGc{>B}8=oHk?h z;>By$E=&V<&BCgm2g&UOj5P9!d%ePv=H|DPJ)M@I*8 z_RJaC*xZ#@Uw+kxt6NK-aO_r8qMjX3OMw(#cR~-dNdg>mA7*yqWP6snetIENpmGa8 za>kjX7yIG-TMm&3u9Y3uoNKmt#m-S=zw*p+CM8?z8Z=jr0!`T-B$G)<#yH#xJ>xP- zv5p2|)zM}NCA~Xr+%gOHaqp!J5p+Sw|>QXj#dvec% z>+<$@osfIpx+-fMID&B%0&t^3q2jYMi$}()L?Z>82RY|H7h z>vH16nk8!-PCXc|RgbG1n%py%$z&;)F3jYGCvV6LPu-L&uTEvUr>*P;7L2!~C=KY@ z?1aEesO%<;3A|7V8G$`uj3ZemRYtYMbaev9XgM#_S;|6|w@S<;2;3U5tU`$>p8T1=D#s8MD(ee7GAy&4p=sN%Vlv@8PhDn&?Q{AoJk*z zbzVt-%^4$L!>yqpSwgNR3)3^PZ_LL}w%8E4z|LcMw44r;$rBD)XjURjY&s6N2Wm7z z1(qs-B59KnixQuu_|`oP>=JU@e{L(I)8DEP&SXiuOwph{R~e-c($P)s&Bm6`03IcVKy(9mN2R2_Ze1YUXJK&`OC+4ia&#c8 z8&f%Pc2%xlnak_XPGx1hChI#ZG9Hd(bA3}5labA5yncC4hW)V>02n3?{BKo@n5mQC zgLI9(6!uWaU-R{##bX3ats{^={(NDbFs@y@CiD5e+;R7A?KRuJBpl##Ved9DraRjU z+u%Idf196)#ME#$kVpzl13JK)NlG+&yz#l$iI)Uoo4@1{ZCySy?w{i@xWbO)P>CZB zcri9A*-Da=XtneL+d3@(OTfq)uh|E_7khqKgw&PVZbJBjT`At*te@z-Ym+6cTDJN- z>7#k&IIQGz^B=0C27f4ZJH3{BmsPjC*cR_qyrTneDbcIZr?k8I9Jp6h0;46T)}!>+ zch;9)*^w%V>e-uTp@*+mEB5dvD!>ojD`<9Rh%bMh+T^pQHGQ z*_j2cFSA#BjEp-xHw{(9p5bqNM(tTfmO?t85g@AJj=AX=WTuAs9F0I7j$#&iaVs&A_)vYZj(S(%!-re(tBupD97Xl1-wKZ8=mjpHKz7)^2fy3sjkzf=Zsi<1J z*S4Kh(bA#vrZrD)Hc@tJU%Eaz`{;UYzZPCipaWG$1KChV?Z&E{IJqIGPjAS%b31a! z`IBd9B-8&A9-&ph{SRKPdJ9G4s zhLgF1(0E>QQUtJVW>I170K+_gB8(w-Mph8Ff;1tof|p9cP-#0HX*4IpUWXGOfq`5i zWnbmmqVj_f7!+83p0ihyud1~Qf?I8ng`6A6HcMdOcegBY8c4tFfChiYGUfr1iiJCh zDBt6Jj#(AR;BDJ4m5aJ~q6HmRVxMBLj0=Bz$$b3X_o33wJOkdrYuA~aL02+p3>wGv z@tkDw_=^bIcJfy6$HqaM=K<@B9qe?5spI4Rjn1!6#8{w)EwlPDtG-$~t~b_t;4o{| zY_x!Yti<`_cYrW;E(6JsKJ*Mpmn9f*UmZ}(z|M?94BEAqTa;V5A#k3>`B}TANKy&D zP&(7L4LVoJhBmJZyh>?xEZduF(HdscGKaUeH)MBvP0pU#l&#%09}qoQl~HeOa$fH^ znQ4p6L%DF_n!NGa6}kBORk`c_bMluz@_xDV?j0GA<}&XOjM9KF&_+%ywBs$kmX#U^xoUuDawI2DoRICU zU3vA@3+6o2>~F>sXqA#On1FMwJN_0j+k@|ToZ!D$z(Q3y1{q9 zC*r^5FfI(7nfz>YQMREO{wdG&rD|?Kp*80nbC4iui}Vidb)%=*kiy?WczCb!z&tt# z-Kx1EGb$L**wf=?@Vb!9M%H1>GXq_)Bw~Xl4PAqF+D2+2yXOaT-@{w-&?CEY*IldT z#JYZUDNjCqOP+e_rd+$UFPpnVx$o{>dH9jjvN0IQ(@$KJum0HudGY0m9Ntiwq;q|| z`q?U9LZ`Z4GIkWpz}A8;5hM!vYI8ZQm7CARST3hBUSG%^cdg4K?>i@Nf5$0H7P|Dt zfjs-%MY;IKHCbKn$-VcUl)LUZV}Y2LpFNN#zI;)hfBJ^px;m4Aj552gIxe8wK(yyZ zmT(4?BQT^()pHv4WY(L@>e@uk-n}k&zGYMHd)pZ~ePYLEIZfviIhtyVOl_I6kj<@; ztZ%H!Y}S)YuTA8+C$Gy3-@IWh{HFVgQ9ZL+lX$dZ-*_k5%3)lAIaUHsxl<|lj4h#P zh39_b!W&FR_NpIzt}~(ra@+Yca_Q0qdHwZ^vaz{o8R_NVO_xE)^Xwf* zl^Y1Cx!W!~kw%qL+H1snXfc&C4Q;=)a$>H5$Az4|ZCkc>H{|-2J-PV$O_7D_Lj*2s zU+MtZ#%QsxCk3z`fz283o}+Y}zn!r-l`I z;ni2=w}0bL<>ITiU$tIAuo*cKRm{BYj$t z+BnbPnM8hp2fMv#A=8rWILVh?uPrh~Wu8$P0t6MIutj>i`+B~Xtt;YdY-w}0z*7|n zA(BphDTx$&#Lhv&3i)FGUiP@pxy1fb%R5VeC3yi{pnPPG=io20lZy4=^Ptvt&Fz6D zA+w_zgXg_*^Vr&?;`?>{H^zWtose(sd) zu5ZX_bts3^xm>((U0!?nvb=KPn)xp-U*3~zDsOITK*;5b{?qo5mT+OSykcf_C&31| zpC1p{5WlcI_bT4lRi1OxaRN0q9&|1I$_<_+JC|Nz+RAlCm3nqT3cUgk4DK-;_hof$ zVAairI! zuz7QKj|YCIQ=QSKZAyn$ah`C2l3F12Qcgmr;R^|DaVz%I+ahIP5r{z^nW=_wPJU@(^Dq^$y!NB!6oM>+9G)b-p^!@$KHnTiB8^ z#S>DFe0#ju+@yOh-{!u{sx$dE57ThW|No1=$xSFe-bv_)>o+Bp$5!}lFMZ5M+^n|~ z-RQ^&{dG8A*CyNbD)2xGXS1MqBvgP@1Bf+~S!_kN>fl1J`zhyjypdLpUBQ89bIH6Xy}b?2U3zl@OWK z{$Y1Mm|beAHzOZ@cjQ@CIz)UjIWi%yUzSb7&ShLT+8Ac#5VAuxdou=^dexAx$@~M_ zCQA!~wdGj=tSaT7%i2-{7uq^yF3ZV6W`_%zPPBKt*pO0tCT)QfgTQm3TUDhN5J&`1 z=a{yuRzy{Hf7ii+9^@_Ruky(Pe$~~pVMMu}#%T5oT4)aaVjsEI+v=)H-bU0z1!X0#7+m=Rf;_Fx5x zvmHnP4xAGzmAZi+2Wpko?#4mwF~AB}Z`DS}39__BprCA!$Rwo-%SPrwCjj`6I_$*Z zQ~FUhNA}D|O9fKWDW|&tC}k4UL!E&^LG%uXS^&+t?Gi>6E*&!!pu)p4b0dk3O;Tbu z;G6c!HP;h@qaw{Xy+?FD$gWH|+j(^*Q+V9F9P=c?&a z2%|`J$hJ#*OSaS+Hy%Ay1WB!u!>@8=thRp^#6%?)Xr^f1TCVgdSRCyX zwPljg*7C?Q{pX7t5t;EKPHmgz&Kj|nGjF~3ytSawt=Qh$l2g08va`D(C(mxmiBns0 z;^dAzcye1FdFNd+?yt$Yb7y6HeN~PY*UT`~)|!WlTk`US*R2XkE0}aRtM&8O840R4 z)UoUf45Ov^Ir-e2#Xh99*BQo&%u6^%p)S%P81$g?2G%#na_3zqY$luqhi3ZBqo}w9 z1_^@{G7L5DQL;62M4k;92>5?{Nhw@Ub`-@zOXNky!)iQ{lOhMe|A&0POQnf zGpq8%f9m`Nl2z^DjOxFTHTh zu5tSvoATBN&RDhMi%;K@$N%DzJoor@xp7Hb>FSJ<6$`3s5XNUwR`4^e0Su+27BG%! zeCCh_PqlJkWo;%O`S_jk(0fnH$uncw+S!z+zi~yLeD)1lT_4H0vm0_^XH(WT$9BI9 zuN=rXzjjStczRE6UYyG8Nb4xZvZ}%3xh6nq@>2~$N07~brnAc#I1Ej~$;&)P*``%h zR@svw3H*PdpPhgFSxpCph(nKK7Ud^{pt6~r3*J?YyGrg zkl9k?*3DaT;o?DRwy+-2KjpvF$bpI7UV;#45M3H^(j30e#AI zBgko93034_0QTkp9q5DzBl#+YAq7t(Ld31Rt9?=MRUTrg2j*%0Z|0rmMan**Sf*E3 zWkMGPGsttoElsi7;1cp#RHAAnAqA;ZP!#)-HeT?8(zV~h`L(oHryEYl!?cQ_2O;dj z{_JMPGcPvwR_rBN*==GlFc`@}Y@P?pD7Zte1Wx_pKw--3=%|pQ3^IfxW%(>g))8Qe z^^gq6bwMzsUCsd?V6l2zP%gm)LYbXpw-ktwHITPh6Fs>vxSi$e{~~b_Gg?s)!d$PCCq_JD__}5>S=U=!aFTHX_E?&54 z0U@n4RP3$9zpw;~;8EK{O3?U+WUDZf2ZBVhLmrQ#JoSc4D_)8!I6L)m|TA1^D ze990m=yI*~l^%a$e1TKyN-3(C_VmllKFBYc8Qw`6Zk)vklE%FpKSAJh9ORnK%<5`X%N)LhW_(oapy(u9bc!c+llN zYGJ`nPkxF_1*NmfGXsck3AYp$Lk$o_yPkZFdTh5@3pM@d`1+Y-=x?MnJLg{WXRrct z1~IVW>x9W$pYI(PoZX}rW;kT6R)%@(N@G)$spO>5xmMaqWz;qs&^#*|3fZSKMW zm8F)Ig^W#dfE{v28y+wF=Fm{*+g$sv1GRNo26L~hpLAuPcs9IdjX14Y9H*y)Wbs^4 zU13ZceIH{(wI}t)*1%e+>ADVXE#zQtAxHZP{QIKTN>*Ux{Wy~a2OU*H36_zGTh!%X z&7+=m5^!*JH@eOANdXHm31NV%s3V}E$2Kbs^TG;@wsEX{rVRFZ%b;xEXRoO+QHO)i z#qwd4a~o#Au`!a9r#I!!+jr&d_uVBAKXSLc|7sEe^4nvf;B)d`krOR`rgRS~()D@T9e)%c9=2MxnZL%p)F-b_{aeYs+% zW=*y2{mQ^fAVn?g;0QtXDilV`g)V zp_YlDEy#6rmIinUMB8LHI*UYQaVQfQC`cUl?Zh58O25&ucDIy`u`V+>@XV223tW#K zHm6%T+VkV2m34@$JLseDv9+pHW5nCSoH)59C$=`^!s}P$;Am>qMk_iuN!!(Jj;(FY z*>k&c^2D0ldFQr#;JpvYN511ja&)jSlf|C&M?<-K{g(W~Xa7Kc`4|68Ui;<^8BE7A zSdP3BLo?j_TDjx>uWg2a4R}}M$7c%o8JEMLFa}q`RI-TgPwZVpQgjdJ)0y={zw@5c zGC4ew3$Iidz+IV2$Xi0|$%Y5k5 z%6vz=*X-pT>r057vmYvu)#`%S2R59T@4K^Ea*fUfnFPfc4Q)V4S67fYW~v$MCNWS; z3B^LeyD^51@w6MC{R|S9eNs9LJeWo8B%c^PLZ@U)x|l&_t!2jpvlZsOBiY*R%iZ^F z$|LVPCHFnFD?6J*xp?V7o_YGJ1&S`dab%8%2Orv%M;>T8$f>91Uo%dco#Vx7-6GzXLo zwa!Y)*jp1$k=1HJ@D9y|3@}HQX5+35<>ua1`Q9IVKz`(JKPbJmn=+Xn$!t21uYBn> z**ol6rt|5YRk?9}BCou3L!SNSO?mnGeYtjFDsv4CX;5CbMcZCk#gJz-n^OdHP1MPS zc_rkGGF2FfA#BiAFqs`o!1KV);0eZ}?tFr?+Z~>6eEHiv2`Qa{L3|BfY3$H)wjm&d z7B~(JLEq3@BzPNtNmUu8^P4LqBhjez8D-Yzb1PkGi@B+c#$!2u+i7|Em6xoo&D!d^ z%r#QMyr0Q0wcogMrC$`FPfSF3u4cyo2YX^h*1kz|I!?2SqV5j};)9bQ69Lu%C%kq1l`-;5s!hu}Aav(Qu9LkkTdvb7iDA%s4 zqjqMk-nO?kWwbh$3l}e2CD6*oinn!CLr>RdnJR9(Smj>KsL09^OHK^Eoz*6R6Ahcu zSwWToGat)TrmBr}=8~-jC=4u%Ii6I>gXD!gadvXp?=)wK16LVjK^tS>McCiIzNXqN zcs%}6zL3NUCBvNEDLXz3Z$j6jy>QqgaAwAptx_~EMRQ+$Uv%}(wC3z3{tVWM=LlLy z@>AmXHo(**f-y-Wh}Q`S<*jHwVLdfy9j{lGz9$z1O@t2v6@Te;PkBlD-Of;HkF5e! zgE!wxneQ=%$b<&2aU{GQ_3UE~tXknYQ1MOO6onl=qhgdT4=VAZmx+$=e zG>uOJKQ24>!RLWf$i7NH8~vSwL!eO=0aod!2@?HBK68pZLZr^7OM8%(R z)5=OKYthg^eP=5+yKy;~$YMT~$-!K1U7yI|Eq$x{cuMD>C8f_^X`d#tXOgGgY6#mq zeYcoPP{a|gxYU0--#n9p@nFG!+)6A(h|2w_pynj1!a|r=#DV#$Xg=26Dt@gZ1Rs@A z8(;jJsRO|NWeDeb8oj{z{3HT1U#^pXj2roktESIxd=CBqREZ_w5+-6n#e9stto37i zn%EWAhQLYeS0)jXHPJPmpq=7KT3JrQvwTe9>!ZDZJ;Syle$N0|kI#eFO&nLMg-3@# zGO`YBx1XP+Nvg_3Kv?ahxOBpY0CNa3v4tUvaz}I~z6?jsqHb zoz9~a4be5C`Mgb&-L>DcQ0z5ZK-=knHv*mWW~Z~g@Zh&DKJjL4L2-}h$6 z#($@(7d(Fs#U)|TFfl8}`YI=HIl%M4R7jcu-v)vBvpsHH-x1OIK4gW5(F|wGu`S|r zZ;QoppOer643#h|<&RCP2zLn-MDqO_mEj3Nnb(9aQ0I~MYf})V!J)bLgSM7o+>bY} z8DM~bfd!|~zAe64`wlZ+BJ)3axfW27^o6W#^sQW0Kcs=7!&?iPT4j@iQ&+Ijs>Iq1 z@ZPg#h2VE)R-NQ~+YWiN`$jZAOKQ1@1j-_#!IZs6XG*PRgFZ4|7XZ1N!9oO(y9y^U zgm-<114aXHsM=D^tJOaipo_k;z3A;bU(W0tS62IS^7Mw>d-rL1*F$fSN8bMy+1@@S zhkFO|jmN$vfB45w$YYPaC^xSi$zV8=;b82>T(*2bl|m7%X9q^!iy42hN7UCJZJ?wh z#E~!KXIanfBwI)nGlZ(;L4*c8l9^@E?zlsr_L5)7iow9*)W>j$(D|}h2l*s_#d>P~ z4;@`{WDH6LcwoidsH@l!n%#yAH9;tL2G|P>cEPl5AioS@IKFBSZWpLlMq%lS7Np@3 zsFyWqGDzCYx`=%N@b$`~Xb+Mc9GKydCYD4b~w)e&&A$4wSG*K97EI;47YLvHBovzrIzMD`g}ajnQ` z9j#a4opj9=BRB!9xYf##BGBuo_?Q8VQ+Lv0wgJx`(W35`N0i46}=|4~BbJ^Ni zk=t%NX<2x$X^>?ejy>av*r`;iRfSWirh;sRrC13Ncub>*T2!E-(`NRSA(YjG(DR{O zQvGRl-dyK%^yU1y+pL|RwPWhcIV-cGTE}sff$?-?k5#rTIZ;^#F)gt{9dbOKCd|DQ zJmOY#Wr7#{cR(L&$H<*vnxs*d3JI*r`RrM-kTH}EO&Q`YH#vhTvfd&KieW~>i^!l2 zhpnG;=rL^%7S?mg4VHRv;J0|Tb}9sLCeqV0l^IjA*qkbnV8E^Jbdd9MF1`LjwoVP@ z&bO}1J0CeEZ+mc8Mx(yG{OS#P_L-aV%(K_z>aB^a^cV8J51x_tzV}WU&ieATuU(YC z_|sS9m2Vx&(ZNvqi-Gip!^RnEBt~?m2`!e?VK{pxQsye$O3p=KQK$ zyR|Q`zIw@=MYr}2WMgAh?!W(bIe%(LZX8VH>Bp{E)zF0(_pNo?u&0&JeREcqZ1Z4Y zR>nJ;%F1dc3AlY#+5Ffa?#AHQzzwZ(dUJd_ z)}F7IT=cBf)(B5-3@5(+Pb+SAcUR>0d(Oy>tNZfu^H-$T^Le97B?bxtT33f$S2=o6 zDFr*z#Ed3PIQUAs*Tg=DY*riYJ03RRcw-?aZX3#7_if1OJ4f>Ik31}Y>HQy-&Go)a z_h<6uXP%Uw`q#fNFFtcqjt-PWdonpByGtExbL{}px1sTBXI#3dbIddeFaknRA*~$` z^yZpSV&|IkcZ&}7%Uct<&4Bh<(9N!E;P`IoG!!=Nx`)X9JUFek@NHTfd5H>I9Fxna z=mw7KRQ9+WZqGbv0OmpvSUzudEI;m}VEx%-c~|;J@(_Yqxjtwt*k&SPMUIqgpdj5AQ5{ruG3XuyIyF8{~vJz7L#`#fi?5*wZ;J;E2R8z%mg4NgoU6 ze~|;yXbym!2^05e0`%ZfIL$fWM)a6PJ?-cH7PPx%z!W|J1hmR-Ws2%*k|sdEi(lI$ znL0}nWVENrJ9%t;9z-}q!*F1D=YgQT2nOlr^}8jqTKj+XL(HT%n#uVy8}gp_+$A6X z_(O8<-FM1hypUI4za(G#i2gMY(!;->X~}YA@)lHu#d(UD|MFj-P^XW|(N@Xu$s?^*7W+*J0OSg*oo`Qtd4%nqCH?My=U`gPS52ZtB;9)wU?d`D z@>3fhK=L(r$7n1n;EwS99#`-nisLeXN$O2R#IXwj=H*_mZ*PWX%9Bis#kMekb%+II z#jpaVzWaFxQS;jOPYOupXq-e)jN z!(!8rML;DDB9bb&r~TS%gF;mecwE?|!*^e_*@EEw) zg4GbM<^*Yn&Ku)J2A#gogBOH_?7aZ+#XX+Mxv;*ptLv`pCI=cI@)<e;z`Hd5-D_i^y8q$YY8*87zn?dnyC1jZ`3tLrFAR zF@%E`XW3-r>ieyv+Ud-zj5K2d?S;IR$wVV;^SNwn_T~KTyYlcm?v;=Kr3d8gcikbk zrZf5TKYv1g_jkT7Pe1*tOb)f(gAOuuz->LPVSuRNmjho>{e{%#;3mb*$GryO7tdz(K2#99(vUmHh$xRkY|ozPaS9vurF8i#fp<5s=1u?RHb{YKh~wg1Uq`!N<&e&5zX%Rg{)b&X0{N&6 z^XzK743YxujsB@htN?*?vIhbTVRX=Lv_O!cQ5p}l;|(Zjb!|Rdd#MHD5(DA zJr23dVhd`EEBx3f0}p86LEoY?h(@EaT)%Qt_HRvW{*aNlRWW$G1j{HJXqNpzhU0;3 z?X1b}iJm<4?i2E(f8*m;G5Yhr`X}<@E0^VPe=1im9>|rK4`gvPkcB#f^ZvdjyQWnq z4BdGa@?EPYblszowz<=w(Zqs0=B!hP+)`WA&D?Pv0T9m!cRJSL=j$6Qa^Ks|%Z-~i z<@Hyu%2Knw`&v2Vj>I(Tg9hr13Tie64fB5e77kLp4HY(xOyA(t*(m)Ue4`m;&7P5MZv&yLx^dnCCi8@A=$%9i!#NT)D6C`#C8JC#xx zVFdGfsND*1YD>?p;o!d^i#TK&WkNc>gbpa@BkOB6eIQ93|E9DE-!QKf*{P6Gl`O** zgZZpU5@pOZPZ>chRLthl#G}$L(_d_D#9;`b~M_%a`TJuili` zUp$hfzAIiCNBe~<=O?mh|ci8-{r=EUYzWL1SHk^KI zO?mFLoI7*EDtexM;+lN%^RLQFPw&amb#I$zbHB9JWXzFhuyzhwCLYV4r^oTT;iyPp z(w32jlbiB^kKQ34`R=>r)VYDIZz~p>%Nws9$P-_?Bu_tnL*95zXEG`6YES=YJ&G!! zXxV}wx>pXVtby|d)e{(+L9^0`u>A?*zrj}-)J(F64To$~YS9?Z9^=PoIcDpzJm5ab zlHx}uOuRoGCLExl{cB7{*6$6!Gvp0k>F6rHxL3Dg1tdqic1*8lGEIYtXU^`*(@%fX zlB0&BaT_3_%Aphopcx9Pu^dZu&IyCHUv$gaY!=a}*L-nv_)Z1*{2$DuJ znaX{=)@Z#itD7RH?^u(yEs>p*efjuDAC|xR$q&hMFTE;1|4Uzxr=GYbSKpY*^k{C* zTCIe$04HXQE>!2wO&*>&y=gRd>EaccPPNU^_!uF3OC!PysI;mL@5pqrmyik3*kjBi zq?<|{r*q6~r;wqAqUn57sD>QHDTz^lW#GB(?{!-a$ zyhxSKXib;!E%q6@hu4E0s>G$D)lxg0(b2A^~BrjrJFHuIxGO+69?-*7&iQ z1|m2M9m))E4W$aLGe^}h-nP+E*q>^Lpa+?JaZ7??CO@bb(mTzjcCY+@Ey!bzgWXXNyC|_Sg!+1!VYlkR7tCr2xC4ToloX~ zLuGHjH=Bb)A^%Xlg=Al}>FUbgXY2t7Z#c)z;AQ9@cUT1T2SID+XVJ!Eg@Z^vta zZ;>?cCQ|lIx3`s!Xd7G{!rpLrz}VMB(k0{zTWO^i8XrjdR>MwdbTgkX?%#H=N|Fn| zS$AAbOB`tD)}Cw|0W$Ao#yr3`u_^B^qE`1Syi&nOC% z5Dqjx_sskY#ZU|o?(}q0fTH5FnEwFwvNtbfFj~s$syi^IlcfcTbOw>#!<^CH3eDQK zI1~83;+(ow3ZdliyHyfJnP2iml!SA<267&QVV$N~gcXR(A)lRo&o-X|&hglw%$UT1 z=;y%8IG5ayI&TcJPdbai%Fq)U9P;bN%#ol4&p34DF`v%8+k+eD@E$ zTi$xtTjY(4H{`Rw|0VhT-+xSAdG)&VWF*7U&>SBC^5$0sP>bwWBW!MyLVd(Ja|wap zd_4iR1I&!2#sC#K1q~x=_H`0(DGtw=g9EX$Rnw`+z3uULWRX%6*<^Z#S0U%S z@O-0U)CANdp@N_50V`vdltTuDIE%Nq)iTK%W@j)_nPf0L!27J&-BF4vg%ZdPzCEKi zS(l9RTnn99F$tX56*OTCT~6+5fmGtD)7RZLiZ+xCs^-NvalQjosorwj&{6ErH60D~ zCgwoX*H`zw(MfnX#B0-7MutD}rwfMW4xY^dncfD?&~PV5?82v+>k1u7x*qVZW)-vY z-lq2GtG4)pSNhm&vYd^YvqkyaK(3mk6=wUD*7f!u!A84D)8`qD*N zEZqt2kM2M^8_^z1d|{g6Hgd7=nbl9mmI*;jm@e8RSmOI_#$(+Z0U{65LJ@jfGs_{L z&*ZK+^JX2!T>y+(C~welg-MJtxV<{@XPsXDTPD}joGF_8Hsmk@v}A3kJi z@C4|Ijcn{02jMacw}Nn<3>5Sm?@Q-dCtKFP0ndOVi?^I5SOT{JDI_9PkS_GB?qzIQ zUOLV~e>y;UxOKB9VWpz>y@6)&2tD>ges zD|@z14dks4Y{(<;J1ckGvmr7c$@8z?lBb@(EU&zHRknBg^1%H&@{V_$ll9S9UVG(8 z9{cl)^5oZV$h9|S7BKN3EpUkkvHSrT>A5&j7LKY47r}c935$}2y{z8 z+Qy(oMJvDr&I%RTiY-+F55`kDb#7hG+_5I7&uv;D?YXBf$s4ci%ltssv6|J+-jdfH zTBXaP0z0bLz52ay6L`Z~jYLoh&L%iy;QVnOMFIo93=}nLjP*of{zjj<-N6-%;9c5{ z#1)>T#CjNVt5hj?mD|O!%?cwLf#UoiY)N24LI+49%FNG@Gl^sZ^Lu+*59Dv}Y{<#e zJM!e?k4t}`a(ZCxmJ^R4@d3#r6lgCO1KM+SryfxCKywDs+KPhxDOaO~C|blpR=9jy z%I1~^Nl(f3Yx{EP;!Wq9foHl~@`MFel@_B48(3|DZ2Fneqz8(e(7g&G?V^krjvB;(bA^hbyCgWvaldCUFhOMkW7z5OpG@3fJ0ZHCI6qMRJ^U?ha5g>*-XQmt zR+fLQ5Q$LuIb3O3c@o*u;r!+8tz;H%XBfPYNhIC58_vN&_0Xm0ssVeE zEUn}>LY&9{UMJUm1+12~f7*U!%RvsXkHSeLfJ!KZZp9Fu#}h!&B8u0Gvxe*rTfAF! zozH_~3wouUZS0ryH!*z?v!qN#604tA(rX4Vs)nK*Of9&u1UvJw;If#5jCR$rqDXu} zU`Vm1CT-{$&u2%nxigY?zw=J{zVCgPJpAB2CKtc*_2=ae{_t^m>>IDjl}iUQpY~)p z7|F%7^{VJj;584uh&DsFF57>D?q z)kfK_a5e?)9}8?XRz3y3`Jk$Z!f`xgMA;kunQYLO_C&4G-_fFrl0mLp>27ID6))Gz zjZ{lLNRtYZq>5b2KS>Ly{Rxl)K4`j4g+IIrk@6CG8;Q-TqMZ^3y9utPY2%CJa(A)x zI?kc=dc7~Zo*`i>`7+Kf0!&p(Te>1;g5n&NJ=X5FtU?bv9Z!Pb*37MFEzr`$RPg!E zrbU3Lln%ea34@dZXIR8L+RdWgKPh0|oDFMnoXhOFkX>7puaG+ESb(U2LaXAAUoE$$ zTke)oP^!)2%})<5$7SS3v0=zvI|gX?_WuN#g6M1{l2 z=>|t(ymA2W`eRQJNj(OIYA@XequBs4TRh)g-b&=TH)qv75d;ZYz-hLaRuEZZiJ7*U zo7yF_|1kSBv916Xbq9>xgMCF z8$~cJAE@XMStAhOe8TvxGiB;nnJ05*k{yG*Zt#JOdTB5lgAI7h`9z>dI~*79$+yNo zI2%!EmWE(t4d;xJ$o65wR`*mtr<0`=JPi6%x$C|i`RE58kxzgBd*$q@GxFHuFUha| z+MmdufB9Rozc-iRaK+AdZgWN=i%>yYWSaoMfnQXhI;~fBY6iBD?F&I|e=eS@U~M^3 zyMo<5(sdw0v1K*@z)xTL80Z|JM~7rKnvINif0=p&+jUS%#Jo%DD;=ZdoCW_wh9l_L zg-OkAl6J!QF~g1niA0!@uEb7Ph9ORSJR%2z=CpzAiq}(eg!2MC1DZw4B5!3$ za|Kw6DtL$)BYs}t$fLC)IBfR-VzmLIPFHBamwOxh(40_u*qeuQ$0O}MuxQif5dHc| zcjnb0Ph#&;pjA$l4ykv)!a1se>61I#7KnM{;uSeOn95MIoUtcp1seN-wxGk&$TJRQ zA|L+PTjj6($j9W@e)Uh~w}0(X**&!@qw!Ma)2U1j=Q2I)$>PX^GZ;LXK$qw$0d&kJ za)*o0OVWG!{naUs?{2`Do=}~#&}z$xje$OMcE=oW7cX43J{sz<^8gfr-9`Bgl8eZp z9|2bZf=c1MYawug=s3H~cP7!}=N5W!Ku!)Q392wP8rQLX(<8a-&O5Ay=>Fc+TRx=I zs@27;kHEL~YP`29eu{RCJ*hPlw`hV8@F(F!lhXS&>!`(J4)Q~|Z7sbWICf7yOmaYfn?)DifvXoVyMJ+v`FT=|ExQGb{F@PfWg<_!>rUR<6dipy#8V zA#^(K4QA$GqdWI2&~5S!?dG%!!T3?}fF~d5cYUtuY%0tCOirI4%L5N@%OmeTFQ;$c zl%vH|UVi1Kyzt6(xq9WMoI1TOcb(snx88qB)(0bb?pxR8%YXd3JoDr&Ik=`tKI$MA zk)aw_Gg;Xj$apl6^LOsZ?RTunTi(7UC(n*#xj2w3S8vE@WmQh?Zb?s8MFwMkfl;KL5t4)HFk)pQCf~?lP@b@b| z(!iEhwClW>>ES|F^|`bqm?qnxg4$$Ev@zB*n3oJfP^E%KWu0W~0M0MW072P1Ifhcy zq1`h%{}YX~bF1q_$v_Qh7Me5Wfg`Y&SL92F=3$QdBXLrk%fhPnDd$)Nn^JCY1}`TG zR)u!9pG)Jutr~V-cbc8dCUWBBw(RV#%VS^vhODh^IR7KiJ4aHE>jD1C-#Ggp&xC#B zJp<;2tTMe`d&E`aEDPBItVg4Xck7#DIdf)P_HP}^rHlJAURjfYWv+QOS}!v3&Hjqn zp4KuIcpF*$u@9!x(xM{gcF>N}xbeKUZdw%?kF_FcE^8YrHbZDWyCr}3AAP^fCP(s1 zzwjqA(Td&qz>>E>KtZx(w3r-~X8U#hPdIbB2A&x~?IxmH zNm3;%$^J|Ox6}bzSEap}3BPs7kZX<~s45v-G3d!~heqvA91pph+td$DI^XZq`q zi4+Kf7Ywb)vQ=seI&rTCv(YIsE^g!mXu0}tk&R9Gk`tjR2-Kcn(R|665>Z&0Nlkkg zw{LpcIin}Tm63Hl7!2pKkf}^2Q<)tt4ZCU#I#j z9$UTXW`G6tztBhryWgAkQzOaCF5&1-;-uQrvAxxJy3V5sR^(SA>8iv5z2H8_l2Lh< zAX({n?r&ohGw0(P_(Qh|ZLOMpz8xyi3F1B&m;Z^Z2x%l8K&Hk+CJ6J`JL?-h*9J;9!*nyytjnZd{-ngmTCa2$ya2|>}Z zivpmywr>Mr*G^rkN#De??Y`u;5}t0;O|U27-^`du_&@R9)y?%~Wko{9a5R^CGKY$D zMGXK_w@!tIW1}jGq>*~s_&kM2V$diojI3@c*i%GH!}c1P&bVwax0N{o(7>{h)Bm z@l$TwBEat8WCm&3ev0nbJX3(a>P<^VT_}1Rm~23rYGNt#)dn2fYzGYp%-kTctfxAM z>y|SO8B^sz z(^)Jk2UL!n+})MYU?i8`xGYD9Q>zT}Olkl!cS57Jrd2KsJ=<-zn93vXzFq##-}!F& z{1?6<|L!M0C*$FU4A->kXC_MvO7~*fs6Wc+=W) zy3wQoE?wVnxR8|f6yKt@X{pce9_8!Fi!5;0mO z2IkD4spXvatdAg?Rux%`lD@U4(ph5t(Nxafxgzg)_@q4azO!=f+=fhMOL^(lYx499 z*X6=1H|6#_Hs!tVJTDKvo@H(EY%`nH0pbIB1w*A}yFU)JQis7Tli5z|sgMz_Bt;t5HxgD@V zgLSR_8_}`*Cju9wod`Kbi3=R@BCM6yC*FiJC$$h{ya7w|Sb7D~d@g6s@5*?!C*Sz` zld`?FW3%S`_P~~e>GBz(`vE1qp-rRBu)*`v&I1ea{MM9P;aKD9Yt{oUVssX&@0-r< z(M|~`Pj1*uqP_ivRrGm4C@OEFA}OyymFKV%0S}=wfS0}_YN!VXny*jH(BB8`VO&-&;)F6@S zr;FNdZZfrG!^S2&F2ag_(pk*{7NLDc*ud$8jbUD5>kRJ5A0 zX4u3`UdHRS06HCV)9^{yo+)iQ5XP;Vw#}5`Uc9F-bIYLOv8o*I`a~+@9?s_M-q7Uv zr2%C3urtdCuG!rPU>iN8laP`Js5K*Zta0%MKUwXqzh39b?lE6Kg)18W5GQm;usN&9 zYbFx>Oq_IsV3c<_aC(6b!U$-#C*UV7L{GCabuHwyXS*0}!n^`84nJGQiVQ~H5nwhy zlFjXbeBz@I$Pa!02jrm#?~*5;d0l?_*S;X1|MREh%Ed$LPNRV#OORV=@^Pn4Uo)9&v2|I9NxwBO;s9b5J9lE5%fXVEf#D49`(&6v4B7EemLC1 z7D0k(M}Ocp%`H-(`HPB$b)R(3tFB!GL>llHnOb}4>CwbyG^z}DoYF}+PH-DL6G=$9 zFW6I5HDmTH?O$nY=(;}HD&0UPZDGEjTd&1_C2$EI>}U)>WBz>ic-;5UU2VnlivN;c z!Y6^h^F#6)O#fwI4axY06R@$6>Kw2n3n=%jNiPo{d9Av%2wH6xRn>VW#>M$jHyGIZ z@p7w5jXv>-gYOhIz=~hGL{+9vL_}a=iY3(1-l*`W+BQ5dNz{8DCg!yn8MH#&J zti3#V$}%A_Gj|Q52{cS;_#1K)8k;S1$HVSC=9`apl&t|-Sjd1`(R^d`E+arxq+aah z#Mg!p8l;n@t)+U2HA5NH79sY@1c&?ZXU#xL2QGv~MN5lZipUuNaV-aL6Ei_9s7^8W zhgQ!{C}5<0avW8VwRz zKXuC-25{m~I|4KuacwK0>#5xppAGlu@xu3MFAPRndhEUO^-XgN5cwch%}mqpqp|k6 z4mzXtcxyER)y>{vhsYts0*qE$l#Ac#YMdz;WbeWxdc8;67gONzIs$0Nl`GoNbn<^G zaFJChDTpHI1LFZs?W`O^HHaIC$-88{qjKD`>POnsd~VL#of8B3#E0J{KlY>FC2zU= zoc!6JKPf-^OP`Z3Kl-997us)MGkMj~6WOpfaJfhRwN9!8B^BiB6bJ|3G)gwKL-o>U zM&aaycE3=b>+9(N`&3vU(g@Dt8ryo5}!I1n55dfLQvY~?jLU)t{-FdwZg`D_7rxr8S*+L`^k(kHXX2rX~)dXTWd!KMf zWy4b<1P49*b)0()e+~Ja`-@guO|ZQQ$)uj_4$jPVryUmi3}KvopsJYK>8dh`n;<{+ zi?&+?VBqQyEFf&(Jf8Zof_$~V090@uHYpfHlBN4VPH5p_>J5nixeMJMFaE503u|Z- zXX|lu_J+4bbQ&nuzn?g9!YYBTT)ZNa!<{KZxAhREI70>lEwT;?z-!g z{DXh+SLC_pUzPvypZ^Ex^~SQYx@vPJ)cEY%3^mO#)Sz^=ve zWbyg*OGV(P0VEmhjmoxU7tC8kg^5Hvp{4Ba-;{T~`ysh}abGUIwkQ4JD1z3W2?&GM zWiJvNf>yF%kaR4`p_nb+20S}PY<-4;)X`q6XqpZAYK>SyB4(Tj@^pek#h_ioq~ucZ z3I(F#Bh-DP<_HGA`gSeCgsi%7#Xg1$D;79%VLXW@W;_K{Ajg z^HAFyY9ZzU`k2$mZD}*u<@{*#yZZEZttirDke;^hIYt zxpH$V-+cPAyzt7N%qA20z=!UTx7~AAb~ZQU`DZW5*S~l{zV*aaS+0!b((8LNTh8TZ zeFBiXi7~K8H1pZd1Itr9K^gIe2WysL z3UBv%H3=rk6Y+PnEapII;Ul75w|s*ZgNJDDtR_X^vl+l{t`-ST*$yYxo%*}%IORIn zHh>o8NRR4_a2z&Sks09V$OXt_=+698GGX#@1;AlY>B~ARRqr&H+wMFmN7F-j=IQ5T zds72MS|eX_06bQKI64aibgFEx+M#fwSjP$7R!I_trA()cY@#_2Qu|qGi?+43o@}33 zmCJA3lEeL_jI?4u9k`M3(xK+I9VN9li@9IWBT4;m^6F=drq!wFGXX7ePG|KE2XgVX zi}Hz2y+i)d|KW$^SAXTV<%?f;oCB-J5Eh*#jD-z}d9|m`o-*Bi`QlYM zI-JN*gI*?+L%?O*vW`z6z7lt2>_9hDaqA+E-wz}!3CU(hwRj2z@`if5zonVfwBn!n;o@io?|>VvV%sz1hp%kjp6CVglyTLW=Zx#!MZ`Qg9zKKX&~ z`VN`NOn&=wUy@(@&9BRI-?}WlMPF9NS}p9YoV5}-O0jd+*1W#JgcVuOWKd#j^JhmUpstS+wc2+OwM`x^ESDav16Tecb)C7mA!fV z4y}}K>=N3)CaP>SADQa5De0gNEaMo+WiVRKxBe7+4#=t8h!*>`&x$0~kTYqwb1PZ*o9utK1ybU?~Q>%bx=pUUr2_coK2tb3=;Za}eR=PY8tmQ$6G(_E(` zNT*1qDqq{t-S8`bw{7=1xSM`61b^w+Gk8_!>i3G%Sld{SfM6@#D>{W0wSgf2e;q`s zVfUQzr6^+pgkD7AM^2gO2_RDPg)Co`>N*bS)a`)YCX^y>h`@0eJ?x?=!OX0MwmX zDVvkT8UO{Vpc;V+CwbSI!D6uq$mGhJ3>*8MtpUD1oE8My*r`()r+z-_@N;Fda6>Dz zI@pQZwo>SV6c(%X2YS8^eP-`Xb(-`=Mk5zcmMDTC#6m1XUC(c2b;Ywgktqwn7sVb zMfu5}{T2D#=e{n}BW)EkHV3X{_S#$`pdC2=3d2~^Y7$Rn(1W*kdGV1eb zAwx_2r)-7eC>@jxD3JMPPQRutqUUCm6?pC`t(73ewCx3%QoTjJQYR zu0Vn5b1=;i{k1 zP38Q_Y9$1U^BGH$GzKCY1jyvmUv0gu{`q#$)UF%P z>lHo1nQWgJSu3pT*A8VdAGYTm7t9uGX<)GOCTy>Pxr0xrs=qPoF%O7Z1bUD;vIjd*G`}bz8K+-w0a^(cWrBy`0UP)l z_ooTV=(JNbgutP{sLo->^?rX#y-^IHf7gnFkl*e=)(V=1%(U8JZ7Fx&zb+5Idq*C8 z=NZ{Py)Kt;&g8ilF3ZimiD=5s18+Yo=WpAU;dCjlynbCSTsV@?{>r!H(&Yo`F9))* zy(-f^otE5_y;}#eveuWatyOvBjazbbvnQ)M+eaNAOU0f%tfHJp>F~^i6MuA%BbBGJ z{BZC%g-aqym4mkBbW^8!1Ft`L8sALOLoDSitR1kr?wT6Oqb934mPbWyQ>m+{@KOE`QTm)5g-wF~J0%HU^w1|BRI z1jz!@%@)kp^^v^vGXNGs0$JS?e3P{R(au_1eku+fjh1rPJtyVD<;!y6mCLfWu_5!R z;@Eh9lL-!Nn(lmb!UCu%l*{r^((6#D54HBubwvZF2c5J@j)yvo9 z=xF9Miz4B#(bJJo>9m3QQg~Fn&RH)l8fw#B%UOh=I`dJZO@k;nkp$-iyv&$4&o^yB zpr+tEqSdZ5x3z@Z1W~NNf`FvI;+)fFrvPQ^5UZBhOw*Nc+tlH^v|yV>?Sa6NxJNk( zDWR^L5uH3;x*5DdZk#qie60N}Cz^r9+6?cMHtCEed5W(RaAi-%x?$5rmT<`bvXR)< z_m_Le^hdVNW`_jpn=gt_s{tSro0ChO(*;nvp0eGU3w3kD6g)mK@ z0=`@zgUY=nZp;|+Zg!DO60PPmIArZF`&0Rj_q|2__TTs}`M~?`lgA%_PX665{i%H6 zi{Fy{>msY;vB?H)LuuVHL#U!9J=&LfVrlJr?meADl8UMGLQMXD@(Cm+>e5)qKeXod z%#TM=RO%IV>P8A+7G-i{j z%~4fZJ{*r_ys|38ksh4NY7Y?2W{#!2f{3MO$A)fRheBliQ?2GIX(e~K0_CuSBJsJd zPc&wa<=EDx5)pV{JMVIZxsG(V1{gpNm(84S&nidoV+H&xS+J6C;X8B)Nj?TU&-f%T zI0N~_`=pmxPP4Jv^=S}^)^&on<+$E2Ur5mx9u`U0d{M|yTm~^G*t0B)D!2qp*ZR|) zgvomA%(5;yU0RQIE+lzr>vpZj^!gHG0Sc#Q@-}=exEk;r@K9IdvX8CVoe01&4Ww!V zO(5cqWI((hRlS8}5|4FAqS1MAz4D{g*=G=Xbz{9#Ema5|%!b3IqT1Z@W8k+_A_^tx z8(W4gH(P6*#`I}EBrbu56E~f%aJEy=*TwheF@-ZE4GR)N2HX%WZPa-g zB3)p194OVEB-`hq5c3kL7IRfl$nk4Y0I8|tYl+Rm)5ch5S|Q(yGLy4}kp|df%^{%S z7<5M;jFguAjrKc{bFeMD9er)#C{Q1P4)yMNJ2A~r@YWt&7Ebip0X-f}Lj_G7a9*FG z6|XV^Y%p%4blKV~TN^XSHri@V+ZO2Xa}82>+aG#jsyaC)fp}{g;E&A50@>!oxBkq< z#NMyDd!gFP=JM&pu4V=ha;>~4!viyg5HJjj*l8|{7TeiHra#NE=%0x|g6(Gwm`u<} z{aVrX$($iEY;rW#Y(J61!+kk@+q(SFr#~To=db>N%$G;^CsP{p1g@LBdxra%kr2mDUFLDd?8 zf^mL>q|wAK%?$w<7-6@{JAqz);~wF`563S_&Z6Topq0FA6t$*yI_dE~@N8yWzZs8( z1deJ;cHY0))A@DdF`KNXN=Cp{u|j^AXSjG`1={?yx`{T0Csfi<8eZL%StBs zrgBKzg=$rRzRwIIIg;=BzDMLczw;yV-~Y3plE=UHlI)&5AxB4(XtRMV$l_zWHL_@P zSSuNA#wX>BmAw9ptk; zDB5`h$0GpMowJ!(t#ERRonxMIB-5~tiq~Usddkh_Jz=bd{`a<1I1dDJ<27wHXF*+c zUML-Di$$$=&}xB+Z0s)Op0{nvL+?5%_djx4Hck%Y+O;Ej?d4nY#+3t^PnPoF+fK{9 z_wC5$ctyVWr3>=;KX^f&ee$~WmpV^q#VP`46RkK9*}tU$BduB*M#Z?!_VG4xwQo+7 z9t3jk_GBCwzm7Z5@FSl)1zFJ!@+J#Cy0Echj#hIn3&YM~S%zREUEf7%I1ror(M*(J zA#^orE zi#ZgZk%|bJMe>-A%o{y0;s_Z_GRDumsx&+p=gV#?P1)eV7j!jjM^^;W8_wkRJ2z!E zS;z~|UYCKkbRMeX9<6Juk3J`YrtLvEC09@80Mqcvpjcz57L-QS0!mR_ezX4_L9(THuH_;SMqsdIUDB z>!Hvkk&pygWQlpvev$x+Ky|-u$66m@z_8VL{#bWyjH7vBT#fJc3C}ldQEs&(Bf5ru zpa4aSQK85DKHTA^E=G#j-b8pDZJX>p$e;tqv>jN`#u@Yon;0A6`Z;7^3etGa(9;E< zYvUSwBLhT*X~4@BgN*$^t_sc{K8j3=>B{k%UFLzM2vFr~@vNQTB~b^3D&nz7-K5+l z`!W3mOg5B+TE`C>sG~xqvEu_Mfl4q{mi1P&aj${Ma6FWW1|^0Q`QA@HEdQGy`$4(w zj&1qP-~GJ&hhO*;dG^_BGVHCGjjur@t&;RvWWigJ34wj#jvd7t6*R62*`hVSM%gAz z>yRrh%e(Wq`K0hEvd++=I%HWo%{d^?;v~P`{OYly3KKVp)u2(l#=5s?1Jf(p@ULHQ zKABh&w|;)Sx+debH5m+IB*bE7Rh>GP!77Ln1M}>j(nGPWFw)ux5o0ZRhe$lImH$C44h^?|RqOOxXk2g@jAt)5XHtDn3eJ zu)ov%B06Jet#%jbL0BL0PI4fxqm^0>?O!oah`}mpgj`QW$C)5f-+&lV*%OI!aL^Gy zrQ{7vR~afeZ2EE{sfen50Ii~Eopv?>?m^hLl;|0r!X6n8BwQf`@f|W93a!S?Ahg!{MC9xugR(=e`8wNdiI0sMcu4 zMUsSVV)mSLAl}KOAP+2h^kQG39L*6L>y6_2hOPk0QnWy^Vl%M86qwHA=YeB!Ut}x# z8K{BpL-YU)>N{9Gb^!)c(xGNyF3ku*P(d@*G#f&ps)NQDKu%w95~t83diL8z8?D$& z@Ly(M5e=n(mNQZb)S&EH*WZ|}=>T`a%CM}_v0G+dMN(ze$o4}Fe`|rZ3!~8Z${_?K;zm0DbiM)ixd0E^fB8EWyQeDeEiia^>P&e&#=XPX31< z|7kfqn#n)@FaEat=wJV+jMwKfT};j4+t-1&T5fJ7=pJygR#GwSz)CKm9_;ab{t?=2 zn2}1sq0CC4z>GV+NO&Mj0MHTuZ^=(HBJ2pj-1k9j~l+dJljyQaY*9Y(Fep%^?} z)a}7&o82)K8Ltjxb!}|&V!AkzcfI>I`JV56pZwy_{l0wli_gl|&aMTAz{*CSTEUtQ zD6E49rRI?8!b@4sp6yhM9O3Y#BsN>;d^wlZ&AzPfjAZ}jp&aa~b5R2*I2XPaz*iR^ zR-mdX@*CG4$dbm>{XEg?90H72%+#uI?zD?hFG_g7#KEm&n0uoC z)R~|er_d?d7DoA8_4>+iRVFt^^3AX8$?yEqi}K6=->2k@fAF%%(M%qB=#0GcfpapM zOyocP;q&tAzxGXe<-#@j(1&l6zxHE~$j3ibPZgS2ST z;*S8E1@;7jejKQ@XmiL&IBMI@IyIjpj6cHDsi(0g>d2aFfJ$uc%G_|LV$p>xrY?_c zEGPcOXAM8)th1o;tRN~ID``KSw6J$@u5MSDUJFG7ac6swcpJDJxG{JJB$WD>99>b3 z2VI)Z;S7M|%9TRx6zz0nRUm0dGp?#Y6V_iwYKs9faFPjO@wW8;_~+aCdI-ALURb`7 zB_AzpNV@dY8Fm=U&m8H%HRQ;^&rmf9X*b-`^ zc_dmcU%n~_w+>}{b5mBvtKO2a$U6Dd?bq1rV$^3V^Dd$#;gXE&GKqP1yBilhJ%d!fc5uScH+!$N9N+_}dj7aHo7qyN=Hg z3I{#{3XlSC`@Nyh>9eqZ)9LQ7rF@Rx6CEUeXB(Jo18f6mh7w$~pwOy?G&nTSS=8LYN-Aw}e&NHAy$xn48q3>(CsD~8zQgpL#wF|b!d^8$ z1(=mSK!U|ZSV@_d-YR(wuc5+bV+R9q@;LV{kY z&Owj#wfiTniXAi_Al7kC$ioCR4!TUjF*(AAo&KZRhpN10Upt8~67lUh6pw(%^BF*X zY~zI7YHS{SgNh>Z8v~p|1o8$TRd7c<~p`umLkB=mS8(dF!UsfYR)fn9!$G zR)QyTZt~huF3yf;Hvck%B82f`HuqL<=4hHXf{?4c8sJF+#c8<}8u+}?7AkX!{2L?4 z0*vaQidh)?UUeww&x7b6jX5dy+?)x4GYmnbN)!OyGP>ybD}yKKAFZJp`f7nBXfU8$ zMVslG&O1~!6ttb0n|M%Eja1!o-6!bE$&)J9sD%Q8N-5N`5~+;gT)QQx#hrCHWH{vv zupwL3+SDzrQfs*!$l7=$v!j9h)@L7;Yd5dSKlw+0TmH+x_csl&{K7B(sZ5W=+Dci* zAf8FVA44Xb1Fg~io7LSUj6t+qN=;dwl|fFK+Hg(=A@O?>?Szp+nw&VO$selw+uk7? zFDM^8n~(+T;%AMZK+egj5^D}s=N@tJin1osWXq%)HXN$-y5aNmc_gGGLk~flq8rb^ za6p-Xq2?JoL4Dd+WmqKNyaxr4}(A8 z2vU7h$qA@p?43I|l6w5VS>g#m3wazMl`4l;SJve6rOPt0%Au7i zd$-D=%EVU#bEs7;qk)W9$7WpaA0Eot^Xu}1fAwSXjmKV=|M>HNEZaM~X56@})^=|s z2jNf;M;v#W=>`C5W*@ctGp8oxsPm4$t{2b@$C->b`m(t@lKs6yIXuv(A2t}O*3#mE z3Z~YXqcp!u%f2QGese%No#I6Iktk3yB1&VDl`2~qEk`YOq%E;Um7bbG zIG0mrHe_>WEQfms9stWh_pl*4>qn9;^l9=C0*5ijE$l8gq=Wtlclry}$hkyu;oYp% zNNgC=E8gH|4xT66QCmexH-sE9gx-CV*_%Jh`yr>Y?QrGmIcAPEhY^-E!3Wvus?dO0y&Y1U)mklU z%WyUf5OicgCYz~R7%Y`z>MUf5#(t-5gZnHz%TWir2VGco{5)iJ5NqOaOFNFU4J>7^ z0kQWc3tn2VcN>mDP`U{-&EnM+j02 zsl@t}1mmj!9oMF7`#8tSh0mRzeeb-(P@A34PE=S`z{@tETifW4ma?`rl&zgLx$yeF zbwDs&6IUap+*Fh{`@xoXbodm*0$ho*-Z<}b2;J1h+YHVz7%5zU& zke~h6pOwG%_dX%dJ@c9@-nb<@%N4mc-+~JF>mK zEjMo7kjc@JCotqJVYI75@UxOlEeO~$Lh4el26r1jrFCO$CMX~z%tz=AK%LVvF+)w1YPlH``x99O%0Cj;FRHhGUbyr1HsGp84}$}!Os3`co4IXfeH z0vE?#gG;zIU+pR?dY}_Z2av4;%#LfM-Y#c*RuFS5I+8afJKC8;=G4t#2Vn~;UO|#j zd3-CurxKp(nMyNNP`R0{fl4is8OW2dwOFEOR1QU3+Wxq2T|GN@uu6{NS%Du0ku;I)|Ji})zi7VbsReott zpxQ6rRTK(Y)wFGAn>&lcTA2EfG24qH z8!!We)ddQ+2<%P|+*W+ns<_e?W;(6TKnQFV2BjzF(JUnQmq-Xs|C`$-HFc^Ior*;} zRA=}-PA+A76*s^)M&YQUwd8+plSo}&{Ef$CLedRYC{_Lz#sMI>h4U>^w-(2#?5Q#~ z&LN^mm9fA=v*uecVt{kIhA%eWI?w}@A0lb-H>bl2Z5Gh2jA*c9W^EV%k8FIqxMwi= zUZJI198|P|u;GERDTv@z)-5=y6eVXGL9zP1g30Xu0B9g+3@{C0mZ8UNL7T#Y1q2oW zXM=-^5*EohA(-KKWCvX%T0)t*N#lJm{drn+qoX5P%%?${P{ORp5I&B~wM-rYQzgMvsX)-P84bx0 zSY&nHvrN|MB-$4^YE9y2!OuX_1+SNdX1j-Ye`TMC!v{ab#`t+;Pp5Wmh;&=vj0%jw znDG%R8i-6%PdPSPHD@+gjkJ5liVqG&yA!f-jK>ghuPTtturp_F2p#Wv5r2K_3*_ZhWpH+O19}9wGm{-DtU*T* zSqj=Z)>pr>^c&GOdGlz9VClBC}lwiHDSqDl;or8-h%8Am2r_Fal|rx}HCO86e(%qTN9bW)xX_$i%S6x9bC8m90) z-`?7>;Lz1KuDEO%ulO}A7&Pz-!hyF3)u7O5r0t|eva&w5-zT$)j8+!%nZNQ884kws z*e2KxbQQu~Ny7r?7be&5xu4CpvJID0)0H!6g1Kx7Q0v%ut2$UY0u zAu#DP<@BHaP08)XjazctT_GY@oHD^I)E3}lsVTd3gLe5C% zEKXD+Ly#~qfHJoXW0tMGt-V5J2HCFuJ%2CRhm1hq&eG*wEac~k#u`|dKNo@&ZEVPO z33$&aGjo}$-3$zrCFg`jm0|KA*;RA5rl13O=egC*_CFw(q<)3#eXTw9)T77 z)hi0z>8nm2b1<00#}jnaAf8O;mK36Q9m}d5T^q?a|KdP?LM$vJ|~~$!P;sR-UOzmAe?04B}i+l`D=7XW0Zn zTVvD>&U$t_HF~{xvDJT3Rd0J(z5QD`6MGsuGDQ^<3HaXW6fL?deb3U0v-Z6<5jey4 z2e=BQ`%zhupU=4>lnjJcr!*U?vUqDv`V8aMzTEMald^ScT_)3s$-Q*8gUxPa+z-K-|S?J|EWDB(<}Iwx@~X}DjmxqGn|uRA0Q%u_d*t%oQ5w5TMFk~;#6R( z+VafSkLw3&EqOr-u%4Z<0_1x672IyDS#$100?!6!D0rINV{I{WPe2E$t&U--)X;HV z$e>J6%Sswx*5IlFCZ4R+;Q6=~T6i%wCW|~VNuEV$%&4HXt4Axm;Yx01QBpkngMKS+$= zm#n!KiKz*%;`xDV>}SmV3L74?hwMu`gp9m8P~=cP^O<+cfAbH2RIXpSDgXR`{u%k5 z&pl>y(?)$y7S(Fotg5x@#Hb>1}r@JjK3(QvU#Y(lKA;U#xM zy7+Uss}-7u2ZyEu4O?0#C;cA29YCGv_5*v;{SlyzK>O*V2(vx>M?p1NdW2`^UCMoB zL6 z#idV>5S!JOB#Qi819LU}2uw-Xoa~uwiyhYnvWp9~{$%WRCqW-YVktOC-yp$HTi0`% zLdlrId>o5H@D(({G?EX17`;n3Jsf zjOM~=m$-!13rbJ_Xw8V=zx(G1wDA_h*on-`0zLTzv0rFcLYW4U>EPfz93g~XxP(8s zCqECyhJga7X-BGt5()f0jyT-F?sojN(`b_6>|vCB*(-?L$AC>5#pJRW#Xp zEpxSmS7IW{T1q;E12-QXMkqtx+8TfKXpNQ^iE|`_rhswK4IOzKmp}`=itc6<8uXEh z)PKOM)e@!73P2AI5df|V%wbciB~`kKqqTvp3dW!+-+*`+rNm>yz)0`QpHCs}5id9%zM#X0O*^OLZED00m8x3`#-43LJxw z6UkQgWoB9@=0`Kra<*i^n}l^5_Q<@&D^RkrzX%T4rSm*HE#lzNKn7zDlaIgGfsm#K zAjZq=+(hnsfgAgs0^*RV#;S}UNUo-=$e>aih)i*h%!X8!e$$$*R$>W24vvg!Uq@bL zHY#)9s@ysO6!cW;XyV(rZ|-Xvvn231;I*twcvK8IZ`QtNyEHo65aK1O;nau#bjsL7 z{2}v+Pw`{wLJF`Y|KojD@dyXwabvmK9I#%6j?9aNj1JvL*YR@=nV^AQb?91#Z8;RP zM}4Cdea+71LC2XufQ)<}P_K@o%?))}t;^LbI&^v>?wnjR&)ELWsq~j)cbH`+esE?I5zd`Fb+wWNnB5>W*90am zGSL;SUMMr!zaqmLLHB51rhoQeP+S@T+V~k+etPSn&XQAoJ<}F|LwWhd*W~WEoR!se zk?oz;nD3_se>d~89A3ayeg}T_W;EEewGsHRI1H$~cCpI8~NuYENt``I^z7E)7&MljlwUn(BLpgif zhB?QyRUuk$;vcYQ1<_qdBFD?~2g*J$NtQy4aS6Q!xlW0c`baj;lQX`t?Qs^ssPzZl zJ9oHUzjh@1`%^i0`;JvdX$w@HVF`Xn2MNh0=L@ETNbIcCSIY3Mz`i-Aj6^+w&1VVC zWj>wRMKz%FGe7=YvOe6F2OqjmmWu<~++C5)6GItosGbqi`SiD-}Akh@O@9&2&gRNNhYU0zhCCQPP zj#$D}RGrAUnkyc%l@V|kCGGLgp!d?(MUQZ@*S5gv9e9}oPI%Tg^OIq(`7v^TB1nYf zlagK;T*AIIwrPBs95+Eh?Ptkng=CWKTF}S{o_|?YXOO&hR?*%!?}|BVY50I~qdGsu zkK;nfkTz*00zK*IcAhk>V{M;t`0-SbuLua`y7l|Q>~{|uAIPUZ^^pAIfAH63@7BKj zzkdAZ(c#PFHTe#-NpmRIoc;KsEJDGQT#qK~eHW=Ni4&y$`_EVwVw z--F~C<^j@qaXYWZCcXh~UUaax6H&%RQW%o|i##5Vbu%Ci8B{(r+=KlA$v+v{?a&vv zk1$0g9agfR%T}tIp+s7&j%673AM}dAK?cAx`#5+biX zm2N2Y)OLwtT$9P%LH8U0>heIf_oh7}eP5f?#k;MK2g@yaM|*;ONFQH&y`pd8pN0n^ zXE;b#G==?ZXgK#03u0eR$#xg#rJEB=(vom}pMS_t3x$(9s*o`@HesO|;;hKZ$yP(I z>m4b_(qUL90%O9f5GYff`wF&vLqfq<6!XErHkC;V5JT5ImaBrfDoONEc@ZR`b*6!k z#%;BbbEUuz(wfbX@)T>Nz*rqLI}hXfz+3G2H-%cD3q;m{ArNS0M1n{{NFmc|`6j1` zy`_zJBbrJ$j~xgs5?XK5Zke@S5iAS`_X)(AQFV&af@X|Nr$^RWM1wV2I=s-KcQ$x% z76F`@%r$Fds^CC>_iWSo+}qk%?{@2l8b90bIyf(WSA#^~JB`2T=VyBTh4rs>N1iG_ zWK+}R#ipFF1d2aTaRC5oW;*7%VPE{2Z59Kn7Rb@yvkH9kO{W+xD3F44YK0oIsX4oH zP>x3^z&PyewF((P=iKm6f*uxs;aE-b4PhKa06IWhdmmKl4q3-HN`a?Ck`<6B6Gcn3xr`f_; z5ryHobS7@#2Ct)iS@2C7A&ry2g6L3or4-6wDhi1Yl2g-9yUGe7{Gk#m{!x3&Yr(mo zPzSpEXUQPUOeVDTg7dCpxF9pm_@W)M z3BZman{1s@-|e; z>smRaLEvFeMneq<4P`X!Tjh|>D6_%Ti>2JUwI_Gny(2&H{U4Uk{pOeC4}RzCvc0_{ zlc^^lB)ILgg3Vwo1A3|~0Wl(*5XQ(cqbCo{=~a!G?USoA9*f+(b|^A;$D+MEL_!(z z_?-=Q$Zi-01$-H6fbH$FNn3TTJnPJS^0`fpGeX0_;7?vJ$4hct&h_wlaQazw@@as7 zZDmcKe)GLlCL}%s1xFHl0&yZ86_P?}c z1x#_?jz5r4gll*)PZ?hB@F>S!uL+2h;tY<+yCc|>*Gwq~o`4=gWl=n1=y~6oNR-OJ zdhJij4WdPMXK=P;$`@+R4r3aJ%`=3o4F?(GkVhl}$^iyrCfng*#}P@--AKory^m)? zRk3#kyu!i2!EDSG(4VJ@_oj1M9gk(cKa|J5c2N#zA~QLZ^^LLgdjq+8^+;ygo~@_B z^Q?m%lwt*;&_rcBqmPq`>NmTk; zrFomSq3S8eE1@tNE^vB>jcL{L)E&a#jZCIkL(aM@ya#FpZL7{y`tN0Cd&pTElHqc4 zyxy0SXI5o(eIS=EUX#_;6<1#RY>@`94o+0BBS8;{L%zfI zL?Tlgz(A#jo|(=PTUlF`*I&CTKlhWLm3Ke#ZaH~+OBVg9tZ$8FV|yfPn|&FMbv8-Q z@W16YSW=kU0E&6St{+5@=-^0pHn(Kh*Y>XMY~8ZQASbKkX{sNf)5Hsf#>j0<^vv^Y zfRRDRv~TJBha4)Ky>wQo`jYUK+yLtVJk@nZmISZYi$^_xU-F&w7}yGHN_(La)v#~r z_swd*nopKK2+|=&ON~8Ql|jw^0AIc-<4lEbSSIvx4&jWl?hfD&x` z=Gmz;MJdU~KT!85HufM?cyuuTAWt#55*pNg^I409^?}dv?zE|L9gy1;Os61G25}>h zT5=oj^>wA=)!O=oyh^8W2lwPN!Iu_0*$MXBHID_CD&ff5froo(Z+~At@WHz*I5d); z{7*mei}J^R@{A06EA}yKGoN;8=0%Y2EuI*^W9d0R5;DkVzOsGo^SCf`7IT8YmlP-_ z+N`X6@F%cY(H{8FKi_c_mQ|VwftOi zp$dFi$7abAm~TCwo9tG+Gm<5h43oi9&;fBA;05FY{HUq7tzS&~85W1yoPQb&_lH!sfQRvlKvOcJ^2~> zGBi|Tw>oWciD&wUfXPb+1WYQqgFiHKg4fXcX5C(_4|sA;H|vf+O9z4V z=YiD#%4!`^Cy?2`()JzndqB7biGw*c<0dkH5T$d)SdQItDCk$ylnt__dBuLtVvohK zy(@05^=GCgvSaakNV$w;V%@POr(HfnzZdAU=o;Bz%QpB#dl)#>ub^+rY@{kLAr_?n zCTdEWrIlox8tWIWpNSa}^Y~|qz!XD#hhbrVTh#ka!NhwkgVX=a1aJYvsdw1D4j}) ztuu2*Nd8Vh5l-$BJnc!j!1vcMq#Ym^PW%+m=@<_10*HdWi9Pk-!{HIH7kCOo$DBcN z9?@DxgG9^OQdU;Bk8t&{R!{lg!TyWg@Uhe!KXMdaC-lyM(f1sr%& z1Aplg<7<;rY2#b037ZW=8{W#CY))DEoUPyERwB42T0MpnBRs(ckO8#gx6I@KZ-?WF zjIsoOovhAW10|-V5<*r>o-rF&a3V=(E!6&n4L%rjWK6hEH5>r=9*n`&Z?3#*5Ipn( z2rvg)LKdfi1sQ~ah@~WPD>Dj{kdqjiAO)znfExHSjtm*p_TK6xi{KDD;L-@nY~IT9 z@xMb}`ZHx-2vtU8GoVb?L8QHH@05d65rAbmo@ZX*w4o|WD8MAFd8%ywbNIk^b&-yC=8yHK??Z&wTo$a_jn3e(EQFS2owTt?zMmOJ^WL4oqN> zYBN+$9NQDlUJ-;ZoF3XMNyjOKTOhw!S7WzIZ{V zhjY2-p0hHY-<0j`b*uQ)qz-qubEa68!sOkp#2-9La>Z^;Z68Bc))utDo((hX98`dD zdFTZP*G`X+)7F{;#!P%D9fgS0_lxG+QB0M2GT(abpfXU95|)itHLYa2V5AuI2*{d%lk4I z4`lb$syXxk^P#bw=P7F%Hb$BSaO|*ntnM3)WeE9%)^qXuY%;avkU#(9$K=UJUzCr1 z^h2_+>Y}Brtq)~&Ya}ZheHpFvtZG=XKz}%pzP6nn;P^brPLs&4UA=BY?zgwLYz=Bl zy4?z~1->l@e_~2t&`g$!XGmW{;UPY3l`-DH0!d1RrI-T&J;HQwdWASb3?ZC*N$HWy z6yD4@XF_a{A&J9Fe))MK01#)EGCGpF(!48s!ItfW-N?S;JD0PW>_!eTR5rnuN;XE- zV5|=WUjdIcgByOL3Pb{TK`*5_Lj%x>fifY4?KSfMbfj56JZ1`#&6bwWd{^no--yeID7>=P01cnm>TJDutEW0hQn41x@FrAkaJs};>dyqkW>@zuJ zb9)IF)Evz^KkPlI6!sIhI>K9(m-qJ%<-WIV%m4Nt{g9kLyDR_lr+-yG`+HAFe?GST z*1$nG5Q?*RU5I4W!X8Cicq8^A_zU_SiHtZSbUlGB9=F9r-aIcvzB>C;Nh9Q2%{7q& zoPI}QMvB?SQQWHB!pp5+A^p|xCuQ*${JTh!FYJ>3!n{!h#+YeG(Y4OAP&b_-s}zzx}tS(Ske!axMD4SLQ_;zL^Cc zo8E0)*`_}2^N#W@rq}4V3gZ;W3mT*Ik2Df4T73w|4fW*qQWU8Y`frS4y0t?_P-iHjZ`W~6$k-4Wve)IYOKVud}e1{Xj zj63{Ze{-Db?Gt>SLbM}O=i)#E4pnZV_syl|gYhg72K<%57=&b>sQSB_D^W7JfE$d3 zIxb`wvl1gg7a3bwV$A2r!PT5&L~am(Rb0O%;@05JYMUBz=lobI39>nzRsdL;;o8z_ z3GmtsWC+`(RPk$&Xfm}Wjz$~uTfg%q`M1CDOY;7Ay;J_qkA1hS?aZuI)X3%$Ap;45 zF=#fj3jvCphf2X9=EEH1b{b?+?HjTRy~G!RTFUAPXG^N1ELUE51z3t5Dk05`1kf4v zFHVPiWbPHp#f6IcVl8ku`4-#@e#{IigxDC#^-$%RX#rz7LcCInLM~< zumnbdtlUhB%0bMqK1nSG+TmaTf=4V4yp5Dr3TbfY;P6mx+_)*j(a?w04*N3HR&v9> zIf6!GpE)!fdaF5WHyPPlhevbSJKUF#ec~bc(0d=2fBV1wmRx@0maMI>njr#Uo_=A> z60<}Q1RhF>`Qt{mIs>;%uBhNd1zP;f^wat|ZHu$ByDGP??a6H78EM9kOgrIu#g3MF z@9Xv11klAzR0BPBUu*HBKQ64I z*MfZWg{-WM<>rk;dFI*Y>7^2g)WkI-s^B-QYr_=i{GO z!=whywnnjWRRzb1Fd5j^xn4`FBwP%7qSI5fiJ=yJXdqczWlcg}YgnD+oV3Z&4yp7%i0iP1R$ZR9A*%_E%@URF)lKq}ub6Akb~4d{cs;Qmt_$ z;{HWU6~O8SUr1ADz=s^=WUZvJ&8i^ra@j_pp{`At)iH7YKKH7)guipPGoBsK?>LSE zn8z$63NTys52~d?##vRRngxAXD2~*M)wRB?Zit*Yzb;2dia!@J)&P;pL8~&NA(3cz z7U!PM7H)@*^9p(?>ogT@!#(g6`ZH6&9&KwAOK^e;a1B+Od4>?l3!k?$pZ4VDm3>*; z7|Y70R@`XB6}CCNqb0KngHb{ViBBWx6gpHjLT})ps$*-LRxcatoAQf4^Pl9@?rC}Z zTkn?ro7&EAAgkkn%}QF?7|LjMUh)`Oi>=KKzo)gu z1zR!w)PJ)Yra1sgwxRVy?x%y2gQw~Eqc%u!&Gi4kmqO=}E6S=R%oFjypwi9$gYN3N z2Cf~dDn;DDyL*#9%Rd!Qv(p+&LBJ8Z);|~fl!;pDas(3*+oBQXxafxH6wn6L+MV&=XUjaA)8 zJY~*OQy%qclx?yHN8duWFnl3}|2U8U76@mU~I=2^7rgb%{!=0s=&t>%JX zSbf5#NjREr3nUs~jmy;SNMb1cQr|h?)qRY_|GB^MB+1J~XAOSvD^`I8eD1(+>EGel z0eB!j+rV?KG^}7X>}>WN)c*Ud?|3*XmI^FO`HQ4?@L<)J;y4rKuU+B<*l$m%F(MNB z5~yW#lmQho0K)&1mnVWn_=sgo>_yCKTQh=~f z>YN{#)>}^SIfv-rAW^n@2*Sr6!aSNTVG{I^G)dJXS;eUkagP4TJfEr^>NG6%*tXbdX+Ie^!6Aq?S+7GNTk1_fh9| z2`*pI8ygRRY|0Rc`GsI(8|yBJiDxULjGU;cS79hQfP%A)$f5;9RLN3&U*NWNi2F^U z6SEaWrc#yS!E|0PFCJg;Ya7btg9#qS=p^nreyHR8!(>gs%eL0@)H>{_(_6}x!bnohkodj^5s8!QvT@ozb0GTJC=dQ0bp1+1v`B4=^O=sgb+#f zOowLAjn*64E!t(0^nH$sOl9Z9s!S$Fam7m=16j_L&Q~Ldd42S;nOlQO(sb{WL9eQRf^5~Xn3%TNc$*89b*JAPv?G zVF5lx|9q}8En^GLuFBrVnzN#poNQT1iBH3;(ddkl!-*preOYop+YP6)qxn|q2dIJ* ze3BVEybZcX0%-12oH?zRohfM$lWPJ)nsY5V^x0p5Q__Pg9Uuvv(-;?}A-v581@;2J zc`&H_j^Hw`lD>jQ(k6)S_B<)tn!46z_8oQ< zt*P_It+&(B&Fk}wTsTYXa-|oW)+zWL$8l3H zpmkm)7!-YjC1TD>&hNk>1dZGM+9U&DZrrP$1G^S&R6(DK_u$Y4AF^a9o0p!%-w(_P zK^or|%ekzqYFpEpY;1|V<-U{h+RK-uKhVn6p?_N2Y$on0Is)#p4C|07$?uej?azzE zOTw+RhZW>@oRGF)uamtC9hQKjvh{%_A)D~@n4dU164|?TC|kR$(${%J2yn1HgtMoF z9~54-POKz>sO&4J4FaRw0NL%ofwc=?-`JFkuiup4{FN`tCqDLJYbSZQKa;_5EaUM| zR#%6zvNn>HwSfhSMk@mujx~W~AOlMz8QAkHUeM>ddHuQ!heO%gSSJjR>QUH+buKj^ z8+I24y%$~MEbP~)$}hQ5wr>+?XYodX1#bw+SdIM@J?U$;X8SJd^B!z{ulB5*CM~1U5{EB&JG_F* zD(5meI1|0Qg0^P2<|`%Mjq$%N`*Ta=n>qtQpCf`o8efSK$p&_Fq+1mn3;UDB=udI}gDx6CAEkny` zpDKZp0Llx|7^%z_$5BHiM))jcFJc;_PgJ-mDBCJvf`J?uvvlQ!b-Yf07CSX zpKbk&xs3d4{5LyQfrg;xYyOlfPH58Nt3taKaoqAz;RGkMD~I>he%k3|5kO*%%e5v2IrIby2{8XJ)d6 zL6WRFTTo@;J@^BPM^gtk1u2!-&#pR;G2r4UIZ9xIN(%EN3dqB40!VSdq<@O2vEEP; zZKh@^WCmZQAd3@Az0#BTMT)87Ny~U|H{OABIZc~3Kxq+mfC(9J*n+&AEwVNW2VZaC z4Pi0TasD@i7qIG~cl7e+CLo>wP-vI{nlhO@LeLlS5VahfxV zhX-4>prj}RPVWYILBmrF5dj`>6@{x1VX04v%;Cj(CCE$+c5 zTV4K48CgVu`4Ug#=Xb%uFsMx-oM^#0DbBw<9a6D3lqVp&5v;pTDG>Czl$Up_@F>uXH6LKy) zdsXF@XR>y9Fh1wKX~EC6JGhpCZ#oY?UO25$`O{{_gwn$XQ{a%D?nxJ*rT84{0|cAl z=rK?UX9`w={?_!I>9}Q(Mu6Ct6f4fQ8N^*c6-Z6+zWxD)LSs zt0#@)G5}{ln7=Mko^U)h^oO?i)b(rSkY)g1zkc0}0(JIi*1u*I_J=-aNS$#O9E$90 zGZgfib6@kp!I4OBE}!{1zS3L_3>Gid3ggTmQqij1CVh+B?9(!6=dP8~mk$dIp^^3B( zvnt!W>+T$3c@e(T=4=8tB>ytD%*pR%Xp}UpK#sFOfb!6N=0;)c3G$5qSXN3!Aega9 zI$WA9rE0$nZnb|WB-9D`Mj*?wLtEUHaS|{M_1De}(cG&tB#>~EPGE}7B5NB#VV8x~ z{=|=h+7S?qQAv0@cQa6gEcz0f8Qe~pkj|Z2qdyi!xec3@Vdahi$7fF0Udf>`;r>u7 zi+k4MP@ThmE#0HJ{cUAMoec|_Oph!O;u)@W&LyZlc;OovPJW6{+fcoW#Lt@fLsmD`NXCWb}i>~(|JMv(+rRa89_-ojnf#g z3nr>1=ag(~?DrE-a zgOm~3#wO$<;e@m)aG-qR$;+|-(77oDqP+`}qks)nzF2mCUnYk>H)3mdO%^?!OjLaC zs)2*|aI^$Xg>HcpKJD$yJcmM!HNw#stv>aewu97PwsyAV_kR6RIk>WvkACPqaD~gP|L^8W>WR-n-?t!rJOuIFpsfqunl_ zR|v<-8?QDZSuK@;<8t1(+=$ev*l+A@gBQU!IUktq0LX`GVwE}??YUF_Mv^3C3gMZY z^PI`65ZYmUyiDG3zcI_4({f(|)RTCUvfLDDfU! zbNLgjZ$@JJ(4D3H=&VThV-3LX(Dj|0VxCU9EDHap_M~=_-yK{F?`^=F1~&V((@e$Kg9xHEXnHjg_6l-S4h@nRE! z2_LzyhmsDmq7gW=k{B6^_Ny2OLY6Yq!T?L#CY^?0diQ+fL5FY-l#_(V1Ye7<&91o) z@t`y?vf+YEX2>ZG^-yrE=MLaUF6;BMxGaUGl41t(rXoV1nbFq>Y(&!u>XYGH0<>fh zz#d0xlUO)n*xn`?0G~x;81Ge1*>>pws7>l-_0>$G0PSf6z)#DSB<&(_TA8uZ5Ickq z2?~mk`_@)_y2|hgW}v4o$_VDjim!59I=v%9K)>T}Ayh&)B)}u3Vorso=RA(UXH;;T z@#3+1k>pNuW_8|~9z(4Gc+e(RQ)1LW)}D-^k|7e%_!Hq7{I^ zUIq|BoR!v?sx=f^zDUA5d9fv?qVoWj8JLC7Hosz&EiNBf4ana+R?nIawi4JGprH3b z4!D8GpXtfMYOAZyE{qf3{{r2f6}fa7S(vm8UxXOb3Mh$h&Uo8Ob>inCG{#!)QltFP zYZZG|rYSzcfPwk7h%6;b@<86po{JPu%AII8N#Y>q2E@HRi!U5Fa4I7pLOq_7Orl3~ zX2_(WjefNe0ECoCV+ICH{Ds!puu#VH^9rEY2w**>!z(wX9{T+*?2UPu?B@~&cM*x zNoq?uWS&_;lXtsX2P=7ggXDcd@IgkM6p+kk?0tcbfJ_OK^c#ivUhY{&fR%NhO65CYhgkB91VwL6>=CA?@@3jokd+dfd|)Df^)I1 zHonowL-M0k-~@XTPCVZg#}Vl?)1|Z!|JO3u6Quo9u9i4y6){MCpy1GAK5U06B+o! z?w>&!WCPcF5%m5N>4EAL|UXSBWh_oavCH#5p&; zVi5B=WOA{W&g{zG-jShNO%xfAN3yy$lohQevU!99Sy|C) zqP{1XM4(77Yi%eObDM3rx;mECm60VknBzH!%H|Abhav~SUI9sSTPf&OPDmzj4$|WQ zd_zFf(d;?sJ;zSgVEKd!y}?)!HcSy1 z{!`eeI(7J8a)vYxIOY?zYsO`u5QFB4mQzlIY)+&ZHfy!RO+gzU4D8b+rWQj~TdEEo z#QBkqHG3plr(&5H$K+eiNxQK{)G9O+%m}~W;eh2D*-CT0{E>;4VBkG++B`ek}x8q7A22jA)|A+CZi{C+y@<{@&mI zl-zOq3Hj+?`h9u)8y93{yp~-w@TA_BHkK0p>6F>-JSf?k6-M6f88c7mQCQWb|J3CZ zVNAw_G5@WCiSazi!^gB^>8ehWWzs9}VaGYoaz5t<*)>wI)NIvwD7r+fx!8@(6?7SK zxzh$6pqGjyz@LE?92)25rHHBgtqOD^c{`Ikk@y3;M9?Rcc_xO_EP&4I#kR4(=@Vp{ zbRUXUj!=>+I;+sbkqqjLizv00$7z>?z-v07#P49jMwU=pRuEq3n)J_50zkeG*T`jt z{7>13Hx*$a2;IB`fjNM%r~y-UtR$MkDmd{(nn-H3ZAGUN=%rd&)ll#b2cCl*Pf`p2 zd=eqwLZi_3SXAyh!}20f~(_QZgS0}AjU&* zB{$olC7dLgS;j&pf;DuJ0sy9LTL%C~!MIcm*-)?u@?rgrO~f~F@lx-ru3CcS3zRTJK%3Xb(yU_9Kb2g2}EGwXr+bM5V`lCsWdX%+!Uc8Gn4xyH(-(O z1?A)W0Uj=)l#zF2_rR%6YJ>qzFG_Wp_NTL@^o9fJEmq{$f9ntB>rXr>Kl#;PJL zmtY1#)zU>giwhZCpm`)3gdswY=?+~6azqAcY!rY4Fv`B|pdSLHJnS4_!0V-VLJwq% zzqnQqX3bxTy}>*hWB|uGcpu_$0;D6osztraLuEfZ4H4*s+(ANvIinV`zP={gyF0Rf zxNjNEtE;Q#{2A$tAq@!W_kp&TQyD(6fv9R&a-U?C7khgLvbnh;fBkQKQm(#nU4H&Q zd``A^c4`Q@1%r#0+&SWWYwdq*bGer_fhg!nsDMVPhx0b&xSom9`AoKUR^;&TP-Zi| zPG1%?rwPoJ>ISUimSF%Ezn0zvawd6fb^f*2fY%eOaQ29bbfPJe=*H)^6|}%cFf!3f!*z?v^vsehIgR5k_AEC+ ziu%y8ZPhXK2!eIBx9qln@msh%^frM@x6Ltxo^Ui#cG(J$^AQ+H9aAC%_KQ1ONG_2a z^lQ|5J*f>_i%i={?`!ig8lZ<%7-h0@Zq?7g8s$XIa1T`;m2;f2XbCzbRFyM7@d0eo z&~%=y>Z{U^&2^$xZzh{tBRQOEV4)`uzT>U(?6X(o>g9=yM`M{y(JG2*0bqt4yWoL# zGiU}#i6E~uD#uIO)ZxfchiB^7ILE}QWT%kg$mezF5xlEOLYSo$^1x_RH+?R0uzw^Q z+bgDHyd@9erF0zl_1Ug~BgZ+duv1BZc3o+s$LuGZnFgk|cemwBfBvLA`^;b7qH=VCoU^E=cc&su&14G_+PAi7T_Vdt^O;lfLFUrASXanw#4i9B>bHhHX?E}j} z2NLyR&^c?P!&824?tur@m4#RpDV3ZNp9$gY#|9mg8I`I3LV~2+EZYH<`q0^MkQYj zQDzj{4;>8tX&-~Waz=OeQPG>I%*hap>$ zx-?@$T}O9hab^_6=|nr!bhu}t4r4&FQzGfs{FdR@gMD1YOb`-223Wkoglv`KeyokK z$9}Yw)kN+3aD69%_;h{;7DLdF=Dnx$xp6?`IYTyQ`aW<663faX-55Y>=Tr+i;_0Z0 z%hxc^kL07{dyI<-}Lx{LpeL~#7~E9ukXLAZG*B-j*TaEgdKYpnp4I3z z{eU>XXu%si1`)|5Q80&eF*);HewR)L=0w7j>r$L)`Bd=P4BRA+FAIU9@9snG>TSD7 zO5>J(lb^`UC0{56B$7`9eWb4{Kd(u?=^G(G3e9GOAFy;B7hrH@IX!$DvA`LD1`~(4 zEo63aMcFIHk%{~igzW`Bp;mU)ezYpB3o}xHJuYCpgEQpMrf-h6n6@eRloOx0`il6W z77V^^uZf>ox3E%kUp*@AC`jo^IV3H}&_VejGO#L(fry2$W|I*?4oWzOQrIp!(SDq9 zSdHoUr@c@5OQ!|{rZBwoP(j7GUI3nSdLh`wVA)nwpNptW1#DoT@WyghCaFFM^tfgt zv@r{W8`l<|A;I1DJjEUSB?68hviv>36rKy<2!9W&%2sDmtc^-1_5c`!(kDR4um{YC z9`c1l{TFK!6vicj5SbAW)SI2ENRhj+CdsP5)1D#YAS;28(G;1=)~6I1r_E5jP$sAf zh~SZ_fVdX)i3eN4d4RJj^cQP{aO1SMl3DGZcCw^!{N%u^`RMgp2^(aPbOzTqZA1uw zQ+ujn(h9Qr%jLrFEH>yBk!8vlAmLsMK@~_j#$g*cwx{UKY;C+DgBd z-D7s-ndvXTa8rKnSASbhoY<8g`Sf?o=8ni@GL_+Y=nf?;6$v&_B3nT2e9P+0*$2MgGfG^!IY!I|NGs*@%t0Rh_yaDhF`Zj8BJ7+yFx zlF$u!E^x+eKH&UoOQDgmSrr^?g{WgKA1_8T3(u6;0!7#fIT@K%86V$onr#P80kEMtVw-BdqveY1z;lEnfP6$ zxXuJphtA1UyE326WO_7_mDLrWU!zVPn>nOa0R5~U@RkKZV>CEev$ziq4&}oieMmm= zo`>Woe&Xll#WZhjLUH!`v-8_dQJ-1GqO}!h-31(Cn_7~xL7AhNs9s&fDsaMgachEi%Di>^(%CE zd}&37W@-c1rBPy;p#D!C`&O;d7g=3hmq-8NaT)jf^0806L;8b>T)%ZqZoBuCtZk{c zf8kDjtN4xT5d>l4oU@%I$xt@H*ddpW@YH?f%-|mH?8qe%+I;a$Eq08TWG>vvSQvpv zETkJ;Omvx|v1D8Ec{nGbyQ!+0aU^(;GmpC}yQ=tzd|}L_^Rj5Lj0|$LkP!x~SVjyg zhbTB6Jkrg=EKC{rB5V#M!dh@qTgcfA5e@Y8Y`&1TmGi2hf%HcjEUNct#BybQWFvZE@%Yq8=2t<{taxE`>UW)8 zHC;?(Wlbwl7IOXiWx4CFQ*zfGXXVRZdP)X^RUaHaozb3BYP!)BHSlhFc}I(EGJL^X z{%r27N;wwq%eV9V%-l149zwqaT?R0Kf5G3-%OnPjmuLDyU#9zWSU`XXg90gu>OJGXC-2x=v;4gQz?6-WyMd3Wm&fNFwQ-@c|`XYn@Q7?(b`asrV}}N zZX|#G)1MF-&E@BR<cYM9c z^Zpr{3uiL2Dr?;@5tKrDFOS#zM+J3yASu^?08Fv8(;V5Yru#D~4_O7Ce3y_uJHbQ; z1twSuwl+tYwhgruE2-7!?QE%>)&hK!ZRKP!RoG)oPQJ#?5mH7wIABLA_sy{pmE4%~ z#RK~{emfv0?lgczx5@<}r5JP{Ld{)|ZIH9DZ(E58acw+IDs|a8hmbq0ZMIRRo%UkVMC?gcNujW$#uudIgWOw^ z|B~$fTxj4Vtby2#Ni3<|_pMqU`lYH8%X~)EzK%e0V%8KYgxCCMo?}#mVfJ`bLuWD) zVLQjmNc@XVLD&~7>daPHEieh!Ra43UJp8e)*Su z7Co^dL!q*96PDFFqnaX}jHuuVy2yP%S#uhu5Jqrla;6f1bP0kWh;(rIH57!QOdo(h z0AU8ntBM8u=xf9g(%;E2KvbPPRz;I|ow6M9H|CkDT7iSI2FIi`Eyai5J%07ig&9Gz5X2uPYEIzbYyI& zD#X~ZE)eJ+&S9(sECJ>c{G@Edn^8TfG)|c@lzHMk%(*olRSKpf5`>ex{^ zzQ1=Mr%rFmkNn7Al4rm9ynODrz9hRRc4Ri6m)whe$S(rz$G#^ImSyG!3mFx}Y!>hg zLUqT^T()*rW$)&pHp6K$-LX}1JhW$^7jn`Du@ndfCJM@L^oZlBtf#}=FUTmIKPqbq zY&DMjqCW({;0#z;3m=_5w3w;m(BI=NJ)Ng?=0ks=Exz<@=CZc7E-$=zS)P6ICHe42 zACR}*e_F0wzi926ZolW048~4>7F0qjSZYtvOfZlAsbS4QuQ~KS6?M@lbs{cfsGhem zmC500Jja>+&G{5dSPy;trNI~EI8Ry&J&_JQ_@_zFr~IYLC#!VN2zp!_v|LgMXO)EA z5lCcclQ6_1=TCP|z>yY#EEv9l53F)Y zE0u!Rv77mGDHF;{2JMg~!3k;wnA09fBMq%{(pIQ>jwN$L4z)i2lI6f1Y-7-WD_M)q z7_ypmGV7PD5Oex0`4Wy&bem`@VQH=40#cf2og7zBPmVixtKG5FJz7fPK|%M>OPy>s zvRMo02fZSY83DkwjRMNRF`aIe;13NTNN+0ZJAK)o+!9$%n_`QS^X{l(cAN=b%*97yb)nwV^Ax(@VdYU1F@v_TS|!ola4$^q+y)9foM z?o)>+jSpr2=EMRlqg8cOqK#1nvrNp=roxHLP&9Q~1}QH(b zbRG}o;OJ0#!=<&i)nt{q7ZOE54-#C_m85Khq~%Qb7!W%}V$KPb5o(gAQ?pCJ`|44+TF6C#Rf)^Ol~^E2F&2f#0WR z{`<6RkYvV5YZTPM=9SE$U==Bj3Y3NnNqt#{Th7v>Kso+ieu>tPlqLi@^xcUJo22k- z^VNt?Q~d6cL!2uI;H)(-;ZM*%HiG?#&hu3@ka!h%sKG|?yWwnux6%xacB;9YzML9q<%A)rHin$GiT9hbfevNa0}zz@skQ+ToF)Wv7w z=LTz2HKhB-A+tNS0@;8`PHERL255~!1hP$DXktbrA0a4NJ`l2kvW;0KAEiEkh(|F6 z$uIcXXhG7Uf` zz?;a9EEF%wXC)X;Wb|s!C~^nbmdTu#EMXPkCWqa2`a)Bwqsx}cx&d?fr}`b6$Ey)g zy6HfwoVqy|CZozwj@Zx|Buk5_bx_t5e{1$O6mUg->OGnL1A$Uc6t4#nFxf!a0e2K% zd+tIK2l-`FsS#0!GWCj{cy+;N+F=0#J_(rl3q8ki9_+kqwx?ArX!({EKs=Mkz%lxl zMq9WD4w-WyGEp+~!2mjX3?mSfD5U~N2tL_>ytrn%OMFefJXB9q`Dv=w6jUg`W7S({ z0$RwYE_7Pe08rj347h@bK8ABf)fR7M3U*{6m7sG2y#jR{#4G+mpff;4C%Xpxmzf3# z5+XJS02R)Id@T$acF?&}FPiS+1!Nc~DD*zy?i`*@7FHQ>@xs3R#^?S(PM+G3PksD5 zq(7d^bUO1kb9V4-JCspGN7Dcv2r$SN$-J~paM->ht zc^pb8=ScZ)_E=QW=&iAeMnO8RkN|QJASI>6{7Zb6!Nu4Er!Rn<*s(bGql~K}6AU@2QWBPRZ^33*39*7J>0A$y{XoyD{NuZ?Iyru;}*MP#T@DWq%weM~V$>-- zi~x~U3~4*L@ZupLq=5-_`s%-4R1Y0Zr}D9nJtPmm;~x2mfAcFcIqF-$Nn6-uuVG78 z%jj?s8!|V|xr4xb$gz&|CbQ~^q96}kkBH2dGuc=lS$mw>kygkI&0r}<4-sPq3oDR= zQr1Raq&#I_1%IFgMzli%1(Y{CuTNLYq$qQ!$J{}F-b|Q@r_|t&&UY|pT6n^|MTiH9 z%(3oj)dG7exAkw6X-~fR^{>m_XV1zx(wlxC%rgurgKY88B#u#`gFrdJt&VT}zGxAd{`u7L8LTEbmrkQ_=puU- zGCM_QR&FuAggkWSs=yxftH0kz6*%Ub%T(t5i7fg@vK&lgA&0UQojEd5PM7&&Dzk-F z4;;$T{6LOo`*L`AWOKgyqP(sSB@ObRg`~H!v{rJ9sVr@l%3KzUnat-Cnaz%5wmg*C z+`ms32Qpn8%3?Xq;1#ka9e+ke3S?~1COa|80mV8k%s?a;Az&XF!>IDF%2S_{*90(G zE)~$IvqGv0S=S)C2&U z$_>T{#+2M?q}sGOFF36`9RuHB%1 zz-!K@-HiL3%9PH@N^lMSrXV5qw&)*t5u9GM0a@pP8`fiNR5ADlwuOEnITQO&1s@^n z;3Tae9-1GRH;9}NB}G!&)IMZl8?{o;hi3Uua)pD%NmqH$lT?`*o`VS_eOt?z$gIe&F9SMGVvRT6wJcRB=683y)StGMUX}ZM!F* z`P2txxVn_z`0cOC)i(~U{i9<13J&>vYn_p1vrA(gKGPFBQRnP?SsiVXuk%nSzz8(} z3rC%%)F-pd>Yy)4qsoMGwLIR{*bcZ)5K~@;ZpNA5L)A1gDSd7!a zVT7K~(I((i@B?@V7#R96DU~oe2W~P?13yP%eUV8=9|zWpzz$}~y3a5CaR?rUF@f(D z=_aH}_zFL9rE)nOc&81PU~Iz!x&NY>=dv$`+(OgKWU_g5J}l&%MOnCFeC& zY1l{dp)FgVb%MqOVwFIm{^yD-M50>qVk9Hu?68S!yTP9gevkXZ#x=VY&q@KvWhU!J zLL6x?eg^*y2{{!wwJJu~_ux4S!T}<~k5p)@))!E+Qgumn+mg|WISj`Zw^KR_SC=EW z25(j-lpt}~_saW%!~?Jra=+uivJ@5>a!LIDIk-Jy8}rMv0?2WPH}HF!lZwm~2;_WU5{Nn0ooqVJ z4C}+K0Yr^ZFRBl6ZUY31U(wnTWGfuzj}qj0I=N>I)(Fl5oq1|{Ma6NIl$-9{0e!i{ zqF4~dUPk$`egZ)bm?72^YNS&V?GQ?l2B($hs(?BHX#CN)7t!(p5|xD?)dQdrYp+*8 z3Va3w*@033sN@f|-PK4P%AmIo4!i*7}C`C{IHIPR7_L z17=<&QmvaRqaHky0zABT{sfpSQx$?(cf4wAU10EXWHWnNex)RHRU>AX!3hN?W$fiVMo#M2RsNG-XooN-R0g$tpl=e}cu!Ssuuqjd^n)DqSJ7F9UoYEO3Xc%QVPo zr~Kjz-yaV&`K`bx&E`-LG5EloI>;oA`9uorQpS@J3CCpcxwWj>-jJOWyD~YN*tN&Q zk*_WEn%V1|Q4>aD(g%VegTCzTAIOQ5>+%Di`H(#R*tg_!pZ$t#pV+lPM(VLJj>_Rk z4%-a6>BW@>;IIPb;jcu=Ni*sA4hgD(lC_N$xq1Dj4Eif>+>%aX%cjY=MJ6YKa^)N*${rOK-sV+g zsM{7f5^CV7gAT!umGOo=_V}}MXL%l@s2ET$@F=F%JYWjGL{B5u>U!5_F zr?;c<>$PyNu)@MiVkvF>;A+_82tXl5? zHI#xZXH~-xoo)m8A^i=VBU5=^x|y@K(`@KqDaZGTs4}+-f)6-_6Dl~vA4E>LoAaZC z!OhOYI)g!-XWB#wKbw$YRbrL$IvP6U6Jt9akMfRy&q6N-52yQrmYo5msCs}M;lVe) zfB6jzo6*6Sj*aJy*@>293;r^>8gtDkX~u2%csKP%Qqirz$ zU@RCxdkqe#j=y^Sro8{7=jB81dQcvH@=1C0E6>Yvs;%PtGMi342~LAT+Fnkp{H&u$ z#dx43{dcTX(NtC0q==%7`SP296XQ%{zKYQw1zu8x!^gtB64xdNCRGvOj0;agUVv~) zCbCnxFsxsoW?H%WfPGZ=hP_?-8$m0QJ;0w02KFnZEQZeQ*rSOZ!xhlzWzy-sUqzFS zU0g03e&(dj#x{=qi=jW*O`o?-`XUb^&NTF>yHc_1q~K9yVu_FC|7ZixmDrKTmOd`k zt3*5LpGER7(MI})j*|$1uzGgrY52S7%(Ln`TL?!0!hV5$TW9MsBc0XlEwQc)nw3&^ z9}NT?0w$o@;-PxR#u=XkQhSbsVbD=%9r$3gbS`gM*Q9E9uI6+ygPe-JAce^ID~~=9L2^87@C@K3C&O>UiZ0qdC+>qTZuuF~w`33E z14X9JA4GtSKC1mrS(X&o`VxkjF_am_kAFvRmk=!b%n<($auIvRc+-qAQGA97zCLqY~YkhJ_fD3;W~ z!OX@%;*}Vd#i@Od)cHxm(3zer96C_%fgKrDuK9}AQ?QiMWuR3*ha)`gqM}9YgFh}i zJl%+FdfujHFXN-YQ1LUFl9?ygmR8q!@K$3#*y&TjC^+#Gk!F=mfl5Emem5|h&rE;? z`=xCo&1dV>J5Xo+q9@bI%qj$)f8h=J!!P`W{LLT!K6%$W@0Ayx`Lb-UZPeM4@_|Fk z0|C`8ix3exSz}qrW3AxqK<&S*6k#vCq94ryc%c{OMW?F{loi^Nn<=~?qLwKDol zbV7y|iu1Z$G)!uvCpcKfza`-amR~42jWE4 zXPJ!ovc(D7ROTQ+PbTJc0!oz#62aUKNY9f6Yp0-3%~_W@7J+l8@O{c3;CZY%WsKI}1jVPrpK)Vfp816eL-GSC@B(wFtE6{BtPY0KTMT45?a9VkPd@U=+hrgtvY7U5==I^=R8E{3$@+<|JG{`$j+Vk^@nX1HB3Vbk|qOrQl`v?VB*FiR40~pDH z5yVvfQaB7zRa}A1_ADy-f|&*MTlx>TzznQ1ansVG(8Iv*dSXqxSmEfM};_{B(SUgHeb$V(VNQVR$m6IOSyja zy4-o^j(pd5J}fW3{JMPQt1rmb`e~bO1?Zb*Yyr8H+t6iAMGXm#Ok7C^PTS%nlj!Iy zEFXii%j^9l_d{wz{&B@`ok{4_)Fry-NDA`1dv)wk4)zaaeRD;Q4v%VH2?Bf+%;7}L zIvS#mJU@0IkYB=ruw``HQ<%yc$m-gf{Or$sR{n>7@lWN!hwhLsec^c-^hPe55WQA? zs}+Qrq@Y!WedYP3%uxYjt*v@8*KPyrW0@XKWZ56e?um7|{Kie0%@>*A0NWskboV(J z)H*FavBY;jomfCq)Q&C@TFT3^>p0n~5#H2Dc=&V>Bd~;Rqn1%@CIgEg3{HuNc|HA^+lwJalz}3jDQLKDaU>u8@I!Lq zFcm#@)moo5;1(p{tlNZRYEE}b;e+3^~ zLCy4EeiD3!wPMgq(6paS z8?c13qGab|b}=@h0?MW2P-p|)9eYmxq)JQdVDJP{obfEN75} zA3@0``&&jmi>Ff@r%7J8B{|LrHN{EVzsb*;m>Z|pnh$vc>?R>_l7@I^$VK+6<9YJ$ zc%}$sqH3}joF1TLbX`C8FD{yUpQ1X}a_l-Kq%(=OQ4+ZdI$;Po)<3~J6i6*SiXFmC zB-k~)msPmH$t8Ri5Io6qnM}h((yn*O@ovJ1E z_#pCf<;{whGyzxeZ3E+&h`95v-N&&uT=n;+q zQ#6@)UQCf^(#Ym=M3s@t0tSTAxgJWukTFNX075gJTO6HY5D|trzyqA;5JbSpO(dGS z7H|tXS3$ULWgzDh!r?{sgQ_gA`GIoAc9J0xrMTrlM`>pO%~)Rv^Jwr#Skj+AN^-Fx z4v>*^mWj~6C0Zy3!)2P`?G-QeXV9OyzK@tNz(+b6QaBaR@U|5Gw`>s<87R?C-e+r| zS9}CKeUP0y9=z0?K~0puW)_RjIkHSvYQcpp2M4?MW^#B?3!Xw^Nz;w+>SSg?pr>l+ z%)fFGQSFb))ytdI@}C2I1SN|OP~r)`a>d7VNtunEY^uW1nJ-eAsZB7h6eR>7gg>I} z2z+T~UFF75JH=L)__olD5i@>b{(;LW|IB>4kYRryN4NU&r(bwf=JT0+;60DXXuOcg zY?_q_kTjmf6mr3~6SJ*?he@_pAgDE_(&>TXZV2j>0VE^1G6-9Wwta-v@U!y-WhvR3 z;@uf=r_Xjb4ssR3o`@7dy87ovf1WqaIb!3#X^ zp-@)NqQAHXSzc8@tt zNrLU!uy}@Jcc7IvL)qIqlwp75nT}|WnYxbx(Hsy3Fo)g;5M`Pm%cC6aB>*z}Hn+6R z%7O;>4@<+ClfoZL?Tn0;7TOZk;Pv>rEqeTerlldRkCJqjQUYy%fX0ws};U9lZ z_HWGPBOiXZoIk%V{ozb5U4Fx6e4M_0OO`{;NOx1x*&>G0lK%FVB@oJ$6p=128ou4+ zKN?POIhMOX$uKw<*Gbqv%vvLylm<|zUw`66t)h0GbLTz(o#-fWVL7BgXZm@+Lh*Bv zES|S2c1t(V&C;o~JT@Dqk_{M^RhBlck(EEGTgs{A-?#-%=`i0<7=Lw*+^)d0j@MiV zYfHDYw{OS?KmIm3eOq5fn@2L-n9AzzR8HL`a_4^jnA`#jnwAs9*9W_Y0*0`6Le|ynp3sW00pj!ZEG_hP`r|-n=&Ee%rQQ#p7@a9r zkby{2qlhu=Dn&fA<&msyEM;|bAV)`sG8oU~;~%iT)FrAN4FKywKT1)3A?YmVvcF9eRLxq*aLHp(Qbl)<$wTIh56{ zk!xsn&ystHWPXZ=c$UOZ2BsoWg*{ybGQ;RCCUE=^d=FcO z+T^(T1pUD|c-9B8c!k@ET7FklfHJP3HlmnAU(M$LPK(a5_R=FkB1m{ha_2U`Row(t z=(C4;=iRo?KzZ&D$zJR|;d`6|umfz?9VrRpcG{l)r@B z$<7_{pg@LKf>_S`1APz@V?EGTqSOw-{;2?D7YkyKaAsv^!^U*|?Eo(43WZN8i=p#q zs|6}!c>EppOSwLi3BVaTd#GoXn%gJF^1(;mDHpC^kuN;@oJKAa5@TI}Z@2d1rh*x)VrT$mt;*>k2is>kX?oqwXs4L`BlkGMZ| z*a(qk9|_(oj*pQMRsdZJ$Y>0Gwi z9j7v$>EL>^;p!S(AP`KP+vsu`hyZ(6^gsk#qf}DFQH2k7G<=CU^AVN(CL=II9lp32 zl|npc^4noh-Uq(!E~%95$he<)tdY6lXHGJLya@k4It7t@&D{>2l60P4gW7%ITFfiA zATgbd{}=QU_%AlOvHOBXc~=~(5{uw}y>bF(vNwE?Y+A8hhF06a`>?4>IR{Y3S~`Uj zB{7O|Ah#i$U>nj~n!iJcFzMp{ZS6?zT6W37o3$;x6G0ppWjEFpgL}{`E3<=O^nqZ@ z5NQv-V>LA?U%qo$j+YKU{tPR7ih^2p5LF$-NnxH!*~Qh`2oIfE@OYLSN?*VZ88dkv z@w}BEL&g$mW@o6VQb;9L3crmKbEaEM!rX!j0H-Yz3UZQVlK3)kUUtWC{ zj0eG!&lk$l7(IzP6fR#Q86@^E`~K2?b+TaUwK7zS90G`-ognWYs%ShN&@;uEUhVl;>!Zpv zt(8ZX09QT`4OgH7*DtBANFqS23 zfm1GpjkZqcJ(Nh7QblLR42@6|3f zRa($2KJTpyG3y47uNXwl6-?e2rf9Uu>S+kI_J=c=_<2%Z5+;B!jVxxIVXeps&EcWb zuR9=@vb(!2n_HWng&dV-32JHPp}*f-%UOU4L1Jw&p?A=|m@j1S;6Oh7zWe08@4i?5 zAOGFIm&1LL-IJ?6i!5e4nf&7Cv35}io)T@5uE>mR(h(&!;wcNk+w0TCTsAfaHWNwL zsb`SAkYT0*bCi$^`CJg$L1ycSZCaoqm`n5rWmX^=a+T$-{sBsz3>?Z>sw{tCuceGu z)T!3DSugganwX)jdvps7RpQ#-deFKLS@MFP+u`93vd{57HHk)I>mA1y(;+vLbr^=k{RU~juw`IXOfCIb3Qq(jG{VU&_g-Vn#Cur z6vl@BWm$r)!SljdX3vOhIL_1~ft|r21isROVmwTpNOR4&7O+gs2Smp5Xs{x$zHm!^ z^H;wv4?MCV!?iUzI69Ka{*jF5ZV10|`MUhUXP=eB8v_~i#xh*f)^8$ft0S3dW#Z%N z^nKkbhi+Y)%CnDMlb4>jD(CLnlG&m1u3g1&Ld#dp0-NqLRN)@2%3O(VnP_+4GqQh zDuNI(L+H)&tQWQ{$5x3ea%wW`XXOQK%yzDpldU-ZKufBFgKL7b|$>#d5B`at(yUSbme)Sjbz^0=l8-~^s&y(hCCLz@?1w}(o zabOu)-<`I#c@mA>z&@d(9`pFx_m{JaX9(es9wgG4Acy-CSzTL^qk|(EG&X82kZlZa zRf+{+NBCUpx)@GSXmRKWv2MQYObGBLA50Shg7#Ni$UOA2=z;f7k@?UUQ zVY+l$^32dhC9%8;;1VxP@`~5WF$`UxZH|z%Rq@aA-}EwD=#ZUZfFtVq%3Iiv_8qpo zRgFo!nk|cwZLZZ2q#2bXm9$y{1hTbsC!;+4UTwCzjDYzosjOtIRt?bBLVS}|{|Ib~ zjt>M!Y@;%zKrm*9x>qVdxs!BQt+eK5VO%J+IQY{&vCo=j@#`Qzj)G~fA%dK z+Qjub+jla7JM&S=p*l**EP_Ppys!7WI}7dRtHl2z zXhjzk#;e&mAbif2g_%LV$1zhm^Tz@dXUb0^r*UukPz$=K2IX2wqpZ*# zgifPRMRiyCjOg2S99`?6lzN3)n$h(fK9EsPnC|MFp!`qvn_iW9;z$bf$Z2onJ z4z^H)7_-CFzo`-Ya=y^WK(7vv3i+lKG?^eNmPP=sPJEFS8O?wcpi4}NBV~42Ilx#( zCfK42cCmGs?lNc�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

#G|MBZ})M| z-?c`CD8*!HK;ph*77mL7QsnLmuosSk!hJ#l5w4o%376!xmcVzVuPaoF-vS zOjCJ<_ZYL&(&4;8V58uAeG$xTfr2EJSz=&*$k4TD)~Bv6I1h=^!aF)jOR@zSuVkDV zmD_`{^Tz)7dDX83U&<>jE&WR5JJ|70tFCTSjwcDAc(as9-1NREu|&Qe29 zb=?#C8?e>HGJ0|HD_U#`5pd12RowtNSILV@XULbcc+&fk9M$y+{q*hH}l#T)hw z?|dlhX<#Rh(G^7J!BCtL+shHSg{%K-fmFMThrICSiLcsl5sB5zuhU9AA_77YvnFtZMxJ zwx}r`y2X<-#e3F{cQL$>WpKiMC(|cmn;D4Zb#TaBwR$3<|cr%kBPcr*(|k(g0<^&iKQ- zZhG+Ae3BWy>9EYT(J?T}Uk8GFT|fh}vSM7HjMzoOrub$T&U^@Ab;)cbm_m=(4aXp;#{ z<2@sZ+&sak?h$#+Oq2Dv`awqmA^7U-%-Q2Q(>=qJA?=`vo>^x*cp#NQP4i7a4Lmt# zUX-RweiJRI%(*cnOH&N}zZBqO1x%w{sWEnp4gXB=~0%3#&!{-3HMF+S5l^yfuh z72*`sGzaUnVv+NUTp<<{Rh?FE&ct%|QJybhDjC^eF*9weT3o@}KoEHEd?ZRvAW4Cv zGaOb?k8>%63Mf*SJr=~N@}_yqbzoT=K%IZ(-O8@If*&;6a@|?(%KaUnmHb%eOTaje zoCFtyF&q}Ia-JpLnU3Ti-s|4d`;v{$c<;*wl^ z+5r$pUloc~*if;yqPIVg_d*IEv%-!*yT)aShfjQ%~Sw9z;yz ziv6+Ce6K6=AgPKj&|ex9TtRnSFmL88eXc<$w)*Q47V7}|!> zsVq`pRS{LrwGV zd7|*46dj6QjoogHW3EWqy56ai2+2Q^xk+NMB3gWjF?t>4tXylh^p^2-<(>5;6LTY) z(Kay8SlROHgj9`@Nw3iKs;)DpsIx6sEUc4btNaGj95DdyH3g2Z=GF@s50gf>)Xi^A z`N;x;E6F#z{A>G$IDkdg=QG!GW)UtpU z7FgYc?hv@CoSLbmTT*aZ<>HMQZ}{lv4elRf#5}&c##{+DI3KrS_pTt-oHG_Cy?+O% zS>~NKZQwz-%&VV{0dr6d5)Da3*`u#Fk5(*P6-KY;(<)#qQa(?}Q*v(6M2WC|E|1}V zRYByhD_k~Hu7@tKB%UVjwZA9ndmlB!A@aMqEe*>0DaFZx&$UM znHH(hRXYHo2&JIBkc3;g--I8BA`F%=P6cQtX%2O7*7UaA9dG8gRuYvgcI%B)4ltOO zbr8WWa_!!CeKA@91rvp5AEjXM?8nBjQlJ>6AAYE?A1AFd6$%EUERgj)4o@5?zl4(Z z>BoCb{G3H{2B*-l3q0NBkIY)ty03nb$ab-FbqT#C@DbF>VXD5~2T7Z+zAs}>Vp4qt zwh-wnGUgaf&LX{pkarZko%i89lw{>z-isL7p{xxg=Ijvjgy&A8lfi(FoED+i2JJN^uB&Ws5xDX1{e z@?IrrqI>(Xe?9bj=vM)S^Q*>@V2`u4zHY}#+aFR#JFsJi&;&xZGq=281N_S1vOE$k zX04K)ZF)(M(-^&TsOuG6Oy4H+6dn9(Swyv)@<7Q81vTp|p_4&00V=Z7z|M^bI>u6r zage$1K+tXjTzzg0yc0Q$M@MeX?*)tb>@b^w^cd!oBmq3B|D@Gj49?0%V$d5}@leNavDIo9h#AUD?E7=T zHbfkgd(7>#gso;S4N(477w!czpZCZ5+24G^2!9Jty?$0zyq&m^58h`~2rX9D@1t*q zFBwyaQ~T>)tDWJUKq@?(e9fXAebOK;+DWd9?iLv3S>l~)_G!EH`iU@VmUi$u9vj(Z zy)K7VFc?R+svb}|5*;&7`fL!RN+EWHDXqp@^$jy0ol#yq>jb&(3n#ZXU}cHJup1f4 z;D(pZPVol+M(+L6{DrZDRkVh2_)sS_nWJ{^&NA$os6SUyhgF8x-uEV3Uu#y^uI&2vrIT~lhIq&?T2?P8@BpPa!fH8g0G=5Ers;o5@l*n z8F>`Ssx&x%=R5|iqh)gRgvPrD3W`U&UGq~8X?9Xa!S(1*@Btm+bvTL+Gw|92qjQ=l z;V}#wZ>P<94%>(=U&gG21ANxQ#zn3k+K!wm#@gbANk__@DCMJPos24{zi8o?h$!pp zcR)i7o!UZc0ITaO55eH++%FyLcVb8V zdn8{f7n*F9YQd|kOY{lpz_bVQsUvjr@@yyQ2(9l5oe2QBKUiJ+7rd$2+m5^2gCwH0 zzB->KI>~xfyLP@(;MVIGJBKUTO$iO4JAk6B-GSKjv~X|s%zNd=G7mrus?LC4jeho zV#~4E4OnmcXU2}9_OS00IP8$Aue<0cd~NMr{hUBopFI5HWYWNk>Wui|u(J0WdmhX8 z8I`c*TWCqLm-Nt}sNc|}sgbFm->{dZ8uyUcrg~)Y82Iz-4``F)^n|@%t`=UpJp(BI z3Hn6LllBk9^H+QW)+unBeJ?uR&nWN)rlEm?mIh2-j?IxZLvR_JwUQTgtuf$BK@oR# z`|4|5A*N!V^Y8!u>pvltKzliV(sMhLBs`OX$%fqhe?vk`)f5b=%sa#CAiF0Y0y5Yz z3!lCpYBm#B#=P!n^+lx~1+@Elj^Wb5xEdY$>w|Oa`5C8KgJD&`X`hz|Fw=_)Z?Y7g z^M-1;XvG5(d5%C0qY#ugnysrU_Z9&eblM0%za?v*Ue5~AzJW1AfabM^WZ-dnnF*<0 z=czpm@{^#;od1rw24 z8HMIEW0odcQMJk;i?tkm<-t!*l-Kw8cjN_xcTr%+K|m}%VsX61j!Dbp+&J55UC1?9C@{XLvJ$jb2)+-p2! zh<#+{A$xGMa&2e{nPjGOp0&k$R)RsDC1AIJ#-YRGb?JAfvSJ+5WYy}iRQ@naU#b z@Hos4MIPb&^w{?8YR8tp{Y&-Dtgi*@RV|~R{i#bRAiS@i;6=+Vf^y)FQ5|Y(;C?+w zo`|e@c&y>P7$)CGVc=kUJX6(o_3AID_fiZ%Z5nq}Z&d|^3U_hE3K17nt(63pr1 z$XXLUZm`y_WK0I7$FPDUG}hrr%dEFCpCCI2mnxlR2{6H8)Bt5qbx0&Qdi(pa(eAFQ z5#B3%+=)G2tIFgq4FXbeplJ2D7g4va=bAnaQ!~>D4hl>85bum z6VYcX`HUa0*SR@TOb)%0+F?tWVGIzV&i zR9og*{I{Cxa-z86I6R_+64TXcqoc$TR8LG>QSpQ2_*t(x|H=fh#uORUM3FkRzrhV59LQiMx^+!fMtQmwIN_&B3vEeO2lwFNwmuDsTMkPgJH5>~H9iA4pWV7= z?w2nnt*^TV$#{xCuTJPXa+@I@T39WmY+u#pS{O?Eo~rT8i9FFG8T{;4K6qo`lVGBP z_RG&=06p|at^d-Ctd#J_8%y^D)>eeCV6J7Ka6^+^U?TvV2J?DU#G0|G(fZZ*0CS%) zFpv@HF2f0dPPZS<-q0H_?HSruK&OEmu7?gfj@+mYogfdM8JZs(G^=Yoc-u!_G06Yf z9t2z>SFSd59H|_SNj%Rxp8t-_pB9=sNNIYFT7!QqYYQQ>#%~@g)xj^&y)plJ86qXw zPSx8B{;%+K{cOgz(c25BT%+h~a8n*tne}a*j}RL@nkfDZ$>mWUy(u^x<*HvmYOqX+~ZN zfs)8c>5S+F`OfH5vhR|9Vapui?6$Q&^cccdgx%PwC152Q=M%yglC>^sd5JoLhjv4 zD1;gYSLBh)7>cliXcH6l@i4sRg*}ixM@@TEKt4f5+(W8Hz3t_IW>B-;NP3m>37Vsn}!5 zD+(4EXVM}W$a+oYI#FZ-7OK<$f6X`$OhM+q*L*<07&R?h);P~~lRZAvSDN)ZmJ&v( zIn81+;ThA(-tl*SzN)S4FNUNg1cqo^AnnK94r~PxEz2TUs+b}dJR0y8vVuZommY8* ztFwNq{pAii1PH|_FOW?Jna8C7Me{;xY%PPtt>N75YYVZ-P)xO*Xc~AifiLb)LdSkh zSEPoU_o9KV1>`L&07i3G-vvq*i;A!!6Usr0)-3`&?ogZ8=vf!9hXZ$-;*&vTr$}V> zdFfRR7a$0ryJpl?SvqyQAs2^}BKH+ti+)j__LcMIb@b^Thl0d65T4Jyh5~trg1Jf| zV}mzt=#yYjPLP~`ua7do#*_yj1U`<8c%{Bc1A2P41-CPUS7|Qp3G+(OndHm{}lkSo{FQ$g#C^+C}v{S(>@L)d3-VYT%x7_T{J;L5# zT=3cglH$4xS-?B&vM}YwHjrbc`Q734L+p#6F7w7tXZ0dtE3uOLp&BlDSi z*ja)8NB-9tUYR%!j-D?xb_!PrnZM@(3;n4W9Y=(*je~whbo+c8e+Ut$L}C?0a02R*o4Ra z7nsr=GmNLj^Ty9^Yn^4VL->-}nO|g%?egs;t$g3-##U2HkBNVmUxL1tOJKCkaycyP zmbGxmSU@@$m8bAT}Gc}1#> z|01ipj)*~7+Xk&EjCJ~KHRay6qeNi! z_-{nBJp^suAKDZxyL-sxh+paej6CnyRfM;kqbOc`oJsC$sV~l{{V0JP8bzhi{+i@UL8BbXtvPlD5^4msmB6)`Cvd{77ymOCh zaP$?tPCilw{nH9!^&gBXuA-f!?>f=Kz+es&ReEp}_oSVj4HHuV6yteCdyWS{dsMg6 zBrWiuAW&iBGU2#C5$!Eyf!4wNBj{T7K;g0&4E%ZbY>leXdwqDVox?T&7sS%N!E``} zb(&H+ZmKA##9{Il!5IGpW6cv|lv&8OGDlBc)ovE>k~vy5xBNO;?gj#+?OnQ5WsB^O zfpNZ0YvSOg>3@xD%8;LEMk-BLM!Es#lNt284yI(T(LiIC2SJ17VJ(Cf1lo{525a_Z z?_jysv}sQBQ(SrEH`YOuvjhy1B$wm+Q=QA{b zGQJ-p%w~>hCNg=s5oa*JG7jPqtheS~z-WEc#DN6<6l2lAsw zt?#Ng+!kfz!K~j|pFdZ{+IY*LdpR*WO{yu(Lk_0WantXQaBChKsvmj`O@Y!tq4H38 z0`Crgt8y*bm<|M;`*pCkvO_2FP;%fL-89#`qSQDl!8pAl2Yx~?exquLIHKxM4~@~Z zgO?Xf(7m1y!780ob=aN?MPZ9(C)4QJhqc}Y77xufbx|hnd)T6I?R;qDQ>NX*z6%`o z?ivw)Gd#+xbPO-GLVXbCXky96X2qL3D-e}5tHRw_Sgq3}9CHQ{eo~Qh?d!CVnE}(G z=x1w%F`4yzgGC_s?hd4W758O4lBc51+eA#Op@gkNpEQoA>O_5X=6l z;7NAvkw<#QgS97^4JSQyWON&Wp7heaAO1NwZ?D&Or&(8nu8FTDw9gZg_~ZZ(&KUAo zphsLS`SWQ#htUn0fImp1*sZfB-*bp}Mr|5PprPE=HQE9B`MzuT*%1SWeA>%;eeL9} zlj8Z?`23uygsKRei9MjcTc5M%1T5)9n3iv{UQ8oy8S2(^ht=waZJ=!C+E$#lO)E3` zZ-u|{vYyT$wp-RoPRu`V32(7ud#{xomUumnWSwCVnPvGSU8pIySYJDH#-rAHdKU5Q z!85EzN$_Fbb@tB{u;*2xDd-Tb$kHn&JSWrM;rjePRmCIxR~y1S zoj04B2V@TJul=yJnF8Ys>Y5I2dnP<3`?zQG(dTgA58laHyR|RqkW7_$mdkr~>)EcS znPe(~5WKWe8r|LdNi#0%D)gg%-jzw-Z}T9(pZ3r5?AY{qaRa$*l@~Kowpck}$&HXwt`#}k{A zH0HgQz6+V;LVwLOR=4v#SmkcjY+5*Sa#<%ONt_~sQ0LNFlx3CyQ!%BAS>hPl0!tQe zHaOJoZY#nlQ)M-NyKO^+Y9I_N2d`PbVSf8~J;ahD?T~KZPK)JX4 z8mlWrw0f$?Wjs@{pxmY$*?yq|I>ew^?l?03J^ zSV{gxVm-gh{y*=VlMY+$wb${?GS1T`qnON&YXQVV9CE(@M=j>=A4cUu!mRf3?Bfuk z!!9#NB&*p_tK{<>SlW_C5^?ka+aVvKdp6v37hgZJ-r4UY|O8P$ib?J!h6R z;22(n9N25<)?`+U`<;lKAd@TUGEs9bn?BA}IhtIdL>WMb>)s2{tEOaPy(Q?-Xa_V|&L93={#p!jlQy$qa zrkzzafi_(Rvz`;>QuN5)ZnTv!T{Q(S;7#DZu&3)E-KOuKY~<&+RP!#`-I-hDWFN>& z^z!6p?1upN1Qyk&`5H&~1ACa@ROGAWk=EXO3V>Pm_082o$zZcD{ zqYgL$8=HvrPwG27R{@C}jk+?y>^Nj)8017~+0KNnLeHCO*5TZ`v6ENsI80~^$Ei@} zKI8fR)%9HgkkK3CICT(m>xX$N&zQ38X;s~<dYuT84*~CZ?lt#(;%|#FqeKE? zD6#qqgn92H1LvdY!*dn|{!4E&g>`K80AIEO=501b$vw z&-%*-SN|rD)&aqn_lGoi1O0cV_oW3aZ$)SLrqsWl+o7-V;PXB9zQD%$U_4aHaNQ$i zkg~HdlCCtLhUPtI(GnbARx80TKR!U%1kk%Kk%>!i!!Tv`Bi4eU*ZJOm?FGB{>ix6z z9``$I{qg&bWBDf8Lh`Cs52ycmsz9!>E~n9^g<{hNS~mW8K6~0fvK{PYvv}thT%9$l z?c-Vx@D<)U`tcq3Yf?hjdS0#bY@>(KQdZtgTWnsB(29~vs(T(hhU6`*d7jDkRBNNQ zuC1*~rm9@`JDU*;9OoyYZP3`wbm{`LIAQR@#plO?o||gphZ>J-9AiHb$c{e5(j#CL zUWNT}V*9B8f(!SE-#X7zc_q1?gp22}Z~o#l!LDgTwCU1v#Lu07 zyRZp*U7z#d1EtJKHaSpMyUXhm2VZ2ss>=_FpK5N)8uLJC!Z@D6dClvYf1;|TS+{UK zj%x?G;Aiu7;d#mP;j`j7<88Mz`h@ql+=t_-$?M%ijfMC#{voXuY0FqK{+&*}vVr=X z#0Ke8=Vu35TNGVXV1K|3x#XC~7JXp&u`Mqma!!!n57J@|Z3Zr9rXMRkZ1U&{>jH(7pG znTtZB!=p9l|0$P@B|ipqIU@U6Bz=spa?9EaA=Usu)#8$$@EP2A2UN3UhUc$8n2bjL=(8@J zhCnd8S@gLAGr{5-Ie2jr8!CHhH(5`M4rr9#lhZvvU%uJPFQ>KX`NHBA$e=UU z!#WoJnSS4*3G(!|0m{9UuL$E{Y7H)C9Bc*3Jv#xSJ97^i*k6kgnqA!}R@;w-80dIQ zDRUKv0h=8Qb)xlt5~0f@PYx>`uuGY2huTJe7jV}mE(a(;dpaIq{xNcs@g+r!Qm!RD zoS~wYG+K-h3Arg>W5b@GIVjS3bIhQ@q0($aegvf2B@jC>iwq8=N2xbsq1P9vmbggF zg9gyn#)|fnvAUwIUZ1^Y&io=^9Xp+l1+6N*JER?)k3xaA0RGCtRXMQBtvfCBH*vkx?J|xZitB|a0Thr1`4VXI*v{tb8+ykeI^J{Im zeZ6Qj_#uNz8>}c=2zwlYp4DVv&yK%AQ`P^ND};!ujO=zN=-!6S4esXsQ{Eq=K?l%` zqsZrw^&q_23iISmPo67eWR!B9rSsNSWmw+K+}a!?@6!XBIiB?~o!Ll^Lb<>vAR{W%`jJR}hbitWE`j?x9g;q(lz;nE{fPA>~IeG!?6PEP#QsfuL3n zgI4AhbT^;{BX70GXol46kE5nTg+A*pD-y7_%aNJcH_w5LK}O^BSpU9coYujWKRNG% z-kKtVEPv?gL!WdS3$EUS9GfgXy~_?^+9hy;M3;l_?(D~vo#Hks2TAgPVemaNRQ*}@ z5PjPn%qdTlhR)bdNiOAN_0&Ayjz#J%onPpLk;qZWn8)!*2d^wT?J*ZqeRYo3Y>BWbg7a#66cQly>Kf#IQ!F$yS z!WX_8McZKWHaMzB=XpeOqyNzM=K@RXS`E}Ze<;9*is`D#)4uyqlCl;_cgZXR-d@$j zSOTf%^;0L_{ZrRL9c2IQ$BXIr0xV=R{GwMqd1e|uIYjuk>;5(#9W0C%aqp=`P($z6 zPGW%n)7sP#;8rw{D{we|UeoIt%lR;G-vJ$s|8e~1vNghONQS0n@NKR7u4ZzEc;2lg zX`8doXGyI)A`ioGsQ~7lQRtLk+TEK zJ#l(-#rac73WrC*N$ru)pXF486<)Z#t2omKHoC`c3=z3!9M1C$%!PJ%aa^NN)oyBS z3dW*@iRk4z%yQ-s<$e>;L8HQws473z1@8Tc1KL?x-E+}=bWdsGnbq${?wYdWXqXD) zd4D58gJmB3xEb+rZB3N$A(K<3NvnAUa!*eh1wU=MoYbP1Eg! zfG@nx;9_?}nBWlnA+`&tQ%#?%-8~Y^yk_2X@KJ0aU~OwC@1c3@mSwkNje#cr61Qmd ztt0#1>#JLb*V2x*r8n+MB361bi4#5zwy);>T&q_`Lr0!-H-+iWx~lSO*&F8fg8@{j z730hD&S!Otz6BnO>Gu!qfpXn$8{7GQ_x))X)}hm$JhKbvDL&o$O0C??!?|`v{KVUs zzqQ1XLu}-29<)5--&VuEz8b5fRIFyv77>`OyZmbBGkFz&?IUN;_U}M5v7%)j$M{M- zal%sM0**dNB6$5`r3qE`1D^$PR$yezPHMaTT5D2_OoqGarzvg_&%P4PCD$oZ&Kgxd zz^vc4u3)LpSvQSM z;!5@4-HnF^#3cid-6@GeC5ZiQQYvif^gndoJZ(V8Wc@=1>hzj&4x;d=fAZVTA#&3z>B_{ z`*bRhPNyrcE0U@1&LYv#cc%p4-^>yI#_dGt^T>3kDt!CNYHWKxeSgMax%C8yni+7j zVV(Bllu^}+R@G5jeAG>qG;L6c3S+BD2PK@zX98=)wc{CqQ9zo-j?uENLnV30btUFyVW%eGWjrf3XrORc9=~TVc!5NgnWo4!Zb#G3<82F3u%VzSxq(b zo%2?-r+HtW<-Iyi4(^wDJVRd~t02^1WXh@woMK2JAVJ_%#Y~4xX|EY%$jUiAl`jX6 z0}>0EG3eC$Qw^~KAZ%N~U@7*{7|J8Gydh6nFQrO>0Wn|Ss{YfLKz-44`Z{vPMSV^l9Zu6=2lx}8^aY*ZY(g0ari>cbuIv+h;;fN589_-Uau zboTuj z4picx5qNLbvu(kk%GXcT8jK90+!$MKt$6bTttROG%UFLq4EJbei1S(W#v0`gEG%P- zSd9T$$hyyS{;(h)(BxkijiXz7xir|v-95Me{!<_7#=i@j_?>tM4XLi*M!jw;$pLOi zQ|ZTtA6`xCS>u8dRf9`f^VMVgQ$ms7XAItbwH)#@s!zR+9mlbMBs|6`buE8zX(!oP zwPh2a`+Q?P5xjP7kS^@ma@QUzQ;$0Nxi9BG`tP69`fajoho4$0B***nrz(m10?E|x zpHn@F*%`CW{dab~busMGgQ0acoOD#{_Kgi;^Tz(GqsO0zBy2B;CWiJ(lj$ZweB=PW z|3S3kOSX!X4ud3S(GA4G44 zGTKV&?fpR_Vic`0njbsug=*zh@=mb4PjQ>ZnP;6WgGZ#jR~9$@0$!{w-WbSPGWEis zteWuWb>~^;i*D0?cM?>Z)LSZ^<+5B_h_vzqxMq&9g52pySR)pjH0yE6DYnP=o}H_5 zrbTzFda3>lKX0G+gn$zhw17WNLq$;FAxp9!mrz7fwe5w7xq=g)YO@iBPEV{YFH3cPk9fsv)a zGpoIH@kv3f$Jgo(4=m4xg7hVMdleC|%}$ar|1|ln!Rf*M7ad3I9gYho8yl7f9+-!k zXq!rZ;Hg+Xupu-5g<&ekS@jefbLrbAB)R?6h+NCowvW&IAX|uDHhNl6tk^(-e74d= zPwd(iwAq8{qq? zhu1uBV^Xlzp(gdUhmj!>j!5q5dfDer+2b{e?T}*-umB5beEpa8$C=LNHGMU<3IbYD zXO&&WmU{y#iEP6Ze_LkdJ-!lHr$ZzKg7+3-Lf*)}DpOpx%%w-_&!i4$OYCcr#BIiZ- zUdrEx&25@26ib_xZd3&=vudc|yr9gav?BqEEX2S_dIwTNx&rfjf6m&`^;1661@dD9 zqAQfr)BIfQGDZl$s|v&cuQfkSa5L=&W-g~FQGzKFjIsa{u}7$yR~!u3(b;h%6*A4| z(3HX=`AKFQGQwhbT*1I-vO3ae1jqlh0Q=WI>i|IGQzg$lUI#lukaxU(-xei=gR7J? z=g|02xXW;OF%l>*fv6j#?zIUEuw{nFd7+em+&r*MZZ6))E2VyAS$eX)P>_ zHZoa!4Y`3d3fz;_mH^3;eT@XWh7gDs1+=5D11AzbIm{J3=ehgngfJr~3G zR2J3ZINv*~dU`bK-rwQLqQG(H#4zzQLP=V-8+22z5>Glf3+zBO>9KHK*7uZaAAcZC zV;Gqx_QEghfV-EG5PUvz^3ey?OFEwfW9``oa=sH!lf;C##}T_H;|kWuguwRuT&C@Z zy8reEJrAt&UUpm7R!*Cr&piKzm0(=o@ALTY?!OEO2OnK_hsR>4x_R!kpOgz8LtDQ_ z=Xz2OK;j|b#+-X$!M{_MfHOM7{vUufFuZeYq)J?Ha*uvcE+ z(qEn8&qgG}eO{PO5E=84^D^d7l&@8oM<*hiMPep+Gk>_r{qRNb5EtRv!NuesWYZS}H&T8}t`qOD&JW*20h zWt78zdgG6bx14qmawM(Ivv$mY}*mI!#EgVfW_j#1U zoT1^yiFAI&JikLV-u`;&z1T6SIQw}8+{k-9cOd-r0n69AC>=PNib4L_GwE@6k+2g~ zn^3>ZKC|`tIXrLtH;0f3cWEn}wBb1?5p4@%Ydr`4Xrr!Vz?C-SM5;cJ?plAEibjpK zH1N(qhv>?l4>p@~j*UTXdyP^vReSLt8NW)qrmeBHEqLCuNRXBIez48p_R5gV<$7A| zi6VVnyXv~j8~P>tjEugVbwNu;|49Zu@CAKxk#W2bRT}r1N)~h#KWLqmq^R09!8sWe znVpp3$}+wKE#u*<>7#60x~0|Fl(P-bTB)t6^?)mVELYz-1-pZgZ9G&R9n2LU;7;1= z89*_Hx-a1u$T+EpsqkzI!*l=HU&u98JH#l0+?vh@_1kSsgpNVL>B*4bsMj}+byV#xx%*ZnUnli}Sy zjtJ2u|GWPz1E;GZ$wk`{v9vy?cG6h87h5acdl zyl!_zdOp#!SZxMcG{)I~TXqrD?0o+lSySJP~?Ngz1$v(<|vF@_Dljw5s z5J;iq=)xA4o8Hx86s*ndYX%1{to^Tl{YObLVpju|rh%p32^ll47IsPIS_j>hU$>Ez$zSo1uv zXD|pncZm80*qOziEJ*_qXEZo!?Xf4~-k!+aK4xIw0goM_AEnv-3#&*7J?k-!gW)!3 z{SQDcZPsRxP-Zn80wAWjIB8yd!E7J^vDyLI;8pVKvERZ6%5!AGVw=UIBCa1d-o5$F|4M1g8MWI|ub*ly(& zaN`9<`abX9z4tLpdA7_D-A>vtokXdRjRW(ZYN??1Tj5($!yz` z`DVGYp#+uvtSL`?672v4ocBjRctL3(fd=5DWPq>lt?a461$P5@xkfDldRDY-^O<#o z{z%pq$E#A?9%og3p}jPX#=yB0Hl0DOa2w;zPM02<+p`72TzRi$=74=BAk>iVS{-K> zgRI)S$!>J}7(0DLT>+?ZeD-;}N7uo#j!>O{ibZHRJuLx?SoFOE zOW-gEqXYPn1n|hr$FT-;C1cC=(cKe#o#C~0+c5~e4>0z!p3uw3nH-a20%g%ZSraJZbm#o{fOr|`2c!!N{yq_=I_`e|Kcdgm zdg#a3?{$We&LesZ3+W8glQYJQS533$x~om=*mBHr)R>9oV3ZQnd-uA#cr*yGdLJJ^ z7w!v)!nVVKKg{wYhPqu#)-S;wq{o~WaP<6bX=iB)?Vdig@Iai?NqoL&MYy>|B0^K=N!*bBqV21-?6G>W3Hn%4On>L*?#$mL+>?6}_Xs#o$eYWfj%k_&kDr-BQ z3ASb%>nN}zC6cnlSj#%_CQf#T1GWF3CVW!t~d#&E#rU zCZC3nO;?uFvq`y#*e_0c23E+s+@Ht?udi0-$FC2`LKQBwJD#)x@4NBQK{T?bGHWCr zhL*1O>z&AMZ&^MoO*ja&>Zg`3MeE>Tgr2kg5S{l7!}cqZv$PJmpNVrXn_XPm#cxZx z>_OLQ+f~#*Is>s%XzP-TCzf>c1c)&a7}`o?zI7Lc;7h&__SLM1?AhC9&Ta(6E&GzX zsN-H?mL-K8_%KHE(3`X*y_53<>}aJ7DyPrP0^8?cFr zOzL8?Q{SIEv>Hv2SgYbW!WS{5?QSNvclyYC|JHtF2X>-o&qb%~-g3_gc$H6s_ebt< zO-%L;>@y!Z(xy_VqF8 zke!%(?`m6Bo`{VG=7&d4dtcc|dtx5b^JSJ{w_2)7vqJta-oyL-Ov|%&Cb*NTiZw|? z!>6qN+ey82lZ4J+IKfu^#vy}^HyB*OQ_h>HoES|HxT_j-o|R~+t!;HZcxM~XJK?1P z;LB+kuy4#=u8YkY9)+E8`H?JK$p7ZtJ`1)2FkSX+rAKyA>l-chdi$O$6TYzqU20b1 zi)2Upt>U%NN2Z#t8#O#(VoLhq71!5qj1WKoWd%|;n0o~yr>jN5$@;w2cta0pQFtj_ z+vr-FRT>>05-5y84+=5XZ7@X*;i#|fQ)6jzW2UuABC)eJ~uY)jFBhb{X_`;l>qemEmJ2G?9{ zP&t`OHdq@l`*C_Wmww|{F(^(ZaSgIK<%<+_$^Hh=5=iTrK4d#exQ6gD3c;gktphMSB-b9~0jQQu3vW1B1vwcygwE7~ z&A|byqV$jUaGXphFqL3ydEf1gpO$R11<&U`S7tj(DE|W*bFM%u#8}cXFy>^dMU#b-D|W;T_%|e^%QBRl84MRz2wL;0`vwmsj^VF^_?>*{mpx*FHq)gx9{|Gc4Y!cm;U8(`T_^8+?@6VZL z#e(HT@o>)7El(M9+Pw`Px>yknK_+Lg-qAu9U{P&JDrE@DXAhY8ea9cNlvOA7-e6WWpF@qt}qM=tuw z7}&069;+gVU>T3Iy3N7XM^E~q?_;Al5mTim2tYg+jb2?gTr$X~g>f_1pEannGrTRi zH`PBgr>F2&AxQDLlS{D96=+SI0T0c&Q`=d)bh+-OT+dVDpa#YY7A`2PJy0NPIw#vl zE_wf8FNb~u{oqqbqBVkc(L0rgc|K&*Zu1T4dOnlyCQf1s&7N<=ph2m>j<_w`>J6%G zuRA=3g(F99f4}^Qtj526GTZrSyql_g95DgppakLiT#WU?)v8SJ8KSoHo4l>D_}Qr{ z^}0e%h%Zukvhu-iS~TvP^(`7f;^OUqIv>fOhptW8Gia@4ALx}yiY85+CBa2;({;S9 z_ybO0#TkZ48Vxo;70CUQy?D`F9~>G0)vdojjTN3j#4zL@VG4zgZ@`aZC^I_MW-Y#4^M5)oQ&2^TX@+`u7F)t@+%w zKF<}jJ9)x5!3l=L7p1jjZ>-;Hzz8|Tu>B8d{R@g_jajiMn(hFu%Io#A&+!a}Z=Ll(^0sO-iprvd(c zwKj3KYIv=g^>!RJ@`iDX34VS3Qg-bwapm;fZ+QU-l)=taO28{icb#tnf(J-w2ARuA z)kD)t%fP6-iG|(gE-hfMb*CKKO5WRm=&GbbUt0qYQV>puI;Jw`@C!4~p!8QS&+os! ze@8(Zbciwyvn>e?2c#4Rf>h^k^oeJNfa!>kbijFq#s+3}y1>2#m}2{s-fu-L3|{3C z@#0FR3e%m%Y6z5qBfrb^VyxR@oGHXhzfKHv23LrNX|GH9)$ zrsCXkZ~{d0Tpx96!!lJ&-2`MKj1fPH0CcGD>tpCJn<1nCnk8>0@Xxa_Vk$39dI$EH zi0nNbM_mn>l?_VkS2UKaVu}}PZ)WjE!&Yp9qe26fjg2&pGYA2{GF@celJTih)xN8* zy=7E02C0WT*6`SQ$^;k2DPW^QdJXG|BkaDuPaj)3fh-^`HX??bSzcnU!8;4YcUzU`G`j22You(#&XbfQ}C{=Yu)(Buv6!)V30}n zRAn8OecI1G*NMVT;KyeeO+e{X7wP_iiSx^21Qwt}@2ff~go`Z76)@NOQjN|ywsG7_ z3gDx=9nNxAH82oOb^&7sXYls*8H43y%i|=)8F+D;axbjgfVJwJ=;IKD$2TW3S z@L1la#ffzE@Bj>U(TEb)vv<*^M^9`*9vrxwTPr{$(}RWj zxkYYmTHEiHv9m5|(%NJuSIL;y?)ikD?YI;D>T}v+=KY@oTF@Nk4yasLu?!C{@40T4v%THn7CiI2%_`KJ&Tpbu3uV7{>46PrXu%rhU z5?x8O#M6t<&5OmowgKGQ+(D$!upOv}PHTs_C1R*N0tz%^+YkODVz8Ny)&q&1#@Ek0 z(`wJ{{yaY@B&$E!d418f_h<=}Ta zwA7yp%mcj_yLpX^Si~nfQdD}K0f;UX84t9(I0+}FL3C@fRHg-eRS$NVvkk@&z_?vz; zCcWGVh`p~2{W+Kf`X}yOa*Q_nPLO&&W?SUor^PEuhNlFR>~M9CV+niD5wBQ3yMl?d zv)1BMn>Y^q!sqMVk&*NK-~iC#_nllvI~+J7wvNvr^5E|3iyOd22%#*p4$jVbUTooW z#3@=a)X7{&C(8DadB+SGQUXDs6+)dK&rh>?eOEK67FYFe{~+C&XHrCzUOw_J;O_Rz zgYV3C@YRLw({?2-<4Ty$Vi-YY#j+*C?WCTiGC^w1Pj+q&8A!XPIu~2*)jfOuGhlb3 zk94YPfdJ;ZCTJ4^=A8Lp&#rT*N_)*bVFcUKpt&h~2O3zx`ds@(w*9dxaNyAO+-TJ6 z`OVUzP`u85Sk8!xZV?2m1n(@?89NJHJA)fWTa@<5`z%pt+x>noVYJpy(eEq>uf9X4 z1`$CVv`!3OMhO;g_KB`hOsuQ^26D1$WnI3xccbF z0q$(ntci(qX6kZy^3Ajv)1j5i0cCn|4{2u*47{%ro~PxY*|q9@4i#ePHax36h@oSr zbu%Wu**+`5RJAmKp%odhoVB12ILhld1kody>e;-?+w;CVb3*e8IK1Tbjt8BeIiCet zH6Y~D6P!D-P%kIjd2ss=SCM8#YM6XE8&uiG<~e1Z)=-heKd-d`0q61wXu$yr)+ZO0 z;p?2uP6aIJREH-Jq_471X(1q8K%?Q|0rA!2tU89$1vX0y2n2yXgx^8?y*_;I`DmG} z6E_%woQPa`XF5@@gHdu#c@ZE`d(dc@7hCNItsnc8?APq^Bo?H#f*uiYP4bJ}YR0rj zlVGT69YNc<)BxUh$iS9EWM2I^@2$7TNVOxbqxOC=xV;ks=KPpP9I7|Er?G-V%FYD5 zb>WcboOwBzpau09=I>cQXJ$|0!ekel=I@{LOb60V#$Q{~9em?+T@>IUpPwL5^ug?J zoRDcbCy{l|{g{BzIG+A|ox&nkQ#d19pT#*Qxv>&L#N*$0%b^&p=Kv%#AV?`*{VnW=%Xd%G>#^ z8fm^?2?9Ki<4WSFt;#2Ctx9aN^b)?e?!4_;;-vj^uSZ|O@qY>gy?>B~`Tt|z{`SKJ zfI1&7(?nxgFY%TrvVrJUu#O4XWF&VMu)UNZPJpp0+0UbdJ#d_%&mdy3@{!Z)B&D1` zBqvQh;#nR`N#m3bI4&cdJ1eD*~gCakbu`ck&>t9uEbEuVt)1lN@{3wH9I_h0MfvooSsR|{#& ztRQg7WbuNlr-B!N?IA+bdXV&v?)huZJ~sXH(a^Z*-p?r3oiWb48?c5zu`C2lROFSmMB)ij7@JOI5wRw)AAi?4*P5XF zMT38{h^{2HjkoQsd8X6XoK!NpfBRH28QZ=Vg0d&-wA6g`y=!QW??-c+`PxaY(Eyvn z(-s=36Xg4KJ*7y322}4$N%>mprkGB^)I1}^GS&AR%lUGT0{f+)lkb_ebyd$)<)jjh zeoOD~H9zXua;)SGgUkueG*f|c!g8_frO!NnCyKc;o(p6tVxNH4_TiyFiJraJnigp1 z06W5qAtf0556UU1%6K?Coz39c9@e0}%LI z^o2IN6QJ0>^4fEJu679WqDVk?$=XY-*yX=OoDM+{(Z}gb{)$uu=fwU!({S$_`xhFd zDXmut%-r3b1=u2V(z|?oi+$;{92d@BR&eQl^w4z%sHNfe@_2$C9klebok#~7MR1Eh zw=9g0#Ot4B@E-OIB95cJQOOmp%fa(DwNF*t?r`I^;rzXM6g@|F{_9`=mK?F;%fE{$ zNJM&0gsN97mWLgm&EU{XmQyQ=RnC@6212XdpM!wNeRp(}%znlp#g0Hg*9!~p>owsl z>SE@CfT#{+Zk4!8gk*!XHc-}T34xV12%vbK&U^}KvWm_aLj-#}d54JSIs_^XRHok5q!6zHw+mn(IUWft0TxgF$X!K79^NB6MZ5e$-mj2TFCODoCjWS|+l zuvWxuOT{h2J<;6?R^P;0BS)K5(H`g4d1?jX`9+SeR)$p21RTihM}{|~-2&vd0U5y* zfa*2!G#+|E<&!gA?2LS?fv&S3Pe+d(P;xxBpT1Y@qVWJ>%}1?boY^)(wrPo@Q`R(J z4emJZHfS^+a%NKXC}oHTAzoUaSB?~1G7KONIVwf67QBX3kI4U2!~!jz$14~b%meEp z8KlI5F?fWRPK!B>iB3q-ZX7cR;?o6@s=_nRI*ZH~BcpeH?~!dYsnGNUf2>p8Von(8 z`CTpO&b_WGQsm5sbEhgPRrE7jx4Qc!{yYD7j#zkT)Q1xn$Hd@LaLnfw{4F`6a@b~Lw{9v=2~k6@j?-9J6ejs>$2R;ZH7u5ym3L#S zjNLS>y_^J+>hR*_ZD3{znB0+Ir$y54da&OL{ehr#go9;9Fl6uZo{-n}tS~ri>)Nj? zv7&=y%h-MWIn?%VKR?*6rnW(*ohdYsDGo2)hR-|xbFI$1vGc7Ma_qC5)9O}zv`G>m z!Wz0-*m41ZfclCO}Ax^icvRIKPaxqsd@rpYAv*om19#cDQ(aZa;Ek z(6bZQ-o?I)KTQ}kJR|*rGZ-9TS-gP&+)AR+iW|#j4?>n|MgDyUkZKpE@;BfT>LTin zht~s;WCfm~CNxH+Fno4SpeC)git#Ys`y@n8A9f?`Wjnhu4>soz#sIqYAp?%33#)%YBQm_<)HINUsLI<=?~ z8=h-D9wz5HIJX>b#3O9v@ZU^dYi!?DU6nduF!~n~bvME|A10&o1ydqwU zg6k8r{@Ga9gkYBHQ|!FXqQPP>Z&ZIb<-x`3#d3Ghv_3P=DVTr#Txaswu7JfFIS>d$ z%)sQOi|5u^y@gJdCp?o#m&LwkP7%&5^1JAZWwKLn@ukC~H$cy8J$lx-ACPDGm#l3R zyq5qZ0h)oGIC{Wmb^v?NLS205F(UB*7$N5ZK?WH=h8~#M=ehWV0ydX1B_2% z8@a-u4(u-IY-2s|k@ZSe^8;^D+Uy_htXi;IreCWUe7chb;F!F`4<242t>SmrohM{LLIAlBW~|eL zM9A8PGJ*pjB_NV@eq)A>H|Q#DZYDOB73d&@W`f>Ad#x)R0woF)j|f>zPR|&1;N2g0 zI}d(-{nS|%Gp1&n(hW)?^-CC-nA^Y@0pbOhJ|`f1Dsb`q>&zpPc^J?c2^662O^jtt z&+X-0_U^SeYxdPj2*I6>Py2suj_EZJI?i{Jp>};a0YC#y6v%omffmKZ!@d!yy7_<^ z3LHqlCY(1YpIqCu*5IZ?EB}i0a2B$b!qm$_NkQo`_ZkAMI!C(N<2cY?IM068wsdyx z2O@dssm>#SL#`e6!hkZ@_KFoLBH!{L_$k&w=+A;1{60M5R$$Dp*-B)QqJBw+g&tZZ zZJ?sl^nwz(Gpy8$sjR;F8Ys2m8V znvj6NpoY?4ftqQBrAn`Wibz@oHs<;4|GdL&CCtu?7zder0fRi?wM!aK+wrVOk{MGo zt79OTxwL9&`v`QDtKkS)cug0qwv~`zt|A&Y!LEp{1GbDgEehs=20SO3ZK3ytA*EyJ zgr;F(`f*_C(nXe~GKgD!wPglnhm%Rp{w!9Zfb|z}oPe(iy| z9g$0qUzI@p=@}z8?K%idXL%iL4T1)q_%PlKxNDzt!E!3Ew1hMKkGwbnqczrlrnY9B z!|sbcg>w$r)k!gJZ7lnT$DG42W64CVfXoDSMA!P?`A3IIo$sgAD7aznsblt3AnBZ= z$e5@RR*>jyr1KqWwBoD|vDNrcl~=7-q6ucEs}v+B zsCQpy1rh{7Qoe#3AtYkCeH(2EQRohY<$6d5kMTnpIeBW2kw2gn@P^qT_X7j}ZC@5{ zBjmHa1?Ogs-P#MpONG{Gfs{6vbX?@J%()}7{L-Es-tF8fEV2GbMzD}gR_n>%vD8DL zGcw3FSnbQaM!)zBt~kRE9+ab5RodQ_SvybWq_bvsD9s~>t@ktgP*Hayo7Xdy{7^dB zV}j{-pM%9O>8Q@Gqz``EqB(X>d&w^?@&=ADeZxMOK-o?R$+L!bT}9Sv)TYqvs~;b;&pDJttvB4-!YCeYJP@ z;`yF^A-Su4j)PUYe=_>Lxmu+Q`&lN2e(Xr}lXUIRpT97P4kn473GOw4z?s2*&m?Df z#(l3};sjXJoas0`Nqmh!_uOJCn3taV|_3U&o_rqd(#tJ#?O;%yXl|@Y%yPaaj z-wqVd6-^3iB?ACiD&wo;X|I^ao0tj)2InWgd@;R)g>X{F2e1PVQ(-Vz&bYo<9^FRt zocO-rm^?`}u2PgpGmd#aNjDej(WOT~8;i@i`nGF7S0{G=X8k_4FprF;u0mD30zM3E zEj^S@Am3lV6Lgt9%gTtJ{C-w>C#4x^XE(NCNAiuZ8|_cR%xZZn*1To2Uk4B)(cs zh%;xc*L|FdTd@HMpH;iCacEs7r>#8`&wxgPb(zE;(1HnZ^GHzMGkyda`KhwzhXmYN zQ|9J`4raVfpzV0>B;5Eq=?@dnbV*I?J1}e?bCR;Ohzpa@52*K;8sdjRqJ~?DKbZaa z0qvi)?D^L}|Be@u2IUN*C4OrHh-6hG4|iNiq*sdxdSyWT=efwHG*O%%t8#mz58QYh~=7(?O8@4nfYf*U8kr`W}=zL0p1-YRl}1I-m1n(57xV;AIq8M zCA$ZI<`biXpbR1}RXLt1gM(FUU6Z@Aspbj;5K$ai+uho%P=@Qusqr%waQ`#ce?9# z*7F@Gg-jg|K#0}x;xJWzdmJv&Ckd=@>TE8X64 z99%=6&-n*k;rVejUcr}vB@+_5hjl(`%#kzVgYeoj!`<30*@Md9P74VJzT}u=yO2mR zoV^xGSBZWNIvd3eq@Vd6TyENeH(cvRe)irKEZT8*wdWEK#5rBCa_Qj;@fd`u;6Yz% z7~!K+)$%8;h_r~uzxN!lX*~bY~DH7 zxjoQx#*uII*+#Agn+whvN51C#W2a~WM|Ixm&+e7SVmb6ZEi>oY;2CHhPu0KJp;--i ztwHEqA#CY4(n#=Rl1ECn8*hIKfOI|{Mcb9oSaLE_vr`@DD~1FzqMUj;3$P5XCX7tj z*MAB;?c}ElN9vP1098G+5ukb8d>6e9TpleVy|ws}JQ$30835t!Rn|PYmPkp^sgZsv1A?JhP5)#S%s2**bPng=v;C=|oHcWM@?fw!q)(eO>0>+MdQ5;c zl`9=VC&m!e=e?y4WoE19{cL^Y^G%*g!n2=kKa#dhIMc__HH~AFQEYjm&vR~}g>q1= z5{c>rPeO=jZ_(mSo88iFhrEJ{)x5+UX>acGpNhD5`%20Cg#YEtjw3XGHvksfK%-=3 zRkCBBuM)I2Z3w&mLE;1U*{oU<8|T013%6yFLRHm6&r$rkeMl$h4zvOuFisg;rGcQ) zs}w1aC*Xs&4o_OcC6DK)b;qTrwy<)d!OkEb(Po?6vf4}D_HHNW1zI;Ij%;TVpy;C* z&GLSq>0%LA_lNJF_QgBd$$ES{eJfdWA@!tXi?L()+%1nspN#0}`qj?@xefnL zUp4Pfwm<7IK%-utN`D5J$}*mff6`{pJWk)&2IrL#!2M8cz}JvrS7KWd+^%!8V!Oki z)fvOWMQiZoS=IY{9@+NAYkRhj2tVWEqD_6AfGkzT7Ew*>Ktlaq73T@n=2R-e6Df0%ga1hdkGyC1Yy}6zuI0u zyiL~|lWDUPB&#o&xO(1STCIQ8*I!kTw{Iw2wQ%NZ76tSd=;pm(kP`M^zPgJSX8r3M z0j@eX)o%drdkQftpEIjGl&kuH%rm4qT`?fyhJ>PpnBjs3l{d+mZCsY+P zEgLp{i~@_}fkDZvmaeR)9-8y46V%ZGtl{J&VbRQEuFU~ADTo271xeu9T5E&=8Z)jiM z14(@-JLoE=2lWs#FZ^Nyx97LXCaz=VWXqlf)i~@jQfBCUUk9({yW37A829W)0$S6G zCvABmYta`NPWz>kBGd0{tYhXmC!6#6UeC)O+d$CnIdtP5!!VU7uwGz>Z6Z9#?;pR; zt{k~xV<^{OG=%xIVzo3S|DssZyfY(A7eN|gH;n?I+F)^osL#AA4_S`4EmE*lcpk*&4j-2+|sHyal`XdK~cLbZJ=PdO7$&ij-Y4Zq~f2mAiPTPM>h z@7MP}fE{ak;D7>SZo6B^DKMU>b9F&FqwOs;b$9W-++QH_ZBERC1C z?`J#~I(cUIv4JlbT5+__*d951pK`NZ4*1)LT&Q(uc!2tkSU>V+6L7KN@}ONjP9yR1 z#AJ9KC!MUpIl&T5X1fuCNO~SGUO3gQ&fsRyNc^0H2tD-fN5AxhezDVXUZ^aoJ#~oguS#gLN7}Qr#z=Ea2x6U$W}mzSF#NT9Qwt5gpH6ek2M? zzA{0wj@Rwtv_A0hNe=9Tt>t`2aDd{-^owM_G9at^jgPj~;&b9s%O&snmVI>`dr6Ex zW}QTzs#4#{E(!(-%e`@vW~T86tM}_B`Xmrix-`|YB7x^}Mbc+!n$Xosq+-eCLx3g9 z#H`?{z~PN69BecmDRye`-#q4VKqCeF87HtBpf)9w8Jm#c1dt z97$s3ESrCCLP)4f#WAPdrm#$Xl6%ZAo$nDC7nNv=S$t211I&4bbOje_P0jh%h z#!hEVo=y;DRnkJwE^Jx&PU31XGx{dJq6Q9!B%tSWcC>>>dItTfux|^KECXHj;Zx%?p?$0|Lvh^P z|CR?kaqPzmEX_J1l%KURMnQncIN$yvVJXicJ_(#HJdX#`mH)0uMq9={7;EHU*VMX< z^gZ@Qv4?S61GB|Avw&Y;KmIo@<|MGu!iWpd^79=WsnGKsoC6P<(6`z~5BZpDktA`(e6`e%0 zC@K4=PROLK;GGE|$5J*u=*EsjXZA2kUdKv+tg|g%jx8%R?BxN_s2;f#aaQoY`~uN154j=2zh8@Xti3wG$kd1k)&uDeX<*3;eXe^Cv@unl3?s z&ZBE!gAb_kj?ia4EEf#+VqMjcjl#4np>hNGkHn&&)7VVo=fcUt{$h)b(8$kmY&aOE zXJ(A(yUT3XShODS%H*xA7@B4P$KjiusGjpapv;?DNx4LYWN>Olq6(n+0FdEaF>#H= z&QzWv&}_5WGV~Q+5D&b06yFAgi?E_d+fI@CV<|d<>ueVweUz?(CYn^L98tDC&h6(J z_I&ZDM!)y#1btDt5}x>A(B;(*A_vkU<3D@P_t+@6oH3o&617a6d8wi$x)n5Lwqdr` zX;)_b;3_G~-O{rG_3WEjRjZmQS5A8_rVG=X<<=rLgP9AEvQ=LJ6c8i=-jQYA4mp0F zG5^vykJHc@!LWh~0Davv$MLF8Yr`)2@ae`H3DS|a0Jx%WK<4Ljw+B&B^>NT-YXQE( zE3YcJpA!^5&M-OT2(C$kII}g^&`C&#vGa{lO&6|Aru7_7n|DR&Jr7Avn`EQo!xxX! zAqP3!|J5i8pZ&PkTaHq#VfRCC*UeqO;+rwJd)9`9%2Nq&c-!|JqS)_qfY$hCo>@9~ zJH!}d$-JI%{eJ%SxrWbPDk}MmXV_Tu{unIJbx9tWAfBIdf>B3x4-cFscJ7Ii*m$!Z zzgfuyUB2*c_H;JRL7m;^!h6oo7sR;?jR-JMA>I$0;I^8n$G5#xr&k<8zzjw5u2LoT z1HE2B-!ScY#g$?r9$#+{KYITWtXK>T(Be&mz*uS$SazT*Di zsya$LpMt1m$LAbR28W7Mir9;k6WGh3U{{3(7OE?aAW_nEP&;mZw^MgjrwO-Y9nCv* z8cDC22mS6-X#{v43j>L+E0I-n7Ci*fTiGmb6t1K^_Qg)(BwrjobLhb|_t{Q}16lS+ zWb|X4^h(H+Z zcS5W6@ZAb<+8iUHQnYZN!P5-f|f=R(QV4ao$JffC3Oa_TN2wNb?dF%DK?Q(cwuoi(Fk!M6a4GgCvpfX$fXHfp%@y zQ>*PAd@C1eo9AcGD?<-Iqdjgbit1-7=`%>%^)`QH@2^Db@FIdXFj({q1YRH?vQiA1 zh)`;WZ~@lBhnTz;ZGG1@{IP6zS$$E(N-)dyJDkTbtQUYbVO6>kHG*V|ISUgn+dXZ` ztUu_dtS>5fM*11Au1_Gcj@9kgJ4M6THmo!4`Kzig>#uGldTz)j_^UK}|I{YzSz{je zo$yKaTZIQ$FJp@6Z0|+v-g)Nu_KFcLuA-?$6Jxi}b|*cz)`jm4FKE?JeA3E z5L*S!OKrVJjKpSklg{`j#bKVQ}eh0=2&1#tpJi z;?%7&tUhz~!)~LJ2)&*18vYpT4wMXSH*kdjRNm+73xXz7TAONT5S5rRB)T01uMIwu zo~P7ZbXyBudkA+#^N4+qt~PsH>~erUYQ=3(2q^ zO!~I736>qI)pKU8#`@qhu){Jup>wbDX0It*=fN=<-aeNhJC{MRtRb9~;om5S0&`$N z?~i%1l3dS3b-||E1|4&U)}zN)v5$STbK~x9zF$-Yf*`2rh{la)g|^R8>i;JbNs-tFMekB^4`0t@=At%|b1yOocg#nT2tQRfeU zF7%mar5?di{u_Dk&)Q~nXolH^8q8CL6unbJr!sQR1uIUGGa{LIpkV-O2ZCqso&a5Xsa& zLT0zka~09j=SXFbh($J3^U-AxKkHy8clO6PV{}6u6R675{%I9rB*j?RowT6KQQEKZ z#lfrBTicaGg=tegE?UH6&cA74^t7NVnf&=J8Govn#_7hSi#du&@>AY$JJeFSq>7^@ z7d_r{DA@3<9f$lqhJ!ifPXky>cfn}Nz1qY&tmszng4w4W9qYXh>tVIRaOK)(zM-+Z zBtjLdO2D3{^{5fZ41+H1D{v^`p^dd0|C?AV;~@hmN7uPSp7`H>?BZ?fv1mQZ?ojfq z%LG3wA@h@N$Y}48S7HcnnFYm>}Vp;JD^ zUuO)bcOKh^0Kc1@pnA4L!)4fWVc3nqR(;q?3QqUbmOp0B@WJW9P||a}tir8qQ;%wwz}4O7p==lduq( zW|?Q(6#F-oq9Yq~esXlalLC;~YS|9Ql)Il4+Qd+qzYj^n*{1897;YW7Wsq>w5o!!> zG-&Fx`EH-uk87_Ia3T(IvLrX=l6FU|V>B^+RUbc!z<*fuv3GM7Dp#8Dna%~X)C>ICx`fQsZ#<6CzMa@}sx0#F z)i_<-&`|Nm*b}r3Qd+6wPOHxrPlT-8dbXNtw$s7m(OuDkcvm60KQrE35irnE`Df@A zcCTt+)Zkd_Vfq5xfsIDY5*(C{5IfM~z?K)_Q{vg!26u}-+Z@C$!1>Dwy{)H$c`_Hq z9kDmWV1J^Q&t0Orw<AY!Iv#l4$jwN0l)PJ!RhL1i?l208q_T0VZ0y&Uvam;N%fc zP^W2m8IBy5Unz+|KX!|3B+yX?)Nkqbxb~Aepai;bB6#~(Ht@83r$S%}JmEUvkA)S$ znfaT(uOGi&GK#So&)Bz>V!9V>_sGPCI~2SEHTEf=;|GdeR)8goX(IeNXS|*Pwz_fd zB`?{gv(M!jy% zjw2Wm5eH&6CgNr76<(^OCQXO z77nPwqtcttaE?PPHk4uu7l(&2hLN*@dD*CgTjYt$Tq9dtHQ~L~xK33>vrvw65E)5b z&kLMoyKF@F_x72OuO||~)gdUL={aAXhs(wTatO{$^8(H?paM*<3Y7t+JWHv;@0U#Y zpg7ZhBTBJ=b_Z8y0L!@`>z@WDGr-F8cgDGS-~IThZ@h4`qn^Lu1=@q?fYAhXnN7qB z-}0a3y7hC79*NY%c+@B{eg_8ysG2#40HkRafT+K#eG$;ooFKREn_=ea!CAt)C%W?$thR%N5#5lt_>it>;G}?N)DP&FQvZ8zF-FV>Q_K! z9|wkq>cbOd{B-VRWrxp8o)Cpx$u)hJUhW#~u^yf<9@o&*J?uOSt)0y~1t(Ctb!zqN z{H3;Eb-v}CFeLj#-Ts)W%EO;<^wksF_K)V7afTOzFi2~ecc3PM2-^oOov5*}MV@7= zIe64;_0S)kImO`JpX_n})JpgoQRBvE*cEPri- z!pZRc$r&K$tYv)yN~G3Q{AmwG@27guD*^qGy=6A2l8TZ5s8(*H(`}2@CVPT*&nisA zR#EtA|J$sgWnZ9WaA_4pAr=b_!k%)%h3zb#pH_dMu)p+!%56rV|hrWkloFuJk@V z%!0kU@X@rNp1)n`-@UIL9Md0(Z%lZcb*Z46;8gYWz=qOB?HR9b*Qzqfdt|Z9bG3qI zLJL$8#3Fvr{ogEi1k!HvZX9mb@Zg;sVfj%px`S|m4#1QEP5OKXK)sjo{UYe zs&FY6+jAii@Qj6Ijc)|lTJ<&Of5|C~^ShD^MT`u4;&LHwUZqbB!R_d{jI^?;ekPsO zbK2>CU9H4+GOZPAMQS|;^c{qbLJOs7+S*;-+H)?XvW;N6Ib0e$NOA_gs@MtKaPuNv5fj~KjFRIv9Wn2y2;zm=-CTnEa)^7&=OJ#BTj zWz$Rl&!)=kM_b0=joZa+nrWh6eK{H(f+q3fnzlVJBtjJLA(>|#m9g)5QIn>MNimBj(3H|NL7t zWyf~`zMnD!Rv9Jsx} zc(Nlsyms6o0~Qx=tX`+eq_Cs^%JNWykJ1hH6I?7OC#pdN=<{C9W2rsJDWr^5@nxUq z@Af+Nr#p-DZT{&moKqH15PDh)O5pTY&;23@zW5SESQP|5spxKB_CupMGaf68KL>)4Xi^>2G6U8-CLUQDb&S&5pAz4xcF??+#$L!4m*YofqXNSPu+9pu#5b z8mjoQ0^*fBajcQp(AbmImavas@m;U`B6~s0R8vchvU75oGZ0Xpk)r#IxiR$>*8&_I^!!yi|bKp|{%3 zgbZ$A)AhF&ON@+d{7j+d2Qpy{ldWFLsxZ23q$XL7wB0z&eA=Gf3l7m?29RX^=eA6d z8)WbgKjuo0b*gtdw^R~Co;IM-InH@sa`xu6y3Tk%W4N6>avBCzC`g-NxRYpnVDdcW z@c2^|r%KhD1a7Z2*FNXvI7sEz6v<*g(@V<62>@Bjb-453v>!80HsuByiWpyuZ5?E> zw%a660`S&r-GiNhO~-&8>`V8%dxU-*6tsgNd=`*{A)@zx$inTK=`~{q)Acw0fjWQV1U>tt5+l$FD zy4oU3Z|DpoR8mBS=sl_WJ{y5^tF%rDd0*|qht|Q*8UBScV8GEHGH>+TCf_(2C}W0G z-Lw~{GI-VrR}+ZxXY;x@bK2#m-#%&VjX;{cZYEn<^Ji{mc6;xKTyGI5d;IWq(l=X*H_#or_z0XBM-R=aSS|8mB!@zgAj#XWmyAAb&#{LDjtE zh>0E@u9lrbQrW?$njlR&sht0lg_|Ywnm5_7ZSEJ-=FtnM>KTKjKaVkiqpZVjX&4{P zlAH9~6{q@Vf<(Z^4#F*zt97`BG!;Z)3_S=}#kk3g!3eLC$FLJBe`@Y-km!D@ZAZe< zIuh*rc7zf{V1c~hXbC=2sAmq1Vg~q#()J|1lqh9a8wLyh&;u%QNO5j9v4j)|nu;hR zG2_BOUO|t@TFqMy#6=`tiFTnv#2dY71Ef7n7-<=1*VF3};T%8LpXr35|DIy6HG1`G5<|T zZV(HY-jt&%0tG2g#&HBGT=0ne|M*ME;DXkcrIqAW8s~dBQ7n`Q%;`&kz@{UI#`-6` z9{O768|bCTdJW)*;_Fsb4kh?=&3I|UD=TU_o^lyeCbt1Yqj7$}0=ikH5e8X57}u-- za+a!0LIHI~ytMDkR*ECqZay1GbfV_wv}LG6q#RD|k>SkTunx&si+vvbSS`{Ni6VX9OVQ1I!r- zL7SzA07n`)1@7mmLIXAR2Q1*6KwfIzi}flpw3_iT#=9`Rme^~}k2T9?GO zuwH=ExFhp7ofi|7WXEtlLsZ}>J(4B!p7pVF+w2oxPcpnwZRxgi=A{I>HF9@&O(M%Y zaQ3SjIfms4Ky@CQFWT4t>{6=g%0ZT;CktHI&G(Ov*3KA@B!NLsfWdLVdgPAQ;?LDS zH0O)>T!*%e8S!PwIiP0FPBH=YOpO43;peokvq7ZxY<3Zk3f-H?k@FDUw`q>Fg9KX&< z1G)a<7{D8qk_Nvwuc{{s!8&%b<4TN@3{ga#zU8rEV7s&EaN2J4~Lb8m+o%RFdt=&uEd5o z^vDlLemQb}5*iFyy@#Rav)7t6ZH?GR_LaDOe_NUv4<$%}nU9Q)QZNqeT`8R59ap($Z@teO-tdmh8Co#bf zFbRvh-Y(PiI|(t(2qt1yCR#miVGHT+B%Nxqf}NXIyTuxJlb0%UT(L3Rc%2Sczx@*s+P(g#At~iCuw0HA(QU)2aWPLl1lzg#5*#wNQoJlWQm2g_W78> zN9=Cq`AW|9qq@$%-!k2M0PmSFzXL{<%@D8)M+b-GOh-{b2ZvnkE@z!&eHCy)VsAhjm(>u1X zd5gTZL!eyC3weQ8E^mCF4IKUBfB*USm}?#g9>59h!4q_Oo2(4&7~8|!lTy&b8xX;3 z@K@$dc4w3Y8TnqOE>r_Z7BF2BE=-+Fbh5XCW&tr#fC+)Y%X0}VOZGTtwNA6EN$eT} zGB%mP6@Uk3dz>TLT=$$-HgxpC4gnf??)5hf zwaUO*F9t<@){Z(?!48?V?Te?`3jR)rEd(;M1Q$bDFpRu&hAN#Crt zkg$91!!K&L^V6os;m7oapR179Xoi?Id(JiCnL`E($61Uue_DqC_;cO3CI;}sAEt3T z4{9V(JIBccR*8%OxWCm!U_h?-dR_hAablCcp7F)`Zbvvk*}Z>sYUcn<(L^^fbDZ&P z|W`r)=caD9y^7(7laN>K^~@wtqFw$&=Zy%PHc0^7DKqPQhIJJKI?XWKlhc z{jRalu3Q~Kb^OYTgVQyvmCUeRC4SCM2o9OEgowVp-r>DeTD82sOFITnXcX%{!Ju2l z6GIi}{9N>ac3#Anper4JG=UdXmf7jOdoK_EGm z&M`X^v~uwMbbLGII%&F2oWnZb+FNLI2ONexfWiao?O@Ic{nI=u;V!1rn+wQ!L(Nc*QYGc z&mE##vk1O__{Qh1X@8EawnGh%p@C|?lVi&n!5SSJkf{baQ&oHL$TrbffFXF0&^o_% zOp|^D|gC zjikE4_JTVR)EOT02(;u8ZO^SVnel8swv6cNiA$mzr_yGh8#T5N@H*_IaaxF9f-UBc zQBif&CxI|+Uv^bVFx4y(un`09PSlGF%2bowu=q(*h3xj5eP-s4_T$DBmU?&VFhAJm zd&WjO*t!*VwV_OZk`dXnJ8{taVJ8s05NX5Kb&So5fI*&=SI%Vno_)q@=W4uAnxhkH zhW!27_mKyZ;Y>b#xsQ-II6z5w8>KdB*UA9t@U(U7naK(6Xb+M=fHk&`T~2z~Fs6R% zU7e9?9X;nW)P5&atk0mWCgMzG;4StM*T5`04!~9nLGcquulIR3cV&k8Xs-xBK}FzavpFYQ1)4*RL{cLbJr;3}nHciYinqP@eg0xy-%hIbx8l zV`Fb*AEz_6!FZ6qNOMJ2fV>8}D@fcteXpQ(cB&>a)ax7~CsKX#6-KTqP^SAlq%I2+ z;^{Bo&~>&OKQsX-p`dLGHKXOurPKR+pD}dKDQgAQqUi)TX|ojzE}lZNXVoVC6RwY( z-71~Yt{dHNp6}a|@{?{FD;P(6imjAk6L!s&2)NePyuX9kq@Qh*zpi&OSEwX z$gIL6w6s=vFVqLXZ!5-re5OzA$Kn&eO}x7*IqdLal~RYdG9oI}lJVDbMs4?L7GGP68rBnC040PL-l?5Y470?~2A}AEt$osnp8I?L_rpidA6gw#@LmkiZZg z(~Sx)l&6V1>d07*(HwF-w$a?-9d>Z0=O|K+A6*<-sXS-}2L?0ZY>6-eObzJ0WZVCx z4OT=dc^*df@Z6nXS3dSrljUn&D`#hOrQjYu5sYHxc1D;8&qKq9PJcd>hVw=UaS+t< z*=xk>UWlRDCy4$__x`@HC>0~Iwep8u9mrBcs&X%vWvhZeL$AYc#}TN}#V&m=e=39A zZj3x^--74Ct{NT!0%0C>WVdY-IC&=6stVL+`Sreu5mv^`O{fG;iuc&1g`m4N>u$lo z)7q3QcB<=m9!tlax#)m-j9j{kKk?lBi*BExVIvOk|0h(YVX)wutKi-wr#MH(N zL%VIW?E~!%6}ke|6Qj~m!Lv$vif5_!N~gCD-#)6ICaBe_AZv&Q?;BRzw%h2@Rxw1L zdz*vrdynb9l|DCCzHH4nx6^Sc*AFf)b~5eG*0pVPa7s3%`#ku*L*5v(G#SUH42#PT=q<=2^ue4%j!Smpgaqm`zYhFzkAvDq#3-n?s#}5iwmUrgbk63Blq1KL=b2a(5;xy;$B1)+qKrk{ zsbmE`-D0mnH7S~asd5ZKgLn{)e|GN!xZ#2J_6 zV8ipaC-Qt?&{-uWYFk#$fA1hTM9jP&NrLNqPA&T*14l-<>e3`)nS}&)fWHwlrH8SH zMqlj2efxyBYExCd+Xg8jTFIV~=@%2vxowoGIjxcbC|^=vm^ zf%zoE86$Fx!3dU`Q4NmIVyDVzVJgK1d@t# z2G~xDI@d?eZLGA25PL;Qy680H$N7x^{PQ1>7o4s*RCUL3{d5S}T?kp%JQy$sSR$KZ zJ^OsuR!ex%%4k^Ssky9~praUA>e{R(8Yc{TSfMw_v*J8(2tx8FNYQLrW;~aVcvcY| za_lRqIRGFSfNurt|GEWJ707^|lE4B{dU3!98IZ&SqBR)gPhbMibGah!iOQdg3ycHa z;0Rnnb}lQLWdw%Xx@eh_@*zPcxQP7u~WT=GlA zoQw-S%QXD;7f_u_BpTNa+A0XKo^OG#xi5$0=Ey?4ovD%Uakd2e4O>ukKW1}QK)`~= zj#nEx`NEUCg&49e*V=UcvWrUv(GCFjS!*hD?>vJYcdF~=p=zFjtc=l5P8NpO7+`Ew zv-vp$aXxd%0Q?#|5PVu0G5C|}h7VHVLttcO%i{bK${{NKIAt9_vNIWAt(9QTuCs&1 zavZ^t^Sox8lIYU90rDw^0cejwB5+LJoigb>pN1Ud9_Y%@rh0)~QaL=?vX&|h0$UEz zP|6XpF_4*5K>D@gZX3FbFAM}k@C34HL6oJgF<~c}N&I|9J@z4!h|Y#{3JI#;#_v`m zD9fuXK@XyBnwSXEwGTR2XFE6uQ78wJj8oxI1dZ|VOW;g+r)%u&Pvex$tGRCVeY*T$ zFqV3#H+YPFgaKBa)w2T*TCWv1iGb|cHp-m)^=qmKUtowq2+Csb>EmC_xrItFpwlS{ zG6LboN35hf*Z!>G0)-WQFCIJXBqQ1@d(ZoSwhf|5#R0#ukDXxBCi=;6U-+OI?(wvq zO0d1|&ok`Un>}iEU!3Bq>Y0FkH`^k?hjGsz#D<{tVYWI`5Ky-6w!wYYH)jZ$dF*%r zUNwsKFi%$J*VoVAa!{zhob9et=_B5KhB-$NP3XpzkZ~>rhkFXb*gjk7I1GQB_LIjM z|D4lccgOKdOknGbQ2J`1LU|5Qw}B>oKcqs_L}RmZw*$tskPa`?}9)bZs&lxyA$JE$bxFD55$}~;Dpx4m3WDR~CE~a;D7q^{0!3n=#j-vJiDK?W} z9MNf78UBeJO^^4|Y|$A58>a7KDRAYq3_9ywJM>&5JEJoMjFG)!JdvaypLZD^V1q90 zxdY%&ph~mEK3?!`X55>fvR~gqtbG}pi z7u zhYElL2iH3F9&dIi0KC{XZ@6k#*u1S&g1z-U`l%_)S zS>qp(5z9AiTeuHs6Es0fxvjk?L0bk4KjVe~4F+PgpAo=~>=KA2gDBG~4H<~%ndHC)9Lc0sAd~g)_3+`6 zjHiSGJ^t)rC0`=$-9AOd3;wM%N*{GFd*M>)(1cU$2ZB{raCE*yj^vpUrpmfC2+)}# zQy@seXyK~o3yCdWg}iw2F~OxuQJcLg&;a_JC2K`m3y+zz|UKxx8v&$elZFcO~ztmlWsC1%ey$)C^BZlUpkRjjQD(UKD??tk_ zF7}dKNV`Zo;uR-6Sv*tJJdu95q^XVov184)hX*IJQyKyY8l<}GOIE9T~AoJ701#{M8qUYh@ z8ooi5jTp;C48#N8K4ACo$^oAX7g6F>XBn4OgxRUy;OK0tv*9g-AQOy(;2fO#%bxYf zVcU2*^FpAl_(@JVux3j0M`?Y1{X7w(2FOHy4eHGI$mkQ;dU)}f$T{$&PLQF4!Q`evwk%7luyb~YH(!~!;f2YRb9Il~ z{QO@I5gzDX9sG=i#|%H8{&Es*JSWzZ^Xtg5%9hx4NB{gvw%_!X{qglvK{N*zhE$Ay z9WMIi2CiL`RCTISEX!^zH{%$(eu8P=SCxGOV&~bXJ%p>;$}E#85UmcGc2_vQoiUaN zHuY!3^Qn2O4LpCn%okT$_&IDb>iI5%+R0AQjcPup)@y zqC*}!LUL@rf`;T#pFml_nkaEY){3cRAYj`lg3G#!nqIhVZIPrn)4Lk18g6s{~>Mlbnwj?TrvNy21 z3ZiNwL#z=i+K1=hjOl9Gf6zA#GU9N0vq;88Tb-Q0Wm=6QerTPF7T%CaV{$t|Dpt8o ziZkaqzmlMoXIH@|c*T4fcZsj@`6BTOB^rrPM`k;~%phT_^-_IKI@Pp^F^09MlW03t zW=;^jSiNS2>?TK8?QhYdQ$E3LjqTK}=op&3rMDZ~L}p~;B?G0ypXtsav6b=G-8^`& zhD)goz6#oVrr#z-0^3AyH32aG5zy za)LkY#w6>dg?#O~$m;kYqgme_h-y?W-WkY_#OLT}w6p{+9a)F)t7I8zg5&aFm#+>i zT_3E^g2OIrG3MT4oh52Q@s&H@*-y#uu#|1s>gRdQPC_+3_w3p$$c^j5ahV(fl<^q? zV`A*H-yTEp3;EwqG)^FH_Kqac({lZP|M|~m`-3uNm@$JK%4&@)-}m_cpXBfW7Ok;ai55D zl^c<4&nYS;G~=WJjex~C`Jsg!4^iX*T+8)q{nYo}r(!mWE;Wt5foIR)BKS3wLz-C&sa6eQA_8Tz18F&O~_g-~L} zev%nl5AKDLP7G-~5^NL^3=|-u?1>rkgY9MGE41|jf#MwGPd~1 z@~ZL;5TO}S9f>{3UA8~$i9=JiK_ZXOhJG@7?7-3*ZaGH7G$s#d^$y6iDq=9FlLaih z)SAe99RP@K)ziVD-jF}9`f2_PFV^jRM5-G9$5!4Hu} zc^gU<4)7Qykyjm~fy(pKc4RxCS~Sc695SzTT@vgMxO00LS2Xs3?9!0-9l=Kk_VivW6J!ONRBXNDb&SAojj$PUEmuU{$p59q%&K zs12QYKb>(e43j-|W*LnDIvn`?le92#!X`TWwu?05eVp_&ivjN^gIiT1L(lhFcA9%C zV|p%1$=>>>RSnid(IK9zd6qIFOEjz2GdpzV#vuV8_G*5Uo?*tiod;UKbHB5?(gMR{ zv18}?L{$kgoW{xWc!sMNr^ox_7iTccttT7|kgU{MKI7~@RMn3Cto}|7pq+Z+70AC7 z)-60@XVExcPD?m#;0b*B`K14|jCxywM9-2b%P$#;+EKUK@o2E-X~kiqIu7TN@5}k* z!@HjgrpJ?Lsxs>LX~i&Ys9bICIEOPJkBZA`eYi2lD;pAS)&cMEK{SI9MUq)^(^iX*f zqtOFE;zh%D4x*|ZhAT63@VuYv5E5kN4^&-Prl6{lv^-ld&gn-6!LJe>=XE_r9H-c? z!PO^Gi+QDApEM7XiAL$gYwPN=RzBCh%J|TpJDAT96)mu1PaK-J>QeAI@|aF^VUZJ@ zux`76WV_NuzC9ggH0wp1$})Q)T3xrb;S?)3>^ zyy#9X%B44EPCh%Np6v3lb!Kj;*dKRko@<7<-s&HW&{?Hu~5<~Zkr=?3$#izQ`RX z&Ea19;5FXiiQ2v(@vbrCbt z;XJ+WoX%{qzahSy`Uof&$>#~;gjRuDus4w{l(WFR)>UW*TfPDfrW%hnH;&E-%_RG) zK8wBRrf+yxG)PGq`2Xz3YmlFMW8__v#_EID`qN)595GMz9POVnR)&4Gk{2}!S1xg{ zE=+8nX~czOh}W;lM)phCe@yx{E0`%*4q6%?d)Mu0m^>Lafj^SZgWnfzM{n%q_4ODQ z{YOrXtzwST)-PI$e$d)VV_=r`r+Ym|g(U?%qSis2B+f`YCfE~F1ICR#i0T@wVa}Gm zFim7igg>y?N;kn+>6-vn@;I7^(7<8?T(}?l%lpyFZ&x0|#}y0?KhBDe6qEn>=U@MU zm0>|CCm@)@ixdT5!3d(vB6u>CrEva^Q3R(n$UK|R%%O{jXJf^cySrT8cd|PjnH9sc zRCYPl;gGI@3^U1shE7>VsX;_!P7~-WA|B_z9XwuVJx|qFUQZq}Ia{f)H1h5bq@WR`5EAW`pB#w$ag45NAi;4v^FU zaeEQ%o)t+_HQ=0(6K2L*;N3+hXlrlK7!@hs-5^G!4MT79!$l#B+51igCBxavQ1Uz& z95q-Nrf1f0fyA`lfKZ7I(Q|W7MluWrXEF|rYCYpWsnVV0h9F1l2Crq5rPsnVo2rxY zlH0W8BnSfq27|ERa~}k8meD-H>=xzk?!l!GJP%BiO%a0)J3jA2fZ>(p4_>hG7v~2M zZgJ^$tW8#m`;U{CZa8RU?Tq&-W}iu*)!*O<)j@fdhBX;;Qj$2UyqRqTb){`P=t3W1 zBnvP1AD$LF%my6&GwYjmA}@8>rR*9E@|jO3>)#GI?uA<86?F3Xm1xVUly_$G*{h62 z%f8}5F)GRnZ4Y@RHV7!NI;IBs1uo8m>Md{pWy>~z&s~t*0b)NY$#uqs#y4$=e7XDN zBPb-Gd>muiAN$cWFJ@fj{6IOOVf>gna~6PG+pHen)Y)~G&3$#6Qr>kPqG(L^#S%6Q zf_xiTjhsDgcxHW8uXCQ)W8yeLQ|@)0`Oo|Ys4Jip8mOUDtkd=zrjgDQ27=apd?P$N z9Zikm4rkWa-G_f%H;!1129W#hnS06l-E-E{q1ULHvkJ3!2*$ZWfufWs@}y}l_rILl`U zIZIFv&&o4+3^^Tf9=^8qy3fb(yDHZlul(P`!SIm{wnYK##)1cNuaBDWQf z28+Qlw{TkniVgO{aT`n=Epfg(LDVFs6u(uEf5Q&L+FVBHnQk0S3c9ZINmqmhm3;e@ zis3^9f)716Any?spYQ!);5JW?9Kwkwl_Sf)G0#W{z!5D!FrXWt>9B{#E*&WRJWd_R zS>s<b?pO<$NvEjq%#0yY-b587J88wxJeSr2spR zd|!17m?mw5H7`wcd>;0`nqKR$suQ$tBjt5H+h^Z8VD#K=yZan6x8;@7 z!MQFpne+6v&*1Df?eSG5*mciZt?C@KCWaGoM5Y~J=3Av>Sh$z?@x1yPNDDq2k2bFN zpfX0Q!p!k9d3ZTh2j?FK9nBl?-&p>pt*$-~Zb$1o`bN&Unw(iZ2RC%=n~sAHP4{;p zYVu-@iZ+gP*9ced^lX&MU2;&*m{>{5!~{$Tq@B8WP#edDRJzisNcD85$TY#(%%fw` zx{!6Ee!tISv8+s$XY5sAbqLt(+o9juquRoZug$oGzzIA-8>XOC!>QV*>Q1~5v%qgH zE^YEe$G|0PLLQyh4F@?90k?@b=c=BsG?7#7vyUw}dt7I>cdzyoDi~3@meH6<-2e!F z9P7)#t?j4@wml=zT}d+rN^^{5??k5I`9MNL4pv_N^(T_8m?+Nx+@{5` z8O(!d7tcM4y|Hm@sm;%Ja9ByLV=(p_RCV?a&j?R44+UNTmz%i)85;z#qd&S`G~Mc= zx!TDKtFkE5i_}kGzsm^!sghjUWrX+hX9umw7eO3=zYsdWZT0KTeyDA)Zn}NFXXFZS zrb5osH4Zv|_k2>{&*%aGd9WZus?~qMRX;W!E`wcb6CJ~h1Ij(O0pt02yROw$=&r-jC_XBMt+=>{Pl7i_p z+YJ`yOdm2i0(dH44@mHuESf<( z1K#clIMUM&4F=F$()rsFxB|!KiK>scVD&qpDCh4h;7S?7>hEV9IqOGrmV#u4!rBu$ z;k~w+Q(Jp@R#r9xa8gOAf6&Pta%^sLg|st%!g*QS_UulOP&C+bWs3onYrCWt?CVju zV_o+9jCttU;I>s>U5`;ZU8`L&uU4>{ti@z% zcmGoPBAz{Qw=)Qz)qt}4WwiP2rBlzK`yzRNQsA%tSELVQ2%02Zjs5cm4Ha#5`nw-h zg23V=&C^w7(aYx@KfiwYOaktsrNwbdnl`32EHhzdMF5ft8o^a7B&GR~yNu z*Pp+J7{jw_+tb(LuO1#HD?`6_NV1m99TGTJ^>TsjOYc~1<-j; zvWnqFteO|u(1d#+=LoRnh2CQ$!gd67`Weq}N2#hegIAAC*ulyP^8Pv*@#m-;?T@V- zbi&tg+lrMk`WWCy2Bch!9FzT3?wN{3(|kr17^P82-yD7FKqEymXueN8^R&2RkI{r1mIUBP!7pDHPSd*)#-Y};AJVGT_W}zY+7_(} z{`Xl7W+uCJ@3VQ+csgyuV=rkPwGG=YB8%SpsV6egLNeb;ltUB9#11LUYNje&*iIuE zddp(hN#lWeJxvrzpcHM8uP>M>xgN_ZYdPXm+~&Zz14Noz&xIb{(+(>hO2=v26T(#i zs_KtAw5<#GSvqBtO~VU|aMO`MXSoyo)uGpqu+FUM*;IKQDo&Q{4V*{Sb#|a_iM%GJ z=T=AU%D+7GR3Db;RyOy-7hJ>ouWBc2v*jCLHRiSzBztp!D3e|wa~Ocra{H{lV0KHA z1Q8gRV&a;TiV(>2d5w#Hfoo`=*50$s?7ug*rOae-h}BQS67dwawVH zUSxDKxJ)EJvuN4-XgQBIWth)WU*-4!)8*$fe}wmYa}vkWd7{;e@d2&Odeca&hvrdD zY}n!1Ki5izhrAX&+Qfmr$Up6c_sJNbYGX&H zb~PWK2{|7dF3eS2@O6~u*sPS3_z!$}mgQ=>D<8zt>+tPw?=$fqd=lhV_%620yJbW% zRcT~bb59Hd)rS%MK2dZY{y$c{OMrT?*(M#OV+q=LIe3j;InKw$nfR0NUkP?bONP>U7oyHME4EPK4%E*7+L^ z#}+bOHf>_F44$5&57e0mtJ_Vo19r5xqxuTzns?arX%G{|u#`wlXd83q7lPDFHY{_b<^on2jOfBu`Ek5HuP zHENK(=HF~We-@*2^`C}7p_46KwWV2($)pUF$t7ukA z(l>P9wJaF++K*x1ps38%fxU~U-=$6s8)RUT4g@a9Sc5z zt~fUD!+8#j&Pe>UecGUU+8bG)Bf~E&w82by5un^X&;x1}2(_knHuiaqwH~Tz>>yV= zBdYfa7{cJD>W`spAga1C9SH0_&9X⁣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 (ServerStatus, Vec) { let usage = log .read(&config.routing_log, Local::now().date_naive()) diff --git a/crates/switchyard-menubar/src/config.rs b/crates/switchyard-menubar/src/config.rs index 8b29b4b6ac..4aac3ee8b8 100644 --- a/crates/switchyard-menubar/src/config.rs +++ b/crates/switchyard-menubar/src/config.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Menu bar settings, read from `~/.switchyard/menubar.toml`. +//! This module reads app settings from `~/.switchyard/menubar.toml`. use std::path::{Path, PathBuf}; @@ -9,24 +9,24 @@ use serde::Deserialize; use crate::pricing::PriceTable; -/// Everything the menu bar needs to find the server and price its traffic. +/// Config stores the settings the apps use to find the server and estimate costs. /// Missing keys fall back to [`Config::default`]. #[derive(Clone, Debug, Deserialize)] #[serde(default, deny_unknown_fields)] pub struct Config { - /// Base URL the server listens on, used for the health check. + /// This field sets the server base URL used for health checks. pub server_url: String, - /// JSONL file the server appends routing records to. + /// This field names the JSONL file where the server appends routing records. pub routing_log: PathBuf, - /// Server TOML, opened by the "Open server config" menu item. + /// This field names the server TOML file opened by "Open server config". pub config_file: PathBuf, - /// LaunchAgent label used to restart the server. + /// This field names the LaunchAgent used to restart the server. pub launchd_label: String, - /// How often the menu contents are recomputed. + /// This field sets the usage refresh interval in seconds. pub refresh_seconds: u64, - /// Model the traffic is assumed to have used without Switchyard. + /// This field names the model used to estimate costs without routing. pub baseline_model: String, - /// Per-model rates. Dollar figures are hidden while a seen model is absent. + /// This field stores per-model rates; missing rates hide dollar figures. pub prices: PriceTable, } @@ -45,7 +45,7 @@ impl Default for Config { } impl Config { - /// Parses settings, falling back to defaults when the file is absent. + /// This function parses settings and uses defaults when the file is absent. pub fn load(path: &Path) -> Result { let mut config: Self = match std::fs::read_to_string(path) { Ok(text) => toml::from_str(&text) @@ -58,7 +58,7 @@ impl Config { Ok(config) } - /// Default settings path, `~/.switchyard/menubar.toml`. + /// This function returns the default settings path, `~/.switchyard/menubar.toml`. pub fn default_path() -> PathBuf { expand_home(Path::new("~/.switchyard/menubar.toml")) } @@ -72,7 +72,7 @@ pub fn validate_toml_file(path: &Path) -> Result<(), String> { Ok(()) } -/// Rewrites a leading `~`. Paths are written by hand in the settings file, +/// This function rewrites a leading `~`. Paths are written by hand in the settings file, /// where `~` is the natural way to spell a home path. pub fn expand_home(path: &Path) -> PathBuf { let home = std::env::var_os("HOME").map_or_else(|| PathBuf::from("."), PathBuf::from); diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs new file mode 100644 index 0000000000..240cd83f67 --- /dev/null +++ b/crates/switchyard-menubar/src/controller.rs @@ -0,0 +1,609 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Both frontends call these operations so validation stays independent of widgets. + +use crate::{ + accounts, app, + config::Config, + harness::{self, Harness}, + history, models, rollup, server, + server_config::{ALGORITHMS, Choice, Route, ServerConfig}, + sessions, + summary::Row, +}; +use serde::{Deserialize, Serialize}; +use serde_json::{Value, json}; +use std::path::PathBuf; + +#[derive(Debug, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)] +pub enum Action { + Editor { + generation: u64, + route: String, + algorithm: String, + }, + Apply { + generation: u64, + route: String, + algorithm: String, + choices: Vec, + }, + Models { + client: String, + refresh: bool, + key: Option, + }, + Install { + tool: Harness, + account: Option, + route: String, + id: String, + }, + Restore { + tool: Harness, + account: Option, + }, + AddAccount { + tool: Harness, + name: String, + }, + Launch { + tool: Harness, + account: Option, + route: String, + id: String, + project: String, + }, + Restart {}, + Update {}, + OpenConfig {}, +} + +#[derive(Serialize)] +pub struct Reply { + pub message: String, + pub data: Value, +} +impl Reply { + fn message(message: String) -> Self { + Self { + message, + data: Value::Null, + } + } +} + +pub struct Controller { + settings: PathBuf, + config: Config, + reader: rollup::Reader, + // The generation ties a draft to the server config file selected by the settings. + generation: u64, +} +impl Controller { + pub fn new(config: Config, settings: PathBuf) -> Self { + Self { + config, + settings, + reader: rollup::Reader::default(), + generation: 0, + } + } + fn reload(&mut self) -> Result<(), String> { + let config = Config::load(&self.settings)?; + if config.config_file != self.config.config_file { + self.generation += 1; + } + self.config = config; + Ok(()) + } + fn check_generation(&self, generation: u64) -> Result<(), String> { + if generation != self.generation { + return Err("The route changed or was removed. Refresh and choose it again.".into()); + } + Ok(()) + } + fn routes(&self) -> Result { + let text = std::fs::read_to_string(&self.config.config_file).map_err(|e| e.to_string())?; + ServerConfig::parse(&text).map_err(|_| { + "The server config contains invalid TOML. Open it in Settings to fix it.".into() + }) + } + pub fn snapshot(&mut self) -> Result { + self.reload()?; + let (_, summary) = app::refresh(&self.config, &mut self.reader); + let summary: Vec<_> = summary + .into_iter() + .map(|r| match r { + Row::Label(s) => s, + Row::Separator => String::new(), + }) + .collect(); + let mut errors = Vec::new(); + let mut routes = Vec::new(); + let mut clients = Vec::new(); + match self.routes() { + Ok(config) => { + for route in config.routes() { + let choices = config.choices(&route.key); + let models = choices + .iter() + .map(|c| format!("{} / {}", c.client, c.model)) + .collect::>() + .join(" → "); + routes.push(json!({"key": route.key, "id": route.id, "kind": route.kind, + "label": format!("{} · {} · {}", route.id, route.kind, models), "choices": choices, + "tiers": config.algorithm(&route.key).map(|a| config.roles(&route.key, a).iter().map(|r| r.tier.map(|t| format!("{t:?}"))).collect::>()), + "editable": true, "generated": config.generated_by("routes", &route.key)})); + } + clients = config.clients().iter().map(|c| json!({"name":c.name,"host":c.host(),"models":config.models_on(&c.name),"unlisted":models::unlisted(c),"accepts_key":!models::unlisted(c) && (c.forward_auth || c.api_key_env.is_some()),"note":models::missing_env(c).map(models::missing_env_note)})).collect(); + } + Err(e) => errors.push(e), + } + let history = history::load(&self.config.routing_log).unwrap_or_else(|e| { + errors.push(e); + history::History::default() + }); + let tools: Vec<_> = harness::HARNESSES.iter().map(|(tool,label)| { + let accounts: Vec<_> = accounts::list(*tool).into_iter().map(|(name,_)| name).collect(); + json!({"tool":tool,"label":label,"available":harness::binary(*tool).is_some(), + "status":harness::inspect(*tool,&harness::paths(*tool)).unwrap_or_else(|e| e),"accounts":accounts}) + }).collect(); + Ok( + json!({"generation":self.generation,"summary":summary,"routes":routes,"clients":clients,"tools":tools, + "algorithms":ALGORITHMS.iter().map(|a|json!({"kind":a.kind,"title":a.title,"summary":a.summary})).collect::>(), + "sessions":history.sessions(),"entries":history.entries,"limited":history.limited,"skipped":history.skipped, + "errors":errors,"refresh_seconds":self.config.refresh_seconds.max(1)}), + ) + } + pub fn dispatch(&mut self, action: Action) -> Result { + self.reload()?; + match action { + Action::Editor { + generation, + route, + algorithm, + } => { + self.check_generation(generation)?; + let config = self.routes()?; + current_route(&config, &route, None)?; + let algorithm = algorithm_by_id(&algorithm)?; + let roles = config.roles(&route, algorithm); + let data = json!({"roles": roles.iter().map(|r|json!({"label":r.label,"hint":r.hint,"tier":r.tier.map(|t|format!("{t:?}"))})).collect::>(),"choices":config.choices(&route)}); + Ok(Reply { + message: algorithm.summary.into(), + data, + }) + } + Action::Apply { + generation, + route, + algorithm, + choices, + } => { + self.check_generation(generation)?; + let config = self.routes()?; + current_route(&config, &route, None)?; + let algorithm = algorithm_by_id(&algorithm)?; + config.edit(&route, algorithm, &choices)?; + server::apply(&self.config, &route, algorithm, &choices).map(Reply::message) + } + Action::Models { + client, + refresh, + key, + } => { + let config = self.routes()?; + let client = config + .clients() + .into_iter() + .find(|c| c.name == client) + .ok_or("Unknown endpoint.")?; + if let Some(key) = &key { + if key.trim().is_empty() || models::has_line_break(key) { + return Err("Enter a nonempty key without line breaks.".into()); + } + if models::unlisted(&client) + || !(client.forward_auth || client.api_key_env.is_some()) + { + return Err("This endpoint does not accept a model-list key. Choose an endpoint configured for model-list authentication.".into()); + } + } + let cache = self.settings.with_file_name(models::CACHE_FILE); + let result = models::load( + &cache, + std::slice::from_ref(&client), + refresh || key.is_some(), + key.as_deref(), + &|_| {}, + ); + let loaded = result.into_iter().next().ok_or("No model list returned.")?; + if let Some(key) = &key { + match &loaded.error { + None | Some(models::ListError::NotCached(_)) => { + models::save_key(&client.base_url, key)? + } + _ => { + return Err(loaded + .error + .as_ref() + .map(models::ListError::reason) + .unwrap_or_default()); + } + } + } + let message = loaded + .error + .map(|e| format!("{} {}", e.reason(), e.advice())) + .unwrap_or_else(|| "Model list loaded.".into()); + let models = loaded + .list + .map(|l| l.models) + .unwrap_or_else(|| config.models_on(&client.name)); + Ok(Reply { + message, + data: json!({"client":client.name,"models":models}), + }) + } + Action::Install { + tool, + account, + route, + id, + } => { + let account = account_path(tool, account.as_deref())?; + let config = self.routes()?; + let route = current_route(&config, &route, Some(&id))?; + let login = login_mode(tool, &self.config, &route)?; + harness::install( + tool, + &accounts::config_paths(tool, account.as_deref()), + &self.config.server_url, + &route.id, + login, + ) + .map(Reply::message) + } + Action::Restore { tool, account } => { + let account = account_path(tool, account.as_deref())?; + harness::restore(&accounts::config_paths(tool, account.as_deref())) + .map(Reply::message) + } + Action::AddAccount { tool, name } => { + accounts::add(tool, name.trim()).map(Reply::message) + } + Action::Launch { + tool, + account, + route, + id, + project, + } => { + let account = account_path(tool, account.as_deref())?; + let config = self.routes()?; + let route = current_route(&config, &route, Some(&id))?; + let login = login_mode(tool, &self.config, &route)?; + sessions::launch( + tool, + &PathBuf::from(project), + &route.id, + &self.config.server_url, + login, + account.as_deref(), + ) + .map(Reply::message) + } + Action::Restart {} => server::restart(&self.config.launchd_label) + .map(|()| Reply::message("Server restart requested.".into())), + Action::Update {} => update().map(Reply::message), + Action::OpenConfig {} => { + server::command("open", &[&self.config.config_file.display().to_string()])?; + Ok(Reply::message( + "Opened the server config in your default editor.".into(), + )) + } + } + } +} +fn algorithm_by_id(kind: &str) -> Result<&'static crate::server_config::Algorithm, String> { + ALGORITHMS + .iter() + .find(|a| a.kind == kind) + .ok_or_else(|| "Unknown routing algorithm.".into()) +} +fn current_route(config: &ServerConfig, key: &str, id: Option<&str>) -> Result { + config + .routes() + .into_iter() + .find(|r| r.key == key && id.is_none_or(|id| id == r.id)) + .ok_or_else(|| "The route changed or was removed. Refresh and choose it again.".into()) +} +fn account_path(tool: Harness, name: Option<&str>) -> Result, String> { + let Some(name) = name else { + return Ok(None); + }; + let path = accounts::list(tool) + .into_iter() + .find(|(n, _)| n == name) + .map(|(_, p)| p) + .ok_or("Unknown account. Refresh and choose an existing account.")?; + accounts::validate(tool, &path)?; + Ok(Some(path)) +} +fn login_mode( + tool: Harness, + settings: &Config, + route: &crate::server_config::Route, +) -> Result { + let text = std::fs::read_to_string(&settings.config_file).map_err(|e| e.to_string())?; + let config = ServerConfig::parse(&text)?; + let clients = config.clients(); + let choices = config.choices(&route.key); + if choices.is_empty() + || !config + .routes() + .iter() + .any(|current| current.key == route.key && current.id == route.id) + { + return Err( + "This route cannot be installed by the app. Choose a route with models.".into(), + ); + } + let mut login = false; + for choice in choices { + let client = clients + .iter() + .find(|c| c.name == choice.client) + .ok_or("The route has an unknown endpoint.")?; + if client.forward_auth { + let url = url::Url::parse(&client.base_url) + .map_err(|_| "The route has an invalid endpoint URL.")?; + let host = url + .host_str() + .ok_or("The route has an invalid endpoint URL.")?; + let supported = url.scheme() == "https" + && url.port().is_none_or(|port| port == 443) + && match tool { + Harness::CodexCli | Harness::CodexApp => host == "chatgpt.com", + Harness::Claude => host == "api.anthropic.com", + Harness::Pi => false, + }; + if !supported { + return Err(format!( + "This route forwards the caller's login to {host}. Pick a matching coding tool or a route with server API credentials." + )); + } + login = true; + } + } + Ok(login) +} + +fn update() -> Result { + let executable = std::env::current_exe().map_err(|e| e.to_string())?; + let resource = executable + .parent() + .and_then(|p| p.parent()) + .map(|p| p.join("Resources/Update.command")) + .filter(|p| p.is_file()) + .or_else(|| { + let installed = crate::config::expand_home(std::path::Path::new( + "~/Applications/Switchyard.app/Contents/Resources/Update.command", + )); + installed.is_file().then_some(installed) + }) + .ok_or( + "Install Switchyard.app with scripts/macos/install.sh before updating from the app.", + )?; + crate::server::command("open", &[&resource.display().to_string()])?; + Ok("Terminal is rebuilding and reinstalling from the source checkout used for this install. The app restarts after a successful build. Your routing and prices stay saved.".into()) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + // The Apply fixture supplies a generation so only its extra choice field causes rejection. + fn malformed_actions_reject_before_dispatch() { + for input in [ + r#"{"kind":"restart","command":"rm"}"#, + r#"{"kind":"install","tool":"unknown","route":"r","id":"m","account":null}"#, + r#"{"kind":"apply","generation":0,"route":"r","algorithm":"passthrough","choices":[{"client":"c","model":"m","extra":1}]}"#, + r#"{"kind":"unknown"}"#, + ] { + assert!(serde_json::from_str::(input).is_err()); + } + } + #[test] + // A cached list must not let an untested key reach Keychain. + fn submitting_a_key_checks_upstream_even_when_refresh_is_false() { + use std::io::{Read, Write}; + let dir = tempfile::tempdir().expect("directory"); + let listener = std::net::TcpListener::bind("127.0.0.1:0").expect("listener"); + listener.set_nonblocking(true).expect("nonblocking"); + let url = format!("http://{}/v1", listener.local_addr().expect("address")); + let worker = std::thread::spawn(move || { + for _ in 0..200 { + if let Ok((mut stream, _)) = listener.accept() { + stream + .set_read_timeout(Some(std::time::Duration::from_secs(1))) + .expect("timeout"); + let mut request = Vec::new(); + let mut chunk = [0; 1024]; + for _ in 0..4 { + let n = stream.read(&mut chunk).expect("request"); + request.extend_from_slice(&chunk[..n]); + if n == 0 || request.windows(4).any(|bytes| bytes == b"\r\n\r\n") { + break; + } + } + stream.write_all(b"HTTP/1.1 401 Unauthorized\r\nContent-Length: 0\r\nConnection: close\r\n\r\n").expect("response"); + return String::from_utf8_lossy(&request).into_owned(); + } + std::thread::sleep(std::time::Duration::from_millis(10)); + } + String::new() + }); + let settings = dir.path().join("settings.toml"); + let routes = dir.path().join("routes.toml"); + std::fs::write(&routes, format!("[llm_clients.c]\nbase_url={url:?}\nformat='openai_responses'\nforward_auth=true\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n")).expect("routes"); + std::fs::write( + &settings, + format!( + "config_file={routes:?}\nrouting_log={:?}", + dir.path().join("log") + ), + ) + .expect("settings"); + let cached = + json!({format!("{url}/models"): {"models":["cached"],"fetched_at":models::now()}}) + .to_string(); + let cache = dir.path().join(models::CACHE_FILE); + std::fs::write(&cache, &cached).expect("cache"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + let result = controller.dispatch(Action::Models { + client: "c".into(), + refresh: false, + key: Some("rejected-fixture-key".into()), + }); + let request = worker.join().expect("worker"); + assert!(result.err().expect("rejected key").contains("401")); + assert!(request.starts_with("GET /v1/models ")); + assert!(request.contains("Authorization: Bearer rejected-fixture-key")); + assert_eq!(std::fs::read_to_string(cache).expect("cache"), cached); + std::fs::write(&routes, "[llm_clients.c]\nbase_url='http://127.0.0.1:9/v1'\nformat='openai_responses'\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n").expect("routes"); + let result = controller.dispatch(Action::Models { + client: "c".into(), + refresh: false, + key: Some("unused-fixture-key".into()), + }); + assert!( + result + .err() + .expect("unused key") + .contains("does not accept a model-list key") + ); + } + #[test] + fn usage_snapshot_survives_missing_and_malformed_route_configs() { + let dir = tempfile::tempdir().expect("directory"); + let settings = dir.path().join("settings.toml"); + let routes = dir.path().join("routes.toml"); + let log = dir.path().join("log"); + std::fs::write( + &log, + "{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"actual\",\"session_id\":\"session\"}\n", + ) + .expect("log"); + std::fs::write( + &settings, + format!("config_file={routes:?}\nrouting_log={log:?}"), + ) + .expect("settings"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + for malformed in [false, true] { + if malformed { + std::fs::write(&routes, "secret = 'UNTERMINATED_PRIVATE_VALUE").expect("routes"); + } + let snapshot = controller.snapshot().expect("snapshot"); + assert_eq!(snapshot["sessions"], json!(["session"])); + assert_eq!(snapshot["entries"][0]["model"], "actual"); + assert!(!snapshot["errors"].as_array().expect("errors").is_empty()); + assert!(!snapshot.to_string().contains("PRIVATE_VALUE")); + } + } + #[test] + // Matching route names in two files must not let an old draft edit the newly selected file. + fn stale_editor_rejects_after_settings_change_without_writes() { + let dir = tempfile::tempdir().expect("directory"); + let settings = dir.path().join("settings.toml"); + let first = dir.path().join("first.toml"); + let second = dir.path().join("second.toml"); + let text = "[llm_clients.c]\nbase_url='https://example.com/v1'\nformat='openai_responses'\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n"; + std::fs::write(&first, text).expect("first"); + std::fs::write(&second, text).expect("second"); + let write_settings = |path: &std::path::Path| { + std::fs::write( + &settings, + format!( + "config_file={path:?}\nrouting_log={:?}", + dir.path().join("log") + ), + ) + .expect("settings"); + }; + write_settings(&first); + let mut controller = + Controller::new(Config::load(&settings).expect("settings"), settings.clone()); + let snapshot = controller.snapshot().expect("snapshot"); + assert_eq!(snapshot["routes"][0]["tiers"], json!(["Capable"])); + let generation = snapshot["generation"].as_u64().expect("generation"); + write_settings(&second); + for action in [ + Action::Editor { + generation, + route: "r".into(), + algorithm: "passthrough".into(), + }, + Action::Apply { + generation, + route: "r".into(), + algorithm: "passthrough".into(), + choices: vec![Choice { + client: "c".into(), + model: "changed".into(), + }], + }, + ] { + assert!(controller.dispatch(action).is_err()); + } + assert_eq!(std::fs::read_to_string(&second).expect("second"), text); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 3); + assert_eq!( + controller.snapshot().expect("snapshot")["generation"], + generation + 1 + ); + } + #[test] + fn rejected_install_has_no_writes() { + let dir = tempfile::tempdir().expect("directory"); + let settings = dir.path().join("settings.toml"); + let config = dir.path().join("server.toml"); + let text = "[llm_clients.c]\nbase_url='http://chatgpt.com/backend-api/codex'\nforward_auth=true\nformat='openai_responses'\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n"; + std::fs::write(&config, text).expect("config"); + std::fs::write( + &settings, + format!( + "config_file={:?}\nrouting_log={:?}", + config, + dir.path().join("log") + ), + ) + .expect("settings"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + for id in ["old", "public"] { + assert!( + controller + .dispatch(Action::Install { + tool: Harness::CodexCli, + account: None, + route: "r".into(), + id: id.into() + }) + .is_err() + ); + assert_eq!(std::fs::read_to_string(&config).expect("config"), text); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 2); + } + let snapshot = controller.snapshot().expect("snapshot"); + assert!( + snapshot["routes"][0]["label"] + .as_str() + .expect("label") + .contains("passthrough · c / actual") + ); + assert!(!snapshot.to_string().contains("backend-api")); + } +} diff --git a/crates/switchyard-menubar/src/dashboard.rs b/crates/switchyard-menubar/src/dashboard.rs deleted file mode 100644 index 791afe5a86..0000000000 --- a/crates/switchyard-menubar/src/dashboard.rs +++ /dev/null @@ -1,690 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -//! The app window shares the tray event loop and loads routes and usage on workers. - -use crate::accounts; -use crate::config::Config; -use crate::harness::{self, HARNESSES, Harness}; -use crate::history::{self, History}; -use crate::picker::rect; -use crate::server_config::ServerConfig; -use objc2::rc::Retained; -use objc2::runtime::ProtocolObject; -use objc2::{DefinedClass, MainThreadOnly, define_class, msg_send, sel}; -use objc2_app_kit::{ - NSApplication, NSApplicationDelegate, NSBackingStoreType, NSButton, NSControl, NSFont, - NSPopUpButton, NSScrollView, NSTextField, NSTextView, NSView, NSWindow, NSWindowStyleMask, -}; -use objc2_foundation::{MainThreadMarker, NSObject, NSObjectProtocol, NSSize, NSString}; -use std::cell::RefCell; -use std::path::PathBuf; -use std::sync::mpsc::{Receiver, Sender, channel}; - -const USAGE: isize = 1; -const INSTALL: isize = 2; -const REFRESH: isize = 3; -const SAVE: isize = 4; -const RESTORE: isize = 5; -const ROUTE: isize = 6; -const TOOL: isize = 7; -const SESSION: isize = 8; -const LAUNCH: isize = 9; -const UPDATE: isize = 10; -const ACCOUNT: isize = 11; -const ADD_ACCOUNT: isize = 12; -const REOPEN: isize = 13; - -define_class!( - // SAFETY: NSObject has no subclassing requirements. The target only queues tags. - #[unsafe(super(NSObject))] - #[thread_kind = MainThreadOnly] - #[name = "SwitchyardAppTarget"] - #[ivars = RefCell>] - struct Target; - impl Target { - // SAFETY: AppKit sends the control that invoked this action. - #[unsafe(method(changed:))] - fn changed(&self, sender: &NSControl) { self.ivars().borrow_mut().push(sender.tag()); } - } - unsafe impl NSObjectProtocol for Target {} - unsafe impl NSApplicationDelegate for Target { - #[unsafe(method(applicationShouldHandleReopen:hasVisibleWindows:))] - fn reopen(&self, _application: &NSApplication, _visible: bool) -> bool { - self.ivars().borrow_mut().push(REOPEN); - true - } - } -); - -enum Finished { - Refresh(Snapshot), - Status(Result), -} - -struct Snapshot { - routes: Result, String>, - history: Result, -} - -fn load(settings: &Config) -> Snapshot { - Snapshot { - routes: std::fs::read_to_string(&settings.config_file) - .map_err(|e| e.to_string()) - .and_then(|text| ServerConfig::parse(&text)) - .map(|config| config.routes()), - history: history::load(&settings.routing_log), - } -} - -pub struct Dashboard { - mtm: MainThreadMarker, - window: Retained, - // Dashboard retains the delegate because NSApplication holds a weak reference. - target: Retained, - text: Retained, - tool: Retained, - route: Retained, - session: Retained, - project: Retained, - account: Retained, - account_name: Retained, - add_account: Retained, - accounts: Vec<(String, PathBuf)>, - save: Retained, - restore: Retained, - launch: Retained, - settings: Config, - history: History, - sessions: Vec, - routes: Vec, - install: bool, - busy: bool, - refresh_pending: bool, - route_error: Option, - usage_error: Option, - status: Option, - sender: Sender, - receiver: Receiver, -} - -impl Dashboard { - pub fn new(mtm: MainThreadMarker, settings: &Config) -> Self { - // SAFETY: The app owns this window and keeps it after a close action. - let window = unsafe { - let w = NSWindow::initWithContentRect_styleMask_backing_defer( - NSWindow::alloc(mtm), - rect(0., 0., 940., 720.), - NSWindowStyleMask::Titled - | NSWindowStyleMask::Closable - | NSWindowStyleMask::Miniaturizable, - NSBackingStoreType::Buffered, - false, - ); - w.setReleasedWhenClosed(false); - w - }; - window.setTitle(&NSString::from_str("Switchyard")); - window.center(); - let allocated = Target::alloc(mtm).set_ivars(RefCell::new(Vec::new())); - // SAFETY: NSObject init has this signature. - let target: Retained = unsafe { msg_send![super(allocated), init] }; - NSApplication::sharedApplication(mtm).setDelegate(Some(ProtocolObject::from_ref(&*target))); - let content = NSView::initWithFrame(NSView::alloc(mtm), rect(0., 0., 940., 720.)); - for (title, tag, x, width) in [ - ("Usage", USAGE, 20., 100.), - ("Install…", INSTALL, 130., 110.), - ("Refresh", REFRESH, 250., 100.), - ("Update from source…", UPDATE, 690., 230.), - ] { - content.addSubview(&button(mtm, &target, title, tag, rect(x, 666., width, 32.))); - } - let tool = popup(mtm, &target, TOOL, rect(20., 619., 240., 30.)); - for (_, name) in HARNESSES { - tool.addItemWithTitle(&NSString::from_str(name)); - } - let route = popup(mtm, &target, ROUTE, rect(280., 619., 310., 30.)); - let session = popup(mtm, &target, SESSION, rect(20., 619., 900., 30.)); - let save = button( - mtm, - &target, - "Install / refresh", - SAVE, - rect(600., 619., 150., 30.), - ); - let restore = button( - mtm, - &target, - "Restore original", - RESTORE, - rect(760., 619., 160., 30.), - ); - let project = - NSTextField::initWithFrame(NSTextField::alloc(mtm), rect(20., 573., 680., 30.)); - project.setPlaceholderString(Some(&NSString::from_str( - "Git project path for a separate worktree session", - ))); - let launch = button( - mtm, - &target, - "New worktree session", - LAUNCH, - rect(710., 573., 210., 30.), - ); - let account = popup(mtm, &target, ACCOUNT, rect(20., 530., 280., 30.)); - let account_name = - NSTextField::initWithFrame(NSTextField::alloc(mtm), rect(320., 530., 370., 30.)); - account_name.setPlaceholderString(Some(&NSString::from_str("Name for a new account"))); - let add_account = button( - mtm, - &target, - "Add account…", - ADD_ACCOUNT, - rect(710., 530., 210., 30.), - ); - for view in [ - &*account as &NSView, - &*account_name, - &*add_account, - &*tool as &NSView, - &*route, - &*session, - &*save, - &*restore, - &*project, - &*launch, - ] { - content.addSubview(view); - } - let scroll = - NSScrollView::initWithFrame(NSScrollView::alloc(mtm), rect(20., 20., 900., 495.)); - scroll.setHasVerticalScroller(true); - scroll.setHasHorizontalScroller(true); - let text = NSTextView::initWithFrame(NSTextView::alloc(mtm), rect(0., 0., 880., 495.)); - text.setEditable(false); - text.setSelectable(true); - text.setFont(Some(&NSFont::monospacedSystemFontOfSize_weight(13., 0.))); - text.setTextContainerInset(NSSize::new(12., 12.)); - scroll.setDocumentView(Some(&text)); - content.addSubview(&scroll); - window.setContentView(Some(&content)); - let (sender, receiver) = channel(); - let mut app = Self { - mtm, - window, - target, - text, - tool, - route, - session, - project, - account, - account_name, - add_account, - accounts: Vec::new(), - save, - restore, - launch, - settings: settings.clone(), - history: History::default(), - sessions: Vec::new(), - routes: Vec::new(), - install: false, - busy: false, - refresh_pending: false, - route_error: None, - usage_error: None, - status: None, - sender, - receiver, - }; - app.mode(false); - app - } - - pub fn is_busy(&self) -> bool { - self.busy - } - pub fn set_settings(&mut self, settings: &Config) { - self.settings = settings.clone(); - self.refresh(); - } - pub fn show(&mut self, install: bool) { - self.mode(install); - #[allow(deprecated)] - NSApplication::sharedApplication(self.mtm).activateIgnoringOtherApps(true); - self.window.makeKeyAndOrderFront(None); - self.refresh(); - } - - fn mode(&mut self, install: bool) { - self.install = install; - for view in [ - &*self.tool as &NSView, - &*self.route, - &*self.save, - &*self.restore, - &*self.project, - &*self.launch, - &*self.account, - &*self.account_name, - &*self.add_account, - ] { - view.setHidden(!install); - } - self.session.setHidden(install); - if install { - self.refresh_accounts(); - self.inspect(); - } else { - self.render_history(); - } - } - - fn tool(&self) -> Harness { - HARNESSES - .get(self.tool.indexOfSelectedItem() as usize) - .map(|(tool, _)| *tool) - .unwrap_or(Harness::CodexCli) - } - - fn selected_account(&self) -> Option<&std::path::Path> { - let index = self.account.indexOfSelectedItem(); - if index > 0 { - self.accounts - .get(index as usize - 1) - .map(|(_, p)| p.as_path()) - } else { - None - } - } - fn refresh_accounts(&mut self) { - let selected = self.selected_account().map(std::path::Path::to_path_buf); - self.accounts = accounts::list(self.tool()); - self.account.removeAllItems(); - self.account - .addItemWithTitle(&NSString::from_str("Default coding-tool login")); - for (name, _) in &self.accounts { - self.account.addItemWithTitle(&NSString::from_str(name)); - } - if let Some(index) = self - .accounts - .iter() - .position(|(_, p)| Some(p) == selected.as_ref()) - { - self.account.selectItemAtIndex(index as isize + 1); - } - let supported = matches!(self.tool(), Harness::CodexCli | Harness::Claude); - self.account.setEnabled(supported && !self.busy); - self.add_account.setEnabled(supported && !self.busy); - self.account_name.setEnabled(supported && !self.busy); - } - fn inspect(&self) { - if let Some(error) = &self.route_error { - self.text.setString(&NSString::from_str(error)); - return; - } - if let Some(status) = &self.status { - self.text.setString(&NSString::from_str(status)); - return; - } - let tool = self.tool(); - let found = harness::binary(tool).map(|p| format!("Installed: {}",p.display())).unwrap_or_else(|| "Executable not found in the usual install directories. Install the coding tool first if needed.".into()); - let info = harness::inspect(tool, &accounts::config_paths(tool, self.selected_account())) - .unwrap_or_else(|e| format!("Could not read settings: {e}")); - self.text.setString(&NSString::from_str(&format!("{found}\n{info}\n\nSelect a public Switchyard route, then click Install / refresh.\nCodex CLI gets a standalone sy profile. Codex app changes the base user config.\nClaude and Pi get user settings. Existing settings are backed up.\nRestart the coding tool to apply defaults. Existing sessions keep their login. Select a named account to change where settings are saved and which login new sessions use. Add account… opens the coding tool’s own login in Terminal.\n\nA subscription route uses the coding tool's own saved login.\nA route with server API credentials works across tools.\nSwitchyard records observed token usage; provider quota and billing remain with the provider.\n\nNew worktree session creates an independent checkout from the project's HEAD\nand opens the selected tool in Terminal. Uncommitted changes stay in the original checkout.\nUse git worktree list and git worktree remove to manage these checkouts.\nProject settings and shell variables can override user defaults."))); - } - - fn refresh(&mut self) { - if self.busy { - self.refresh_pending = true; - return; - } - self.status = None; - let settings = self.settings.clone(); - let tx = self.sender.clone(); - std::thread::spawn(move || { - let _ = tx.send(Finished::Refresh(load(&settings))); - }); - self.set_busy(true); - } - - fn apply_refresh(&mut self, snapshot: Snapshot) { - let previous = self - .routes - .get(self.route.indexOfSelectedItem() as usize) - .map(|r| r.id.clone()); - self.route_error = None; - match snapshot.routes { - Ok(routes) => { - self.routes = routes; - self.route.removeAllItems(); - for route in &self.routes { - self.route.addItemWithTitle(&NSString::from_str(&route.id)); - } - if let Some(index) = self - .routes - .iter() - .position(|r| Some(&r.id) == previous.as_ref()) - { - self.route.selectItemAtIndex(index as isize); - } - } - Err(e) => { - self.routes.clear(); - self.route.removeAllItems(); - self.route_error = Some(format!("Could not read routes: {e}")); - } - } - self.usage_error = None; - match snapshot.history { - Ok(history) => { - let selected = self - .sessions - .get(self.session.indexOfSelectedItem().saturating_sub(1) as usize) - .cloned(); - self.history = history; - self.sessions = self.history.sessions(); - self.session.removeAllItems(); - self.session.addItemWithTitle(&NSString::from_str( - "All sessions (includes calls without a session ID)", - )); - for session in &self.sessions { - self.session.addItemWithTitle(&NSString::from_str(session)); - } - if let Some(index) = self - .sessions - .iter() - .position(|s| Some(s) == selected.as_ref()) - { - self.session.selectItemAtIndex(index as isize + 1); - } - } - Err(error) => self.usage_error = Some(format!("Could not read usage: {error}")), - } - self.mode(self.install); - } - - fn render_history(&self) { - if let Some(error) = &self.usage_error { - self.text.setString(&NSString::from_str(error)); - return; - } - let index = self.session.indexOfSelectedItem(); - let selected = if index > 0 { - self.sessions.get(index as usize - 1).map(String::as_str) - } else { - None - }; - self.text - .setString(&NSString::from_str(&self.history.display(selected))); - } - - fn set_busy(&mut self, busy: bool) { - self.busy = busy; - for button in [&self.save, &self.restore, &self.launch, &self.add_account] { - button.setEnabled(!busy); - } - self.tool.setEnabled(!busy); - self.route.setEnabled(!busy); - self.refresh_accounts(); - } - - pub fn poll(&mut self) { - let tags = std::mem::take(&mut *self.target.ivars().borrow_mut()); - for tag in tags { - if self.busy && !matches!(tag, USAGE | INSTALL | SESSION | REOPEN) { - continue; - } - match tag { - USAGE => self.mode(false), - INSTALL => { - self.mode(true); - } - REFRESH => self.refresh(), - TOOL | ROUTE | ACCOUNT => { - if tag == TOOL { - self.refresh_accounts(); - } - self.status = None; - self.inspect(); - } - SESSION => self.render_history(), - REOPEN => self.show(self.install), - SAVE | RESTORE | LAUNCH | ADD_ACCOUNT => self.action(tag), - UPDATE => { - let result = update(); - self.text - .setString(&NSString::from_str(&result.unwrap_or_else(|e| e))); - } - _ => {} - } - } - while let Ok(result) = self.receiver.try_recv() { - self.set_busy(false); - match result { - Finished::Refresh(snapshot) => self.apply_refresh(snapshot), - Finished::Status(result) => { - self.status = Some(result.unwrap_or_else(|e| e)); - self.mode(self.install); - } - } - if self.refresh_pending { - self.refresh_pending = false; - self.refresh(); - } - } - } - - fn action(&mut self, tag: isize) { - let tool = self.tool(); - let account = self.selected_account().map(std::path::Path::to_path_buf); - let files = accounts::config_paths(tool, account.as_deref()); - let account_name = self.account_name.stringValue().to_string(); - let tx = self.sender.clone(); - let settings = self.settings.clone(); - let route = self - .routes - .get(self.route.indexOfSelectedItem() as usize) - .cloned(); - let project = PathBuf::from(self.project.stringValue().to_string()); - self.set_busy(true); - self.text.setString(&NSString::from_str("Working…")); - std::thread::spawn(move || { - let result = (|| { - if tag == ADD_ACCOUNT { - return accounts::add(tool, account_name.trim()); - } - if let Some(account) = account.as_deref() { - accounts::validate(tool, account)?; - } - if tag == RESTORE { - return harness::restore(&files); - } - let route = route.ok_or_else(|| "Pick a route first.".to_string())?; - let login = login_mode(tool, &settings, &route)?; - if tag == LAUNCH { - crate::sessions::launch( - tool, - &project, - &route.id, - &settings.server_url, - login, - account.as_deref(), - ) - } else { - harness::install(tool, &files, &settings.server_url, &route.id, login) - } - })(); - let _ = tx.send(Finished::Status(result)); - }); - } -} - -fn login_mode( - tool: Harness, - settings: &Config, - route: &crate::server_config::Route, -) -> Result { - let text = std::fs::read_to_string(&settings.config_file).map_err(|e| e.to_string())?; - let config = ServerConfig::parse(&text)?; - let clients = config.clients(); - let choices = config.choices(&route.key); - if choices.is_empty() - || !config - .routes() - .iter() - .any(|current| current.key == route.key && current.id == route.id) - { - return Err( - "This route cannot be installed by the app. Choose a route with models.".into(), - ); - } - let mut login = false; - for choice in choices { - let client = clients - .iter() - .find(|c| c.name == choice.client) - .ok_or("The route has an unknown endpoint.")?; - if client.forward_auth { - let url = url::Url::parse(&client.base_url) - .map_err(|_| "The route has an invalid endpoint URL.")?; - let host = url - .host_str() - .ok_or("The route has an invalid endpoint URL.")?; - let supported = url.scheme() == "https" - && url.port().is_none_or(|port| port == 443) - && match tool { - Harness::CodexCli | Harness::CodexApp => host == "chatgpt.com", - Harness::Claude => host == "api.anthropic.com", - Harness::Pi => false, - }; - if !supported { - return Err(format!( - "This route forwards the caller's login to {host}. Pick a matching coding tool or a route with server API credentials." - )); - } - login = true; - } - } - Ok(login) -} - -fn button( - mtm: MainThreadMarker, - target: &Target, - title: &str, - tag: isize, - frame: objc2_foundation::NSRect, -) -> Retained { - // SAFETY: Target implements changed: and lives as long as the controls. - let b = unsafe { - NSButton::buttonWithTitle_target_action( - &NSString::from_str(title), - Some(target), - Some(sel!(changed:)), - mtm, - ) - }; - b.setTag(tag); - b.setFrame(frame); - b -} -fn popup( - mtm: MainThreadMarker, - target: &Target, - tag: isize, - frame: objc2_foundation::NSRect, -) -> Retained { - let p = NSPopUpButton::initWithFrame_pullsDown(NSPopUpButton::alloc(mtm), frame, false); - p.setTag(tag); - // SAFETY: Target implements changed: and lives as long as the controls. - unsafe { - p.setTarget(Some(target)); - p.setAction(Some(sel!(changed:))); - } - p -} -fn update() -> Result { - let executable = std::env::current_exe().map_err(|e| e.to_string())?; - let resource = executable - .parent() - .and_then(|p| p.parent()) - .ok_or("Could not locate the app bundle.")? - .join("Resources/Update.command"); - if !resource.is_file() { - return Err( - "Install Switchyard.app with scripts/macos/install.sh before updating from the app." - .into(), - ); - } - crate::server::command("open", &[&resource.display().to_string()])?; - Ok("Terminal is rebuilding and reinstalling from the source checkout used for this install. The app restarts after a successful build. Your routing and prices stay saved.".into()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn usage_load_does_not_depend_on_a_valid_server_config() { - let dir = tempfile::tempdir().expect("directory"); - let log = dir.path().join("log"); - std::fs::write( - &log, - "{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"actual\",\"session_id\":\"session\"}\n", - ) - .expect("log"); - let settings = Config { - config_file: dir.path().join("config"), - routing_log: log, - ..Config::default() - }; - let snapshot = load(&settings); - assert!(snapshot.routes.is_err()); - assert_eq!( - snapshot.history.expect("history").sessions(), - vec!["session"] - ); - std::fs::write(&settings.config_file, "not valid TOML").expect("config"); - let snapshot = load(&settings); - assert!(snapshot.routes.is_err()); - assert!( - snapshot - .history - .expect("history") - .display(None) - .contains("actual") - ); - } - #[test] - fn installing_rejects_stale_ids_and_insecure_subscription_endpoints() { - let dir = tempfile::tempdir().expect("directory"); - let path = dir.path().join("server.toml"); - let settings = Config { - config_file: path.clone(), - ..Config::default() - }; - for endpoint in [ - "https://chatgpt.com/backend-api/codex", - "http://chatgpt.com/backend-api/codex", - ] { - let text = format!( - "[llm_clients.upstream]\nbase_url = '{endpoint}'\nformat = 'openai_responses'\nforward_auth = true\n[targets.model]\nid = 'actual'\nllm_client = 'upstream'\n[routes.public]\nid = 'route'\ntype = 'passthrough'\ntarget = 'model'\n" - ); - std::fs::write(&path, &text).expect("config"); - let route = ServerConfig::parse(&text) - .expect("parse") - .routes() - .remove(0); - assert_eq!( - login_mode(Harness::CodexCli, &settings, &route).is_ok(), - endpoint.starts_with("https:") - ); - let mut stale = route; - stale.id = "old-public-id".into(); - assert!(login_mode(Harness::CodexCli, &settings, &stale).is_err()); - assert_eq!(std::fs::read_to_string(&path).expect("unchanged"), text); - } - } -} diff --git a/crates/switchyard-menubar/src/gui.rs b/crates/switchyard-menubar/src/gui.rs new file mode 100644 index 0000000000..69403516bf --- /dev/null +++ b/crates/switchyard-menubar/src/gui.rs @@ -0,0 +1,155 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Tauri manages the window and tray, and runs blocking operations on worker threads. + +use crate::controller::{Action, Controller, Reply}; +use std::sync::{ + Arc, Mutex, + atomic::{AtomicU8, Ordering}, +}; +use tauri::{ + Manager, State, + menu::{Menu, MenuItem}, + tray::TrayIconBuilder, +}; + +struct Shared { + controller: Arc>, + // The state is idle (0), busy (1), or closing (2); closing prevents new operations. + operation: Arc, +} +// Operation keeps the app busy from queueing through worker completion. +// Dropping it returns the state to idle, so the user can retry Quit. +struct Operation(Arc); +impl Drop for Operation { + fn drop(&mut self) { + self.0.store(0, Ordering::Release); + } +} +impl Shared { + fn begin(&self) -> Result { + self.operation + .compare_exchange(0, 1, Ordering::AcqRel, Ordering::Acquire) + .map_err(|_| "An operation is running. Try again when it finishes.".to_string())?; + Ok(Operation(self.operation.clone())) + } + fn quit(&self) -> bool { + self.operation + .compare_exchange(0, 2, Ordering::AcqRel, Ordering::Acquire) + .is_ok() + || self.operation.load(Ordering::Acquire) == 2 + } +} + +#[tauri::command] +async fn snapshot(state: State<'_, Shared>) -> Result { + let operation = state.begin()?; + let shared = state.controller.clone(); + tauri::async_runtime::spawn_blocking(move || { + let _operation = operation; + shared + .try_lock() + .map_err(|_| "An operation is running. Try again when it finishes.".to_string())? + .snapshot() + }) + .await + .map_err(|e| e.to_string())? +} +#[tauri::command] +async fn action(state: State<'_, Shared>, action: Action) -> Result { + let operation = state.begin()?; + let shared = state.controller.clone(); + tauri::async_runtime::spawn_blocking(move || { + let _operation = operation; + shared + .try_lock() + .map_err(|_| "An operation is running. Try again when it finishes.".to_string())? + .dispatch(action) + }) + .await + .map_err(|e| e.to_string())? +} +fn show(app: &tauri::AppHandle) { + if let Some(window) = app.get_webview_window("main") + && let Err(e) = window.show().and_then(|()| window.set_focus()) + { + eprintln!("switchyard-menubar: could not open the window: {e}"); + } +} +pub fn run(controller: Controller) -> Result<(), String> { + let app = tauri::Builder::default() + .manage(Shared { + controller: Arc::new(Mutex::new(controller)), + operation: Arc::new(AtomicU8::new(0)), + }) + .invoke_handler(tauri::generate_handler![snapshot, action]) + .setup(|app| { + let open = MenuItem::with_id(app, "open", "Open Switchyard", true, None::<&str>)?; + let quit = MenuItem::with_id(app, "quit", "Quit Switchyard", true, None::<&str>)?; + let menu = Menu::with_items(app, &[&open, &quit])?; + // The tray keeps a simple high-contrast routing glyph at native resolution. + let mut pixels = vec![0u8; 22 * 22 * 4]; + for y in 3..19 { + for x in 3..19 { + if x == 10 || x == 11 || (y < 9 && (x == y + 4 || x + y == 17)) { + let i = (y * 22 + x) * 4; + pixels[i + 3] = 255; + } + } + } + TrayIconBuilder::new() + .icon(tauri::image::Image::new_owned(pixels, 22, 22)) + .icon_as_template(true) + .tooltip("Switchyard — routes and usage") + .menu(&menu) + .on_menu_event(|app, event| match event.id.as_ref() { + "open" => show(app), + "quit" if app.state::().quit() => app.exit(0), + _ => {} + }) + .build(app)?; + Ok(()) + }) + .on_window_event(|window, event| { + if let tauri::WindowEvent::CloseRequested { api, .. } = event { + api.prevent_close(); + if let Err(e) = window.hide() { + eprintln!("switchyard-menubar: could not hide the window: {e}"); + } + } + }) + .build(tauri::generate_context!()) + .map_err(|e| e.to_string())?; + app.run(|app, event| match event { + tauri::RunEvent::Reopen { .. } => show(app), + tauri::RunEvent::ExitRequested { api, .. } if !app.state::().quit() => { + api.prevent_exit() + } + _ => {} + }); + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + // A queued operation must prevent Quit before its worker starts. + fn quit_blocks_pending_operations_and_stays_closed() { + let shared = Shared { + controller: Arc::new(Mutex::new(Controller::new( + crate::config::Config::default(), + std::path::PathBuf::new(), + ))), + operation: Arc::new(AtomicU8::new(0)), + }; + let operation = shared.begin().expect("operation"); + assert!(shared.begin().is_err()); + assert!(!shared.quit()); + drop(operation); + assert!(shared.quit()); + assert!(shared.quit()); + assert!(shared.begin().is_err()); + } +} diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs index 9c8a76a6bf..a0e395ac3e 100644 --- a/crates/switchyard-menubar/src/harness.rs +++ b/crates/switchyard-menubar/src/harness.rs @@ -8,7 +8,8 @@ use std::io::Write; use std::path::{Path, PathBuf}; use toml_edit::{DocumentMut, value}; -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "snake_case")] pub enum Harness { CodexCli, CodexApp, diff --git a/crates/switchyard-menubar/src/health.rs b/crates/switchyard-menubar/src/health.rs index 9105ca75a8..c95c8f6be6 100644 --- a/crates/switchyard-menubar/src/health.rs +++ b/crates/switchyard-menubar/src/health.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Liveness probe against the local server's `/health` endpoint. +//! This module checks the local server's `/health` endpoint. //! //! The request is written by hand over TCP. The server is always on loopback //! over plain HTTP, so a full HTTP client would buy nothing here. @@ -10,18 +10,17 @@ use std::io::{BufRead, BufReader, Write}; use std::net::{TcpStream, ToSocketAddrs}; use std::time::Duration; -/// How long the probe waits before calling the server unreachable. Short, -/// because it runs on the thread that draws the menu. +/// TIMEOUT limits how long a health check can delay a usage refresh. const TIMEOUT: Duration = Duration::from_millis(500); -/// Whether the server answered its health check. +/// ServerStatus records whether the server answered its health check. #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum ServerStatus { Running, Stopped, } -/// Probes `GET /health`, treating any failure as a stopped server. +/// This function probes `GET /health`, treating any failure as a stopped server. pub fn probe(server_url: &str) -> ServerStatus { match request(server_url) { Ok(true) => ServerStatus::Running, @@ -60,7 +59,7 @@ mod tests { use super::*; use std::net::TcpListener; - /// Serves one canned response, then closes. + /// This helper serves one hardcoded response, then closes. fn serve(response: &'static str) -> String { let listener = TcpListener::bind("127.0.0.1:0").expect("bind"); let port = listener.local_addr().expect("addr").port(); diff --git a/crates/switchyard-menubar/src/history.rs b/crates/switchyard-menubar/src/history.rs index 8e0abf7a59..2e4b3ba559 100644 --- a/crates/switchyard-menubar/src/history.rs +++ b/crates/switchyard-menubar/src/history.rs @@ -4,14 +4,14 @@ //! This module reads recent completed model calls and filters them by recorded IDs. use serde::Deserialize; -use std::collections::{BTreeMap, VecDeque}; +use std::collections::VecDeque; use std::io::{Read, Seek, SeekFrom}; use std::path::Path; const MAX_BYTES: u64 = 8 * 1024 * 1024; const MAX_RECORDS: usize = 5000; -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, serde::Serialize)] pub struct Entry { pub ts: String, pub model: String, @@ -108,36 +108,6 @@ impl History { .into_iter() .collect() } - - pub fn display(&self, session: Option<&str>) -> String { - let mut lines = vec![format!("{} completed requests{} · {} unreadable records skipped", self.entries.len(), if self.limited { " in the recent log window" } else { "" }, self.skipped), "Input includes cached reads. Classifier calls are routing overhead. Each line is one model call; a user turn can contain several calls.".into()]; - let entries: Vec<_> = self - .entries - .iter() - .filter(|e| session.is_none_or(|s| e.session_id.as_deref() == Some(s))) - .collect(); - let mut models: BTreeMap<&str, (u64, u64, u64)> = BTreeMap::new(); - for entry in &entries { - let totals = models.entry(&entry.model).or_default(); - totals.0 = totals.0.saturating_add(entry.prompt_tokens); - totals.1 = totals.1.saturating_add(entry.cached_tokens); - totals.2 = totals.2.saturating_add(entry.completion_tokens); - } - lines.push("\nModels in this view".into()); - for (model, (input, cached, output)) in models { - lines.push(format!( - "{model} Input {input} Cached {cached} Output {output}" - )); - } - lines.push("\nRecent calls (newest first)".into()); - for entry in entries.into_iter().rev() { - lines.push(format!("\n{} {}{}\nSession: {} Turn: {}\nRoute: {} Input: {} Cached: {} Output: {}", entry.ts, entry.model, if entry.tier == "classifier" { " (routing overhead)" } else { "" }, entry.session_id.as_deref().filter(|s| !s.trim().is_empty()).unwrap_or("Not recorded"), entry.turn_id.as_deref().filter(|s| !s.trim().is_empty()).unwrap_or("Not recorded"), entry.route_id, entry.prompt_tokens, entry.cached_tokens, entry.completion_tokens)); - } - if self.entries.is_empty() { - lines.push("No completed calls recorded. Run a coding session through Switchyard, then click Refresh.".into()); - } - lines.join("\n") - } } #[cfg(test)] @@ -150,12 +120,14 @@ mod tests { assert_eq!(history.sessions(), vec!["s"]); assert_eq!(history.entries.len(), 2); assert_eq!(history.skipped, 1); - let text = history.display(Some("s")); - assert!(text.contains("Turn: t")); - assert!(text.contains("Input: 12")); - assert!(!text.contains("judge")); - assert!(!text.contains("SECRET")); - assert!(history.display(None).contains("Not recorded")); + assert_eq!(history.entries[0].turn_id.as_deref(), Some("t")); + assert_eq!(history.entries[0].prompt_tokens, 12); + assert!( + !serde_json::to_string(&history.entries) + .expect("snapshot") + .contains("SECRET") + ); + assert!(history.entries[1].session_id.is_none()); } #[test] fn reads_a_bounded_tail_and_keeps_only_recent_records() { diff --git a/crates/switchyard-menubar/src/icon.rs b/crates/switchyard-menubar/src/icon.rs deleted file mode 100644 index fceb74bbf2..0000000000 --- a/crates/switchyard-menubar/src/icon.rs +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -//! The menu bar glyph: a track that splits in two, drawn in code. -//! -//! macOS scales the image to 18 points tall, so it is drawn at 2x for retina -//! displays. It is a template image, so only the alpha channel matters and the -//! system recolors it for light and dark menu bars. - -/// Side length of the generated image, in pixels. -pub const SIZE: u32 = 36; - -/// Half the stroke width, in pixels. -const HALF_STROKE: f64 = 1.7; - -const SEGMENTS: [((f64, f64), (f64, f64)); 3] = [ - ((5.0, 18.0), (17.0, 18.0)), - ((17.0, 18.0), (30.0, 7.0)), - ((17.0, 18.0), (30.0, 29.0)), -]; - -/// How much of its opacity the glyph keeps while the server does not answer. -/// The fainter glyph shows at a glance that the server is down. -const STOPPED_OPACITY: f64 = 0.35; - -/// Renders the glyph as RGBA pixels, row-major from the top left. It is faint -/// when `running` is false. -pub fn glyph(running: bool) -> Vec { - let opacity = if running { 1.0 } else { STOPPED_OPACITY }; - let mut pixels = Vec::with_capacity((SIZE * SIZE * 4) as usize); - for y in 0..SIZE { - for x in 0..SIZE { - let point = (f64::from(x) + 0.5, f64::from(y) + 0.5); - let distance = SEGMENTS - .iter() - .map(|(start, end)| distance_to_segment(point, *start, *end)) - .fold(f64::INFINITY, f64::min); - // One pixel of falloff past the stroke edge softens the diagonals. - let coverage = (HALF_STROKE + 0.5 - distance).clamp(0.0, 1.0); - pixels.extend_from_slice(&[0, 0, 0, (coverage * opacity * 255.0).round() as u8]); - } - } - pixels -} - -fn distance_to_segment(point: (f64, f64), start: (f64, f64), end: (f64, f64)) -> f64 { - let (dx, dy) = (end.0 - start.0, end.1 - start.1); - let length_squared = dx * dx + dy * dy; - let along = ((point.0 - start.0) * dx + (point.1 - start.1) * dy) / length_squared; - let along = along.clamp(0.0, 1.0); - let (cx, cy) = (start.0 + dx * along, start.1 + dy * along); - ((point.0 - cx).powi(2) + (point.1 - cy).powi(2)).sqrt() -} - -#[cfg(test)] -mod tests { - use super::*; - - fn alpha(pixels: &[u8], x: u32, y: u32) -> u8 { - pixels[((y * SIZE + x) * 4 + 3) as usize] - } - - #[test] - fn draws_a_trunk_that_splits_in_two() { - let pixels = glyph(true); - - assert_eq!(pixels.len(), (SIZE * SIZE * 4) as usize); - assert_eq!(alpha(&pixels, 10, 18), 255, "the trunk is solid"); - assert!(alpha(&pixels, 29, 7) > 0, "upper branch reaches its end"); - assert!(alpha(&pixels, 29, 29) > 0, "lower branch reaches its end"); - assert_eq!(alpha(&pixels, 29, 18), 0, "nothing runs straight through"); - assert_eq!(alpha(&pixels, 0, 0), 0, "corners stay transparent"); - } - - #[test] - fn a_server_that_does_not_answer_gets_a_fainter_glyph() { - let (running, stopped) = (glyph(true), glyph(false)); - - assert_eq!(running.len(), stopped.len()); - assert!(alpha(&stopped, 10, 18) > 0, "the shape stays"); - assert!(alpha(&stopped, 10, 18) < alpha(&running, 10, 18) / 2); - assert_eq!(alpha(&stopped, 0, 0), 0, "corners stay transparent"); - } -} diff --git a/crates/switchyard-menubar/src/main.rs b/crates/switchyard-menubar/src/main.rs index 9f31fababc..721e750d94 100644 --- a/crates/switchyard-menubar/src/main.rs +++ b/crates/switchyard-menubar/src/main.rs @@ -1,47 +1,29 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! The macOS app shows usage and manages settings for a local Switchyard server. +//! The desktop and terminal apps manage a local Switchyard server. //! -//! The server owns routing; this process reads what the server wrote. It -//! shows today's and this week's traffic, and what that traffic would have -//! cost had every call gone to the capable model instead. Its "Edit -//! routes…" window edits a route in the server config and restarts the -//! server. +//! Both apps show recorded traffic and compare list-price estimates with the +//! configured baseline model. Their Routes views edit the server config and +//! restart the server. -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod accounts; mod app; mod config; +mod controller; #[cfg(target_os = "macos")] -mod dashboard; -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] +mod gui; mod harness; mod health; -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod history; +mod models; mod pricing; mod rollup; -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] -mod sessions; -mod summary; -// The macOS windows use these modules. They build on every target so their -// tests also run in CI, which does not run on macOS. -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] -mod models; -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod server; -#[cfg_attr(not(target_os = "macos"), allow(dead_code))] mod server_config; -// The status item, its glyph, and the app windows use macOS APIs. -#[cfg(target_os = "macos")] -mod icon; -#[cfg(target_os = "macos")] -mod picker; -#[cfg(target_os = "macos")] -mod sidebar; -#[cfg(target_os = "macos")] -mod tray; +mod sessions; +mod summary; +mod tui; use std::path::PathBuf; use std::process::ExitCode; @@ -49,18 +31,20 @@ use std::process::ExitCode; use config::Config; const USAGE: &str = "\ -Usage: switchyard-menubar [--print | --validate-toml] [FILE] +Usage: switchyard-menubar [--tui | --print | --validate-toml] [FILE] -Shows Switchyard usage and estimated savings in the macOS menu bar. +This app manages routes, coding-tool settings, and usage. - FILE Settings file [default: ~/.switchyard/menubar.toml] - --print Print the current summary and exit, instead of running - --validate-toml Parse FILE as TOML and exit"; + FILE The app reads settings from FILE [default: ~/.switchyard/menubar.toml]. + --tui Run the terminal app. + --print Print the current summary and exit. + --validate-toml Parse FILE as TOML and exit."; fn main() -> ExitCode { let mut settings = None; let mut print_only = false; let mut validate_toml = false; + let mut terminal = false; for arg in std::env::args().skip(1) { match arg.as_str() { "-h" | "--help" => { @@ -68,6 +52,7 @@ fn main() -> ExitCode { return ExitCode::SUCCESS; } "--print" => print_only = true, + "--tui" => terminal = true, "--validate-toml" => validate_toml = true, _ if arg.starts_with('-') => { eprintln!("switchyard-menubar: unknown option {arg}\n\n{USAGE}"); @@ -77,6 +62,11 @@ fn main() -> ExitCode { } } + if terminal && (print_only || validate_toml) { + eprintln!("{USAGE}"); + return ExitCode::FAILURE; + } + if validate_toml { let Some(path) = settings else { eprintln!("switchyard-menubar: --validate-toml requires a file path"); @@ -97,9 +87,9 @@ fn main() -> ExitCode { return ExitCode::FAILURE; } }; - // Off macOS there is no menu bar to attach to, so printing is the whole - // program. That keeps the rollup and pricing logic buildable everywhere. - if print_only || !cfg!(target_os = "macos") { + // The default mode prints a summary on platforms without the macOS desktop app. + // The --tui option starts the terminal app on those platforms. + if print_only || (!terminal && !cfg!(target_os = "macos")) { let (_, rows) = app::refresh(&config, &mut rollup::Reader::default()); for row in rows { match row { @@ -110,10 +100,18 @@ fn main() -> ExitCode { return ExitCode::SUCCESS; } - #[cfg(target_os = "macos")] - if let Err(error) = tray::run(config, &settings) { - eprintln!("switchyard-menubar: {error}"); - return ExitCode::FAILURE; + let controller = controller::Controller::new(config, settings); + if terminal { + if let Err(error) = tui::run(controller) { + eprintln!("switchyard-menubar: {error}"); + return ExitCode::FAILURE; + } + } else { + #[cfg(target_os = "macos")] + if let Err(error) = gui::run(controller) { + eprintln!("switchyard-menubar: {error}"); + return ExitCode::FAILURE; + } } ExitCode::SUCCESS } diff --git a/crates/switchyard-menubar/src/models.rs b/crates/switchyard-menubar/src/models.rs index 874affe289..6ddaf16cf8 100644 --- a/crates/switchyard-menubar/src/models.rs +++ b/crates/switchyard-menubar/src/models.rs @@ -1,10 +1,10 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Lists the models an LLM client offers, from its `GET /models` endpoint, +//! This module lists the models an LLM client offers from its `GET /models` endpoint, //! and keeps each fetched list in a cache file. //! -//! The request goes through the system `curl`, the same way the menu runs +//! The request goes through the system `curl`, the same way the app runs //! `launchctl`, so the app needs no HTTP or TLS stack of its own. The key is //! written to curl's stdin, never to its command line, where other processes //! could read it. @@ -25,45 +25,44 @@ use serde::{Deserialize, Serialize}; use crate::config::expand_home; use crate::server_config::Client; -/// The name of the cache file. It sits next to the settings file that the +/// CACHE_FILE names the cache file. It sits next to the settings file that the /// app was started with. pub const CACHE_FILE: &str = "model-lists.json"; -/// The Keychain service that holds keys saved from the route picker. Each +/// KEYCHAIN_SERVICE identifies keys saved from Routes. Each /// item's account is the client's `base_url`, so clients that share a /// gateway share its key. #[cfg(target_os = "macos")] const KEYCHAIN_SERVICE: &str = "Switchyard model list"; -/// How long one listing may take before curl gives up. +/// TIMEOUT_SECONDS limits how long curl may spend listing models. const TIMEOUT_SECONDS: &str = "20"; -/// Held while a thread rewrites the cache file, so that two threads that +/// CACHE_WRITE stays locked while a thread rewrites the cache file, so threads that /// finish at the same time do not drop each other's lists. static CACHE_WRITE: Mutex<()> = Mutex::new(()); -/// One fetched model list, as the cache file stores it. +/// ModelList stores one fetched model list in the cache file. #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct ModelList { - /// The model IDs, sorted. + /// This field stores sorted model IDs. pub models: Vec, - /// When the list was fetched, in seconds since 1970-01-01 UTC. + /// This field records the fetch time in seconds since 1970-01-01 UTC. pub fetched_at: u64, } -/// The model list at one URL, as [`load`] found it. +/// Loaded stores the model list and fetch result for one URL. #[derive(Clone, Debug, PartialEq)] pub struct Loaded { - /// The URL that serves the list. + /// This field names the URL that serves the list. pub url: String, - /// The newest list: fetched just now, or read from the cache file. + /// This field stores the newest list fetched or read from the cache file. pub list: Option, - /// Why the list could not be fetched or saved in the cache file, when - /// that happened. + /// This field records a fetch or cache-write error, if either occurred. pub error: Option, } -/// Why a client's models could not be listed. +/// ListError describes why a client's models could not be listed. #[derive(Clone, Debug, PartialEq)] pub enum ListError { /// The client needs a key, and none is set or saved. @@ -82,7 +81,7 @@ pub enum ListError { } impl ListError { - /// Says what went wrong, in one sentence. + /// This function says what went wrong, in one sentence. pub fn reason(&self) -> String { match self { Self::NoKey => { @@ -101,20 +100,20 @@ impl ListError { } } - /// Says what the user can do while the window has no list to show. The + /// This function says what the user can do while the window has no list to show. The /// window accepts a typed model ID, so most answers offer that. A missing /// variable also stops Apply, so that answer offers only the key field. pub fn advice(&self) -> &'static str { match self { Self::NoEnv(_) => "Or paste the key below to list models.", _ if self.needs_key() => { - "Paste a valid API key below and click Save key, or type a model ID." + "Enter a valid API key and choose Save key and load models, or type a model ID." } _ => "Click Refresh models to try again, or type a model ID.", } } - /// Returns whether saving a key could fix this error. + /// This function returns whether saving a key could fix this error. pub fn needs_key(&self) -> bool { matches!( self, @@ -123,7 +122,7 @@ impl ListError { } } -/// Says that this process lacks a client's `api_key_env` variable. Apply's +/// This function says that this process lacks a client's `api_key_env` variable. Apply's /// `--dry-run` check runs in this process's environment, so the check cannot /// read the key either. pub fn missing_env_note(variable: &str) -> String { @@ -133,7 +132,7 @@ pub fn missing_env_note(variable: &str) -> String { ) } -/// Returns the client's `api_key_env` variable when this process does not +/// This function returns the client's `api_key_env` variable when this process does not /// have it set. pub fn missing_env(client: &Client) -> Option<&str> { client @@ -142,11 +141,11 @@ pub fn missing_env(client: &Client) -> Option<&str> { .filter(|_| env_key(client).is_none()) } -/// The Keychain's answer for each `base_url`. The threads of one [`load`] +/// SavedKeys stores the Keychain's answer for each `base_url`. The threads of one [`load`] /// share it. type SavedKeys = Mutex, String>>>; -/// Returns the model list at each URL that `clients` use, in the order the +/// This function returns the model list at each URL that `clients` use, in the order the /// URLs first appear. Clients whose models share a URL share one list and /// one request. /// @@ -196,7 +195,7 @@ pub fn load( }) } -/// Loads the list at one URL: from the cache file, or fetched with the +/// This function loads the list at one URL: from the cache file, or fetched with the /// client's key and then added to the cache file. fn load_url( cache: &Path, @@ -245,20 +244,20 @@ fn load_url( } } -/// Returns the URL that serves the client's model list. It is also the +/// This function returns the URL that serves the client's model list. It is also the /// list's key in the cache file and in [`Loaded::url`]. pub fn list_url(client: &Client) -> String { models_url(&client.format, &client.base_url) } -/// Returns whether the client's endpoint has no model list that this app can +/// This function returns whether the client's endpoint has no model list that this app can /// ask for. The ChatGPT Codex endpoint answers only a ChatGPT login, never an /// API key, and the app does not hold the login. pub fn unlisted(client: &Client) -> bool { client.host() == "chatgpt.com" } -/// Reads the model list that Codex saved in `$CODEX_HOME/models_cache.json`, +/// This function reads the model list that Codex saved in `$CODEX_HOME/models_cache.json`, /// or in `~/.codex/models_cache.json` when `CODEX_HOME` is unset. Codex /// fetched that list with the user's ChatGPT login. For a ChatGPT client this /// file is the only list of its models that the app can read. @@ -269,7 +268,7 @@ fn codex_models() -> Option { read_codex_models(&home.join("models_cache.json")) } -/// Parses a Codex model list file. Returns every model's `slug`, sorted and +/// This function parses a Codex model list file. Returns every model's `slug`, sorted and /// without duplicates, and the time Codex fetched the file. fn read_codex_models(path: &Path) -> Option { #[derive(Deserialize)] @@ -293,7 +292,7 @@ fn read_codex_models(path: &Path) -> Option { }) } -/// Lists the client's model IDs, sorted. When the client needs a key and +/// This function lists the client's model IDs, sorted. When the client needs a key and /// `key` is `None`, returns [`ListError::NoEnv`] or [`ListError::NoKey`] /// without sending a request. fn list(client: &Client, key: Option<&str>) -> Result, ListError> { @@ -304,21 +303,7 @@ fn list(client: &Client, key: Option<&str>) -> Result, ListError> { } } -/// Returns the models that contain every word of `query`, ignoring case. -pub fn matching<'a>(models: &'a [String], query: &str) -> Vec<&'a str> { - let query = query.to_lowercase(); - let words: Vec<&str> = query.split_whitespace().collect(); - models - .iter() - .map(String::as_str) - .filter(|model| { - let model = model.to_lowercase(); - words.iter().all(|word| model.contains(word)) - }) - .collect() -} - -/// Returns the models endpoint for a client. It builds the URL the way the +/// This function returns the models endpoint for a client. It builds the URL the way the /// server builds its request URLs. OpenAI clients drop a trailing /// `/chat/completions` or `/responses`. Anthropic clients drop a trailing /// `/v1/messages` to `/v1`, and add `/v1` to any other path. @@ -357,7 +342,7 @@ fn models_url(format: &str, base_url: &str) -> String { format!("{path}{query}") } -/// Pairs each models URL with the client whose settings fetch it: the first +/// This function pairs each models URL with the client whose settings fetch it: the first /// client with that URL that sends a key, or else the first client with it. fn by_url(clients: &[Client]) -> Vec<(String, &Client)> { let mut urls: Vec<(String, &Client)> = Vec::new(); @@ -372,13 +357,13 @@ fn by_url(clients: &[Client]) -> Vec<(String, &Client)> { urls } -/// Returns whether the server sends this client a key. If it does, listing +/// This function returns whether the server sends this client a key. If it does, listing /// the client's models needs a key too. fn sends_key(client: &Client) -> bool { client.forward_auth || client.api_key_env.is_some() } -/// Returns the key to list the client's models with, or `None` when the +/// This function returns the key to list the client's models with, or `None` when the /// client needs no key or none is available. /// /// The typed key comes first, then the client's `api_key_env` variable when @@ -414,11 +399,11 @@ fn env_key(client: &Client) -> Option { .filter(|key| !key.trim().is_empty()) } -/// Returns the key saved in the Keychain for `base_url`, or `None` when no +/// This function returns the key saved in the Keychain for `base_url`, or `None` when no /// key is saved. #[cfg(target_os = "macos")] fn saved_key(base_url: &str) -> Result, String> { - /// The Keychain's `errSecItemNotFound` status. + /// NOT_FOUND matches the Keychain's `errSecItemNotFound` status. const NOT_FOUND: i32 = -25300; match security_framework::passwords::get_generic_password(KEYCHAIN_SERVICE, base_url) { Ok(bytes) => String::from_utf8(bytes) @@ -434,7 +419,7 @@ fn saved_key(_base_url: &str) -> Result, String> { Ok(None) } -/// Saves a key in the login Keychain for every client with this `base_url`. +/// This function saves a key in the login Keychain for every client with this `base_url`. #[cfg(target_os = "macos")] pub fn save_key(base_url: &str, key: &str) -> Result<(), String> { security_framework::passwords::set_generic_password( @@ -445,20 +430,20 @@ pub fn save_key(base_url: &str, key: &str) -> Result<(), String> { .map_err(|error| keychain_error(&error)) } -/// Returns the Keychain's message without its final period, so the window +/// This function returns the Keychain's message without its final period, so the window /// can end its own sentence after it. #[cfg(target_os = "macos")] fn keychain_error(error: &security_framework::base::Error) -> String { error.to_string().trim_end_matches('.').to_string() } -/// Returns whether a key has a line break, which would end the header that +/// This function returns whether a key has a line break, which would end the header that /// carries the key and start another one. pub fn has_line_break(key: &str) -> bool { key.contains(['\r', '\n']) } -/// Reads the cache file. A missing or unreadable file reads as empty, so the +/// This function reads the cache file. A missing or unreadable file reads as empty, so the /// app fetches its lists again and writes a new file. fn read_cache(path: &Path) -> BTreeMap { std::fs::read_to_string(path) @@ -467,7 +452,7 @@ fn read_cache(path: &Path) -> BTreeMap { .unwrap_or_default() } -/// Adds the list at `url` to the cache file. The list replaces the one at +/// This function adds the list at `url` to the cache file. The list replaces the one at /// the same URL unless that one is newer: two loads can overlap, and the /// load that fetched a list first can write it last. The text goes to a /// temporary file that is renamed over the cache file, so a reader never @@ -498,7 +483,7 @@ fn write_cache(path: &Path, url: &str, list: &ModelList) -> Result<(), String> { Ok(()) } -/// Returns the current time in seconds since 1970-01-01 UTC. +/// This function returns the current time in seconds since 1970-01-01 UTC. pub fn now() -> u64 { SystemTime::now() .duration_since(UNIX_EPOCH) @@ -523,7 +508,7 @@ fn fetch(url: &str, format: &str, key: Option<&str>) -> Result, List "--max-time", TIMEOUT_SECONDS, ]) - // Read request headers from stdin, one per line. + // curl reads request headers from stdin, one per line. .args(["--header", "@-"]) // `--url` keeps a URL that starts with `-` from being read as an // option. @@ -564,7 +549,7 @@ fn fetch(url: &str, format: &str, key: Option<&str>) -> Result, List } } -/// Parses the model IDs. OpenAI and Anthropic both answer with +/// This function parses the model IDs. OpenAI and Anthropic both answer with /// `{"data": [{"id": ...}, ...]}`. fn parse_ids(body: &str) -> Result, String> { #[derive(Deserialize)] @@ -591,11 +576,10 @@ mod tests { use std::net::TcpListener; use std::sync::Arc; - /// A local HTTP server that answers every request with the current - /// `response` and records the head of each request. Its thread waits in - /// `accept` until the test process exits. + /// Server returns the configured response and records each request header. + /// Its thread waits in `accept` until the test process exits. struct Stub { - /// The `base_url` of a client that lists models here. + /// This field sets the client base URL used to list models from this server. url: String, response: Arc>, requests: Arc>>>, @@ -679,7 +663,7 @@ mod tests { ]; let first = load(&cache, &clients, false, Some("test-key"), &|_| {}); - // No key this time: a cached list needs neither a request nor a key. + // A cached list needs neither a request nor a key. let second = load(&cache, &clients, false, None, &|_| {}); let requests = stub.requests(); @@ -907,16 +891,4 @@ mod tests { std::fs::write(&path, "not json").expect("write"); assert_eq!(read_codex_models(&path), None); } - - #[test] - fn matches_every_word_ignoring_case() { - let models = [ - "claude-opus-5-5".to_string(), - "claude-sonnet-5".to_string(), - "gpt-5.6-sol".to_string(), - ]; - - assert_eq!(matching(&models, "CLAUDE opus"), ["claude-opus-5-5"]); - assert_eq!(matching(&models, "").len(), 3); - } } diff --git a/crates/switchyard-menubar/src/picker.rs b/crates/switchyard-menubar/src/picker.rs deleted file mode 100644 index 746978991e..0000000000 --- a/crates/switchyard-menubar/src/picker.rs +++ /dev/null @@ -1,1755 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -//! The routes window. A sidebar lists the routes. For the open route, the -//! window shows its algorithm and a model for each role, and Apply checks, -//! saves, and restarts the server. -//! -//! The window only collects choices. `server_config` edits the config, -//! `models` lists and caches models, and `server` checks, saves, and -//! restarts, so all of that runs without a GUI. Model lists, Keychain access, -//! and Apply run on worker threads, which send their results through a -//! channel that the menu bar's event loop drains by calling [`Picker::poll`]. - -use std::cell::RefCell; -use std::collections::HashMap; -use std::path::PathBuf; -use std::sync::mpsc::{Receiver, Sender, channel}; - -use objc2::rc::Retained; -use objc2::runtime::ProtocolObject; -use objc2::{DefinedClass, MainThreadOnly, define_class, msg_send, sel}; -use objc2_app_kit::{ - NSAccessibility, NSApplication, NSBackingStoreType, NSBox, NSBoxType, NSButton, NSColor, - NSComboBox, NSComboBoxDelegate, NSControl, NSControlTextEditingDelegate, NSFont, NSPopUpButton, - NSResponder, NSScreen, NSScrollView, NSSecureTextField, NSTableView, NSTextField, - NSTextFieldDelegate, NSTextView, NSView, NSWindow, NSWindowStyleMask, -}; -use objc2_foundation::{ - MainThreadMarker, NSNotification, NSObject, NSObjectProtocol, NSPoint, NSRect, NSSize, - NSString, ns_string, -}; - -use crate::config::Config; -use crate::models::{self, ListError, Loaded, ModelList}; -use crate::server; -use crate::server_config::{ALGORITHMS, Choice, Client, Role, Route, ServerConfig, Tier}; -use crate::sidebar::{self, SidebarSource}; - -// Control tags. Role rows use `CLIENT_TAG + row` for the endpoint popup and -// `MODEL_TAG + row` for the model box. A pick from the model list arrives as -// `SELECTED_TAG + row`. -const ALGORITHM_TAG: isize = 2; -const SAVE_KEY_TAG: isize = 3; -const APPLY_TAG: isize = 4; -const REFRESH_TAG: isize = 5; -const CLOSE_TAG: isize = 6; -const REVERT_TAG: isize = 7; -const CLIENT_TAG: isize = 100; -const MODEL_TAG: isize = 200; -const SELECTED_TAG: isize = 300; - -const SIDEBAR_WIDTH: f64 = sidebar::WIDTH; -const DETAIL_WIDTH: f64 = 750.0; -const WIDTH: f64 = SIDEBAR_WIDTH + DETAIL_WIDTH; -/// The window's content height, or less on a short screen. -const MAX_HEIGHT: f64 = 640.0; -/// The least content height that leaves room for one role row when the -/// generated-block banner and the key area both show: 232 above the rows, -/// 80 for the key area, 84 for the row, and `ROWS_BOTTOM` below. -const MIN_HEIGHT: f64 = 582.0; -const MARGIN: f64 = 24.0; -const CONTENT_WIDTH: f64 = DETAIL_WIDTH - 2.0 * MARGIN; -// The columns of a role row, measured from the left edge of the content. -const ROLE_WIDTH: f64 = 130.0; -const ENDPOINT_X: f64 = ROLE_WIDTH + 12.0; -const ENDPOINT_WIDTH: f64 = 240.0; -const MODEL_X: f64 = ENDPOINT_X + ENDPOINT_WIDTH + 10.0; -const MODEL_WIDTH: f64 = CONTENT_WIDTH - MODEL_X - 6.0; -/// Height of one role row: the role and its two dropdowns, then a note of up -/// to two lines under them. -const ROLE_HEIGHT: f64 = 84.0; -const NOTE_HEIGHT: f64 = 34.0; -/// Height of the key area: three lines of text above the key field. -const KEY_HEIGHT: f64 = 80.0; -/// Height of the algorithm's description: up to two lines. -const SUMMARY_HEIGHT: f64 = 36.0; -/// Height of the result area. A longer result scrolls. -const STATUS_HEIGHT: f64 = 120.0; -const BUTTONS_HEIGHT: f64 = 32.0; -// Distances from the bottom of the window to the edges of the areas that sit -// above the buttons. -const BUTTONS_Y: f64 = 16.0; -const STATUS_Y: f64 = BUTTONS_Y + BUTTONS_HEIGHT + 10.0; -const ROWS_BOTTOM: f64 = STATUS_Y + STATUS_HEIGHT + 8.0; - -define_class!( - /// Receives every control's action and text change, and queues the - /// control's tag for [`Picker::poll`]. The picker handles the tags later, - /// outside AppKit's callback, so an event that AppKit sends while the - /// picker updates its controls only adds a tag and does not reenter it. - // SAFETY: NSObject has no subclassing requirements, and `ControlTarget` - // does not implement `Drop`. - #[unsafe(super(NSObject))] - #[thread_kind = MainThreadOnly] - #[name = "SwitchyardPickerControlTarget"] - #[ivars = RefCell>] - struct ControlTarget; - - impl ControlTarget { - // SAFETY: AppKit calls an action method with the control that sent it. - #[unsafe(method(controlChanged:))] - fn control_changed(&self, sender: &NSControl) { - self.ivars().borrow_mut().push(sender.tag()); - } - } - - unsafe impl NSObjectProtocol for ControlTarget {} - - unsafe impl NSControlTextEditingDelegate for ControlTarget { - // SAFETY: the signature matches the protocol method. - #[unsafe(method(controlTextDidChange:))] - fn control_text_did_change(&self, notification: &NSNotification) { - let control = notification - .object() - .and_then(|object| object.downcast::().ok()); - if let Some(control) = control { - self.ivars().borrow_mut().push(control.tag()); - } - } - } - - unsafe impl NSTextFieldDelegate for ControlTarget {} - - unsafe impl NSComboBoxDelegate for ControlTarget { - // SAFETY: the signature matches the protocol method. - #[unsafe(method(comboBoxSelectionDidChange:))] - fn combo_box_selection_did_change(&self, notification: &NSNotification) { - let control = notification - .object() - .and_then(|object| object.downcast::().ok()); - if let Some(control) = control { - self.ivars() - .borrow_mut() - .push(control.tag() - MODEL_TAG + SELECTED_TAG); - } - } - } -); - -impl ControlTarget { - fn new(mtm: MainThreadMarker) -> Retained { - let this = Self::alloc(mtm).set_ivars(RefCell::new(Vec::new())); - // SAFETY: NSObject's `init` has this signature. - unsafe { msg_send![super(this), init] } - } -} - -define_class!( - /// A model box that scrolls itself into view when it gets keyboard - /// focus, so Tab can reach a role row that the scroll view hides. - // SAFETY: NSComboBox has no subclassing requirements, and `ModelBox` - // does not implement `Drop`. - #[unsafe(super(NSComboBox, NSTextField, NSControl, NSView, NSResponder, NSObject))] - #[thread_kind = MainThreadOnly] - #[name = "SwitchyardPickerModelBox"] - struct ModelBox; - - impl ModelBox { - // SAFETY: the signature matches NSResponder's method. - #[unsafe(method(becomeFirstResponder))] - fn become_first_responder(&self) -> bool { - // SAFETY: NSResponder's `becomeFirstResponder` takes no - // arguments and returns a BOOL. - let became: bool = unsafe { msg_send![super(self), becomeFirstResponder] }; - if became { - self.scrollRectToVisible(self.bounds()); - } - became - } - } -); - -impl ModelBox { - fn new(mtm: MainThreadMarker, frame: NSRect) -> Retained { - // SAFETY: NSComboBox's `initWithFrame:` has this signature. - unsafe { msg_send![Self::alloc(mtm), initWithFrame: frame] } - } -} - -/// A result that a worker thread sends back to the window. -enum Done { - /// The model list at one URL, from load number `load`. - Listed { - load: u64, - loaded: Loaded, - }, - /// The outcome of a load that the user asked for, for the result area. - Status(String), - Applied(Result), -} - -/// What the window knows about the model list at one URL. -#[derive(Default)] -struct ListState { - /// The newest list: fetched, or read from the cache file. - list: Option, - /// Why the last load failed, when it did. - error: Option, - /// `started` is the newest load started for this list, and `shown` is the - /// newest load whose result the window shows. Loads are numbered in the - /// order they start. - started: u64, - shown: u64, -} - -impl ListState { - /// Returns whether a worker thread is loading this list now. - fn loading(&self) -> bool { - self.started > self.shown - } - - /// Records the result of load number `load`. A worker that started - /// earlier can finish later, so the window ignores a result from a load - /// older than the one it shows. Otherwise the error comes from this - /// result, and the newer of the two lists stays, because a failed load - /// returns the list from the cache file, which can be older than the one - /// the window has. The result of the newest load ends the loading state. - fn finish(&mut self, load: u64, list: Option, error: Option) { - if load < self.shown { - return; - } - self.shown = load; - let fetched_at = |list: &Option| list.as_ref().map(|list| list.fetched_at); - if fetched_at(&list) >= fetched_at(&self.list) { - self.list = list; - } - self.error = error; - } -} - -/// A route's algorithm and one choice per role: what the user picked and has -/// not applied yet, or what the config holds. -#[derive(Default)] -struct Draft { - algorithm: usize, - choices: Vec, -} - -/// The controls of one role row. -struct RoleRow { - client: Retained, - model: Retained, - note: Retained, -} - -/// The controls that the picker reads or updates after it lays them out. -struct Controls { - algorithm: Retained, - rows: Vec, - /// The scroll view that holds the role rows. Its room is the space - /// between `rows_top`, the rows' top edge, and the result area. - scroll: Retained, - rows_view: Retained, - rows_top: f64, - key_label: Retained, - key: Retained, - save_key: Retained, - status: Retained, - revert: Retained, - apply: Retained, -} - -/// The parts of the window that stay while the detail pane changes. -struct Shell { - content: Retained, - table: Retained, - detail: Retained, - height: f64, -} - -/// The routes window and what the user has chosen in it. -pub struct Picker { - mtm: MainThreadMarker, - window: Retained, - target: Retained, - source: Retained, - settings: Config, - /// The file that keeps fetched model lists. - cache: PathBuf, - config: Option, - routes: Vec, - clients: Vec, - /// The open route's index in `routes`. - route: usize, - algorithm: usize, - roles: Vec, - /// One choice per role, in role order. - choices: Vec, - /// The algorithm and choices that the config holds for the open route. - saved: Draft, - /// What the user picked on the routes they left, by route key. - drafts: HashMap, - /// The latest choice for each tier on this route. When the next algorithm - /// has no role for a tier, its choice stays here, so switching back - /// restores it. `select_route` clears the map. - by_tier: HashMap, - /// Model lists by URL, kept while the app runs. Clients that list their - /// models at the same URL share one entry. - lists: HashMap, - /// How many list loads the window has started. It numbers the loads. - loads: u64, - /// What the last Apply, or a failed config load, said. - result: String, - /// What the last Refresh models or Save key said. It shows under `result`. - list_notes: String, - /// Whether an Apply is running. - busy: bool, - /// Whether the sidebar shows the open route as edited. - shown_edited: bool, - sender: Sender, - receiver: Receiver, - shell: Shell, - controls: Option, -} - -impl Picker { - pub fn new(mtm: MainThreadMarker, settings: &Config, cache: PathBuf) -> Self { - // SAFETY: the window is not released when closed, because `Picker` - // owns it and shows it again from the menu. - let window = unsafe { - let window = NSWindow::initWithContentRect_styleMask_backing_defer( - NSWindow::alloc(mtm), - rect(0.0, 0.0, WIDTH, MAX_HEIGHT), - NSWindowStyleMask::Titled - | NSWindowStyleMask::Closable - | NSWindowStyleMask::Miniaturizable, - NSBackingStoreType::Buffered, - false, - ); - window.setReleasedWhenClosed(false); - window - }; - window.setTitle(ns_string!("Switchyard routes")); - let source = SidebarSource::new(mtm); - let shell = build_shell(mtm, &window, &source); - window.center(); - let (sender, receiver) = channel(); - Self { - mtm, - window, - target: ControlTarget::new(mtm), - source, - settings: settings.clone(), - cache, - config: None, - routes: Vec::new(), - clients: Vec::new(), - route: 0, - algorithm: 0, - roles: Vec::new(), - choices: Vec::new(), - saved: Draft::default(), - drafts: HashMap::new(), - by_tier: HashMap::new(), - lists: HashMap::new(), - loads: 0, - result: String::new(), - list_notes: String::new(), - busy: false, - shown_edited: false, - sender, - receiver, - shell, - controls: None, - } - } - - /// Whether an Apply is running. - pub fn is_busy(&self) -> bool { - self.busy - } - - /// Stores the menu bar settings after the user edited the settings file. - /// Apply writes the file that `config_file` names. So when `config_file` - /// changes while the window is open and no Apply is running, the window - /// loads the new file and drops changes that the user has not applied. - pub fn set_settings(&mut self, settings: &Config) { - let moved = settings.config_file != self.settings.config_file; - self.settings = settings.clone(); - if moved && !self.busy && self.is_open() { - self.drafts.clear(); - self.load(None); - self.layout(); - } - } - - /// Whether the window is on the screen or in the Dock. - fn is_open(&self) -> bool { - self.window.isVisible() || self.window.isMiniaturized() - } - - /// Brings the window to the front. A window that is closed rereads the - /// server config first and drops what the user picked but did not apply. - /// A window that is open keeps its picks, so the menu item is a way back - /// to it. - pub fn show(&mut self) { - if !self.is_open() { - if !self.busy { - self.drafts.clear(); - // Opening the window again retries a list that failed and has - // nothing to show. The window fetches a list that it already - // has only when the user clicks Refresh models or Save key. - self.lists - .retain(|_, state| state.loading() || state.list.is_some()); - let route = self.routes.get(self.route).map(|route| route.key.clone()); - self.load(route.as_deref()); - } - self.layout(); - } - // An accessory app must activate itself before its window can take - // keyboard focus. `activate` needs macOS 14, so use the older call. - #[allow(deprecated)] - NSApplication::sharedApplication(self.mtm).activateIgnoringOtherApps(true); - self.window.makeKeyAndOrderFront(None); - } - - /// Handles queued control events and finished background work. - pub fn poll(&mut self) { - let tags = std::mem::take(&mut *self.target.ivars().borrow_mut()); - let picks = self.source.take_picks(); - let mut changed = !tags.is_empty() || !picks.is_empty(); - for tag in tags { - self.on_control(tag); - } - for row in picks { - self.on_sidebar(row); - } - while let Ok(done) = self.receiver.try_recv() { - changed = true; - self.on_done(done); - } - if changed { - if self.is_edited() != self.shown_edited { - self.sync_sidebar(); - } - self.update_buttons(); - } - } - - fn load(&mut self, route: Option<&str>) { - let path = &self.settings.config_file; - let loaded = std::fs::read_to_string(path) - .map_err(|error| { - format!( - "Could not read {}: {error}. Check config_file in the menu bar settings.", - path.display() - ) - }) - .and_then(|text| ServerConfig::parse(&text)); - match loaded { - Ok(config) => { - self.routes = config.routes(); - self.clients = config.clients(); - self.route = route - .and_then(|key| self.routes.iter().position(|route| route.key == key)) - .unwrap_or(0); - self.config = Some(config); - self.select_route(); - if self.routes.is_empty() { - self.result = format!( - "{} has no routes to change.", - self.settings.config_file.display() - ); - } - } - Err(error) => { - self.config = None; - self.routes.clear(); - self.clients.clear(); - self.select_route(); - self.result = error; - } - } - } - - /// Shows the open route's algorithm and models: what the user picked on - /// it before, if anything, or else what the config holds. - fn select_route(&mut self) { - self.by_tier.clear(); - self.list_notes.clear(); - let (Some(config), Some(route)) = (&self.config, self.routes.get(self.route)) else { - self.roles.clear(); - self.choices.clear(); - self.saved = Draft::default(); - return; - }; - match config.algorithm(&route.key) { - Some(current) => { - self.algorithm = ALGORITHMS - .iter() - .position(|algorithm| algorithm.kind == current.kind) - .unwrap_or(0); - self.roles = config.roles(&route.key, current); - self.choices = config.choices(&route.key); - self.result.clear(); - } - None => { - self.algorithm = 0; - self.roles = config.roles(&route.key, &ALGORITHMS[0]); - self.choices = vec![Choice::default(); self.roles.len()]; - self.result = format!( - "This window cannot show the current settings of route {}: its type is not \ - in the Algorithm list, or it is a custom-mode llm_classifier. Apply replaces \ - those settings with the algorithm and models you pick.", - route.id - ); - } - } - self.fill_clients(); - self.saved = Draft { - algorithm: self.algorithm, - choices: self.choices.clone(), - }; - if let Some(config) = &self.config - && let Some(route) = self.routes.get(self.route) - && let Some(draft) = self.drafts.get(&route.key) - && let Some(algorithm) = ALGORITHMS.get(draft.algorithm) - { - let roles = config.roles(&route.key, algorithm); - if roles.len() == draft.choices.len() { - self.algorithm = draft.algorithm; - self.roles = roles; - self.choices = draft.choices.clone(); - } - } - self.list_models(); - } - - /// Switches the algorithm. Each new role starts from the latest choice - /// for its tier on this route, so the capable model stays the capable one. - /// Choices for tiers the new algorithm lacks stay in `by_tier`. - fn select_algorithm(&mut self, index: usize) { - self.read_models(); - for (role, choice) in self.roles.iter().zip(&self.choices) { - if let Some(tier) = role.tier { - self.by_tier.insert(tier, choice.clone()); - } - } - let (Some(config), Some(route), Some(algorithm)) = ( - &self.config, - self.routes.get(self.route), - ALGORITHMS.get(index), - ) else { - return; - }; - let roles = config.roles(&route.key, algorithm); - self.choices = roles - .iter() - .map(|role| { - role.tier - .and_then(|tier| self.by_tier.get(&tier).cloned()) - .unwrap_or_default() - }) - .collect(); - self.roles = roles; - self.algorithm = index; - self.fill_clients(); - self.list_models(); - self.layout(); - } - - /// Gives every role without a client the first role's client. - fn fill_clients(&mut self) { - let fallback = self - .choices - .iter() - .map(|choice| &choice.client) - .find(|client| !client.is_empty()) - .or_else(|| self.clients.first().map(|client| &client.name)) - .cloned() - .unwrap_or_default(); - for choice in &mut self.choices { - if choice.client.is_empty() { - choice.client = fallback.clone(); - } - } - } - - /// Opens the route that the user picked in the sidebar, and keeps what - /// the user picked on the route they leave. - fn on_sidebar(&mut self, row: usize) { - let Some(route) = self.source.route_at(row) else { - return; - }; - if route == self.route { - return; - } - if self.busy { - // The result of a running Apply belongs to the route that - // started it, so the sidebar stays on that route. - self.sync_sidebar(); - return; - } - self.stash(); - self.route = route; - self.select_route(); - self.layout(); - } - - /// Returns whether the open route differs from what the config holds. - fn is_edited(&self) -> bool { - differs(&self.saved, self.algorithm, &self.choices) - } - - /// Keeps what the user picked on the open route, or drops the old pick - /// when the route matches the config again. - fn stash(&mut self) { - let Some(route) = self.routes.get(self.route) else { - return; - }; - if self.is_edited() { - self.drafts.insert( - route.key.clone(), - Draft { - algorithm: self.algorithm, - choices: self.choices.clone(), - }, - ); - } else { - self.drafts.remove(&route.key); - } - } - - /// Drops what the user picked on the open route. - fn revert(&mut self) { - if let Some(route) = self.routes.get(self.route) { - self.drafts.remove(&route.key); - } - self.select_route(); - self.layout(); - } - - /// Updates the sidebar's rows and selects the open route's row. - fn sync_sidebar(&mut self) { - self.shown_edited = self.is_edited(); - let entries: Vec = self - .routes - .iter() - .enumerate() - .map(|(index, route)| sidebar::Entry { - title: &route.id, - single_model: route.kind == "passthrough", - edited: if index == self.route { - self.shown_edited - } else { - self.drafts.contains_key(&route.key) - }, - }) - .collect(); - self.source - .show(&self.shell.table, sidebar::rows(&entries), self.route); - } - - /// Loads the lists of the rows' clients that the window does not have: - /// from the cache file, or fetched when the cache file has none. - fn list_models(&mut self) { - let clients = self.row_clients(|state| state.is_none()); - if !clients.is_empty() { - self.load_lists(clients, false, None); - } - } - - /// Fetches the lists that the rows use again, one request per URL. - fn refresh_models(&mut self) { - let clients = self.row_clients(|state| !state.is_some_and(ListState::loading)); - if clients.is_empty() { - return; - } - self.set_list_notes("Refreshing the model lists…".to_string()); - self.load_lists(clients, true, None); - } - - /// Returns the clients that the rows use and whose list state passes - /// `wanted`, each client once. - fn row_clients(&self, wanted: impl Fn(Option<&ListState>) -> bool) -> Vec { - let mut clients: Vec = Vec::new(); - for choice in &self.choices { - if let Some(client) = self.client(&choice.client) - && wanted(self.lists.get(&models::list_url(client))) - && !clients.contains(client) - { - clients.push(client.clone()); - } - } - clients - } - - /// Loads the lists that `clients` use on a worker thread, which loads - /// each URL on its own thread and reports each list as it arrives. With - /// `refresh`, the worker fetches the lists even when the cache file has - /// them, and the outcome replaces the result area's list notes, because - /// the user asked for it. `key` is a key the user just typed, with its - /// `base_url`. The worker lists the models with it first, and saves it in - /// the Keychain only when the models endpoint did not reject it. - fn load_lists(&mut self, clients: Vec, refresh: bool, key: Option<(String, String)>) { - self.loads += 1; - let load = self.loads; - for client in &clients { - self.lists - .entry(models::list_url(client)) - .or_default() - .started = load; - } - self.update_rows(); - let cache = self.cache.clone(); - let sender = self.sender.clone(); - std::thread::spawn(move || { - let typed_key = key.as_ref().map(|(_, key)| key.as_str()); - let lists = models::load(&cache, &clients, refresh, typed_key, &|loaded| { - let _ = sender.send(Done::Listed { - load, - loaded: loaded.clone(), - }); - }); - if !refresh { - return; - } - let mut status = Vec::new(); - if let Some((base_url, key)) = &key { - status.push(keep_key(base_url, key, &lists)); - } - status.extend(lists.iter().map(|loaded| outcome(loaded, &clients))); - let _ = sender.send(Done::Status(status.join("\n"))); - }); - } - - fn client(&self, name: &str) -> Option<&Client> { - self.clients.iter().find(|client| client.name == name) - } - - fn on_control(&mut self, tag: isize) { - let Some(controls) = &self.controls else { - return; - }; - match tag { - ALGORITHM_TAG => { - if let Some(index) = selected(&controls.algorithm) - && index != self.algorithm - { - self.select_algorithm(index); - } - } - SAVE_KEY_TAG => self.save_key(), - REFRESH_TAG => self.refresh_models(), - APPLY_TAG => self.apply(), - REVERT_TAG => self.revert(), - CLOSE_TAG => self.window.close(), - _ if (CLIENT_TAG..MODEL_TAG).contains(&tag) => { - let row = tag.abs_diff(CLIENT_TAG); - let client = controls - .rows - .get(row) - .and_then(|ui| selected(&ui.client)) - .and_then(|index| self.clients.get(index)) - .map(|client| client.name.clone()); - if let (Some(client), Some(choice)) = (client, self.choices.get_mut(row)) { - choice.client = client; - self.list_models(); - // A new client can show or hide the key field and - // enable or disable Apply. - self.update_rows(); - } - } - _ if (MODEL_TAG..SELECTED_TAG).contains(&tag) => { - let row = tag.abs_diff(MODEL_TAG); - if let (Some(ui), Some(choice)) = - (controls.rows.get(row), self.choices.get_mut(row)) - { - choice.model = ui.model.stringValue().to_string(); - } - self.update_row(row); - } - _ if tag >= SELECTED_TAG => { - // The box shows the picked model only after this event, so - // read the picked item rather than the box's text. - let row = tag.abs_diff(SELECTED_TAG); - let picked = controls - .rows - .get(row) - .and_then(|ui| ui.model.objectValueOfSelectedItem()) - .and_then(|value| value.downcast::().ok()); - if let (Some(picked), Some(choice)) = (picked, self.choices.get_mut(row)) { - choice.model = picked.to_string(); - self.update_row(row); - } - } - _ => {} - } - } - - fn on_done(&mut self, done: Done) { - match done { - Done::Listed { - load, - loaded: Loaded { url, list, error }, - } => { - self.lists.entry(url).or_default().finish(load, list, error); - self.update_rows(); - } - Done::Status(status) => self.set_list_notes(status), - Done::Applied(result) => { - self.busy = false; - match result { - Ok(message) => { - if let Some(route) = self.routes.get(self.route) { - self.drafts.remove(&route.key); - } - let prices = self.unpriced_models(); - let route = self.routes.get(self.route).map(|route| route.key.clone()); - self.load(route.as_deref()); - self.layout(); - self.set_result(format!("{message}{prices}")); - } - Err(error) => self.set_result(format!("Not saved. {error}")), - } - } - } - } - - /// Returns a note that names the chosen models with no price in - /// menubar.toml, or an empty note when every model has one. - fn unpriced_models(&self) -> String { - let models = self.choices.iter().map(|choice| choice.model.trim()); - let missing = crate::pricing::unpriced(models, &self.settings.prices); - if missing.is_empty() { - return String::new(); - } - let pronoun = if missing.len() == 1 { "it" } else { "them" }; - format!( - "\nmenubar.toml has no price for {}. Savings stay hidden until you add {pronoun}.", - missing.join(", ") - ) - } - - /// Lists the models of every client with the key field's `base_url` - /// using the typed key, and then saves the key unless the models - /// endpoint rejected it. - fn save_key(&mut self) { - let (Some(controls), Some(base_url)) = (&self.controls, self.key_url().map(str::to_string)) - else { - return; - }; - let key = controls.key.stringValue().to_string().trim().to_string(); - controls.key.setStringValue(ns_string!("")); - if key.is_empty() { - self.set_list_notes("Paste a key into the field first.".to_string()); - return; - } - if models::has_line_break(&key) { - self.set_list_notes( - "Could not use the key, because it has a line break. Paste the key again \ - without line breaks." - .to_string(), - ); - return; - } - let clients: Vec = self - .clients - .iter() - .filter(|client| client.base_url == base_url) - .cloned() - .collect(); - self.set_list_notes(format!( - "Checking the key by listing the models at {base_url}…" - )); - self.load_lists(clients, true, Some((base_url, key))); - } - - fn apply(&mut self) { - if !self.can_apply() { - return; - } - self.read_models(); - let (Some(route), Some(algorithm)) = - (self.routes.get(self.route), ALGORITHMS.get(self.algorithm)) - else { - return; - }; - let route = route.key.clone(); - let choices = self.choices.clone(); - let settings = self.settings.clone(); - let sender = self.sender.clone(); - std::thread::spawn(move || { - let result = server::apply(&settings, &route, algorithm, &choices); - let _ = sender.send(Done::Applied(result)); - }); - self.busy = true; - self.list_notes.clear(); - self.set_result("Checking the config with switchyard-server --dry-run…".to_string()); - } - - /// Copies the typed model IDs into the choices. - fn read_models(&mut self) { - let Some(controls) = &self.controls else { - return; - }; - for (row, choice) in controls.rows.iter().zip(&mut self.choices) { - choice.model = row.model.stringValue().to_string(); - } - } - - fn set_result(&mut self, result: String) { - self.result = result; - self.show_status(); - } - - fn set_list_notes(&mut self, notes: String) { - self.list_notes = notes; - self.show_status(); - } - - /// Writes the result and the list notes in the result area. - fn show_status(&self) { - let Some(controls) = &self.controls else { - return; - }; - let text: Vec<&str> = [self.result.as_str(), self.list_notes.as_str()] - .into_iter() - .filter(|text| !text.is_empty()) - .collect(); - controls - .status - .setString(&NSString::from_str(&text.join("\n"))); - self.update_buttons(); - } - - /// Returns whether Apply can run: no Apply is running, the config has - /// loaded, the user changed the open route, and every role has a model - /// and an endpoint that the config defines. - fn can_apply(&self) -> bool { - !self.busy - && self.config.is_some() - && self.is_edited() - && self.choices.iter().all(|choice| { - self.client(&choice.client).is_some() && !choice.model.trim().is_empty() - }) - } - - fn update_buttons(&self) { - if let Some(controls) = &self.controls { - controls.apply.setEnabled(self.can_apply()); - controls.revert.setEnabled(!self.busy && self.is_edited()); - } - } - - fn update_rows(&self) { - for row in 0..self.choices.len() { - self.update_row(row); - } - let Some(controls) = &self.controls else { - return; - }; - self.update_buttons(); - let key_url = self.key_url(); - let hidden = key_url.is_none(); - controls.key_label.setHidden(hidden); - controls.key.setHidden(hidden); - controls.save_key.setHidden(hidden); - if let Some(url) = key_url { - controls - .key_label - .setStringValue(&NSString::from_str(&format!( - "To list the models at {url}, paste the API key for that address and click \ - Save key. The app uses the key only to list models there and keeps it in \ - your login Keychain, not in a file." - ))); - controls - .key - .setAccessibilityLabel(Some(&NSString::from_str(&format!("API key for {url}")))); - } - self.fit_rows(); - } - - /// Sizes the role rows' scroll view to the room above the result area, - /// less the key area's room while the key area shows, and shows the first - /// role. A scroll view that already has the right height keeps its scroll - /// position, so a model list that arrives does not move the row that the - /// user is editing. - fn fit_rows(&self) { - let Some(controls) = &self.controls else { - return; - }; - let key = if self.key_url().is_some() { - KEY_HEIGHT - } else { - 0.0 - }; - let rows_height = ROLE_HEIGHT * controls.rows.len() as f64; - let room = controls.rows_top - ROWS_BOTTOM - key; - let shown = rows_height.min(room.max(ROLE_HEIGHT)); - if controls.scroll.frame().size.height == shown { - return; - } - controls.scroll.setFrame(rect( - MARGIN, - controls.rows_top - shown, - CONTENT_WIDTH, - shown, - )); - // The rows view's origin is its bottom left, so the scroll view - // starts at the last role. Show the first role instead. - controls - .rows_view - .scrollPoint(NSPoint::new(0.0, rows_height - shown)); - } - - /// Returns the `base_url` that the key field saves a key for: the - /// `base_url` of the first row whose list failed because it needs a - /// working key. - fn key_url(&self) -> Option<&str> { - self.choices.iter().find_map(|choice| { - let client = self.client(&choice.client)?; - let error = self.lists.get(&models::list_url(client))?.error.as_ref()?; - error.needs_key().then_some(client.base_url.as_str()) - }) - } - - /// Fills a row's model list and writes the note under it. - fn update_row(&self, row: usize) { - let (Some(controls), Some(choice)) = (&self.controls, self.choices.get(row)) else { - return; - }; - let Some(ui) = controls.rows.get(row) else { - return; - }; - ui.model.removeAllItems(); - let client = self.client(&choice.client); - let state = client.and_then(|client| self.lists.get(&models::list_url(client))); - let loading = state.is_some_and(ListState::loading); - let note = match (client, state) { - (None, _) if self.clients.is_empty() => "The config has no [llm_clients] entries. \ - Add an LLM client to the server config, \ - then open this window again." - .to_string(), - (None, _) => format!( - "The config has no LLM client named \"{}\". Pick an endpoint in this row.", - choice.client - ), - (Some(client), _) if models::unlisted(client) => { - let saved = state.and_then(|state| state.list.as_ref()); - self.unlisted_note(ui, client, saved, &choice.model) - } - ( - Some(client), - Some(ListState { - list: Some(list), - error, - .. - }), - ) => { - let shown = show_models(ui, &list.models, &choice.model); - let mut note = match_note(shown, list.models.len()).unwrap_or_else(|| { - format!( - "{} models on {}, fetched {}. Type to search.", - list.models.len(), - client.host(), - age(list.fetched_at) - ) - }); - if loading { - note.push_str(" Refreshing…"); - } else if let Some(error) = error { - note.push('\n'); - note.push_str(&error.reason()); - } - // A cached list loads without a key, so the note must name - // the missing variable that Apply needs. - if let Some(variable) = models::missing_env(client) { - note.push('\n'); - note.push_str(&models::missing_env_note(variable)); - } - note - } - ( - Some(_), - Some(ListState { - list: None, - error: Some(error), - .. - }), - ) if !loading => format!("No model list yet. {} {}", error.reason(), error.advice()), - (Some(_), _) => "Loading models…".to_string(), - }; - let note = NSString::from_str(¬e); - ui.note.setStringValue(¬e); - // The note fits two lines, and its tooltip shows the whole text. - ui.note.setToolTip(Some(¬e)); - ui.client.setToolTip( - client - .map(|client| NSString::from_str(&endpoint_tip(client))) - .as_deref(), - ); - } - - /// Fills the list of a row whose client has no model list, and returns - /// its note. The list holds the models that the config already names on - /// the client, and the models that Codex saved. - fn unlisted_note( - &self, - ui: &RoleRow, - client: &Client, - saved: Option<&ModelList>, - query: &str, - ) -> String { - let mut models = self - .config - .as_ref() - .map(|config| config.models_on(&client.name)) - .unwrap_or_default(); - if let Some(saved) = saved { - models.extend(saved.models.iter().cloned()); - } - models.sort(); - models.dedup(); - let shown = show_models(ui, &models, query); - match_note(shown, models.len()).unwrap_or_else(|| { - let source = match saved { - Some(saved) => format!( - "the models in your config and the ones that Codex saved {}", - age(saved.fetched_at) - ), - None => "the models in your config".to_string(), - }; - format!( - "{} has no model list that this app can read. The list shows {source}. Type \ - any other model ID.", - client.host() - ) - }) - } - - /// Rebuilds the detail pane for the open route and algorithm. The role - /// rows sit in a scroll view, so a route with many models still leaves - /// the buttons on the screen. - fn layout(&mut self) { - let mtm = self.mtm; - let height = self.shell.height; - let (content, old_detail) = (self.shell.content.clone(), self.shell.detail.clone()); - let detail = NSView::initWithFrame( - NSView::alloc(mtm), - rect(SIDEBAR_WIDTH, 0.0, DETAIL_WIDTH, height), - ); - // Controls are placed from the top; AppKit's origin is bottom left. - let mut top = 20.0; - let mut next = |row_height: f64| { - let y = height - top - row_height; - top += row_height; - y - }; - - let route = self.routes.get(self.route); - let y = next(30.0); - detail.addSubview(&self.heading( - route.map_or("", |route| route.id.as_str()), - rect(MARGIN, y, CONTENT_WIDTH, 26.0), - )); - let y = next(24.0); - let about = route.map_or(String::new(), |route| { - let table = if route.key == route.id { - String::new() - } else { - format!(" It is [routes.{}] in the config.", route.key) - }; - format!( - "Callers choose this route by sending \"{}\" as the model.{table}", - route.id - ) - }); - detail.addSubview(&self.small(&about, rect(MARGIN, y + 2.0, CONTENT_WIDTH, 16.0))); - let block = self - .config - .as_ref() - .zip(route) - .and_then(|(config, route)| config.generated_by("routes", &route.key)); - if let Some(block) = block { - let y = next(44.0); - let banner = self.wrapping( - &format!( - "Another tool writes this route and overwrites changes made here the \ - next time it runs. Block marker: \"{block}\"." - ), - rect(MARGIN, y + 4.0, CONTENT_WIDTH, 36.0), - ); - banner.setTextColor(Some(&NSColor::systemOrangeColor())); - detail.addSubview(&banner); - } - - let y = next(44.0); - detail.addSubview(&self.label("Algorithm", rect(MARGIN, y + 16.0, 80.0, 18.0))); - let titles: Vec = ALGORITHMS - .iter() - .map(|algorithm| format!("{} ({})", algorithm.title, algorithm.kind)) - .collect(); - let algorithm = self.popup( - &titles, - Some(self.algorithm), - rect(MARGIN + 90.0, y + 12.0, CONTENT_WIDTH - 90.0, 26.0), - ); - algorithm.setTag(ALGORITHM_TAG); - algorithm.setAccessibilityLabel(Some(ns_string!("Algorithm"))); - detail.addSubview(&algorithm); - let y = next(SUMMARY_HEIGHT); - detail.addSubview( - &self.small( - ALGORITHMS - .get(self.algorithm) - .map_or("", |algorithm| algorithm.summary), - rect(MARGIN + 90.0, y, CONTENT_WIDTH - 90.0, SUMMARY_HEIGHT - 2.0), - ), - ); - - let y = next(34.0); - detail.addSubview(&self.bold("Models", rect(MARGIN, y + 8.0, ROLE_WIDTH, 18.0))); - detail.addSubview(&self.column_title( - "Endpoint", - rect(MARGIN + ENDPOINT_X + 2.0, y + 8.0, ENDPOINT_WIDTH, 16.0), - )); - detail.addSubview(&self.column_title( - "Model", - rect(MARGIN + MODEL_X + 2.0, y + 8.0, MODEL_WIDTH, 16.0), - )); - let rows_top = height - top; - - let rows_height = ROLE_HEIGHT * self.roles.len() as f64; - let rows_view = NSView::initWithFrame( - NSView::alloc(mtm), - rect(0.0, 0.0, CONTENT_WIDTH, rows_height), - ); - let endpoints: Vec = self.clients.iter().map(endpoint_title).collect(); - let mut rows = Vec::with_capacity(self.roles.len()); - for (row, (role, choice)) in self.roles.iter().zip(&self.choices).enumerate() { - let y = rows_height - ROLE_HEIGHT * (row + 1) as f64; - let tag = isize::try_from(row).unwrap_or(0); - // The two dropdowns sit at the top of the row, above the note. - let controls_y = y + ROLE_HEIGHT - 34.0; - rows_view - .addSubview(&self.bold(&role.label, rect(0.0, controls_y + 4.0, ROLE_WIDTH, 18.0))); - rows_view.addSubview(&self.small( - role.hint, - rect(0.0, y + 6.0, ROLE_WIDTH - 8.0, ROLE_HEIGHT - 42.0), - )); - // When the config has no client with the choice's name, the - // popup selects nothing, and the note names the missing client. - let selected = self - .clients - .iter() - .position(|client| client.name == choice.client); - let client = self.popup( - &endpoints, - selected, - rect(ENDPOINT_X, controls_y, ENDPOINT_WIDTH, 26.0), - ); - client.setTag(CLIENT_TAG + tag); - client.setAccessibilityLabel(Some(&NSString::from_str(&format!( - "{} endpoint", - role.label - )))); - rows_view.addSubview(&client); - - let model = ModelBox::new(mtm, rect(MODEL_X, controls_y, MODEL_WIDTH, 26.0)); - model.setStringValue(&NSString::from_str(&choice.model)); - model.setPlaceholderString(Some(ns_string!("Search, or type a model ID"))); - model.setNumberOfVisibleItems(14); - model.setCompletes(false); - model.setTag(MODEL_TAG + tag); - model - .setAccessibilityLabel(Some(&NSString::from_str(&format!("{} model", role.label)))); - // SAFETY: the target lives as long as the window. - unsafe { model.setDelegate(Some(ProtocolObject::from_ref(&*self.target))) }; - rows_view.addSubview(&model); - - let note = self.small( - "", - rect( - ENDPOINT_X + 2.0, - y + 4.0, - CONTENT_WIDTH - ENDPOINT_X - 8.0, - NOTE_HEIGHT, - ), - ); - rows_view.addSubview(¬e); - rows.push(RoleRow { - client, - model, - note, - }); - } - // `fit_rows` gives the scroll view its size, because the room depends - // on whether the key field shows. - let scroll = - NSScrollView::initWithFrame(NSScrollView::alloc(mtm), rect(0.0, 0.0, 0.0, 0.0)); - scroll.setHasVerticalScroller(true); - scroll.setAutohidesScrollers(true); - scroll.setDrawsBackground(false); - scroll.setDocumentView(Some(&rows_view)); - detail.addSubview(&scroll); - - let key_label = self.wrapping("", rect(MARGIN, ROWS_BOTTOM + 30.0, CONTENT_WIDTH, 48.0)); - detail.addSubview(&key_label); - let key = NSSecureTextField::initWithFrame( - NSSecureTextField::alloc(mtm), - rect(MARGIN, ROWS_BOTTOM + 4.0, CONTENT_WIDTH - 110.0, 22.0), - ); - key.setPlaceholderString(Some(ns_string!("Paste the API key"))); - // Return in the field saves the key instead of running Apply. - key.setTag(SAVE_KEY_TAG); - // SAFETY: `ControlTarget` implements `controlChanged:` and lives as - // long as the window. - unsafe { - key.setTarget(Some(&self.target)); - key.setAction(Some(sel!(controlChanged:))); - } - detail.addSubview(&key); - let save_key = self.button( - "Save key", - SAVE_KEY_TAG, - rect(MARGIN + CONTENT_WIDTH - 100.0, ROWS_BOTTOM, 100.0, 30.0), - ); - detail.addSubview(&save_key); - - // The result can be longer than the area, such as a long --dry-run - // error, so the area scrolls. - let status_scroll = NSScrollView::initWithFrame( - NSScrollView::alloc(mtm), - rect(MARGIN, STATUS_Y, CONTENT_WIDTH, STATUS_HEIGHT), - ); - status_scroll.setHasVerticalScroller(true); - status_scroll.setAutohidesScrollers(true); - status_scroll.setDrawsBackground(false); - let size = status_scroll.contentSize(); - let status = NSTextView::initWithFrame( - NSTextView::alloc(mtm), - rect(0.0, 0.0, size.width, size.height), - ); - // The text view grows down as the text gets longer, and wraps at the - // area's width. - status.setMinSize(size); - status.setMaxSize(NSSize::new(size.width, f64::MAX)); - status.setVerticallyResizable(true); - status.setHorizontallyResizable(false); - status.setEditable(false); - status.setDrawsBackground(false); - status.setFont(Some(&NSFont::systemFontOfSize(NSFont::systemFontSize()))); - // The text must follow the light or dark appearance, because the area - // draws no background of its own. - status.setTextColor(Some(&NSColor::labelColor())); - status_scroll.setDocumentView(Some(&status)); - detail.addSubview(&status_scroll); - - let right = MARGIN + CONTENT_WIDTH; - let refresh = self.button( - "Refresh models", - REFRESH_TAG, - rect(MARGIN, BUTTONS_Y, 150.0, BUTTONS_HEIGHT), - ); - refresh.setEnabled(!self.choices.is_empty()); - detail.addSubview(&refresh); - let revert = self.button( - "Revert", - REVERT_TAG, - rect(right - 320.0, BUTTONS_Y, 100.0, BUTTONS_HEIGHT), - ); - detail.addSubview(&revert); - let close = self.button( - "Close", - CLOSE_TAG, - rect(right - 210.0, BUTTONS_Y, 100.0, BUTTONS_HEIGHT), - ); - // Escape closes the window, as in a macOS dialog. - close.setKeyEquivalent(&NSString::from_str("\u{1b}")); - detail.addSubview(&close); - let apply = self.button( - "Apply", - APPLY_TAG, - rect(right - 100.0, BUTTONS_Y, 100.0, BUTTONS_HEIGHT), - ); - // Return runs Apply, the window's default button. - apply.setKeyEquivalent(ns_string!("\r")); - detail.addSubview(&apply); - - content.replaceSubview_with(&old_detail, &detail); - self.shell.detail = detail; - self.controls = Some(Controls { - algorithm, - rows, - scroll, - rows_view, - rows_top, - key_label, - key, - save_key, - status, - revert, - apply, - }); - // Tab moves between the controls in the order they appear, including - // the controls inside the scroll view. - self.window.recalculateKeyViewLoop(); - self.sync_sidebar(); - self.update_rows(); - self.show_status(); - } - - fn label(&self, text: &str, frame: NSRect) -> Retained { - let label = NSTextField::labelWithString(&NSString::from_str(text), self.mtm); - label.setFrame(frame); - label - } - - fn wrapping(&self, text: &str, frame: NSRect) -> Retained { - let label = NSTextField::wrappingLabelWithString(&NSString::from_str(text), self.mtm); - label.setFrame(frame); - label - } - - /// Returns a wrapping label in the small system font and the secondary color. - fn small(&self, text: &str, frame: NSRect) -> Retained { - let label = self.wrapping(text, frame); - label.setFont(Some(&NSFont::systemFontOfSize( - NSFont::smallSystemFontSize(), - ))); - label.setTextColor(Some(&NSColor::secondaryLabelColor())); - label - } - - fn heading(&self, text: &str, frame: NSRect) -> Retained { - let label = self.label(text, frame); - label.setFont(Some(&NSFont::boldSystemFontOfSize(20.0))); - label - } - - fn bold(&self, text: &str, frame: NSRect) -> Retained { - let label = self.label(text, frame); - label.setFont(Some( - &NSFont::boldSystemFontOfSize(NSFont::systemFontSize()), - )); - label - } - - fn column_title(&self, text: &str, frame: NSRect) -> Retained { - let label = self.label(text, frame); - label.setFont(Some(&NSFont::boldSystemFontOfSize( - NSFont::smallSystemFontSize(), - ))); - label.setTextColor(Some(&NSColor::secondaryLabelColor())); - label - } - - /// Returns a popup that lists `items` with `selected` chosen, or with no - /// item chosen when `selected` is `None`. - fn popup( - &self, - items: &[String], - selected: Option, - frame: NSRect, - ) -> Retained { - let popup = - NSPopUpButton::initWithFrame_pullsDown(NSPopUpButton::alloc(self.mtm), frame, false); - for item in items { - popup.addItemWithTitle(&NSString::from_str(item)); - } - popup.selectItemAtIndex( - selected - .and_then(|index| isize::try_from(index).ok()) - .unwrap_or(-1), - ); - // SAFETY: `ControlTarget` implements `controlChanged:` and lives as - // long as the window. - unsafe { - popup.setTarget(Some(&self.target)); - popup.setAction(Some(sel!(controlChanged:))); - } - popup - } - - fn button(&self, title: &str, tag: isize, frame: NSRect) -> Retained { - // SAFETY: `ControlTarget` implements `controlChanged:` and lives as - // long as the window. - let button = unsafe { - NSButton::buttonWithTitle_target_action( - &NSString::from_str(title), - Some(&self.target), - Some(sel!(controlChanged:)), - self.mtm, - ) - }; - button.setFrame(frame); - button.setTag(tag); - button - } -} - -/// The selected item of a popup, if any. -fn selected(popup: &NSPopUpButton) -> Option { - usize::try_from(popup.indexOfSelectedItem()).ok() -} - -pub fn rect(x: f64, y: f64, width: f64, height: f64) -> NSRect { - NSRect::new(NSPoint::new(x, y), NSSize::new(width, height)) -} - -/// Builds the window's fixed content: the sidebar, its divider, and an empty -/// detail pane. The window is as tall as the screen allows, up to -/// `MAX_HEIGHT`. -fn build_shell(mtm: MainThreadMarker, window: &NSWindow, source: &SidebarSource) -> Shell { - let screen = window.screen().or_else(|| NSScreen::mainScreen(mtm)); - let room = screen.as_ref().map_or(MAX_HEIGHT, |screen| { - window - .contentRectForFrameRect(screen.visibleFrame()) - .size - .height - - 20.0 - }); - let height = MAX_HEIGHT.min(room).max(MIN_HEIGHT); - let content = NSView::initWithFrame(NSView::alloc(mtm), rect(0.0, 0.0, WIDTH, height)); - let (panel, table) = sidebar::build(mtm, source, height); - content.addSubview(&panel); - let divider = NSBox::initWithFrame(NSBox::alloc(mtm), rect(SIDEBAR_WIDTH, 0.0, 1.0, height)); - divider.setBoxType(NSBoxType::Separator); - content.addSubview(÷r); - let detail = NSView::initWithFrame( - NSView::alloc(mtm), - rect(SIDEBAR_WIDTH, 0.0, DETAIL_WIDTH, height), - ); - content.addSubview(&detail); - window.setContentSize(NSSize::new(WIDTH, height)); - window.setContentView(Some(&content)); - Shell { - content, - table, - detail, - height, - } -} - -/// Returns whether the open route differs from the algorithm and choices -/// that the config holds. Leading and trailing spaces in a model ID do not -/// count. -fn differs(saved: &Draft, algorithm: usize, choices: &[Choice]) -> bool { - algorithm != saved.algorithm - || choices.len() != saved.choices.len() - || choices.iter().zip(&saved.choices).any(|(now, saved)| { - now.client != saved.client || now.model.trim() != saved.model.trim() - }) -} - -/// Names the request format of a client in one short word, for the popup and -/// its tooltip. -fn format_word(client: &Client) -> &str { - match client.format.as_str() { - "openai_chat" => "Chat", - "openai_responses" => "Responses", - "anthropic_messages" => "Anthropic", - other => other, - } -} - -/// Names an endpoint in a role's popup: the client's name and the request -/// format that it speaks. -fn endpoint_title(client: &Client) -> String { - format!("{} ({})", client.name, format_word(client)) -} - -/// Says where the client sends requests, in which format, and whose key it -/// uses. -fn endpoint_tip(client: &Client) -> String { - let key = if client.forward_auth { - "It uses each caller's own login.".to_string() - } else if let Some(variable) = &client.api_key_env { - format!("It uses the API key from the environment variable {variable}.") - } else { - "It sends no key.".to_string() - }; - format!( - "Sends requests to {} in the {} format. {key}", - client.base_url, - format_word(client) - ) -} - -/// Puts the models that match `query` in the row's list, and returns how -/// many. A complete ID shows the whole list, so another model is one click -/// away. -fn show_models(ui: &RoleRow, models: &[String], query: &str) -> usize { - let query = query.trim(); - let shown: Vec<&str> = if models.iter().any(|model| model == query) { - models.iter().map(String::as_str).collect() - } else { - models::matching(models, query) - }; - for model in &shown { - // SAFETY: the combo box stores NSString values. - unsafe { ui.model.addItemWithObjectValue(&NSString::from_str(model)) }; - } - shown.len() -} - -/// Says how many models match what the user typed, or returns `None` when -/// the whole list shows. -fn match_note(shown: usize, total: usize) -> Option { - if shown == total { - None - } else if shown == 0 { - Some("No listed model matches. Apply uses the ID as typed.".to_string()) - } else { - Some(format!("{shown} of {total} models match.")) - } -} - -/// Saves a typed key in the Keychain unless the models endpoint rejected -/// it while the app listed `lists` with it, and says what happened. -fn keep_key(base_url: &str, key: &str, lists: &[Loaded]) -> String { - if lists - .iter() - .any(|loaded| matches!(loaded.error, Some(ListError::Rejected(_)))) - { - return format!( - "Did not save the key for {base_url}, because the models endpoint rejected it." - ); - } - match models::save_key(base_url, key) { - Ok(()) => format!("Saved the key for {base_url} in your login Keychain."), - Err(error) => format!( - "Could not save the key in your login Keychain: {error}. The app used the key this \ - time only and did not keep it. To try again, paste the key and click Save key." - ), - } -} - -/// Describes one loaded list for the result area. A ChatGPT client has no -/// list to fetch, so its line names the file that Codex saved instead. -fn outcome(loaded: &Loaded, clients: &[Client]) -> String { - let chatgpt = clients - .iter() - .find(|client| models::list_url(client) == loaded.url && models::unlisted(client)); - if let Some(client) = chatgpt { - return match &loaded.list { - Some(list) => format!( - "{}: read the {} models that Codex saved {}.", - client.host(), - list.models.len(), - age(list.fetched_at) - ), - None => format!("{}: Codex has not saved a model list.", client.host()), - }; - } - let mut line = format!("{}:", loaded.url); - if let Some(list) = &loaded.list { - line.push_str(&format!( - " {} models, fetched {}.", - list.models.len(), - age(list.fetched_at) - )); - } - if let Some(error) = &loaded.error { - line.push(' '); - line.push_str(&error.reason()); - } - line -} - -/// Says how long ago `fetched_at` was, such as "3 hours ago". -fn age(fetched_at: u64) -> String { - let minutes = models::now().saturating_sub(fetched_at) / 60; - let (count, unit) = match minutes { - 0 => return "just now".to_string(), - 1..60 => (minutes, "minute"), - 60..1440 => (minutes / 60, "hour"), - _ => (minutes / 1440, "day"), - }; - let plural = if count == 1 { "" } else { "s" }; - format!("{count} {unit}{plural} ago") -} - -#[cfg(test)] -mod tests { - use super::*; - - fn list(fetched_at: u64) -> Option { - Some(ModelList { - models: vec!["model".to_string()], - fetched_at, - }) - } - - fn choice(client: &str, model: &str) -> Choice { - Choice { - client: client.to_string(), - model: model.to_string(), - } - } - - #[test] - fn a_failed_load_keeps_the_newer_list_and_shows_the_error() { - // Load 1 fetched a list that the cache file does not have, so load 2 - // fails with no list at all. - let mut state = ListState { - list: list(100), - started: 2, - shown: 1, - ..ListState::default() - }; - let failed = ListError::Failed("connection refused".to_string()); - - state.finish(2, None, Some(failed.clone())); - - assert!(!state.loading()); - assert_eq!(state.list, list(100)); - assert_eq!(state.error, Some(failed)); - } - - #[test] - fn ignores_a_load_that_finishes_after_a_newer_one() { - let mut state = ListState { - started: 2, - ..ListState::default() - }; - - state.finish(2, list(200), None); - state.finish(1, None, Some(ListError::Rejected(401))); - - assert!(!state.loading()); - assert_eq!(state.list, list(200)); - assert_eq!(state.error, None); - } - - #[test] - fn a_route_is_edited_when_the_algorithm_endpoint_or_model_changes() { - let saved = Draft { - algorithm: 3, - choices: vec![choice("hub", "sonnet"), choice("hub", "opus")], - }; - let same = [choice("hub", "sonnet"), choice("hub", "opus")]; - - assert!(!differs(&saved, 3, &same)); - // A space typed after a model ID is not a change. - assert!(!differs( - &saved, - 3, - &[choice("hub", "sonnet "), choice("hub", "opus")] - )); - assert!(differs(&saved, 4, &same)); - assert!(differs( - &saved, - 3, - &[choice("chat", "sonnet"), choice("hub", "opus")] - )); - assert!(differs( - &saved, - 3, - &[choice("hub", "sonnet"), choice("hub", "haiku")] - )); - assert!(differs(&saved, 3, &same[..1])); - } -} diff --git a/crates/switchyard-menubar/src/pricing.rs b/crates/switchyard-menubar/src/pricing.rs index ed2a2382d9..9cd7ffc6b3 100644 --- a/crates/switchyard-menubar/src/pricing.rs +++ b/crates/switchyard-menubar/src/pricing.rs @@ -1,8 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Counterfactual cost: what routed traffic cost against what it would have -//! cost had every call gone to one capable model. +//! This module compares recorded calls at configured rates with the baseline model estimate. use std::collections::BTreeMap; @@ -12,14 +11,14 @@ use crate::rollup::{ModelTokens, Totals}; const PER_MILLION: f64 = 1_000_000.0; -/// Per-million-token rates for one model. +/// ModelPrice stores rates per million tokens for one model. #[derive(Clone, Copy, Debug, Deserialize, PartialEq)] pub struct ModelPrice { pub input_per_mtok: f64, - /// Rate for cache reads. Falls back to the full input rate. + /// This field sets the cache-read rate and defaults to the full input rate. #[serde(default)] pub cached_input_per_mtok: Option, - /// Rate for generated tokens, reasoning included. + /// This field sets the rate for generated tokens, including reasoning. pub output_per_mtok: f64, } @@ -33,33 +32,33 @@ impl ModelPrice { } } -/// Rates keyed by the model id the server records in the routing log. +/// PriceTable stores rates by the model ID recorded in the routing log. pub type PriceTable = BTreeMap; -/// What the traffic cost, and what it would have cost without routing. +/// Savings stores estimated costs with and without routing. #[derive(Clone, Copy, Debug, PartialEq)] pub struct Savings { - /// Cost of the calls that actually ran, classifier overhead included. + /// This field stores the estimated cost of recorded calls, including classifier calls. pub actual: f64, - /// Cost of the same caller-facing calls had they all used the baseline model. + /// This field estimates caller-facing calls at the baseline model rates. pub baseline: f64, } impl Savings { - /// Dollars kept. Negative when routing overhead outweighed the cheaper tier. + /// This function returns estimated dollars saved; routing overhead can make the value negative. pub fn saved(&self) -> f64 { self.baseline - self.actual } - /// Fraction of the baseline bill avoided, or `None` with nothing to compare. + /// This function returns the percentage saved, or `None` when the baseline cost is zero. pub fn percent(&self) -> Option { (self.baseline > 0.0).then(|| self.saved() / self.baseline * 100.0) } } -/// Prices a period against the baseline model. +/// This function prices a period against the baseline model. /// -/// Returns `None` when any model seen has no entry in the table, since a +/// This function returns `None` when any model seen has no entry in the table, since a /// partial bill would understate cost and overstate savings. pub fn estimate(totals: &Totals, prices: &PriceTable, baseline_model: &str) -> Option { let baseline_price = prices.get(baseline_model)?; @@ -79,7 +78,7 @@ pub fn estimate(totals: &Totals, prices: &PriceTable, baseline_model: &str) -> O Some(Savings { actual, baseline }) } -/// Returns the models in `models` that have no entry in `prices`, sorted and +/// This function returns the models in `models` that have no entry in `prices`, sorted and /// each once. Such a model makes [`estimate`] return `None`. pub fn unpriced<'a>( models: impl IntoIterator, diff --git a/crates/switchyard-menubar/src/rollup.rs b/crates/switchyard-menubar/src/rollup.rs index c05a34780f..c6c35a487a 100644 --- a/crates/switchyard-menubar/src/rollup.rs +++ b/crates/switchyard-menubar/src/rollup.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Token totals for today and the past week, read from the server's routing log. +//! This module totals tokens for today and the past week from the server's routing log. use std::collections::BTreeMap; use std::fs::{File, Metadata}; @@ -11,24 +11,23 @@ use std::path::Path; use chrono::{DateTime, Local, NaiveDate}; use serde::Deserialize; -/// Tier value the server writes for classifier and judge calls. +/// CLASSIFIER_TIER matches the tier recorded for classifier and judge calls. const CLASSIFIER_TIER: &str = "classifier"; -/// Billable token counts for one model. +/// ModelTokens stores recorded token counts for one model. #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] pub struct ModelTokens { pub requests: u64, - /// Input tokens billed at the full rate. Cache writes bill at that rate - /// too, so they are counted here rather than tracked separately. + /// This field counts input tokens priced at the full rate, including cache writes. pub input: u64, - /// Input tokens served from the provider cache. + /// This field counts input tokens served from the provider cache. pub cached_input: u64, - /// Generated tokens, including reasoning. + /// This field counts generated tokens, including reasoning. pub output: u64, } impl ModelTokens { - /// Every token the provider counted, cached reads included. + /// This function returns the recorded token total, including cached reads. pub fn total(&self) -> u64 { self.input + self.cached_input + self.output } @@ -41,15 +40,15 @@ impl ModelTokens { } } -/// Tokens for a period, split by who asked for them. +/// Totals separates caller-facing calls from classifier calls for a period. /// /// The split matters for savings: without Switchyard the `routed` calls would /// still have happened, but the `classifier` calls would not exist at all. #[derive(Clone, Debug, Default, PartialEq, Eq)] pub struct Totals { - /// Calls that served the caller, keyed by the model that answered. + /// This field groups caller-facing calls by the model that answered. pub routed: BTreeMap, - /// Switchyard's own classifier and judge calls, keyed by model. + /// This field groups classifier and judge calls by model. pub classifier: BTreeMap, } @@ -78,12 +77,12 @@ impl Totals { } } - /// Calls made on the caller's behalf. + /// This function returns the number of caller-facing calls. pub fn requests(&self) -> u64 { self.routed.values().map(|tokens| tokens.requests).sum() } - /// Every token spent, Switchyard's own routing overhead included. + /// This function totals recorded tokens, including routing overhead. pub fn tokens(&self) -> u64 { self.routed .values() @@ -92,20 +91,20 @@ impl Totals { .sum() } - /// True when nothing was recorded. + /// This function returns true when neither group contains recorded calls. pub fn is_empty(&self) -> bool { self.routed.is_empty() && self.classifier.is_empty() } } -/// What the menu shows. +/// Usage stores totals for the daily and weekly summaries. #[derive(Clone, Debug, Default)] pub struct Usage { pub today: Totals, pub week: Totals, } -/// Fields the rollup needs from one routing log line. +/// Record contains the fields used to total one routing log entry. #[derive(Deserialize)] struct Record { ts: String, @@ -133,7 +132,7 @@ impl Record { } } -/// Keeps daily totals and reads only newly completed log lines. +/// Reader keeps daily totals and reads only newly completed log lines. #[derive(Default)] pub struct Reader { metadata: Option, @@ -227,7 +226,7 @@ mod tests { text.parse().expect("valid date") } - /// Builds a log line stamped at a local time, mirroring how the server + /// This function builds a log line stamped at a local time, mirroring how the server /// writes timestamps for events that happened in the local day. fn line(local_ts: &str, model: &str, tier: &str, prompt: u64, completion: u64) -> String { let offset = Local::now().offset().to_string(); diff --git a/crates/switchyard-menubar/src/server.rs b/crates/switchyard-menubar/src/server.rs index 0b9beb3a51..58933ab58e 100644 --- a/crates/switchyard-menubar/src/server.rs +++ b/crates/switchyard-menubar/src/server.rs @@ -1,8 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Controls the installed server: check a config with its `--dry-run`, save -//! it, and restart the LaunchAgent that runs it. +//! This module validates and saves server configs and restarts the server LaunchAgent. use std::fs::OpenOptions; use std::io::{ErrorKind, Write}; @@ -17,16 +16,16 @@ use crate::health::{ServerStatus, probe}; use crate::models; use crate::server_config::{Algorithm, Choice, ServerConfig}; -/// How long to wait for the restarted server to answer `/health`. +/// RESTART_WAIT limits how long the app waits for the restarted server to answer `/health`. const RESTART_WAIT: Duration = Duration::from_secs(10); -/// How many backups one file can get within one second. +/// BACKUPS_PER_SECOND limits the number of backups for one file within one second. const BACKUPS_PER_SECOND: u32 = 100; -/// Switches a route to new models, checks the result with the server's +/// This function switches a route to new models, checks the result with the server's /// `--dry-run`, saves it, and restarts the server. /// -/// Returns what happened on success, one line each: the saved file and its +/// This function reports what happened on success, one line each: the saved file and its /// backup, the restart, notes about the edit, and the check. An error means /// the config file was not changed. pub fn apply( @@ -39,7 +38,7 @@ pub fn apply( // Read the file again so an edit made while the window was open is kept. let text = std::fs::read_to_string(path).map_err(|error| { format!( - "Could not read {}: {error}. Check config_file in the menu bar settings.", + "Could not read {}: {error}. Check config_file in the app settings.", path.display() ) })?; @@ -86,7 +85,7 @@ pub fn apply( Ok(lines.join("\n")) } -/// Adds advice to a check error that comes from a missing `api_key_env` +/// This function adds advice to a check error that comes from a missing `api_key_env` /// variable. The check runs with this app's environment, which is not the /// user's shell environment. fn explain(error: String) -> String { @@ -101,8 +100,8 @@ fn explain(error: String) -> String { } } -/// Returns the `switchyard-server` installed next to this app, which is the -/// binary that the server's LaunchAgent runs. +/// This function returns the validator installed beside the app executable. +/// The app bundle and server LaunchAgent use separate copies built by the same install. fn server_binary() -> Result { std::env::current_exe() .map(|exe| exe.with_file_name("switchyard-server")) @@ -114,7 +113,7 @@ fn server_binary() -> Result { }) } -/// Checks `text` with `switchyard-server --dry-run`, then replaces `path` +/// This function checks `text` with `switchyard-server --dry-run`, then replaces `path` /// with it, keeping `original`, the text that `path` held, as a timestamped /// backup. Returns the backup's path. /// @@ -178,7 +177,7 @@ fn save_checked(binary: &Path, path: &Path, original: &str, text: &str) -> Resul Ok(backup) } -/// Writes `text` to a new backup of `file` and returns its path. The backup +/// This function writes `text` to a new backup of `file` and returns its path. The backup /// is `.switchyard-backup.`, the name the installer uses, /// with `-2`, `-3`, and so on added when that name is taken, so a backup /// never replaces another one. The backup gets the file's permissions before @@ -221,7 +220,7 @@ fn back_up(file: &Path, text: &str) -> Result { )) } -/// Runs `switchyard-server --config --dry-run`, and returns its +/// This function runs `switchyard-server --config --dry-run`, and returns its /// error output when the config is invalid. fn check(binary: &Path, config: &Path) -> Result<(), String> { let output = Command::new(binary) @@ -244,7 +243,7 @@ fn check(binary: &Path, config: &Path) -> Result<(), String> { Err(if stderr.is_empty() { stdout } else { stderr }) } -/// Restarts the server's LaunchAgent. +/// This function restarts the server's LaunchAgent. pub fn restart(launchd_label: &str) -> Result<(), String> { let uid = command("id", &["-u"])?; let target = format!("gui/{}/{launchd_label}", uid.trim()); @@ -264,7 +263,7 @@ fn wait_for_health(server_url: &str) -> bool { } } -/// Runs a command, returning its stdout or a message naming what failed. +/// This function runs a command, returning its stdout or a message naming what failed. pub fn command(program: &str, args: &[&str]) -> Result { let output = Command::new(program) .args(args) @@ -285,7 +284,7 @@ mod tests { use super::*; use std::os::unix::fs::PermissionsExt; - /// Writes a stand-in for `switchyard-server` that runs `body`. + /// This function writes a stand-in for `switchyard-server` that runs `body`. fn fake_server(dir: &Path, body: &str) -> PathBuf { let path = dir.join("switchyard-server"); std::fs::write(&path, format!("#!/bin/sh\n{body}\n")).expect("write script"); diff --git a/crates/switchyard-menubar/src/server_config.rs b/crates/switchyard-menubar/src/server_config.rs index a2e3c335de..1027d13411 100644 --- a/crates/switchyard-menubar/src/server_config.rs +++ b/crates/switchyard-menubar/src/server_config.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Reads the server config and rewrites one route's algorithm and models. +//! This module reads the server config and rewrites one route's algorithm and models. //! //! Edits go through `toml_edit`, so comments, formatting, and every table the //! edit does not touch stay as the user wrote them. The server's own @@ -11,7 +11,7 @@ use std::collections::HashMap; use toml_edit::{DocumentMut, Item, Table, TableLike, Value}; -/// The part a model plays in a route. A choice made for one algorithm carries +/// Tier identifies the part a model plays in a route. A choice made for one algorithm carries /// over to the role with the same tier when the user switches algorithms. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum Tier { @@ -20,31 +20,31 @@ pub enum Tier { Efficient, } -/// A route `type` the picker can write. +/// Algorithm describes a route `type` the apps can write. #[derive(Debug)] pub struct Algorithm { pub kind: &'static str, - /// The name the window shows, in plain words. + /// This field sets the name shown in both apps. pub title: &'static str, pub summary: &'static str, - /// The roles, in the order the window lists them. The list is empty for + /// This field lists roles in display order. The list is empty for /// `random`, whose roles are the entries of its `targets` list. roles: &'static [RoleSpec], - /// Required settings written when a route switches to this type. They + /// This field lists settings written when a route switches to this type. They /// match the values the routing docs use in their examples. settings: &'static [(&'static [&'static str], Setting)], - /// Whether the type accepts a nested `subagents` policy. + /// This field records whether the type accepts a nested `subagents` policy. subagents: bool, } -/// One role of an algorithm. +/// RoleSpec describes one role of an algorithm. #[derive(Debug)] struct RoleSpec { label: &'static str, - /// A sentence that says what the role does. + /// This field explains what the role does. hint: &'static str, tier: Tier, - /// The key path under the route that names the role's target. + /// This field names the key path to the role's target under the route. path: &'static [&'static str], } @@ -65,14 +65,14 @@ impl Setting { const RANDOM: &str = "random"; -/// The route types from the routing docs, in the order the picker lists them. +/// ALGORITHMS lists supported route types in display order. /// `noop` and the experimental `prefill_router` are left out: one calls no /// model, and the other needs a checkpoint file rather than models. pub const ALGORITHMS: &[Algorithm] = &[ Algorithm { kind: "passthrough", title: "Single model", - summary: "Sends every request to one model.", + summary: "This algorithm sends every request to one model.", roles: &[RoleSpec { label: "Model", hint: "This model answers every request.", @@ -85,7 +85,7 @@ pub const ALGORITHMS: &[Algorithm] = &[ Algorithm { kind: RANDOM, title: "Random split", - summary: "Splits requests at random between the models, for A/B tests and baselines.", + summary: "This algorithm splits requests at random between models for A/B tests and baselines.", roles: &[], settings: &[], subagents: false, @@ -227,7 +227,7 @@ pub const ALGORITHMS: &[Algorithm] = &[ Algorithm { kind: "auto", title: "Recommended preset", - summary: "A stage router that starts each request on the efficient model.", + summary: "This stage router starts each request on the efficient model.", roles: &[ RoleSpec { label: "Capable", @@ -247,7 +247,7 @@ pub const ALGORITHMS: &[Algorithm] = &[ }, ]; -/// Route keys every type accepts. Switching types keeps these and removes +/// COMMON_ROUTE_KEYS lists keys that every route type accepts. Switching types keeps these and removes /// the rest, so settings of the old type cannot fail the new type's checks. const COMMON_ROUTE_KEYS: [&str; 6] = [ "id", @@ -258,12 +258,12 @@ const COMMON_ROUTE_KEYS: [&str; 6] = [ "vision", ]; -/// Target settings that change the request body. The server keeps one +/// REQUEST_SETTINGS lists target settings that change the request body. The server keeps one /// target per model on a client, so it rejects two targets that name the /// same model on the same client with different values for these. const REQUEST_SETTINGS: [&str; 3] = ["omit_body_fields", "reasoning_effort", "extra_body"]; -/// Target settings that a route takes on when it uses the target. +/// TARGET_SETTINGS lists settings that a route takes on when it uses the target. const TARGET_SETTINGS: [&str; 4] = [ "system_prompt", "reasoning_effort", @@ -271,17 +271,17 @@ const TARGET_SETTINGS: [&str; 4] = [ "omit_body_fields", ]; -/// One entry under `[routes]`. +/// Route describes one entry under `[routes]`. #[derive(Clone, Debug, PartialEq)] pub struct Route { - /// The route's table name in this file. Callers never send it. + /// This field names the route's table in this file. Callers never send it. pub key: String, - /// The public model ID that callers send. + /// This field sets the public model ID that callers send. pub id: String, pub kind: String, } -/// One entry under `[llm_clients]`. +/// Client describes one entry under `[llm_clients]`. #[derive(Clone, Debug, PartialEq)] pub struct Client { pub name: String, @@ -292,7 +292,7 @@ pub struct Client { } impl Client { - /// Returns the host in `base_url`, such as `chatgpt.com`. A port stays. + /// This function returns the host in `base_url`, such as `chatgpt.com`. A port stays. pub fn host(&self) -> &str { let rest = self .base_url @@ -303,34 +303,35 @@ impl Client { } } -/// A model on an LLM client, as a target names it. -#[derive(Clone, Debug, Default, Eq, PartialEq)] +/// Choice identifies a model and the client that serves it. +#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] pub struct Choice { pub client: String, pub model: String, } -/// A model the algorithm needs, such as the judge. +/// Role describes a model the algorithm needs, such as the judge. #[derive(Clone, Debug, PartialEq)] pub struct Role { pub label: String, - /// A sentence that says what the role does. + /// This field explains what the role does. pub hint: &'static str, pub tier: Option, slot: Slot, } -/// Where a route names a role's target. +/// Slot identifies where a route names a role's target. #[derive(Clone, Debug, PartialEq)] enum Slot { - /// A key path, such as `stage.capable_target`. + /// Key identifies a key path, such as `stage.capable_target`. Key(&'static [&'static str]), - /// An entry of a random route's `targets` list. + /// Listed identifies an entry of a random route's `targets` list. Listed(usize), } impl Slot { - /// Returns the slot's key path under the route, such as + /// This function returns the slot's key path under the route, such as /// `stage.capable_target`. fn path(&self) -> String { match self { @@ -340,21 +341,20 @@ impl Slot { } } -/// The result of [`ServerConfig::edit`]. +/// Edited stores the result of [`ServerConfig::edit`]. #[derive(Debug)] pub struct Edited { - /// The new config text. + /// This field stores the new config text. pub text: String, - /// What the user should know about the edit, one sentence each. + /// This field stores user-facing notes about the edit. pub notes: Vec, } -/// A parsed server config that keeps the original text's layout. +/// ServerConfig keeps the parsed config and the original text's layout. #[derive(Clone, Debug)] pub struct ServerConfig { doc: DocumentMut, - /// The `routes.name` and `targets.name` tables that sit inside blocks - /// another tool writes, each with the text of its block's first marker. + /// This field maps tables inside generated blocks to each block's first marker. generated: HashMap, } @@ -398,7 +398,7 @@ impl ServerConfig { .collect() } - /// Returns the text of the marker that opens the block another tool + /// This function returns the text of the marker that opens the block another tool /// writes around `[table.key]`, when the table sits inside one. That tool /// overwrites the table the next time it runs. pub fn generated_by(&self, table: &str, key: &str) -> Option<&str> { @@ -407,7 +407,7 @@ impl ServerConfig { .map(String::as_str) } - /// Returns the model IDs that targets name on `client`, sorted, each once. + /// This function returns the model IDs that targets name on `client`, sorted, each once. pub fn models_on(&self, client: &str) -> Vec { let mut models: Vec = entries(self.table("targets")) .filter(|(_, target)| text(*target, "llm_client") == Some(client)) @@ -418,7 +418,7 @@ impl ServerConfig { models } - /// Returns the algorithm a route uses now, or `None` when the picker + /// This function returns the algorithm a route uses now, or `None` when the picker /// cannot show it, such as a custom-mode classifier whose groups are /// free-form. pub fn algorithm(&self, route: &str) -> Option<&'static Algorithm> { @@ -430,7 +430,7 @@ impl ServerConfig { ALGORITHMS.iter().find(|algorithm| algorithm.kind == kind) } - /// Returns the roles that `algorithm` needs on `route`. A random route + /// This function returns the roles that `algorithm` needs on `route`. A random route /// keeps its number of targets, and has at least two. pub fn roles(&self, route: &str, algorithm: &Algorithm) -> Vec { if algorithm.kind != RANDOM { @@ -465,7 +465,7 @@ impl ServerConfig { .collect() } - /// Returns the model that each role of the route's current algorithm + /// This function returns the model that each role of the route's current algorithm /// uses. A role whose target is missing gets an empty choice. pub fn choices(&self, route: &str) -> Vec { let Some(algorithm) = self.algorithm(route) else { @@ -481,16 +481,14 @@ impl ServerConfig { .collect() } - /// Returns the config text with `route` switched to `algorithm`, using + /// This function returns the config text with `route` switched to `algorithm`, using /// one choice per role, and notes about the edit. /// - /// For each role, in order of preference: keep the route's target when it - /// already names the model; use another target that names exactly this - /// model on this client when the route would get the same target - /// settings from it, or when the server would reject a second target for - /// that model; change the route's target in place when no other route or - /// role uses it, including a role earlier in this edit; otherwise add a - /// new target that copies it. A changed or copied target keeps settings + /// Each role keeps its target if it already names the selected model. + /// Otherwise, this function reuses a matching target with equivalent settings, + /// or with request settings that prevent the server from accepting a duplicate. + /// If neither exists, this function edits an unshared target or copies a shared one. + /// Roles earlier in this edit also count as users of a target. A changed or copied target keeps settings /// such as `extra_body` and `omit_body_fields`, including settings meant /// for the old model. Targets no route uses any more are left in the file. pub fn edit( @@ -671,7 +669,7 @@ impl ServerConfig { users } - /// Returns the file position for a new `[targets.*]` table. The table + /// This function returns the file position for a new `[targets.*]` table. The table /// goes after the last target outside every generated block, so that the /// next rewrite of a block cannot delete it. When every target sits /// inside a block, any other place is next to a generated target, so the @@ -690,7 +688,7 @@ impl ServerConfig { }) } - /// Says so when the edit sends the callers' logins to another host. A + /// This function says so when the edit sends the callers' logins to another host. A /// client with `forward_auth` sends each caller's own login, and a caller /// that has none for the new host gets HTTP 401. fn login_note(&self, route: &str, choices: &[Choice]) -> Option { @@ -712,7 +710,7 @@ impl ServerConfig { )) } - /// Returns a warning when the route sits inside a block that another tool + /// This function returns a warning when the route sits inside a block that another tool /// writes, which overwrites the route, or when the route uses targets /// inside such a block, which that tool can change or remove. fn generated_note(&self, route: &str, targets: &[String]) -> Option { @@ -742,7 +740,7 @@ impl ServerConfig { } } -/// Picks or writes the target that serves `choice` for one role. Returns its +/// This function picks or writes the target that serves `choice` for one role. Returns its /// name, and the model that the target named before when the edit changed /// the target in place or copied it. Reusing a target adds the route to the /// target's users, so a later role in the same edit copies that target @@ -823,7 +821,7 @@ fn choose_target<'a>( Ok((name, old)) } -/// Returns a note about the request settings that a target kept when the +/// This function returns a note about the request settings that a target kept when the /// edit moved it from `old` to `new`, a model of another family or on a /// client with another request format. A setting meant for the old model can /// make the provider reject the new model's requests, and `--dry-run` does @@ -871,7 +869,7 @@ fn kept_settings_note( }) } -/// Returns a model's family: the first word of the last part of its ID, +/// This function returns a model's family: the first word of the last part of its ID, /// such as `gpt` for `openai/gpt-5.6-sol`. fn family(model: &str) -> String { let name = model.rsplit('/').next().unwrap_or(model); @@ -881,7 +879,7 @@ fn family(model: &str) -> String { .to_lowercase() } -/// Returns another target that names `choice` and that a role whose target +/// This function returns another target that names `choice` and that a role whose target /// is `current` may use. The role takes on that target's settings. So it /// uses a target with the same settings as `current`, or else a target whose /// request settings differ from `current`, because the server would reject a @@ -911,7 +909,7 @@ fn reusable<'t>( .map(|(name, _)| *name) } -/// Returns a target's setting as plain data, so the same value written in +/// This function returns a target's setting as plain data, so the same value written in /// another layout compares equal. fn setting(target: &dyn TableLike, key: &str) -> Option { let mut table = Table::new(); @@ -923,7 +921,7 @@ fn setting(target: &dyn TableLike, key: &str) -> Option { .remove(key) } -/// Clears the file position of every table in `item`. A copied sub-table +/// This function clears the file position of every table in `item`. A copied sub-table /// then follows the header of the table it is copied into, not the header /// of the table it came from. fn unplace(item: &mut Item) { @@ -935,13 +933,13 @@ fn unplace(item: &mut Item) { } } -/// Returns whether a target names exactly this model on this client. +/// This function returns whether a target names exactly this model on this client. fn names_choice(target: &dyn TableLike, choice: &Choice) -> bool { text(target, "llm_client") == Some(choice.client.as_str()) && text(target, "id") == Some(choice.model.as_str()) } -/// Removes the old type's settings and sets the new `type`. Returns the +/// This function removes the old type's settings, sets the new `type`, and returns the /// removed settings as key paths, such as `classifier.base_threshold`. The /// list leaves out `old_slots`, the old roles' targets, which the new roles /// replace. @@ -969,7 +967,7 @@ fn reset_route( removed } -/// Adds the key path of every value in `item` to `paths`. +/// This function adds the key path of every value in `item` to `paths`. fn key_paths(path: &str, item: &Item, paths: &mut Vec) { match item.as_table_like() { Some(table) => { @@ -999,7 +997,7 @@ fn set_slot(route: &mut dyn TableLike, slot: &Slot, name: &str) { } } -/// Sets a value at a key path, creating missing tables on the way. +/// This function sets a value at a key path, creating missing tables on the way. fn set_at(table: &mut dyn TableLike, path: &[&str], value: Value) { match path { [] => {} @@ -1015,7 +1013,7 @@ fn set_at(table: &mut dyn TableLike, path: &[&str], value: Value) { } } -/// Replaces a value, keeping the spacing and trailing comment around it. +/// This function replaces a value, keeping the spacing and trailing comment around it. fn set_value(table: &mut dyn TableLike, key: &str, mut value: Value) { if let Some(old) = table.get_mut(key).and_then(Item::as_value_mut) { *value.decor_mut() = old.decor().clone(); @@ -1061,7 +1059,7 @@ fn visit_value(value: &Value, visit: &mut dyn FnMut(&str)) { } } -/// Returns the hosts that get the callers' own logins: the hosts of the +/// This function returns the hosts that get the callers' own logins: the hosts of the /// `forward_auth` clients that `choices` name, sorted, each once. fn login_hosts<'c>(clients: &'c [Client], choices: &[Choice]) -> Vec<&'c str> { let mut hosts: Vec<&str> = choices @@ -1075,7 +1073,7 @@ fn login_hosts<'c>(clients: &'c [Client], choices: &[Choice]) -> Vec<&'c str> { hosts } -/// Finds the route and target tables that sit inside blocks another tool +/// This function finds the route and target tables that sit inside blocks another tool /// writes. A block starts at a line that begins with `# >>>` and ends at the /// next line that begins with `# <<<`, the markers that the installer scripts /// use. Each table maps to the text of its block's first marker, with the `#` @@ -1105,7 +1103,7 @@ fn generated_tables(text: &str) -> HashMap { tables } -/// Returns the first key of a table header's dotted path, bare or in double +/// This function returns the first key of a table header's dotted path, bare or in double /// quotes: `name` for `name.child]`, and `a.b` for `"a.b"]`. fn table_key(path: &str) -> Option<&str> { if let Some(quoted) = path.strip_prefix('"') { @@ -1118,8 +1116,7 @@ fn table_key(path: &str) -> Option<&str> { mod tests { use super::*; - /// A composite route with a GPT judge on a Responses client and Claude on - /// a Chat Completions client, both on one gateway. + /// This fixture uses a GPT judge and Claude on one gateway with different API formats. const GATEWAY: &str = r#"schema_version = 1 [llm_clients.gateway] @@ -1179,7 +1176,7 @@ confidence_threshold = 0.5 .expect("known algorithm") } - /// Edits the config and checks the result with the server's parser. + /// This function edits the config and checks the result with the server's parser. fn edit(text: &str, route: &str, kind: &str, choices: &[Choice]) -> Edited { let edited = ServerConfig::parse(text) .expect("parse") @@ -1222,7 +1219,7 @@ confidence_threshold = 0.5 #[test] fn a_target_one_role_reuses_is_not_changed_for_another_role() { - // Capable moves to the efficient model, and Efficient to a new one. + // Capable moves to the efficient model, and Efficient moves to a new model. let chosen = [ choice("gateway", "gpt-5.6-terra"), choice("gateway_chat", "claude-sonnet-5"), @@ -1495,8 +1492,8 @@ confidence_threshold = 0.5 } } - /// A config whose last target and route sit inside a block that a script - /// writes. A hand-written route shares the capable target. + /// This fixture places the last target and route inside a generated block. + /// A hand-written route shares the capable target. fn with_generated_block() -> String { format!( "{GATEWAY}\n[routes.direct]\nid = \"direct\"\ntype = \"passthrough\"\n\ @@ -1595,7 +1592,7 @@ confidence_threshold = 0.5 fn warns_when_a_change_is_inside_a_generated_block() { let text = with_generated_block(); - // A route inside the block: the tool overwrites the change. + // The tool overwrites changes to a route inside its generated block. let inside = edit( &text, "generated", @@ -1611,7 +1608,7 @@ confidence_threshold = 0.5 inside.notes ); - // A hand-written route that ends up on a target inside the block. + // The hand-written route now uses a target inside the generated block. let outside = edit( &text, "direct", diff --git a/crates/switchyard-menubar/src/sidebar.rs b/crates/switchyard-menubar/src/sidebar.rs deleted file mode 100644 index 222c557260..0000000000 --- a/crates/switchyard-menubar/src/sidebar.rs +++ /dev/null @@ -1,331 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -//! The route list at the left of the routes window: one entry per route, in -//! two groups. -//! -//! The table view asks [`SidebarSource`] for its rows. A pick goes into a -//! queue that the window reads by calling [`SidebarSource::take_picks`], so a -//! pick that AppKit sends does not reenter the window. Selection changes that -//! the window makes itself, when it redraws the rows, are not picks. - -use std::cell::{Cell, RefCell}; - -use objc2::rc::Retained; -use objc2::runtime::ProtocolObject; -use objc2::{DefinedClass, MainThreadOnly, define_class, msg_send}; -use objc2_app_kit::{ - NSColor, NSControlTextEditingDelegate, NSFont, NSLineBreakMode, NSScrollView, NSTableCellView, - NSTableColumn, NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTableViewStyle, - NSTextField, NSView, NSVisualEffectBlendingMode, NSVisualEffectMaterial, NSVisualEffectState, - NSVisualEffectView, -}; -use objc2_foundation::{ - MainThreadMarker, NSIndexSet, NSInteger, NSNotification, NSObject, NSObjectProtocol, NSString, - ns_string, -}; - -use crate::picker::rect; - -pub const WIDTH: f64 = 210.0; -const ROW_HEIGHT: f64 = 28.0; - -/// One row of the sidebar. -pub enum SidebarRow { - /// A group title. The user cannot pick it. - Header(&'static str), - /// A route: its index in the window's route list, and the text to show. - Route { route: usize, title: String }, -} - -/// One route as the sidebar lists it. -pub struct Entry<'a> { - pub title: &'a str, - /// Whether the route sends every request to one model. - pub single_model: bool, - /// Whether the user changed the route and has not applied the change. - pub edited: bool, -} - -/// Builds the rows: the routes that choose between models, then the routes -/// that send every request to one model. The group titles show only when both -/// groups have routes, because a list of one kind needs no titles. An edited -/// route gets a dot. -pub fn rows(entries: &[Entry]) -> Vec { - let group = |single_model: bool| { - entries - .iter() - .enumerate() - .filter(move |(_, entry)| entry.single_model == single_model) - .map(|(route, entry)| SidebarRow::Route { - route, - title: if entry.edited { - format!("{} •", entry.title) - } else { - entry.title.to_string() - }, - }) - .collect::>() - }; - let (routers, singles) = (group(false), group(true)); - let titled = !routers.is_empty() && !singles.is_empty(); - let mut rows = Vec::with_capacity(entries.len() + 2); - for (title, group) in [ - ("Multi-model routes", routers), - ("Single-model routes", singles), - ] { - if titled { - rows.push(SidebarRow::Header(title)); - } - rows.extend(group); - } - rows -} - -/// What the table view reads, and what it reports. -#[derive(Default)] -pub struct State { - rows: RefCell>, - picks: RefCell>, - /// Whether the window is redrawing the rows. The table view reports the - /// selection changes that the redraw causes, and they are not picks. - redrawing: Cell, -} - -define_class!( - /// Gives the route table its rows and queues the row that the user picks. - // SAFETY: NSObject has no subclassing requirements, and `SidebarSource` - // does not implement `Drop`. - #[unsafe(super(NSObject))] - #[thread_kind = MainThreadOnly] - #[name = "SwitchyardSidebarSource"] - #[ivars = State] - pub struct SidebarSource; - - impl SidebarSource { - // SAFETY: the signature matches the protocol method. - #[unsafe(method(numberOfRowsInTableView:))] - fn number_of_rows(&self, _table: &NSTableView) -> NSInteger { - NSInteger::try_from(self.ivars().rows.borrow().len()).unwrap_or(0) - } - - // SAFETY: the signature matches the protocol method. - #[unsafe(method_id(tableView:viewForTableColumn:row:))] - fn view_for_row( - &self, - _table: &NSTableView, - _column: Option<&NSTableColumn>, - row: NSInteger, - ) -> Option> { - self.view_at(row) - } - - // SAFETY: the signature matches the protocol method. - #[unsafe(method(tableView:isGroupRow:))] - fn is_group_row(&self, _table: &NSTableView, row: NSInteger) -> bool { - self.is_header(row) - } - - // SAFETY: the signature matches the protocol method. - #[unsafe(method(tableView:shouldSelectRow:))] - fn should_select_row(&self, _table: &NSTableView, row: NSInteger) -> bool { - !self.is_header(row) - } - - // SAFETY: the signature matches the protocol method. - #[unsafe(method(tableViewSelectionDidChange:))] - fn selection_did_change(&self, notification: &NSNotification) { - if self.ivars().redrawing.get() { - return; - } - let table = notification - .object() - .and_then(|object| object.downcast::().ok()); - if let Some(row) = table.and_then(|table| usize::try_from(table.selectedRow()).ok()) { - self.ivars().picks.borrow_mut().push(row); - } - } - } - - unsafe impl NSObjectProtocol for SidebarSource {} - unsafe impl NSControlTextEditingDelegate for SidebarSource {} - unsafe impl NSTableViewDataSource for SidebarSource {} - unsafe impl NSTableViewDelegate for SidebarSource {} -); - -impl SidebarSource { - pub fn new(mtm: MainThreadMarker) -> Retained { - let this = Self::alloc(mtm).set_ivars(State::default()); - // SAFETY: NSObject's `init` has this signature. - unsafe { msg_send![super(this), init] } - } - - /// Shows `rows` in `table` and selects the row of `route`. The table - /// view clears the selection when it reloads, and it selects the first - /// route because it does not allow an empty selection. The window must - /// not read either change as a pick. - pub fn show(&self, table: &NSTableView, rows: Vec, route: usize) { - *self.ivars().rows.borrow_mut() = rows; - self.ivars().redrawing.set(true); - table.reloadData(); - if let Some(row) = self.row_of(route) { - table.selectRowIndexes_byExtendingSelection(&NSIndexSet::indexSetWithIndex(row), false); - table.scrollRowToVisible(isize::try_from(row).unwrap_or(0)); - } - self.ivars().redrawing.set(false); - } - - /// Returns the rows that the user picked since the last call. - pub fn take_picks(&self) -> Vec { - std::mem::take(&mut *self.ivars().picks.borrow_mut()) - } - - /// Builds the view for a row, or `None` when the table asks for a row - /// that does not exist. - fn view_at(&self, row: NSInteger) -> Option> { - let rows = self.ivars().rows.borrow(); - let row = rows.get(usize::try_from(row).ok()?)?; - Some(row_view(self.mtm(), row)) - } - /// Returns the route that a row shows, or `None` for a group title. - pub fn route_at(&self, row: usize) -> Option { - match self.ivars().rows.borrow().get(row)? { - SidebarRow::Route { route, .. } => Some(*route), - SidebarRow::Header(_) => None, - } - } - - /// Returns the row that shows a route. - pub fn row_of(&self, route: usize) -> Option { - self.ivars().rows.borrow().iter().position( - |row| matches!(row, SidebarRow::Route { route: shown, .. } if *shown == route), - ) - } - - fn is_header(&self, row: NSInteger) -> bool { - usize::try_from(row).is_ok_and(|row| { - matches!( - self.ivars().rows.borrow().get(row), - Some(SidebarRow::Header(_)) - ) - }) - } -} - -fn row_view(mtm: MainThreadMarker, row: &SidebarRow) -> Retained { - let (text, header) = match row { - SidebarRow::Header(title) => ((*title).to_string(), true), - SidebarRow::Route { title, .. } => (title.clone(), false), - }; - let label = NSTextField::labelWithString(&NSString::from_str(&text), mtm); - if header { - label.setFont(Some(&NSFont::boldSystemFontOfSize( - NSFont::smallSystemFontSize(), - ))); - label.setTextColor(Some(&NSColor::secondaryLabelColor())); - } - label.setLineBreakMode(NSLineBreakMode::ByTruncatingTail); - label.setFrame(rect(10.0, 5.0, WIDTH - 36.0, 18.0)); - // SAFETY: NSView's `initWithFrame:` has this signature. - let cell: Retained = unsafe { - msg_send![NSTableCellView::alloc(mtm), initWithFrame: rect(0.0, 0.0, WIDTH, ROW_HEIGHT)] - }; - cell.addSubview(&label); - // The cell view recolors its text field when the row is selected. - // SAFETY: the label is a text field, which `textField` takes. - unsafe { cell.setTextField(Some(&label)) }; - Retained::into_super(cell) -} - -/// Builds the sidebar: a translucent panel that holds the route table. -/// `source` must live as long as the returned views. -pub fn build( - mtm: MainThreadMarker, - source: &SidebarSource, - height: f64, -) -> (Retained, Retained) { - let frame = rect(0.0, 0.0, WIDTH, height); - let panel = NSVisualEffectView::initWithFrame(NSVisualEffectView::alloc(mtm), frame); - panel.setMaterial(NSVisualEffectMaterial::Sidebar); - panel.setBlendingMode(NSVisualEffectBlendingMode::BehindWindow); - panel.setState(NSVisualEffectState::FollowsWindowActiveState); - - let table = NSTableView::initWithFrame(NSTableView::alloc(mtm), frame); - let column = NSTableColumn::initWithIdentifier(NSTableColumn::alloc(mtm), ns_string!("route")); - column.setWidth(WIDTH - 20.0); - table.addTableColumn(&column); - table.setHeaderView(None); - table.setStyle(NSTableViewStyle::SourceList); - table.setBackgroundColor(&NSColor::clearColor()); - table.setRowHeight(ROW_HEIGHT); - table.setAllowsEmptySelection(false); - // SAFETY: the caller keeps `source` alive as long as the table. - unsafe { - table.setDataSource(Some(ProtocolObject::from_ref(source))); - table.setDelegate(Some(ProtocolObject::from_ref(source))); - } - - // The list starts a little below the title bar. - let scroll = NSScrollView::initWithFrame( - NSScrollView::alloc(mtm), - rect(0.0, 0.0, WIDTH, height - 10.0), - ); - scroll.setDrawsBackground(false); - scroll.setHasVerticalScroller(true); - scroll.setAutohidesScrollers(true); - scroll.setDocumentView(Some(&table)); - panel.addSubview(&scroll); - (panel, table) -} - -#[cfg(test)] -mod tests { - use super::*; - - fn entry(title: &str, single_model: bool, edited: bool) -> Entry<'_> { - Entry { - title, - single_model, - edited, - } - } - - /// Describes the rows as text: `#` for a group title, `-` for a route. - fn describe(rows: &[SidebarRow]) -> Vec { - rows.iter() - .map(|row| match row { - SidebarRow::Header(title) => format!("# {title}"), - SidebarRow::Route { route, title } => format!("- {route} {title}"), - }) - .collect() - } - - #[test] - fn lists_the_multi_model_routes_first_and_keeps_each_route_index() { - let rows = rows(&[ - entry("gpt-6-sol", true, false), - entry("switchyard", false, true), - entry("gpt-6-luna", true, false), - ]); - - assert_eq!( - describe(&rows), - [ - "# Multi-model routes", - "- 1 switchyard •", - "# Single-model routes", - "- 0 gpt-6-sol", - "- 2 gpt-6-luna", - ] - ); - } - - #[test] - fn a_list_of_one_kind_has_no_group_titles() { - let singles = rows(&[entry("a", true, false), entry("b", true, false)]); - let routers = rows(&[entry("a", false, false)]); - - assert_eq!(describe(&singles), ["- 0 a", "- 1 b"]); - assert_eq!(describe(&routers), ["- 0 a"]); - } -} diff --git a/crates/switchyard-menubar/src/summary.rs b/crates/switchyard-menubar/src/summary.rs index 49e5123951..cadd17557b 100644 --- a/crates/switchyard-menubar/src/summary.rs +++ b/crates/switchyard-menubar/src/summary.rs @@ -1,17 +1,17 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Turns totals and prices into the rows the menu shows. +//! This module turns totals and prices into usage summary rows. use crate::config::Config; use crate::health::ServerStatus; use crate::pricing::{Savings, estimate, unpriced}; use crate::rollup::{Totals, Usage}; -/// Most model rows shown, so the menu stays short. +/// MAX_MODEL_ROWS limits the number of models shown in the usage summary. const MAX_MODEL_ROWS: usize = 5; -/// One line of the menu. Rows are informational; the actions are fixed. +/// Row represents one informational line or separator in the usage summary. #[derive(Clone, Debug, PartialEq, Eq)] pub enum Row { Separator, @@ -22,7 +22,7 @@ fn label(text: impl Into) -> Row { Row::Label(text.into()) } -/// Builds the menu body for the current day and trailing week. +/// This function builds the menu body for the current day and trailing week. pub fn build(status: ServerStatus, usage: &Usage, config: &Config) -> Vec { let state = match status { ServerStatus::Running => "running", @@ -72,7 +72,7 @@ pub fn build(status: ServerStatus, usage: &Usage, config: &Config) -> Vec { rows } -/// Names at most three models, so that the menu row stays short. +/// This function names at most three models, so that the menu row stays short. fn listed(models: &[&str]) -> String { match models { [first, second, third, rest @ ..] if !rest.is_empty() => { @@ -113,7 +113,7 @@ fn model_shares(week: &Totals) -> Vec { .iter() .map(|(model, tokens)| (model, tokens.total())) .collect(); - // Largest share first; model id breaks ties so the order is stable. + // Models appear by decreasing share; the model ID breaks ties for a stable order. models.sort_by(|left, right| right.1.cmp(&left.1).then_with(|| left.0.cmp(right.0))); models .into_iter() @@ -127,7 +127,7 @@ fn model_shares(week: &Totals) -> Vec { .collect() } -/// Formats a token count compactly, since exact totals are not useful here. +/// This function formats a token count compactly, since exact totals are not useful here. fn tokens(value: u64) -> String { match value { 0..=9_999 => value.to_string(), @@ -137,7 +137,7 @@ fn tokens(value: u64) -> String { } } -/// Formats dollars, keeping the sign readable when routing cost more than it saved. +/// This function formats dollars, keeping the sign readable when routing cost more than it saved. fn money(value: f64) -> String { if value < 0.0 { format!("-${:.2}", -value) diff --git a/crates/switchyard-menubar/src/tray.rs b/crates/switchyard-menubar/src/tray.rs deleted file mode 100644 index 5c6f7859b7..0000000000 --- a/crates/switchyard-menubar/src/tray.rs +++ /dev/null @@ -1,320 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -//! This module runs the macOS status item, its menu, and the app event loop. - -use objc2::rc::autoreleasepool; -use std::path::Path; -use std::thread; -use std::time::{Duration, Instant, SystemTime}; - -use objc2_app_kit::{NSAlert, NSApplication, NSApplicationActivationPolicy, NSEventMask}; -use objc2_foundation::{MainThreadMarker, NSDate, NSDefaultRunLoopMode, NSString}; -use tray_icon::menu::{IsMenuItem, Menu, MenuEvent, MenuItem, PredefinedMenuItem, Submenu}; -use tray_icon::{Icon, TrayIconBuilder}; - -use crate::app::refresh; -use crate::config::Config; -use crate::dashboard::Dashboard; -use crate::health::ServerStatus; -use crate::icon; -use crate::models::CACHE_FILE; -use crate::picker::Picker; -use crate::server::{command, restart}; -use crate::summary::Row; - -const OPEN_APP: &str = "open-app"; -const INSTALL: &str = "install"; -const EDIT_ROUTES: &str = "edit-routes"; -const RESTART: &str = "restart-server"; -const OPEN_CONFIG: &str = "open-config"; -const OPEN_SETTINGS: &str = "open-settings"; -const QUIT: &str = "quit"; - -/// EVENT_POLL sets how long the loop waits for a UI event before checking the clock. -const EVENT_POLL: f64 = 0.1; - -/// Runs the status item until the user quits. `settings` is the settings -/// file that `config` came from. The model list cache sits next to it, and -/// the menu bar reads the file again whenever it changes. -pub fn run(mut config: Config, settings: &Path) -> Result<(), String> { - let mtm = MainThreadMarker::new().ok_or("the menu bar must run on the main thread")?; - let ns_app = NSApplication::sharedApplication(mtm); - // The Regular policy shows the app in the Dock and the app switcher. - ns_app.setActivationPolicy(NSApplicationActivationPolicy::Regular); - // AppKit uses the main menu for shortcuts such as Cmd-C in a text field, - // Cmd-W in a window, and Cmd-Q to request quitting. - let main_menu = main_menu()?; - main_menu.init_for_nsapp(); - - let mut log = crate::rollup::Reader::default(); - let (first, first_rows) = refresh(&config, &mut log); - let tray = TrayIconBuilder::new() - .with_icon(glyph(first)?) - .with_icon_as_template(true) - .with_tooltip(tooltip(first)) - .with_menu(Box::new(menu(&first_rows)?)) - .build() - .map_err(|error| format!("create status item: {error}"))?; - let mut shown = first; - let mut settings_seen = modified(settings); - - ns_app.finishLaunching(); - - let mut dashboard = Dashboard::new(mtm, &config); - dashboard.show(false); - let mut picker: Option = None; - let mut next = Instant::now() + interval(&config); - let mut actions: Vec<(&str, thread::JoinHandle>)> = Vec::new(); - loop { - let quit = autoreleasepool(|_| -> Result { - pump_events(&ns_app); - dashboard.poll(); - if let Some(picker) = picker.as_mut() { - picker.poll(); - } - - let mut redraw = false; - while let Ok(event) = MenuEvent::receiver().try_recv() { - match event.id.as_ref() { - QUIT => { - // Quitting between the save and the restart would leave a - // saved config that the server has not loaded. - if picker.as_ref().is_some_and(Picker::is_busy) || dashboard.is_busy() { - alert( - mtm, - "Switchyard is still working", - "Wait for the current operation to finish in the Switchyard or \ - routes window, then quit. Quitting during a settings change could \ - interrupt the save or server restart.", - ); - } else { - return Ok(true); - } - } - OPEN_APP => dashboard.show(false), - INSTALL => dashboard.show(true), - EDIT_ROUTES => picker - .get_or_insert_with(|| { - Picker::new(mtm, &config, settings.with_file_name(CACHE_FILE)) - }) - .show(), - RESTART => { - let label = config.launchd_label.clone(); - actions.push(( - "Could not restart the server", - thread::spawn(move || restart(&label)), - )); - } - OPEN_CONFIG | OPEN_SETTINGS => { - let path = if event.id.as_ref() == OPEN_CONFIG { - config.config_file.clone() - } else { - settings.to_path_buf() - }; - actions.push(( - "Could not open the file", - thread::spawn(move || open(&path)), - )); - } - // Informational rows are disabled, so nothing else fires. - _ => continue, - } - redraw = true; - } - - for index in (0..actions.len()).rev() { - if actions[index].1.is_finished() { - let (title, action) = actions.swap_remove(index); - report( - mtm, - title, - action - .join() - .unwrap_or_else(|_| Err("menu action thread panicked".to_string())), - ); - redraw = true; - } - } - if redraw || Instant::now() >= next { - let changed = modified(settings); - if changed != settings_seen { - settings_seen = changed; - match Config::load(settings) { - Ok(loaded) => { - eprintln!("switchyard-menubar: reloaded {}", settings.display()); - config = loaded; - dashboard.set_settings(&config); - if let Some(picker) = picker.as_mut() { - picker.set_settings(&config); - } - } - Err(error) => eprintln!("switchyard-menubar: {error}"), - } - } - let (latest, rows) = refresh(&config, &mut log); - tray.set_menu(Some(Box::new(menu(&rows)?))); - if latest != shown { - shown = latest; - eprintln!("switchyard-menubar: the server is {}", state(shown)); - tray.set_icon_with_as_template(Some(glyph(shown)?), true) - .map_err(|error| format!("change the status icon: {error}"))?; - // A failed tooltip update is ignored. The tooltip is cosmetic, - // and the menu bar keeps running. - let _ = tray.set_tooltip(Some(tooltip(shown))); - } - next = Instant::now() + interval(&config); - } - Ok(false) - })?; - if quit { - return Ok(()); - } - } -} - -/// How long the menu waits between refreshes. -fn interval(config: &Config) -> Duration { - Duration::from_secs(config.refresh_seconds.max(5)) -} - -/// Draws the status icon: solid while the server answers, faint when it does not. -fn glyph(status: ServerStatus) -> Result { - Icon::from_rgba( - icon::glyph(status == ServerStatus::Running), - icon::SIZE, - icon::SIZE, - ) - .map_err(|error| format!("build icon: {error}")) -} - -/// Says whether the server answers, in the words that the tooltip and the log -/// use. -fn state(status: ServerStatus) -> &'static str { - match status { - ServerStatus::Running => "running", - ServerStatus::Stopped => "not responding", - } -} - -fn tooltip(status: ServerStatus) -> String { - format!("Switchyard: the server is {}", state(status)) -} - -/// Returns when the settings file last changed, or `None` when the file is -/// missing. The menu bar compares it between refreshes, so a changed file -/// takes effect without a restart. -fn modified(path: &Path) -> Option { - std::fs::metadata(path) - .and_then(|metadata| metadata.modified()) - .ok() -} - -/// Opens a config file in the user's editor. -fn open(path: &Path) -> Result<(), String> { - command("open", &["-t", &path.display().to_string()]).map(|_| ()) -} - -/// Logs the error and shows it in a dialog when a menu action fails. A menu -/// click opens no window that could show the error. -fn report(mtm: MainThreadMarker, title: &str, result: Result<(), String>) { - if let Err(error) = result { - eprintln!("switchyard-menubar: {error}"); - alert(mtm, title, &error); - } -} - -/// Shows a dialog and waits for the user to close it. The app activates -/// itself first, because an accessory app's dialog opens behind other windows -/// otherwise. -fn alert(mtm: MainThreadMarker, title: &str, detail: &str) { - let alert = NSAlert::new(mtm); - alert.setMessageText(&NSString::from_str(title)); - alert.setInformativeText(&NSString::from_str(detail)); - #[allow(deprecated)] - NSApplication::sharedApplication(mtm).activateIgnoringOtherApps(true); - alert.runModal(); -} - -/// Builds the whole menu: the summary rows, then the fixed actions. -fn menu(rows: &[Row]) -> Result { - let menu = Menu::new(); - let append = |item: &dyn IsMenuItem| { - menu.append(item) - .map_err(|error| format!("build menu: {error}")) - }; - - for row in rows { - match row { - Row::Separator => append(&PredefinedMenuItem::separator())?, - // Rows are labels, not commands, so they are disabled. - Row::Label(text) => append(&MenuItem::new(text, false, None))?, - } - } - append(&PredefinedMenuItem::separator())?; - for (id, text) in [ - (OPEN_APP, "Open Switchyard…"), - (INSTALL, "Install…"), - (EDIT_ROUTES, "Edit routes…"), - (RESTART, "Restart server"), - (OPEN_CONFIG, "Open server config…"), - (OPEN_SETTINGS, "Open menu bar settings…"), - (QUIT, "Quit"), - ] { - append(&MenuItem::with_id(id, text, true, None))?; - } - Ok(menu) -} - -/// The main menu provides Edit shortcuts, Cmd-W for windows, and Cmd-Q to quit. -fn main_menu() -> Result { - let application = - Submenu::with_items( - "Switchyard", - true, - &[&MenuItem::with_id( - QUIT, - "Quit", - true, - Some("Cmd+Q".parse().map_err( - |e: tray_icon::menu::accelerator::AcceleratorParseError| e.to_string(), - )?), - )], - ) - .map_err(|error| error.to_string())?; - let edit = Submenu::with_items( - "Edit", - true, - &[ - &PredefinedMenuItem::undo(None), - &PredefinedMenuItem::redo(None), - &PredefinedMenuItem::separator(), - &PredefinedMenuItem::cut(None), - &PredefinedMenuItem::copy(None), - &PredefinedMenuItem::paste(None), - &PredefinedMenuItem::select_all(None), - ], - ) - .map_err(|error| format!("build the Edit menu: {error}"))?; - let window = Submenu::with_items("Window", true, &[&PredefinedMenuItem::close_window(None)]) - .map_err(|error| format!("build the Window menu: {error}"))?; - Menu::with_items(&[&application, &edit, &window]) - .map_err(|error| format!("build the main menu: {error}")) -} - -/// Drains pending AppKit events, blocking briefly when there are none. -fn pump_events(ns_app: &NSApplication) { - let mut expiration = Some(NSDate::dateWithTimeIntervalSinceNow(EVENT_POLL)); - while let Some(event) = unsafe { - ns_app.nextEventMatchingMask_untilDate_inMode_dequeue( - NSEventMask::Any, - expiration.as_deref(), - NSDefaultRunLoopMode, - true, - ) - } { - ns_app.sendEvent(&event); - // Only the first wait blocks; the rest drain what is already queued. - expiration = Some(NSDate::distantPast()); - } -} diff --git a/crates/switchyard-menubar/src/tui.rs b/crates/switchyard-menubar/src/tui.rs new file mode 100644 index 0000000000..0ed8e952b0 --- /dev/null +++ b/crates/switchyard-menubar/src/tui.rs @@ -0,0 +1,459 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Ratatui renders snapshots and submits typed operations to the shared controller. + +use crate::{ + controller::{Action, Controller}, + harness::Harness, + server_config::Choice, +}; +use ratatui::{ + crossterm::event::{self, Event, KeyCode, KeyEventKind, KeyModifiers}, + layout::{Constraint, Layout}, + widgets::{Block, Paragraph, Wrap}, +}; +use serde_json::Value; +use std::time::{Duration, Instant}; +const PAGES: &[&str] = &[ + "Overview", "Routes", "Install", "Usage", "Sessions", "Settings", +]; +struct Form { + title: String, + fields: Vec<(String, String)>, + index: usize, + kind: FormKind, +} +enum FormKind { + Algorithm, + Apply(String), + Project, + Account, + Models, + Key, + Filter, +} +struct View { + snapshot: Value, + page: usize, + route: usize, + tool: usize, + account: usize, + session: usize, + filter: String, + scroll: u16, + message: String, + form: Option

, +} +impl View { + fn routes(&self) -> &[Value] { + self.snapshot["routes"] + .as_array() + .map_or(&[], Vec::as_slice) + } + fn tools(&self) -> &[Value] { + self.snapshot["tools"].as_array().map_or(&[], Vec::as_slice) + } + fn route(&self) -> Result<&Value, String> { + self.routes() + .get(self.route) + .ok_or_else(|| "Choose a route first.".into()) + } + fn tool(&self) -> Harness { + serde_json::from_value(self.tools()[self.tool]["tool"].clone()).unwrap_or(Harness::CodexCli) + } + fn account(&self) -> Option { + self.tools()[self.tool]["accounts"] + .as_array() + .and_then(|a| self.account.checked_sub(1).and_then(|i| a.get(i))) + .and_then(Value::as_str) + .map(str::to_string) + } + fn dispatch(&mut self, controller: &mut Controller, action: Action) { + match controller.dispatch(action) { + Ok(reply) => { + self.message = reply.message; + if let Err(e) = self.refresh(controller) { + self.message = e; + } + } + Err(e) => self.message = e, + } + } + fn refresh(&mut self, controller: &mut Controller) -> Result<(), String> { + self.snapshot = controller.snapshot()?; + self.route = self.route.min(self.routes().len().saturating_sub(1)); + Ok(()) + } + fn form(&mut self, title: &str, kind: FormKind, fields: Vec<(String, String)>) { + self.form = Some(Form { + title: title.into(), + fields, + index: 0, + kind, + }); + } + fn submit(&mut self, controller: &mut Controller) -> Result<(), String> { + let form = self.form.take().ok_or("No form is open.")?; + let value = |i: usize| form.fields[i].1.trim().to_string(); + match form.kind { + FormKind::Algorithm => { + let route = self.route()?; + let algorithm = value(0); + let reply = controller.dispatch(Action::Editor { + generation: self.snapshot["generation"].as_u64().unwrap_or_default(), + route: string(route, "key"), + algorithm: algorithm.clone(), + })?; + let roles = reply.data["roles"].as_array().ok_or("No roles returned.")?; + let choices: Vec = + serde_json::from_value(route["choices"].clone()).map_err(|e| e.to_string())?; + let mut fields = Vec::new(); + for (i, role) in roles.iter().enumerate() { + // A role keeps its model by tier when the new algorithm changes role order. + let matching = route["tiers"].as_array().and_then(|tiers| { + role["tier"] + .as_str() + .and_then(|tier| tiers.iter().position(|t| t.as_str() == Some(tier))) + }); + let choice = matching + .and_then(|index| choices.get(index)) + .or_else(|| { + (algorithm == string(route, "kind")) + .then(|| choices.get(i)) + .flatten() + }) + .or_else(|| choices.first()) + .cloned() + .unwrap_or_default(); + fields.push((format!("{} endpoint", string(role, "label")), choice.client)); + fields.push(( + if string(role, "label") == "Model" { + "Model".into() + } else { + format!("{} model", string(role, "label")) + }, + choice.model, + )); + } + self.form( + "Route models · Enter applies", + FormKind::Apply(algorithm), + fields, + ); + } + FormKind::Apply(algorithm) => { + let choices = form + .fields + .chunks(2) + .map(|f| Choice { + client: f[0].1.trim().into(), + model: f[1].1.trim().into(), + }) + .collect(); + self.dispatch( + controller, + Action::Apply { + generation: self.snapshot["generation"].as_u64().unwrap_or_default(), + route: string(self.route()?, "key"), + algorithm, + choices, + }, + ); + } + FormKind::Project => { + let r = self.route()?; + self.dispatch( + controller, + Action::Launch { + tool: self.tool(), + account: self.account(), + route: string(r, "key"), + id: string(r, "id"), + project: value(0), + }, + ); + } + FormKind::Account => self.dispatch( + controller, + Action::AddAccount { + tool: self.tool(), + name: value(0), + }, + ), + FormKind::Models | FormKind::Key => { + let key = if matches!(form.kind, FormKind::Key) { + Some(value(1)) + } else { + None + }; + let reply = controller.dispatch(Action::Models { + client: value(0), + refresh: true, + key, + })?; + self.message = format!( + "{}\n{}", + reply.message, + reply.data["models"] + .as_array() + .map(|m| m + .iter() + .filter_map(Value::as_str) + .collect::>() + .join("\n")) + .unwrap_or_default() + ); + } + FormKind::Filter => { + self.filter = value(0); + self.scroll = 0; + } + } + Ok(()) + } + fn body(&self) -> String { + match self.page { + 0=>strings(&self.snapshot["summary"]), + 1=>{ + let mut rows=vec!["e Edit route m Refresh models k Save endpoint key\nAlgorithms: passthrough, random, llm_classifier, composite, stage_router, advisor, plan_execute, auto\n".into()]; + for (i,r) in self.routes().iter().enumerate(){rows.push(format!("{} {}",if i==self.route {">"}else{" "},string(r,"label")));} + rows.push(format!("\nEndpoints: {}",self.snapshot["clients"].as_array().map(|a|a.iter().map(|c|format!("{} ({})",string(c,"name"),string(c,"host"))).collect::>().join(", ")).unwrap_or_default()));rows.join("\n") + } + 2|4=>format!("t Next tool r Next route a Next account\n{}\n\nTool: {}\nAccount: {}\nRoute: {}\n\n{}",if self.page==2 {"i Install / update u Restore backup n Add native login"}else{"l Launch worktree session n Add native login"},string(&self.tools()[self.tool],"label"),self.account().unwrap_or_else(||"Current login".into()),self.route().map(|r|string(r,"label")).unwrap_or_default(),string(&self.tools()[self.tool],"status")), + 3=>{ + let selected=self.session.checked_sub(1).and_then(|i|self.snapshot["sessions"].as_array()?.get(i)).and_then(Value::as_str); + let mut lines=vec![format!("s Next session f Filter turn/model/route\nSession: {} Filter: {}\n{} recent calls{}; {} unreadable records skipped.\nEach row is one model call; a turn can contain several calls. Input includes cached reads.\n",selected.unwrap_or("All sessions"),self.filter,self.snapshot["entries"].as_array().map_or(0,Vec::len),if self.snapshot["limited"]==true{" (8 MiB / 5,000 record limit)"}else{""},self.snapshot["skipped"])]; + if let Some(entries)=self.snapshot["entries"].as_array(){for e in entries.iter().rev(){ + if selected.is_some_and(|s|e["session_id"].as_str()!=Some(s)){continue;} + if !format!("{} {} {}",string(e,"model"),string(e,"turn_id"),string(e,"route_id")).to_lowercase().contains(&self.filter.to_lowercase()){continue;} + lines.push(format!("{} {}{}\nSession {} Turn {} Route {}\nInput {} Cached {} Output {}\n",string(e,"ts"),string(e,"model"),if e["tier"]=="classifier"{" (routing overhead)"}else{""},e["session_id"].as_str().unwrap_or("Not recorded"),e["turn_id"].as_str().unwrap_or("Not recorded"),string(e,"route_id"),e["prompt_tokens"],e["cached_tokens"],e["completion_tokens"])); + }}lines.join("\n") + } + _=>"o Open server config\nb Restart server\nu Update from source\n\nUpdate uses the checkout that installed Switchyard.app.\nNative account limits still apply. Switchyard does not rotate login tokens.".into(), + } + } + fn key(&mut self, controller: &mut Controller, code: KeyCode) -> Result<(), String> { + match code { + KeyCode::Tab => { + self.page = (self.page + 1) % PAGES.len(); + self.scroll = 0; + } + KeyCode::BackTab => { + self.page = (self.page + PAGES.len() - 1) % PAGES.len(); + self.scroll = 0; + } + KeyCode::Down | KeyCode::Char('r') => { + self.route = (self.route + 1) % self.routes().len().max(1) + } + KeyCode::Up => self.route = self.route.saturating_sub(1), + KeyCode::PageDown => self.scroll = self.scroll.saturating_add(10), + KeyCode::PageUp => self.scroll = self.scroll.saturating_sub(10), + KeyCode::F(5) => self.refresh(controller)?, + KeyCode::Char('t') => { + self.tool = (self.tool + 1) % self.tools().len(); + self.account = 0; + } + KeyCode::Char('a') => { + self.account = (self.account + 1) + % (self.tools()[self.tool]["accounts"] + .as_array() + .map_or(0, Vec::len) + + 1) + } + KeyCode::Char('e') if self.page == 1 => { + let kind = string(self.route()?, "kind"); + self.form( + "Routing algorithm", + FormKind::Algorithm, + vec![("Algorithm".into(), kind)], + ); + } + KeyCode::Char('m' | 'k') if self.page == 1 => { + let mut fields = vec![( + "Endpoint name".into(), + self.snapshot["clients"][0]["name"] + .as_str() + .unwrap_or_default() + .into(), + )]; + if code == KeyCode::Char('k') { + fields.push(("API key".into(), String::new())); + } + self.form( + "Models", + if code == KeyCode::Char('k') { + FormKind::Key + } else { + FormKind::Models + }, + fields, + ); + } + KeyCode::Char('i') if self.page == 2 => { + let r = self.route()?; + self.dispatch( + controller, + Action::Install { + tool: self.tool(), + account: self.account(), + route: string(r, "key"), + id: string(r, "id"), + }, + ); + } + KeyCode::Char('u') if self.page == 2 => self.dispatch( + controller, + Action::Restore { + tool: self.tool(), + account: self.account(), + }, + ), + KeyCode::Char('n') if self.page == 2 || self.page == 4 => self.form( + "Add native login", + FormKind::Account, + vec![("Account name".into(), String::new())], + ), + KeyCode::Char('l') if self.page == 4 => self.form( + "Launch worktree session", + FormKind::Project, + vec![("Git project absolute path".into(), String::new())], + ), + KeyCode::Char('s') if self.page == 3 => { + self.session = (self.session + 1) + % (self.snapshot["sessions"].as_array().map_or(0, Vec::len) + 1); + self.scroll = 0; + } + KeyCode::Char('f') if self.page == 3 => self.form( + "Filter turn, model, or route", + FormKind::Filter, + vec![("Search".into(), self.filter.clone())], + ), + KeyCode::Char('o') if self.page == 5 => { + self.dispatch(controller, Action::OpenConfig {}) + } + KeyCode::Char('b') if self.page == 5 => self.dispatch(controller, Action::Restart {}), + KeyCode::Char('u') if self.page == 5 => self.dispatch(controller, Action::Update {}), + _ => {} + } + Ok(()) + } +} +fn string(v: &Value, key: &str) -> String { + v[key].as_str().unwrap_or_default().into() +} +fn strings(v: &Value) -> String { + v.as_array() + .map(|a| { + a.iter() + .filter_map(Value::as_str) + .collect::>() + .join("\n") + }) + .unwrap_or_default() +} +pub fn run(mut controller: Controller) -> Result<(), String> { + let snapshot = controller.snapshot()?; + let mut view = View { + snapshot, + page: 0, + route: 0, + tool: 0, + account: 0, + session: 0, + filter: String::new(), + scroll: 0, + message: String::new(), + form: None, + }; + let result = ratatui::run(|terminal| -> Result<(), String> { + let mut last = Instant::now(); + loop { + terminal.draw(|frame| { + let areas = Layout::vertical([ + Constraint::Length(3), + Constraint::Min(5), + Constraint::Length(5), + ]).split(frame.area()); + let title = PAGES.iter().enumerate().map(|(i, page)| { + if i == view.page { format!("[{page}]") } else { page.to_string() } + }).collect::>().join(" "); + frame.render_widget( + Paragraph::new(title).block(Block::bordered().title("Switchyard")), + areas[0], + ); + let (body, title) = if let Some(form) = &view.form { + let rows = form.fields.iter().enumerate().map(|(i, (label, value))| { + let marker = if i == form.index { ">" } else { " " }; + let value = if matches!(form.kind, FormKind::Key) && i == 1 { + "•".repeat(value.chars().count()) + } else { value.clone() }; + format!("{marker} {label}: {value}") + }).collect::>().join("\n"); + (rows, form.title.clone()) + } else { (view.body(), PAGES[view.page].into()) }; + frame.render_widget( + Paragraph::new(body) + .wrap(Wrap { trim: false }) + .scroll((view.scroll, 0)) + .block(Block::bordered().title(title)), + areas[1], + ); + frame.render_widget( + Paragraph::new(format!("Tab: section · ↑/↓: route · PgUp/PgDn: scroll · F5: refresh · q: quit\nForms: Tab: field · Ctrl-U: clear · Enter: submit · Esc: cancel\n{}", view.message)), + areas[2], + ); + }).map_err(|e|e.to_string())?; + if event::poll(Duration::from_millis(200)).map_err(|e| e.to_string())? { + let Event::Key(key) = event::read().map_err(|e| e.to_string())? else { + continue; + }; + if key.kind != KeyEventKind::Press { + continue; + } + if let Some(form) = view.form.as_mut() { + match key.code { + KeyCode::Esc => view.form = None, + KeyCode::Tab => form.index = (form.index + 1) % form.fields.len(), + KeyCode::BackTab => { + form.index = (form.index + form.fields.len() - 1) % form.fields.len() + } + KeyCode::Enter => { + if let Err(e) = view.submit(&mut controller) { + view.message = e; + } + } + KeyCode::Backspace => { + form.fields[form.index].1.pop(); + } + KeyCode::Char('u') if key.modifiers.contains(KeyModifiers::CONTROL) => { + form.fields[form.index].1.clear() + } + KeyCode::Char(c) => form.fields[form.index].1.push(c), + _ => {} + } + continue; + } + if key.code == KeyCode::Char('q') { + return Ok(()); + } + if let Err(e) = view.key(&mut controller, key.code) { + view.message = e; + } + } + if last.elapsed() + > Duration::from_secs(view.snapshot["refresh_seconds"].as_u64().unwrap_or(30)) + && view.form.is_none() + { + if let Err(e) = view.refresh(&mut controller) { + view.message = e; + } + last = Instant::now(); + } + } + }); + if result.is_err() { + let _ = ratatui::try_restore(); + } + result +} diff --git a/crates/switchyard-menubar/tauri.conf.json b/crates/switchyard-menubar/tauri.conf.json new file mode 100644 index 0000000000..1b433419e2 --- /dev/null +++ b/crates/switchyard-menubar/tauri.conf.json @@ -0,0 +1,30 @@ +{ + "productName": "Switchyard", + "version": "0.3.0", + "identifier": "com.nvidia.switchyard", + "build": { + "frontendDist": "ui" + }, + "app": { + "withGlobalTauri": true, + "windows": [ + { + "label": "main", + "title": "Switchyard", + "width": 1080, + "height": 760, + "minWidth": 760, + "minHeight": 540 + } + ], + "security": { + "csp": "default-src 'self'; script-src 'self'; style-src 'self'; connect-src ipc: http://ipc.localhost; img-src 'self' data:; object-src 'none'; frame-src 'none'; base-uri 'none'" + } + }, + "bundle": { + "active": false, + "icon": [ + "icons/icon.png" + ] + } +} diff --git a/crates/switchyard-menubar/tests/frontend.test.cjs b/crates/switchyard-menubar/tests/frontend.test.cjs new file mode 100644 index 0000000000..821c657078 --- /dev/null +++ b/crates/switchyard-menubar/tests/frontend.test.cjs @@ -0,0 +1,50 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +'use strict'; +const {test} = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const vm = require('node:vm'); +function editor(invoke = () => new Promise(() => {})) { + const context = vm.createContext({ + window: {__TAURI__: {core: {invoke}}}, + document: {querySelector: () => ({}), querySelectorAll: () => []}, + setTimeout: () => {}, + }); + vm.runInContext(fs.readFileSync(path.join(__dirname, '../ui/app.js'), 'utf8'), context); + return context; +} +// The classifier occupies position zero, so copying by position would replace the capable model. +test('algorithm switches preserve model roles instead of positions', () => { + const context = editor(); + const result = vm.runInContext(` + const route = {kind:'composite',choices:[{model:'judge'},{model:'capable'},{model:'efficient'}]}; + const draft = {algorithm:'stage_router',choices:route.choices,memory:new Map([['Judge',route.choices[0]],['Capable',route.choices[1]],['Efficient',route.choices[2]]])}; + [roleChoice(draft,route,{tier:'Capable'},0).model,roleChoice(draft,route,{tier:'Efficient'},1).model]; + `, context); + assert.deepEqual(Array.from(result), ['capable', 'efficient']); +}); +// Null tiers must not combine distinct random targets into one remembered model. +test('random roles without tiers keep distinct positional choices', () => { + const context = editor(); + const result = vm.runInContext(` + const route = {kind:'random',choices:[{model:'first'},{model:'second'},{model:'third'},{model:'fourth'}]}; + const draft = {algorithm:'random',choices:route.choices,memory:new Map()}; + [roleChoice(draft,route,{tier:null},2).model,roleChoice(draft,route,{tier:null},3).model]; + `, context); + assert.deepEqual(Array.from(result), ['third', 'fourth']); +}); +// A successful editor redraw must preserve the distinction between a saved route and a failed restart. +test('editor redraw retains the saved route and restart result', async () => { + const context = editor((command, args) => command === 'snapshot' + ? new Promise(() => {}) + : Promise.resolve({message: args.action.kind === 'editor' ? 'Single model.' : 'Saved the route. Restart failed.'})); + const result = await vm.runInContext(`(async () => { + busy = false; + await run({kind:'apply'}, false); + await run({kind:'editor'}, false); + return status.textContent; + })()`, context); + assert.equal(result, 'Saved the route. Restart failed.'); +}); diff --git a/crates/switchyard-menubar/ui/app.css b/crates/switchyard-menubar/ui/app.css new file mode 100644 index 0000000000..38d6bf20ab --- /dev/null +++ b/crates/switchyard-menubar/ui/app.css @@ -0,0 +1,3 @@ +/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ +/* SPDX-License-Identifier: Apache-2.0 */ +:root{color-scheme:dark;font:15px system-ui,sans-serif;background:#11151b;color:#edf2f7}*{box-sizing:border-box}body{margin:0;display:grid;grid-template-columns:210px 1fr;min-height:100vh}aside{background:#191f28;padding:28px 20px;position:sticky;top:0;height:100vh}h1{font-size:23px;margin:0}aside p,small,.muted{color:#aab6c5}nav{display:grid;gap:7px;margin:34px 0}button,input,select{font:inherit;border-radius:7px;border:1px solid #465364;background:#252e3b;color:inherit;padding:10px}button{cursor:pointer;text-align:left}button:hover{background:#344257}button:disabled{opacity:.5;cursor:wait}nav button{border:0;background:transparent}nav button.active{background:#344257;color:#b4e790}main{padding:24px 32px;min-width:0}header{display:flex;justify-content:space-between;align-items:center}h2{font-size:25px}h3{margin:0 0 15px;font-size:18px}#status{white-space:pre-wrap;color:#b4e790;line-height:1.5;overflow-wrap:anywhere}section{display:grid;gap:18px}.card{border:1px solid #354151;border-radius:12px;padding:22px;background:#1b222c}label{display:grid;gap:7px;margin:14px 0;color:#cad4e1}input,select{width:100%}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}pre{font:13px ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;margin:0}table{width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:12px 8px;border-bottom:1px solid #354151;overflow-wrap:anywhere}th{color:#aab6c5}.scroll{overflow:auto}.primary{background:#3f5732;border-color:#8cab70}details{margin-top:12px}summary{cursor:pointer}input:focus,select:focus,button:focus{outline:2px solid #b4e790;outline-offset:2px} diff --git a/crates/switchyard-menubar/ui/app.js b/crates/switchyard-menubar/ui/app.js new file mode 100644 index 0000000000..e5da91343b --- /dev/null +++ b/crates/switchyard-menubar/ui/app.js @@ -0,0 +1,152 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +'use strict'; +const invoke = window.__TAURI__.core.invoke; +const content = document.querySelector('#content'); +const status = document.querySelector('#status'); +let snapshot, page = 'overview', busy = false; +const drafts = new Map(), lists = new Map(); +const usageView = {session:'',search:''}; +function node(tag, text, cls) { const n = document.createElement(tag); if (text !== undefined) n.textContent = text; if (cls) n.className = cls; return n; } +function card(title) { const c = node('div', undefined, 'card'); c.append(node('h3', title)); content.append(c); return c; } +function button(parent, text, fn, primary = false) { const b = node('button', text, primary ? 'primary' : ''); b.onclick = fn; parent.append(b); return b; } +function field(parent, title, control) { const l = node('label', title); l.append(control); parent.append(l); return control; } +function select(options, chosen) { const s = node('select'); for (const [value, label] of options) { const o = node('option', label); o.value = value; s.append(o); } if (chosen !== undefined) s.value = chosen; return s; } +function input(value = '', type = 'text') { const i = node('input'); i.type = type; i.value = value; return i; } +function text(parent, value) { parent.append(node('pre', value)); } +function actions(parent) { const a = node('div', undefined, 'actions'); parent.append(a); return a; } +function setBusy(value) { busy = value; document.querySelectorAll('button,input,select').forEach(n => n.disabled = value); } +// Successful editor loading keeps the saved-route and restart result visible. +async function run(action, refresh = true) { + if (busy) return; + setBusy(true); if(action.kind!=='editor')status.textContent = 'Working…'; + try { const result = await invoke('action', {action}); if(action.kind!=='editor')status.textContent = result.message; if (refresh) { snapshot = await invoke('snapshot'); render(); } return result; } + catch (error) { status.textContent = String(error); } + finally { setBusy(false); } +} +async function refresh() { + if (busy) return; + setBusy(true); + try { snapshot = await invoke('snapshot'); render(); status.textContent = snapshot.errors.join('\n'); } + catch(error) { status.textContent = String(error); } + finally { setBusy(false); } +} +function toolFields(c) { + const tool = field(c, 'Coding tool', select(snapshot.tools.map(t => [t.tool, `${t.label}${t.available ? '' : ' (binary not found)'}`]))); + const account = field(c, 'Account', select([['','Current login']])); + const info = node('pre'); c.append(info); + const update = () => { const t = snapshot.tools.find(t=>t.tool===tool.value); account.replaceChildren(); for (const name of ['',...t.accounts]) { const o = node('option',name || 'Current login'); o.value=name; account.append(o); } info.textContent=t.status; }; + tool.onchange=update; update(); + return {tool,account,get:()=>({tool:tool.value,account:account.value || null})}; +} +function routeField(c) { return field(c, 'Route · algorithm · endpoint / model', select(snapshot.routes.map(r=>[r.key,r.label]))); } +function routeArgs(s) { const r=snapshot.routes.find(r=>r.key===s.value); if (!r) throw new Error('Choose a route first.'); return {route:r.key,id:r.id}; } +let generation; +function render() { + if (!snapshot) return; + if (generation !== snapshot.generation) { drafts.clear(); lists.clear(); generation = snapshot.generation; } + content.replaceChildren(); + document.querySelector('#title').textContent = {overview:'Overview',routes:'Routes',install:'Install…',usage:'Usage',sessions:'Sessions',settings:'Settings'}[page]; + document.querySelectorAll('[data-page]').forEach(b=>b.classList.toggle('active',b.dataset.page===page)); + if (page==='overview') { + text(card('Server and savings'),snapshot.summary.join('\n')); + const c=card('Available routes'); for(const r of snapshot.routes)c.append(node('p',r.label)); + } else if (page==='routes') { + for (const route of snapshot.routes) renderRoute(route); + if (!snapshot.routes.length) text(card('No routes loaded'),'Check the server config in Settings, then refresh.'); + } else if (page==='install') { + const c=card('Install or update a coding tool'); + c.append(node('p','Inspect the current model and endpoint, then install a route. Switchyard backs up settings before changing them. Caller login routes require a matching coding tool.')); + const tool=toolFields(c),route=routeField(c),a=actions(c); + button(a,'Install / update',()=>run({kind:'install',...tool.get(),...routeArgs(route)}),true); + button(a,'Restore previous settings',()=>run({kind:'restore',...tool.get()})); + renderAccounts(); + } else if (page==='usage') { + const c=card('Model calls by session and turn'); + c.append(node('p','Each row is one completed model call. A user turn can contain several calls. Classifier calls are routing overhead. Input includes cached reads.')); + c.append(node('p',`${snapshot.entries.length} recent calls${snapshot.limited?' (limited to 8 MiB / 5,000 records)':''}; Switchyard skipped ${snapshot.skipped} unreadable records.`,'muted')); + const session=field(c,'Session',select([['','All sessions'],...snapshot.sessions.map(s=>[s,s])],usageView.session)); + const search=field(c,'Filter turn, model, or route',input(usageView.search)); + const container=node('div',undefined,'scroll'); c.append(container); + const draw=()=>{ + container.replaceChildren(); const table=node('table'),head=node('tr'); + for(const name of ['Time','Model / role','Session / turn','Route','Input','Cached','Output'])head.append(node('th',name)); + const thead=node('thead');thead.append(head);table.append(thead);const tbody=node('tbody');table.append(tbody); + const query=search.value.toLowerCase(); + for(const e of [...snapshot.entries].reverse()) { + if(session.value && e.session_id!==session.value)continue; + if(query && ![e.model,e.turn_id,e.route_id].join(' ').toLowerCase().includes(query))continue; + const row=node('tr'); + for(const value of [e.ts,`${e.model}${e.tier==='classifier'?' (routing overhead)':''}`,`${e.session_id||'Not recorded'} / ${e.turn_id||'Not recorded'}`,e.route_id,e.prompt_tokens,e.cached_tokens,e.completion_tokens])row.append(node('td',String(value))); + tbody.append(row); + } + container.append(table); + };session.onchange=()=>{usageView.session=session.value;draw();};search.oninput=()=>{usageView.search=search.value;draw();};draw(); + } else if(page==='sessions') { + const c=card('Start a separate worktree session'); + c.append(node('p','Choose a route and login for one coding tool. Each launch gets its own Git worktree and Terminal window. Existing subscription limits still apply.')); + const tool=toolFields(c),route=routeField(c),project=field(c,'Git project (absolute path)',input()); + button(actions(c),'Launch session',()=>run({kind:'launch',...tool.get(),...routeArgs(route),project:project.value}),true); + renderAccounts(); + } else if(page==='settings') { + const c=card('Manage the local app'); + button(actions(c),'Open server config',()=>run({kind:'open_config'})); + button(actions(c),'Restart server',()=>run({kind:'restart'})); + button(actions(c),'Update from source…',()=>run({kind:'update'})); + c.append(node('p','Update rebuilds and reinstalls from the source checkout used for this installation. Routing settings, prices, log history, and native logins stay saved.')); + c.append(node('p','Terminal app: switchyard-menubar --tui. Close this window to keep Switchyard in the tray; use Quit Switchyard in the tray to exit. If an operation is queued or running, try Quit again after it finishes.')); + } +} +function renderAccounts() { + const c=card('Add a native login'); const tool=toolFields(c),name=field(c,'Account name',input()); + button(actions(c),'Add account / open login',()=>run({kind:'add_account',tool:tool.tool.value,name:name.value})); + c.append(node('p','Switchyard opens the coding tool’s own login flow. It keeps each login in a separate configuration directory and does not copy or rotate tokens.')); +} +// Tiered roles keep their models across algorithms; roles without tiers keep their positions. +function roleChoice(draft, route, role, index) { + return (role.tier && draft.memory.get(role.tier)) || + (draft.algorithm === route.kind && draft.choices[index]) || + route.choices[0] || {client:snapshot.clients[0]?.name || '',model:''}; +} +function renderRoute(route) { + const c=card(route.label); + if(route.generated)c.append(node('p',`This route belongs to a generated block: ${route.generated}. Its owner may replace these edits.`)); + if(!route.editable){c.append(node('p','Edit this route in the server config.'));return;} + let draft=drafts.get(route.key); + if(!draft){draft={algorithm:snapshot.algorithms.some(a=>a.kind===route.kind)?route.kind:snapshot.algorithms[0].kind,choices:route.choices.map(c=>({...c})),memory:new Map()}; route.tiers?.forEach((tier,index)=>{if(tier)draft.memory.set(tier, {...route.choices[index]});});drafts.set(route.key,draft);} + const algorithm=field(c,'Routing algorithm',select(snapshot.algorithms.map(a=>[a.kind,a.title]),draft.algorithm)); + const description=node('p'),roles=node('div'); c.append(description,roles); + const saveChoices=()=>{roles.querySelectorAll('[data-role]').forEach(row=>{const selects=row.querySelectorAll('select,input'); const choice={client:selects[0].value,model:selects[1].value};draft.choices[Number(row.dataset.role)]=choice;if(row.dataset.tier)draft.memory.set(row.dataset.tier,choice);});}; + const draw=async()=>{ + const result=await run({kind:'editor',generation,route:route.key,algorithm:draft.algorithm},false); if(!result)return; + description.textContent=result.message; roles.replaceChildren(); + result.data.roles.forEach((role,index)=>{ + const choice=roleChoice(draft, route, role, index); + draft.choices[index]={...choice};const row=node('div');row.dataset.role=index;row.dataset.tier=role.tier || ''; + const client=field(row,`${role.label} endpoint`,select(snapshot.clients.map(c=>[c.name,`${c.name} (${c.host})`]),choice.client)); + const model=field(row,role.label==='Model'?'Model':`${role.label} model`,input(choice.model));row.append(node('small',role.hint)); + const datalist=node('datalist');datalist.id=`models-${route.key}-${index}`;model.setAttribute('list',datalist.id);row.append(datalist); + const fill=()=>{const values=lists.get(client.value)||snapshot.clients.find(c=>c.name===client.value)?.models||[];datalist.replaceChildren();for(const value of values){const o=node('option');o.value=value;datalist.append(o);}}; + client.onchange=()=>{fill();saveChoices();};model.oninput=saveChoices;fill(); + const a=actions(row);button(a,'Refresh models',async()=>{const r=await run({kind:'models',client:client.value,refresh:true,key:null},false);if(r){lists.set(client.value,r.data.models);fill();}}); + const details=node('details');details.append(node('summary','API key for this endpoint')); const key=field(details,'Save in macOS Keychain',input('','password'));key.autocomplete='off'; + button(actions(details),'Save key and load models',async()=>{const value=key.value;key.value='';const r=await run({kind:'models',client:client.value,refresh:true,key:value},false);if(r){lists.set(client.value,r.data.models);fill();}});const endpoint=snapshot.clients.find(c=>c.name===client.value); + if(endpoint?.accepts_key)row.append(details); + if(endpoint?.note)row.append(node('p',endpoint.note)); + roles.append(row); + });draft.choices.length=result.data.roles.length; + }; + algorithm.onchange=()=>{saveChoices();draft.algorithm=algorithm.value;draw();}; + const a=actions(c); + button(a,'Apply route and restart',async()=>{saveChoices();const result=await run({kind:'apply',generation,route:route.key,algorithm:draft.algorithm,choices:draft.choices});if(result){drafts.delete(route.key);render();}},true); + button(a,'Revert draft',()=>{drafts.delete(route.key);render();}); + // Each route waits for the shared operation to finish before loading its editor roles. + const setup=async()=>{while(busy)await new Promise(resolve=>setTimeout(resolve,30));if(page==='routes'&&c.isConnected)await draw();};setup(); +} +document.querySelectorAll('[data-page]').forEach(b=>b.onclick=()=>{page=b.dataset.page;render();}); +document.querySelector('#refresh').onclick=refresh; +async function poll() { + if(page==='overview'||page==='usage')await refresh(); + setTimeout(poll,(snapshot?.refresh_seconds || 30)*1000); +} +refresh().finally(()=>setTimeout(poll,(snapshot?.refresh_seconds || 30)*1000)); diff --git a/crates/switchyard-menubar/ui/index.html b/crates/switchyard-menubar/ui/index.html new file mode 100644 index 0000000000..b71b7ccaa7 --- /dev/null +++ b/crates/switchyard-menubar/ui/index.html @@ -0,0 +1,5 @@ + + + +Switchyard +

Overview

diff --git a/scripts/config/codex.sy.toml b/scripts/config/codex.sy.toml index 9ecdff1efd..39a8c1e4b3 100644 --- a/scripts/config/codex.sy.toml +++ b/scripts/config/codex.sy.toml @@ -1,4 +1,4 @@ -model = "switchyard" +model = "composite-gpt-6-sol-gpt-6-luna" model_provider = "sy" [model_providers.sy] diff --git a/scripts/config/composite.toml b/scripts/config/composite.toml index 4abef0e9b8..68de03f2c9 100644 --- a/scripts/config/composite.toml +++ b/scripts/config/composite.toml @@ -26,7 +26,7 @@ extra_body = { store = false, stream = true } omit_body_fields = ["max_output_tokens"] [routes.switchyard] -id = "switchyard" +id = "composite-gpt-6-sol-gpt-6-luna" type = "composite" [routes.switchyard.classifier] diff --git a/scripts/macos/common.sh b/scripts/macos/common.sh index bf67ceff63..00785ba671 100644 --- a/scripts/macos/common.sh +++ b/scripts/macos/common.sh @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # -# Paths, markers, and helpers shared by install.sh and uninstall.sh. +# This file defines paths, markers, and helpers shared by install.sh and uninstall.sh. # The markers must match between the two, which is why they live here. # shellcheck source=scripts/common.sh @@ -12,10 +12,8 @@ MENUBAR_LABEL="com.nvidia.switchyard.menubar" LAUNCH_AGENTS="$HOME/Library/LaunchAgents" APP_PATH="$HOME/Applications/Switchyard.app" CODEX_CONFIG="$CODEX_DIR/config.toml" -# Codex reads `--profile sy` from its own file next to config.toml. A -# [profiles.sy] table in config.toml is rejected outright as legacy config. -# Codex.app ignores profiles entirely, so it gets a whole config.toml with the -# routing inlined. Keep the generated file beside the original for reference. +# Codex reads named profiles from separate files beside config.toml. +# These paths identify configs written by older installers for cleanup and restore. CODEX_SWITCHYARD_CONFIG="$CODEX_DIR/config.sy.toml" CODEX_DIRECT_CONFIG="$CODEX_DIR/config.toml.direct" PROFILE_START="# >>> switchyard sy profile >>>" @@ -45,3 +43,15 @@ codex_config_uses_switchyard() { END { exit !found } ' "$path" } + +SY_PROFILE="${SY_PROFILE-sy}" +SY_MODEL="${SY_MODEL-composite-gpt-6-sol-gpt-6-luna}" +if [[ ! "$SY_PROFILE" =~ ^[a-zA-Z0-9][a-zA-Z0-9._-]*$ ]] || (( ${#SY_PROFILE} > 128 )); then + say "SY_PROFILE must be a short profile name containing letters, digits, dots, underscores, or hyphens." >&2 + exit 2 +fi +if [[ -z "$SY_MODEL" || "$SY_MODEL" =~ [[:cntrl:]] ]]; then + say "SY_MODEL must be a nonempty public route ID without ASCII control characters." >&2 + exit 2 +fi +CODEX_PROFILE_CONFIG="$CODEX_DIR/$SY_PROFILE.config.toml" diff --git a/scripts/macos/install.sh b/scripts/macos/install.sh index bfd2490aed..342ed72058 100755 --- a/scripts/macos/install.sh +++ b/scripts/macos/install.sh @@ -3,9 +3,9 @@ # SPDX-License-Identifier: Apache-2.0 # # This script installs Switchyard.app, loads the server and app as per-user -# LaunchAgents, and sets up a `sy` Codex profile. +# LaunchAgents, and sets up the selected Codex profile. # -# It keeps existing server and menu bar settings and backs up sy.config.toml +# It keeps existing server and app settings and backs up the selected profile # before replacing it. The --dry-run option prints the installation commands. set -euo pipefail @@ -54,7 +54,9 @@ done step "Installing $APP_PATH" run mkdir -p "$APP_PATH/Contents/MacOS" "$APP_PATH/Contents/Resources" -run install -m 755 "$REPO_ROOT/target/release/switchyard-menubar" "$APP_PATH/Contents/MacOS/switchyard-menubar" +for binary in switchyard-menubar switchyard-server; do + run install -m 755 "$REPO_ROOT/target/release/$binary" "$APP_PATH/Contents/MacOS/$binary" +done write_always "$APP_PATH/Contents/Info.plist" < @@ -81,6 +83,8 @@ set -euo pipefail export PATH="\$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:\$PATH" export SY_HOME=$(shell_quote "$SY_HOME") export SY_PORT=$(shell_quote "$SY_PORT") +export SY_PROFILE=$(shell_quote "$SY_PROFILE") +export SY_MODEL=$(shell_quote "$SY_MODEL") export CODEX_HOME=$(shell_quote "$CODEX_DIR") bash $(shell_quote "$SCRIPT_DIR/install.sh") EOF @@ -88,7 +92,7 @@ run chmod 755 "$APP_PATH/Contents/MacOS/Switchyard" "$APP_PATH/Contents/Resource run codesign --force --deep --sign - "$APP_PATH" step "Writing server config" -# Keep macOS and Linux on the same routing defaults. +# Both installers use the same routing defaults. write_once "$SY_HOME/composite.toml" < "$REPO_ROOT/scripts/config/composite.toml" step "Writing menu bar settings" @@ -102,9 +106,8 @@ config_file = "$TOML_SY_HOME/composite.toml" launchd_label = "$SERVER_LABEL" refresh_seconds = 30 -# The model the traffic is assumed to have used without Switchyard. Savings -# are the difference between that bill and what actually ran, with -# Switchyard's own classifier calls counted against it. +# The baseline model prices caller-facing calls as if routing had not changed models. +# Savings subtract actual calls, including classifier calls, from that estimate. baseline_model = "gpt-5.6-sol" [prices."gpt-5.6-sol"] @@ -181,8 +184,8 @@ write_always "$LAUNCH_AGENTS/$SERVER_LABEL.plist" < EOF -# SuccessfulExit false means the Quit menu item stays quit, while a crash is -# still restarted. Aqua-only, since there is no menu bar without a login session. +# SuccessfulExit false makes launchd restart crashes but leave a normal Quit alone. +# The app runs only in an Aqua login session, where the tray is available. write_always "$LAUNCH_AGENTS/$MENUBAR_LABEL.plist" < @@ -229,16 +232,18 @@ for label in "$SERVER_LABEL" "$MENUBAR_LABEL"; do say " loaded $label" done -step "Adding the sy Codex profile" +step "Adding the $SY_PROFILE Codex profile" # This profile only changes which router answers. Approval and sandbox # settings are deliberately left out, so the profile cannot loosen how Codex # asks before it acts. Set those yourself if you want them. -sed "s/@SY_PORT@/$SY_PORT/g" "$REPO_ROOT/scripts/config/codex.sy.toml" | - write_with_backup "$CODEX_PROFILE_CONFIG" +{ + printf 'model = "%s"\n' "$(toml_escape_basic_string "$SY_MODEL")" + tail -n +2 "$REPO_ROOT/scripts/config/codex.sy.toml" | sed "s/@SY_PORT@/$SY_PORT/g" +} | write_with_backup "$CODEX_PROFILE_CONFIG" step "Done" say "Server: http://127.0.0.1:$SY_PORT (logs in $SY_HOME/logs)" -say "Use it with: codex -p sy (requires Codex CLI 0.134.0 or newer)" +say "Use it with: codex -p $SY_PROFILE (requires Codex CLI 0.134.0 or newer)" say "Settings: $SY_HOME/menubar.toml" say "App: $APP_PATH (open it from Finder or Spotlight)" say "Use Update from source… in the app to rebuild from this checkout." diff --git a/scripts/macos/uninstall.sh b/scripts/macos/uninstall.sh index ae0dc6531f..47a943f91b 100755 --- a/scripts/macos/uninstall.sh +++ b/scripts/macos/uninstall.sh @@ -2,7 +2,7 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # -# Removes what install.sh added: the two LaunchAgents, the `sy` Codex profile, +# This script removes the app, two LaunchAgents, selected Codex profile, # and the codex alias. Your config, routing log, and binaries stay put; the # paths are printed so you can delete them yourself. # @@ -35,7 +35,7 @@ done run rm -rf "$APP_PATH" -step "Removing the sy Codex profile" +step "Removing the $SY_PROFILE Codex profile" remove_file "$CODEX_PROFILE_CONFIG" remove_file "$CODEX_SWITCHYARD_CONFIG" # Older installs of this script put the profile in config.toml instead. @@ -73,4 +73,4 @@ say "Left in place, delete them if you want:" say " $SY_HOME (binaries, config, routing log, model lists, logs)" say " $CODEX_CONFIG.switchyard-current.* (configs preserved during restore)" say " $CODEX_PROFILE_CONFIG.switchyard-backup.* (profile backups)" -say " Keychain items named \"Switchyard model list\" (keys saved from Change routing…; delete them in Keychain Access)" +say " Keychain items named \"Switchyard model list\" (keys saved from Routes; delete them in Keychain Access)" diff --git a/tests/test_macos_install.py b/tests/test_macos_install.py index eaba334e98..5878014c50 100644 --- a/tests/test_macos_install.py +++ b/tests/test_macos_install.py @@ -340,3 +340,43 @@ def test_installer_builds_in_source_checkout_with_an_explicit_target_directory(s assert lines[0] == str(scripts.parents[1]) target = lines.index("--target-dir") assert lines[target + 1] == str(scripts.parents[1] / "target") + + +def test_named_profile_keeps_route_and_update_settings(setup): + _, home, _, env = setup + env["SY_PROFILE"] = "stage-gpt-sonnet" + env["SY_MODEL"] = 'stage/provider-"model"' + result = run(setup, "install.sh") + assert result.returncode == 0, result.stderr + profile = home / ".codex" / "stage-gpt-sonnet.config.toml" + assert tomllib.loads(profile.read_text())["model"] == env["SY_MODEL"] + bundle = home / "Applications" / "Switchyard.app" / "Contents" + assert (bundle / "MacOS" / "switchyard-server").is_file() + update = (bundle / "Resources" / "Update.command").read_text() + for key in ["SY_PROFILE", "SY_MODEL"]: + line = next(line for line in update.splitlines() if line.startswith(f"export {key}=")) + assert shlex.split(line.split("=", 1)[1])[0] == env[key] + assert run(setup, "uninstall.sh").returncode == 0 + assert not profile.exists() + + +@pytest.mark.parametrize("name", ["../escape", "", "a/b", "a\nname", "x" * 129]) +def test_invalid_profile_name_rejects_before_install(setup, name): + _, home, switchyard_home, env = setup + env["SY_PROFILE"] = name + result = run(setup, "install.sh") + assert result.returncode == 2 + assert "SY_PROFILE" in result.stderr + assert not switchyard_home.exists() + assert not (home / "Applications").exists() + + +@pytest.mark.parametrize("model", ["", "model\nname", "model\rname", "model\x01name", "model\x7fname"]) +def test_invalid_model_rejects_before_install(setup, model): + _, home, switchyard_home, env = setup + env["SY_MODEL"] = model + result = run(setup, "install.sh") + assert result.returncode == 2 + assert "SY_MODEL" in result.stderr + assert not switchyard_home.exists() + assert not (home / "Applications").exists() From 87d5514d384ab299d42b7dea3751f08e28490150 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Thu, 8 Oct 2026 13:14:15 -0700 Subject: [PATCH 04/39] fix(app): reject model-list key saving outside macOS Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/README.md | 5 ++- crates/switchyard-menubar/src/controller.rs | 44 ++++++++++++++++++++- crates/switchyard-menubar/src/models.rs | 6 +++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index cf30ca266d..ba61f203b7 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -75,12 +75,15 @@ requests. Shared targets are copied when an edit would change another route. API keys entered for model lists stay in macOS Keychain. The app sends keys to curl through stdin and omits them from frontend snapshots. An endpoint must be -configured to use authentication before it accepts a model-list key. Submitting +configured to use authentication before it accepts a model-list key. On macOS, submitting a key always requests a fresh model list; a rejected key is not saved and leaves the cached list unchanged. Model-list keys do not replace the server's `api_key_env` credentials. The app and server LaunchAgents do not load shell startup files. +On other platforms, the app rejects entered model-list keys; set the environment +variable named by the endpoint's `api_key_env` and make it available to the app instead. + ## Install coding-tool settings **Install…** shows the current model and endpoint for Codex CLI, Codex app, diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index 240cd83f67..69d085f06d 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -138,7 +138,7 @@ impl Controller { "tiers": config.algorithm(&route.key).map(|a| config.roles(&route.key, a).iter().map(|r| r.tier.map(|t| format!("{t:?}"))).collect::>()), "editable": true, "generated": config.generated_by("routes", &route.key)})); } - clients = config.clients().iter().map(|c| json!({"name":c.name,"host":c.host(),"models":config.models_on(&c.name),"unlisted":models::unlisted(c),"accepts_key":!models::unlisted(c) && (c.forward_auth || c.api_key_env.is_some()),"note":models::missing_env(c).map(models::missing_env_note)})).collect(); + clients = config.clients().iter().map(|c| json!({"name":c.name,"host":c.host(),"models":config.models_on(&c.name),"unlisted":models::unlisted(c),"accepts_key":cfg!(target_os = "macos") && !models::unlisted(c) && (c.forward_auth || c.api_key_env.is_some()),"note":models::missing_env(c).map(models::missing_env_note)})).collect(); } Err(e) => errors.push(e), } @@ -210,6 +210,8 @@ impl Controller { { return Err("This endpoint does not accept a model-list key. Choose an endpoint configured for model-list authentication.".into()); } + #[cfg(not(target_os = "macos"))] + models::save_key(&client.base_url, key)?; } let cache = self.settings.with_file_name(models::CACHE_FILE); let result = models::load( @@ -416,6 +418,7 @@ mod tests { assert!(serde_json::from_str::(input).is_err()); } } + #[cfg(target_os = "macos")] #[test] // A cached list must not let an untested key reach Keychain. fn submitting_a_key_checks_upstream_even_when_refresh_is_false() { @@ -487,6 +490,45 @@ mod tests { ); } #[test] + #[cfg(not(target_os = "macos"))] + // Rejecting a typed key must leave the upstream endpoint, model cache, and route config unchanged. + fn key_persistence_rejects_without_network_or_file_writes() { + let dir = tempfile::tempdir().expect("directory"); + let listener = std::net::TcpListener::bind("127.0.0.1:0").expect("listener"); + listener.set_nonblocking(true).expect("nonblocking"); + let url = format!("http://{}/v1", listener.local_addr().expect("address")); + let settings = dir.path().join("settings.toml"); + let routes = dir.path().join("routes.toml"); + let text = format!( + "[llm_clients.c]\nbase_url={url:?}\nformat='openai_responses'\nforward_auth=true\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n" + ); + std::fs::write(&routes, &text).expect("routes"); + std::fs::write( + &settings, + format!( + "config_file={routes:?}\nrouting_log={:?}", + dir.path().join("log") + ), + ) + .expect("settings"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + let result = controller.dispatch(Action::Models { + client: "c".into(), + refresh: true, + key: Some("fixture-key".into()), + }); + assert_eq!( + result.err(), + Some("Saving model-list keys requires macOS Keychain. On this platform, set the environment variable named by api_key_env and make it available to the app.".into()) + ); + assert_eq!( + listener.accept().expect_err("no upstream request").kind(), + std::io::ErrorKind::WouldBlock + ); + assert_eq!(std::fs::read_to_string(routes).expect("routes"), text); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 2); + } + #[test] fn usage_snapshot_survives_missing_and_malformed_route_configs() { let dir = tempfile::tempdir().expect("directory"); let settings = dir.path().join("settings.toml"); diff --git a/crates/switchyard-menubar/src/models.rs b/crates/switchyard-menubar/src/models.rs index 6ddaf16cf8..082ac6867f 100644 --- a/crates/switchyard-menubar/src/models.rs +++ b/crates/switchyard-menubar/src/models.rs @@ -430,6 +430,12 @@ pub fn save_key(base_url: &str, key: &str) -> Result<(), String> { .map_err(|error| keychain_error(&error)) } +#[cfg(not(target_os = "macos"))] +/// This function rejects key persistence because saved model-list keys require macOS Keychain. +pub fn save_key(_base_url: &str, _key: &str) -> Result<(), String> { + Err("Saving model-list keys requires macOS Keychain. On this platform, set the environment variable named by api_key_env and make it available to the app.".into()) +} + /// This function returns the Keychain's message without its final period, so the window /// can end its own sentence after it. #[cfg(target_os = "macos")] From 5c45a14317921e4abd20b925c86a2a631862404f Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Thu, 8 Oct 2026 13:14:15 -0700 Subject: [PATCH 05/39] fix(app): keep usage columns readable in narrow windows Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/ui/app.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/switchyard-menubar/ui/app.css b/crates/switchyard-menubar/ui/app.css index 38d6bf20ab..9ca0a6f574 100644 --- a/crates/switchyard-menubar/ui/app.css +++ b/crates/switchyard-menubar/ui/app.css @@ -1,3 +1,3 @@ /* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ /* SPDX-License-Identifier: Apache-2.0 */ -:root{color-scheme:dark;font:15px system-ui,sans-serif;background:#11151b;color:#edf2f7}*{box-sizing:border-box}body{margin:0;display:grid;grid-template-columns:210px 1fr;min-height:100vh}aside{background:#191f28;padding:28px 20px;position:sticky;top:0;height:100vh}h1{font-size:23px;margin:0}aside p,small,.muted{color:#aab6c5}nav{display:grid;gap:7px;margin:34px 0}button,input,select{font:inherit;border-radius:7px;border:1px solid #465364;background:#252e3b;color:inherit;padding:10px}button{cursor:pointer;text-align:left}button:hover{background:#344257}button:disabled{opacity:.5;cursor:wait}nav button{border:0;background:transparent}nav button.active{background:#344257;color:#b4e790}main{padding:24px 32px;min-width:0}header{display:flex;justify-content:space-between;align-items:center}h2{font-size:25px}h3{margin:0 0 15px;font-size:18px}#status{white-space:pre-wrap;color:#b4e790;line-height:1.5;overflow-wrap:anywhere}section{display:grid;gap:18px}.card{border:1px solid #354151;border-radius:12px;padding:22px;background:#1b222c}label{display:grid;gap:7px;margin:14px 0;color:#cad4e1}input,select{width:100%}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}pre{font:13px ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;margin:0}table{width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:12px 8px;border-bottom:1px solid #354151;overflow-wrap:anywhere}th{color:#aab6c5}.scroll{overflow:auto}.primary{background:#3f5732;border-color:#8cab70}details{margin-top:12px}summary{cursor:pointer}input:focus,select:focus,button:focus{outline:2px solid #b4e790;outline-offset:2px} +:root{color-scheme:dark;font:15px system-ui,sans-serif;background:#11151b;color:#edf2f7}*{box-sizing:border-box}body{margin:0;display:grid;grid-template-columns:210px 1fr;min-height:100vh}aside{background:#191f28;padding:28px 20px;position:sticky;top:0;height:100vh}h1{font-size:23px;margin:0}aside p,small,.muted{color:#aab6c5}nav{display:grid;gap:7px;margin:34px 0}button,input,select{font:inherit;border-radius:7px;border:1px solid #465364;background:#252e3b;color:inherit;padding:10px}button{cursor:pointer;text-align:left}button:hover{background:#344257}button:disabled{opacity:.5;cursor:wait}nav button{border:0;background:transparent}nav button.active{background:#344257;color:#b4e790}main{padding:24px 32px;min-width:0}header{display:flex;justify-content:space-between;align-items:center}h2{font-size:25px}h3{margin:0 0 15px;font-size:18px}#status{white-space:pre-wrap;color:#b4e790;line-height:1.5;overflow-wrap:anywhere}section{display:grid;gap:18px}.card{min-width:0;border:1px solid #354151;border-radius:12px;padding:22px;background:#1b222c}label{display:grid;gap:7px;margin:14px 0;color:#cad4e1}input,select{width:100%}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}pre{font:13px ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;margin:0}table{min-width:1100px;table-layout:fixed;width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:12px 8px;border-bottom:1px solid #354151;overflow-wrap:anywhere}th{color:#aab6c5;white-space:nowrap}td:nth-last-child(-n+3),th:nth-last-child(-n+3){width:80px;white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums}.scroll{overflow:auto}.primary{background:#3f5732;border-color:#8cab70}details{margin-top:12px}summary{cursor:pointer}input:focus,select:focus,button:focus{outline:2px solid #b4e790;outline-offset:2px} From 8f8e61fdd13cd43e73798144f638299b73317bbe Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Thu, 8 Oct 2026 15:29:31 -0700 Subject: [PATCH 06/39] feat(app): preview harness installs and expand the tray menu Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/icons/tray.png | Bin 0 -> 362 bytes crates/switchyard-menubar/icons/tray.rgba | Bin 0 -> 1936 bytes crates/switchyard-menubar/icons/tray.svg | 3 + crates/switchyard-menubar/src/controller.rs | 26 ++++ crates/switchyard-menubar/src/gui.rs | 105 +++++++++++--- crates/switchyard-menubar/src/harness.rs | 137 ++++++++++++++++-- crates/switchyard-menubar/tauri.conf.json | 1 + crates/switchyard-menubar/ui/app.css | 148 +++++++++++++++++++- crates/switchyard-menubar/ui/app.js | 138 ++++++++++++++---- crates/switchyard-menubar/ui/index.html | 36 ++++- 10 files changed, 535 insertions(+), 59 deletions(-) create mode 100644 crates/switchyard-menubar/icons/tray.png create mode 100644 crates/switchyard-menubar/icons/tray.rgba create mode 100644 crates/switchyard-menubar/icons/tray.svg diff --git a/crates/switchyard-menubar/icons/tray.png b/crates/switchyard-menubar/icons/tray.png new file mode 100644 index 0000000000000000000000000000000000000000..dfeb25a27f4030b342c67b35fe054c56e0642843 GIT binary patch literal 362 zcmV-w0hRuVP)|LJ>}&;JLj)U33oQgoK?@;-h~{MF zKN!LyyIF%j%z>Crz z0o$5y$;U4qU0SCAAADof9?g^|8I{H}LwfpGq{oKzTJvSf1{DhM*4ErEFc#?>urA`Z z{F+6|lo~Gqk0N~s`l;zU1@8bo^Lzqq>i!m30S86(FffoJJ=T%2qu%#zv zbzAqCO{!;G+L_e5z^X|r1x?H=@RWJZ{|*;8y~sfJALRe=4KOuMe6geIUjP6A07*qo IM6N<$g4<7@>Hq)$ literal 0 HcmV?d00001 diff --git a/crates/switchyard-menubar/icons/tray.rgba b/crates/switchyard-menubar/icons/tray.rgba new file mode 100644 index 0000000000000000000000000000000000000000..f0a18653273098930d6ef1df3ce3853798008772 GIT binary patch literal 1936 zcmd6mIZ8xP5JlTD5p)HjoonEL?m#e7!O+BQxC;%$xFbO@GcpyIV4yoNFc8GZ;T--Z?4JJS*v$t5<6xlXu+G zyrb>7XQ+Lf+>tr6psm3>xYrk026de`E^FA9n){t6?g`X4wda-LO^tVL^6e*|kwts`~Q|IN4SIJ&1Le;A#tlbjwJnwq%>|9fk4qj=l3 cB&SP`7R{zNp08`;Y0Y*nvV*mgE literal 0 HcmV?d00001 diff --git a/crates/switchyard-menubar/icons/tray.svg b/crates/switchyard-menubar/icons/tray.svg new file mode 100644 index 0000000000..fe8cb99b2e --- /dev/null +++ b/crates/switchyard-menubar/icons/tray.svg @@ -0,0 +1,3 @@ + + + diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index 69d085f06d..099d626724 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -35,6 +35,12 @@ pub enum Action { refresh: bool, key: Option, }, + PreviewInstall { + tool: Harness, + account: Option, + route: String, + id: String, + }, Install { tool: Harness, account: Option, @@ -249,6 +255,26 @@ impl Controller { data: json!({"client":client.name,"models":models}), }) } + Action::PreviewInstall { + tool, + account, + route, + id, + } => { + let account = account_path(tool, account.as_deref())?; + let config = self.routes()?; + let route = current_route(&config, &route, Some(&id))?; + let files = accounts::config_paths(tool, account.as_deref()); + let current = harness::inspect(tool, &files)?; + let preview = login_mode(tool, &self.config, &route).and_then(|login| { + harness::preview(tool, &files, &self.config.server_url, &route.id, login) + }); + Ok(Reply { + message: String::new(), + data: preview + .unwrap_or_else(|error| json!({"current": current, "error": error})), + }) + } Action::Install { tool, account, diff --git a/crates/switchyard-menubar/src/gui.rs b/crates/switchyard-menubar/src/gui.rs index 69403516bf..502f8c2e68 100644 --- a/crates/switchyard-menubar/src/gui.rs +++ b/crates/switchyard-menubar/src/gui.rs @@ -10,7 +10,7 @@ use std::sync::{ }; use tauri::{ Manager, State, - menu::{Menu, MenuItem}, + menu::{Menu, MenuItem, PredefinedMenuItem}, tray::TrayIconBuilder, }; @@ -19,6 +19,26 @@ struct Shared { // The state is idle (0), busy (1), or closing (2); closing prevents new operations. operation: Arc, } +struct TrayPreview { + today: MenuItem, + week: MenuItem, +} +impl TrayPreview { + fn update(&self, snapshot: &serde_json::Value) -> tauri::Result<()> { + for (prefix, item) in [("Today —", &self.today), ("This week —", &self.week)] { + let label = snapshot["summary"] + .as_array() + .and_then(|rows| { + rows.iter() + .filter_map(|row| row.as_str()) + .find(|row| row.starts_with(prefix) || *row == "No requests recorded yet") + }) + .unwrap_or("Usage unavailable"); + item.set_text(label)?; + } + Ok(()) + } +} // Operation keeps the app busy from queueing through worker completion. // Dropping it returns the state to idle, so the user can retry Quit. struct Operation(Arc); @@ -43,10 +63,13 @@ impl Shared { } #[tauri::command] -async fn snapshot(state: State<'_, Shared>) -> Result { +async fn snapshot( + app: tauri::AppHandle, + state: State<'_, Shared>, +) -> Result { let operation = state.begin()?; let shared = state.controller.clone(); - tauri::async_runtime::spawn_blocking(move || { + let snapshot = tauri::async_runtime::spawn_blocking(move || { let _operation = operation; shared .try_lock() @@ -54,7 +77,11 @@ async fn snapshot(state: State<'_, Shared>) -> Result .snapshot() }) .await - .map_err(|e| e.to_string())? + .map_err(|e| e.to_string())??; + app.state::() + .update(&snapshot) + .map_err(|e| e.to_string())?; + Ok(snapshot) } #[tauri::command] async fn action(state: State<'_, Shared>, action: Action) -> Result { @@ -70,6 +97,18 @@ async fn action(state: State<'_, Shared>, action: Action) -> Result Result<(), String> { .invoke_handler(tauri::generate_handler![snapshot, action]) .setup(|app| { let open = MenuItem::with_id(app, "open", "Open Switchyard", true, None::<&str>)?; + let install = MenuItem::with_id(app, "install", "Install…", true, None::<&str>)?; + let today = + MenuItem::with_id(app, "today", "Today — loading usage…", true, None::<&str>)?; + let week = MenuItem::with_id( + app, + "week", + "This week — loading usage…", + true, + None::<&str>, + )?; + let usage = MenuItem::with_id(app, "usage", "View usage…", true, None::<&str>)?; + let settings = MenuItem::with_id(app, "settings", "Settings…", true, None::<&str>)?; let quit = MenuItem::with_id(app, "quit", "Quit Switchyard", true, None::<&str>)?; - let menu = Menu::with_items(app, &[&open, &quit])?; - // The tray keeps a simple high-contrast routing glyph at native resolution. - let mut pixels = vec![0u8; 22 * 22 * 4]; - for y in 3..19 { - for x in 3..19 { - if x == 10 || x == 11 || (y < 9 && (x == y + 4 || x + y == 17)) { - let i = (y * 22 + x) * 4; - pixels[i + 3] = 255; - } - } + let separator = PredefinedMenuItem::separator(app)?; + let bottom_separator = PredefinedMenuItem::separator(app)?; + let menu = Menu::with_items( + app, + &[ + &open, + &install, + &separator, + &today, + &week, + &usage, + &bottom_separator, + &settings, + &quit, + ], + )?; + app.manage(TrayPreview { today, week }); + if let Ok(snapshot) = app + .state::() + .controller + .lock() + .map_err(|e| e.to_string())? + .snapshot() + { + app.state::().update(&snapshot)?; } TrayIconBuilder::new() - .icon(tauri::image::Image::new_owned(pixels, 22, 22)) + .icon(tauri::image::Image::new_owned( + include_bytes!("../icons/tray.rgba").to_vec(), + 22, + 22, + )) .icon_as_template(true) .tooltip("Switchyard — routes and usage") .menu(&menu) .on_menu_event(|app, event| match event.id.as_ref() { - "open" => show(app), + "open" => open_page(app, "overview"), + "install" => open_page(app, "install"), + "today" | "week" | "usage" => open_page(app, "usage"), + "settings" => open_page(app, "settings"), "quit" if app.state::().quit() => app.exit(0), _ => {} }) diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs index a0e395ac3e..2d85f82aeb 100644 --- a/crates/switchyard-menubar/src/harness.rs +++ b/crates/switchyard-menubar/src/harness.rs @@ -44,7 +44,15 @@ pub fn paths(tool: Harness) -> Vec { } pub fn inspect(tool: Harness, files: &[PathBuf]) -> Result { - let text = read(&files[0])?; + let texts = files + .iter() + .map(|path| read(path)) + .collect::, _>>()?; + inspect_settings(tool, files, &texts) +} + +fn inspect_settings(tool: Harness, files: &[PathBuf], texts: &[String]) -> Result { + let text = &texts[0]; let model; let endpoint; match tool { @@ -70,7 +78,7 @@ pub fn inspect(tool: Harness, files: &[PathBuf]) -> Result { .to_string(); } Harness::Claude => { - let doc = object(&text)?; + let doc = object(text)?; model = doc .pointer("/env/ANTHROPIC_MODEL") .and_then(Value::as_str) @@ -84,7 +92,7 @@ pub fn inspect(tool: Harness, files: &[PathBuf]) -> Result { .to_string(); } Harness::Pi => { - let doc = object(&read(&files[1])?)?; + let doc = object(&texts[1])?; model = doc .get("defaultModel") .and_then(Value::as_str) @@ -94,7 +102,7 @@ pub fn inspect(tool: Harness, files: &[PathBuf]) -> Result { .get("defaultProvider") .and_then(Value::as_str) .unwrap_or("Default"); - let models = object(&text)?; + let models = object(text)?; endpoint = models .get("providers") .and_then(|v| v.get(provider)) @@ -118,7 +126,11 @@ pub fn inspect(tool: Harness, files: &[PathBuf]) -> Result { .unwrap_or_else(|| "Provider default".into()); Ok(format!( "Model: {model}\nEndpoint: {endpoint}\nSettings: {}", - files[0].display() + files + .iter() + .map(|file| file.display().to_string()) + .collect::>() + .join("\n ") )) } @@ -253,29 +265,51 @@ fn claude_settings(text: &str, root: &str, model: &str, login: bool) -> Result Result { +) -> Result { let root = validate(tool, root, model, login)?; let originals = files .iter() - .map(|p| read_file(p)) + .map(|path| read_file(path)) .collect::, _>>()?; + let incoming = configured(tool, &originals, &root, model, login)?; + let current = originals + .iter() + .map(|text| text.clone().unwrap_or_default()) + .collect::>(); + Ok(json!({ + "current": inspect_settings(tool, files, ¤t)?, + "proposed": inspect_settings(tool, files, &incoming)?, + "authentication": if login { "This route uses the coding tool’s subscription login." } else { "This route uses the API credentials configured on the Switchyard server." }, + "files": files.iter().map(|path| path.display().to_string()).collect::>() + })) +} + +// Both preview and installation use these transformations so the proposed settings match the saved settings. +fn configured( + tool: Harness, + originals: &[Option], + root: &str, + model: &str, + login: bool, +) -> Result, String> { let mut incoming = Vec::new(); match tool { Harness::CodexCli | Harness::CodexApp => incoming.push(codex_settings( originals[0].as_deref().unwrap_or_default(), - &root, + root, model, login, )?), Harness::Claude => incoming.push(claude_settings( originals[0].as_deref().unwrap_or_default(), - &root, + root, model, login, )?), @@ -291,6 +325,22 @@ pub fn install( .push(serde_json::to_string_pretty(&settings).map_err(|e| e.to_string())? + "\n"); } } + Ok(incoming) +} + +pub fn install( + tool: Harness, + files: &[PathBuf], + root: &str, + model: &str, + login: bool, +) -> Result { + let root = validate(tool, root, model, login)?; + let originals = files + .iter() + .map(|p| read_file(p)) + .collect::, _>>()?; + let incoming = configured(tool, &originals, &root, model, login)?; let incoming: Vec<_> = incoming.into_iter().map(Some).collect(); for (path, before) in files.iter().zip(&originals) { let backup = backup_path(path); @@ -446,6 +496,73 @@ pub fn binary(tool: Harness) -> Option { mod tests { use super::*; #[test] + // Preview must match the installed settings without creating files or backups. + fn preview_matches_installation_without_writes() { + for (tool, _) in HARNESSES { + let dir = tempfile::tempdir().expect("directory"); + let files = if *tool == Harness::Pi { + vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ] + } else { + vec![dir.path().join("config")] + }; + let original = if matches!(tool, Harness::CodexCli | Harness::CodexApp) { + "model='before'\n" + } else { + "{}" + }; + std::fs::write(&files[0], original).expect("settings"); + let result = preview(*tool, &files, "http://localhost:4123", "new-route", false) + .expect("preview"); + assert_eq!(read(&files[0]).expect("unchanged"), original); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 1); + install(*tool, &files, "http://localhost:4123", "new-route", false).expect("install"); + assert_eq!( + result["proposed"], + inspect(*tool, &files).expect("installed") + ); + assert!( + result["authentication"] + .as_str() + .expect("authentication") + .contains("API credentials") + ); + } + let dir = tempfile::tempdir().expect("directory"); + let files = vec![dir.path().join("settings.json")]; + let original = r#"{"env":{"ANTHROPIC_API_KEY":"SECRET"}}"#; + std::fs::write(&files[0], original).expect("settings"); + assert!( + preview( + Harness::Claude, + &files, + "http://localhost:4123", + "route", + true + ) + .is_err() + ); + assert_eq!(read(&files[0]).expect("unchanged"), original); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 1); + std::fs::write(&files[0], "{}").expect("settings"); + let result = preview( + Harness::Claude, + &files, + "http://localhost:4123", + "route", + true, + ) + .expect("login preview"); + assert!( + result["authentication"] + .as_str() + .expect("authentication") + .contains("subscription login") + ); + } + #[test] fn preserves_user_fields_refreshes_and_restores() { let dir = tempfile::tempdir().expect("directory"); for (tool, _) in HARNESSES { diff --git a/crates/switchyard-menubar/tauri.conf.json b/crates/switchyard-menubar/tauri.conf.json index 1b433419e2..5fa68a5379 100644 --- a/crates/switchyard-menubar/tauri.conf.json +++ b/crates/switchyard-menubar/tauri.conf.json @@ -11,6 +11,7 @@ { "label": "main", "title": "Switchyard", + "theme": "Dark", "width": 1080, "height": 760, "minWidth": 760, diff --git a/crates/switchyard-menubar/ui/app.css b/crates/switchyard-menubar/ui/app.css index 9ca0a6f574..9ab26cec05 100644 --- a/crates/switchyard-menubar/ui/app.css +++ b/crates/switchyard-menubar/ui/app.css @@ -1,3 +1,149 @@ /* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ /* SPDX-License-Identifier: Apache-2.0 */ -:root{color-scheme:dark;font:15px system-ui,sans-serif;background:#11151b;color:#edf2f7}*{box-sizing:border-box}body{margin:0;display:grid;grid-template-columns:210px 1fr;min-height:100vh}aside{background:#191f28;padding:28px 20px;position:sticky;top:0;height:100vh}h1{font-size:23px;margin:0}aside p,small,.muted{color:#aab6c5}nav{display:grid;gap:7px;margin:34px 0}button,input,select{font:inherit;border-radius:7px;border:1px solid #465364;background:#252e3b;color:inherit;padding:10px}button{cursor:pointer;text-align:left}button:hover{background:#344257}button:disabled{opacity:.5;cursor:wait}nav button{border:0;background:transparent}nav button.active{background:#344257;color:#b4e790}main{padding:24px 32px;min-width:0}header{display:flex;justify-content:space-between;align-items:center}h2{font-size:25px}h3{margin:0 0 15px;font-size:18px}#status{white-space:pre-wrap;color:#b4e790;line-height:1.5;overflow-wrap:anywhere}section{display:grid;gap:18px}.card{min-width:0;border:1px solid #354151;border-radius:12px;padding:22px;background:#1b222c}label{display:grid;gap:7px;margin:14px 0;color:#cad4e1}input,select{width:100%}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}pre{font:13px ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65;margin:0}table{min-width:1100px;table-layout:fixed;width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:12px 8px;border-bottom:1px solid #354151;overflow-wrap:anywhere}th{color:#aab6c5;white-space:nowrap}td:nth-last-child(-n+3),th:nth-last-child(-n+3){width:80px;white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums}.scroll{overflow:auto}.primary{background:#3f5732;border-color:#8cab70}details{margin-top:12px}summary{cursor:pointer}input:focus,select:focus,button:focus{outline:2px solid #b4e790;outline-offset:2px} +:root { + color-scheme: dark; + font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; + color: var(--text); + background: var(--canvas); + --canvas: #191c20; + --sidebar: #101216; + --panel: #20242b; + --control: #252b33; + --text: #f2f4f8; + --muted: #d1d7e0; + --line: #454d59; + --control-border: #8491a2; + --hover: #303640; + --selection: #28384c; + --accent: #a5caff; + --accent-hover: #bfd9fa; + --accent-text: #142538; + --focus: #9bc5ff; + --status: #d1e3fa; + --mono: ui-monospace, "SFMono-Regular", Consolas, monospace; +} + +* { box-sizing: border-box; } +body { margin: 0; display: grid; grid-template-columns: 176px minmax(0, 1fr); min-height: 100vh; line-height: 1.5; } +aside { position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column; padding: 24px 12px 16px; background: var(--sidebar); border-right: 1px solid var(--line); } +.brand { padding: 0 12px; } +h1 { font-size: 17px; font-weight: 650; letter-spacing: -.35px; margin: 0; } +.sidebar-caption { margin: 3px 0 0; font-size: 11px; color: var(--muted); } +nav { display: grid; gap: 3px; margin-top: 28px; } +nav button { border: 0; padding: 8px 12px; background: transparent; font-weight: 500; } +nav button.active { background: var(--selection); color: var(--text); box-shadow: inset 2px 0 var(--accent); } +aside footer { margin-top: auto; padding: 16px 12px 0; border-top: 1px solid var(--line); font-size: 11px; color: var(--muted); } +main { min-width: 0; padding: 26px 28px 36px; } +header { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 34px; margin-bottom: 22px; } +h2 { margin: 0; font-size: 22px; font-weight: 600; letter-spacing: -.5px; } +h3 { margin: 0 0 14px; font-size: 14px; font-weight: 600; line-height: 1.4; overflow-wrap: anywhere; } +p { margin: 0 0 12px; } +p:last-child { margin-bottom: 0; } +small, .muted { color: var(--muted); } +small { font-size: 11px; line-height: 1.5; } +section { display: grid; gap: 18px; } +.card { min-width: 0; border: 1px solid var(--line); border-radius: 7px; padding: 20px; background: var(--panel); } +.card > p { max-width: 76ch; color: var(--muted); } +button, input, select { font: inherit; color: inherit; border: 1px solid var(--control-border); border-radius: 5px; background: var(--control); min-height: 32px; padding: 6px 10px; } +button { cursor: pointer; text-align: left; font-weight: 500; line-height: 1.35; } +button:hover { background: var(--hover); } +button:disabled, input:disabled, select:disabled { opacity: .55; } +button:disabled { cursor: default; } +button.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-text); } +button.primary:hover { background: var(--accent-hover); border-color: var(--accent-hover); } +button:focus-visible, input:focus-visible, select:focus-visible, summary:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; } +input, select { width: 100%; min-width: 0; } +select { padding-right: 28px; text-overflow: ellipsis; } +input::placeholder { color: var(--muted); } +label { display: grid; gap: 6px; margin: 16px 0; font-size: 12px; font-weight: 500; } +.actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; } +.actions + .actions { margin-top: 8px; } +.actions + p, .actions + pre { margin-top: 16px; } +pre + p { margin-top: 12px; } +pre { font: 12px/1.7 var(--mono); white-space: pre-wrap; overflow-wrap: anywhere; margin: 0; } +#status { margin: 0 0 18px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--panel); color: var(--status); white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; } +#status:empty { display: none; } +[data-role] { padding: 16px 0; border-top: 1px solid var(--line); } +[data-role] label:first-child { margin-top: 0; } +[data-role] .actions { margin-top: 10px; } +[data-role] > small { display: block; } +details { margin-top: 12px; color: var(--muted); } +summary { cursor: pointer; font-size: 12px; } +details[open] { padding-bottom: 2px; } +details label { color: var(--text); } +.scroll { overflow: auto; margin: 18px -20px -20px; border-top: 1px solid var(--line); border-radius: 0 0 7px 7px; } +table { min-width: 820px; table-layout: fixed; width: 100%; border-collapse: collapse; font-size: 12px; line-height: 1.55; } +th, td { text-align: left; padding: 12px; border-bottom: 1px solid var(--line); overflow-wrap: anywhere; vertical-align: top; } +th { background: var(--sidebar); color: var(--muted); font-weight: 500; white-space: nowrap; } +tbody tr:last-child td { border-bottom: 0; } +tbody tr:hover { background: var(--hover); } +td:nth-last-child(-n+3), th:nth-last-child(-n+3) { width: 76px; white-space: nowrap; text-align: right; font-variant-numeric: tabular-nums; } + +/* Summary values and route details use separators instead of individual cards. */ +.summary-list { display: grid; gap: 0; margin: 0; } +.summary-row { margin: 0; padding: 9px 0; border-bottom: 1px solid var(--line); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; } +.summary-row:last-child { border-bottom: 0; padding-bottom: 0; } +.summary-row:first-child { padding-top: 0; } +.route-list { display: grid; gap: 0; } +.empty-state { padding: 20px 12px; text-align: center; color: var(--muted); } + +@media (min-width: 1100px) { + main { padding-left: 36px; padding-right: 36px; } +} +@media (max-width: 700px) { + body { grid-template-columns: 144px minmax(0, 1fr); } + aside { padding: 20px 8px 12px; } + .brand { padding: 0 8px; } + h1 { font-size: 16px; } + nav button { padding: 8px; } + main { padding: 20px 16px 28px; } + .card { padding: 16px; } + .scroll { margin: 16px -16px -16px; } +} +@media (max-width: 460px) { + body { display: block; } + aside { position: static; height: auto; padding: 14px 12px 10px; border-right: 0; border-bottom: 1px solid var(--line); } + .sidebar-caption, aside footer { display: none; } + nav { display: flex; flex-wrap: wrap; gap: 3px; margin-top: 12px; } + nav button { font-size: 12px; padding: 7px 9px; } + header { margin-bottom: 18px; } + main { padding: 18px 14px 26px; } +} +.route-row { padding: 12px 0; border-bottom: 1px solid var(--line); } +.route-row:first-child { padding-top: 0; } +.route-row:last-child { padding-bottom: 0; border-bottom: 0; } +.route-row h4 { display: inline; margin: 0 8px 0 0; font-size: 13px; font-weight: 600; overflow-wrap: anywhere; } +.route-row p { margin: 5px 0 0; font-size: 12px; overflow-wrap: anywhere; } +.badge { display: inline-block; padding: 1px 6px; border: 1px solid var(--line); border-radius: 4px; font-size: 10px; font-weight: 500; color: var(--muted); vertical-align: 1px; } +.field-grid, .role-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px; } +@media (max-width: 700px) { + .field-grid, .role-fields { grid-template-columns: 1fr; } +} +.table-primary { display: block; } +.table-secondary { display: block; color: var(--muted); font-size: 11px; margin-top: 3px; } + +.install-comparison { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 16px; border: 1px solid var(--line); border-radius: 5px; background: var(--sidebar); } +.install-comparison > div { min-width: 0; padding: 14px; } +.install-comparison > div + div { border-left: 1px solid var(--line); } +.install-comparison h4 { margin: 0 0 10px; font-size: 12px; font-weight: 600; color: var(--muted); } +.install-auth { margin-top: 12px; } +@media (max-width: 850px) { + .install-comparison { grid-template-columns: 1fr; } + .install-comparison > div + div { border-left: 0; border-top: 1px solid var(--line); } +} + +.routing-board { background: var(--sidebar); border-radius: 3px; border-top: 2px solid #edc47a; } +.routing-board h3 { color: #edc47a; font: 600 11px/1.4 var(--mono); text-transform: uppercase; letter-spacing: 1.3px; } +.board-head, .board-row { display: grid; grid-template-columns: minmax(0, 1fr) 112px minmax(0, 1fr); gap: 16px; } +.board-head { padding-bottom: 9px; color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .8px; border-bottom: 1px solid var(--line); } +.board-row { padding: 14px 0; align-items: start; } +.board-row:first-child { padding-top: 14px; } +.board-row h4 { font: 12px/1.6 var(--mono); margin: 0; } +.board-models p { font: 11px/1.7 var(--mono); margin: 0 0 5px; } +.board-models p:last-child { margin-bottom: 0; } +.board-routing { font-size: 11px; line-height: 1.7; color: var(--muted); overflow-wrap: anywhere; } +@media (max-width: 850px) { + .board-head { display: none; } + .board-row { grid-template-columns: minmax(0, 1fr) 100px; gap: 8px; } + .board-models { grid-column: 1 / -1; } +} diff --git a/crates/switchyard-menubar/ui/app.js b/crates/switchyard-menubar/ui/app.js index e5da91343b..1345be69a8 100644 --- a/crates/switchyard-menubar/ui/app.js +++ b/crates/switchyard-menubar/ui/app.js @@ -5,6 +5,7 @@ const invoke = window.__TAURI__.core.invoke; const content = document.querySelector('#content'); const status = document.querySelector('#status'); let snapshot, page = 'overview', busy = false; +let previewQueue = Promise.resolve(); const drafts = new Map(), lists = new Map(); const usageView = {session:'',search:''}; function node(tag, text, cls) { const n = document.createElement(tag); if (text !== undefined) n.textContent = text; if (cls) n.className = cls; return n; } @@ -15,12 +16,12 @@ function select(options, chosen) { const s = node('select'); for (const [value, function input(value = '', type = 'text') { const i = node('input'); i.type = type; i.value = value; return i; } function text(parent, value) { parent.append(node('pre', value)); } function actions(parent) { const a = node('div', undefined, 'actions'); parent.append(a); return a; } -function setBusy(value) { busy = value; document.querySelectorAll('button,input,select').forEach(n => n.disabled = value); } +function setBusy(value) { busy = value; document.querySelectorAll('button,input,select').forEach(n => n.disabled = value || n.dataset.blocked === 'true'); } // Successful editor loading keeps the saved-route and restart result visible. async function run(action, refresh = true) { if (busy) return; - setBusy(true); if(action.kind!=='editor')status.textContent = 'Working…'; - try { const result = await invoke('action', {action}); if(action.kind!=='editor')status.textContent = result.message; if (refresh) { snapshot = await invoke('snapshot'); render(); } return result; } + setBusy(true); if(!['editor','preview_install'].includes(action.kind))status.textContent = 'Working…'; + try { const result = await invoke('action', {action}); if(!['editor','preview_install'].includes(action.kind))status.textContent = result.message; if (refresh) { snapshot = await invoke('snapshot'); render(); } return result; } catch (error) { status.textContent = String(error); } finally { setBusy(false); } } @@ -39,34 +40,50 @@ function toolFields(c) { tool.onchange=update; update(); return {tool,account,get:()=>({tool:tool.value,account:account.value || null})}; } -function routeField(c) { return field(c, 'Route · algorithm · endpoint / model', select(snapshot.routes.map(r=>[r.key,r.label]))); } +function routeField(c) { return field(c, 'Route', select(snapshot.routes.map(r=>[r.key,r.label]))); } function routeArgs(s) { const r=snapshot.routes.find(r=>r.key===s.value); if (!r) throw new Error('Choose a route first.'); return {route:r.key,id:r.id}; } let generation; function render() { if (!snapshot) return; if (generation !== snapshot.generation) { drafts.clear(); lists.clear(); generation = snapshot.generation; } content.replaceChildren(); - document.querySelector('#title').textContent = {overview:'Overview',routes:'Routes',install:'Install…',usage:'Usage',sessions:'Sessions',settings:'Settings'}[page]; + document.querySelector('#title').textContent = {overview:'Overview',routes:'Routes',install:'Install',usage:'Usage',sessions:'Sessions',settings:'Settings'}[page]; document.querySelectorAll('[data-page]').forEach(b=>b.classList.toggle('active',b.dataset.page===page)); if (page==='overview') { - text(card('Server and savings'),snapshot.summary.join('\n')); - const c=card('Available routes'); for(const r of snapshot.routes)c.append(node('p',r.label)); + const summary=card('Server and usage'),rows=node('div',undefined,'summary-list'); + for(const line of snapshot.summary)if(line.trim())rows.append(node('p',line.trim(),'summary-row')); + summary.append(rows); + const c=card('Routes');c.classList.add('routing-board'); + const heading=node('div',undefined,'board-head'); + for(const title of ['Route','Routing','Models'])heading.append(node('span',title)); + c.append(heading); + const list=node('div',undefined,'route-list'); + for(const route of snapshot.routes) { + const row=node('div',undefined,'route-row board-row'); + const models=node('div',undefined,'board-models'); + for(const choice of route.choices)models.append(node('p',`${choice.model} · ${choice.client}`)); + row.append(node('h4',route.id),node('span',snapshot.algorithms.find(a=>a.kind===route.kind)?.title || route.kind,'board-routing'),models); + list.append(row); + } + if(!snapshot.routes.length)list.append(node('p','No routes are configured. Open the server config in Settings to add one.','empty-state')); + c.append(list); } else if (page==='routes') { for (const route of snapshot.routes) renderRoute(route); if (!snapshot.routes.length) text(card('No routes loaded'),'Check the server config in Settings, then refresh.'); } else if (page==='install') { - const c=card('Install or update a coding tool'); - c.append(node('p','Inspect the current model and endpoint, then install a route. Switchyard backs up settings before changing them. Caller login routes require a matching coding tool.')); - const tool=toolFields(c),route=routeField(c),a=actions(c); - button(a,'Install / update',()=>run({kind:'install',...tool.get(),...routeArgs(route)}),true); - button(a,'Restore previous settings',()=>run({kind:'restore',...tool.get()})); + const intro=card('Connect your coding tools'); + intro.append(node('p','Choose a Switchyard route for each coding tool, review the settings below, then install the route.')); + intro.append(node('p','Subscription routes reuse the coding tool’s login. API routes use credentials configured on the Switchyard server. You can edit endpoint keys in Routes.')); + intro.append(node('p','Installation backs up the original user settings. Shell variables and project settings may override these defaults.','muted')); + for(const tool of snapshot.tools) renderInstall(tool); renderAccounts(); } else if (page==='usage') { - const c=card('Model calls by session and turn'); - c.append(node('p','Each row is one completed model call. A user turn can contain several calls. Classifier calls are routing overhead. Input includes cached reads.')); + const c=card('Model calls'); + c.append(node('p','Each row shows a completed model call. A turn may include several calls. Input tokens include cached reads.')); c.append(node('p',`${snapshot.entries.length} recent calls${snapshot.limited?' (limited to 8 MiB / 5,000 records)':''}; Switchyard skipped ${snapshot.skipped} unreadable records.`,'muted')); - const session=field(c,'Session',select([['','All sessions'],...snapshot.sessions.map(s=>[s,s])],usageView.session)); - const search=field(c,'Filter turn, model, or route',input(usageView.search)); + const filters=node('div',undefined,'field-grid');c.append(filters); + const session=field(filters,'Session',select([['','All sessions'],...snapshot.sessions.map(s=>[s,s])],usageView.session)); + const search=field(filters,'Search turn, model, or route',input(usageView.search)); const container=node('div',undefined,'scroll'); c.append(container); const draw=()=>{ container.replaceChildren(); const table=node('table'),head=node('tr'); @@ -77,30 +94,81 @@ function render() { if(session.value && e.session_id!==session.value)continue; if(query && ![e.model,e.turn_id,e.route_id].join(' ').toLowerCase().includes(query))continue; const row=node('tr'); - for(const value of [e.ts,`${e.model}${e.tier==='classifier'?' (routing overhead)':''}`,`${e.session_id||'Not recorded'} / ${e.turn_id||'Not recorded'}`,e.route_id,e.prompt_tokens,e.cached_tokens,e.completion_tokens])row.append(node('td',String(value))); + const time=node('td'),date=new Date(e.ts);time.title=e.ts; + if(Number.isNaN(date.getTime()))time.textContent=e.ts; + else time.append(node('span',date.toLocaleDateString(undefined,{month:'short',day:'numeric',year:'numeric'}),'table-primary'),node('span',date.toLocaleTimeString(),'table-secondary')); + const model=node('td');model.append(node('span',e.model,'table-primary')); + if(e.tier==='classifier')model.append(node('span','Routing overhead','table-secondary')); + const ids=node('td');ids.append(node('span',e.session_id||'Session not recorded','table-primary'),node('span',e.turn_id||'Turn not recorded','table-secondary')); + row.append(time,model,ids,node('td',e.route_id)); + for(const value of [e.prompt_tokens,e.cached_tokens,e.completion_tokens])row.append(node('td',value.toLocaleString())); tbody.append(row); } container.append(table); + if(!tbody.children.length)container.append(node('p',snapshot.entries.length?'No calls match these filters.':'Switchyard has not recorded any model calls yet.','empty-state')); };session.onchange=()=>{usageView.session=session.value;draw();};search.oninput=()=>{usageView.search=search.value;draw();};draw(); } else if(page==='sessions') { - const c=card('Start a separate worktree session'); - c.append(node('p','Choose a route and login for one coding tool. Each launch gets its own Git worktree and Terminal window. Existing subscription limits still apply.')); - const tool=toolFields(c),route=routeField(c),project=field(c,'Git project (absolute path)',input()); + const c=card('New session'); + c.append(node('p','Launch a coding tool in a separate Git worktree and Terminal window. Your account’s usage limits apply.')); + const tool=toolFields(c),route=routeField(c),project=field(c,'Project folder (absolute path)',input()); button(actions(c),'Launch session',()=>run({kind:'launch',...tool.get(),...routeArgs(route),project:project.value}),true); renderAccounts(); } else if(page==='settings') { - const c=card('Manage the local app'); + const c=card('Application'); button(actions(c),'Open server config',()=>run({kind:'open_config'})); button(actions(c),'Restart server',()=>run({kind:'restart'})); button(actions(c),'Update from source…',()=>run({kind:'update'})); - c.append(node('p','Update rebuilds and reinstalls from the source checkout used for this installation. Routing settings, prices, log history, and native logins stay saved.')); - c.append(node('p','Terminal app: switchyard-menubar --tui. Close this window to keep Switchyard in the tray; use Quit Switchyard in the tray to exit. If an operation is queued or running, try Quit again after it finishes.')); + c.append(node('p','Updates build from the source checkout used to install this app. Your settings, usage history, and accounts are preserved.')); + text(c,'Terminal: switchyard-menubar --tui'); + c.append(node('p','Closing the window keeps Switchyard running. To exit, choose Quit Switchyard from the menu bar after any operation finishes.')); } } +// Each card previews the selected account and route before the user changes any settings. +function renderInstall(tool) { + const c=card(tool.label);c.dataset.tool=tool.tool; + if(!tool.available)c.append(node('p','The coding tool was not found on this machine. You can configure it now and install the tool later.','muted')); + const fields=node('div',undefined,'field-grid');c.append(fields); + const account=field(fields,'Settings folder',select([['','Existing user settings'],...tool.accounts.map(name=>[name,`Separate account: ${name}`])])); + const route=routeField(fields); + const comparison=node('div',undefined,'install-comparison');c.append(comparison); + const before=node('div'),after=node('div'); + before.append(node('h4','Current settings'));after.append(node('h4','After installation')); + const current=node('pre',tool.status),proposed=node('pre','Loading preview…');before.append(current);after.append(proposed);comparison.append(before,after); + const routing=node('p',undefined,'muted'),authentication=node('p',undefined,'install-auth');c.append(routing,authentication); + const a=actions(c),install=button(a,'Install route',()=>run({kind:'install',tool:tool.tool,account:account.value||null,...routeArgs(route)}),true); + button(a,'Restore original settings',()=>run({kind:'restore',tool:tool.tool,account:account.value||null})); + let revision=0; + const update=()=>{ + const requested=++revision;install.dataset.blocked='true';install.disabled=true; + proposed.textContent='Loading preview…';authentication.textContent=''; + const chosen=snapshot.routes.find(r=>r.key===route.value); + routing.textContent=chosen?`${snapshot.algorithms.find(a=>a.kind===chosen.kind)?.title || chosen.kind}: ${chosen.choices.map(c=>c.model).join(' → ')}`:''; + previewQueue=previewQueue.then(async()=>{ + while(busy)await new Promise(resolve=>setTimeout(resolve,30)); + if(!c.isConnected||requested!==revision)return; + if(!route.value){proposed.textContent='Add a route in the server config first.';return;} + current.textContent='Loading preview…'; + setBusy(true); + try { + const result=await invoke('action',{action:{kind:'preview_install',tool:tool.tool,account:account.value||null,...routeArgs(route)}}); + if(!c.isConnected||requested!==revision)return; + current.textContent=result.data.current; + proposed.textContent=result.data.error||result.data.proposed; + authentication.textContent=result.data.authentication||''; + install.dataset.blocked=String(Boolean(result.data.error)); + } catch(error) { if(c.isConnected&&requested===revision){current.textContent=String(error);proposed.textContent=String(error);} } + finally { setBusy(false); } + }); + }; + account.onchange=update;route.onchange=update;update(); +} function renderAccounts() { - const c=card('Add a native login'); const tool=toolFields(c),name=field(c,'Account name',input()); - button(actions(c),'Add account / open login',()=>run({kind:'add_account',tool:tool.tool.value,name:name.value})); - c.append(node('p','Switchyard opens the coding tool’s own login flow. It keeps each login in a separate configuration directory and does not copy or rotate tokens.')); + const c=card('Use another subscription account'); + c.append(node('p','An additional account is optional. Use your existing login unless you want a separate subscription account. API routes use the server’s credentials.')); + c.append(node('p','Switchyard opens the Codex CLI or Claude Code login in Terminal and saves the account in a separate settings folder. It does not add an API key or change the account in the Codex app. Select the folder when installing a route or launching a new session.')); + const tool=field(c,'Coding tool',select(snapshot.tools.filter(t=>['codex_cli','claude'].includes(t.tool)).map(t=>[t.tool,t.label]))); + const name=field(c,'Name for the separate account',input()); + button(actions(c),'Sign in to another account…',()=>run({kind:'add_account',tool:tool.value,name:name.value})); } // Tiered roles keep their models across algorithms; roles without tiers keep their positions. function roleChoice(draft, route, role, index) { @@ -109,13 +177,13 @@ function roleChoice(draft, route, role, index) { route.choices[0] || {client:snapshot.clients[0]?.name || '',model:''}; } function renderRoute(route) { - const c=card(route.label); + const c=card(route.id); if(route.generated)c.append(node('p',`This route belongs to a generated block: ${route.generated}. Its owner may replace these edits.`)); if(!route.editable){c.append(node('p','Edit this route in the server config.'));return;} let draft=drafts.get(route.key); if(!draft){draft={algorithm:snapshot.algorithms.some(a=>a.kind===route.kind)?route.kind:snapshot.algorithms[0].kind,choices:route.choices.map(c=>({...c})),memory:new Map()}; route.tiers?.forEach((tier,index)=>{if(tier)draft.memory.set(tier, {...route.choices[index]});});drafts.set(route.key,draft);} const algorithm=field(c,'Routing algorithm',select(snapshot.algorithms.map(a=>[a.kind,a.title]),draft.algorithm)); - const description=node('p'),roles=node('div'); c.append(description,roles); + const description=node('p',undefined,'description'),roles=node('div',undefined,'role-fields'); c.append(description,roles); const saveChoices=()=>{roles.querySelectorAll('[data-role]').forEach(row=>{const selects=row.querySelectorAll('select,input'); const choice={client:selects[0].value,model:selects[1].value};draft.choices[Number(row.dataset.role)]=choice;if(row.dataset.tier)draft.memory.set(row.dataset.tier,choice);});}; const draw=async()=>{ const result=await run({kind:'editor',generation,route:route.key,algorithm:draft.algorithm},false); if(!result)return; @@ -138,15 +206,25 @@ function renderRoute(route) { }; algorithm.onchange=()=>{saveChoices();draft.algorithm=algorithm.value;draw();}; const a=actions(c); - button(a,'Apply route and restart',async()=>{saveChoices();const result=await run({kind:'apply',generation,route:route.key,algorithm:draft.algorithm,choices:draft.choices});if(result){drafts.delete(route.key);render();}},true); - button(a,'Revert draft',()=>{drafts.delete(route.key);render();}); + button(a,'Save and restart',async()=>{saveChoices();const result=await run({kind:'apply',generation,route:route.key,algorithm:draft.algorithm,choices:draft.choices});if(result){drafts.delete(route.key);render();}},true); + button(a,'Discard changes',()=>{drafts.delete(route.key);render();}); // Each route waits for the shared operation to finish before loading its editor roles. const setup=async()=>{while(busy)await new Promise(resolve=>setTimeout(resolve,30));if(page==='routes'&&c.isConnected)await draw();};setup(); } document.querySelectorAll('[data-page]').forEach(b=>b.onclick=()=>{page=b.dataset.page;render();}); document.querySelector('#refresh').onclick=refresh; +window.addEventListener?.('switchyard-page', event=>{ + if(!['overview','routes','install','usage','sessions','settings'].includes(event.detail))return; + page=event.detail;render(); + if(!snapshot)refresh(); +}); async function poll() { if(page==='overview'||page==='usage')await refresh(); + else if(!busy) { + setBusy(true); + try { await invoke('snapshot'); } catch(error) { status.textContent=String(error); } + finally { setBusy(false); } + } setTimeout(poll,(snapshot?.refresh_seconds || 30)*1000); } refresh().finally(()=>setTimeout(poll,(snapshot?.refresh_seconds || 30)*1000)); diff --git a/crates/switchyard-menubar/ui/index.html b/crates/switchyard-menubar/ui/index.html index b71b7ccaa7..027ea5103d 100644 --- a/crates/switchyard-menubar/ui/index.html +++ b/crates/switchyard-menubar/ui/index.html @@ -1,5 +1,37 @@ -Switchyard -

Overview

+ + + + + Switchyard + + + + + +
+
+

Overview

+ +
+

+
+
+ + From cd519436c23de879d43f936ed8ed3ad14760afcc Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Thu, 8 Oct 2026 15:46:47 -0700 Subject: [PATCH 07/39] fix(app): scope model keys and refresh restored backups Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/README.md | 59 ++-- crates/switchyard-menubar/src/accounts.rs | 23 +- crates/switchyard-menubar/src/controller.rs | 69 +++-- crates/switchyard-menubar/src/harness.rs | 291 ++++++++++++++++++-- crates/switchyard-menubar/src/models.rs | 199 +++++++++++-- crates/switchyard-menubar/src/server.rs | 60 ++++ crates/switchyard-menubar/src/sessions.rs | 22 +- crates/switchyard-menubar/ui/app.js | 16 +- tests/test_macos_install.py | 63 +++-- 9 files changed, 642 insertions(+), 160 deletions(-) diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index ba61f203b7..2e59fc55dc 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -28,8 +28,9 @@ profile leaves `approval_policy` and `sandbox_mode` to your existing Codex settings. Reinstalling backs up the profile before replacing changed contents. Open the app from Finder or Spotlight. Closing the window keeps the tray menu. -Choose **Open Switchyard** to return or **Quit Switchyard** to exit. The app -rejects Quit while an operation is queued or running; try again after it finishes. +The tray includes **Install…**, daily and weekly usage previews, **View usage…**, +and **Settings…**. Clicking a usage preview opens Usage. Choose **Open Switchyard** +to return or **Quit Switchyard** to exit. The app rejects Quit while an operation is queued or running; try again after it finishes. **Settings → Update from source…** opens Terminal to rebuild and reinstall from the checkout used for this installation. It builds that checkout's current commit @@ -56,14 +57,14 @@ Each route label shows its public model ID, algorithm, endpoint name, and model choices. In **Routes**, choose an algorithm and enter the endpoint and model for each role. **Refresh models** loads the endpoint's list; you can also type an unlisted model ID. ChatGPT's private Codex endpoint uses the saved Codex model -list and configured targets. The app keeps drafts until **Apply route and -restart** or **Revert draft**. Refresh keeps drafts unless the settings select -a different server config file. +list and configured targets. The app keeps drafts until **Save and restart** or +**Discard changes**. Refresh keeps drafts unless the settings select a different +server config file. -**Apply route and restart** checks the complete edited file with the bundled +**Save and restart** checks the complete edited file with the bundled server's `--dry-run`. It preserves comments and unrelated tables, saves a backup beside the config, and restarts the server. A failed check leaves the file -unchanged. A restart failure after saving is reported separately. Apply re-reads +unchanged. A restart failure after saving is reported separately. The app re-reads the config and rejects concurrent changes detected before replacement. A draft from a different server config file is rejected before saving. @@ -75,41 +76,53 @@ requests. Shared targets are copied when an edit would change another route. API keys entered for model lists stay in macOS Keychain. The app sends keys to curl through stdin and omits them from frontend snapshots. An endpoint must be -configured to use authentication before it accepts a model-list key. On macOS, submitting -a key always requests a fresh model list; a rejected key is not saved and leaves +configured to use authentication before it accepts a model-list key. An entered +key applies only to that endpoint's exact `base_url`. On macOS, submitting a key +always requests a fresh model list; a rejected key is not saved and leaves the cached list unchanged. Model-list keys do not replace the server's `api_key_env` credentials. The app and server LaunchAgents do not load shell startup files. On other platforms, the app rejects entered model-list keys; set the environment -variable named by the endpoint's `api_key_env` and make it available to the app instead. +variable named by the endpoint's `api_key_env` and make it available to the app +instead. ## Install coding-tool settings -**Install…** shows the current model and endpoint for Codex CLI, Codex app, -Claude Code, and Pi. Choose a route and click **Install / update**. Codex CLI -gets `sy.config.toml` for `codex -p sy`. The Codex app option changes the defaults +**Install** shows one card for Codex CLI, Codex app, Claude Code, and Pi. +Choose a route to compare the current model, endpoint, and settings files with +the proposed settings. The preview changes no files. Click **Install route** +to save the settings. Codex CLI gets `sy.config.toml` for `codex -p sy`. The Codex app option changes the defaults in `config.toml` for both the app and CLI. Claude Code gets environment settings in `settings.json`. Pi gets a custom provider in `models.json` and defaults in `settings.json`. Unrelated settings remain. The app backs up each original file as `.switchyard-original`. If a file did not exist, `.switchyard-original-missing` records its absence. -**Restore previous settings** keeps a copy of the current file, then restores -the backup or removes a file that was originally absent. +**Restore original settings** keeps a copy of the current file, then restores +the backup or removes a file that was originally absent. The result lists the +recovery copies. A successful restore retires the original backup, so the next +installation backs up your current settings. If backup cleanup fails, retry +Restore before installing another route. Install and Restore check every selected file before replacing any file. Malformed settings and symlink settings files are rejected before writes. Each replacement is atomic. If a later replacement fails, the app tries to restore earlier files. A crash can leave Pi's two files out of sync, and rollback can fail. Another process running as the same user can also change a file after the -app checks it. The original backups remain available for manual recovery. +app checks it. A failed replacement keeps original backups for manual recovery. +If backup cleanup fails after restoration, the remaining receipts keep the +restored contents available for a retry. Recovery copies remain until you remove +them. Caller login routes require a matching coding tool and provider: Codex for ChatGPT or Claude Code for Anthropic. Pi requires a route whose API credentials the server owns. Configure those credentials on the server before installing -the route. Claude settings with an explicit API key or bearer token must be -cleared before installing a subscription route. Restart the coding tool after +the route. Claude settings with a user API key or bearer token must be cleared +before installing a subscription route. Switching from an API route installed +by Switchyard removes its placeholder credentials only when the existing model +settings and local endpoint match that installation. If the local endpoint has +changed, restore the original settings first. Restart the coding tool after changing its defaults. Project settings, shell variables, and command-line options can override them; check Claude's `/status` for shell overrides. @@ -118,9 +131,9 @@ For older installs that replaced `config.toml`, `make uninstall-macos` restores ## Start sessions with separate logins and worktrees -Codex CLI and Claude Code support named accounts. Enter a name and click **Add -account / open login** to open the tool's own login command in Terminal. Complete -the login, refresh, and select the account. Switchyard keeps account directories +Codex CLI and Claude Code support named accounts. Enter a name and click +**Sign in to another account…** to open the tool's own login command in Terminal. +Complete the login, refresh, and select the account. Switchyard keeps account directories under `~/.switchyard/accounts`; the coding tool owns their login files. The selected account determines where Install saves settings and which login a new session uses. Existing sessions keep their login. Switchyard does not read, @@ -153,7 +166,9 @@ session resume, remote workspaces, or review comments. Provider limits still app output tokens, and recorded session and turn IDs for each completed model call. Filter by session or search for a turn, model, or route. A user turn may contain several calls. Classifier calls are marked as routing overhead. Missing IDs -appear as **Not recorded**; Switchyard does not infer them from prompts. +appear as **Session not recorded** or **Turn not recorded** in the desktop app +and **Not recorded** in the terminal app. Switchyard does not infer them from +prompts. Recent history reads the last 8 MiB of the log plus one byte to check whether the first record is complete. It keeps at most 5,000 complete records and excludes diff --git a/crates/switchyard-menubar/src/accounts.rs b/crates/switchyard-menubar/src/accounts.rs index a8c7fd4092..9d66bf4af9 100644 --- a/crates/switchyard-menubar/src/accounts.rs +++ b/crates/switchyard-menubar/src/accounts.rs @@ -4,7 +4,6 @@ //! Named login directories use the coding tool's own authentication commands. use crate::harness::{self, Harness}; -use std::io::Write; use std::path::{Path, PathBuf}; // PendingAccount removes only an empty directory if login setup fails. @@ -111,23 +110,13 @@ pub fn add(tool: Harness, name: &str) -> Result { Harness::CodexCli => "login", _ => "auth login", }; - let mut script = tempfile::Builder::new() - .prefix("switchyard-login-") - .suffix(".command") - .tempfile() - .map_err(|e| e.to_string())?; - writeln!(script,"#!/bin/bash\nrm -- \"$0\"\nexport PATH=\"/opt/homebrew/bin:/usr/local/bin:$PATH\"\nexport {variable}={}\n{} {login}",crate::sessions::quote(&path.display().to_string()),crate::sessions::quote(&binary.display().to_string())).map_err(|e|e.to_string())?; - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - script - .as_file() - .set_permissions(std::fs::Permissions::from_mode(0o700)) - .map_err(|e| e.to_string())?; - } - crate::server::command("open", &[&script.path().display().to_string()])?; + let script = format!( + "#!/bin/bash\nrm -- \"$0\"\nexport PATH=\"/opt/homebrew/bin:/usr/local/bin:$PATH\"\nexport {variable}={}\n{} {login}", + crate::sessions::quote(&path.display().to_string()), + crate::sessions::quote(&binary.display().to_string()) + ); + crate::server::open_terminal_script("switchyard-login-", &script)?; pending.0 = None; - let _ = script.keep().map_err(|e| e.to_string())?; Ok(format!( "Opened the coding tool's login in Terminal for account {name}. Complete login, click Refresh, and select this account. Switchyard does not read the login tokens. The selected account applies to new sessions only. Account directory: {}", path.display() diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index 099d626724..0fb7240f24 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -193,7 +193,6 @@ impl Controller { let config = self.routes()?; current_route(&config, &route, None)?; let algorithm = algorithm_by_id(&algorithm)?; - config.edit(&route, algorithm, &choices)?; server::apply(&self.config, &route, algorithm, &choices).map(Reply::message) } Action::Models { @@ -224,7 +223,7 @@ impl Controller { &cache, std::slice::from_ref(&client), refresh || key.is_some(), - key.as_deref(), + key.as_deref().map(|key| (client.base_url.as_str(), key)), &|_| {}, ); let loaded = result.into_iter().next().ok_or("No model list returned.")?; @@ -233,13 +232,7 @@ impl Controller { None | Some(models::ListError::NotCached(_)) => { models::save_key(&client.base_url, key)? } - _ => { - return Err(loaded - .error - .as_ref() - .map(models::ListError::reason) - .unwrap_or_default()); - } + Some(error) => return Err(error.reason()), } } let message = loaded @@ -266,7 +259,7 @@ impl Controller { let route = current_route(&config, &route, Some(&id))?; let files = accounts::config_paths(tool, account.as_deref()); let current = harness::inspect(tool, &files)?; - let preview = login_mode(tool, &self.config, &route).and_then(|login| { + let preview = login_mode(tool, &config, &route).and_then(|login| { harness::preview(tool, &files, &self.config.server_url, &route.id, login) }); Ok(Reply { @@ -284,7 +277,7 @@ impl Controller { let account = account_path(tool, account.as_deref())?; let config = self.routes()?; let route = current_route(&config, &route, Some(&id))?; - let login = login_mode(tool, &self.config, &route)?; + let login = login_mode(tool, &config, &route)?; harness::install( tool, &accounts::config_paths(tool, account.as_deref()), @@ -312,7 +305,7 @@ impl Controller { let account = account_path(tool, account.as_deref())?; let config = self.routes()?; let route = current_route(&config, &route, Some(&id))?; - let login = login_mode(tool, &self.config, &route)?; + let login = login_mode(tool, &config, &route)?; sessions::launch( tool, &PathBuf::from(project), @@ -362,19 +355,12 @@ fn account_path(tool: Harness, name: Option<&str>) -> Result, St } fn login_mode( tool: Harness, - settings: &Config, + config: &ServerConfig, route: &crate::server_config::Route, ) -> Result { - let text = std::fs::read_to_string(&settings.config_file).map_err(|e| e.to_string())?; - let config = ServerConfig::parse(&text)?; let clients = config.clients(); let choices = config.choices(&route.key); - if choices.is_empty() - || !config - .routes() - .iter() - .any(|current| current.key == route.key && current.id == route.id) - { + if choices.is_empty() { return Err( "This route cannot be installed by the app. Choose a route with models.".into(), ); @@ -634,6 +620,47 @@ mod tests { generation + 1 ); } + #[test] + fn invalid_route_choices_reject_before_saving_or_restarting() { + let dir = tempfile::tempdir().expect("directory"); + let settings = dir.path().join("settings.toml"); + let config = dir.path().join("server.toml"); + let original = "[llm_clients.c]\nbase_url='http://localhost:1234'\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n"; + std::fs::write(&config, original).expect("config"); + std::fs::write(&settings, format!("config_file={config:?}")).expect("settings"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + for (choices, expected) in [ + (vec![], "passthrough needs 1 models, not 0."), + ( + vec![Choice { + client: "c".into(), + model: " ".into(), + }], + "Pick a model for Model.", + ), + ( + vec![Choice { + client: "unknown".into(), + model: "model".into(), + }], + "The config has no LLM client named \"unknown\".", + ), + ] { + let error = controller + .dispatch(Action::Apply { + generation: 0, + route: "r".into(), + algorithm: "passthrough".into(), + choices, + }) + .err() + .expect("rejection"); + assert_eq!(error, expected); + assert_eq!(std::fs::read_to_string(&config).expect("config"), original); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 2); + } + } + #[test] fn rejected_install_has_no_writes() { let dir = tempfile::tempdir().expect("directory"); diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs index 2d85f82aeb..c49f1a53fe 100644 --- a/crates/switchyard-menubar/src/harness.rs +++ b/crates/switchyard-menubar/src/harness.rs @@ -236,23 +236,35 @@ fn codex_settings(text: &str, root: &str, model: &str, login: bool) -> Result Result { let mut doc = object(text)?; let env = map(&mut doc, "env")?; - env["ANTHROPIC_BASE_URL"] = json!(root); - env["ANTHROPIC_MODEL"] = json!(model); - // All model roles use the selected public route, including subagents. - for key in [ + let role_models = [ "ANTHROPIC_DEFAULT_OPUS_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL", - ] { + ]; + // The complete installation signature distinguishes our placeholder from a user credential. + let prior_switchyard = env["ANTHROPIC_BASE_URL"].as_str() == Some(root) + && env["ANTHROPIC_AUTH_TOKEN"].as_str() == Some("switchyard-local") + && env["ANTHROPIC_API_KEY"].as_str() == Some("") + && env["ANTHROPIC_MODEL"] + .as_str() + .is_some_and(|model| !model.is_empty()) + && role_models + .iter() + .all(|key| env[*key] == env["ANTHROPIC_MODEL"]); + env["ANTHROPIC_BASE_URL"] = json!(root); + env["ANTHROPIC_MODEL"] = json!(model); + // All model roles use the selected public route, including subagents. + for key in role_models { env[key] = json!(model); } if login { + if prior_switchyard { + let values = env.as_object_mut().ok_or("env must be a JSON object.")?; + values.remove("ANTHROPIC_AUTH_TOKEN"); + values.remove("ANTHROPIC_API_KEY"); + } for key in ["ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY"] { - if env - .get(key) - .and_then(Value::as_str) - .is_some_and(|s| !s.is_empty()) - { + if env.get(key).is_some_and(|value| value.as_str() != Some("")) { return Err(format!( "{key} overrides subscription login. Remove it from Claude settings before installing this route." )); @@ -336,6 +348,11 @@ pub fn install( login: bool, ) -> Result { let root = validate(tool, root, model, login)?; + for path in files { + if read_file(&restore_pending_path(path))?.is_some() { + return Err("A previous restore did not finish retiring its backups. Retry Restore before installing another route.".into()); + } + } let originals = files .iter() .map(|p| read_file(p)) @@ -348,18 +365,13 @@ pub fn install( if read_file(&backup)?.is_some() || read_file(&absent)?.is_some() { continue; } - match before { - Some(text) => { - prepare(&backup, text)? - .persist_noclobber(&backup) - .map_err(|e| e.to_string())?; - } - None => { - prepare(&absent, "")? - .persist_noclobber(&absent) - .map_err(|e| e.to_string())?; - } - } + let (destination, text) = match before { + Some(text) => (&backup, text.as_str()), + None => (&absent, ""), + }; + prepare(destination, text)? + .persist_noclobber(destination) + .map_err(|e| e.to_string())?; } replace(files, &originals, &incoming)?; Ok("Saved the Switchyard settings and kept the original backup. Restart the coding tool. For Codex CLI, use codex -p sy. Pi can reload models with /model. Project settings and shell variables can override these user defaults.".into()) @@ -378,20 +390,38 @@ fn absent_path(path: &Path) -> PathBuf { backup_path(path).with_extension("switchyard-original-missing") } +fn restore_pending_path(path: &Path) -> PathBuf { + backup_path(path).with_extension("switchyard-restore-pending") +} + +// Restore receipts keep the original contents or absence available until backup cleanup finishes. pub fn restore(files: &[PathBuf]) -> Result { + let pending = files + .iter() + .map(|path| read_file(&restore_pending_path(path))) + .collect::, _>>()?; + let resuming = pending.iter().any(Option::is_some); let mut restored = Vec::new(); - for path in files { + for (path, pending) in files.iter().zip(pending) { let original = read_file(&backup_path(path))?; let absent = read_file(&absent_path(path))?.is_some(); - if original.is_none() && !absent { - return Err("No original backup is available for this installation.".into()); - } + let original = match pending { + Some(text) => serde_json::from_str::>(&text) + .map_err(|e| format!("Read pending restore: {e}"))?, + // A cleared receipt means this file finished restoring; retry preserves later user edits. + None if original.is_none() && !absent && resuming => read_file(path)?, + None if original.is_none() && !absent => { + return Err("No original backup is available for this installation.".into()); + } + None => original, + }; restored.push(original); } let current = files .iter() .map(|p| read_file(p)) .collect::, _>>()?; + let mut kept_paths = Vec::new(); for (path, before) in files.iter().zip(¤t) { let Some(before) = before else { continue; @@ -404,10 +434,46 @@ pub fn restore(files: &[PathBuf]) -> Result { .write_all(before.as_bytes()) .map_err(|e| e.to_string())?; let (_, kept) = recovery.keep().map_err(|e| e.to_string())?; - eprintln!("Saved the previous settings at {}", kept.display()); + kept_paths.push(kept.display().to_string()); + } + // Each private receipt stores the original contents or absence and blocks installation during cleanup. + for (path, original) in files.iter().zip(&restored) { + let pending = restore_pending_path(path); + if read_file(&pending)?.is_none() { + let text = serde_json::to_string(original).map_err(|e| e.to_string())?; + prepare(&pending, &text)? + .persist_noclobber(&pending) + .map_err(|e| e.to_string())?; + } } - replace(files, ¤t, &restored)?; - Ok("Restored original settings. Restart the coding tool.".into()) + let recovery = format!("Previous settings: {}", kept_paths.join(", ")); + replace(files, ¤t, &restored).map_err(|error| format!("{error}. {recovery}"))?; + for path in files { + for retired in [backup_path(path), absent_path(path)] { + match std::fs::remove_file(&retired) { + Ok(()) => {} + Err(error) if error.kind() == std::io::ErrorKind::NotFound => {} + Err(error) => { + return Err(format!( + "Restored settings, but could not retire {}: {error}. Retry Restore before installing another route. {recovery}", + retired.display() + )); + } + } + } + } + for path in files { + let pending = restore_pending_path(path); + std::fs::remove_file(&pending).map_err(|error| { + format!( + "Restored settings, but could not clear {}: {error}. {recovery}", + pending.display() + ) + })?; + } + Ok(format!( + "Restored original settings. Restart the coding tool. {recovery}" + )) } fn prepare(path: &Path, text: &str) -> Result { @@ -596,6 +662,170 @@ mod tests { assert_eq!(read(&files[0]).expect("restored"), original); } } + #[test] + fn repeated_install_restore_cycles_capture_new_user_settings() { + for present in [false, true] { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("settings.json"); + let files = std::slice::from_ref(&path); + if present { + std::fs::write(&path, "{\"original\":true}").expect("original"); + } + install( + Harness::Claude, + files, + "http://localhost:4123", + "route", + false, + ) + .expect("install"); + let message = restore(files).expect("restore"); + assert!(message.contains("switchyard-before-restore-")); + assert_eq!(path.exists(), present); + assert!(!backup_path(&path).exists()); + assert!(!absent_path(&path).exists()); + std::fs::write(&path, "{\"new_user_setting\":true}").expect("user edit"); + install( + Harness::Claude, + files, + "http://localhost:4123", + "another", + false, + ) + .expect("reinstall"); + restore(files).expect("second restore"); + assert_eq!( + read(&path).expect("settings"), + "{\"new_user_setting\":true}" + ); + } + } + + #[test] + fn a_pending_restore_blocks_install_and_retires_stale_backups_on_retry() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("settings.json"); + let files = std::slice::from_ref(&path); + std::fs::write(&path, "{}").expect("settings"); + install( + Harness::Claude, + files, + "http://localhost:4123", + "api", + false, + ) + .expect("install"); + let pending = restore_pending_path(&path); + std::fs::write( + &pending, + serde_json::to_string(&Some("{}".to_string())).expect("receipt"), + ) + .expect("pending retirement"); + let installed = read(&path).expect("installed"); + assert!( + install( + Harness::Claude, + files, + "http://localhost:4123", + "another", + false + ) + .is_err() + ); + assert_eq!(read(&path).expect("unchanged"), installed); + // The backup was already retired, so retry uses the saved restoration receipt. + std::fs::remove_file(backup_path(&path)).expect("retired backup"); + restore(files).expect("retry restore"); + assert_eq!(read(&path).expect("restored"), "{}"); + assert!(!pending.exists()); + } + + // Pi cleanup can stop between files; retry must keep edits to a file that already finished. + #[test] + fn pi_restore_retry_preserves_a_file_whose_receipt_was_already_cleared() { + let dir = tempfile::tempdir().expect("directory"); + let files = vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ]; + for path in &files { + std::fs::write(path, "{}").expect("original"); + } + install(Harness::Pi, &files, "http://localhost:4123", "route", false).expect("install"); + for path in &files { + std::fs::remove_file(backup_path(path)).expect("retired backup"); + std::fs::write(path, "{}").expect("restored settings"); + } + std::fs::write(&files[0], "{\"user_edit\":true}").expect("edit after restore"); + std::fs::write(restore_pending_path(&files[1]), r#""{}""#).expect("remaining receipt"); + restore(&files).expect("retry cleanup"); + assert_eq!(read(&files[0]).expect("first file"), "{\"user_edit\":true}"); + assert_eq!(read(&files[1]).expect("second file"), "{}"); + assert!( + files + .iter() + .all(|path| !restore_pending_path(path).exists()) + ); + } + + #[test] + fn subscription_install_removes_only_switchyard_credentials() { + let dir = tempfile::tempdir().expect("directory"); + let path = dir.path().join("settings.json"); + let files = std::slice::from_ref(&path); + std::fs::write(&path, "{}").expect("settings"); + install( + Harness::Claude, + files, + "http://localhost:4123", + "api-route", + false, + ) + .expect("API install"); + install( + Harness::Claude, + files, + "http://localhost:4123", + "subscription", + true, + ) + .expect("subscription install"); + let doc = object(&read(&path).expect("settings")).expect("JSON"); + assert!(doc["env"].get("ANTHROPIC_AUTH_TOKEN").is_none()); + assert!(doc["env"].get("ANTHROPIC_API_KEY").is_none()); + assert_eq!(doc["env"]["ANTHROPIC_MODEL"], "subscription"); + for key in ["ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY"] { + for value in [ + json!("user-secret"), + json!("switchyard-local"), + json!(null), + json!(false), + json!(123), + json!([]), + json!({}), + ] { + let original = json!({"env":{key:value}}).to_string(); + std::fs::write(&path, &original).expect("settings"); + let before = std::fs::read_dir(dir.path()).expect("files").count(); + assert!( + install( + Harness::Claude, + files, + "http://localhost:4123", + "subscription", + true + ) + .is_err() + ); + assert_eq!(read(&path).expect("unchanged"), original); + assert_eq!( + std::fs::read_dir(dir.path()).expect("files").count(), + before + ); + } + } + } + #[test] fn invalid_inputs_change_no_files() { let dir = tempfile::tempdir().expect("directory"); @@ -709,7 +939,7 @@ mod tests { install(Harness::Pi, &files, "http://localhost:4123", "other", false).expect("refresh"); restore(&files).expect("restore"); assert!(files.iter().all(|path| !path.exists())); - assert!(files.iter().all(|path| absent_path(path).is_file())); + assert!(files.iter().all(|path| !absent_path(path).exists())); } #[test] @@ -771,6 +1001,7 @@ mod tests { std::fs::write(&target, "private").expect("target"); std::os::unix::fs::symlink(&target, &files[1]).expect("symlink"); assert!(restore(&files).is_err()); + assert!(files.iter().all(|path| backup_path(path).is_file())); assert_eq!(read(&files[0]).expect("read"), before); assert_eq!(std::fs::read_to_string(target).expect("target"), "private"); } diff --git a/crates/switchyard-menubar/src/models.rs b/crates/switchyard-menubar/src/models.rs index 082ac6867f..2c67662232 100644 --- a/crates/switchyard-menubar/src/models.rs +++ b/crates/switchyard-menubar/src/models.rs @@ -160,13 +160,14 @@ type SavedKeys = Mutex, String>>>; /// [`ListError::NotCached`], and the file keeps its old list. When a fetch /// fails, the cached list comes back with the error. /// -/// `typed_key` is a key the user just entered. When it is set, clients that -/// send a key use it instead of their environment variable or the Keychain. +/// `typed_key` contains the selected `base_url` and the key the user entered. +/// Clients with that exact URL use the key instead of their environment variable +/// or the Keychain when they require authentication. Other URLs keep their own credentials. pub fn load( cache: &Path, clients: &[Client], refresh: bool, - typed_key: Option<&str>, + typed_key: Option<(&str, &str)>, loaded: &(dyn Fn(&Loaded) + Sync), ) -> Vec { let cached = read_cache(cache); @@ -178,6 +179,9 @@ pub fn load( let old = cached.get(&url).cloned(); let saved_keys = &saved_keys; scope.spawn(move || { + let typed_key = typed_key + .filter(|(base_url, _)| *base_url == client.base_url) + .map(|(_, key)| key); let entry = load_url(cache, url, client, old, refresh, typed_key, saved_keys); loaded(&entry); entry @@ -532,9 +536,13 @@ fn fetch(url: &str, format: &str, key: Option<&str>) -> Result, List (Some(key), _) => format!("Authorization: Bearer {key}\n"), (None, _) => String::new(), }; - stdin - .write_all(headers.as_bytes()) - .map_err(|error| failed(format!("send headers to curl: {error}")))?; + let sent = stdin.write_all(headers.as_bytes()); + drop(stdin); + if let Err(error) = sent { + let _ = child.kill(); + let _ = child.wait(); + return Err(failed(format!("send headers to curl: {error}"))); + } } let output = child .wait_with_output() @@ -579,27 +587,39 @@ fn parse_ids(body: &str) -> Result, String> { mod tests { use super::*; use std::io::{BufRead, BufReader}; - use std::net::TcpListener; - use std::sync::Arc; + use std::net::{SocketAddr, TcpListener, TcpStream}; + use std::sync::{ + Arc, + atomic::{AtomicBool, Ordering}, + }; - /// Server returns the configured response and records each request header. - /// Its thread waits in `accept` until the test process exits. + /// Stub returns the configured response and records each request header. + /// Drop wakes its listener and joins the worker so a failed assertion cannot leave it running. struct Stub { /// This field sets the client base URL used to list models from this server. url: String, response: Arc>, requests: Arc>>>, + address: SocketAddr, + stopping: Arc, + worker: Option>, } impl Stub { fn start(response: String) -> Self { let listener = TcpListener::bind("127.0.0.1:0").expect("bind"); - let url = format!("http://{}/v1", listener.local_addr().expect("addr")); + let address = listener.local_addr().expect("addr"); + let url = format!("http://{address}/v1"); let response = Arc::new(Mutex::new(response)); let requests = Arc::new(Mutex::new(Vec::new())); + let stopping = Arc::new(AtomicBool::new(false)); + let stop = Arc::clone(&stopping); let (answer, record) = (Arc::clone(&response), Arc::clone(&requests)); - std::thread::spawn(move || { + let worker = std::thread::spawn(move || { for mut stream in listener.incoming().map_while(Result::ok) { + if stop.load(Ordering::Acquire) { + break; + } let mut head = Vec::new(); let mut reader = BufReader::new(stream.try_clone().expect("clone stream")); let mut line = String::new(); @@ -616,6 +636,9 @@ mod tests { url, response, requests, + address, + stopping, + worker: Some(worker), } } @@ -628,6 +651,16 @@ mod tests { } } + impl Drop for Stub { + fn drop(&mut self) { + self.stopping.store(true, Ordering::Release); + let _ = TcpStream::connect(self.address); + if let Some(worker) = self.worker.take() { + let _ = worker.join(); + } + } + } + fn listing(models: &[&str]) -> String { let data: Vec<_> = models .iter() @@ -657,6 +690,57 @@ mod tests { .collect() } + // The subprocess isolates PATH; its curl fixture exits before reading the oversized header. + #[cfg(unix)] + #[test] + fn failed_header_write_reaps_the_curl_process() { + use std::os::unix::fs::PermissionsExt; + if let Ok(record) = std::env::var("SWITCHYARD_CURL_FIXTURE") { + let error = fetch( + "http://localhost/models", + "openai_chat", + Some(&"k".repeat(1024 * 1024)), + ) + .expect_err("header write fails"); + assert!( + matches!(error, ListError::Failed(message) if message.starts_with("send headers to curl:")) + ); + let pid = std::fs::read_to_string(record).expect("curl PID"); + assert!( + !Command::new("/bin/kill") + .args(["-0", pid.trim()]) + .status() + .expect("process status") + .success() + ); + return; + } + let dir = tempfile::tempdir().expect("fixture"); + let record = dir.path().join("pid"); + let curl = dir.path().join("curl"); + std::fs::write( + &curl, + "#!/bin/sh\nprintf '%s' \"$$\" > \"$SWITCHYARD_CURL_FIXTURE\"\nexit 1\n", + ) + .expect("curl fixture"); + std::fs::set_permissions(&curl, std::fs::Permissions::from_mode(0o700)) + .expect("permissions"); + let output = Command::new(std::env::current_exe().expect("runner")) + .args([ + "--exact", + "models::tests::failed_header_write_reaps_the_curl_process", + ]) + .env("SWITCHYARD_CURL_FIXTURE", &record) + .env("PATH", dir.path()) + .output() + .expect("child"); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stdout) + ); + } + #[test] fn fetches_a_missing_list_once_and_then_uses_the_cached_list() { let stub = Stub::start(listing(&["model-b", "model-a"])); @@ -668,7 +752,13 @@ mod tests { client("gateway_chat", "openai_chat", &stub.url), ]; - let first = load(&cache, &clients, false, Some("test-key"), &|_| {}); + let first = load( + &cache, + &clients, + false, + Some((&stub.url, "test-key")), + &|_| {}, + ); // A cached list needs neither a request nor a key. let second = load(&cache, &clients, false, None, &|_| {}); @@ -688,16 +778,69 @@ mod tests { assert!(!text.contains("test-key"), "the cache holds no key: {text}"); } + #[test] + fn entered_key_is_sent_only_to_its_selected_base_url() { + let selected = Stub::start(listing(&["selected"])); + let unrelated = Stub::start(listing(&["unrelated"])); + let unauthenticated = Stub::start(listing(&["public"])); + let dir = tempfile::tempdir().expect("fixture"); + let clients = [ + client("selected", "openai_chat", &selected.url), + Client { + api_key_env: Some("SWITCHYARD_MENUBAR_TEST_UNSET_KEY".into()), + ..client("unrelated", "openai_chat", &unrelated.url) + }, + Client { + forward_auth: false, + ..client("public", "openai_chat", &unauthenticated.url) + }, + ]; + let loaded = load( + &dir.path().join(CACHE_FILE), + &clients, + true, + Some((&selected.url, "selected-secret")), + &|_| {}, + ); + assert_eq!(loaded[0].error, None); + assert_eq!(selected.requests().len(), 1); + assert!(selected.requests()[0].contains(&"Authorization: Bearer selected-secret".into())); + assert_eq!( + loaded[1].error, + Some(ListError::NoEnv("SWITCHYARD_MENUBAR_TEST_UNSET_KEY".into())) + ); + assert!(unrelated.requests().is_empty()); + assert_eq!(loaded[2].error, None); + assert_eq!(unauthenticated.requests().len(), 1); + assert!( + unauthenticated.requests()[0] + .iter() + .all(|header| !header.starts_with("Authorization:")) + ); + } + #[test] fn refresh_fetches_again_and_replaces_the_cached_list() { let stub = Stub::start(listing(&["old-model"])); let dir = tempfile::tempdir().expect("tempdir"); let cache = dir.path().join(CACHE_FILE); let clients = [client("gateway", "openai_chat", &stub.url)]; - load(&cache, &clients, false, Some("test-key"), &|_| {}); + load( + &cache, + &clients, + false, + Some((&stub.url, "test-key")), + &|_| {}, + ); stub.answer(listing(&["new-model"])); - let refreshed = load(&cache, &clients, true, Some("test-key"), &|_| {}); + let refreshed = load( + &cache, + &clients, + true, + Some((&stub.url, "test-key")), + &|_| {}, + ); let later = load(&cache, &clients, false, None, &|_| {}); assert_eq!(stub.requests().len(), 2); @@ -712,12 +855,24 @@ mod tests { let dir = tempfile::tempdir().expect("tempdir"); let cache = dir.path().join(CACHE_FILE); let clients = [client("gateway", "openai_chat", &stub.url)]; - let first = load(&cache, &clients, false, Some("test-key"), &|_| {}); + let first = load( + &cache, + &clients, + false, + Some((&stub.url, "test-key")), + &|_| {}, + ); stub.answer( "HTTP/1.1 500 Internal Server Error\r\nConnection: close\r\n\r\n{}".to_string(), ); - let refreshed = load(&cache, &clients, true, Some("test-key"), &|_| {}); + let refreshed = load( + &cache, + &clients, + true, + Some((&stub.url, "test-key")), + &|_| {}, + ); let later = load(&cache, &clients, false, None, &|_| {}); assert_eq!(stub.requests().len(), 2); @@ -748,7 +903,7 @@ mod tests { &dir.path().join(CACHE_FILE), &clients, false, - Some("test-key"), + Some((&stub.url, "test-key")), &|_| {}, ); @@ -770,7 +925,13 @@ mod tests { let cache = dir.path().join("missing").join(CACHE_FILE); let clients = [client("gateway", "openai_chat", &stub.url)]; - let loaded = load(&cache, &clients, false, Some("test-key"), &|_| {}); + let loaded = load( + &cache, + &clients, + false, + Some((&stub.url, "test-key")), + &|_| {}, + ); assert_eq!(models(&loaded), ["model-a"]); assert!( diff --git a/crates/switchyard-menubar/src/server.rs b/crates/switchyard-menubar/src/server.rs index 58933ab58e..b39be43bd0 100644 --- a/crates/switchyard-menubar/src/server.rs +++ b/crates/switchyard-menubar/src/server.rs @@ -279,6 +279,31 @@ pub fn command(program: &str, args: &[&str]) -> Result { Ok(String::from_utf8_lossy(&output.stdout).into_owned()) } +// This function saves the script before opening Terminal so a save error cannot launch it. +// If open fails, this function attempts cleanup; callers supply scripts that remove themselves on startup. +pub fn open_terminal_script(prefix: &str, text: &str) -> Result<(), String> { + let mut script = tempfile::Builder::new() + .prefix(prefix) + .suffix(".command") + .tempfile() + .map_err(|e| e.to_string())?; + writeln!(script, "{text}").map_err(|e| e.to_string())?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + script + .as_file() + .set_permissions(std::fs::Permissions::from_mode(0o700)) + .map_err(|e| e.to_string())?; + } + let (_, path) = script.keep().map_err(|e| e.to_string())?; + if let Err(error) = command("open", &[&path.display().to_string()]) { + let _ = std::fs::remove_file(path); + return Err(error); + } + Ok(()) +} + #[cfg(test)] mod tests { use super::*; @@ -419,6 +444,41 @@ mod tests { assert_eq!(std::fs::read_to_string(&real).expect("read"), "new"); } + // The subprocess isolates PATH and makes Terminal reject the script without opening an app. + #[test] + fn a_rejected_terminal_launch_removes_the_kept_script() { + if let Ok(record) = std::env::var("SWITCHYARD_TERMINAL_FIXTURE") { + assert!(open_terminal_script("switchyard-terminal-fixture-", "#!/bin/bash").is_err()); + let path = std::fs::read_to_string(record).expect("script path"); + assert!(!Path::new(path.trim()).exists()); + return; + } + let dir = tempfile::tempdir().expect("fixture"); + let record = dir.path().join("script-path"); + let open = dir.path().join("open"); + std::fs::write( + &open, + "#!/bin/bash\nprintf '%s' \"$1\" > \"$SWITCHYARD_TERMINAL_FIXTURE\"\nexit 1\n", + ) + .expect("Terminal stub"); + std::fs::set_permissions(&open, std::fs::Permissions::from_mode(0o700)) + .expect("permissions"); + let output = Command::new(std::env::current_exe().expect("runner")) + .args([ + "--exact", + "server::tests::a_rejected_terminal_launch_removes_the_kept_script", + ]) + .env("SWITCHYARD_TERMINAL_FIXTURE", &record) + .env("PATH", dir.path()) + .output() + .expect("child"); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stdout) + ); + } + #[test] fn reports_which_command_failed() { let error = command("switchyard-does-not-exist", &[]).expect_err("missing program"); diff --git a/crates/switchyard-menubar/src/sessions.rs b/crates/switchyard-menubar/src/sessions.rs index 3032f40cbc..231d49b6f3 100644 --- a/crates/switchyard-menubar/src/sessions.rs +++ b/crates/switchyard-menubar/src/sessions.rs @@ -4,7 +4,6 @@ //! This module starts CLI sessions with separate worktrees and model settings. use crate::harness::{self, Harness}; -use std::io::Write; use std::path::Path; // PendingSession attempts cleanup until open accepts the launch request. @@ -153,23 +152,12 @@ pub fn launch( } else { "" }; - let mut script = tempfile::Builder::new() - .prefix("switchyard-session-") - .suffix(".command") - .tempfile() - .map_err(|e| e.to_string())?; - writeln!(script,"#!/bin/bash\nexport PATH=\"$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH\"\nrm -- \"$0\"\ncd {} || exit 1\n{account_env}{subscription_env}{command}",quote(&worktree.display().to_string())).map_err(|e|e.to_string())?; - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - script - .as_file() - .set_permissions(std::fs::Permissions::from_mode(0o700)) - .map_err(|e| e.to_string())?; - } - crate::server::command("open", &[&script.path().display().to_string()])?; + let script = format!( + "#!/bin/bash\nexport PATH=\"$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH\"\nrm -- \"$0\"\ncd {} || exit 1\n{account_env}{subscription_env}{command}", + quote(&worktree.display().to_string()) + ); + crate::server::open_terminal_script("switchyard-session-", &script)?; pending.opened = true; - let _ = script.keep().map_err(|e| e.to_string())?; Ok(format!( "Opened a new session in Terminal.\nWorktree: {}\nBranch: {id}\nModel route: {model}\nRemove the worktree with git worktree remove after saving or discarding its changes.\nPi supplies session/turn IDs only when its integration sends them; unidentified calls remain visible in All sessions.", worktree.display() diff --git a/crates/switchyard-menubar/ui/app.js b/crates/switchyard-menubar/ui/app.js index 1345be69a8..e96691284e 100644 --- a/crates/switchyard-menubar/ui/app.js +++ b/crates/switchyard-menubar/ui/app.js @@ -5,7 +5,7 @@ const invoke = window.__TAURI__.core.invoke; const content = document.querySelector('#content'); const status = document.querySelector('#status'); let snapshot, page = 'overview', busy = false; -let previewQueue = Promise.resolve(); +let operationQueue = Promise.resolve(); const drafts = new Map(), lists = new Map(); const usageView = {session:'',search:''}; function node(tag, text, cls) { const n = document.createElement(tag); if (text !== undefined) n.textContent = text; if (cls) n.className = cls; return n; } @@ -17,6 +17,13 @@ function input(value = '', type = 'text') { const i = node('input'); i.type = ty function text(parent, value) { parent.append(node('pre', value)); } function actions(parent) { const a = node('div', undefined, 'actions'); parent.append(a); return a; } function setBusy(value) { busy = value; document.querySelectorAll('button,input,select').forEach(n => n.disabled = value || n.dataset.blocked === 'true'); } +// Route editors and install previews share a queue because the controller runs one operation at a time. +function enqueue(operation) { + operationQueue = operationQueue.then(async () => { + while (busy) await new Promise(resolve => setTimeout(resolve, 30)); + await operation(); + }).catch(error => { status.textContent = String(error); }); +} // Successful editor loading keeps the saved-route and restart result visible. async function run(action, refresh = true) { if (busy) return; @@ -73,7 +80,7 @@ function render() { } else if (page==='install') { const intro=card('Connect your coding tools'); intro.append(node('p','Choose a Switchyard route for each coding tool, review the settings below, then install the route.')); - intro.append(node('p','Subscription routes reuse the coding tool’s login. API routes use credentials configured on the Switchyard server. You can edit endpoint keys in Routes.')); + intro.append(node('p','Subscription routes reuse the coding tool’s login. API routes use credentials configured on the Switchyard server. Configure API credentials on the server. Keys entered in Routes only load model lists.')); intro.append(node('p','Installation backs up the original user settings. Shell variables and project settings may override these defaults.','muted')); for(const tool of snapshot.tools) renderInstall(tool); renderAccounts(); @@ -143,8 +150,7 @@ function renderInstall(tool) { proposed.textContent='Loading preview…';authentication.textContent=''; const chosen=snapshot.routes.find(r=>r.key===route.value); routing.textContent=chosen?`${snapshot.algorithms.find(a=>a.kind===chosen.kind)?.title || chosen.kind}: ${chosen.choices.map(c=>c.model).join(' → ')}`:''; - previewQueue=previewQueue.then(async()=>{ - while(busy)await new Promise(resolve=>setTimeout(resolve,30)); + enqueue(async()=>{ if(!c.isConnected||requested!==revision)return; if(!route.value){proposed.textContent='Add a route in the server config first.';return;} current.textContent='Loading preview…'; @@ -209,7 +215,7 @@ function renderRoute(route) { button(a,'Save and restart',async()=>{saveChoices();const result=await run({kind:'apply',generation,route:route.key,algorithm:draft.algorithm,choices:draft.choices});if(result){drafts.delete(route.key);render();}},true); button(a,'Discard changes',()=>{drafts.delete(route.key);render();}); // Each route waits for the shared operation to finish before loading its editor roles. - const setup=async()=>{while(busy)await new Promise(resolve=>setTimeout(resolve,30));if(page==='routes'&&c.isConnected)await draw();};setup(); + enqueue(async()=>{if(page==='routes'&&c.isConnected)await draw();}); } document.querySelectorAll('[data-page]').forEach(b=>b.onclick=()=>{page=b.dataset.page;render();}); document.querySelector('#refresh').onclick=refresh; diff --git a/tests/test_macos_install.py b/tests/test_macos_install.py index 5878014c50..bc65617309 100644 --- a/tests/test_macos_install.py +++ b/tests/test_macos_install.py @@ -63,10 +63,6 @@ def run(setup, script): ) -def read_config(path): - return path.read_text() - - def test_install_escapes_switchyard_path_in_launch_agent(setup): _, home, switchyard_home, _ = setup result = run(setup, "install.sh") @@ -101,10 +97,10 @@ def test_missing_codex_config_creates_only_standalone_profile(setup): result = run(setup, "install.sh") assert result.returncode == 0, result.stderr codex = home / ".codex" - expected = read_config(REPO / "scripts" / "config" / "codex.sy.toml").replace( - "@SY_PORT@", "4123" + expected = ( + (REPO / "scripts" / "config" / "codex.sy.toml").read_text().replace("@SY_PORT@", "4123") ) - assert read_config(codex / "sy.config.toml") == expected + assert (codex / "sy.config.toml").read_text() == expected assert {path.name for path in codex.iterdir()} == {"sy.config.toml"} @@ -141,7 +137,9 @@ def test_reinstall_backs_up_profile_and_keeps_user_settings(setup): result = run(setup, "install.sh") assert result.returncode == 0, result.stderr profile = Path(env["CODEX_HOME"]) / "sy.config.toml" - original = profile.read_text() + # Older installs used this route ID; reinstall must update the profile and back it up. + original = profile.read_text().replace("composite-gpt-6-sol-gpt-6-luna", "switchyard") + profile.write_text(original) server_config = switchyard_home / "composite.toml" menu_settings = switchyard_home / "menubar.toml" server_config.write_text("user server settings\n") @@ -152,6 +150,7 @@ def test_reinstall_backs_up_profile_and_keeps_user_settings(setup): assert result.returncode == 0, result.stderr assert "127.0.0.1:5000/v1" in profile.read_text() + assert tomllib.loads(profile.read_text())["model"] == "composite-gpt-6-sol-gpt-6-luna" backups = list(profile.parent.glob("sy.config.toml.switchyard-backup.*")) assert len(backups) == 1 assert backups[0].read_text() == original @@ -162,19 +161,17 @@ def test_reinstall_backs_up_profile_and_keeps_user_settings(setup): @pytest.mark.parametrize( "provider_header", [ - "[model_providers.\"sy\"]", + '[model_providers."sy"]', "[model_providers . 'sy']", '[ "model_providers" . "sy" ]', ], ) -def test_existing_codex_config_is_preserved_and_shared_templates_are_used( - setup, provider_header -): +def test_existing_codex_config_is_preserved_and_shared_templates_are_used(setup, provider_header): _, home, switchyard_home, env = setup codex = Path(env["CODEX_HOME"]) codex.mkdir() config = codex / "config.toml" - original = f'''theme = "dark" + original = f"""theme = "dark" {provider_header} # old provider name = "Old" @@ -182,26 +179,26 @@ def test_existing_codex_config_is_preserved_and_shared_templates_are_used( [other] model_provider = "sy" -''' +""" config.write_text(original) result = run(setup, "install.sh") assert result.returncode == 0, result.stderr - assert read_config(config) == original - profile = read_config(codex / "sy.config.toml") - expected = read_config(REPO / "scripts" / "config" / "codex.sy.toml").replace( - "@SY_PORT@", "4123" + assert config.read_text() == original + profile = (codex / "sy.config.toml").read_text() + expected = ( + (REPO / "scripts" / "config" / "codex.sy.toml").read_text().replace("@SY_PORT@", "4123") ) assert profile == expected assert tomllib.loads(profile)["model_providers"]["sy"]["name"] == "Switchyard" assert not (codex / "config.sy.toml").exists() - assert read_config(switchyard_home / "composite.toml") == read_config( + assert (switchyard_home / "composite.toml").read_text() == ( REPO / "scripts" / "config" / "composite.toml" - ) + ).read_text() assert not (codex / "config.toml.direct").exists() -@pytest.mark.parametrize("quote", ['"', "'"]) -def test_quoted_top_level_provider_keeps_existing_snapshot(setup, quote): +def test_existing_snapshot_and_routed_config_are_preserved(setup): + quote = "'" _, home, _, env = setup codex = Path(env["CODEX_HOME"]) codex.mkdir() @@ -222,7 +219,7 @@ def test_uninstall_preserves_routed_config_before_restoring_snapshot(setup): codex.mkdir() current = "model_provider = 'sy' # routed\nuser_setting = \"keep me\"\n" (codex / "config.toml").write_text(current) - (codex / "config.toml.direct").write_text("model = \"original\"\n") + (codex / "config.toml.direct").write_text('model = "original"\n') result = run(setup, "uninstall.sh") assert result.returncode == 0, result.stderr assert (codex / "config.toml").read_text() == 'model = "original"\n' @@ -286,13 +283,15 @@ def test_app_bundle_has_a_launcher_and_source_update_command(setup): contents = home / "Applications" / "Switchyard.app" / "Contents" root = ET.parse(contents / "Info.plist").getroot() entries = list(root.find("dict")) - values = {entries[i].text: entries[i+1] for i in range(0, len(entries), 2)} + values = {entries[i].text: entries[i + 1] for i in range(0, len(entries), 2)} assert values["CFBundleIdentifier"].text == "com.nvidia.switchyard" assert values["CFBundleExecutable"].text == "Switchyard" assert os.access(contents / "MacOS" / "Switchyard", os.X_OK) update = contents / "Resources" / "Update.command" assert os.access(update, os.X_OK) - home_line = next(line for line in update.read_text().splitlines() if line.startswith("export SY_HOME=")) + home_line = next( + line for line in update.read_text().splitlines() if line.startswith("export SY_HOME=") + ) assert shlex.split(home_line.split("=", 1)[1])[0] == str(switchyard_home) for path in [update, contents / "MacOS" / "Switchyard"]: assert subprocess.run(["bash", "-n", str(path)]).returncode == 0 @@ -305,9 +304,11 @@ def test_app_launcher_preserves_quotes_and_shell_metacharacters(setup): env["SY_HOME"] = str(switchyard_home) result = run(setup, "install.sh") assert result.returncode == 0, result.stderr - executable = home / "Applications" / "Switchyard.app" / "Contents" / "MacOS" / "switchyard-menubar" + executable = ( + home / "Applications" / "Switchyard.app" / "Contents" / "MacOS" / "switchyard-menubar" + ) output = home / "arguments" - executable.write_text('#!/bin/bash\nprintf "%s\\n" "$@" > ' + shlex.quote(str(output)) + '\n') + executable.write_text('#!/bin/bash\nprintf "%s\\n" "$@" > ' + shlex.quote(str(output)) + "\n") executable.chmod(0o755) launcher = executable.with_name("Switchyard") result = subprocess.run(["bash", str(launcher)], capture_output=True, text=True) @@ -331,7 +332,9 @@ def test_installer_builds_in_source_checkout_with_an_explicit_target_directory(s scripts, home, _, env = setup recorded = home / "build.txt" cargo = Path(env["PATH"].split(":")[0]) / "cargo" - cargo.write_text('#!/bin/bash\nprintf "%s\\n" "$PWD" "$@" > ' + shlex.quote(str(recorded)) + '\n') + cargo.write_text( + '#!/bin/bash\nprintf "%s\\n" "$PWD" "$@" > ' + shlex.quote(str(recorded)) + "\n" + ) cargo.chmod(0o755) env["CARGO_TARGET_DIR"] = str(home / "unrelated-target") result = run(setup, "install.sh") @@ -371,7 +374,9 @@ def test_invalid_profile_name_rejects_before_install(setup, name): assert not (home / "Applications").exists() -@pytest.mark.parametrize("model", ["", "model\nname", "model\rname", "model\x01name", "model\x7fname"]) +@pytest.mark.parametrize( + "model", ["", "model\nname", "model\rname", "model\x01name", "model\x7fname"] +) def test_invalid_model_rejects_before_install(setup, model): _, home, switchyard_home, env = setup env["SY_MODEL"] = model From 43ecf3fe62f7ad7d7c0536d5b287f2fff32612e1 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 11:14:28 -0700 Subject: [PATCH 08/39] feat(app): add searchable routes and installation diffs Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/README.md | 53 ++- crates/switchyard-menubar/src/controller.rs | 184 ++++++++-- crates/switchyard-menubar/src/gui.rs | 34 +- crates/switchyard-menubar/src/harness.rs | 222 +++++++++++- crates/switchyard-menubar/src/history.rs | 38 ++ crates/switchyard-menubar/src/server.rs | 23 +- .../switchyard-menubar/src/server_config.rs | 122 +++++++ crates/switchyard-menubar/src/tui.rs | 332 +++++++++++++++--- .../tests/frontend.test.cjs | 10 + crates/switchyard-menubar/ui/app.css | 38 +- crates/switchyard-menubar/ui/app.js | 168 ++++++--- crates/switchyard-menubar/ui/index.html | 4 +- 12 files changed, 1084 insertions(+), 144 deletions(-) diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index 2e59fc55dc..3de793874e 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -26,11 +26,16 @@ name and `SY_MODEL` to choose an existing public route ID. New installs use `SY_MODEL` to one of their routes when installing with a custom config. The profile leaves `approval_policy` and `sandbox_mode` to your existing Codex settings. Reinstalling backs up the profile before replacing changed contents. +`SY_PROFILE` must start with an ASCII letter or digit, use only ASCII letters, +digits, underscores, or hyphens, and contain at most 128 characters. For example, +the installer rejects `SY_PROFILE=team.dev` before creating app or config files. Open the app from Finder or Spotlight. Closing the window keeps the tray menu. -The tray includes **Install…**, daily and weekly usage previews, **View usage…**, -and **Settings…**. Clicking a usage preview opens Usage. Choose **Open Switchyard** -to return or **Quit Switchyard** to exit. The app rejects Quit while an operation is queued or running; try again after it finishes. +The tray includes **Install…**, daily and weekly usage previews, a graph of recent +calls by hour, **View usage…**, and **Settings…**. Clicking a usage preview or the +graph opens Usage. Choose **Open Switchyard** to return or **Quit Switchyard** to +exit. The app rejects Quit while an operation is queued or running; try again +after it finishes. **Settings → Update from source…** opens Terminal to rebuild and reinstall from the checkout used for this installation. It builds that checkout's current commit @@ -45,7 +50,12 @@ Run the terminal app with: cargo run -p switchyard-menubar -- --tui ``` -Tab changes sections. The footer lists navigation keys. In Routes, press `e` to +Tab changes sections. The footer lists navigation keys. In Routes, `/` searches +and the arrow keys select matching routes; `d` deletes a route only after you +type its name. In Install, `p` previews a diff, `x` selects a custom file, and `i` +shows the preview before a second `i` installs the route. Restore asks you to type +`RESTORE` before changing coding-tool settings. Changing the tool, +account, or route clears the preview. In Routes, press `e` to edit the algorithm and model roles. Tab changes form fields, Ctrl-U clears a field, Enter submits, and Escape cancels. The terminal restores its screen and input mode on exit. `--print` prints the usage summary without opening either @@ -53,13 +63,16 @@ app. `--tui` cannot be combined with `--print` or `--validate-toml`. ## Routes -Each route label shows its public model ID, algorithm, endpoint name, and model -choices. In **Routes**, choose an algorithm and enter the endpoint and model for -each role. **Refresh models** loads the endpoint's list; you can also type an +The route library searches public model IDs, algorithms, endpoints, and model +choices. Select a route to edit its algorithm and model roles. The app opens one +editor at a time, even when the config contains hundreds of routes. +**Refresh models** loads the endpoint's list; you can also type an unlisted model ID. ChatGPT's private Codex endpoint uses the saved Codex model list and configured targets. The app keeps drafts until **Save and restart** or -**Discard changes**. Refresh keeps drafts unless the settings select a different -server config file. +**Revert unsaved edits**. Reverting changes only resets the editor. **Delete route…** +removes the selected route after confirmation, preserves its targets and endpoint +settings, and uses the same validation, backup, and restart as saving. Refresh +keeps drafts unless the settings select a different server config file. **Save and restart** checks the complete edited file with the bundled server's `--dry-run`. It preserves comments and unrelated tables, saves a backup @@ -89,17 +102,22 @@ instead. ## Install coding-tool settings -**Install** shows one card for Codex CLI, Codex app, Claude Code, and Pi. -Choose a route to compare the current model, endpoint, and settings files with -the proposed settings. The preview changes no files. Click **Install route** -to save the settings. Codex CLI gets `sy.config.toml` for `codex -p sy`. The Codex app option changes the defaults -in `config.toml` for both the app and CLI. Claude Code gets environment settings -in `settings.json`. Pi gets a custom provider in `models.json` and defaults in +**Install** has one coding-tool selector for Codex CLI, Codex app, Claude Code, +and Pi. It shows whether the tool's binary was detected. Choose a route and +settings location to review a diff of the routing settings. Credential values +stay hidden. The preview changes no files. The install button names the selected +tool. An optional absolute file path selects settings in another location; for +Pi, choose `models.json`, and the app uses `settings.json` beside it. A custom +file cannot be combined with a saved account. + +Codex CLI gets `sy.config.toml` for `codex -p sy`. The Codex app option changes +the defaults in `config.toml` for both the app and CLI. Claude Code gets +environment settings in `settings.json`. Pi gets a custom provider in `models.json` and defaults in `settings.json`. Unrelated settings remain. The app backs up each original file as `.switchyard-original`. If a file did not exist, `.switchyard-original-missing` records its absence. -**Restore original settings** keeps a copy of the current file, then restores +**Restore backed-up settings…** keeps a copy of the current file, then restores the backup or removes a file that was originally absent. The result lists the recovery copies. A successful restore retires the original backup, so the next installation backs up your current settings. If backup cleanup fails, retry @@ -173,6 +191,9 @@ prompts. Recent history reads the last 8 MiB of the log plus one byte to check whether the first record is complete. It keeps at most 5,000 complete records and excludes partial records. Usage labels a limited view and counts unreadable records. +The hourly activity graphs count recent recorded calls from the past 24 hours +and exclude future timestamps. They use this bounded history, so they may omit +calls from a busy day. Overview totals use a separate incremental reader, so the history limit does not truncate weekly savings. Routing history stores no prompt or response text. Observed tokens do not report provider quotas, reset windows, or authoritative diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index 0fb7240f24..8e27cd2a81 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -4,7 +4,7 @@ //! Both frontends call these operations so validation stays independent of widgets. use crate::{ - accounts, app, + accounts, config::Config, harness::{self, Harness}, history, models, rollup, server, @@ -30,6 +30,11 @@ pub enum Action { algorithm: String, choices: Vec, }, + Remove { + generation: u64, + route: String, + id: String, + }, Models { client: String, refresh: bool, @@ -40,16 +45,19 @@ pub enum Action { account: Option, route: String, id: String, + settings_file: Option, }, Install { tool: Harness, account: Option, route: String, id: String, + settings_file: Option, }, Restore { tool: Harness, account: Option, + settings_file: Option, }, AddAccount { tool: Harness, @@ -119,7 +127,19 @@ impl Controller { } pub fn snapshot(&mut self) -> Result { self.reload()?; - let (_, summary) = app::refresh(&self.config, &mut self.reader); + let mut errors = Vec::new(); + let usage = self + .reader + .read(&self.config.routing_log, chrono::Local::now().date_naive()) + .unwrap_or_else(|error| { + errors.push(format!("Could not read usage: {error}")); + rollup::Usage::default() + }); + let server_status = crate::health::probe(&self.config.server_url); + let summary = crate::summary::build(server_status, &usage, &self.config); + let metrics = json!({"server_url":self.config.server_url,"running":server_status == crate::health::ServerStatus::Running, + "today":{"requests":usage.today.requests(),"tokens":usage.today.tokens()}, + "week":{"requests":usage.week.requests(),"tokens":usage.week.tokens()}}); let summary: Vec<_> = summary .into_iter() .map(|r| match r { @@ -127,7 +147,6 @@ impl Controller { Row::Separator => String::new(), }) .collect(); - let mut errors = Vec::new(); let mut routes = Vec::new(); let mut clients = Vec::new(); match self.routes() { @@ -152,15 +171,16 @@ impl Controller { errors.push(e); history::History::default() }); + let activity = history::hourly_calls(&history.entries, chrono::Utc::now()); let tools: Vec<_> = harness::HARNESSES.iter().map(|(tool,label)| { let accounts: Vec<_> = accounts::list(*tool).into_iter().map(|(name,_)| name).collect(); json!({"tool":tool,"label":label,"available":harness::binary(*tool).is_some(), - "status":harness::inspect(*tool,&harness::paths(*tool)).unwrap_or_else(|e| e),"accounts":accounts}) + "files":harness::paths(*tool),"status":harness::inspect(*tool,&harness::paths(*tool)).unwrap_or_else(|e| e),"accounts":accounts}) }).collect(); Ok( - json!({"generation":self.generation,"summary":summary,"routes":routes,"clients":clients,"tools":tools, + json!({"generation":self.generation,"summary":summary,"metrics":metrics,"routes":routes,"clients":clients,"tools":tools, "algorithms":ALGORITHMS.iter().map(|a|json!({"kind":a.kind,"title":a.title,"summary":a.summary})).collect::>(), - "sessions":history.sessions(),"entries":history.entries,"limited":history.limited,"skipped":history.skipped, + "activity":activity,"sessions":history.sessions(),"entries":history.entries,"limited":history.limited,"skipped":history.skipped, "errors":errors,"refresh_seconds":self.config.refresh_seconds.max(1)}), ) } @@ -195,6 +215,15 @@ impl Controller { let algorithm = algorithm_by_id(&algorithm)?; server::apply(&self.config, &route, algorithm, &choices).map(Reply::message) } + Action::Remove { + generation, + route, + id, + } => { + self.check_generation(generation)?; + current_route(&self.routes()?, &route, Some(&id))?; + server::remove(&self.config, &route, &id).map(Reply::message) + } Action::Models { client, refresh, @@ -253,11 +282,12 @@ impl Controller { account, route, id, + settings_file, } => { - let account = account_path(tool, account.as_deref())?; + let files = install_paths(tool, account.as_deref(), settings_file.as_deref())?; let config = self.routes()?; let route = current_route(&config, &route, Some(&id))?; - let files = accounts::config_paths(tool, account.as_deref()); + let current = harness::inspect(tool, &files)?; let preview = login_mode(tool, &config, &route).and_then(|login| { harness::preview(tool, &files, &self.config.server_url, &route.id, login) @@ -273,25 +303,23 @@ impl Controller { account, route, id, + settings_file, } => { - let account = account_path(tool, account.as_deref())?; + let files = install_paths(tool, account.as_deref(), settings_file.as_deref())?; let config = self.routes()?; let route = current_route(&config, &route, Some(&id))?; let login = login_mode(tool, &config, &route)?; - harness::install( - tool, - &accounts::config_paths(tool, account.as_deref()), - &self.config.server_url, - &route.id, - login, - ) - .map(Reply::message) - } - Action::Restore { tool, account } => { - let account = account_path(tool, account.as_deref())?; - harness::restore(&accounts::config_paths(tool, account.as_deref())) + harness::install(tool, &files, &self.config.server_url, &route.id, login) .map(Reply::message) } + Action::Restore { + tool, + account, + settings_file, + } => { + let files = install_paths(tool, account.as_deref(), settings_file.as_deref())?; + harness::restore(&files).map(Reply::message) + } Action::AddAccount { tool, name } => { accounts::add(tool, name.trim()).map(Reply::message) } @@ -341,6 +369,35 @@ fn current_route(config: &ServerConfig, key: &str, id: Option<&str>) -> Result, + file: Option<&str>, +) -> Result, String> { + if let Some(file) = file { + if account.is_some() { + return Err("Choose a saved account or a custom settings file, not both.".into()); + } + let path = PathBuf::from(file); + if !path.is_absolute() || file.trim().is_empty() || file.contains(['\n', '\r']) { + return Err("Enter an absolute settings file path without line breaks.".into()); + } + if path.is_dir() { + return Err("Choose a settings file, not a folder.".into()); + } + if tool == Harness::Pi { + if path.file_name().is_none_or(|name| name != "models.json") { + return Err("Choose Pi’s models.json; settings.json is read beside it.".into()); + } + return Ok(vec![path.clone(), path.with_file_name("settings.json")]); + } + return Ok(vec![path]); + } + let account = account_path(tool, account)?; + Ok(accounts::config_paths(tool, account.as_deref())) +} + fn account_path(tool: Harness, name: Option<&str>) -> Result, String> { let Some(name) = name else { return Ok(None); @@ -430,6 +487,89 @@ mod tests { assert!(serde_json::from_str::(input).is_err()); } } + #[test] + // A custom destination must use the same files for preview, installation, backup, and restore. + fn custom_settings_are_validated_and_restored() { + let dir = tempfile::tempdir().expect("directory"); + for (tool, _) in harness::HARNESSES { + let file = dir.path().join(if *tool == Harness::Pi { + "models.json" + } else { + "custom-settings" + }); + assert_eq!( + install_paths(*tool, None, Some(file.to_str().expect("path"))).expect("custom")[0], + file + ); + } + for (account, file) in [ + (None, "relative.json"), + (None, ""), + (Some("account"), "/tmp/settings.json"), + (None, "/tmp/settings\n.json"), + ] { + assert!(install_paths(Harness::Claude, account, Some(file)).is_err()); + } + assert!(install_paths(Harness::Pi, None, Some("/tmp/settings.json")).is_err()); + assert!(install_paths(Harness::Claude, None, dir.path().to_str()).is_err()); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 0); + let settings = dir.path().join("app.toml"); + let config = dir.path().join("server.toml"); + std::fs::write(&config,"[llm_clients.c]\nbase_url='https://example.com/v1'\nformat='openai_chat'\n[targets.m]\nid='actual'\nllm_client='c'\n[routes.r]\nid='public'\ntype='passthrough'\ntarget='m'\n").expect("config"); + std::fs::write( + &settings, + format!( + "config_file={config:?}\nrouting_log={:?}", + dir.path().join("log") + ), + ) + .expect("settings"); + let custom = dir.path().join("custom.json"); + std::fs::write(&custom, "{\"user\":true}").expect("custom"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + let file = Some(custom.display().to_string()); + let preview = controller + .dispatch(Action::PreviewInstall { + tool: Harness::Claude, + account: None, + settings_file: file.clone(), + route: "r".into(), + id: "public".into(), + }) + .expect("preview"); + assert!( + preview.data["changes"] + .as_array() + .expect("diff") + .iter() + .any(|change| change["file"] == custom.display().to_string()) + ); + controller + .dispatch(Action::Install { + tool: Harness::Claude, + account: None, + settings_file: file.clone(), + route: "r".into(), + id: "public".into(), + }) + .expect("install"); + assert_eq!( + preview.data["proposed"], + harness::inspect(Harness::Claude, std::slice::from_ref(&custom)).expect("inspect") + ); + controller + .dispatch(Action::Restore { + tool: Harness::Claude, + account: None, + settings_file: file, + }) + .expect("restore"); + assert_eq!( + std::fs::read_to_string(custom).expect("custom"), + "{\"user\":true}" + ); + } + #[cfg(target_os = "macos")] #[test] // A cached list must not let an untested key reach Keychain. @@ -442,6 +582,7 @@ mod tests { let worker = std::thread::spawn(move || { for _ in 0..200 { if let Ok((mut stream, _)) = listener.accept() { + stream.set_nonblocking(false).expect("blocking request"); stream .set_read_timeout(Some(std::time::Duration::from_secs(1))) .expect("timeout"); @@ -684,6 +825,7 @@ mod tests { .dispatch(Action::Install { tool: Harness::CodexCli, account: None, + settings_file: None, route: "r".into(), id: id.into() }) diff --git a/crates/switchyard-menubar/src/gui.rs b/crates/switchyard-menubar/src/gui.rs index 502f8c2e68..beaef417fa 100644 --- a/crates/switchyard-menubar/src/gui.rs +++ b/crates/switchyard-menubar/src/gui.rs @@ -22,6 +22,7 @@ struct Shared { struct TrayPreview { today: MenuItem, week: MenuItem, + activity: MenuItem, } impl TrayPreview { fn update(&self, snapshot: &serde_json::Value) -> tauri::Result<()> { @@ -36,6 +37,23 @@ impl TrayPreview { .unwrap_or("Usage unavailable"); item.set_text(label)?; } + let values = snapshot["activity"] + .as_array() + .map(|items| { + items + .iter() + .map(|item| item.as_u64().unwrap_or(0)) + .collect::>() + }) + .unwrap_or_default(); + let max = values.iter().copied().max().unwrap_or(1).max(1); + let levels = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']; + let graph: String = values + .iter() + .map(|value| levels[(*value as f64 / max as f64 * 7.0).round() as usize]) + .collect(); + self.activity + .set_text(format!("Recent calls · 24h {graph} → Usage"))?; Ok(()) } } @@ -135,6 +153,13 @@ pub fn run(controller: Controller) -> Result<(), String> { true, None::<&str>, )?; + let activity = MenuItem::with_id( + app, + "activity", + "Recent calls · loading… → Usage", + true, + None::<&str>, + )?; let usage = MenuItem::with_id(app, "usage", "View usage…", true, None::<&str>)?; let settings = MenuItem::with_id(app, "settings", "Settings…", true, None::<&str>)?; let quit = MenuItem::with_id(app, "quit", "Quit Switchyard", true, None::<&str>)?; @@ -148,13 +173,18 @@ pub fn run(controller: Controller) -> Result<(), String> { &separator, &today, &week, + &activity, &usage, &bottom_separator, &settings, &quit, ], )?; - app.manage(TrayPreview { today, week }); + app.manage(TrayPreview { + today, + week, + activity, + }); if let Ok(snapshot) = app .state::() .controller @@ -176,7 +206,7 @@ pub fn run(controller: Controller) -> Result<(), String> { .on_menu_event(|app, event| match event.id.as_ref() { "open" => open_page(app, "overview"), "install" => open_page(app, "install"), - "today" | "week" | "usage" => open_page(app, "usage"), + "today" | "week" | "activity" | "usage" => open_page(app, "usage"), "settings" => open_page(app, "settings"), "quit" if app.state::().quit() => app.exit(0), _ => {} diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs index c49f1a53fe..59cce613ec 100644 --- a/crates/switchyard-menubar/src/harness.rs +++ b/crates/switchyard-menubar/src/harness.rs @@ -296,6 +296,7 @@ pub fn preview( .map(|text| text.clone().unwrap_or_default()) .collect::>(); Ok(json!({ + "changes": settings_changes(tool, files, ¤t, &incoming)?, "current": inspect_settings(tool, files, ¤t)?, "proposed": inspect_settings(tool, files, &incoming)?, "authentication": if login { "This route uses the coding tool’s subscription login." } else { "This route uses the API credentials configured on the Switchyard server." }, @@ -303,6 +304,152 @@ pub fn preview( })) } +// PreviewModel and its nested types omit unknown fields that could contain credentials. +#[derive(serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "camelCase")] +struct PreviewModel { + id: Option, + name: Option, + reasoning: Option, + input: Option>, + context_window: Option, + max_tokens: Option, + cost: Option, +} +#[derive(serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "lowercase")] +enum PreviewInput { + Text, + Image, +} +#[derive(serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "camelCase")] +struct PreviewCosts { + input: Option, + output: Option, + cache_read: Option, + cache_write: Option, +} + +// settings_changes compares supported routing fields and hides credential values before display. +fn settings_changes( + tool: Harness, + files: &[PathBuf], + before: &[String], + after: &[String], +) -> Result, String> { + let mut changes = Vec::new(); + for (index, file) in files.iter().enumerate() { + let decode = |text: &str| -> Result { + if matches!(tool, Harness::CodexCli | Harness::CodexApp) { + let doc: toml::Value = toml::from_str(text).map_err(|e| e.to_string())?; + serde_json::to_value(doc).map_err(|e| e.to_string()) + } else { + object(text) + } + }; + let old = decode(&before[index])?; + let new = decode(&after[index])?; + let keys: &[&str] = match tool { + Harness::CodexCli | Harness::CodexApp => &[ + "/model", + "/model_provider", + "/model_providers/sy/name", + "/model_providers/sy/env_key", + "/model_providers/sy/base_url", + "/model_providers/sy/requires_openai_auth", + "/model_providers/sy/wire_api", + ], + Harness::Claude => &[ + "/model", + "/env/ANTHROPIC_MODEL", + "/env/ANTHROPIC_DEFAULT_OPUS_MODEL", + "/env/ANTHROPIC_DEFAULT_SONNET_MODEL", + "/env/ANTHROPIC_DEFAULT_HAIKU_MODEL", + "/env/ANTHROPIC_BASE_URL", + "/env/ANTHROPIC_AUTH_TOKEN", + "/env/ANTHROPIC_API_KEY", + ], + Harness::Pi if index == 0 => &[ + "/providers/switchyard/baseUrl", + "/providers/switchyard/api", + "/providers/switchyard/apiKey", + "/providers/switchyard/headers", + "/providers/switchyard/models", + ], + Harness::Pi => &["/defaultModel", "/defaultProvider"], + }; + for key in keys { + let left = old.pointer(key); + let right = new.pointer(key); + if left == right { + continue; + } + let display = |value: Option<&Value>| -> String { + let Some(value) = value else { + return "(unset)".into(); + }; + match *key { + "/env/ANTHROPIC_AUTH_TOKEN" + | "/env/ANTHROPIC_API_KEY" + | "/providers/switchyard/apiKey" => if value.as_str() == Some("") { + "(empty)" + } else { + "(set; hidden)" + } + .into(), + "/providers/switchyard/headers" => value + .as_object() + .map(|headers| { + headers + .keys() + .map(|name| format!("{name}: (set; hidden)")) + .collect::>() + .join(", ") + }) + .unwrap_or_else(|| "(configured headers; values hidden)".into()), + "/providers/switchyard/models" => value + .as_array() + .map(|models| { + models + .iter() + .map(|model| { + serde_json::from_value::(model.clone()) + .and_then(serde_json::to_value) + .unwrap_or_else(|_| { + json!("(unsupported model metadata; hidden)") + }) + }) + .collect::>() + }) + .map(|models| Value::Array(models).to_string()) + .unwrap_or_default(), + "/env/ANTHROPIC_BASE_URL" + | "/model_providers/sy/base_url" + | "/providers/switchyard/baseUrl" => value + .as_str() + .and_then(|v| url::Url::parse(v).ok()) + .map(|mut url| { + let _ = url.set_username(""); + let _ = url.set_password(None); + url.set_query(None); + url.set_fragment(None); + url.to_string() + }) + .unwrap_or_else(|| "(configured endpoint)".into()), + _ => match value { + Value::String(value) => value.clone(), + Value::Bool(value) => value.to_string(), + _ => "(set; hidden)".into(), + }, + } + }; + changes.push(json!({"file":file.display().to_string(),"key":key.trim_start_matches('/').replace('/',"."),"before":display(left),"after":display(right)})); + } + } + Ok(changes) +} + // Both preview and installation use these transformations so the proposed settings match the saved settings. fn configured( tool: Harness, @@ -408,10 +555,12 @@ pub fn restore(files: &[PathBuf]) -> Result { let original = match pending { Some(text) => serde_json::from_str::>(&text) .map_err(|e| format!("Read pending restore: {e}"))?, - // A cleared receipt means this file finished restoring; retry preserves later user edits. - None if original.is_none() && !absent && resuming => read_file(path)?, None if original.is_none() && !absent => { - return Err("No original backup is available for this installation.".into()); + if !resuming { + return Err("No original backup is available for this installation.".into()); + } + // A cleared receipt means this file finished restoring, so a retry preserves later edits. + read_file(path)? } None => original, }; @@ -561,6 +710,44 @@ pub fn binary(tool: Harness) -> Option { #[cfg(test)] mod tests { use super::*; + #[test] + // Nested unknown fields and malformed metadata must not expose credentials in the preview. + fn pi_preview_includes_model_limits_and_redacts_headers() { + let dir = tempfile::tempdir().expect("directory"); + let files = vec![ + dir.path().join("models.json"), + dir.path().join("settings.json"), + ]; + std::fs::write(&files[0], r#"{"providers":{"switchyard":{"baseUrl":"http://localhost:4123/v1","api":"openai-completions","apiKey":"SECRET","headers":{"Authorization":"SECRET"},"models":[{"id":"route","name":"Route","reasoning":true,"input":["text","image"],"contextWindow":1000,"maxTokens":20,"cost":{"input":12,"output":3,"cacheRead":1,"cacheWrite":2,"unknown":{"key":"SECRET"}}},{"id":"bad-name","name":{"key":"SECRET"}},{"id":"bad-cost","cost":{"input":{"key":"SECRET"}}},{"id":"bad-input","input":["text",{"key":"SECRET"}]}]}}}"#).expect("models"); + let result = + preview(Harness::Pi, &files, "http://localhost:4123", "route", false).expect("preview"); + assert!(!result.to_string().contains("SECRET")); + let changes = result["changes"].as_array().expect("changes"); + let models = changes + .iter() + .find(|change| change["key"] == "providers.switchyard.models") + .expect("models diff"); + assert!(models["before"].as_str().expect("before").contains("1000")); + assert!(models["after"].as_str().expect("after").contains("128000")); + let projected: Value = + serde_json::from_str(models["before"].as_str().expect("before")).expect("models"); + assert_eq!( + projected[0]["cost"], + json!({"input":12.0,"output":3.0,"cacheRead":1.0,"cacheWrite":2.0}) + ); + assert_eq!(projected[0]["input"], json!(["text", "image"])); + assert_eq!(projected[0]["name"], "Route"); + for model in projected.as_array().expect("models").iter().skip(1) { + assert_eq!(model, "(unsupported model metadata; hidden)"); + } + + assert!( + changes + .iter() + .any(|change| change["key"] == "providers.switchyard.headers") + ); + } + #[test] // Preview must match the installed settings without creating files or backups. fn preview_matches_installation_without_writes() { @@ -582,6 +769,15 @@ mod tests { std::fs::write(&files[0], original).expect("settings"); let result = preview(*tool, &files, "http://localhost:4123", "new-route", false) .expect("preview"); + assert!( + result["changes"] + .as_array() + .expect("diff") + .iter() + .any(|change| change["after"] + .as_str() + .is_some_and(|value| value.contains("new-route"))) + ); assert_eq!(read(&files[0]).expect("unchanged"), original); assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 1); install(*tool, &files, "http://localhost:4123", "new-route", false).expect("install"); @@ -598,7 +794,8 @@ mod tests { } let dir = tempfile::tempdir().expect("directory"); let files = vec![dir.path().join("settings.json")]; - let original = r#"{"env":{"ANTHROPIC_API_KEY":"SECRET"}}"#; + let original = + r#"{"env":{"ANTHROPIC_API_KEY":"SECRET","ANTHROPIC_MODEL":{"key":"SECRET"}}}"#; std::fs::write(&files[0], original).expect("settings"); assert!( preview( @@ -612,6 +809,23 @@ mod tests { ); assert_eq!(read(&files[0]).expect("unchanged"), original); assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 1); + let safe = preview( + Harness::Claude, + &files, + "http://localhost:4123", + "route", + false, + ) + .expect("API preview"); + assert!(!safe.to_string().contains("SECRET")); + assert!( + safe["changes"] + .as_array() + .expect("diff") + .iter() + .any(|change| change["key"] == "env.ANTHROPIC_API_KEY" + && change["before"] == "(set; hidden)") + ); std::fs::write(&files[0], "{}").expect("settings"); let result = preview( Harness::Claude, diff --git a/crates/switchyard-menubar/src/history.rs b/crates/switchyard-menubar/src/history.rs index 2e4b3ba559..837234cc50 100644 --- a/crates/switchyard-menubar/src/history.rs +++ b/crates/switchyard-menubar/src/history.rs @@ -38,6 +38,20 @@ pub struct History { pub skipped: usize, } +// hourly_calls uses bounded recent history, so its buckets may omit calls from a busy day. +pub fn hourly_calls(entries: &[Entry], now: chrono::DateTime) -> [u64; 24] { + let mut buckets = [0; 24]; + for entry in entries { + if let Ok(time) = chrono::DateTime::parse_from_rfc3339(&entry.ts) { + let age = now.signed_duration_since(time); + if (chrono::Duration::zero()..chrono::Duration::hours(24)).contains(&age) { + buckets[23 - age.num_seconds() as usize / 3600] += 1; + } + } + } + buckets +} + pub fn load(path: &Path) -> Result { let mut file = match std::fs::File::open(path) { Ok(f) => f, @@ -113,6 +127,30 @@ impl History { #[cfg(test)] mod tests { use super::*; + #[test] + fn activity_uses_real_hour_buckets_and_ignores_invalid_or_outside_times() { + let now = chrono::DateTime::parse_from_rfc3339("2026-10-09T12:00:00Z") + .expect("date") + .with_timezone(&chrono::Utc); + let entries = [ + "2026-10-09T11:59:00Z", + "2026-10-09T11:00:00Z", + "2026-10-08T12:00:00Z", + "2026-10-09T13:00:00Z", + "2026-10-09T12:00:00.500Z", + "bad", + ] + .iter() + .map(|time| { + serde_json::from_value(serde_json::json!({"ts":time,"model":"m"})).expect("entry") + }) + .collect::>(); + let buckets = hourly_calls(&entries, now); + assert_eq!(buckets[23], 1); + assert_eq!(buckets[22], 1); + assert_eq!(buckets.iter().sum::(), 2); + } + #[test] fn groups_recorded_ids_and_never_displays_content() { let bytes = b"{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"actual\",\"session_id\":\"s\",\"turn_id\":\"t\",\"prompt_tokens\":12,\"completion_tokens\":3,\"messages\":\"SECRET\"}\n{\"ts\":\"2026-10-08T12:00:01Z\",\"model\":\"judge\",\"tier\":\"classifier\"}\ninvalid\n{\"model\":\"unfinished\"}"; diff --git a/crates/switchyard-menubar/src/server.rs b/crates/switchyard-menubar/src/server.rs index b39be43bd0..3dcf5bdc32 100644 --- a/crates/switchyard-menubar/src/server.rs +++ b/crates/switchyard-menubar/src/server.rs @@ -44,6 +44,25 @@ pub fn apply( })?; let config = ServerConfig::parse(&text)?; let edited = config.edit(route, algorithm, choices)?; + save_edit(settings, &text, edited) +} + +pub fn remove(settings: &Config, route: &str, id: &str) -> Result { + let text = std::fs::read_to_string(&settings.config_file).map_err(|error| error.to_string())?; + let config = ServerConfig::parse(&text)?; + if !config.routes().iter().any(|r| r.key == route && r.id == id) { + return Err("The route changed or was removed. Refresh and choose it again.".into()); + } + let edited = config.remove(route)?; + save_edit(settings, &text, edited) +} + +fn save_edit( + settings: &Config, + text: &str, + edited: crate::server_config::Edited, +) -> Result { + let path = &settings.config_file; if edited.text == text { return Ok( "Nothing to save. The route already uses this algorithm and these models.".to_string(), @@ -51,7 +70,7 @@ pub fn apply( } let binary = server_binary()?; - let backup = save_checked(&binary, path, &text, &edited.text).map_err(explain)?; + let backup = save_checked(&binary, path, text, &edited.text).map_err(explain)?; let label = &settings.launchd_label; let health = format!("{}/health", settings.server_url); let mut lines = vec![format!( @@ -77,7 +96,7 @@ pub fn apply( ), }); lines.extend(edited.notes); - let routes = config.routes().len(); + let routes = ServerConfig::parse(&edited.text)?.routes().len(); let plural = if routes == 1 { "" } else { "s" }; lines.push(format!( "The switchyard-server --dry-run check passed for {routes} route{plural}." diff --git a/crates/switchyard-menubar/src/server_config.rs b/crates/switchyard-menubar/src/server_config.rs index 1027d13411..2b6b38b3fb 100644 --- a/crates/switchyard-menubar/src/server_config.rs +++ b/crates/switchyard-menubar/src/server_config.rs @@ -383,6 +383,24 @@ impl ServerConfig { .collect() } + pub fn remove(&self, route: &str) -> Result { + let mut doc = self.doc.clone(); + let routes = doc + .get_mut("routes") + .and_then(Item::as_table_like_mut) + .ok_or("No routes are configured.")?; + let removed = routes + .remove(route) + .ok_or("The route was already removed. Refresh and choose it again.")?; + retain_block_markers(&mut doc, &removed); + Ok(Edited { + text: doc.to_string(), + notes: vec![ + "Removed the route. Its targets and endpoint settings are preserved.".into(), + ], + }) + } + pub fn clients(&self) -> Vec { entries(self.table("llm_clients")) .map(|(name, client)| Client { @@ -1073,6 +1091,62 @@ fn login_hosts<'c>(clients: &'c [Client], choices: &[Choice]) -> Vec<&'c str> { hosts } +// Generated-block markers can occur on nested route tables and still apply to retained targets. +fn retain_block_markers(doc: &mut DocumentMut, removed: &Item) { + let mut markers = Vec::new(); + let mut tables: Vec<_> = removed.as_table().into_iter().collect(); + while let Some(table) = tables.pop() { + if let Some(position) = table.position() + && let Some(prefix) = table.decor().prefix().and_then(|value| value.as_str()) + && prefix + .lines() + .any(|line| line.trim().starts_with("# >>>") || line.trim().starts_with("# <<<")) + { + markers.push((position, prefix.to_string())); + } + tables.extend(table.iter().filter_map(|(_, item)| item.as_table())); + } + markers.sort_by_key(|(position, _)| *position); + let mut positions = Vec::new(); + let mut tables = vec![doc.as_table()]; + while let Some(table) = tables.pop() { + positions.extend(table.position()); + tables.extend(table.iter().filter_map(|(_, item)| item.as_table())); + } + let mut prefixes: HashMap = HashMap::new(); + let mut trailing = String::new(); + for (removed_position, prefix) in markers { + if let Some(next) = positions + .iter() + .copied() + .filter(|position| *position > removed_position) + .min() + { + prefixes.entry(next).or_default().push_str(&prefix); + } else { + trailing.push_str(&prefix); + } + } + let mut tables = vec![doc.as_table_mut()]; + while let Some(table) = tables.pop() { + if let Some(position) = table.position() + && let Some(mut prefix) = prefixes.remove(&position) + { + prefix.push_str( + table + .decor() + .prefix() + .and_then(|value| value.as_str()) + .unwrap_or_default(), + ); + table.decor_mut().set_prefix(prefix); + } + tables.extend(table.iter_mut().filter_map(|(_, item)| item.as_table_mut())); + } + trailing.push_str(doc.trailing().as_str().unwrap_or_default()); + doc.set_trailing(trailing); +} + /// This function finds the route and target tables that sit inside blocks another tool /// writes. A block starts at a line that begins with `# >>>` and ends at the /// next line that begins with `# <<<`, the markers that the installer scripts @@ -1195,6 +1269,54 @@ confidence_threshold = 0.5 config.target_at("gateway", &Slot::Key(&["stage", "capable_target"])) } + #[test] + fn removing_a_route_keeps_generated_block_markers_for_retained_targets() { + for (suffix, target, owned) in [ + ( + "# >>> generated >>>\n[routes.generated]\nid='generated'\ntype='passthrough'\ntarget='owned'\n[targets.owned]\nid='m'\nllm_client='gateway'\n# <<< generated <<<\n", + "owned", + true, + ), + ( + "# >>> generated >>>\n[targets.owned]\nid='m'\nllm_client='gateway'\n# <<< generated <<<\n[routes.generated]\nid='generated'\ntype='passthrough'\ntarget='owned'\n[targets.unowned]\nid='other'\nllm_client='gateway'\n", + "unowned", + false, + ), + ( + "[routes.generated]\nid='generated'\ntype='composite'\n# >>> generated >>>\n[routes.generated.classifier]\ntarget='owned'\n[targets.owned]\nid='m'\nllm_client='gateway'\n# <<< generated <<<\n", + "owned", + true, + ), + ] { + let config = ServerConfig::parse(&format!("{GATEWAY}\n{suffix}")).expect("config"); + assert_eq!(config.generated_by("targets", target).is_some(), owned); + let edited = config.remove("generated").expect("remove"); + let remaining = ServerConfig::parse(&edited.text).expect("config"); + assert_eq!( + remaining.generated_by("targets", target).is_some(), + owned, + "{}", + edited.text + ); + } + } + + #[test] + // Routes can share targets, so deleting one route must leave those targets usable. + fn removing_a_route_preserves_shared_targets_and_other_routes() { + let original = format!( + "{GATEWAY}\n[routes.keep]\nid='keep'\ntype='passthrough'\ntarget='gateway_capable'\n" + ); + let config = ServerConfig::parse(&original).expect("config"); + let edited = config.remove("gateway").expect("remove"); + let remaining = ServerConfig::parse(&edited.text).expect("config"); + assert_eq!(remaining.routes().len(), 1); + assert_eq!(remaining.routes()[0].id, "keep"); + assert_eq!(remaining.models_on("gateway"), config.models_on("gateway")); + switchyard_runner::Runner::from_toml(&edited.text).expect("server accepts remaining route"); + assert!(config.remove("missing").is_err()); + } + #[test] fn every_algorithm_writes_a_config_the_server_accepts() { let gateway = ServerConfig::parse(GATEWAY).expect("parse"); diff --git a/crates/switchyard-menubar/src/tui.rs b/crates/switchyard-menubar/src/tui.rs index 0ed8e952b0..efe2d36dc5 100644 --- a/crates/switchyard-menubar/src/tui.rs +++ b/crates/switchyard-menubar/src/tui.rs @@ -11,7 +11,8 @@ use crate::{ use ratatui::{ crossterm::event::{self, Event, KeyCode, KeyEventKind, KeyModifiers}, layout::{Constraint, Layout}, - widgets::{Block, Paragraph, Wrap}, + style::{Color, Style}, + widgets::{Block, Paragraph, Sparkline, Tabs, Wrap}, }; use serde_json::Value; use std::time::{Duration, Instant}; @@ -32,6 +33,10 @@ enum FormKind { Models, Key, Filter, + RouteFilter, + SettingsFile, + Remove, + Restore, } struct View { snapshot: Value, @@ -41,6 +46,9 @@ struct View { account: usize, session: usize, filter: String, + route_filter: String, + settings_file: String, + preview: Option, scroll: u16, message: String, form: Option, @@ -54,7 +62,25 @@ impl View { fn tools(&self) -> &[Value] { self.snapshot["tools"].as_array().map_or(&[], Vec::as_slice) } + fn matches_route(&self, route: &Value) -> bool { + let kind = string(route, "kind"); + let title = crate::server_config::ALGORITHMS + .iter() + .find(|algorithm| algorithm.kind == kind) + .map_or("", |algorithm| algorithm.title); + format!("{} {title}", string(route, "label")) + .to_lowercase() + .contains(&self.route_filter.to_lowercase()) + } fn route(&self) -> Result<&Value, String> { + if self.page == 1 + && self + .routes() + .get(self.route) + .is_some_and(|route| !self.matches_route(route)) + { + return Err("No route matches the search. Clear or change the search first.".into()); + } self.routes() .get(self.route) .ok_or_else(|| "Choose a route first.".into()) @@ -82,9 +108,49 @@ impl View { } fn refresh(&mut self, controller: &mut Controller) -> Result<(), String> { self.snapshot = controller.snapshot()?; + self.preview = None; self.route = self.route.min(self.routes().len().saturating_sub(1)); Ok(()) } + fn preview_install(&mut self, controller: &mut Controller) -> Result<(), String> { + self.preview = None; + let route = self.route()?; + let reply = controller.dispatch(Action::PreviewInstall { + tool: self.tool(), + account: self.account(), + settings_file: self.custom_file(), + route: string(route, "key"), + id: string(route, "id"), + })?; + self.preview = Some(reply.data); + self.message = + "Review the diff. Press i to install; changing the selection clears the preview." + .into(); + Ok(()) + } + fn custom_file(&self) -> Option { + (!self.settings_file.is_empty()).then(|| self.settings_file.clone()) + } + fn move_route(&mut self, forward: bool) { + let visible: Vec<_> = self + .routes() + .iter() + .enumerate() + .filter(|(_, r)| self.page != 1 || self.matches_route(r)) + .map(|(i, _)| i) + .collect(); + if visible.is_empty() { + return; + } + let index = visible.iter().position(|i| *i == self.route).unwrap_or(0); + let next = if forward { + (index + 1) % visible.len() + } else { + index.saturating_sub(1) + }; + self.route = visible[next]; + self.preview = None; + } fn form(&mut self, title: &str, kind: FormKind, fields: Vec<(String, String)>) { self.form = Some(Form { title: title.into(), @@ -205,6 +271,45 @@ impl View { .unwrap_or_default() ); } + FormKind::RouteFilter => { + self.route_filter = value(0); + self.move_route(false); + self.scroll = 0; + } + FormKind::SettingsFile => { + self.settings_file = value(0); + self.account = 0; + self.preview = None; + self.preview_install(controller)?; + } + FormKind::Restore => { + if value(0) != "RESTORE" { + return Err("Confirmation did not match. Nothing was restored.".into()); + } + self.dispatch( + controller, + Action::Restore { + tool: self.tool(), + account: self.account(), + settings_file: self.custom_file(), + }, + ); + self.preview = None; + } + FormKind::Remove => { + let route = self.route()?; + if value(0) != string(route, "id") { + return Err("Route name did not match. Nothing was deleted.".into()); + } + self.dispatch( + controller, + Action::Remove { + generation: self.snapshot["generation"].as_u64().unwrap_or_default(), + route: string(route, "key"), + id: string(route, "id"), + }, + ); + } FormKind::Filter => { self.filter = value(0); self.scroll = 0; @@ -214,13 +319,37 @@ impl View { } fn body(&self) -> String { match self.page { - 0=>strings(&self.snapshot["summary"]), + 0=>{ + let mut period=""; + let details=self.snapshot["summary"].as_array().map(|rows|rows.iter().filter_map(Value::as_str).filter_map(|line| { + if line.starts_with("Today —") {period="Today";} + if line.starts_with("This week —") {period="Past 7 days";} + if line.contains("Saved") {Some(format!("{period}: {}",line.trim()))} + else if line.contains("prices")||line.contains("Savings hidden")||line.trim().ends_with('%') {Some(line.trim().into())} + else {None} + }).collect::>().join("\n")).unwrap_or_default(); + format!("CONNECTION\n{} · {}\n\nTODAY\n{} model calls · {} tokens\n\nPAST 7 DAYS\n{} model calls · {} tokens\n\nUSAGE DETAILS\n{}",if self.snapshot["metrics"]["running"]==true {"Connected"} else {"Not responding"},string(&self.snapshot["metrics"],"server_url"),self.snapshot["metrics"]["today"]["requests"],self.snapshot["metrics"]["today"]["tokens"],self.snapshot["metrics"]["week"]["requests"],self.snapshot["metrics"]["week"]["tokens"],details) + }, 1=>{ - let mut rows=vec!["e Edit route m Refresh models k Save endpoint key\nAlgorithms: passthrough, random, llm_classifier, composite, stage_router, advisor, plan_execute, auto\n".into()]; - for (i,r) in self.routes().iter().enumerate(){rows.push(format!("{} {}",if i==self.route {">"}else{" "},string(r,"label")));} - rows.push(format!("\nEndpoints: {}",self.snapshot["clients"].as_array().map(|a|a.iter().map(|c|format!("{} ({})",string(c,"name"),string(c,"host"))).collect::>().join(", ")).unwrap_or_default()));rows.join("\n") + let visible:Vec<_>=self.routes().iter().enumerate().filter(|(_,r)|self.matches_route(r)).collect(); + let index=visible.iter().position(|(i,_)|*i==self.route).unwrap_or(0); + let mut rows=vec![format!("/ Search routes e Edit d Delete route m Refresh models k Save endpoint key\n{} of {} routes · Search: {}\n",visible.len(),self.routes().len(),self.route_filter)]; + for(i,r) in visible.iter().skip(index.saturating_sub(4)).take(10){rows.push(format!("{} {}",if *i==self.route {">"}else{" "},string(r,"label")));} + if visible.is_empty(){ rows.push("No routes match your search.".into()); } + if let Ok(route)=self.route(){rows.push(format!("\nSELECTED ROUTE\n{}",string(route,"label")));} + rows.join("\n") + } + 2|4=>{ + let mut body=format!("t Next tool r Next route a Next account\n{}\n\nTool: {} ({})\nAccount: {}\nRoute: {}\nSettings: {}\n\nDetected user settings:\n{}",if self.page==2 {"p Preview diff i Review / install u Restore backup x Custom settings file\nn Sign in to another subscription account"}else{"l Launch worktree session n Sign in to another subscription account"},string(&self.tools()[self.tool],"label"),if self.tools()[self.tool]["available"]==true {"Detected"}else{"Binary not found"},self.account().unwrap_or_else(||"Existing user settings".into()),self.route().map(|r|string(r,"label")).unwrap_or_default(),if self.settings_file.is_empty(){"Detected location"}else{&self.settings_file},string(&self.tools()[self.tool],"status")); + if let Some(preview)=&self.preview { + body.push_str(&format!("\n\nSELECTED SETTINGS\n{}",string(preview,"current"))); + body.push_str("\n\nSETTINGS DIFF · − current / + proposed\n"); + if let Some(error)=preview["error"].as_str(){body.push_str(error);} + if let Some(changes)=preview["changes"].as_array(){for change in changes{body.push_str(&format!("\n{} · {}\n− {}\n+ {}\n",string(change,"file"),string(change,"key"),string(change,"before"),string(change,"after")));}} + body.push_str(&format!("\n{}",string(preview,"authentication"))); + } + body } - 2|4=>format!("t Next tool r Next route a Next account\n{}\n\nTool: {}\nAccount: {}\nRoute: {}\n\n{}",if self.page==2 {"i Install / update u Restore backup n Add native login"}else{"l Launch worktree session n Add native login"},string(&self.tools()[self.tool],"label"),self.account().unwrap_or_else(||"Current login".into()),self.route().map(|r|string(r,"label")).unwrap_or_default(),string(&self.tools()[self.tool],"status")), 3=>{ let selected=self.session.checked_sub(1).and_then(|i|self.snapshot["sessions"].as_array()?.get(i)).and_then(Value::as_str); let mut lines=vec![format!("s Next session f Filter turn/model/route\nSession: {} Filter: {}\n{} recent calls{}; {} unreadable records skipped.\nEach row is one model call; a turn can contain several calls. Input includes cached reads.\n",selected.unwrap_or("All sessions"),self.filter,self.snapshot["entries"].as_array().map_or(0,Vec::len),if self.snapshot["limited"]==true{" (8 MiB / 5,000 record limit)"}else{""},self.snapshot["skipped"])]; @@ -243,23 +372,25 @@ impl View { self.page = (self.page + PAGES.len() - 1) % PAGES.len(); self.scroll = 0; } - KeyCode::Down | KeyCode::Char('r') => { - self.route = (self.route + 1) % self.routes().len().max(1) - } - KeyCode::Up => self.route = self.route.saturating_sub(1), + KeyCode::Down | KeyCode::Char('r') => self.move_route(true), + KeyCode::Up => self.move_route(false), KeyCode::PageDown => self.scroll = self.scroll.saturating_add(10), KeyCode::PageUp => self.scroll = self.scroll.saturating_sub(10), KeyCode::F(5) => self.refresh(controller)?, KeyCode::Char('t') => { self.tool = (self.tool + 1) % self.tools().len(); self.account = 0; + self.settings_file.clear(); + self.preview = None; } KeyCode::Char('a') => { self.account = (self.account + 1) % (self.tools()[self.tool]["accounts"] .as_array() .map_or(0, Vec::len) - + 1) + + 1); + self.settings_file.clear(); + self.preview = None; } KeyCode::Char('e') if self.page == 1 => { let kind = string(self.route()?, "kind"); @@ -290,27 +421,59 @@ impl View { fields, ); } + KeyCode::Char('p') if self.page == 2 => self.preview_install(controller)?, + KeyCode::Char('x') if self.page == 2 => self.form( + "Custom settings file; empty uses detected settings", + FormKind::SettingsFile, + vec![( + "Absolute file path (Pi: models.json)".into(), + self.settings_file.clone(), + )], + ), + KeyCode::Char('/') if self.page == 1 => self.form( + "Find a route", + FormKind::RouteFilter, + vec![( + "Name, method, endpoint, or model".into(), + self.route_filter.clone(), + )], + ), + KeyCode::Char('d') if self.page == 1 => self.form( + &format!( + "Delete {}? Targets stay; config is backed up", + string(self.route()?, "id") + ), + FormKind::Remove, + vec![("Type the route name to delete".into(), String::new())], + ), KeyCode::Char('i') if self.page == 2 => { - let r = self.route()?; - self.dispatch( - controller, - Action::Install { - tool: self.tool(), - account: self.account(), - route: string(r, "key"), - id: string(r, "id"), - }, - ); + if self.preview.is_none() { + self.preview_install(controller)?; + } else if let Some(error) = self.preview.as_ref().and_then(|p| p["error"].as_str()) + { + return Err(error.into()); + } else { + let r = self.route()?; + self.dispatch( + controller, + Action::Install { + tool: self.tool(), + account: self.account(), + settings_file: self.custom_file(), + route: string(r, "key"), + id: string(r, "id"), + }, + ); + self.preview = None; + } } - KeyCode::Char('u') if self.page == 2 => self.dispatch( - controller, - Action::Restore { - tool: self.tool(), - account: self.account(), - }, + KeyCode::Char('u') if self.page == 2 => self.form( + "Restore coding-tool settings? Switchyard routes are kept", + FormKind::Restore, + vec![("Type RESTORE to confirm".into(), String::new())], ), KeyCode::Char('n') if self.page == 2 || self.page == 4 => self.form( - "Add native login", + "Sign in to another subscription account", FormKind::Account, vec![("Account name".into(), String::new())], ), @@ -342,16 +505,6 @@ impl View { fn string(v: &Value, key: &str) -> String { v[key].as_str().unwrap_or_default().into() } -fn strings(v: &Value) -> String { - v.as_array() - .map(|a| { - a.iter() - .filter_map(Value::as_str) - .collect::>() - .join("\n") - }) - .unwrap_or_default() -} pub fn run(mut controller: Controller) -> Result<(), String> { let snapshot = controller.snapshot()?; let mut view = View { @@ -362,6 +515,9 @@ pub fn run(mut controller: Controller) -> Result<(), String> { account: 0, session: 0, filter: String::new(), + route_filter: String::new(), + settings_file: String::new(), + preview: None, scroll: 0, message: String::new(), form: None, @@ -375,13 +531,14 @@ pub fn run(mut controller: Controller) -> Result<(), String> { Constraint::Min(5), Constraint::Length(5), ]).split(frame.area()); - let title = PAGES.iter().enumerate().map(|(i, page)| { - if i == view.page { format!("[{page}]") } else { page.to_string() } - }).collect::>().join(" "); - frame.render_widget( - Paragraph::new(title).block(Block::bordered().title("Switchyard")), - areas[0], - ); + frame.render_widget(Tabs::new(PAGES.iter().copied()).select(view.page).highlight_style(Style::default().fg(Color::White).bg(Color::Rgb(40,56,76))).block(Block::bordered().title("Switchyard")),areas[0]); + let mut body_area=areas[1]; + if view.page==0 && view.form.is_none() { + let split=Layout::vertical([Constraint::Min(5),Constraint::Length(6)]).split(body_area); + body_area=split[0]; + let data=view.snapshot["activity"].as_array().map(|items|items.iter().filter_map(Value::as_u64).collect::>()).unwrap_or_default(); + frame.render_widget(Sparkline::default().data(&data).style(Style::default().fg(Color::LightBlue)).block(Block::bordered().title("Recent model calls · past 24h · hourly")),split[1]); + } let (body, title) = if let Some(form) = &view.form { let rows = form.fields.iter().enumerate().map(|(i, (label, value))| { let marker = if i == form.index { ">" } else { " " }; @@ -397,7 +554,7 @@ pub fn run(mut controller: Controller) -> Result<(), String> { .wrap(Wrap { trim: false }) .scroll((view.scroll, 0)) .block(Block::bordered().title(title)), - areas[1], + body_area, ); frame.render_widget( Paragraph::new(format!("Tab: section · ↑/↓: route · PgUp/PgDn: scroll · F5: refresh · q: quit\nForms: Tab: field · Ctrl-U: clear · Enter: submit · Esc: cancel\n{}", view.message)), @@ -457,3 +614,86 @@ pub fn run(mut controller: Controller) -> Result<(), String> { } result } + +#[cfg(test)] +mod tests { + use super::*; + use crate::config::Config; + use serde_json::json; + + fn view() -> View { + View { + snapshot: json!({"routes":[{"key":"a","id":"a","label":"alpha"},{"key":"b","id":"b","label":"beta"}]}), + page: 1, + route: 0, + tool: 0, + account: 0, + session: 0, + filter: String::new(), + route_filter: "alpha".into(), + settings_file: String::new(), + preview: Some(json!({"proposed":"old settings"})), + scroll: 0, + message: String::new(), + form: None, + } + } + + #[test] + // A mismatched confirmation must fail before controller dispatch can create files. + fn unconfirmed_restore_leaves_files_untouched() { + let directory = tempfile::tempdir().expect("directory"); + let mut controller = Controller::new(Config::default(), directory.path().join("app.toml")); + let mut view = view(); + view.form( + "Restore", + FormKind::Restore, + vec![("Confirmation".into(), "no".into())], + ); + assert_eq!( + view.submit(&mut controller).expect_err("reject"), + "Confirmation did not match. Nothing was restored." + ); + assert_eq!( + std::fs::read_dir(directory.path()).expect("files").count(), + 0 + ); + } + + #[test] + // The Routes search must not hide choices when the user switches to Install. + fn route_search_does_not_restrict_install_selection() { + let mut view = view(); + view.snapshot["routes"][0]["kind"] = json!("passthrough"); + view.route_filter = "single model".into(); + assert!(view.route().is_ok()); + view.move_route(true); + assert_eq!(view.route, 0); + view.route_filter = "missing".into(); + assert!(view.route().is_err()); + view.page = 2; + view.move_route(true); + assert_eq!(view.route, 1); + assert_eq!(view.route().expect("route")["id"], "b"); + assert!(view.preview.is_none()); + } + + #[test] + fn refreshing_the_snapshot_invalidates_the_install_preview() { + let directory = tempfile::tempdir().expect("directory"); + let settings = directory.path().join("app.toml"); + std::fs::write( + &settings, + format!( + "config_file={:?}\nrouting_log={:?}\nserver_url='http://127.0.0.1:0'\n", + directory.path().join("server.toml"), + directory.path().join("history.jsonl") + ), + ) + .expect("settings"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + let mut view = view(); + view.refresh(&mut controller).expect("refresh"); + assert!(view.preview.is_none()); + } +} diff --git a/crates/switchyard-menubar/tests/frontend.test.cjs b/crates/switchyard-menubar/tests/frontend.test.cjs index 821c657078..c40a602653 100644 --- a/crates/switchyard-menubar/tests/frontend.test.cjs +++ b/crates/switchyard-menubar/tests/frontend.test.cjs @@ -48,3 +48,13 @@ test('editor redraw retains the saved route and restart result', async () => { })()`, context); assert.equal(result, 'Saved the route. Restart failed.'); }); + +test('reopening an edited route preserves untiered model choices', () => { + const context = editor(); + const result = vm.runInContext(` + const route = {kind:'passthrough',choices:[{model:'original'}]}; + const draft = {algorithm:'random',loadedAlgorithm:'random',choices:[{model:'edited-first'},{model:'edited-second'}],memory:new Map()}; + [roleChoice(draft,route,{tier:null},0).model,roleChoice(draft,route,{tier:null},1).model]; + `, context); + assert.deepEqual(Array.from(result), ['edited-first', 'edited-second']); +}); diff --git a/crates/switchyard-menubar/ui/app.css b/crates/switchyard-menubar/ui/app.css index 9ab26cec05..818e14bcb6 100644 --- a/crates/switchyard-menubar/ui/app.css +++ b/crates/switchyard-menubar/ui/app.css @@ -31,7 +31,7 @@ h1 { font-size: 17px; font-weight: 650; letter-spacing: -.35px; margin: 0; } .sidebar-caption { margin: 3px 0 0; font-size: 11px; color: var(--muted); } nav { display: grid; gap: 3px; margin-top: 28px; } nav button { border: 0; padding: 8px 12px; background: transparent; font-weight: 500; } -nav button.active { background: var(--selection); color: var(--text); box-shadow: inset 2px 0 var(--accent); } +nav button.active { background: var(--selection); color: var(--text); } aside footer { margin-top: auto; padding: 16px 12px 0; border-top: 1px solid var(--line); font-size: 11px; color: var(--muted); } main { min-width: 0; padding: 26px 28px 36px; } header { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 34px; margin-bottom: 22px; } @@ -147,3 +147,39 @@ td:nth-last-child(-n+3), th:nth-last-child(-n+3) { width: 76px; white-space: now .board-row { grid-template-columns: minmax(0, 1fr) 100px; gap: 8px; } .board-models { grid-column: 1 / -1; } } + +.metric-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px; } +.metric strong { font-size:32px;font-weight:600;font-variant-numeric:tabular-nums; } +.metric p { margin-top:8px;font-size:12px; } +.endpoint-address { font-family:var(--mono);margin-top:12px;overflow-wrap:anywhere; } +.connected { color:#a5e9c5;border-color:#547b68; } +.activity-graph { height:80px;display:flex;align-items:end;gap:5px;margin:20px 0 12px;border-bottom:1px solid var(--line); } +.activity-bar { flex:1;background:var(--accent);border-radius:2px 2px 0 0; } +.route-workspace { display:grid;grid-template-columns:minmax(180px,30%) minmax(0,1fr);gap:20px; } +.route-picker { max-height:60vh;overflow:auto;display:flex;flex-direction:column;gap:4px; } +.route-picker button { border-color:transparent;background:transparent;overflow-wrap:anywhere;padding:10px; } +.route-picker button small { display:block;margin-top:4px; } +.route-picker button.selected { background:var(--selection);border-color:var(--line); } +.route-detail .card { padding:0;border:0;background:none; } +.install-diff { margin-top:18px;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--sidebar); } +.install-diff h4 { font-size:12px;margin:0;padding:12px;border-bottom:1px solid var(--line); } +.install-diff pre { padding:6px 12px; } +.install-diff p { padding:12px; } +.diff-heading { color:var(--muted);border-top:1px solid var(--line);font-size:11px; } +.diff-remove { background:#38262d;color:#ffd1d9; } +.diff-add { background:#21382f;color:#bbf1d2; } +button.primary { min-height:38px;font-weight:650;box-shadow:0 1px 2px #0008; } +button.danger { color:#ffd1d9; } +@media (max-width:700px) { .route-workspace { grid-template-columns:1fr; } .route-picker { max-height:220px; } .metric-grid { grid-template-columns:1fr; } } + +.field-grid { align-items:start; } + +.graph-axis { display:flex;justify-content:space-between;color:var(--muted);font-size:11px;margin-bottom:8px; } + +.install-diff details { padding:10px 12px; } +.install-diff details pre { padding:10px 0 0; } + +.modal-backdrop { position:fixed;inset:0;display:grid;place-items:center;background:#000b;z-index:100;padding:16px; } +.confirm-dialog { width:100%;max-width:440px;background:var(--panel);border:1px solid var(--control-border);border-radius:8px;padding:24px;box-shadow:0 12px 48px #0008; } +.confirm-dialog .actions { justify-content:flex-end; } +.confirm-dialog button.danger { background:#6e2834;border-color:#b15d6d;color:#ffd1d9; } diff --git a/crates/switchyard-menubar/ui/app.js b/crates/switchyard-menubar/ui/app.js index e96691284e..0e8c88c57b 100644 --- a/crates/switchyard-menubar/ui/app.js +++ b/crates/switchyard-menubar/ui/app.js @@ -8,10 +8,24 @@ let snapshot, page = 'overview', busy = false; let operationQueue = Promise.resolve(); const drafts = new Map(), lists = new Map(); const usageView = {session:'',search:''}; +const routeView = {selected:'',search:''}; +const installView = {tool:'',account:'',route:'',file:''}; function node(tag, text, cls) { const n = document.createElement(tag); if (text !== undefined) n.textContent = text; if (cls) n.className = cls; return n; } function card(title) { const c = node('div', undefined, 'card'); c.append(node('h3', title)); content.append(c); return c; } function button(parent, text, fn, primary = false) { const b = node('button', text, primary ? 'primary' : ''); b.onclick = fn; parent.append(b); return b; } -function field(parent, title, control) { const l = node('label', title); l.append(control); parent.append(l); return control; } +// Wry's macOS delegate has no JavaScript confirm handler, so this dialog handles confirmation. +function confirmAction(title, message, label, action) { + const previous=document.activeElement,overlay=node('div',undefined,'modal-backdrop'),dialog=node('div',undefined,'confirm-dialog'); + dialog.setAttribute('role','dialog');dialog.setAttribute('aria-modal','true');dialog.setAttribute('aria-label',title); + dialog.append(node('h3',title),node('p',message));overlay.append(dialog);document.body.append(overlay); + const background=[...document.body.children].filter(element=>element!==overlay).map(element=>[element,element.inert]); + background.forEach(([element])=>{element.inert=true;}); + const close=()=>{overlay.remove();background.forEach(([element,inert])=>{element.inert=inert;});if(previous?.isConnected)previous.focus();}; + const controls=actions(dialog),cancel=button(controls,'Cancel',close),accept=button(controls,label,()=>{close();action();});accept.classList.add('danger'); + dialog.onkeydown=event=>{if(event.key==='Escape'){event.preventDefault();close();}else if(event.key==='Tab'){event.preventDefault();(document.activeElement===cancel?accept:cancel).focus();}}; + cancel.focus(); +} +function field(parent, title, control) { control.setAttribute('aria-label',title); const l = node('label', title); l.append(control); parent.append(l); return control; } function select(options, chosen) { const s = node('select'); for (const [value, label] of options) { const o = node('option', label); o.value = value; s.append(o); } if (chosen !== undefined) s.value = chosen; return s; } function input(value = '', type = 'text') { const i = node('input'); i.type = type; i.value = value; return i; } function text(parent, value) { parent.append(node('pre', value)); } @@ -20,7 +34,7 @@ function setBusy(value) { busy = value; document.querySelectorAll('button,input, // Route editors and install previews share a queue because the controller runs one operation at a time. function enqueue(operation) { operationQueue = operationQueue.then(async () => { - while (busy) await new Promise(resolve => setTimeout(resolve, 30)); + while (busy || document.querySelector('[role="dialog"]')) await new Promise(resolve => setTimeout(resolve, 30)); await operation(); }).catch(error => { status.textContent = String(error); }); } @@ -47,7 +61,16 @@ function toolFields(c) { tool.onchange=update; update(); return {tool,account,get:()=>({tool:tool.value,account:account.value || null})}; } -function routeField(c) { return field(c, 'Route', select(snapshot.routes.map(r=>[r.key,r.label]))); } +function routeMatches(route, query) { return `${route.label} ${snapshot.algorithms.find(a=>a.kind===route.kind)?.title||''}`.toLowerCase().includes(query.toLowerCase()); } +function routeField(c) { + const wrapper=node('div');c.append(wrapper); + const route=field(wrapper,'Route',select(snapshot.routes.map(r=>[r.key,`${r.id} · ${snapshot.algorithms.find(a=>a.kind===r.kind)?.title||r.kind}`]))); + if(snapshot.routes.length>8){ + const search=field(wrapper,'Find route',input());search.placeholder='Name, model, or endpoint'; + search.oninput=()=>{const previous=route.value;route.replaceChildren();for(const r of snapshot.routes.filter(r=>routeMatches(r,search.value))){const option=node('option',r.id);option.value=r.key;route.append(option);}if([...route.options].some(o=>o.value===previous))route.value=previous;else {const placeholder=node('option','Choose a matching route');placeholder.value='';route.prepend(placeholder);route.value='';route.onchange?.();}}; + } + return route; +} function routeArgs(s) { const r=snapshot.routes.find(r=>r.key===s.value); if (!r) throw new Error('Choose a route first.'); return {route:r.key,id:r.id}; } let generation; function render() { @@ -57,15 +80,25 @@ function render() { document.querySelector('#title').textContent = {overview:'Overview',routes:'Routes',install:'Install',usage:'Usage',sessions:'Sessions',settings:'Settings'}[page]; document.querySelectorAll('[data-page]').forEach(b=>b.classList.toggle('active',b.dataset.page===page)); if (page==='overview') { - const summary=card('Server and usage'),rows=node('div',undefined,'summary-list'); - for(const line of snapshot.summary)if(line.trim())rows.append(node('p',line.trim(),'summary-row')); - summary.append(rows); + const metrics=snapshot.metrics; + const connection=card('Connection'); + connection.append(node('span',metrics.running?'Connected':'Not responding',metrics.running?'badge connected':'badge')); + connection.append(node('p',metrics.server_url,'endpoint-address')); + const totals=node('div',undefined,'metric-grid');content.append(totals); + for(const [label,period] of [['Today',metrics.today],['Past 7 days',metrics.week]]) { + const panel=node('div',undefined,'card metric');panel.append(node('h3',label),node('strong',period.requests.toLocaleString()),node('span',' model calls'),node('p',`${period.tokens.toLocaleString()} tokens, including routing overhead`,'muted'));totals.append(panel); + } + renderActivity(card('Recent activity')); + const notes=card('Cost estimates'); + let period='';for(const line of snapshot.summary){if(line.startsWith('Today —'))period='Today';if(line.startsWith('This week —'))period='Past 7 days';if(line.includes('Saved'))notes.append(node('p',`${period}: ${line.trim()}`));else if(line.includes('prices')||line.includes('Savings hidden'))notes.append(node('p',line.trim()));} + if(notes.children.length===1)notes.append(node('p','No cost estimate is available yet.','muted')); + const breakdown=node('details');breakdown.append(node('summary','Model breakdown and full usage summary'));for(const line of snapshot.summary)if(line.trim())breakdown.append(node('p',line.trim(),'summary-row'));notes.append(breakdown); const c=card('Routes');c.classList.add('routing-board'); const heading=node('div',undefined,'board-head'); for(const title of ['Route','Routing','Models'])heading.append(node('span',title)); c.append(heading); const list=node('div',undefined,'route-list'); - for(const route of snapshot.routes) { + for(const route of snapshot.routes.slice(0,6)) { const row=node('div',undefined,'route-row board-row'); const models=node('div',undefined,'board-models'); for(const choice of route.choices)models.append(node('p',`${choice.model} · ${choice.client}`)); @@ -73,16 +106,19 @@ function render() { list.append(row); } if(!snapshot.routes.length)list.append(node('p','No routes are configured. Open the server config in Settings to add one.','empty-state')); - c.append(list); + c.append(list);button(actions(c),`Manage ${snapshot.routes.length} routes →`,()=>{page='routes';render();}); } else if (page==='routes') { - for (const route of snapshot.routes) renderRoute(route); + renderRouteBrowser(); if (!snapshot.routes.length) text(card('No routes loaded'),'Check the server config in Settings, then refresh.'); } else if (page==='install') { const intro=card('Connect your coding tools'); intro.append(node('p','Choose a Switchyard route for each coding tool, review the settings below, then install the route.')); - intro.append(node('p','Subscription routes reuse the coding tool’s login. API routes use credentials configured on the Switchyard server. Configure API credentials on the server. Keys entered in Routes only load model lists.')); - intro.append(node('p','Installation backs up the original user settings. Shell variables and project settings may override these defaults.','muted')); - for(const tool of snapshot.tools) renderInstall(tool); + const help=node('details');help.append(node('summary','How accounts and settings work'));help.append(node('p','Subscription routes use the coding tool’s login. API routes use credentials configured on the Switchyard server. Keys entered in Routes only load model lists.'));help.append(node('p','Installation backs up the original settings. Shell variables and project settings may override these defaults.'));intro.append(help); + const tool=field(intro,'Coding tool',select(snapshot.tools.map(t=>[t.tool,`${t.label} · ${t.available?'Detected':'Binary not found'}`]),installView.tool||snapshot.tools[0].tool)); + installView.tool=tool.value; + const panel=node('div');content.append(panel); + const show=()=>{installView.tool=tool.value;installView.account='';installView.file='';panel.replaceChildren();renderInstall(snapshot.tools.find(t=>t.tool===tool.value),panel);}; + tool.onchange=show;renderInstall(snapshot.tools.find(t=>t.tool===tool.value),panel); renderAccounts(); } else if (page==='usage') { const c=card('Model calls'); @@ -118,7 +154,8 @@ function render() { const c=card('New session'); c.append(node('p','Launch a coding tool in a separate Git worktree and Terminal window. Your account’s usage limits apply.')); const tool=toolFields(c),route=routeField(c),project=field(c,'Project folder (absolute path)',input()); - button(actions(c),'Launch session',()=>run({kind:'launch',...tool.get(),...routeArgs(route),project:project.value}),true); + const launch=button(actions(c),'Launch session',()=>run({kind:'launch',...tool.get(),...routeArgs(route),project:project.value}),true); + const selected=()=>{launch.dataset.blocked=String(!route.value);launch.disabled=busy||!route.value;};route.onchange=selected;selected(); renderAccounts(); } else if(page==='settings') { const c=card('Application'); @@ -130,67 +167,96 @@ function render() { c.append(node('p','Closing the window keeps Switchyard running. To exit, choose Quit Switchyard from the menu bar after any operation finishes.')); } } -// Each card previews the selected account and route before the user changes any settings. -function renderInstall(tool) { - const c=card(tool.label);c.dataset.tool=tool.tool; - if(!tool.available)c.append(node('p','The coding tool was not found on this machine. You can configure it now and install the tool later.','muted')); +function renderActivity(c) { + c.append(node('p','Model calls per hour · past 24 hours · recent recorded calls','muted')); + const buckets=snapshot.activity; + const graph=node('div',undefined,'activity-graph');graph.setAttribute('role','img');graph.setAttribute('aria-label',`Hourly model calls, oldest first: ${buckets.join(', ')}`); + const max=Math.max(1,...buckets); + buckets.forEach((count,index)=>{const bar=node('div',undefined,'activity-bar');bar.style.height=`${Math.max(2,count/max*100)}%`;bar.title=`${24-index}–${23-index} hours ago · ${count} calls`;graph.append(bar);});c.append(graph); + const axis=node('div',undefined,'graph-axis');axis.append(node('span','24h ago'),node('span','Now'));c.append(axis); + c.append(node('small',`${buckets.reduce((a,b)=>a+b,0)} recorded calls${snapshot.limited?' · recent history is limited':''}`)); +} +function renderRouteBrowser() { + const c=card('Route library'); + const search=field(c,'Find a route by name, routing method, endpoint, or model',input(routeView.search)); + const count=node('p',undefined,'muted'),layout=node('div',undefined,'route-workspace'),list=node('div',undefined,'route-picker'),detail=node('div',undefined,'route-detail'); + c.append(count,layout);layout.append(list,detail); + const draw=()=>{ + routeView.search=search.value; + const routes=snapshot.routes.filter(r=>routeMatches(r,search.value)); + count.textContent=`${routes.length} of ${snapshot.routes.length} routes`; + list.replaceChildren(); + for(const route of routes){const b=button(list,route.id,()=>{routeView.selected=route.key;draw();});b.classList.toggle('selected',route.key===routeView.selected);b.setAttribute('aria-pressed',String(route.key===routeView.selected));b.append(node('small',snapshot.algorithms.find(a=>a.kind===route.kind)?.title||route.kind));if(drafts.get(route.key)?.dirty)b.append(node('small','Unsaved edits'));} + detail.replaceChildren(); + if(!routes.length){list.append(node('p','No routes match your search.','empty-state'));return;} + const route=routes.find(r=>r.key===routeView.selected)||routes[0];routeView.selected=route.key; + list.querySelectorAll('button').forEach((b,i)=>{const selected=routes[i].key===route.key;b.classList.toggle('selected',selected);b.setAttribute('aria-pressed',String(selected));}); + renderRoute(route,detail); + };search.oninput=draw;draw(); +} +// renderInstall checks each reply's revision before updating the preview or Install button. +function renderInstall(tool, parent) { + const c=card(tool.label);parent.append(c);c.dataset.tool=tool.tool; + c.append(node('p',tool.available?'Coding tool detected.':'Binary not found. You can configure settings before installing the tool.','muted')); const fields=node('div',undefined,'field-grid');c.append(fields); - const account=field(fields,'Settings folder',select([['','Existing user settings'],...tool.accounts.map(name=>[name,`Separate account: ${name}`])])); - const route=routeField(fields); - const comparison=node('div',undefined,'install-comparison');c.append(comparison); - const before=node('div'),after=node('div'); - before.append(node('h4','Current settings'));after.append(node('h4','After installation')); - const current=node('pre',tool.status),proposed=node('pre','Loading preview…');before.append(current);after.append(proposed);comparison.append(before,after); - const routing=node('p',undefined,'muted'),authentication=node('p',undefined,'install-auth');c.append(routing,authentication); - const a=actions(c),install=button(a,'Install route',()=>run({kind:'install',tool:tool.tool,account:account.value||null,...routeArgs(route)}),true); - button(a,'Restore original settings',()=>run({kind:'restore',tool:tool.tool,account:account.value||null})); + const account=field(fields,'Settings location',select([['','Detected user settings'],...tool.accounts.map(name=>[name,`Account: ${name}`])],installView.account)); + const route=routeField(fields);if(installView.route&&snapshot.routes.some(r=>r.key===installView.route))route.value=installView.route; + const file=field(c,tool.tool==='pi'?'Custom models.json path (optional)':'Custom settings file path (optional)',input(installView.file)); + file.placeholder=tool.files?.[0]||'/absolute/path/to/settings'; + c.append(node('small','Use an absolute file path for settings in another location. Leave empty to use the selected settings location. Pi also uses settings.json beside models.json.')); + const comparison=node('div',undefined,'install-diff');c.append(comparison); + const authentication=node('p',undefined,'install-auth');c.append(authentication); + const target=()=>({tool:tool.tool,account:account.value||null,settings_file:file.value||null}); + const a=actions(c),install=button(a,`Install into ${tool.label} →`,()=>run({kind:'install',...target(),...routeArgs(route)}),true); + button(a,'Restore backed-up settings…',()=>confirmAction('Restore coding-tool settings?','Restore the settings saved before the first installation. This changes coding tool settings and keeps your Switchyard routes.','Restore settings',()=>run({kind:'restore',...target()}))); let revision=0; const update=()=>{ - const requested=++revision;install.dataset.blocked='true';install.disabled=true; - proposed.textContent='Loading preview…';authentication.textContent=''; - const chosen=snapshot.routes.find(r=>r.key===route.value); - routing.textContent=chosen?`${snapshot.algorithms.find(a=>a.kind===chosen.kind)?.title || chosen.kind}: ${chosen.choices.map(c=>c.model).join(' → ')}`:''; + installView.account=account.value;installView.route=route.value;installView.file=file.value; + const requested=++revision;install.dataset.blocked='true';install.disabled=true;comparison.replaceChildren(node('p','Loading settings preview…'));authentication.textContent=''; enqueue(async()=>{ if(!c.isConnected||requested!==revision)return; - if(!route.value){proposed.textContent='Add a route in the server config first.';return;} - current.textContent='Loading preview…'; + if(!route.value){comparison.replaceChildren(node('p',snapshot.routes.length?'Choose a route to preview its settings.':'Add a route in the server config first.'));return;} setBusy(true); try { - const result=await invoke('action',{action:{kind:'preview_install',tool:tool.tool,account:account.value||null,...routeArgs(route)}}); + const result=await invoke('action',{action:{kind:'preview_install',...target(),...routeArgs(route)}}); if(!c.isConnected||requested!==revision)return; - current.textContent=result.data.current; - proposed.textContent=result.data.error||result.data.proposed; + comparison.replaceChildren(node('h4','Settings diff · − current / + proposed')); + if(result.data.error)comparison.append(node('p',result.data.error)); + else {for(const change of result.data.changes){comparison.append(node('pre',`${change.file} · ${change.key}`,'diff-heading'));comparison.append(node('pre',`− ${change.before}`,'diff-remove'),node('pre',`+ ${change.after}`,'diff-add'));}if(!result.data.changes.length)comparison.append(node('p','These settings already match the selected route.'));} + if(result.data.current){const current=node('details');current.append(node('summary','Current settings and file locations'),node('pre',result.data.current));comparison.append(current);} authentication.textContent=result.data.authentication||''; install.dataset.blocked=String(Boolean(result.data.error)); - } catch(error) { if(c.isConnected&&requested===revision){current.textContent=String(error);proposed.textContent=String(error);} } + } catch(error) { if(c.isConnected&&requested===revision)comparison.replaceChildren(node('p',String(error))); } finally { setBusy(false); } }); }; - account.onchange=update;route.onchange=update;update(); + account.onchange=update;route.onchange=update;file.oninput=()=>{installView.file=file.value;revision++;install.dataset.blocked='true';install.disabled=true;comparison.replaceChildren(node('p','Finish entering the file path, then press Enter or leave the field to preview.'));};file.onchange=update;file.onkeydown=event=>{if(event.key==='Enter')update();};update(); } function renderAccounts() { - const c=card('Use another subscription account'); - c.append(node('p','An additional account is optional. Use your existing login unless you want a separate subscription account. API routes use the server’s credentials.')); - c.append(node('p','Switchyard opens the Codex CLI or Claude Code login in Terminal and saves the account in a separate settings folder. It does not add an API key or change the account in the Codex app. Select the folder when installing a route or launching a new session.')); - const tool=field(c,'Coding tool',select(snapshot.tools.filter(t=>['codex_cli','claude'].includes(t.tool)).map(t=>[t.tool,t.label]))); - const name=field(c,'Name for the separate account',input()); - button(actions(c),'Sign in to another account…',()=>run({kind:'add_account',tool:tool.value,name:name.value})); + const c=card('Subscription accounts');const disclosure=node('details');disclosure.append(node('summary','Sign in to another subscription account…'));c.append(disclosure);const parent=disclosure; + parent.append(node('p','An additional account is optional. Use your existing login unless you want a separate subscription account. API routes use the server’s credentials.')); + parent.append(node('p','Switchyard opens the Codex CLI or Claude Code login in Terminal and saves the account in a separate settings folder. It does not add an API key or change the account in the Codex app. Select the folder when installing a route or launching a new session.')); + const tool=field(parent,'Coding tool',select(snapshot.tools.filter(t=>['codex_cli','claude'].includes(t.tool)).map(t=>[t.tool,t.label]))); + const name=field(parent,'Name for the separate account',input()); + button(actions(parent),'Sign in to another account…',()=>run({kind:'add_account',tool:tool.value,name:name.value})); } // Tiered roles keep their models across algorithms; roles without tiers keep their positions. function roleChoice(draft, route, role, index) { return (role.tier && draft.memory.get(role.tier)) || - (draft.algorithm === route.kind && draft.choices[index]) || + ((draft.algorithm === route.kind || draft.loadedAlgorithm === draft.algorithm) && draft.choices[index]) || route.choices[0] || {client:snapshot.clients[0]?.name || '',model:''}; } -function renderRoute(route) { - const c=card(route.id); +function renderRoute(route, parent) { + const c=card(route.id);parent.append(c); if(route.generated)c.append(node('p',`This route belongs to a generated block: ${route.generated}. Its owner may replace these edits.`)); - if(!route.editable){c.append(node('p','Edit this route in the server config.'));return;} + const remove=()=>confirmAction(`Delete route “${route.id}”?`,'Remove this route from the server config. Targets and coding tool settings are kept. The config will be backed up before saving.','Delete route',()=>run({kind:'remove',generation,route:route.key,id:route.id})); + if(!route.editable){c.append(node('p','Edit this route in the server config.'));button(actions(c),'Delete route…',remove).classList.add('danger');return;} let draft=drafts.get(route.key); if(!draft){draft={algorithm:snapshot.algorithms.some(a=>a.kind===route.kind)?route.kind:snapshot.algorithms[0].kind,choices:route.choices.map(c=>({...c})),memory:new Map()}; route.tiers?.forEach((tier,index)=>{if(tier)draft.memory.set(tier, {...route.choices[index]});});drafts.set(route.key,draft);} const algorithm=field(c,'Routing algorithm',select(snapshot.algorithms.map(a=>[a.kind,a.title]),draft.algorithm)); const description=node('p',undefined,'description'),roles=node('div',undefined,'role-fields'); c.append(description,roles); - const saveChoices=()=>{roles.querySelectorAll('[data-role]').forEach(row=>{const selects=row.querySelectorAll('select,input'); const choice={client:selects[0].value,model:selects[1].value};draft.choices[Number(row.dataset.role)]=choice;if(row.dataset.tier)draft.memory.set(row.dataset.tier,choice);});}; + const editState=node('p',draft.dirty?'Unsaved edits':'Saved route','muted');c.append(editState); + const saveChoices=()=>{draft.dirty=true;editState.textContent='Unsaved edits';roles.querySelectorAll('[data-role]').forEach(row=>{const selects=row.querySelectorAll('select,input'); const choice={client:selects[0].value,model:selects[1].value};draft.choices[Number(row.dataset.role)]=choice;if(row.dataset.tier)draft.memory.set(row.dataset.tier,choice);});}; const draw=async()=>{ const result=await run({kind:'editor',generation,route:route.key,algorithm:draft.algorithm},false); if(!result)return; description.textContent=result.message; roles.replaceChildren(); @@ -208,12 +274,13 @@ function renderRoute(route) { if(endpoint?.accepts_key)row.append(details); if(endpoint?.note)row.append(node('p',endpoint.note)); roles.append(row); - });draft.choices.length=result.data.roles.length; + });draft.choices.length=result.data.roles.length;draft.loadedAlgorithm=draft.algorithm; }; algorithm.onchange=()=>{saveChoices();draft.algorithm=algorithm.value;draw();}; const a=actions(c); button(a,'Save and restart',async()=>{saveChoices();const result=await run({kind:'apply',generation,route:route.key,algorithm:draft.algorithm,choices:draft.choices});if(result){drafts.delete(route.key);render();}},true); - button(a,'Discard changes',()=>{drafts.delete(route.key);render();}); + button(a,'Revert unsaved edits',()=>{drafts.delete(route.key);render();}); + button(a,'Delete route…',remove).classList.add('danger'); // Each route waits for the shared operation to finish before loading its editor roles. enqueue(async()=>{if(page==='routes'&&c.isConnected)await draw();}); } @@ -225,6 +292,7 @@ window.addEventListener?.('switchyard-page', event=>{ if(!snapshot)refresh(); }); async function poll() { + if(document.querySelector('[role="dialog"]')){setTimeout(poll,(snapshot?.refresh_seconds||30)*1000);return;} if(page==='overview'||page==='usage')await refresh(); else if(!busy) { setBusy(true); diff --git a/crates/switchyard-menubar/ui/index.html b/crates/switchyard-menubar/ui/index.html index 027ea5103d..f1ddf275e1 100644 --- a/crates/switchyard-menubar/ui/index.html +++ b/crates/switchyard-menubar/ui/index.html @@ -13,7 +13,7 @@
From 46c089f7da5f27bc7d909f7923787897bb13b099 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 11:14:28 -0700 Subject: [PATCH 09/39] fix(macos): reject dots in Codex profile names Signed-off-by: Elyas Mehtabuddin --- scripts/macos/common.sh | 4 ++-- tests/test_macos_install.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/macos/common.sh b/scripts/macos/common.sh index 00785ba671..086d55fe7e 100644 --- a/scripts/macos/common.sh +++ b/scripts/macos/common.sh @@ -46,8 +46,8 @@ codex_config_uses_switchyard() { SY_PROFILE="${SY_PROFILE-sy}" SY_MODEL="${SY_MODEL-composite-gpt-6-sol-gpt-6-luna}" -if [[ ! "$SY_PROFILE" =~ ^[a-zA-Z0-9][a-zA-Z0-9._-]*$ ]] || (( ${#SY_PROFILE} > 128 )); then - say "SY_PROFILE must be a short profile name containing letters, digits, dots, underscores, or hyphens." >&2 +if [[ ! "$SY_PROFILE" =~ ^[a-zA-Z0-9][a-zA-Z0-9_-]*$ ]] || (( ${#SY_PROFILE} > 128 )); then + say "SY_PROFILE must start with a letter or digit and contain only letters, digits, underscores, or hyphens, up to 128 characters." >&2 exit 2 fi if [[ -z "$SY_MODEL" || "$SY_MODEL" =~ [[:cntrl:]] ]]; then diff --git a/tests/test_macos_install.py b/tests/test_macos_install.py index bc65617309..3a9767d32b 100644 --- a/tests/test_macos_install.py +++ b/tests/test_macos_install.py @@ -363,7 +363,7 @@ def test_named_profile_keeps_route_and_update_settings(setup): assert not profile.exists() -@pytest.mark.parametrize("name", ["../escape", "", "a/b", "a\nname", "x" * 129]) +@pytest.mark.parametrize("name", ["../escape", "", "a/b", "a\nname", "team.dev", "x" * 129]) def test_invalid_profile_name_rejects_before_install(setup, name): _, home, switchyard_home, env = setup env["SY_PROFILE"] = name From 5778c885c12cbf353ea79030ac7c35e431850eff Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 11:33:55 -0700 Subject: [PATCH 10/39] fix(sessions): preserve Claude default login environment Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/README.md | 39 +++++++++++++----- crates/switchyard-menubar/src/sessions.rs | 48 ++++++++++++++++------- 2 files changed, 64 insertions(+), 23 deletions(-) diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index 3de793874e..9b6e0b5066 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -7,11 +7,10 @@ the terminal app uses Ratatui. ## Install and update -Run these commands from the repository root: +Install from the repository root: ```sh make install-macos -make uninstall-macos ``` The installer builds the app and server, installs `~/Applications/Switchyard.app`, @@ -19,9 +18,29 @@ and loads two per-user LaunchAgents. It signs the app ad hoc for local use; the app has no Developer ID signature or notarization. Reinstalling keeps existing server settings, prices, accounts, and log history. -The installer writes `~/.codex/sy.config.toml` for `codex --profile sy` and keeps -`~/.codex/config.toml` unchanged. Set `SY_PROFILE` to choose a descriptive profile -name and `SY_MODEL` to choose an existing public route ID. New installs use +By default, the source installer writes `~/.codex/sy.config.toml` for +`codex -p sy` and keeps `~/.codex/config.toml` unchanged. Set `SY_PROFILE` to +choose another profile name. The installer writes `$SY_PROFILE.config.toml` in +the Codex config directory. For example: + +```sh +export SY_PROFILE=stage-gpt-sonnet +make install-macos +codex -p "$SY_PROFILE" +``` + +Remove the app and selected profile with `make uninstall-macos`. For a named +profile, pass the same name used during installation: + +```sh +SY_PROFILE=stage-gpt-sonnet make uninstall-macos +``` + +Use the same `SY_HOME` and `CODEX_HOME` overrides if you set them for installation. +When `SY_PROFILE` is unset, uninstall selects `sy`; it does not select a previously +installed named profile. + +Set `SY_MODEL` to choose an existing public route ID. New installs use `composite-gpt-6-sol-gpt-6-luna`. Existing server configs stay saved, so set `SY_MODEL` to one of their routes when installing with a custom config. The profile leaves `approval_policy` and `sandbox_mode` to your existing Codex @@ -110,10 +129,12 @@ tool. An optional absolute file path selects settings in another location; for Pi, choose `models.json`, and the app uses `settings.json` beside it. A custom file cannot be combined with a saved account. -Codex CLI gets `sy.config.toml` for `codex -p sy`. The Codex app option changes -the defaults in `config.toml` for both the app and CLI. Claude Code gets -environment settings in `settings.json`. Pi gets a custom provider in `models.json` and defaults in -`settings.json`. Unrelated settings remain. +The app's **Install** page defaults to `sy.config.toml` for Codex CLI and +`codex -p sy`. The source installer's `SY_PROFILE` choice does not change this +destination. Select a custom file to update another profile. The Codex app option +changes the defaults in `config.toml` for both the app and CLI. Claude Code gets +environment settings in `settings.json`. Pi gets a custom provider in +`models.json` and defaults in `settings.json`. Unrelated settings remain. The app backs up each original file as `.switchyard-original`. If a file did not exist, `.switchyard-original-missing` records its absence. diff --git a/crates/switchyard-menubar/src/sessions.rs b/crates/switchyard-menubar/src/sessions.rs index 231d49b6f3..01a048871b 100644 --- a/crates/switchyard-menubar/src/sessions.rs +++ b/crates/switchyard-menubar/src/sessions.rs @@ -136,7 +136,10 @@ pub fn launch( Harness::CodexApp => return Err("Choose a CLI tool.".into()), }; let default_files = harness::paths(tool); - let account = account.or_else(|| default_files[0].parent()); + let account = account.or_else(|| match tool { + Harness::Claude if std::env::var_os("CLAUDE_CONFIG_DIR").is_none() => None, + _ => default_files[0].parent(), + }); let account_env = match (tool, account) { (Harness::CodexCli, Some(path)) => { format!("export CODEX_HOME={}\n", quote(&path.display().to_string())) @@ -261,8 +264,9 @@ mod tests { .contains("session-fixture") ); } - // The subprocess isolates HOME and PATH. Its Terminal stub supplies a - // conflicting login to check that the generated script selects the account. + // The subprocess isolates HOME and PATH. + // The Terminal stub injects a conflicting directory when the script must select one. + // Claude's default case requires an unset CLAUDE_CONFIG_DIR, not an explicit ~/.claude. #[cfg(unix)] #[test] fn generated_sessions_use_explicit_accounts_without_changing_user_defaults() { @@ -287,11 +291,13 @@ mod tests { .expect("launch"); return; } - for (name, named) in [ - ("codex", false), - ("codex", true), - ("claude", false), - ("claude", true), + for (name, named, inherited_dir) in [ + ("codex", false, true), + ("codex", true, true), + ("claude", false, true), + ("claude", true, true), + ("claude", false, false), + ("claude", true, false), ] { let fixture = tempfile::tempdir().expect("fixture"); let home = fixture.path().join("home"); @@ -336,7 +342,12 @@ mod tests { let output = fixture.path().join("arguments"); let captured = fixture.path().join("session.command"); let open = bin.join("open"); - std::fs::write(&open, format!("#!/bin/bash\ncp -- \"$1\" {}\nexport CODEX_HOME=wrong-terminal-login CLAUDE_CONFIG_DIR=wrong-terminal-login ANTHROPIC_AUTH_TOKEN=wrong-token\nbash \"$1\"\n",quote(&captured.display().to_string()))).expect("open"); + let terminal_claude = if inherited_dir || named { + "export CLAUDE_CONFIG_DIR=wrong-terminal-login" + } else { + "unset CLAUDE_CONFIG_DIR" + }; + std::fs::write(&open, format!("#!/bin/bash\ncp -- \"$1\" {}\nexport CODEX_HOME=wrong-terminal-login ANTHROPIC_AUTH_TOKEN=wrong-token\n{terminal_claude}\nbash \"$1\"\n",quote(&captured.display().to_string()))).expect("open"); let tool = bin.join(name); std::fs::write(&tool, format!("#!/bin/bash\nprintf '%s\\n' \"${{CODEX_HOME:-}}\" \"${{CLAUDE_CONFIG_DIR:-}}\" \"${{ANTHROPIC_AUTH_TOKEN:-}}\" \"$@\" > {}\n", quote(&output.display().to_string()))).expect("tool"); for path in [&open, &tool] { @@ -351,6 +362,9 @@ mod tests { if named { child.env("SWITCHYARD_SESSION_ACCOUNT", &account); } + if !inherited_dir { + child.env_remove("CLAUDE_CONFIG_DIR"); + } let result = child.output().expect("child"); assert!( result.status.success(), @@ -360,17 +374,23 @@ mod tests { ); let arguments = std::fs::read_to_string(output).expect("arguments"); let lines: Vec<_> = arguments.lines().collect(); - let expected = if named { &account } else { &default }; - assert_eq!( - lines[usize::from(name == "claude")], - expected.to_str().expect("path") - ); + let expected = if named { + account.to_str().expect("path") + } else if inherited_dir { + default.to_str().expect("path") + } else { + "" + }; + assert_eq!(lines[usize::from(name == "claude")], expected); if name == "claude" { assert_eq!(lines[2], ""); } assert!(arguments.contains("route'$(literal)")); let script = std::fs::read_to_string(captured).expect("script"); assert!(script.contains("x-switchyard-session-id")); + if name == "claude" && !named && !inherited_dir { + assert!(!script.contains("export CLAUDE_CONFIG_DIR=")); + } assert_eq!( std::fs::read_to_string(default.join("settings.json")).expect("settings"), "{\"user\":true}" From d59fbdb848a168dca7a9528fe9c9d99a1b0682d6 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 11:38:55 -0700 Subject: [PATCH 11/39] fix(docs): name the default route in profile examples Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index 9b6e0b5066..07522440c9 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -24,7 +24,7 @@ choose another profile name. The installer writes `$SY_PROFILE.config.toml` in the Codex config directory. For example: ```sh -export SY_PROFILE=stage-gpt-sonnet +export SY_PROFILE=composite-gpt-6-sol-gpt-6-luna make install-macos codex -p "$SY_PROFILE" ``` @@ -33,7 +33,7 @@ Remove the app and selected profile with `make uninstall-macos`. For a named profile, pass the same name used during installation: ```sh -SY_PROFILE=stage-gpt-sonnet make uninstall-macos +SY_PROFILE=composite-gpt-6-sol-gpt-6-luna make uninstall-macos ``` Use the same `SY_HOME` and `CODEX_HOME` overrides if you set them for installation. From 4e90bdbede901c312b81f5b2a1ae1a34d2edf542 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 12:27:42 -0700 Subject: [PATCH 12/39] chore(app): simplify control flow and prune redundant tests Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/src/accounts.rs | 13 +- crates/switchyard-menubar/src/app.rs | 58 --- crates/switchyard-menubar/src/config.rs | 86 ----- crates/switchyard-menubar/src/controller.rs | 50 ++- crates/switchyard-menubar/src/harness.rs | 121 ++----- crates/switchyard-menubar/src/health.rs | 55 --- crates/switchyard-menubar/src/history.rs | 79 ++--- crates/switchyard-menubar/src/main.rs | 18 +- crates/switchyard-menubar/src/models.rs | 270 +------------- crates/switchyard-menubar/src/pricing.rs | 140 +++----- crates/switchyard-menubar/src/rollup.rs | 134 +------ crates/switchyard-menubar/src/server.rs | 7 - .../switchyard-menubar/src/server_config.rs | 334 ++---------------- crates/switchyard-menubar/src/sessions.rs | 36 -- crates/switchyard-menubar/src/summary.rs | 278 +-------------- crates/switchyard-menubar/src/tui.rs | 97 ++--- tests/test_macos_install.py | 79 +---- 17 files changed, 248 insertions(+), 1607 deletions(-) delete mode 100644 crates/switchyard-menubar/src/app.rs diff --git a/crates/switchyard-menubar/src/accounts.rs b/crates/switchyard-menubar/src/accounts.rs index 9d66bf4af9..2a82f7880c 100644 --- a/crates/switchyard-menubar/src/accounts.rs +++ b/crates/switchyard-menubar/src/accounts.rs @@ -133,18 +133,7 @@ mod tests { } assert!(add(Harness::Pi, "valid").is_err()); } - #[test] - fn selected_account_changes_only_the_owned_config_destination() { - let account = Path::new("/tmp/named-account"); - assert_eq!( - config_paths(Harness::CodexCli, Some(account)), - vec![account.join("sy.config.toml")] - ); - assert_eq!( - config_paths(Harness::Claude, Some(account)), - vec![account.join("settings.json")] - ); - } + #[test] fn a_login_setup_failure_removes_only_its_empty_directory() { let root = tempfile::tempdir().expect("directory"); diff --git a/crates/switchyard-menubar/src/app.rs b/crates/switchyard-menubar/src/app.rs deleted file mode 100644 index 145fd0a245..0000000000 --- a/crates/switchyard-menubar/src/app.rs +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -//! This module reads the routing log, checks the server, and builds usage summary rows. - -use chrono::Local; - -use crate::config::Config; -use crate::health::{ServerStatus, probe}; -use crate::rollup; -use crate::summary::{Row, build}; - -/// This function reads new log entries and returns the server status and menu rows. -pub fn refresh(config: &Config, log: &mut rollup::Reader) -> (ServerStatus, Vec) { - let usage = log - .read(&config.routing_log, Local::now().date_naive()) - .unwrap_or_else(|error| { - eprintln!( - "switchyard-menubar: read {}: {error}", - config.routing_log.display() - ); - rollup::Usage::default() - }); - let status = probe(&config.server_url); - (status, build(status, &usage, config)) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn reads_the_configured_log() { - let dir = tempfile::tempdir().expect("tempdir"); - let path = dir.path().join("routing.jsonl"); - let ts = Local::now().to_rfc3339(); - std::fs::write( - &path, - format!( - r#"{{"ts":"{ts}","model":"luna","tier":"","prompt_tokens":1000,"cached_tokens":0,"completion_tokens":100,"reasoning_tokens":0}}"# - ) + "\n", - ) - .expect("write log"); - - let (_, rows) = refresh( - &Config { - routing_log: path, - ..Config::default() - }, - &mut rollup::Reader::default(), - ); - - assert!( - rows.contains(&Row::Label("Today — 1 request · 1100 tokens".to_string())), - "unexpected rows: {rows:?}" - ); - } -} diff --git a/crates/switchyard-menubar/src/config.rs b/crates/switchyard-menubar/src/config.rs index 4aac3ee8b8..3d2b5a231c 100644 --- a/crates/switchyard-menubar/src/config.rs +++ b/crates/switchyard-menubar/src/config.rs @@ -76,94 +76,8 @@ pub fn validate_toml_file(path: &Path) -> Result<(), String> { /// where `~` is the natural way to spell a home path. pub fn expand_home(path: &Path) -> PathBuf { let home = std::env::var_os("HOME").map_or_else(|| PathBuf::from("."), PathBuf::from); - expand_under(path, &home) -} - -fn expand_under(path: &Path, home: &Path) -> PathBuf { match path.strip_prefix("~") { Ok(rest) => home.join(rest), Err(_) => path.to_path_buf(), } } - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn reads_settings_and_prices() { - let dir = tempfile::tempdir().expect("tempdir"); - let path = dir.path().join("menubar.toml"); - std::fs::write( - &path, - r#" -server_url = "http://127.0.0.1:9000" -baseline_model = "sol" - -[prices.luna] -input_per_mtok = 0.25 -cached_input_per_mtok = 0.025 -output_per_mtok = 2.0 -"#, - ) - .expect("write settings"); - - let config = Config::load(&path).expect("load"); - - assert_eq!(config.server_url, "http://127.0.0.1:9000"); - assert_eq!(config.baseline_model, "sol"); - assert_eq!(config.prices["luna"].cached_input_per_mtok, Some(0.025)); - assert_eq!(config.refresh_seconds, 30, "unset keys keep their default"); - } - - #[test] - fn a_missing_file_yields_defaults() { - let dir = tempfile::tempdir().expect("tempdir"); - - let config = Config::load(&dir.path().join("absent.toml")).expect("load"); - - assert_eq!(config.server_url, "http://127.0.0.1:4123"); - assert!(config.prices.is_empty()); - let empty = dir.path().join("empty.toml"); - std::fs::write(&empty, "").expect("write settings"); - let loaded = Config::load(&empty).expect("load empty settings"); - assert_eq!(config.routing_log, loaded.routing_log); - assert_eq!(config.config_file, loaded.config_file); - } - - #[test] - fn rejects_unparsable_settings() { - let dir = tempfile::tempdir().expect("tempdir"); - let path = dir.path().join("menubar.toml"); - std::fs::write(&path, "server_url = ").expect("write settings"); - - assert!(Config::load(&path).is_err()); - } - - #[test] - fn validates_arbitrary_toml_files() { - let dir = tempfile::tempdir().expect("tempdir"); - let path = dir.path().join("codex.toml"); - std::fs::write(&path, "[model_providers.\"sy\"]\nname = \"Switchyard\"\n") - .expect("write config"); - - assert!(validate_toml_file(&path).is_ok()); - - std::fs::write(&path, "[model_providers.\"sy\"]\nname = ").expect("write config"); - assert!(validate_toml_file(&path).is_err()); - } - - #[test] - fn expands_a_leading_tilde() { - let home = Path::new("/Users/example"); - - assert_eq!( - expand_under(Path::new("~/.switchyard/routing.jsonl"), home), - PathBuf::from("/Users/example/.switchyard/routing.jsonl") - ); - assert_eq!( - expand_under(Path::new("/tmp/routing.jsonl"), home), - PathBuf::from("/tmp/routing.jsonl") - ); - } -} diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index 8e27cd2a81..f2f86b6d0a 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -10,7 +10,6 @@ use crate::{ history, models, rollup, server, server_config::{ALGORITHMS, Choice, Route, ServerConfig}, sessions, - summary::Row, }; use serde::{Deserialize, Serialize}; use serde_json::{Value, json}; @@ -140,13 +139,6 @@ impl Controller { let metrics = json!({"server_url":self.config.server_url,"running":server_status == crate::health::ServerStatus::Running, "today":{"requests":usage.today.requests(),"tokens":usage.today.tokens()}, "week":{"requests":usage.week.requests(),"tokens":usage.week.tokens()}}); - let summary: Vec<_> = summary - .into_iter() - .map(|r| match r { - Row::Label(s) => s, - Row::Separator => String::new(), - }) - .collect(); let mut routes = Vec::new(); let mut clients = Vec::new(); match self.routes() { @@ -186,6 +178,7 @@ impl Controller { } pub fn dispatch(&mut self, action: Action) -> Result { self.reload()?; + let preview = matches!(action, Action::PreviewInstall { .. }); match action { Action::Editor { generation, @@ -283,22 +276,8 @@ impl Controller { route, id, settings_file, - } => { - let files = install_paths(tool, account.as_deref(), settings_file.as_deref())?; - let config = self.routes()?; - let route = current_route(&config, &route, Some(&id))?; - - let current = harness::inspect(tool, &files)?; - let preview = login_mode(tool, &config, &route).and_then(|login| { - harness::preview(tool, &files, &self.config.server_url, &route.id, login) - }); - Ok(Reply { - message: String::new(), - data: preview - .unwrap_or_else(|error| json!({"current": current, "error": error})), - }) } - Action::Install { + | Action::Install { tool, account, route, @@ -308,9 +287,28 @@ impl Controller { let files = install_paths(tool, account.as_deref(), settings_file.as_deref())?; let config = self.routes()?; let route = current_route(&config, &route, Some(&id))?; - let login = login_mode(tool, &config, &route)?; - harness::install(tool, &files, &self.config.server_url, &route.id, login) - .map(Reply::message) + let login = login_mode(tool, &config, &route); + if preview { + let current = harness::inspect(tool, &files)?; + let data = login + .and_then(|login| { + harness::preview( + tool, + &files, + &self.config.server_url, + &route.id, + login, + ) + }) + .unwrap_or_else(|error| json!({"current": current, "error": error})); + Ok(Reply { + message: String::new(), + data, + }) + } else { + harness::install(tool, &files, &self.config.server_url, &route.id, login?) + .map(Reply::message) + } } Action::Restore { tool, diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs index 59cce613ec..bd8d625828 100644 --- a/crates/switchyard-menubar/src/harness.rs +++ b/crates/switchyard-menubar/src/harness.rs @@ -762,9 +762,9 @@ mod tests { vec![dir.path().join("config")] }; let original = if matches!(tool, Harness::CodexCli | Harness::CodexApp) { - "model='before'\n" + "# user comment\nmodel='before'\nsandbox_mode='workspace-write'\n" } else { - "{}" + "{\"custom\":true}" }; std::fs::write(&files[0], original).expect("settings"); let result = preview(*tool, &files, "http://localhost:4123", "new-route", false) @@ -785,6 +785,37 @@ mod tests { result["proposed"], inspect(*tool, &files).expect("installed") ); + install( + *tool, + &files, + "http://localhost:4123", + "refreshed-route", + false, + ) + .expect("refresh"); + let installed = read(&files[0]).expect("settings"); + assert!(installed.contains("refreshed-route")); + assert!( + installed.contains(if matches!(tool, Harness::CodexCli | Harness::CodexApp) { + "sandbox_mode" + } else { + "custom" + }) + ); + assert_eq!(read(&backup_path(&files[0])).expect("backup"), original); + restore(&files).expect("restore"); + assert_eq!(read(&files[0]).expect("original"), original); + if *tool == Harness::Pi { + assert!(!files[1].exists()); + } + std::fs::write(&files[0], original.replace("before", "new-user-model")) + .expect("user edit"); + install(*tool, &files, "http://localhost:4123", "again", false).expect("reinstall"); + restore(&files).expect("restore again"); + assert_eq!( + read(&files[0]).expect("new original"), + original.replace("before", "new-user-model") + ); assert!( result["authentication"] .as_str() @@ -842,78 +873,6 @@ mod tests { .contains("subscription login") ); } - #[test] - fn preserves_user_fields_refreshes_and_restores() { - let dir = tempfile::tempdir().expect("directory"); - for (tool, _) in HARNESSES { - let files = if *tool == Harness::Pi { - vec![ - dir.path().join("models.json"), - dir.path().join("settings.json"), - ] - } else { - vec![dir.path().join(format!("{tool:?}.config"))] - }; - let original = if matches!(tool, Harness::CodexCli | Harness::CodexApp) { - "# user comment\nmodel = 'old'\nsandbox_mode = 'workspace-write'\n" - } else { - "{\"custom\":true}" - }; - std::fs::write(&files[0], original).expect("settings"); - install(*tool, &files, "http://127.0.0.1:4123", "route-a", false).expect("install"); - install(*tool, &files, "http://127.0.0.1:4123", "route-b", false).expect("refresh"); - let current = read(&files[0]).expect("read"); - assert!(current.contains("route-b")); - assert!( - current.contains(if matches!(tool, Harness::CodexCli | Harness::CodexApp) { - "sandbox_mode" - } else { - "custom" - }) - ); - assert_eq!(read(&backup_path(&files[0])).expect("backup"), original); - restore(&files).expect("restore"); - assert_eq!(read(&files[0]).expect("restored"), original); - } - } - #[test] - fn repeated_install_restore_cycles_capture_new_user_settings() { - for present in [false, true] { - let dir = tempfile::tempdir().expect("directory"); - let path = dir.path().join("settings.json"); - let files = std::slice::from_ref(&path); - if present { - std::fs::write(&path, "{\"original\":true}").expect("original"); - } - install( - Harness::Claude, - files, - "http://localhost:4123", - "route", - false, - ) - .expect("install"); - let message = restore(files).expect("restore"); - assert!(message.contains("switchyard-before-restore-")); - assert_eq!(path.exists(), present); - assert!(!backup_path(&path).exists()); - assert!(!absent_path(&path).exists()); - std::fs::write(&path, "{\"new_user_setting\":true}").expect("user edit"); - install( - Harness::Claude, - files, - "http://localhost:4123", - "another", - false, - ) - .expect("reinstall"); - restore(files).expect("second restore"); - assert_eq!( - read(&path).expect("settings"), - "{\"new_user_setting\":true}" - ); - } - } #[test] fn a_pending_restore_blocks_install_and_retires_stale_backups_on_retry() { @@ -1142,20 +1101,6 @@ mod tests { assert!(doc["model_providers"]["sy"].get("env_key").is_none()); } - #[test] - fn restoring_an_absent_original_removes_the_installed_settings() { - let dir = tempfile::tempdir().expect("directory"); - let files = vec![ - dir.path().join("models.json"), - dir.path().join("settings.json"), - ]; - install(Harness::Pi, &files, "http://localhost:4123", "route", false).expect("install"); - install(Harness::Pi, &files, "http://localhost:4123", "other", false).expect("refresh"); - restore(&files).expect("restore"); - assert!(files.iter().all(|path| !path.exists())); - assert!(files.iter().all(|path| !absent_path(path).exists())); - } - #[test] fn inspection_omits_url_secrets_and_invalid_toml_source() { let dir = tempfile::tempdir().expect("directory"); diff --git a/crates/switchyard-menubar/src/health.rs b/crates/switchyard-menubar/src/health.rs index c95c8f6be6..a8cb9345ab 100644 --- a/crates/switchyard-menubar/src/health.rs +++ b/crates/switchyard-menubar/src/health.rs @@ -53,58 +53,3 @@ fn authority(server_url: &str) -> String { authority } - -#[cfg(test)] -mod tests { - use super::*; - use std::net::TcpListener; - - /// This helper serves one hardcoded response, then closes. - fn serve(response: &'static str) -> String { - let listener = TcpListener::bind("127.0.0.1:0").expect("bind"); - let port = listener.local_addr().expect("addr").port(); - std::thread::spawn(move || { - if let Ok((mut stream, _)) = listener.accept() { - let _ = stream.write_all(response.as_bytes()); - } - }); - format!("http://127.0.0.1:{port}") - } - - #[test] - fn reports_running_only_on_a_200() { - let ok = serve("HTTP/1.1 200 OK\r\n\r\n"); - let down = serve("HTTP/1.1 503 Service Unavailable\r\n\r\n"); - - assert_eq!(probe(&ok), ServerStatus::Running); - assert_eq!(probe(&down), ServerStatus::Stopped); - } - - #[test] - fn reports_stopped_when_nothing_is_listening() { - // Binding then dropping yields a port with no listener. - let listener = TcpListener::bind("127.0.0.1:0").expect("bind"); - let port = listener.local_addr().expect("addr").port(); - drop(listener); - - assert_eq!( - probe(&format!("http://127.0.0.1:{port}")), - ServerStatus::Stopped - ); - } - - #[test] - fn defaults_the_port_after_an_ipv6_literal() { - assert_eq!(authority("http://[::1]/v1"), "[::1]:4123"); - assert_eq!(authority("http://[::1]:9000/v1"), "[::1]:9000"); - assert_eq!(authority("http://localhost"), "localhost:4123"); - } - - #[test] - fn accepts_a_url_with_a_path_or_no_port() { - let ok = serve("HTTP/1.1 200 OK\r\n\r\n"); - - assert_eq!(probe(&format!("{ok}/v1")), ServerStatus::Running); - assert_eq!(probe("http://localhost"), ServerStatus::Stopped); - } -} diff --git a/crates/switchyard-menubar/src/history.rs b/crates/switchyard-menubar/src/history.rs index 837234cc50..9786fbcc73 100644 --- a/crates/switchyard-menubar/src/history.rs +++ b/crates/switchyard-menubar/src/history.rs @@ -127,29 +127,6 @@ impl History { #[cfg(test)] mod tests { use super::*; - #[test] - fn activity_uses_real_hour_buckets_and_ignores_invalid_or_outside_times() { - let now = chrono::DateTime::parse_from_rfc3339("2026-10-09T12:00:00Z") - .expect("date") - .with_timezone(&chrono::Utc); - let entries = [ - "2026-10-09T11:59:00Z", - "2026-10-09T11:00:00Z", - "2026-10-08T12:00:00Z", - "2026-10-09T13:00:00Z", - "2026-10-09T12:00:00.500Z", - "bad", - ] - .iter() - .map(|time| { - serde_json::from_value(serde_json::json!({"ts":time,"model":"m"})).expect("entry") - }) - .collect::>(); - let buckets = hourly_calls(&entries, now); - assert_eq!(buckets[23], 1); - assert_eq!(buckets[22], 1); - assert_eq!(buckets.iter().sum::(), 2); - } #[test] fn groups_recorded_ids_and_never_displays_content() { @@ -167,36 +144,36 @@ mod tests { ); assert!(history.entries[1].session_id.is_none()); } + #[test] - fn reads_a_bounded_tail_and_keeps_only_recent_records() { - let dir = tempfile::tempdir().expect("directory"); - let path = dir.path().join("log"); - let line = "{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"m\"}\n"; - std::fs::write(&path, line.repeat(MAX_RECORDS + 1)).expect("log"); - let history = load(&path).expect("load"); + fn retains_recent_records_and_complete_byte_limited_records() { + let directory = tempfile::tempdir().expect("directory"); + let path = directory.path().join("log"); + let line = b"{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"recent\"}\n"; + let mut contents = b"{\"ts\":\"2026-10-08T11:00:00Z\",\"model\":\"old\"}\n".to_vec(); + contents.extend(line.repeat(MAX_RECORDS)); + std::fs::write(&path, contents).expect("record-limited log"); + let history = load(&path).expect("record-limited history"); assert_eq!(history.entries.len(), MAX_RECORDS); + assert!(history.entries.iter().all(|entry| entry.model == "recent")); assert!(history.limited); - let mut contents = vec![b'x'; MAX_BYTES as usize]; - contents.extend_from_slice(b"\n"); - contents.extend_from_slice(line.as_bytes()); - std::fs::write(&path, contents).expect("large log"); - let history = load(&path).expect("load tail"); - assert_eq!(history.entries.len(), 1); - assert!(history.limited); - } - // The cutoff falls after a newline, so the first complete record must stay. - #[test] - fn a_byte_limit_aligned_to_a_record_keeps_that_record() { - let dir = tempfile::tempdir().expect("directory"); - let path = dir.path().join("log"); - let line = b"{\"ts\":\"2026-10-08T12:00:00Z\",\"model\":\"first\"}\n"; - let mut contents = b"discarded prefix\n".to_vec(); - contents.extend_from_slice(line); - contents.resize(contents.len() + MAX_BYTES as usize - line.len(), b' '); - std::fs::write(&path, contents).expect("log"); - let history = load(&path).expect("load"); - assert_eq!(history.entries.len(), 1); - assert_eq!(history.entries[0].model, "first"); - assert!(history.limited); + + for prefix in [ + b"discarded prefix\n".as_slice(), + b"partial prefix".as_slice(), + ] { + let mut contents = prefix.to_vec(); + contents.extend_from_slice(line); + contents.resize(prefix.len() + MAX_BYTES as usize, b' '); + std::fs::write(&path, contents).expect("byte-limited log"); + let history = load(&path).expect("byte-limited history"); + assert!(history.limited); + if prefix.ends_with(b"\n") { + assert_eq!(history.entries.len(), 1); + assert_eq!(history.entries[0].model, "recent"); + } else { + assert!(history.entries.is_empty()); + } + } } } diff --git a/crates/switchyard-menubar/src/main.rs b/crates/switchyard-menubar/src/main.rs index 721e750d94..b2c49de971 100644 --- a/crates/switchyard-menubar/src/main.rs +++ b/crates/switchyard-menubar/src/main.rs @@ -8,7 +8,6 @@ //! restart the server. mod accounts; -mod app; mod config; mod controller; #[cfg(target_os = "macos")] @@ -90,12 +89,17 @@ fn main() -> ExitCode { // The default mode prints a summary on platforms without the macOS desktop app. // The --tui option starts the terminal app on those platforms. if print_only || (!terminal && !cfg!(target_os = "macos")) { - let (_, rows) = app::refresh(&config, &mut rollup::Reader::default()); - for row in rows { - match row { - summary::Row::Separator => println!(), - summary::Row::Label(text) => println!("{text}"), - } + let usage = rollup::Reader::default() + .read(&config.routing_log, chrono::Local::now().date_naive()) + .unwrap_or_else(|error| { + eprintln!( + "switchyard-menubar: read {}: {error}", + config.routing_log.display() + ); + rollup::Usage::default() + }); + for row in summary::build(health::probe(&config.server_url), &usage, &config) { + println!("{row}"); } return ExitCode::SUCCESS; } diff --git a/crates/switchyard-menubar/src/models.rs b/crates/switchyard-menubar/src/models.rs index 2c67662232..7a0a572d6a 100644 --- a/crates/switchyard-menubar/src/models.rs +++ b/crates/switchyard-menubar/src/models.rs @@ -598,7 +598,6 @@ mod tests { struct Stub { /// This field sets the client base URL used to list models from this server. url: String, - response: Arc>, requests: Arc>>>, address: SocketAddr, stopping: Arc, @@ -610,11 +609,10 @@ mod tests { let listener = TcpListener::bind("127.0.0.1:0").expect("bind"); let address = listener.local_addr().expect("addr"); let url = format!("http://{address}/v1"); - let response = Arc::new(Mutex::new(response)); let requests = Arc::new(Mutex::new(Vec::new())); let stopping = Arc::new(AtomicBool::new(false)); let stop = Arc::clone(&stopping); - let (answer, record) = (Arc::clone(&response), Arc::clone(&requests)); + let record = Arc::clone(&requests); let worker = std::thread::spawn(move || { for mut stream in listener.incoming().map_while(Result::ok) { if stop.load(Ordering::Acquire) { @@ -628,13 +626,11 @@ mod tests { line.clear(); } record.lock().expect("lock").push(head); - let response = answer.lock().expect("lock").clone(); let _ = stream.write_all(response.as_bytes()); } }); Self { url, - response, requests, address, stopping, @@ -642,10 +638,6 @@ mod tests { } } - fn answer(&self, response: String) { - *self.response.lock().expect("lock") = response; - } - fn requests(&self) -> Vec> { self.requests.lock().expect("lock").clone() } @@ -682,14 +674,6 @@ mod tests { } } - fn models(loaded: &[Loaded]) -> Vec<&str> { - loaded - .iter() - .flat_map(|entry| entry.list.iter().flat_map(|list| &list.models)) - .map(String::as_str) - .collect() - } - // The subprocess isolates PATH; its curl fixture exits before reading the oversized header. #[cfg(unix)] #[test] @@ -741,43 +725,6 @@ mod tests { ); } - #[test] - fn fetches_a_missing_list_once_and_then_uses_the_cached_list() { - let stub = Stub::start(listing(&["model-b", "model-a"])); - let dir = tempfile::tempdir().expect("tempdir"); - let cache = dir.path().join(CACHE_FILE); - // Both clients list their models at the same URL. - let clients = [ - client("gateway", "openai_responses", &stub.url), - client("gateway_chat", "openai_chat", &stub.url), - ]; - - let first = load( - &cache, - &clients, - false, - Some((&stub.url, "test-key")), - &|_| {}, - ); - // A cached list needs neither a request nor a key. - let second = load(&cache, &clients, false, None, &|_| {}); - - let requests = stub.requests(); - assert_eq!(requests.len(), 1, "{requests:?}"); - assert_eq!(requests[0][0], "GET /v1/models HTTP/1.1"); - assert!( - requests[0].contains(&"Authorization: Bearer test-key".to_string()), - "{requests:?}" - ); - assert_eq!(first.len(), 1); - assert_eq!(first[0].url, format!("{}/models", stub.url)); - assert_eq!(first[0].error, None); - assert_eq!(models(&first), ["model-a", "model-b"]); - assert_eq!(second, first); - let text = std::fs::read_to_string(&cache).expect("read cache"); - assert!(!text.contains("test-key"), "the cache holds no key: {text}"); - } - #[test] fn entered_key_is_sent_only_to_its_selected_base_url() { let selected = Stub::start(listing(&["selected"])); @@ -803,6 +750,11 @@ mod tests { &|_| {}, ); assert_eq!(loaded[0].error, None); + assert!( + !std::fs::read_to_string(dir.path().join(CACHE_FILE)) + .expect("cache") + .contains("selected-secret") + ); assert_eq!(selected.requests().len(), 1); assert!(selected.requests()[0].contains(&"Authorization: Bearer selected-secret".into())); assert_eq!( @@ -819,145 +771,6 @@ mod tests { ); } - #[test] - fn refresh_fetches_again_and_replaces_the_cached_list() { - let stub = Stub::start(listing(&["old-model"])); - let dir = tempfile::tempdir().expect("tempdir"); - let cache = dir.path().join(CACHE_FILE); - let clients = [client("gateway", "openai_chat", &stub.url)]; - load( - &cache, - &clients, - false, - Some((&stub.url, "test-key")), - &|_| {}, - ); - stub.answer(listing(&["new-model"])); - - let refreshed = load( - &cache, - &clients, - true, - Some((&stub.url, "test-key")), - &|_| {}, - ); - let later = load(&cache, &clients, false, None, &|_| {}); - - assert_eq!(stub.requests().len(), 2); - assert_eq!(models(&refreshed), ["new-model"]); - assert_eq!(refreshed[0].error, None); - assert_eq!(later, refreshed, "the cache file holds the new list"); - } - - #[test] - fn a_failed_refresh_keeps_the_cached_list() { - let stub = Stub::start(listing(&["old-model"])); - let dir = tempfile::tempdir().expect("tempdir"); - let cache = dir.path().join(CACHE_FILE); - let clients = [client("gateway", "openai_chat", &stub.url)]; - let first = load( - &cache, - &clients, - false, - Some((&stub.url, "test-key")), - &|_| {}, - ); - stub.answer( - "HTTP/1.1 500 Internal Server Error\r\nConnection: close\r\n\r\n{}".to_string(), - ); - - let refreshed = load( - &cache, - &clients, - true, - Some((&stub.url, "test-key")), - &|_| {}, - ); - let later = load(&cache, &clients, false, None, &|_| {}); - - assert_eq!(stub.requests().len(), 2); - assert_eq!(refreshed[0].list, first[0].list); - assert_eq!( - refreshed[0].error, - Some(ListError::Failed(format!( - "{}/models answered HTTP 500", - stub.url - ))) - ); - assert_eq!(later, first, "the cache file still holds the old list"); - } - - #[test] - fn fetches_a_shared_url_with_the_client_that_sends_a_key() { - let stub = Stub::start(listing(&["model-a"])); - let dir = tempfile::tempdir().expect("tempdir"); - // The first client at the URL sends no key, so listing with it would - // leave out the key the second client needs. - let keyless = Client { - forward_auth: false, - ..client("open", "openai_chat", &stub.url) - }; - let clients = [keyless, client("gateway", "openai_responses", &stub.url)]; - - let loaded = load( - &dir.path().join(CACHE_FILE), - &clients, - false, - Some((&stub.url, "test-key")), - &|_| {}, - ); - - let requests = stub.requests(); - assert_eq!(requests.len(), 1, "{requests:?}"); - assert!( - requests[0].contains(&"Authorization: Bearer test-key".to_string()), - "{requests:?}" - ); - assert_eq!(models(&loaded), ["model-a"]); - } - - #[test] - fn returns_a_fetched_list_that_the_cache_file_cannot_hold() { - let stub = Stub::start(listing(&["model-a"])); - let dir = tempfile::tempdir().expect("tempdir"); - // The cache file's directory does not exist, so the file cannot be - // written. - let cache = dir.path().join("missing").join(CACHE_FILE); - let clients = [client("gateway", "openai_chat", &stub.url)]; - - let loaded = load( - &cache, - &clients, - false, - Some((&stub.url, "test-key")), - &|_| {}, - ); - - assert_eq!(models(&loaded), ["model-a"]); - assert!( - matches!(loaded[0].error, Some(ListError::NotCached(_))), - "{loaded:?}" - ); - assert!(!cache.exists()); - } - - #[test] - fn the_cache_file_keeps_the_newer_of_two_lists() { - let dir = tempfile::tempdir().expect("tempdir"); - let cache = dir.path().join(CACHE_FILE); - let url = "https://api.example/v1/models"; - let list = |model: &str, fetched_at| ModelList { - models: vec![model.to_string()], - fetched_at, - }; - - // The load that fetched first writes last. - write_cache(&cache, url, &list("new", 200)).expect("write"); - write_cache(&cache, url, &list("old", 100)).expect("write"); - - assert_eq!(read_cache(&cache).get(url), Some(&list("new", 200))); - } - #[test] fn reports_a_rejected_key_and_a_missing_key() { let stub = @@ -987,75 +800,4 @@ mod tests { "a missing key or a key with a line break sends no request" ); } - - #[test] - fn builds_the_models_url_with_the_servers_url_rules() { - for (format, base_url, expected) in [ - ( - "openai_chat", - "https://api.example/v1/", - "https://api.example/v1/models", - ), - ( - "openai_responses", - "https://api.example/v1/responses", - "https://api.example/v1/models", - ), - ( - "anthropic_messages", - "https://api.example", - "https://api.example/v1/models?limit=1000", - ), - ( - "anthropic_messages", - "https://api.example/v1/messages", - "https://api.example/v1/models?limit=1000", - ), - // The server sends messages to /foo/messages/v1/messages here. - ( - "anthropic_messages", - "https://api.example/foo/messages", - "https://api.example/foo/messages/v1/models?limit=1000", - ), - ( - "anthropic_messages", - "https://api.example/v1?api-version=1", - "https://api.example/v1/models?api-version=1&limit=1000", - ), - ( - "openai_chat", - "https://api.example/v1?api-version=1", - "https://api.example/v1/models?api-version=1", - ), - ] { - assert_eq!( - models_url(format, base_url), - expected, - "{format} {base_url}" - ); - } - } - - #[test] - fn reads_the_models_that_codex_saved() { - let dir = tempfile::tempdir().expect("tempdir"); - let path = dir.path().join("models_cache.json"); - std::fs::write( - &path, - r#"{"fetched_at":"2026-01-01T00:00:00Z","etag":"x","models":[ - {"slug":"gpt-6-sol","visibility":"list"}, - {"slug":"codex-auto-review","visibility":"hide"}, - {"slug":"gpt-6-sol"}]}"#, - ) - .expect("write"); - - let list = read_codex_models(&path).expect("a list"); - - // Hidden models stay, because a route can still name them. - assert_eq!(list.models, ["codex-auto-review", "gpt-6-sol"]); - assert_eq!(list.fetched_at, 1_767_225_600); - assert_eq!(read_codex_models(&dir.path().join("missing.json")), None); - std::fs::write(&path, "not json").expect("write"); - assert_eq!(read_codex_models(&path), None); - } } diff --git a/crates/switchyard-menubar/src/pricing.rs b/crates/switchyard-menubar/src/pricing.rs index 9cd7ffc6b3..4905318b3f 100644 --- a/crates/switchyard-menubar/src/pricing.rs +++ b/crates/switchyard-menubar/src/pricing.rs @@ -97,111 +97,61 @@ pub fn unpriced<'a>( mod tests { use super::*; - fn price(input: f64, output: f64) -> ModelPrice { - ModelPrice { - input_per_mtok: input, - cached_input_per_mtok: None, - output_per_mtok: output, - } - } - - fn table() -> PriceTable { - PriceTable::from([ - ("sol".to_string(), price(1.25, 10.0)), - ("luna".to_string(), price(0.25, 2.0)), - ("terra".to_string(), price(0.05, 0.4)), - ]) - } - - fn tokens(input: u64, output: u64) -> ModelTokens { - ModelTokens { - requests: 1, - input, - cached_input: 0, - output, - } - } - - #[test] - fn prices_the_cheaper_tier_against_the_capable_baseline() { - let mut totals = Totals::default(); - totals - .routed - .insert("luna".to_string(), tokens(1_000_000, 100_000)); - - let savings = estimate(&totals, &table(), "sol").expect("priced"); - - assert!((savings.actual - 0.45).abs() < 1e-9); - assert!((savings.baseline - 2.25).abs() < 1e-9); - assert!((savings.percent().expect("percent") - 80.0).abs() < 1e-9); - } - - #[test] - fn classifier_overhead_counts_against_savings() { - let mut totals = Totals::default(); - totals - .routed - .insert("luna".to_string(), tokens(1_000_000, 100_000)); - let before = estimate(&totals, &table(), "sol").expect("priced"); - - totals - .classifier - .insert("terra".to_string(), tokens(1_000_000, 10_000)); - let after = estimate(&totals, &table(), "sol").expect("priced"); - - assert_eq!(after.baseline, before.baseline); - assert!(after.saved() < before.saved()); - } - #[test] - fn cache_reads_use_the_cached_rate() { - let prices = PriceTable::from([( - "sol".to_string(), - ModelPrice { - input_per_mtok: 1.0, - cached_input_per_mtok: Some(0.1), - output_per_mtok: 0.0, - }, - )]); + fn estimates_cost_without_hiding_overhead_or_missing_prices() { + let price = ModelPrice { + input_per_mtok: 1.0, + cached_input_per_mtok: Some(0.1), + output_per_mtok: 2.0, + }; + let prices = PriceTable::from([ + ("baseline".into(), price), + ( + "cheap".into(), + ModelPrice { + input_per_mtok: 0.2, + cached_input_per_mtok: None, + output_per_mtok: 0.4, + }, + ), + ]); let mut totals = Totals::default(); + let empty = estimate(&totals, &prices, "baseline").expect("empty"); + assert_eq!(empty.saved(), 0.0); + assert!(empty.percent().is_none()); totals.routed.insert( - "sol".to_string(), + "cheap".into(), ModelTokens { requests: 1, input: 1_000_000, cached_input: 1_000_000, - output: 0, + output: 100_000, }, ); - - let savings = estimate(&totals, &prices, "sol").expect("priced"); - - assert!((savings.actual - 1.1).abs() < 1e-9); - } - - #[test] - fn an_unpriced_model_suppresses_the_estimate() { - let mut totals = Totals::default(); + let routed = estimate(&totals, &prices, "baseline").expect("priced"); + assert!((routed.actual - 0.44).abs() < 1e-9); + assert!((routed.baseline - 1.3).abs() < 1e-9); + assert!((routed.percent().expect("percent") - (1.3 - 0.44) / 1.3 * 100.0).abs() < 1e-9); + totals.classifier.insert( + "baseline".into(), + ModelTokens { + requests: 1, + input: 2_000_000, + ..ModelTokens::default() + }, + ); + let overhead = estimate(&totals, &prices, "baseline").expect("overhead"); + assert_eq!(overhead.baseline, routed.baseline); + assert!((overhead.actual - 2.44).abs() < 1e-9); + assert!(overhead.saved() < 0.0); totals .routed - .insert("unknown".to_string(), tokens(1_000, 100)); - - assert!(estimate(&totals, &table(), "sol").is_none()); - assert!(estimate(&Totals::default(), &table(), "absent").is_none()); - } - - #[test] - fn an_empty_period_has_no_percentage() { - let savings = estimate(&Totals::default(), &table(), "sol").expect("priced"); - - assert_eq!(savings.saved(), 0.0); - assert!(savings.percent().is_none()); - } - - #[test] - fn names_each_model_that_has_no_price_once() { - let models = ["sol", "mystery", "luna", "other", "mystery"]; - - assert_eq!(unpriced(models, &table()), ["mystery", "other"]); + .insert("missing".into(), ModelTokens::default()); + assert!(estimate(&totals, &prices, "baseline").is_none()); + assert!(estimate(&Totals::default(), &prices, "missing").is_none()); + assert_eq!( + unpriced(["cheap", "missing", "other", "missing"], &prices), + ["missing", "other"] + ); } } diff --git a/crates/switchyard-menubar/src/rollup.rs b/crates/switchyard-menubar/src/rollup.rs index c6c35a487a..d750aa84c7 100644 --- a/crates/switchyard-menubar/src/rollup.rs +++ b/crates/switchyard-menubar/src/rollup.rs @@ -66,14 +66,13 @@ impl Totals { } fn merge(&mut self, other: &Self) { - for (model, tokens) in &other.routed { - self.routed.entry(model.clone()).or_default().add(tokens); - } - for (model, tokens) in &other.classifier { - self.classifier - .entry(model.clone()) - .or_default() - .add(tokens); + for (own, incoming) in [ + (&mut self.routed, &other.routed), + (&mut self.classifier, &other.classifier), + ] { + for (model, tokens) in incoming { + own.entry(model.clone()).or_default().add(tokens); + } } } @@ -218,10 +217,6 @@ fn is_same_file(left: &Metadata, right: &Metadata) -> bool { mod tests { use super::*; - fn read(path: &Path, today: NaiveDate) -> std::io::Result { - Reader::default().read(path, today) - } - fn date(text: &str) -> NaiveDate { text.parse().expect("valid date") } @@ -242,26 +237,6 @@ mod tests { (dir, path) } - #[test] - fn splits_routed_and_classifier_tokens() { - let (_dir, path) = log(&format!( - "{}\n{}\n", - line("2026-09-28T10:00:00.000", "luna", "", 1_000, 200), - line("2026-09-28T10:00:01.000", "terra", "classifier", 300, 10), - )); - - let usage = read(&path, date("2026-09-28")).expect("read"); - - assert_eq!( - usage.today.requests(), - 1, - "classifier calls are not requests" - ); - assert_eq!(usage.today.routed["luna"].input, 1_000); - assert_eq!(usage.today.classifier["terra"].input, 300); - assert_eq!(usage.today.tokens(), 1_000 + 200 + 300 + 10); - } - #[test] fn separates_cache_reads_from_full_price_input() { let record: Record = serde_json::from_str( @@ -275,73 +250,13 @@ mod tests { assert_eq!(tokens.total(), 1_050); } - #[test] - fn counts_completion_tokens_once_and_prices_them() { - let record: Record = serde_json::from_str( - r#"{"ts":"2026-09-28T10:00:00.000Z","model":"m","prompt_tokens":12,"cached_tokens":0,"completion_tokens":5,"reasoning_tokens":3}"#, - ) - .expect("parse record"); - - let tokens = record.tokens(); - - assert_eq!(tokens.input, 12); - assert_eq!(tokens.output, 5); - assert_eq!(tokens.total(), 17); - let mut totals = Totals::default(); - totals.add(&record); - let prices = crate::pricing::PriceTable::from([( - "m".to_string(), - crate::pricing::ModelPrice { - input_per_mtok: 1.0, - cached_input_per_mtok: None, - output_per_mtok: 2.0, - }, - )]); - let savings = crate::pricing::estimate(&totals, &prices, "m").expect("priced"); - assert!((savings.actual - 0.000022).abs() < 1e-12); - } - - #[test] - fn the_week_covers_seven_days() { - let mut contents = String::new(); - for day in 18..=28 { - contents.push_str(&line( - &format!("2026-09-{day:02}T10:00:00.000"), - "luna", - "", - 100, - 10, - )); - contents.push('\n'); - } - let (_dir, path) = log(&contents); - - let usage = read(&path, date("2026-09-28")).expect("read"); - - assert_eq!(usage.today.requests(), 1); - assert_eq!(usage.week.requests(), 7); - } - - #[test] - fn skips_lines_it_cannot_parse() { - // The trailing line has no newline yet, as when the server is mid-write. - let (_dir, path) = log(&format!( - "not json\n{}\n{{\"ts\":\"2026-09-2", - line("2026-09-28T10:00:00.000", "luna", "", 100, 10), - )); - - let usage = read(&path, date("2026-09-28")).expect("read"); - - assert_eq!(usage.today.requests(), 1); - } - #[test] fn reads_appends_once_and_retries_an_unfinished_line() { use std::io::Write; let first = line("2026-09-28T10:00:00.000", "luna", "", 100, 10); let second = line("2026-09-28T10:00:01.000", "terra", "classifier", 30, 1); - let (_dir, path) = log(&format!("{first}\n")); + let (_dir, path) = log(&format!("not json\n{first}\n")); let today = date("2026-09-28"); let mut reader = Reader::default(); assert_eq!(reader.read(&path, today).expect("read").today.tokens(), 110); @@ -372,27 +287,6 @@ mod tests { assert_eq!(usage.today.classifier["terra"].requests, 1); } - #[test] - fn drops_old_days_without_rereading_the_log() { - let (_dir, path) = log(&format!( - "{}\n{}\n", - line("2026-09-22T10:00:00.000", "luna", "", 100, 10), - line("2026-09-28T10:00:00.000", "luna", "", 100, 10), - )); - let mut reader = Reader::default(); - assert_eq!( - reader - .read(&path, date("2026-09-28")) - .expect("read") - .week - .requests(), - 2 - ); - let usage = reader.read(&path, date("2026-09-29")).expect("next day"); - assert_eq!(usage.today.requests(), 0); - assert_eq!(usage.week.requests(), 1); - } - #[test] fn resets_totals_when_the_log_is_replaced_or_truncated() { let (_dir, path) = log(&format!( @@ -414,14 +308,8 @@ mod tests { let usage = reader.read(&path, today).expect("read replacement"); assert_eq!(usage.today.requests(), 3); assert_eq!(usage.today.tokens(), 660); - } - - #[test] - fn a_missing_log_is_not_an_error() { - let dir = tempfile::tempdir().expect("tempdir"); - - let usage = read(&dir.path().join("absent.jsonl"), date("2026-09-28")).expect("read"); - - assert!(usage.today.is_empty()); + std::fs::remove_file(&path).expect("remove log"); + let absent = reader.read(&path, today).expect("missing log"); + assert!(absent.today.is_empty() && absent.week.is_empty()); } } diff --git a/crates/switchyard-menubar/src/server.rs b/crates/switchyard-menubar/src/server.rs index 3dcf5bdc32..552ae5a86d 100644 --- a/crates/switchyard-menubar/src/server.rs +++ b/crates/switchyard-menubar/src/server.rs @@ -497,11 +497,4 @@ mod tests { String::from_utf8_lossy(&output.stdout) ); } - - #[test] - fn reports_which_command_failed() { - let error = command("switchyard-does-not-exist", &[]).expect_err("missing program"); - - assert!(error.contains("switchyard-does-not-exist")); - } } diff --git a/crates/switchyard-menubar/src/server_config.rs b/crates/switchyard-menubar/src/server_config.rs index 2b6b38b3fb..3936674db7 100644 --- a/crates/switchyard-menubar/src/server_config.rs +++ b/crates/switchyard-menubar/src/server_config.rs @@ -1358,49 +1358,6 @@ confidence_threshold = 0.5 ); } - #[test] - fn switching_models_and_back_restores_the_file() { - let gpt = edit( - GATEWAY, - "gateway", - "composite", - &[ - choice("gateway", "gpt-5.6-terra"), - choice("gateway", "gpt-5.6-sol"), - choice("gateway", "gpt-5.6-luna"), - ], - ) - .text; - - let config = ServerConfig::parse(&gpt).expect("parse"); - assert_eq!( - config.choices("gateway"), - [ - choice("gateway", "gpt-5.6-terra"), - choice("gateway", "gpt-5.6-sol"), - choice("gateway", "gpt-5.6-luna"), - ] - ); - assert!( - gpt.contains( - "[targets.gateway_capable]\nid = \"gpt-5.6-sol\"\nllm_client = \"gateway\" # chat, for caching\nomit_body_fields = [\"reasoning_effort\"]" - ), - "the target keeps its other settings and comments:\n{gpt}" - ); - - let claude = edit( - &gpt, - "gateway", - "composite", - &[ - choice("gateway", "gpt-5.6-terra"), - choice("gateway_chat", "claude-opus-5-5"), - choice("gateway_chat", "claude-sonnet-5"), - ], - ); - assert_eq!(claude.text, GATEWAY); - } - #[test] fn changing_the_algorithm_replaces_only_the_route_settings() { let edited = edit( @@ -1543,77 +1500,6 @@ confidence_threshold = 0.5 } } - #[test] - fn a_move_to_another_model_family_reports_the_settings_the_target_kept() { - let gpt = edit( - GATEWAY, - "gateway", - "composite", - &[ - choice("gateway", "gpt-5.6-terra"), - choice("gateway", "gpt-5.6-sol"), - choice("gateway", "gpt-5.6-luna"), - ], - ) - .text; - - // The judge target has no request settings, and the capable target - // keeps omit_body_fields from its GPT model. Efficient stays. - let edited = edit( - &gpt, - "gateway", - "composite", - &[ - choice("gateway_chat", "claude-haiku-4-5"), - choice("gateway_chat", "claude-opus-5-5"), - choice("gateway", "gpt-5.6-luna"), - ], - ); - - let note = |target: &str| { - edited - .notes - .iter() - .find(|note| note.contains(&format!("[targets.{target}]"))) - .cloned() - }; - let capable = note("gateway_capable").expect("a note for the capable target"); - assert!( - capable.contains("claude-opus-5-5") - && capable.contains(r#"omit_body_fields = ["reasoning_effort"]"#), - "{capable}" - ); - let judge = note("gateway_judge").expect("a note for the judge target"); - assert!( - judge.contains("claude-haiku-4-5") && !judge.contains(" = "), - "{judge}" - ); - assert_eq!(note("gateway_efficient"), None); - } - - #[test] - fn rejects_a_missing_model_or_an_unknown_client() { - let config = ServerConfig::parse(GATEWAY).expect("parse"); - for (capable, named) in [ - (choice("gateway", " "), "Capable"), - (choice("typo", "gpt-5.6-sol"), "typo"), - ] { - let error = config - .edit( - "gateway", - algorithm("composite"), - &[ - choice("gateway", "gpt-5.6-terra"), - capable, - choice("gateway", "gpt-5.6-luna"), - ], - ) - .expect_err("invalid choice"); - - assert!(error.contains(named), "{error}"); - } - } - /// This fixture places the last target and route inside a generated block. /// A hand-written route shares the capable target. fn with_generated_block() -> String { @@ -1628,197 +1514,33 @@ confidence_threshold = 0.5 } #[test] - fn a_new_target_goes_before_a_generated_block_not_inside_it() { - // Another route uses the capable target, so Capable gets a copy. - let edited = edit( - &with_generated_block(), - "gateway", - "composite", - &[ - choice("gateway", "gpt-5.6-terra"), - choice("gateway", "gpt-5.6-sol"), - choice("gateway_chat", "claude-sonnet-5"), - ], - ); - - let config = ServerConfig::parse(&edited.text).expect("parse"); - let copy = capable_target(&config).expect("capable target"); - assert_ne!(copy, "gateway_capable"); - assert_eq!(config.generated_by("targets", copy), None); - let at = |needle: &str| edited.text.find(needle).expect(needle); - assert!( - at(&format!("[targets.{copy}]")) < at("# >>> sync"), - "the next rewrite of the block would delete the copy:\n{}", - edited.text - ); - } - - #[test] - fn a_new_target_goes_before_the_first_table_when_every_target_is_generated() { - // A script writes every target in a block above the hand-written - // routes. Another route uses the capable target, so Capable gets a - // copy. - let text = GATEWAY - .replace( - "# The gateway rejects", - "# >>> sync: generated by sync.py; edits between the markers are overwritten >>>\n\ - # The gateway rejects", - ) - .replace("[routes.gateway]\n", "# <<< sync <<<\n\n[routes.gateway]\n") - + "\n[routes.direct]\nid = \"direct\"\ntype = \"passthrough\"\n\ - target = \"gateway_capable\"\n"; - - let edited = edit( - &text, - "gateway", - "composite", - &[ - choice("gateway", "gpt-5.6-terra"), - choice("gateway", "gpt-5.6-sol"), - choice("gateway_chat", "claude-sonnet-5"), - ], - ); - - let config = ServerConfig::parse(&edited.text).expect("parse"); - let copy = capable_target(&config).expect("capable target"); - assert_ne!(copy, "gateway_capable"); - assert_eq!(config.generated_by("targets", copy), None); - let at = |needle: &str| edited.text.find(needle).expect(needle); - assert!( - at(&format!("[targets.{copy}]")) < at("# >>> sync"), - "the next rewrite of the block would delete the copy:\n{}", - edited.text - ); - } - - #[test] - fn finds_the_tables_inside_generated_blocks() { - let text = with_generated_block().replace( - "# <<< sync <<<", - "[routes.\"quoted.key\"]\nid = \"q\"\ntype = \"passthrough\"\ntarget = \"generated\"\n\n\ - # <<< sync <<<", - ); - - let config = ServerConfig::parse(&text).expect("parse"); - - let block = "sync: generated by sync.py; edits between the markers are overwritten"; - assert_eq!(config.generated_by("routes", "generated"), Some(block)); - assert_eq!(config.generated_by("targets", "generated"), Some(block)); - assert_eq!(config.generated_by("routes", "quoted.key"), Some(block)); - assert_eq!(config.generated_by("routes", "gateway"), None); - assert_eq!(config.generated_by("routes", "direct"), None); - assert_eq!(config.generated_by("targets", "gateway_capable"), None); - } - - #[test] - fn warns_when_a_change_is_inside_a_generated_block() { - let text = with_generated_block(); - - // The tool overwrites changes to a route inside its generated block. - let inside = edit( - &text, - "generated", - "passthrough", - &[choice("gateway", "gpt-5.6-sol")], - ); - assert!( - inside - .notes - .iter() - .any(|note| note.contains("[routes.generated]") && note.contains("overwrites")), - "{:?}", - inside.notes - ); - - // The hand-written route now uses a target inside the generated block. - let outside = edit( - &text, - "direct", - "passthrough", - &[choice("gateway", "gpt-5.5")], - ); - assert!( - outside.notes.iter().any( - |note| note.contains("[routes.direct]") && note.contains("[targets.generated]") - ), - "{:?}", - outside.notes - ); - } - - #[test] - fn says_when_the_callers_logins_go_to_another_host() { - let text = GATEWAY.replace( - "[targets.gateway_capable]", - "[llm_clients.other]\nformat = \"openai_responses\"\nbase_url = \ - \"https://login.example.org/v1\"\nforward_auth = true\n\n[targets.gateway_capable]", - ); - let login = |edited: &Edited| { - edited - .notes - .iter() - .find(|note| note.contains("login")) - .cloned() - }; - - let moved = edit( - &text, - "gateway", - "composite", - &[ - choice("other", "a"), - choice("other", "b"), - choice("other", "c"), - ], - ); - let note = login(&moved).expect("a note about the login"); - assert!( - note.contains("login.example.org") && note.contains("gateway.example.com"), - "{note}" - ); - - let same_host = edit( - &text, - "gateway", - "composite", - &[ - choice("gateway", "gpt-5.6-terra"), - choice("gateway_chat", "claude-opus-5-5"), - choice("gateway_chat", "claude-haiku-4-5"), - ], - ); - assert_eq!(login(&same_host), None); - } - - #[test] - fn lists_the_models_a_client_already_serves() { - let config = ServerConfig::parse(GATEWAY).expect("parse"); - - assert_eq!( - config.models_on("gateway_chat"), - ["claude-opus-5-5", "claude-sonnet-5"] - ); - assert_eq!(config.models_on("gateway"), ["gpt-5.6-terra"]); - assert!(config.models_on("missing").is_empty()); - } - - #[test] - fn names_the_host_and_port_of_a_client_without_its_path_or_login() { - let client = |base_url: &str| Client { - name: "c".to_string(), - format: "openai_chat".to_string(), - base_url: base_url.to_string(), - api_key_env: None, - forward_auth: false, - }; - - assert_eq!( - client("https://chatgpt.com/backend-api/codex").host(), - "chatgpt.com" - ); - assert_eq!( - client("http://user@127.0.0.1:8000/v1?x=1").host(), - "127.0.0.1:8000" - ); + fn new_targets_stay_outside_generated_blocks() { + let all_generated = GATEWAY.replace( + "# The gateway rejects", + "# >>> sync: generated by sync.py; edits between the markers are overwritten >>>\n# The gateway rejects", + ).replace("[routes.gateway]\n", "# <<< sync <<<\n\n[routes.gateway]\n") + + "\n[routes.direct]\nid='direct'\ntype='passthrough'\ntarget='gateway_capable'\n"; + for text in [with_generated_block(), all_generated] { + let edited = edit( + &text, + "gateway", + "composite", + &[ + choice("gateway", "gpt-5.6-terra"), + choice("gateway", "gpt-5.6-sol"), + choice("gateway_chat", "claude-sonnet-5"), + ], + ); + let config = ServerConfig::parse(&edited.text).expect("parse"); + let copy = capable_target(&config).expect("capable target"); + assert_ne!(copy, "gateway_capable"); + assert_eq!(config.generated_by("targets", copy), None); + let header = edited + .text + .find(&format!("[targets.{copy}]")) + .expect("target header"); + let marker = edited.text.find("# >>> sync").expect("block marker"); + assert!(header < marker); + } } } diff --git a/crates/switchyard-menubar/src/sessions.rs b/crates/switchyard-menubar/src/sessions.rs index 01a048871b..24a471328a 100644 --- a/crates/switchyard-menubar/src/sessions.rs +++ b/crates/switchyard-menubar/src/sessions.rs @@ -170,42 +170,6 @@ pub fn launch( #[cfg(test)] mod tests { use super::*; - #[test] - fn quotes_shell_metacharacters_literally() { - assert_eq!(quote("a'b $(touch /tmp/no)"), "'a'\\''b $(touch /tmp/no)'"); - } - #[test] - fn rejected_launch_inputs_create_no_worktree_or_settings() { - let dir = tempfile::tempdir().expect("directory"); - assert!( - launch( - Harness::CodexCli, - dir.path(), - "route", - "https://remote.example", - true, - None - ) - .is_err() - ); - assert!( - launch( - Harness::Pi, - dir.path(), - "route", - "http://localhost:4123", - true, - None - ) - .is_err() - ); - assert!( - std::fs::read_dir(dir.path()) - .expect("contents") - .next() - .is_none() - ); - } #[test] fn failed_session_setup_removes_its_worktree_branch_and_private_settings() { diff --git a/crates/switchyard-menubar/src/summary.rs b/crates/switchyard-menubar/src/summary.rs index cadd17557b..0715ed073d 100644 --- a/crates/switchyard-menubar/src/summary.rs +++ b/crates/switchyard-menubar/src/summary.rs @@ -11,47 +11,36 @@ use crate::rollup::{Totals, Usage}; /// MAX_MODEL_ROWS limits the number of models shown in the usage summary. const MAX_MODEL_ROWS: usize = 5; -/// Row represents one informational line or separator in the usage summary. -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum Row { - Separator, - Label(String), -} - -fn label(text: impl Into) -> Row { - Row::Label(text.into()) -} - /// This function builds the menu body for the current day and trailing week. -pub fn build(status: ServerStatus, usage: &Usage, config: &Config) -> Vec { +pub fn build(status: ServerStatus, usage: &Usage, config: &Config) -> Vec { let state = match status { ServerStatus::Running => "running", ServerStatus::Stopped => "not responding", }; let mut rows = vec![ - label(format!("Server: {state} · {}", config.server_url)), - Row::Separator, + format!("Server: {state} · {}", config.server_url), + String::new(), ]; if usage.week.is_empty() { - rows.push(label("No requests recorded yet")); + rows.push("No requests recorded yet".into()); return rows; } rows.extend(period("Today", &usage.today, config)); - rows.push(Row::Separator); + rows.push(String::new()); rows.extend(period("This week", &usage.week, config)); let models = model_shares(&usage.week); if !models.is_empty() { - rows.push(Row::Separator); - rows.push(label("This week by model")); + rows.push(String::new()); + rows.push("This week by model".into()); rows.extend(models); } if config.prices.is_empty() { - rows.push(Row::Separator); - rows.push(label("Add prices to menubar.toml to see savings")); + rows.push(String::new()); + rows.push("Add prices to menubar.toml to see savings".into()); } else { let seen = usage .week @@ -62,11 +51,11 @@ pub fn build(status: ServerStatus, usage: &Usage, config: &Config) -> Vec { let baseline = std::iter::once(config.baseline_model.as_str()); let missing = unpriced(seen.chain(baseline), &config.prices); if !missing.is_empty() { - rows.push(Row::Separator); - rows.push(label(format!( + rows.push(String::new()); + rows.push(format!( "Savings hidden for this week: menubar.toml has no price for {}", listed(&missing) - ))); + )); } } rows @@ -82,15 +71,15 @@ fn listed(models: &[&str]) -> String { } } -fn period(name: &str, totals: &Totals, config: &Config) -> Vec { +fn period(name: &str, totals: &Totals, config: &Config) -> Vec { let requests = totals.requests(); - let mut rows = vec![label(format!( + let mut rows = vec![format!( "{name} — {requests} request{} · {} tokens", if requests == 1 { "" } else { "s" }, tokens(totals.tokens()) - ))]; + )]; if let Some(savings) = estimate(totals, &config.prices, &config.baseline_model) { - rows.push(label(format!(" Saved {}", saved(&savings)))); + rows.push(format!(" Saved {}", saved(&savings))); } rows } @@ -103,7 +92,7 @@ fn saved(savings: &Savings) -> String { } } -fn model_shares(week: &Totals) -> Vec { +fn model_shares(week: &Totals) -> Vec { let total: u64 = week.routed.values().map(|tokens| tokens.total()).sum(); if total == 0 { return Vec::new(); @@ -118,12 +107,7 @@ fn model_shares(week: &Totals) -> Vec { models .into_iter() .take(MAX_MODEL_ROWS) - .map(|(model, count)| { - label(format!( - " {model} — {:.0}%", - count as f64 / total as f64 * 100.0 - )) - }) + .map(|(model, count)| format!(" {model} — {:.0}%", count as f64 / total as f64 * 100.0)) .collect() } @@ -145,229 +129,3 @@ fn money(value: f64) -> String { format!("${value:.2}") } } - -#[cfg(test)] -mod tests { - use super::*; - use crate::pricing::{ModelPrice, PriceTable}; - use crate::rollup::ModelTokens; - - fn counted(input: u64, output: u64, requests: u64) -> ModelTokens { - ModelTokens { - requests, - input, - cached_input: 0, - output, - } - } - - fn config(prices: PriceTable) -> Config { - Config { - baseline_model: "sol".to_string(), - prices, - ..Config::default() - } - } - - fn priced() -> PriceTable { - PriceTable::from([ - ( - "sol".to_string(), - ModelPrice { - input_per_mtok: 1.25, - cached_input_per_mtok: None, - output_per_mtok: 10.0, - }, - ), - ( - "luna".to_string(), - ModelPrice { - input_per_mtok: 0.25, - cached_input_per_mtok: None, - output_per_mtok: 2.0, - }, - ), - ]) - } - - fn labels(rows: &[Row]) -> Vec { - rows.iter() - .filter_map(|row| match row { - Row::Label(text) => Some(text.clone()), - Row::Separator => None, - }) - .collect() - } - - fn usage_of(today: Totals, week: Totals) -> Usage { - Usage { today, week } - } - - #[test] - fn shows_requests_tokens_and_savings_for_both_periods() { - let mut today = Totals::default(); - today - .routed - .insert("luna".to_string(), counted(1_000_000, 100_000, 3)); - let mut week = Totals::default(); - week.routed - .insert("luna".to_string(), counted(4_000_000, 400_000, 12)); - - let rows = build( - ServerStatus::Running, - &usage_of(today, week), - &config(priced()), - ); - let labels = labels(&rows); - - assert_eq!(labels[0], "Server: running · http://127.0.0.1:4123"); - assert_eq!(labels[1], "Today — 3 requests · 1.1M tokens"); - assert_eq!(labels[2], " Saved $1.80 (80% of $2.25)"); - assert_eq!(labels[3], "This week — 12 requests · 4.4M tokens"); - assert_eq!(labels[4], " Saved $7.20 (80% of $9.00)"); - } - - #[test] - fn hides_savings_and_explains_why_when_prices_are_missing() { - let mut week = Totals::default(); - week.routed - .insert("luna".to_string(), counted(1_000, 100, 1)); - - week.classifier - .insert("sol".to_string(), counted(100, 0, 1)); - for prices in [ - PriceTable::new(), - PriceTable::from([("sol".to_string(), priced()["sol"])]), - PriceTable::from([("luna".to_string(), priced()["luna"])]), - ] { - let rows = build( - ServerStatus::Running, - &usage_of(week.clone(), week.clone()), - &config(prices), - ); - let labels = labels(&rows); - assert!(labels.iter().all(|label| !label.contains("Saved"))); - assert!(labels.iter().any(|label| label.contains("menubar.toml"))); - } - } - - #[test] - fn ranks_models_by_token_share() { - let mut week = Totals::default(); - week.routed - .insert("luna".to_string(), counted(700_000, 0, 7)); - week.routed - .insert("sol".to_string(), counted(300_000, 0, 3)); - - let rows = build( - ServerStatus::Running, - &usage_of(Totals::default(), week), - &config(priced()), - ); - let models: Vec<_> = labels(&rows) - .into_iter() - .filter(|label| label.starts_with(" ") && label.ends_with('%')) - .collect(); - - assert_eq!(models, vec![" luna — 70%", " sol — 30%"]); - } - - #[test] - fn reports_a_stopped_server_with_no_traffic() { - let rows = build(ServerStatus::Stopped, &Usage::default(), &config(priced())); - let labels = labels(&rows); - - assert!(labels[0].starts_with("Server: not responding")); - assert_eq!(labels[1], "No requests recorded yet"); - } - - #[test] - fn shows_a_loss_when_routing_overhead_exceeds_the_saving() { - let mut today = Totals::default(); - today.routed.insert("sol".to_string(), counted(1_000, 0, 1)); - today - .classifier - .insert("sol".to_string(), counted(1_000_000, 0, 1)); - - let rows = build( - ServerStatus::Running, - &usage_of(today.clone(), today), - &config(priced()), - ); - - assert!(labels(&rows)[2].starts_with(" Saved -$1.25")); - } - - #[test] - fn formats_tokens_and_money_for_reading() { - assert_eq!(tokens(412), "412"); - assert_eq!(tokens(12_345), "12K"); - assert_eq!(tokens(1_400_000), "1.4M"); - assert_eq!(tokens(9_700_000_000), "9.7B"); - - assert_eq!(money(2.181), "$2.18"); - assert_eq!(money(-0.125), "-$0.12"); - } - - #[test] - fn names_the_models_that_keep_the_weeks_savings_hidden() { - let mut today = Totals::default(); - today - .routed - .insert("luna".to_string(), counted(1_000, 100, 1)); - let mut week = today.clone(); - week.routed - .insert("mystery".to_string(), counted(1_000, 100, 1)); - - let rows = build( - ServerStatus::Running, - &usage_of(today, week), - &config(priced()), - ); - let labels = labels(&rows); - - // Every model of today has a price, so today still shows its saving. - let saved = labels - .iter() - .filter(|label| label.contains("Saved")) - .count(); - assert_eq!(saved, 1, "{labels:?}"); - assert!( - labels.iter().any(|label| label - == "Savings hidden for this week: menubar.toml has no price for mystery"), - "{labels:?}" - ); - } - - #[test] - fn names_the_baseline_model_when_it_has_no_price() { - let mut week = Totals::default(); - week.routed - .insert("luna".to_string(), counted(1_000, 100, 1)); - let mut prices = priced(); - prices.remove("sol"); - - let rows = build( - ServerStatus::Running, - &usage_of(week.clone(), week), - &config(prices), - ); - - let labels = labels(&rows); - assert!( - labels.contains( - &"Savings hidden for this week: menubar.toml has no price for sol".to_string() - ), - "{labels:?}" - ); - } - - #[test] - fn shortens_a_long_list_of_unpriced_models() { - let names = ["a", "b", "c", "d", "e"]; - - assert_eq!(listed(&names), "a, b, c, and 2 more"); - assert_eq!(listed(&names[..3]), "a, b, c"); - assert_eq!(listed(&names[..1]), "a"); - } -} diff --git a/crates/switchyard-menubar/src/tui.rs b/crates/switchyard-menubar/src/tui.rs index efe2d36dc5..ee1fc3d673 100644 --- a/crates/switchyard-menubar/src/tui.rs +++ b/crates/switchyard-menubar/src/tui.rs @@ -162,7 +162,7 @@ impl View { fn submit(&mut self, controller: &mut Controller) -> Result<(), String> { let form = self.form.take().ok_or("No form is open.")?; let value = |i: usize| form.fields[i].1.trim().to_string(); - match form.kind { + let action = match form.kind { FormKind::Algorithm => { let route = self.route()?; let algorithm = value(0); @@ -207,6 +207,7 @@ impl View { FormKind::Apply(algorithm), fields, ); + return Ok(()); } FormKind::Apply(algorithm) => { let choices = form @@ -217,36 +218,27 @@ impl View { model: f[1].1.trim().into(), }) .collect(); - self.dispatch( - controller, - Action::Apply { - generation: self.snapshot["generation"].as_u64().unwrap_or_default(), - route: string(self.route()?, "key"), - algorithm, - choices, - }, - ); + Action::Apply { + generation: self.snapshot["generation"].as_u64().unwrap_or_default(), + route: string(self.route()?, "key"), + algorithm, + choices, + } } FormKind::Project => { let r = self.route()?; - self.dispatch( - controller, - Action::Launch { - tool: self.tool(), - account: self.account(), - route: string(r, "key"), - id: string(r, "id"), - project: value(0), - }, - ); - } - FormKind::Account => self.dispatch( - controller, - Action::AddAccount { + Action::Launch { tool: self.tool(), - name: value(0), - }, - ), + account: self.account(), + route: string(r, "key"), + id: string(r, "id"), + project: value(0), + } + } + FormKind::Account => Action::AddAccount { + tool: self.tool(), + name: value(0), + }, FormKind::Models | FormKind::Key => { let key = if matches!(form.kind, FormKind::Key) { Some(value(1)) @@ -270,51 +262,50 @@ impl View { .join("\n")) .unwrap_or_default() ); + return Ok(()); } FormKind::RouteFilter => { self.route_filter = value(0); self.move_route(false); self.scroll = 0; + return Ok(()); } FormKind::SettingsFile => { self.settings_file = value(0); self.account = 0; self.preview = None; self.preview_install(controller)?; + return Ok(()); } FormKind::Restore => { if value(0) != "RESTORE" { return Err("Confirmation did not match. Nothing was restored.".into()); } - self.dispatch( - controller, - Action::Restore { - tool: self.tool(), - account: self.account(), - settings_file: self.custom_file(), - }, - ); self.preview = None; + Action::Restore { + tool: self.tool(), + account: self.account(), + settings_file: self.custom_file(), + } } FormKind::Remove => { let route = self.route()?; if value(0) != string(route, "id") { return Err("Route name did not match. Nothing was deleted.".into()); } - self.dispatch( - controller, - Action::Remove { - generation: self.snapshot["generation"].as_u64().unwrap_or_default(), - route: string(route, "key"), - id: string(route, "id"), - }, - ); + Action::Remove { + generation: self.snapshot["generation"].as_u64().unwrap_or_default(), + route: string(route, "key"), + id: string(route, "id"), + } } FormKind::Filter => { self.filter = value(0); self.scroll = 0; + return Ok(()); } - } + }; + self.dispatch(controller, action); Ok(()) } fn body(&self) -> String { @@ -660,24 +651,6 @@ mod tests { ); } - #[test] - // The Routes search must not hide choices when the user switches to Install. - fn route_search_does_not_restrict_install_selection() { - let mut view = view(); - view.snapshot["routes"][0]["kind"] = json!("passthrough"); - view.route_filter = "single model".into(); - assert!(view.route().is_ok()); - view.move_route(true); - assert_eq!(view.route, 0); - view.route_filter = "missing".into(); - assert!(view.route().is_err()); - view.page = 2; - view.move_route(true); - assert_eq!(view.route, 1); - assert_eq!(view.route().expect("route")["id"], "b"); - assert!(view.preview.is_none()); - } - #[test] fn refreshing_the_snapshot_invalidates_the_install_preview() { let directory = tempfile::tempdir().expect("directory"); diff --git a/tests/test_macos_install.py b/tests/test_macos_install.py index 3a9767d32b..4823bae8fb 100644 --- a/tests/test_macos_install.py +++ b/tests/test_macos_install.py @@ -92,33 +92,6 @@ def test_install_escapes_switchyard_path_in_launch_agent(setup): ] -def test_missing_codex_config_creates_only_standalone_profile(setup): - _, home, _, _ = setup - result = run(setup, "install.sh") - assert result.returncode == 0, result.stderr - codex = home / ".codex" - expected = ( - (REPO / "scripts" / "config" / "codex.sy.toml").read_text().replace("@SY_PORT@", "4123") - ) - assert (codex / "sy.config.toml").read_text() == expected - assert {path.name for path in codex.iterdir()} == {"sy.config.toml"} - - -def test_install_prints_profile_usage_without_editing_shell_files(setup): - _, home, _, _ = setup - zshrc = home / ".zshrc" - bashrc = home / ".bashrc" - zshrc.write_text("zsh settings\n") - bashrc.write_text("bash settings\n") - - result = run(setup, "install.sh") - - assert result.returncode == 0, result.stderr - assert "Use it with: codex -p sy" in result.stdout - assert zshrc.read_text() == "zsh settings\n" - assert bashrc.read_text() == "bash settings\n" - - def test_menu_bar_settings_escape_sy_home_as_toml_strings(setup): _, home, _, env = setup switchyard_home = home / 'Switchyard "quoted" \\ folder' @@ -158,22 +131,14 @@ def test_reinstall_backs_up_profile_and_keeps_user_settings(setup): assert menu_settings.read_text() == "user menu settings\n" -@pytest.mark.parametrize( - "provider_header", - [ - '[model_providers."sy"]', - "[model_providers . 'sy']", - '[ "model_providers" . "sy" ]', - ], -) -def test_existing_codex_config_is_preserved_and_shared_templates_are_used(setup, provider_header): +def test_existing_codex_config_is_preserved_and_shared_templates_are_used(setup): _, home, switchyard_home, env = setup codex = Path(env["CODEX_HOME"]) codex.mkdir() config = codex / "config.toml" - original = f"""theme = "dark" + original = """theme = "dark" -{provider_header} # old provider +[model_providers."sy"] # old provider name = "Old" base_url = "http://old" @@ -181,6 +146,8 @@ def test_existing_codex_config_is_preserved_and_shared_templates_are_used(setup, model_provider = "sy" """ config.write_text(original) + snapshot = codex / "config.toml.direct" + snapshot.write_text("original direct config\n") result = run(setup, "install.sh") assert result.returncode == 0, result.stderr assert config.read_text() == original @@ -194,23 +161,7 @@ def test_existing_codex_config_is_preserved_and_shared_templates_are_used(setup, assert (switchyard_home / "composite.toml").read_text() == ( REPO / "scripts" / "config" / "composite.toml" ).read_text() - assert not (codex / "config.toml.direct").exists() - - -def test_existing_snapshot_and_routed_config_are_preserved(setup): - quote = "'" - _, home, _, env = setup - codex = Path(env["CODEX_HOME"]) - codex.mkdir() - (codex / "config.toml").write_text(f"model_provider = {quote}sy{quote} # routed\n") - snapshot = codex / "config.toml.direct" - snapshot.write_text("original direct config\n") - result = run(setup, "install.sh") - assert result.returncode == 0, result.stderr assert snapshot.read_text() == "original direct config\n" - assert (codex / "config.toml").read_text() == f"model_provider = {quote}sy{quote} # routed\n" - assert not (codex / "config.sy.toml").exists() - assert (codex / "sy.config.toml").is_file() def test_uninstall_preserves_routed_config_before_restoring_snapshot(setup): @@ -233,10 +184,7 @@ def test_uninstall_preserves_routed_config_before_restoring_snapshot(setup): "args", [ ["--dryrun"], - ["unknown"], - [""], ["--dry-run", "extra"], - ["--dry-run", "--dry-run"], ], ) def test_scripts_reject_unknown_arguments_before_any_work(setup, script, args): @@ -317,16 +265,6 @@ def test_app_launcher_preserves_quotes_and_shell_metacharacters(setup): assert not (home / "unsafe").exists() -def test_uninstall_removes_the_installed_app_bundle(setup): - _, home, _, _ = setup - assert run(setup, "install.sh").returncode == 0 - app = home / "Applications" / "Switchyard.app" - assert app.is_dir() - result = run(setup, "uninstall.sh") - assert result.returncode == 0, result.stderr - assert not app.exists() - - def test_installer_builds_in_source_checkout_with_an_explicit_target_directory(setup): """The build must use the checkout target directory even if CARGO_TARGET_DIR differs.""" scripts, home, _, env = setup @@ -361,9 +299,10 @@ def test_named_profile_keeps_route_and_update_settings(setup): assert shlex.split(line.split("=", 1)[1])[0] == env[key] assert run(setup, "uninstall.sh").returncode == 0 assert not profile.exists() + assert not (home / "Applications" / "Switchyard.app").exists() -@pytest.mark.parametrize("name", ["../escape", "", "a/b", "a\nname", "team.dev", "x" * 129]) +@pytest.mark.parametrize("name", ["../escape", "", "a\nname", "team.dev", "x" * 129]) def test_invalid_profile_name_rejects_before_install(setup, name): _, home, switchyard_home, env = setup env["SY_PROFILE"] = name @@ -374,9 +313,7 @@ def test_invalid_profile_name_rejects_before_install(setup, name): assert not (home / "Applications").exists() -@pytest.mark.parametrize( - "model", ["", "model\nname", "model\rname", "model\x01name", "model\x7fname"] -) +@pytest.mark.parametrize("model", ["", "model\nname", "model\x7fname"]) def test_invalid_model_rejects_before_install(setup, model): _, home, switchyard_home, env = setup env["SY_MODEL"] = model From 85e23ad589e26bac8c60ceff9123d139afa66642 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 13:42:38 -0700 Subject: [PATCH 13/39] feat(app): show model usage and prevent route label overlap Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/Cargo.toml | 2 +- crates/switchyard-menubar/README.md | 44 +++- crates/switchyard-menubar/src/controller.rs | 20 +- crates/switchyard-menubar/src/gui.rs | 85 +++---- crates/switchyard-menubar/src/pricing.rs | 2 +- crates/switchyard-menubar/src/rollup.rs | 118 +++++++--- crates/switchyard-menubar/src/summary.rs | 47 ++++ .../tests/frontend.test.cjs | 16 ++ crates/switchyard-menubar/ui/analytics.js | 134 +++++++++++ crates/switchyard-menubar/ui/app.css | 67 ++++-- crates/switchyard-menubar/ui/app.js | 50 +--- crates/switchyard-menubar/ui/index.html | 2 + .../ui/vendor/LICENSE.echarts | 222 ++++++++++++++++++ .../ui/vendor/NOTICE.echarts | 5 + .../ui/vendor/echarts.min.js | 45 ++++ 15 files changed, 685 insertions(+), 174 deletions(-) create mode 100644 crates/switchyard-menubar/ui/analytics.js create mode 100644 crates/switchyard-menubar/ui/vendor/LICENSE.echarts create mode 100644 crates/switchyard-menubar/ui/vendor/NOTICE.echarts create mode 100644 crates/switchyard-menubar/ui/vendor/echarts.min.js diff --git a/crates/switchyard-menubar/Cargo.toml b/crates/switchyard-menubar/Cargo.toml index 86d37b52ca..29be5cb73e 100644 --- a/crates/switchyard-menubar/Cargo.toml +++ b/crates/switchyard-menubar/Cargo.toml @@ -14,7 +14,7 @@ rust-version.workspace = true publish = false [dependencies] -chrono = { version = "0.4", default-features = false, features = ["std", "clock"] } +chrono = { version = "0.4", default-features = false, features = ["std", "clock", "serde"] } serde.workspace = true serde_json.workspace = true tempfile = "3" diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index 07522440c9..e34a66e8bd 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -50,11 +50,12 @@ digits, underscores, or hyphens, and contain at most 128 characters. For example the installer rejects `SY_PROFILE=team.dev` before creating app or config files. Open the app from Finder or Spotlight. Closing the window keeps the tray menu. -The tray includes **Install…**, daily and weekly usage previews, a graph of recent -calls by hour, **View usage…**, and **Settings…**. Clicking a usage preview or the -graph opens Usage. Choose **Open Switchyard** to return or **Quit Switchyard** to -exit. The app rejects Quit while an operation is queued or running; try again -after it finishes. +The tray includes **Install…**, the three models with the most recorded tokens, +**View model usage…**, and **Settings…**. Model totals cover the retained log and +include classifier calls. A final row combines any remaining models. Clicking +a model row opens Overview. Choose **Open Switchyard** to return or +**Quit Switchyard** to exit. The app rejects Quit while an operation is queued +or running; try again after it finishes. **Settings → Update from source…** opens Terminal to rebuild and reinstall from the checkout used for this installation. It builds that checkout's current commit @@ -212,11 +213,27 @@ prompts. Recent history reads the last 8 MiB of the log plus one byte to check whether the first record is complete. It keeps at most 5,000 complete records and excludes partial records. Usage labels a limited view and counts unreadable records. -The hourly activity graphs count recent recorded calls from the past 24 hours -and exclude future timestamps. They use this bounded history, so they may omit -calls from a busy day. -Overview totals use a separate incremental reader, so the history limit does -not truncate weekly savings. Routing history stores no prompt or response text. +Overview starts with model totals. Use **Period** to select today, the past +seven local calendar days, or all retained history. **Compare** switches between +models, routes, and sessions; **Measure** switches between tokens and calls. +The chart shows the ten largest totals, and the table lists every matching +name with exact counts. Click a name to see its recent calls with the same +period filter. The daily chart shows usage by model for the past seven days. + +Model, route, and daily totals use the incremental full-log reader. Session +comparisons and per-turn details use the bounded recent history and label its +limits. Replacing or truncating the log resets full-log totals. The terminal +app's hourly sparkline still uses recent history. + +Charts use Apache ECharts 6.1.0, bundled in `ui/vendor` with its Apache license +and NOTICE. They load locally and require no CDN or frontend build tool. +The minified dependency adds about 1.1 MB before compression. Tooltips render +on the canvas, and tables provide readable counts and keyboard links. +The layout follows free references from [Carbon](https://www.carbondesignsystem.com/building-blocks/data-visualization/dashboards), +[Tabler](https://docs.tabler.io/ui/getting-started), and +[Primer](https://primer.style/product/components/page-layout/). + +Routing history stores no prompt or response text. Observed tokens do not report provider quotas, reset windows, or authoritative billing. Both apps refresh usage at the configured `refresh_seconds` interval. @@ -249,9 +266,10 @@ its token counts. without Switchyard they would not happen. Savings are the difference, so routing overhead counts against the figure and -a bad day shows a negative number. Today's and this week's dollar figures stay hidden until every model seen in that period, and the baseline -model, has a price, so a partial table cannot mislead. While this week's -figures are hidden, the Overview names the models that have no price. +a bad day shows a negative number. Each period's cost and savings estimates +stay hidden until every model recorded in that period and the baseline model +have prices. Overview names missing prices under +**How cost estimates work**. Codex's "Approve for me" reviews count too. The server config that the installer writes sends them to `codex-auto-review` on the ChatGPT backend. With diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index f2f86b6d0a..c3fd9905ca 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -127,13 +127,25 @@ impl Controller { pub fn snapshot(&mut self) -> Result { self.reload()?; let mut errors = Vec::new(); + // One local date keeps aggregate totals and frontend filters aligned across midnight. + let today = chrono::Local::now().date_naive(); let usage = self .reader - .read(&self.config.routing_log, chrono::Local::now().date_naive()) + .read(&self.config.routing_log, today) .unwrap_or_else(|error| { errors.push(format!("Could not read usage: {error}")); rollup::Usage::default() }); + let estimates: std::collections::BTreeMap<_, _> = [ + ("today", &usage.today), ("week", &usage.week), ("all", &usage.all), + ].into_iter().map(|(period, totals)| { + let missing = crate::pricing::unpriced( + totals.routed.keys().chain(totals.classifier.keys()) + .map(String::as_str).chain(std::iter::once(self.config.baseline_model.as_str())), + &self.config.prices, + ); + (period, json!({"cost":crate::pricing::estimate(totals, &self.config.prices, &self.config.baseline_model),"missing":missing})) + }).collect(); let server_status = crate::health::probe(&self.config.server_url); let summary = crate::summary::build(server_status, &usage, &self.config); let metrics = json!({"server_url":self.config.server_url,"running":server_status == crate::health::ServerStatus::Running, @@ -172,6 +184,7 @@ impl Controller { Ok( json!({"generation":self.generation,"summary":summary,"metrics":metrics,"routes":routes,"clients":clients,"tools":tools, "algorithms":ALGORITHMS.iter().map(|a|json!({"kind":a.kind,"title":a.title,"summary":a.summary})).collect::>(), + "today":today,"analytics":usage,"estimates":estimates,"baseline_model":self.config.baseline_model, "activity":activity,"sessions":history.sessions(),"entries":history.entries,"limited":history.limited,"skipped":history.skipped, "errors":errors,"refresh_seconds":self.config.refresh_seconds.max(1)}), ) @@ -703,6 +716,11 @@ mod tests { let snapshot = controller.snapshot().expect("snapshot"); assert_eq!(snapshot["sessions"], json!(["session"])); assert_eq!(snapshot["entries"][0]["model"], "actual"); + assert_eq!( + snapshot["analytics"]["all"]["routed"]["actual"]["requests"], + 1 + ); + assert!(snapshot["estimates"]["all"]["cost"].is_null()); assert!(!snapshot["errors"].as_array().expect("errors").is_empty()); assert!(!snapshot.to_string().contains("PRIVATE_VALUE")); } diff --git a/crates/switchyard-menubar/src/gui.rs b/crates/switchyard-menubar/src/gui.rs index beaef417fa..85d1e06e95 100644 --- a/crates/switchyard-menubar/src/gui.rs +++ b/crates/switchyard-menubar/src/gui.rs @@ -20,40 +20,25 @@ struct Shared { operation: Arc, } struct TrayPreview { - today: MenuItem, - week: MenuItem, - activity: MenuItem, + menu: Menu, } impl TrayPreview { - fn update(&self, snapshot: &serde_json::Value) -> tauri::Result<()> { - for (prefix, item) in [("Today —", &self.today), ("This week —", &self.week)] { - let label = snapshot["summary"] - .as_array() - .and_then(|rows| { - rows.iter() - .filter_map(|row| row.as_str()) - .find(|row| row.starts_with(prefix) || *row == "No requests recorded yet") - }) - .unwrap_or("Usage unavailable"); - item.set_text(label)?; + fn update(&self, app: &tauri::AppHandle, snapshot: &serde_json::Value) -> Result<(), String> { + let totals: crate::rollup::Totals = + serde_json::from_value(snapshot["analytics"]["all"].clone()) + .map_err(|error| error.to_string())?; + for item in self.menu.items().map_err(|error| error.to_string())? { + if item.id().as_ref().starts_with("model:") { + self.menu.remove(&item).map_err(|error| error.to_string())?; + } + } + for (index, label) in crate::summary::tray_models(&totals).into_iter().enumerate() { + let item = MenuItem::with_id(app, format!("model:{index}"), label, true, None::<&str>) + .map_err(|error| error.to_string())?; + self.menu + .insert(&item, 4 + index) + .map_err(|error| error.to_string())?; } - let values = snapshot["activity"] - .as_array() - .map(|items| { - items - .iter() - .map(|item| item.as_u64().unwrap_or(0)) - .collect::>() - }) - .unwrap_or_default(); - let max = values.iter().copied().max().unwrap_or(1).max(1); - let levels = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']; - let graph: String = values - .iter() - .map(|value| levels[(*value as f64 / max as f64 * 7.0).round() as usize]) - .collect(); - self.activity - .set_text(format!("Recent calls · 24h {graph} → Usage"))?; Ok(()) } } @@ -96,9 +81,7 @@ async fn snapshot( }) .await .map_err(|e| e.to_string())??; - app.state::() - .update(&snapshot) - .map_err(|e| e.to_string())?; + app.state::().update(&app, &snapshot)?; Ok(snapshot) } #[tauri::command] @@ -144,23 +127,14 @@ pub fn run(controller: Controller) -> Result<(), String> { .setup(|app| { let open = MenuItem::with_id(app, "open", "Open Switchyard", true, None::<&str>)?; let install = MenuItem::with_id(app, "install", "Install…", true, None::<&str>)?; - let today = - MenuItem::with_id(app, "today", "Today — loading usage…", true, None::<&str>)?; - let week = MenuItem::with_id( - app, - "week", - "This week — loading usage…", - true, - None::<&str>, - )?; - let activity = MenuItem::with_id( + let period = MenuItem::with_id( app, - "activity", - "Recent calls · loading… → Usage", - true, + "period", + "Models · all retained history", + false, None::<&str>, )?; - let usage = MenuItem::with_id(app, "usage", "View usage…", true, None::<&str>)?; + let usage = MenuItem::with_id(app, "usage", "View model usage…", true, None::<&str>)?; let settings = MenuItem::with_id(app, "settings", "Settings…", true, None::<&str>)?; let quit = MenuItem::with_id(app, "quit", "Quit Switchyard", true, None::<&str>)?; let separator = PredefinedMenuItem::separator(app)?; @@ -171,20 +145,14 @@ pub fn run(controller: Controller) -> Result<(), String> { &open, &install, &separator, - &today, - &week, - &activity, + &period, &usage, &bottom_separator, &settings, &quit, ], )?; - app.manage(TrayPreview { - today, - week, - activity, - }); + app.manage(TrayPreview { menu: menu.clone() }); if let Ok(snapshot) = app .state::() .controller @@ -192,7 +160,7 @@ pub fn run(controller: Controller) -> Result<(), String> { .map_err(|e| e.to_string())? .snapshot() { - app.state::().update(&snapshot)?; + app.state::().update(app.handle(), &snapshot)?; } TrayIconBuilder::new() .icon(tauri::image::Image::new_owned( @@ -206,7 +174,8 @@ pub fn run(controller: Controller) -> Result<(), String> { .on_menu_event(|app, event| match event.id.as_ref() { "open" => open_page(app, "overview"), "install" => open_page(app, "install"), - "today" | "week" | "activity" | "usage" => open_page(app, "usage"), + "usage" => open_page(app, "overview"), + id if id.starts_with("model:") => open_page(app, "overview"), "settings" => open_page(app, "settings"), "quit" if app.state::().quit() => app.exit(0), _ => {} diff --git a/crates/switchyard-menubar/src/pricing.rs b/crates/switchyard-menubar/src/pricing.rs index 4905318b3f..01ce8c58ed 100644 --- a/crates/switchyard-menubar/src/pricing.rs +++ b/crates/switchyard-menubar/src/pricing.rs @@ -36,7 +36,7 @@ impl ModelPrice { pub type PriceTable = BTreeMap; /// Savings stores estimated costs with and without routing. -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, serde::Serialize)] pub struct Savings { /// This field stores the estimated cost of recorded calls, including classifier calls. pub actual: f64, diff --git a/crates/switchyard-menubar/src/rollup.rs b/crates/switchyard-menubar/src/rollup.rs index d750aa84c7..949e654189 100644 --- a/crates/switchyard-menubar/src/rollup.rs +++ b/crates/switchyard-menubar/src/rollup.rs @@ -1,21 +1,22 @@ // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! This module totals tokens for today and the past week from the server's routing log. +//! This module totals recorded model calls from the retained routing log. use std::collections::BTreeMap; use std::fs::{File, Metadata}; use std::io::{BufRead, BufReader, Seek, SeekFrom}; use std::path::Path; +use crate::history::Entry; use chrono::{DateTime, Local, NaiveDate}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; /// CLASSIFIER_TIER matches the tier recorded for classifier and judge calls. const CLASSIFIER_TIER: &str = "classifier"; /// ModelTokens stores recorded token counts for one model. -#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] pub struct ModelTokens { pub requests: u64, /// This field counts input tokens priced at the full rate, including cache writes. @@ -44,16 +45,18 @@ impl ModelTokens { /// /// The split matters for savings: without Switchyard the `routed` calls would /// still have happened, but the `classifier` calls would not exist at all. -#[derive(Clone, Debug, Default, PartialEq, Eq)] +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct Totals { /// This field groups caller-facing calls by the model that answered. pub routed: BTreeMap, /// This field groups classifier and judge calls by model. pub classifier: BTreeMap, + /// Each route includes its answer calls and routing overhead. + pub routes: BTreeMap, } impl Totals { - fn add(&mut self, record: &Record) { + fn add(&mut self, record: &Entry) { let bucket = if record.tier == CLASSIFIER_TIER { &mut self.classifier } else { @@ -62,13 +65,18 @@ impl Totals { bucket .entry(record.model.clone()) .or_default() - .add(&record.tokens()); + .add(&ModelTokens::from(record)); + self.routes + .entry(record.route_id.clone()) + .or_default() + .add(&ModelTokens::from(record)); } fn merge(&mut self, other: &Self) { for (own, incoming) in [ (&mut self.routed, &other.routed), (&mut self.classifier, &other.classifier), + (&mut self.routes, &other.routes), ] { for (model, tokens) in incoming { own.entry(model.clone()).or_default().add(tokens); @@ -96,47 +104,35 @@ impl Totals { } } -/// Usage stores totals for the daily and weekly summaries. -#[derive(Clone, Debug, Default)] +/// Usage stores totals from the retained log and seven local calendar days. +#[derive(Clone, Debug, Default, Serialize)] pub struct Usage { pub today: Totals, pub week: Totals, + pub all: Totals, + pub days: BTreeMap, } -/// Record contains the fields used to total one routing log entry. -#[derive(Deserialize)] -struct Record { - ts: String, - model: String, - #[serde(default)] - tier: String, - #[serde(default)] - prompt_tokens: u64, - #[serde(default)] - cached_tokens: u64, - #[serde(default)] - completion_tokens: u64, -} - -impl Record { - fn tokens(&self) -> ModelTokens { - ModelTokens { +impl From<&Entry> for ModelTokens { + fn from(record: &Entry) -> Self { + Self { requests: 1, - // `prompt_tokens` is the whole input, cache reads included. - input: self.prompt_tokens.saturating_sub(self.cached_tokens), - cached_input: self.cached_tokens, - // Completion tokens already include reasoning tokens. - output: self.completion_tokens, + // The recorded input includes cached reads; output includes reasoning. + input: record.prompt_tokens.saturating_sub(record.cached_tokens), + cached_input: record.cached_tokens, + output: record.completion_tokens, } } } -/// Reader keeps daily totals and reads only newly completed log lines. +/// Reader keeps model and route totals without retaining individual calls. +/// Each read consumes only newly completed log lines. #[derive(Default)] pub struct Reader { metadata: Option, offset: u64, days: BTreeMap, + all: Totals, } impl Reader { @@ -159,6 +155,7 @@ impl Reader { { self.offset = 0; self.days.clear(); + self.all = Totals::default(); } self.metadata = Some(metadata); file.seek(SeekFrom::Start(self.offset))?; @@ -175,24 +172,33 @@ impl Reader { break; } self.offset += bytes as u64; - let Ok(record) = serde_json::from_slice::(&line) else { + // Entry applies the same token and optional-ID rules as recent history. + let Ok(record) = serde_json::from_slice::(&line) else { continue; }; + if record.model.trim().is_empty() { + continue; + } let Ok(ts) = DateTime::parse_from_rfc3339(&record.ts) else { continue; }; let day = ts.with_timezone(&Local).date_naive(); + self.all.add(&record); if day >= week_start { self.days.entry(day).or_default().add(&record); } } - let mut usage = Usage::default(); + let mut usage = Usage { + all: self.all.clone(), + ..Usage::default() + }; for (day, totals) in &self.days { if *day == today { usage.today = totals.clone(); } if *day <= today { usage.week.merge(totals); + usage.days.insert(*day, totals.clone()); } } Ok(usage) @@ -239,11 +245,11 @@ mod tests { #[test] fn separates_cache_reads_from_full_price_input() { - let record: Record = serde_json::from_str( + let record: Entry = serde_json::from_str( r#"{"ts":"2026-09-28T10:00:00.000Z","model":"m","prompt_tokens":1000,"cached_tokens":600,"completion_tokens":50,"reasoning_tokens":25}"#, ) .expect("parse record"); - let tokens = record.tokens(); + let tokens = ModelTokens::from(&record); assert_eq!(tokens.input, 400); assert_eq!(tokens.cached_input, 600); assert_eq!(tokens.output, 50); @@ -287,6 +293,42 @@ mod tests { assert_eq!(usage.today.classifier["terra"].requests, 1); } + // The old calls exceed the detail limit, so bounded history cannot supply these totals. + #[test] + fn totals_the_full_log_by_model_route_and_local_day() { + let old = line("2026-08-01T12:00:00.000", "older-model", "", 100, 10); + let answer = line("2026-09-28T12:00:00.000", "answer", "", 50, 5); + let judge = line("2026-09-28T12:00:01.000", "answer", "classifier", 20, 2); + let with_route = + |text: &str| text.replace("\"model\":", "\"route_id\":\"router\",\"model\":"); + let (_dir, path) = log(&format!( + "{}{}\n{}\n{}\n", + format!("{old}\n").repeat(5_001), + with_route(&answer), + with_route(&judge), + line("2026-09-28T12:00:02.000", " ", "", 900, 90) + )); + let mut reader = Reader::default(); + let usage = reader.read(&path, date("2026-09-28")).expect("read"); + assert_eq!(usage.all.requests(), 5_002); + assert_eq!(usage.all.tokens(), 550_187); + assert_eq!(usage.week.tokens(), 77); + assert_eq!(usage.today.routes["router"].requests, 2); + assert_eq!(usage.today.routes["router"].total(), 77); + assert_eq!(usage.days[&date("2026-09-28")], usage.today); + assert_eq!( + reader + .read(&path, date("2026-09-29")) + .expect("next day") + .all, + usage.all + ); + assert_eq!( + crate::summary::tray_models(&usage.today), + ["answer — 77 tokens · calls: 2"] + ); + } + #[test] fn resets_totals_when_the_log_is_replaced_or_truncated() { let (_dir, path) = log(&format!( @@ -302,14 +344,16 @@ mod tests { let usage = reader.read(&path, today).expect("read truncated"); assert_eq!(usage.today.requests(), 1); assert_eq!(usage.today.tokens(), 220); + assert_eq!(usage.all.tokens(), 220); std::fs::rename(&path, path.with_extension("old")).expect("rotate"); std::fs::write(&path, replacement.repeat(3)).expect("replace"); let usage = reader.read(&path, today).expect("read replacement"); assert_eq!(usage.today.requests(), 3); assert_eq!(usage.today.tokens(), 660); + assert_eq!(usage.all.tokens(), 660); std::fs::remove_file(&path).expect("remove log"); let absent = reader.read(&path, today).expect("missing log"); - assert!(absent.today.is_empty() && absent.week.is_empty()); + assert!(absent.today.is_empty() && absent.week.is_empty() && absent.all.is_empty()); } } diff --git a/crates/switchyard-menubar/src/summary.rs b/crates/switchyard-menubar/src/summary.rs index 0715ed073d..0edb6532ab 100644 --- a/crates/switchyard-menubar/src/summary.rs +++ b/crates/switchyard-menubar/src/summary.rs @@ -129,3 +129,50 @@ fn money(value: f64) -> String { format!("${value:.2}") } } + +/// The tray ranks models by recorded tokens and combines models below the top three. +pub fn tray_models(totals: &Totals) -> Vec { + let mut models = totals.routed.clone(); + for (model, overhead) in &totals.classifier { + let counts = models.entry(model.clone()).or_default(); + counts.requests += overhead.requests; + counts.input += overhead.input; + counts.cached_input += overhead.cached_input; + counts.output += overhead.output; + } + let mut models: Vec<_> = models.into_iter().collect(); + models.sort_by(|left, right| { + right + .1 + .total() + .cmp(&left.1.total()) + .then_with(|| left.0.cmp(&right.0)) + }); + if models.is_empty() { + return vec!["No model calls recorded".into()]; + } + let mut rows: Vec<_> = models + .iter() + .take(3) + .map(|(model, counts)| { + format!( + "{model} — {} tokens · calls: {}", + tokens(counts.total()), + counts.requests + ) + }) + .collect(); + if models.len() > 3 { + let remaining: u64 = models + .iter() + .skip(3) + .map(|(_, counts)| counts.total()) + .sum(); + rows.push(format!( + "{} more models — {} tokens", + models.len() - 3, + tokens(remaining) + )); + } + rows +} diff --git a/crates/switchyard-menubar/tests/frontend.test.cjs b/crates/switchyard-menubar/tests/frontend.test.cjs index c40a602653..3916f3953d 100644 --- a/crates/switchyard-menubar/tests/frontend.test.cjs +++ b/crates/switchyard-menubar/tests/frontend.test.cjs @@ -58,3 +58,19 @@ test('reopening an edited route preserves untiered model choices', () => { `, context); assert.deepEqual(Array.from(result), ['edited-first', 'edited-second']); }); + +// Model totals combine answer and classifier calls; session counts use only the chosen period. +test('usage totals retain cached tokens, routing overhead, and session dates', () => { + const context = editor(); + vm.runInContext(fs.readFileSync(path.join(__dirname, '../ui/analytics.js'), 'utf8'), context); + const result = vm.runInContext(`(() => { + const row=modelRows({routed:{model:{requests:2,input:100,cached_input:40,output:20}},classifier:{model:{requests:1,input:10,cached_input:0,output:2}}})[0]; + const entries=[ + {ts:new Date(2026,8,1,12).toISOString(),session_id:'s',prompt_tokens:90,cached_tokens:30,completion_tokens:10}, + {ts:new Date(2026,8,28,12).toISOString(),session_id:'s',prompt_tokens:50,cached_tokens:20,completion_tokens:5}, + {ts:new Date(2026,8,29,0).toISOString(),session_id:null,prompt_tokens:1,cached_tokens:0,completion_tokens:1}, + ]; + return [row.requests,tokenTotal(row),sessionRows(entries,'today','2026-09-28')[0].requests,sessionRows(entries,'all','2026-09-28').length]; + })()`, context); + assert.deepEqual(Array.from(result), [3,172,1,2]); +}); diff --git a/crates/switchyard-menubar/ui/analytics.js b/crates/switchyard-menubar/ui/analytics.js new file mode 100644 index 0000000000..d4a445ff25 --- /dev/null +++ b/crates/switchyard-menubar/ui/analytics.js @@ -0,0 +1,134 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +'use strict'; +const analyticsView = {period:'all',group:'model',metric:'tokens',search:''}; +const chartInstances = []; +const tokenFields = ['requests','input','cached_input','output']; +const chartColors = ['#90bfff','#73d7ba','#c5a4f5','#e9c47b','#ffacb4','#8dd4ec']; +const emptyTokens = () => ({requests:0,input:0,cached_input:0,output:0}); +const tokenTotal = row => row.input + row.cached_input + row.output; +const compactNumber = value => new Intl.NumberFormat(undefined,{notation:'compact',maximumFractionDigits:1}).format(value); +const dollars = value => new Intl.NumberFormat(undefined,{style:'currency',currency:'USD'}).format(value); +function addTokens(target, source) { for(const key of tokenFields)target[key] += source[key]; return target; } +function modelRows(totals) { + const rows = new Map(); + for(const group of [totals.routed,totals.classifier])for(const [id,tokens] of Object.entries(group)) { + if(!rows.has(id))rows.set(id,{id,...emptyTokens()}); + addTokens(rows.get(id),tokens); + } + return [...rows.values()]; +} +function disposeCharts() { + for(const {chart,observer} of chartInstances) { observer.disconnect(); chart.dispose(); } + chartInstances.length = 0; +} +// Canvas tooltips display recorded names without interpreting them as HTML. +function mountChart(parent, options, height, description, onClick) { + const container=node('div',undefined,'usage-chart');container.style.height=`${height}px`; + container.setAttribute('role','img');container.setAttribute('aria-label',description);parent.append(container); + const chart=window.echarts.init(container,null,{renderer:'canvas'}); + chart.setOption({animation:false,backgroundColor:'transparent',textStyle:{fontFamily:'-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif',color:'#d1d7e0'}, + aria:{enabled:true,decal:{show:true}},tooltip:{trigger:'axis',renderMode:'richText',confine:true,backgroundColor:'#252b33',textStyle:{color:'#f2f4f8'},borderColor:'#8491a2'},...options}); + if(onClick)chart.on('click',onClick); + const observer=new ResizeObserver(()=>chart.resize());observer.observe(container);chartInstances.push({chart,observer}); +} +// Local midnight boundaries match the Rust reader's calendar-day totals. +function inPeriod(timestamp, period, today) { + if(period==='all')return true; + const date=new Date(timestamp),start=new Date(`${today}T00:00:00`),end=new Date(start); + end.setDate(end.getDate()+1); + if(period==='week')start.setDate(start.getDate()-6); + return date>=start&&date{page='routes';render();});content.append(line); + const controls=node('div',undefined,'analytics-controls');content.append(controls); + const period=field(controls,'Period',select([['all','All retained history'],['week','Past 7 days'],['today','Today']],analyticsView.period)); + const totals=snapshot.analytics[analyticsView.period],models=modelRows(totals),combined=models.reduce(addTokens,emptyTokens()); + const overhead=Object.values(totals.classifier).reduce(addTokens,emptyTokens()); + const estimate=snapshot.estimates[analyticsView.period],cost=estimate.cost; + const metricsGrid=node('div',undefined,'usage-metrics');content.append(metricsGrid); + for(const [label,value,detail] of [ + ['Recorded tokens',compactNumber(tokenTotal(combined)),`Model calls: ${combined.requests.toLocaleString()} · includes cached reads`], + ['Routing overhead',compactNumber(tokenTotal(overhead)),`Classifier and judge calls: ${overhead.requests.toLocaleString()}`], + ['Estimated cost',cost?dollars(cost.actual):'—',cost?'Includes routing overhead':'Prices required'], + ['Estimated savings',cost?dollars(cost.baseline-cost.actual):'—',cost?`vs ${snapshot.baseline_model}`:'Set baseline and model prices'], + ]) { + const panel=node('div',undefined,'usage-metric');panel.append(node('p',label),node('strong',value),node('small',detail));metricsGrid.append(panel); + } + const costNote=node('details',undefined,'estimate-note');costNote.append(node('summary','How cost estimates work')); + costNote.append(node('p','Estimates apply your configured per-token prices to recorded usage. The baseline prices the same answer tokens at one model’s rates. Routing overhead reduces savings. These are not subscription charges or measured token savings.')); + if(cost)costNote.append(node('p',`Baseline: ${snapshot.baseline_model} · ${dollars(cost.baseline)}. ${cost.baseline>0?`${((cost.baseline-cost.actual)/cost.baseline*100).toFixed(1)}% estimated savings.`:''}`)); + else costNote.append(node('p',`Add prices in menubar.toml for: ${estimate.missing.join(', ')||'the baseline model'}.`)); + content.append(costNote); + const comparison=card('Usage by model'); + const filters=node('div',undefined,'analytics-controls');comparison.append(filters); + const group=field(filters,'Compare',select([['model','Models'],['route','Routes'],['session','Sessions']],analyticsView.group)); + const metric=field(filters,'Measure',select([['tokens','Tokens'],['requests','Model calls']],analyticsView.metric)); + const search=field(filters,'Filter names',input(analyticsView.search));search.placeholder='Find a model, route, or session'; + const chartParent=node('div'),tableParent=node('div',undefined,'analytics-table');comparison.append(chartParent,tableParent); + const labelFor=row=>row.id|| (group.value==='session'?'Session not recorded':'Route not recorded'); + const draw=()=>{ + analyticsView.group=group.value;analyticsView.metric=metric.value;analyticsView.search=search.value; + comparison.querySelector('h3').textContent=`Usage by ${group.value}`; + // A chart owns its resize observer only while its container is visible. + disposeCharts();chartParent.replaceChildren();tableParent.replaceChildren(); + let rows=group.value==='model'?models:group.value==='route'?Object.entries(totals.routes).map(([id,tokens])=>({id,...tokens})):sessionRows(snapshot.entries,period.value,snapshot.today); + const value=row=>metric.value==='tokens'?tokenTotal(row):row.requests; + rows=rows.filter(row=>labelFor(row).toLowerCase().includes(search.value.toLowerCase())).sort((a,b)=>value(b)-value(a)||a.id.localeCompare(b.id)); + chartParent.append(node('p',group.value==='session'?`Session comparison uses ${snapshot.entries.length.toLocaleString()} recent calls${snapshot.limited?' · limited to 5,000 records / 8 MiB':''}.`:'Totals cover completed calls in the retained log, including routing overhead.','muted')); + if(rows.length) { + const shown=rows.slice(0,10),names=shown.map(labelFor); + chartParent.append(node('small',`Showing ${shown.length} of ${rows.length} ${group.value==='model'?'models':group.value==='route'?'routes':'sessions'} · exact values below`)); + mountChart(chartParent,{ + grid:{left:12,right:24,top:36,bottom:24,containLabel:true}, + legend:{top:0,textStyle:{color:'#d1d7e0'},itemWidth:12,itemHeight:8}, + xAxis:{type:'value',axisLabel:{formatter:compactNumber,color:'#d1d7e0'},splitLine:{lineStyle:{color:'#454d59'}}}, + yAxis:{type:'category',inverse:true,data:names,axisLabel:{color:'#f2f4f8',width:160,overflow:'truncate'},axisTick:{show:false},axisLine:{show:false}}, + series:metric.value==='tokens'?['input','cached_input','output'].map((key,i)=>({name:['Input','Cached input','Output'][i],type:'bar',stack:'tokens',barMaxWidth:18,itemStyle:{color:chartColors[i]},data:shown.map(row=>row[key])})):[{name:'Model calls',type:'bar',barMaxWidth:18,itemStyle:{color:chartColors[0]},data:shown.map(row=>row.requests)}], + },Math.max(200,shown.length*38+80),'Usage comparison. Exact counts and links are in the table below.',event=>openUsage(group.value,shown[event.dataIndex].id)); + } else chartParent.append(node('p',search.value?'No names match this filter.':'No model calls recorded for this period.','empty-state')); + const scroll=node('div',undefined,'usage-table-scroll'),table=node('table',undefined,'usage-totals-table'),head=node('tr'),thead=node('thead'),body=node('tbody'); + for(const name of [group.value==='model'?'Model':group.value==='route'?'Route':'Session','Calls','Input','Cached','Output','Total tokens']) { const th=node('th',name);th.scope='col';head.append(th); } + thead.append(head);table.append(thead,body);scroll.append(table);tableParent.append(scroll); + for(const row of rows) { + const tr=node('tr'),name=node('td');button(name,labelFor(row),()=>openUsage(group.value,row.id));tr.append(name); + for(const count of [row.requests,row.input,row.cached_input,row.output,tokenTotal(row)])tr.append(node('td',count.toLocaleString()));body.append(tr); + } + renderDaily(comparison); + }; + period.onchange=()=>{analyticsView.period=period.value;render();};group.onchange=draw;metric.onchange=draw;search.oninput=draw;draw(); + content.append(node('p','All retained history resets if the routing log is replaced or truncated. Session and turn details use recent history.','coverage-note')); +} +function renderDaily(parent) { + parent.querySelector('.daily-usage')?.remove(); + const panel=node('div',undefined,'daily-usage');parent.append(panel);panel.append(node('h3','Daily usage by model'),node('p','Past 7 local calendar days · tokens, including cached reads and routing overhead','muted')); + const end=new Date(`${snapshot.today}T00:00:00`),days=[]; + for(let offset=6;offset>=0;offset--) {const date=new Date(end);date.setDate(date.getDate()-offset);days.push(`${date.getFullYear()}-${String(date.getMonth()+1).padStart(2,'0')}-${String(date.getDate()).padStart(2,'0')}`);} + const models=modelRows(snapshot.analytics.week).sort((a,b)=>tokenTotal(b)-tokenTotal(a)||a.id.localeCompare(b.id)); + if(!models.length){panel.append(node('p','No model calls recorded in the past 7 days.','empty-state'));return;} + const series=models.slice(0,5).map((model,i)=>({name:model.id,type:'bar',stack:'models',barMaxWidth:40,itemStyle:{color:chartColors[i]},data:days.map(day=>tokenTotal(modelRows(snapshot.analytics.days[day]||{routed:{},classifier:{}}).find(row=>row.id===model.id)||emptyTokens()))})); + if(models.length>5)series.push({name:'Other models',type:'bar',stack:'models',itemStyle:{color:chartColors[5]},data:days.map(day=>modelRows(snapshot.analytics.days[day]||{routed:{},classifier:{}}).filter(row=>!models.slice(0,5).some(model=>model.id===row.id)).reduce((sum,row)=>sum+tokenTotal(row),0))}); + mountChart(panel,{grid:{left:12,right:20,top:20,bottom:28,containLabel:true}, + xAxis:{type:'category',data:days.map(day=>new Date(`${day}T12:00:00`).toLocaleDateString(undefined,{month:'short',day:'numeric'})),axisLabel:{color:'#d1d7e0'},axisTick:{show:false}}, + yAxis:{type:'value',axisLabel:{color:'#d1d7e0',formatter:compactNumber},splitLine:{lineStyle:{color:'#454d59'}}},series},220,'Daily recorded tokens. Exact daily totals follow.'); + const key=node('div',undefined,'chart-key');series.forEach((item,i)=>{const label=node('span'),swatch=node('i');swatch.style.background=chartColors[i];label.append(swatch,document.createTextNode(item.name));key.append(label);});panel.append(key); + const daily=node('details');daily.append(node('summary','Exact daily totals'));for(const [index,day] of days.entries())daily.append(node('p',`${day}: ${series.map(item=>`${item.name} ${item.data[index].toLocaleString()}`).join(' · ')}`,'summary-row'));panel.append(daily); +} diff --git a/crates/switchyard-menubar/ui/app.css b/crates/switchyard-menubar/ui/app.css index 818e14bcb6..344a655b33 100644 --- a/crates/switchyard-menubar/ui/app.css +++ b/crates/switchyard-menubar/ui/app.css @@ -132,29 +132,6 @@ td:nth-last-child(-n+3), th:nth-last-child(-n+3) { width: 76px; white-space: now .install-comparison > div + div { border-left: 0; border-top: 1px solid var(--line); } } -.routing-board { background: var(--sidebar); border-radius: 3px; border-top: 2px solid #edc47a; } -.routing-board h3 { color: #edc47a; font: 600 11px/1.4 var(--mono); text-transform: uppercase; letter-spacing: 1.3px; } -.board-head, .board-row { display: grid; grid-template-columns: minmax(0, 1fr) 112px minmax(0, 1fr); gap: 16px; } -.board-head { padding-bottom: 9px; color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .8px; border-bottom: 1px solid var(--line); } -.board-row { padding: 14px 0; align-items: start; } -.board-row:first-child { padding-top: 14px; } -.board-row h4 { font: 12px/1.6 var(--mono); margin: 0; } -.board-models p { font: 11px/1.7 var(--mono); margin: 0 0 5px; } -.board-models p:last-child { margin-bottom: 0; } -.board-routing { font-size: 11px; line-height: 1.7; color: var(--muted); overflow-wrap: anywhere; } -@media (max-width: 850px) { - .board-head { display: none; } - .board-row { grid-template-columns: minmax(0, 1fr) 100px; gap: 8px; } - .board-models { grid-column: 1 / -1; } -} - -.metric-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px; } -.metric strong { font-size:32px;font-weight:600;font-variant-numeric:tabular-nums; } -.metric p { margin-top:8px;font-size:12px; } -.endpoint-address { font-family:var(--mono);margin-top:12px;overflow-wrap:anywhere; } -.connected { color:#a5e9c5;border-color:#547b68; } -.activity-graph { height:80px;display:flex;align-items:end;gap:5px;margin:20px 0 12px;border-bottom:1px solid var(--line); } -.activity-bar { flex:1;background:var(--accent);border-radius:2px 2px 0 0; } .route-workspace { display:grid;grid-template-columns:minmax(180px,30%) minmax(0,1fr);gap:20px; } .route-picker { max-height:60vh;overflow:auto;display:flex;flex-direction:column;gap:4px; } .route-picker button { border-color:transparent;background:transparent;overflow-wrap:anywhere;padding:10px; } @@ -170,11 +147,10 @@ td:nth-last-child(-n+3), th:nth-last-child(-n+3) { width: 76px; white-space: now .diff-add { background:#21382f;color:#bbf1d2; } button.primary { min-height:38px;font-weight:650;box-shadow:0 1px 2px #0008; } button.danger { color:#ffd1d9; } -@media (max-width:700px) { .route-workspace { grid-template-columns:1fr; } .route-picker { max-height:220px; } .metric-grid { grid-template-columns:1fr; } } +@media (max-width:700px) { .route-workspace { grid-template-columns:1fr; } .route-picker { max-height:220px; } } .field-grid { align-items:start; } -.graph-axis { display:flex;justify-content:space-between;color:var(--muted);font-size:11px;margin-bottom:8px; } .install-diff details { padding:10px 12px; } .install-diff details pre { padding:10px 0 0; } @@ -183,3 +159,44 @@ button.danger { color:#ffd1d9; } .confirm-dialog { width:100%;max-width:440px;background:var(--panel);border:1px solid var(--control-border);border-radius:8px;padding:24px;box-shadow:0 12px 48px #0008; } .confirm-dialog .actions { justify-content:flex-end; } .confirm-dialog button.danger { background:#6e2834;border-color:#b15d6d;color:#ffd1d9; } + +/* Rows grow with their labels; only the list scrolls. */ +.route-picker { display: grid; grid-auto-rows: max-content; align-content: start; } +.route-picker button { min-width: 0; width: 100%; height: auto; white-space: normal; } +.route-picker .route-name, .route-picker small { display: block; min-width: 0; overflow-wrap: anywhere; } +.route-picker .route-name { font-weight: 600; } +.route-detail { min-width: 0; } +.route-detail .role-fields { grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); } +.connection-line { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 14px; font-size: 12px; color: var(--muted); } +.connection-state { font-weight: 600; } +.connection-state.connected { color: #a5e9c5; } +.connection-state::before { content: '●'; padding-right: 6px; } +.connection-address { font-family: var(--mono); min-width: 0; overflow-wrap: anywhere; } +.connection-line button { margin-left: auto; } +.analytics-controls { display: flex; flex-wrap: wrap; gap: 12px; align-items: end; } +.analytics-controls label { margin: 0; flex: 1; min-width: 140px; max-width: 300px; } +.usage-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; padding: 20px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); } +.usage-metric { min-width: 0; overflow-wrap: anywhere; } +.usage-metric > p { font-size: 12px; color: var(--muted); margin-bottom: 8px; } +.usage-metric > strong { display: block; font-size: 28px; font-weight: 600; font-variant-numeric: tabular-nums; line-height: 1.25; margin-bottom: 8px; } +.estimate-note { margin: -8px 0 0; font-size: 12px; } +.estimate-note p { margin-top: 10px; max-width: 90ch; overflow-wrap: anywhere; } +.usage-chart { width: 100%; min-width: 0; margin-top: 12px; } +.analytics-controls + div > p { margin-top: 16px; font-size: 12px; } +.usage-table-scroll { overflow: auto; max-height: 320px; border-top: 1px solid var(--line); margin-top: 12px; } +.usage-totals-table { min-width: 640px; table-layout: auto; } +.usage-totals-table th { position: sticky; top: 0; } +.usage-totals-table th:first-child { width: 38%; } +.usage-totals-table th:not(:first-child), .usage-totals-table td:not(:first-child) { white-space: nowrap; width: auto; text-align: right; font-variant-numeric: tabular-nums; } +.usage-totals-table td:first-child { min-width: 140px; max-width: 280px; } +.usage-totals-table button { border: 0; background: none; padding: 0; min-height: 24px; color: var(--accent); overflow-wrap: anywhere; max-width: 100%; } +.usage-totals-table button:hover { text-decoration: underline; } +.daily-usage { border-top: 1px solid var(--line); margin-top: 24px; padding-top: 22px; min-width: 0; } +.daily-usage > p { font-size: 12px; } +.chart-key { display: flex; flex-wrap: wrap; gap: 8px 18px; font-size: 11px; margin-top: 12px; } +.chart-key span { display: flex; align-items: center; min-width: 0; overflow-wrap: anywhere; gap: 6px; } +.chart-key i { width: 10px; height: 10px; flex: none; border-radius: 2px; } +.coverage-note { font-size: 11px; color: var(--muted); } +.usage-filter { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; overflow-wrap: anywhere; } +@media (max-width: 1000px) { .usage-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); } } +@media (max-width: 460px) { .usage-metrics { grid-template-columns: 1fr; } .connection-line button { margin-left: 0; } } diff --git a/crates/switchyard-menubar/ui/app.js b/crates/switchyard-menubar/ui/app.js index 0e8c88c57b..e68ccb0473 100644 --- a/crates/switchyard-menubar/ui/app.js +++ b/crates/switchyard-menubar/ui/app.js @@ -7,7 +7,7 @@ const status = document.querySelector('#status'); let snapshot, page = 'overview', busy = false; let operationQueue = Promise.resolve(); const drafts = new Map(), lists = new Map(); -const usageView = {session:'',search:''}; +const usageView = {session:'',search:'',exact:null}; const routeView = {selected:'',search:''}; const installView = {tool:'',account:'',route:'',file:''}; function node(tag, text, cls) { const n = document.createElement(tag); if (text !== undefined) n.textContent = text; if (cls) n.className = cls; return n; } @@ -76,37 +76,12 @@ let generation; function render() { if (!snapshot) return; if (generation !== snapshot.generation) { drafts.clear(); lists.clear(); generation = snapshot.generation; } + disposeCharts(); content.replaceChildren(); document.querySelector('#title').textContent = {overview:'Overview',routes:'Routes',install:'Install',usage:'Usage',sessions:'Sessions',settings:'Settings'}[page]; document.querySelectorAll('[data-page]').forEach(b=>b.classList.toggle('active',b.dataset.page===page)); if (page==='overview') { - const metrics=snapshot.metrics; - const connection=card('Connection'); - connection.append(node('span',metrics.running?'Connected':'Not responding',metrics.running?'badge connected':'badge')); - connection.append(node('p',metrics.server_url,'endpoint-address')); - const totals=node('div',undefined,'metric-grid');content.append(totals); - for(const [label,period] of [['Today',metrics.today],['Past 7 days',metrics.week]]) { - const panel=node('div',undefined,'card metric');panel.append(node('h3',label),node('strong',period.requests.toLocaleString()),node('span',' model calls'),node('p',`${period.tokens.toLocaleString()} tokens, including routing overhead`,'muted'));totals.append(panel); - } - renderActivity(card('Recent activity')); - const notes=card('Cost estimates'); - let period='';for(const line of snapshot.summary){if(line.startsWith('Today —'))period='Today';if(line.startsWith('This week —'))period='Past 7 days';if(line.includes('Saved'))notes.append(node('p',`${period}: ${line.trim()}`));else if(line.includes('prices')||line.includes('Savings hidden'))notes.append(node('p',line.trim()));} - if(notes.children.length===1)notes.append(node('p','No cost estimate is available yet.','muted')); - const breakdown=node('details');breakdown.append(node('summary','Model breakdown and full usage summary'));for(const line of snapshot.summary)if(line.trim())breakdown.append(node('p',line.trim(),'summary-row'));notes.append(breakdown); - const c=card('Routes');c.classList.add('routing-board'); - const heading=node('div',undefined,'board-head'); - for(const title of ['Route','Routing','Models'])heading.append(node('span',title)); - c.append(heading); - const list=node('div',undefined,'route-list'); - for(const route of snapshot.routes.slice(0,6)) { - const row=node('div',undefined,'route-row board-row'); - const models=node('div',undefined,'board-models'); - for(const choice of route.choices)models.append(node('p',`${choice.model} · ${choice.client}`)); - row.append(node('h4',route.id),node('span',snapshot.algorithms.find(a=>a.kind===route.kind)?.title || route.kind,'board-routing'),models); - list.append(row); - } - if(!snapshot.routes.length)list.append(node('p','No routes are configured. Open the server config in Settings to add one.','empty-state')); - c.append(list);button(actions(c),`Manage ${snapshot.routes.length} routes →`,()=>{page='routes';render();}); + renderOverview(); } else if (page==='routes') { renderRouteBrowser(); if (!snapshot.routes.length) text(card('No routes loaded'),'Check the server config in Settings, then refresh.'); @@ -124,6 +99,11 @@ function render() { const c=card('Model calls'); c.append(node('p','Each row shows a completed model call. A turn may include several calls. Input tokens include cached reads.')); c.append(node('p',`${snapshot.entries.length} recent calls${snapshot.limited?' (limited to 8 MiB / 5,000 records)':''}; Switchyard skipped ${snapshot.skipped} unreadable records.`,'muted')); + if(usageView.exact) { + const {group,id,period}=usageView.exact,pill=node('div',undefined,'usage-filter'); + pill.append(node('span',`${group}: ${id||'Not recorded'} · ${period==='all'?'All retained history':period==='week'?'Past 7 days':'Today'}`)); + button(pill,'Clear comparison filter',()=>{usageView.exact=null;render();});c.append(pill); + } const filters=node('div',undefined,'field-grid');c.append(filters); const session=field(filters,'Session',select([['','All sessions'],...snapshot.sessions.map(s=>[s,s])],usageView.session)); const search=field(filters,'Search turn, model, or route',input(usageView.search)); @@ -134,6 +114,8 @@ function render() { const thead=node('thead');thead.append(head);table.append(thead);const tbody=node('tbody');table.append(tbody); const query=search.value.toLowerCase(); for(const e of [...snapshot.entries].reverse()) { + const exact=usageView.exact; + if(exact && ((e[{model:'model',route:'route_id',session:'session_id'}[exact.group]]||'')!==exact.id || !inPeriod(e.ts,exact.period,snapshot.today)))continue; if(session.value && e.session_id!==session.value)continue; if(query && ![e.model,e.turn_id,e.route_id].join(' ').toLowerCase().includes(query))continue; const row=node('tr'); @@ -167,15 +149,6 @@ function render() { c.append(node('p','Closing the window keeps Switchyard running. To exit, choose Quit Switchyard from the menu bar after any operation finishes.')); } } -function renderActivity(c) { - c.append(node('p','Model calls per hour · past 24 hours · recent recorded calls','muted')); - const buckets=snapshot.activity; - const graph=node('div',undefined,'activity-graph');graph.setAttribute('role','img');graph.setAttribute('aria-label',`Hourly model calls, oldest first: ${buckets.join(', ')}`); - const max=Math.max(1,...buckets); - buckets.forEach((count,index)=>{const bar=node('div',undefined,'activity-bar');bar.style.height=`${Math.max(2,count/max*100)}%`;bar.title=`${24-index}–${23-index} hours ago · ${count} calls`;graph.append(bar);});c.append(graph); - const axis=node('div',undefined,'graph-axis');axis.append(node('span','24h ago'),node('span','Now'));c.append(axis); - c.append(node('small',`${buckets.reduce((a,b)=>a+b,0)} recorded calls${snapshot.limited?' · recent history is limited':''}`)); -} function renderRouteBrowser() { const c=card('Route library'); const search=field(c,'Find a route by name, routing method, endpoint, or model',input(routeView.search)); @@ -186,7 +159,7 @@ function renderRouteBrowser() { const routes=snapshot.routes.filter(r=>routeMatches(r,search.value)); count.textContent=`${routes.length} of ${snapshot.routes.length} routes`; list.replaceChildren(); - for(const route of routes){const b=button(list,route.id,()=>{routeView.selected=route.key;draw();});b.classList.toggle('selected',route.key===routeView.selected);b.setAttribute('aria-pressed',String(route.key===routeView.selected));b.append(node('small',snapshot.algorithms.find(a=>a.kind===route.kind)?.title||route.kind));if(drafts.get(route.key)?.dirty)b.append(node('small','Unsaved edits'));} + for(const route of routes){const b=button(list,'',()=>{routeView.selected=route.key;draw();});b.classList.toggle('selected',route.key===routeView.selected);b.setAttribute('aria-pressed',String(route.key===routeView.selected));b.append(node('span',route.id,'route-name'));b.append(node('small',snapshot.algorithms.find(a=>a.kind===route.kind)?.title||route.kind));if(drafts.get(route.key)?.dirty)b.append(node('small','Unsaved edits'));} detail.replaceChildren(); if(!routes.length){list.append(node('p','No routes match your search.','empty-state'));return;} const route=routes.find(r=>r.key===routeView.selected)||routes[0];routeView.selected=route.key; @@ -288,6 +261,7 @@ document.querySelectorAll('[data-page]').forEach(b=>b.onclick=()=>{page=b.datase document.querySelector('#refresh').onclick=refresh; window.addEventListener?.('switchyard-page', event=>{ if(!['overview','routes','install','usage','sessions','settings'].includes(event.detail))return; + if(event.detail==='overview')Object.assign(analyticsView,{period:'all',group:'model',search:''}); page=event.detail;render(); if(!snapshot)refresh(); }); diff --git a/crates/switchyard-menubar/ui/index.html b/crates/switchyard-menubar/ui/index.html index f1ddf275e1..1cccfea099 100644 --- a/crates/switchyard-menubar/ui/index.html +++ b/crates/switchyard-menubar/ui/index.html @@ -7,6 +7,8 @@ Switchyard + + diff --git a/crates/switchyard-menubar/ui/vendor/LICENSE.echarts b/crates/switchyard-menubar/ui/vendor/LICENSE.echarts new file mode 100644 index 0000000000..c633765305 --- /dev/null +++ b/crates/switchyard-menubar/ui/vendor/LICENSE.echarts @@ -0,0 +1,222 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + + +======================================================================== +Apache ECharts Subcomponents: + +The Apache ECharts project contains subcomponents with separate copyright +notices and license terms. Your use of the source code for these +subcomponents is also subject to the terms and conditions of the following +licenses. + +BSD 3-Clause (d3.js): +The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause: + `/src/chart/treemap/treemapLayout.ts`, + `/src/chart/tree/layoutHelper.ts`, + `/src/chart/graph/forceHelper.ts`, + `/src/util/number.ts` +See `/licenses/LICENSE-d3` for details of the license. diff --git a/crates/switchyard-menubar/ui/vendor/NOTICE.echarts b/crates/switchyard-menubar/ui/vendor/NOTICE.echarts new file mode 100644 index 0000000000..c6a6e5e43b --- /dev/null +++ b/crates/switchyard-menubar/ui/vendor/NOTICE.echarts @@ -0,0 +1,5 @@ +Apache ECharts +Copyright 2017-2026 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (https://www.apache.org/). \ No newline at end of file diff --git a/crates/switchyard-menubar/ui/vendor/echarts.min.js b/crates/switchyard-menubar/ui/vendor/echarts.min.js new file mode 100644 index 0000000000..3b8ed4bcd1 --- /dev/null +++ b/crates/switchyard-menubar/ui/vendor/echarts.min.js @@ -0,0 +1,45 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).echarts={})}(this,function(t){"use strict"; +/*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},e(t,n)};function n(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}var i=function(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1},r=new function(){this.browser=new i,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow="undefined"!=typeof window};"object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?(r.wxa=!0,r.touchEventsSupported=!0):"undefined"==typeof document&&"undefined"!=typeof self?r.worker=!0:!r.hasGlobalWindow||"Deno"in window||"undefined"!=typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent.indexOf("Node.js")>-1?(r.node=!0,r.svgSupported=!0):function(t,e){var n=e.browser,i=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge?\/([\d.]+)/),a=/micromessenger/i.test(t);i&&(n.firefox=!0,n.version=i[1]);r&&(n.ie=!0,n.version=r[1]);o&&(n.edge=!0,n.version=o[1],n.newEdge=+o[1].split(".")[0]>18);a&&(n.weChat=!0);e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11);var s=e.domSupported="undefined"!=typeof document;if(s){var l=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in l||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in l)&&!("OTransition"in l),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}}(navigator.userAgent,r);var o="sans-serif",a="12px "+o;var s,l,u=function(t){var e={};if("undefined"==typeof JSON)return e;for(var n=0;n=0)o=r*t.length;else for(var h=0;h=M&&(S=0),S++}function T(){for(var t=[],e=0;e>1)%2;a.style.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[s]+":0",r[l]+":0",i[1-s]+":auto",r[1-l]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return e.clearMarkers=function(){B(n,function(t){t.parentNode&&t.parentNode.removeChild(t)})},n}(e,a),l=function(t,e,n){for(var i=n?"invTrans":"trans",r=e[i],o=e.srcCoords,a=[],s=[],l=!0,u=0;u<4;u++){var c=t[u].getBoundingClientRect(),h=2*u,d=c.left,p=c.top;a.push(d,p),l=l&&o&&d===o[h]&&p===o[h+1],s.push(t[u].offsetLeft,t[u].offsetTop)}return l&&r?r:(e.srcCoords=a,e[i]=n?te(s,a):te(a,s))}(s,a,o);if(l)return l(t,n,i),!0}return!1}function re(t){return"CANVAS"===t.nodeName.toUpperCase()}var oe=/([&<>"'])/g,ae={"&":"&","<":"<",">":">",'"':""","'":"'"};function se(t){return null==t?"":(t+"").replace(oe,function(t,e){return ae[e]})}var le=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ue=[],ce=r.browser.firefox&&+r.browser.version.split(".")[0]<39;function he(t,e,n,i){return n=n||{},i?de(t,e,n):ce&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):de(t,e,n),n}function de(t,e,n){if(r.domSupported&&t.getBoundingClientRect){var i=e.clientX,o=e.clientY;if(re(t)){var a=t.getBoundingClientRect();return n.zrX=i-a.left,void(n.zrY=o-a.top)}if(ie(ue,t,i,o))return n.zrX=ue[0],void(n.zrY=ue[1])}n.zrX=n.zrY=0}function pe(t){return t||window.event}function fe(t,e,n){if(null!=(e=pe(e)).zrX)return e;var i=e.type;if(i&&i.indexOf("touch")>=0){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&he(t,r,e,n)}else{he(t,e,e,n);var o=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,i=t.deltaY;if(null==n||null==i)return e;return 3*(0!==i?Math.abs(i):Math.abs(n))*(i>0?-1:i<0?1:n>0?-1:1)}(e);e.zrDelta=o?o/120:-(e.detail||0)/3}var a=e.button;return null==e.which&&void 0!==a&&le.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function ge(t,e,n,i){t.addEventListener(e,n,i)}function ve(t,e,n,i){t.removeEventListener(e,n,i)}var ye=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function me(t){return 2===t.which||3===t.which}var xe=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;o1&&r&&r.length>1){var a=_e(r)/_e(o);!isFinite(a)&&(a=1),e.pinchScale=a;var s=[((i=r)[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];return e.pinchX=s[0],e.pinchY=s[1],{type:"pinch",target:t[0].target,event:e}}}}};function we(){return[1,0,0,1,0,0]}function Se(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function Me(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function Ie(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function Te(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function Ce(t,e,n,i){void 0===i&&(i=[0,0]);var r=e[0],o=e[2],a=e[4],s=e[1],l=e[3],u=e[5],c=Math.sin(n),h=Math.cos(n);return t[0]=r*h+s*c,t[1]=-r*c+s*h,t[2]=o*h+l*c,t[3]=-o*c+h*l,t[4]=h*(a-i[0])+c*(u-i[1])+i[0],t[5]=h*(u-i[1])-c*(a-i[0])+i[1],t}function De(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function Ae(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}function ke(t){var e=[1,0,0,1,0,0];return Me(e,t),e}var Le=Object.freeze({__proto__:null,create:we,identity:Se,copy:Me,mul:Ie,translate:Te,rotate:Ce,scale:De,invert:Ae,clone:ke}),Pe=function(){function t(t,e){this.x=t||0,this.y=e||0}return t.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(t,e){return this.x=t,this.y=e,this},t.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.scale=function(t){this.x*=t,this.y*=t},t.prototype.scaleAndAdd=function(t,e){this.x+=t.x*e,this.y+=t.y*e},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.dot=function(t){return this.x*t.x+this.y*t.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},t.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},t.prototype.distanceSquare=function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(t){if(t){var e=this.x,n=this.y;return this.x=t[0]*e+t[2]*n+t[4],this.y=t[1]*e+t[3]*n+t[5],this}},t.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},t.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},t.set=function(t,e,n){t.x=e,t.y=n},t.copy=function(t,e){t.x=e.x,t.y=e.y},t.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},t.lenSquare=function(t){return t.x*t.x+t.y*t.y},t.dot=function(t,e){return t.x*e.x+t.y*e.y},t.add=function(t,e,n){t.x=e.x+n.x,t.y=e.y+n.y},t.sub=function(t,e,n){t.x=e.x-n.x,t.y=e.y-n.y},t.scale=function(t,e,n){t.x=e.x*n,t.y=e.y*n},t.scaleAndAdd=function(t,e,n,i){t.x=e.x+n.x*i,t.y=e.y+n.y*i},t.lerp=function(t,e,n,i){var r=1-i;t.x=r*e.x+i*n.x,t.y=r*e.y+i*n.y},t}(),Oe=Math.min,Re=Math.max,Ne=Math.abs,Ee=["x","y"],ze=["width","height"],Be=new Pe,Ve=new Pe,Ge=new Pe,Fe=new Pe,He=rn(),We=He.minTv,Ue=He.maxTv,Ye=[0,0],Xe=function(){function t(t,e,n,i){je(this,t,e,n,i)}return t.set=function(t,e,n,i,r){return i<0&&(e+=i,i=-i),r<0&&(n+=r,r=-r),t.x=e,t.y=n,t.width=i,t.height=r,t},t.prototype.union=function(t){var e=Oe(t.x,this.x),n=Oe(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Re(t.x+t.width,this.x+this.width)-e:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=Re(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=e,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(t){return Ke([1,0,0,1,0,0],this,t)},t.prototype.intersect=function(e,n,i){return t.intersect(this,e,n,i)},t.intersect=function(e,n,i,r){i&&Pe.set(i,0,0);var o=r&&r.outIntersectRect||null,a=r&&r.clamp;if(o&&(o.x=o.y=o.width=o.height=NaN),!e||!n)return!1;e instanceof t||(e=je(Qe,e.x,e.y,e.width,e.height)),n instanceof t||(n=je(tn,n.x,n.y,n.width,n.height));var s=!!i;He.reset(r,s);var l=He.touchThreshold,u=e.x+l,c=e.x+e.width-l,h=e.y+l,d=e.y+e.height-l,p=n.x+l,f=n.x+n.width-l,g=n.y+l,v=n.y+n.height-l;if(u>c||h>d||p>f||g>v)return!1;var y=!(c=t.x&&e<=t.x+t.width&&n>=t.y&&n<=t.y+t.height},t.prototype.contain=function(e,n){return t.contain(this,e,n)},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(t){qe(this,t)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e?e.x:0,e?e.y:0,e?e.width:0,e?e.height:0)},t.copy=function(t,e){return t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height,t},t.applyTransform=function(t,e,n){if(n){if(n[1]<1e-5&&n[1]>-1e-5&&n[2]<1e-5&&n[2]>-1e-5){var i=n[0],r=n[3],o=n[4],a=n[5];return t.x=e.x*i+o,t.y=e.y*r+a,t.width=e.width*i,t.height=e.height*r,t.width<0&&(t.x+=t.width,t.width=-t.width),void(t.height<0&&(t.y+=t.height,t.height=-t.height))}Be.x=Ge.x=e.x,Be.y=Fe.y=e.y,Ve.x=Fe.x=e.x+e.width,Ve.y=Ge.y=e.y+e.height,Be.transform(n),Fe.transform(n),Ve.transform(n),Ge.transform(n),t.x=Oe(Be.x,Ve.x,Ge.x,Fe.x),t.y=Oe(Be.y,Ve.y,Ge.y,Fe.y);var s=Re(Be.x,Ve.x,Ge.x,Fe.x),l=Re(Be.y,Ve.y,Ge.y,Fe.y);t.width=s-t.x,t.height=l-t.y}else t!==e&&qe(t,e)},t.calculateTransform=function(t,e,n){var i=n.width/e.width,r=n.height/e.height;return Te(t=Se(t||[]),t,kt(en,-e.x,-e.y)),De(t,t,kt(en,i,r)),Te(t,t,kt(en,n.x,n.y)),t},t}(),Ze=Xe.create,je=Xe.set,qe=Xe.copy,Ke=Xe.calculateTransform,$e=Xe.applyTransform,Je=Xe.contain,Qe=new Xe(0,0,0,0),tn=new Xe(0,0,0,0),en=[];function nn(t,e,n,i,r,o,a,s){var l=Ne(e-n),u=Ne(i-t),c=Oe(l,u),h=Ee[r],d=Ee[1-r],p=ze[r];e=u||!He.bidirectional)&&(We[h]=-u,We[d]=0,He.useDir&&He.calcDirMTV())))}function rn(){var t=0,e=new Pe,n=new Pe,i={minTv:new Pe,maxTv:new Pe,useDir:!1,dirMinTv:new Pe,touchThreshold:0,bidirectional:!0,negativeSize:!1,reset:function(r,o){i.touchThreshold=0,r&&null!=r.touchThreshold&&(i.touchThreshold=Re(0,r.touchThreshold)),i.negativeSize=!1,o&&(i.minTv.set(1/0,1/0),i.maxTv.set(0,0),i.useDir=!1,r&&null!=r.direction&&(i.useDir=!0,i.dirMinTv.copy(i.minTv),n.copy(i.minTv),t=r.direction,i.bidirectional=null==r.bidirectional||!!r.bidirectional,i.bidirectional||e.set(Math.cos(t),Math.sin(t))))},calcDirMTV:function(){var o=i.minTv,a=i.dirMinTv,s=o.y*o.y+o.x*o.x,l=Math.sin(t),u=Math.cos(t),c=l*o.y+u*o.x;r(c)?r(o.x)&&r(o.y)&&a.set(0,0):(n.x=s*u/c,n.y=s*l/c,r(n.x)&&r(n.y)?a.set(0,0):(i.bidirectional||e.dot(n)>0)&&n.len()=0;u--){var c=i[u];c===n||c.ignore||c.ignoreCoarsePointer||c.parent&&c.parent.ignoreCoarsePointer||(cn.copy(c.getBoundingRect()),c.transform&&cn.applyTransform(c.transform),cn.intersect(l)&&o.push(c))}if(o.length)for(var h=Math.PI/12,d=2*Math.PI,p=0;p=0;o--){var a=t[o],s=void 0;if(a!==r&&!a.ignore&&(s=dn(a,n,i))&&(!e.topTarget&&(e.topTarget=a),s!==on)){e.target=a;break}}}function fn(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}B(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){hn.prototype[t]=function(e){var n,i,r=e.zrX,o=e.zrY,a=fn(this,r,o);if("mouseup"===t&&a||(i=(n=this.findHover(r,o)).target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||Ft(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}});function gn(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;r=0;)r++;return r-e}function vn(t,e,n,i,r){for(i===e&&i++;i>>1])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function yn(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}for(a++;a>>1);o(t,e[n+c])>0?a=c+1:l=c}return l}function mn(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}else{for(s=i-r;l=0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}for(a++;a>>1);o(t,e[n+c])<0?l=c:a=c+1}return l}function xn(t,e){var n,i,r=7,o=0,a=[];function s(s){var l=n[s],u=i[s],c=n[s+1],h=i[s+1];i[s]=u+h,s===o-3&&(n[s+1]=n[s+2],i[s+1]=i[s+2]),o--;var d=mn(t[c],t,l,u,0,e);l+=d,0!==(u-=d)&&0!==(h=yn(t[l+u-1],t,c,h,h-1,e))&&(u<=h?function(n,i,o,s){var l=0;for(l=0;l=7||p>=7);if(f)break;g<0&&(g=0),g+=2}if((r=g)<1&&(r=1),1===i){for(l=0;l=0;l--)t[p+l]=t[d+l];return void(t[h]=a[c])}var f=r;for(;;){var g=0,v=0,y=!1;do{if(e(a[c],t[u])<0){if(t[h--]=t[u--],g++,v=0,0===--i){y=!0;break}}else if(t[h--]=a[c--],v++,g=0,1===--s){y=!0;break}}while((g|v)=0;l--)t[p+l]=t[d+l];if(0===i){y=!0;break}}if(t[h--]=a[c--],1===--s){y=!0;break}if(0!==(v=s-yn(t[u],a,0,s,s-1,e))){for(s-=v,p=(h-=v)+1,d=(c-=v)+1,l=0;l=7||v>=7);if(y)break;f<0&&(f=0),f+=2}(r=f)<1&&(r=1);if(1===s){for(p=(h-=i)+1,d=(u-=i)+1,l=i-1;l>=0;l--)t[p+l]=t[d+l];t[h]=a[c]}else{if(0===s)throw new Error;for(d=h-(s-1),l=0;l1;){var t=o-2;if(t>=1&&i[t-1]<=i[t]+i[t+1]||t>=2&&i[t-2]<=i[t]+i[t-1])i[t-1]i[t+1])break;s(t)}},forceMergeRuns:function(){for(;o>1;){var t=o-2;t>0&&i[t-1]=32;)e|=1&t,t>>=1;return t+e}(r);do{if((o=gn(t,n,i,e))s&&(l=s),vn(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),r-=o,n+=o}while(0!==r);a.forceMergeRuns()}}}var bn=!1;function wn(){bn||(bn=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function Sn(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var Mn=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=Sn}return t.prototype.traverse=function(t,e){for(var n=0;n=0&&this._roots.splice(i,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),In=r.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)},Tn={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Tn.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*Tn.bounceIn(2*t):.5*Tn.bounceOut(2*t-1)+.5}},Cn=Math.pow,Dn=Math.sqrt,An=1e-8,kn=1e-4,Ln=Dn(3),Pn=1/3,On=Ct(),Rn=Ct(),Nn=Ct();function En(t){return t>-1e-8&&tAn||t<-1e-8}function Bn(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function Vn(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function Gn(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,c=s*s-3*a*l,h=s*l-9*a*u,d=l*l-3*s*u,p=0;if(En(c)&&En(h)){if(En(s))o[0]=0;else(M=-l/s)>=0&&M<=1&&(o[p++]=M)}else{var f=h*h-4*c*d;if(En(f)){var g=h/c,v=-g/2;(M=-s/a+g)>=0&&M<=1&&(o[p++]=M),v>=0&&v<=1&&(o[p++]=v)}else if(f>0){var y=Dn(f),m=c*s+1.5*a*(-h+y),x=c*s+1.5*a*(-h-y);(M=(-s-((m=m<0?-Cn(-m,Pn):Cn(m,Pn))+(x=x<0?-Cn(-x,Pn):Cn(x,Pn))))/(3*a))>=0&&M<=1&&(o[p++]=M)}else{var _=(2*c*s-3*a*h)/(2*Dn(c*c*c)),b=Math.acos(_)/3,w=Dn(c),S=Math.cos(b),M=(-s-2*w*S)/(3*a),I=(v=(-s+w*(S+Ln*Math.sin(b)))/(3*a),(-s+w*(S-Ln*Math.sin(b)))/(3*a));M>=0&&M<=1&&(o[p++]=M),v>=0&&v<=1&&(o[p++]=v),I>=0&&I<=1&&(o[p++]=I)}}return p}function Fn(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(En(a)){if(zn(o))(c=-s/o)>=0&&c<=1&&(r[l++]=c)}else{var u=o*o-4*a*s;if(En(u))r[0]=-o/(2*a);else if(u>0){var c,h=Dn(u),d=(-o-h)/(2*a);(c=(-o+h)/(2*a))>=0&&c<=1&&(r[l++]=c),d>=0&&d<=1&&(r[l++]=d)}}return l}function Hn(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,c=(l-s)*r+s,h=(c-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=h,o[4]=h,o[5]=c,o[6]=l,o[7]=i}function Wn(t,e,n,i,r,o,a,s,l,u,c){var h,d,p,f,g,v=.005,y=1/0;On[0]=l,On[1]=u;for(var m=0;m<1;m+=.05)Rn[0]=Bn(t,n,r,a,m),Rn[1]=Bn(e,i,o,s,m),(f=Wt(On,Rn))=0&&f=0&&v=1?1:Gn(0,i,o,1,t,s)&&Bn(0,r,a,1,s[0])}}}var Qn=function(){function t(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||St,this.ondestroy=t.ondestroy||St,this.onrestart=t.onrestart||St,t.easing&&this.setEasing(t.easing)}return t.prototype.step=function(t,e){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),!this._paused){var n=this._life,i=t-this._startTime-this._pausedTime,r=i/n;r<0&&(r=0),r=Math.min(r,1);var o=this.easingFunc,a=o?o(r):r;if(this.onframe(a),1===r){if(!this.loop)return!0;var s=i%n;this._startTime=t-s,this._pausedTime=0,this.onrestart()}return!1}this._pausedTime+=e},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(t){this.easing=t,this.easingFunc=Z(t)?t:Tn[t]||Jn(t)},t}(),ti=function(t){this.value=t},ei=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new ti(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),ni=function(){function t(t){this._list=new ei,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var o=n.len(),a=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}a?a.value=e:a=new ti(e),a.key=t,n.insertEntry(a),i[t]=a}return r},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}(),ii={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function ri(t){return(t=Math.round(t))<0?0:t>255?255:t}function oi(t){return t<0?0:t>1?1:t}function ai(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?ri(parseFloat(e)/100*255):ri(parseInt(e,10))}function si(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?oi(parseFloat(e)/100):oi(parseFloat(e))}function li(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function ui(t,e,n){return t+(e-t)*n}function ci(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function hi(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var di=new ni(20),pi=null;function fi(t,e){pi&&hi(pi,e),pi=di.put(t,pi||e.slice())}function gi(t,e){if(t){e=e||[];var n=di.get(t);if(n)return hi(e,n);var i=(t+="").replace(/ /g,"").toLowerCase();if(i in ii)return hi(e,ii[i]),fi(t,e),e;var r,o=i.length;if("#"===i.charAt(0))return 4===o||5===o?(r=parseInt(i.slice(1,4),16))>=0&&r<=4095?(ci(e,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===o?parseInt(i.slice(4),16)/15:1),fi(t,e),e):void ci(e,0,0,0,1):7===o||9===o?(r=parseInt(i.slice(1,7),16))>=0&&r<=16777215?(ci(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===o?parseInt(i.slice(7),16)/255:1),fi(t,e),e):void ci(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var l=i.substr(0,a),u=i.substr(a+1,s-(a+1)).split(","),c=1;switch(l){case"rgba":if(4!==u.length)return 3===u.length?ci(e,+u[0],+u[1],+u[2],1):ci(e,0,0,0,1);c=si(u.pop());case"rgb":return u.length>=3?(ci(e,ai(u[0]),ai(u[1]),ai(u[2]),3===u.length?c:si(u[3])),fi(t,e),e):void ci(e,0,0,0,1);case"hsla":return 4!==u.length?void ci(e,0,0,0,1):(u[3]=si(u[3]),vi(u,e),fi(t,e),e);case"hsl":return 3!==u.length?void ci(e,0,0,0,1):(vi(u,e),fi(t,e),e);default:return}}ci(e,0,0,0,1)}}function vi(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=si(t[1]),r=si(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return ci(e=e||[],ri(255*li(a,o,n+1/3)),ri(255*li(a,o,n)),ri(255*li(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function yi(t,e){var n=gi(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:n[i]<0&&(n[i]=0);return Mi(n,4===n.length?"rgba":"rgb")}}function mi(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=e[r],s=e[o],l=i-r;return n[0]=ri(ui(a[0],s[0],l)),n[1]=ri(ui(a[1],s[1],l)),n[2]=ri(ui(a[2],s[2],l)),n[3]=oi(ui(a[3],s[3],l)),n}}var xi=mi;function _i(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=gi(e[r]),s=gi(e[o]),l=i-r,u=Mi([ri(ui(a[0],s[0],l)),ri(ui(a[1],s[1],l)),ri(ui(a[2],s[2],l)),oi(ui(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:o,value:i}:u}}var bi=_i;function wi(t,e,n,i){var r=gi(t);if(t)return r=function(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var c=((s-i)/6+l/2)/l,h=((s-r)/6+l/2)/l,d=((s-o)/6+l/2)/l;i===s?e=d-h:r===s?e=1/3+c-d:o===s&&(e=2/3+h-c),e<0&&(e+=1),e>1&&(e-=1)}var p=[360*e,n,u];return null!=t[3]&&p.push(t[3]),p}}(r),null!=e&&(r[0]=function(t){return(t=Math.round(t))<0?0:t>360?360:t}(Z(e)?e(r[0]):e)),null!=n&&(r[1]=si(Z(n)?n(r[1]):n)),null!=i&&(r[2]=si(Z(i)?i(r[2]):i)),Mi(vi(r),"rgba")}function Si(t,e){var n=gi(t);if(n&&null!=e)return n[3]=oi(e),Mi(n,"rgba")}function Mi(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function Ii(t,e){var n=gi(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}var Ti=new ni(100);function Ci(t){if(j(t)){var e=Ti.get(t);return e||(e=yi(t,-.1),Ti.put(t,e)),e}if(et(t)){var n=k({},t);return n.colorStops=V(t.colorStops,function(t){return{offset:t.offset,color:yi(t.color,-.1)}}),n}return t}var Di=Object.freeze({__proto__:null,parseCssInt:ai,parseCssFloat:si,parse:gi,lift:yi,toHex:function(t){var e=gi(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)},fastLerp:mi,fastMapToColor:xi,lerp:_i,mapToColor:bi,modifyHSL:wi,modifyAlpha:Si,stringify:Mi,lum:Ii,random:function(){return Mi([Math.round(255*Math.random()),Math.round(255*Math.random()),Math.round(255*Math.random())],"rgb")},liftColor:Ci}),Ai=Math.round;function ki(t){var e;if(t&&"transparent"!==t){if("string"==typeof t&&t.indexOf("rgba")>-1){var n=gi(t);n&&(t="rgb("+n[0]+","+n[1]+","+n[2]+")",e=n[3])}}else t="none";return{color:t,opacity:null==e?1:e}}var Li=1e-4;function Pi(t){return t-1e-4}function Oi(t){return Ai(1e3*t)/1e3}function Ri(t){return Ai(1e4*t)/1e4}var Ni={left:"start",right:"end",center:"middle",middle:"middle"};function Ei(t){return t&&!!t.image}function zi(t){return Ei(t)||function(t){return t&&!!t.svgElement}(t)}function Bi(t){return"linear"===t.type}function Vi(t){return"radial"===t.type}function Gi(t){return t&&("linear"===t.type||"radial"===t.type)}function Fi(t){return"url(#"+t+")"}function Hi(t){var e=t.getGlobalScale(),n=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(n)/Math.log(10)),1)}function Wi(t){var e=t.x||0,n=t.y||0,i=(t.rotation||0)*Mt,r=at(t.scaleX,1),o=at(t.scaleY,1),a=t.skewX||0,s=t.skewY||0,l=[];return(e||n)&&l.push("translate("+e+"px,"+n+"px)"),i&&l.push("rotate("+i+")"),1===r&&1===o||l.push("scale("+r+","+o+")"),(a||s)&&l.push("skew("+Ai(a*Mt)+"deg, "+Ai(s*Mt)+"deg)"),l.join(" ")}var Ui="undefined"!=typeof Buffer&&"function"==typeof Buffer.from?function(t){return Buffer.from(t).toString("base64")}:"function"==typeof btoa&&"function"==typeof unescape&&"function"==typeof encodeURIComponent?function(t){return btoa(unescape(encodeURIComponent(t)))}:function(t){return null},Yi=Array.prototype.slice;function Xi(t,e,n){return(e-t)*n+t}function Zi(t,e,n,i){for(var r=e.length,o=0;oi?e:t,o=Math.min(n,i),a=r[o-1]||{color:[0,0,0,0],offset:0},s=o;sa)i.length=a;else for(var s=o;s=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e,n){this._needsSort=!0;var i=this.keyframes,r=i.length,o=!1,a=6,s=e;if(z(e)){var l=function(t){return z(t&&t[0])?2:1}(e);a=l,(1===l&&!K(e[0])||2===l&&!K(e[0][0]))&&(o=!0)}else if(K(e)&&!rt(e))a=0;else if(j(e))if(isNaN(+e)){var u=gi(e);u&&(s=u,a=3)}else a=0;else if(et(e)){var c=k({},s);c.colorStops=V(e.colorStops,function(t){return{offset:t.offset,color:gi(t.color)}}),Bi(e)?a=4:Vi(e)&&(a=5),s=c}0===r?this.valType=a:a===this.valType&&6!==a||(o=!0),this.discrete=this.discrete||o;var h={time:t,value:s,rawValue:e,percent:0};return n&&(h.easing=n,h.easingFunc=Z(n)?n:Tn[n]||Jn(n)),i.push(h),h},t.prototype.prepare=function(t,e){var n=this.keyframes;this._needsSort&&n.sort(function(t,e){return t.time-e.time});for(var i=this.valType,r=n.length,o=n[r-1],a=this.discrete,s=er(i),l=tr(i),u=0;u=0&&!(l[n].percent<=e);n--);n=p(n,u-2)}else{for(n=d;ne);n++);n=p(n-1,u-2)}r=l[n+1],i=l[n]}if(i&&r){this._lastFr=n,this._lastFrP=e;var f=r.percent-i.percent,g=0===f?1:p((e-i.percent)/f,1);r.easingFunc&&(g=r.easingFunc(g));var v=o?this._additiveValue:h?nr:t[c];if(!er(s)&&!h||v||(v=this._additiveValue=[]),this.discrete)t[c]=g<1?i.rawValue:r.rawValue;else if(er(s))1===s?Zi(v,i[a],r[a],g):function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a0&&s.addKeyframe(0,Ji(l),i),this._trackKeys.push(a)}s.addKeyframe(t,Ji(e[a]),i)}return this._maxTime=Math.max(this._maxTime,t),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var e=t.length,n=0;n0)){this._started=1;for(var e=this,n=[],i=this._maxTime||0,r=0;r1){var a=o.pop();r.addKeyframe(a.time,t[i]),r.prepare(this._maxTime,r.getAdditiveTrack())}}}},t}();function or(){return(new Date).getTime()}var ar,sr,lr=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n}return n(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._head=n,n?n.prev=e:this._tail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){for(var e=or()-this._pausedTime,n=e-this._time,i=this._head;i;){var r=i.next;i.step(e,n)?(i.ondestroy(),this.removeClip(i),i=r):i=r}this._time=e,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0,In(function e(){t._running&&(In(e),!t._paused&&t.update())})},e.prototype.start=function(){this._running||(this._time=or(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=or(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=or()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._head=this._tail=null},e.prototype.isFinished=function(){return null==this._head},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new rr(t,e.loop);return this.addAnimator(n),n},e}($t),ur=r.domSupported,cr=(sr={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},{mouse:ar=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],touch:["touchstart","touchend","touchmove"],pointer:V(ar,function(t){var e=t.replace("mouse","pointer");return sr.hasOwnProperty(e)?e:t})}),hr=["mousemove","mouseup"],dr=["pointermove","pointerup"],pr=!1;function fr(t){var e=t.pointerType;return"pen"===e||"touch"===e}function gr(t){t&&(t.zrByTouch=!0)}function vr(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot);)n=n.parentNode;return i}var yr=function(t,e){this.stopPropagation=St,this.stopImmediatePropagation=St,this.preventDefault=St,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY},mr={mousedown:function(t){t=fe(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=fe(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=fe(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){vr(this,(t=fe(this.dom,t)).toElement||t.relatedTarget)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){pr=!0,t=fe(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){pr||(t=fe(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){gr(t=fe(this.dom,t)),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),mr.mousemove.call(this,t),mr.mousedown.call(this,t)},touchmove:function(t){gr(t=fe(this.dom,t)),this.handler.processGesture(t,"change"),mr.mousemove.call(this,t)},touchend:function(t){gr(t=fe(this.dom,t)),this.handler.processGesture(t,"end"),mr.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<300&&mr.click.call(this,t)},pointerdown:function(t){mr.mousedown.call(this,t)},pointermove:function(t){fr(t)||mr.mousemove.call(this,t)},pointerup:function(t){mr.mouseup.call(this,t)},pointerout:function(t){fr(t)||mr.mouseout.call(this,t)}};B(["click","dblclick","contextmenu"],function(t){mr[t]=function(e){e=fe(this.dom,e),this.trigger(t,e)}});var xr={pointermove:function(t){fr(t)||xr.mousemove.call(this,t)},pointerup:function(t){xr.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function _r(t,e){var n=e.domHandlers;r.pointerEventsSupported?B(cr.pointer,function(i){wr(e,i,function(e){n[i].call(t,e)})}):(r.touchEventsSupported&&B(cr.touch,function(i){wr(e,i,function(r){n[i].call(t,r),function(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout(function(){t.touching=!1,t.touchTimer=null},700)}(e)})}),B(cr.mouse,function(i){wr(e,i,function(r){r=pe(r),e.touching||n[i].call(t,r)})}))}function br(t,e){function n(n){wr(e,n,function(i){i=pe(i),vr(t,i.target)||(i=function(t,e){return fe(t.dom,new yr(t,e),!0)}(t,i),e.domHandlers[n].call(t,i))},{capture:!0})}r.pointerEventsSupported?B(dr,n):r.touchEventsSupported||B(hr,n)}function wr(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,ge(t.domTarget,e,n,i)}function Sr(t){var e=t.mounted;for(var n in e)e.hasOwnProperty(n)&&ve(t.domTarget,n,e[n],t.listenerOpts[n]);t.mounted={}}var Mr=function(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e},Ir=function(t){function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=e,i.painterRoot=n,i._localHandlerScope=new Mr(e,mr),ur&&(i._globalHandlerScope=new Mr(document,xr)),_r(i,i._localHandlerScope),i}return n(e,t),e.prototype.dispose=function(){Sr(this._localHandlerScope),ur&&Sr(this._globalHandlerScope)},e.prototype.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},e.prototype.__togglePointerCapture=function(t){if(this.__mayPointerCapture=null,ur&&+this.__pointerCapturing^+t){this.__pointerCapturing=t;var e=this._globalHandlerScope;t?br(this,e):Sr(e)}},e}($t),Tr=1;r.hasGlobalWindow&&(Tr=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var Cr=Tr,Dr="#333",Ar="#ccc",kr=Se,Lr=5e-5;function Pr(t){return t>Lr||t<-5e-5}var Or=[],Rr=[],Nr=[1,0,0,1,0,0],Er=Math.abs,zr=function(){function t(){}var e;return t.prototype.getLocalTransform=function(t){return Br(this,t)},t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return Pr(this.rotation)||Pr(this.x)||Pr(this.y)||Pr(this.scaleX-1)||Pr(this.scaleY-1)||Pr(this.skewX)||Pr(this.skewY)},t.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,e=this.needLocalTransform(),n=this.transform;e||t?(n=n||[1,0,0,1,0,0],e?this.getLocalTransform(n):kr(n),t&&(e?Ie(n,t,n):Me(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n),this.invTransform=this.invTransform||[1,0,0,1,0,0],Ae(this.invTransform,n)):n&&(kr(n),this.invTransform=null)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(Or);var n=Or[0]<0?-1:1,i=Or[1]<0?-1:1,r=((Or[0]-n)*e+n)/Or[0]||0,o=((Or[1]-i)*e+i)/Or[1]||0;t[0]*=r,t[1]*=r,t[2]*=o,t[3]*=o}},t.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),r=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(r),e=Math.sqrt(e),this.skewX=r,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(t.invTransform=t.invTransform||[1,0,0,1,0,0],Ie(Rr,t.invTransform,e),e=Rr);var n=this.originX,i=this.originY;(n||i)&&(Nr[4]=n,Nr[5]=i,Ie(Rr,e,Nr),Rr[4]-=n,Rr[5]-=i,e=Rr),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&Yt(n,n,i),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&Yt(n,n,i),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&Er(t[0]-1)>1e-10&&Er(t[3]-1)>1e-10?Math.sqrt(Er(t[0]*t[3]-t[2]*t[1])):1},t.prototype.copyTransform=function(t){Hr(this,t)},t.getLocalTransform=function(t,e){e=e||[];var n=t.originX||0,i=t.originY||0,r=t.scaleX,o=t.scaleY,a=t.anchorX,s=t.anchorY,l=t.rotation||0,u=t.x,c=t.y,h=t.skewX?Math.tan(t.skewX):0,d=t.skewY?Math.tan(-t.skewY):0;if(n||i||a||s){var p=n+a,f=i+s;e[4]=-p*r-h*f*o,e[5]=-f*o-d*p*r}else e[4]=e[5]=0;return e[0]=r,e[3]=o,e[1]=d*r,e[2]=h*o,l&&Ce(e,e,l),e[4]+=n+u,e[5]+=i+c,e},t.initDefaultProps=((e=t.prototype).scaleX=e.scaleY=e.globalScaleRatio=1,void(e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0)),t}(),Br=zr.getLocalTransform;function Vr(){return new zr}var Gr,Fr=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function Hr(t,e){return L(t,e,Fr)}function Wr(t){Gr||(Gr=new ni(100)),t=t||a;var e=Gr.get(t);return e||(e={font:t,strWidthCache:new ni(500),asciiWidthMap:null,asciiWidthMapTried:!1,stWideCharWidth:c.measureText("国",t).width,asciiCharWidth:c.measureText("a",t).width},Gr.put(t,e)),e}var Ur=0,Yr=5;function Xr(t,e){return t.asciiWidthMapTried||(t.asciiWidthMap=function(t){if(!(Ur>=Yr)){t=t||a;for(var e=[],n=+new Date,i=0;i<=127;i++)e[i]=c.measureText(String.fromCharCode(i),t).width;var r=+new Date-n;return r>16?Ur=Yr:r>2&&Ur++,e}}(t.font),t.asciiWidthMapTried=!0),0<=e&&e<=127?null!=t.asciiWidthMap?t.asciiWidthMap[e]:t.asciiCharWidth:t.stWideCharWidth}function Zr(t,e){var n=t.strWidthCache,i=n.get(e);return null==i&&(i=c.measureText(e,t.font).width,n.put(e,i)),i}function jr(t,e,n,i){var r=Zr(Wr(e),t),o=Jr(e),a=Kr(0,r,n),s=$r(0,o,i);return new Xe(a,s,r,o)}function qr(t,e,n,i){var r=((t||"")+"").split("\n");if(1===r.length)return jr(r[0],e,n,i);for(var o=new Xe(0,0,0,0),a=0;a=0?parseFloat(t)/100*e:parseFloat(t):t}function to(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,c="left",h="top";if(i instanceof Array)l+=Qr(i[0],n.width),u+=Qr(i[1],n.height),c=null,h=null;else switch(i){case"left":l-=r,u+=s,c="right",h="middle";break;case"right":l+=r+a,u+=s,h="middle";break;case"top":l+=a/2,u-=r,c="center",h="bottom";break;case"bottom":l+=a/2,u+=o+r,c="center";break;case"inside":l+=a/2,u+=s,c="center",h="middle";break;case"insideLeft":l+=r,u+=s,h="middle";break;case"insideRight":l+=a-r,u+=s,c="right",h="middle";break;case"insideTop":l+=a/2,u+=r,c="center";break;case"insideBottom":l+=a/2,u+=o-r,c="center",h="bottom";break;case"insideTopLeft":l+=r,u+=r;break;case"insideTopRight":l+=a-r,u+=r,c="right";break;case"insideBottomLeft":l+=r,u+=o-r,h="bottom";break;case"insideBottomRight":l+=a-r,u+=o-r,c="right",h="bottom"}return(t=t||{}).x=l,t.y=u,t.align=c,t.verticalAlign=h,t}var eo="__zr_normal__",no=Fr.concat(["ignore"]),io=G(Fr,function(t,e){return t[e]=!0,t},{ignore:!1}),ro={},oo=new Xe(0,0,0,0),ao=[],so=function(){function t(t){this.id=I(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,r=e.innerTransformable,o=void 0,a=void 0,s=!1;r.parent=i?this:null;var l=!1;r.copyTransform(e);var u=null!=n.position,c=n.autoOverflowArea,h=void 0;if((c||u)&&(h=oo,n.layoutRect?h.copy(n.layoutRect):h.copy(this.getBoundingRect()),i||h.applyTransform(this.transform)),u){this.calculateTextPosition?this.calculateTextPosition(ro,n,h):to(ro,n,h),r.x=ro.x,r.y=ro.y,o=ro.align,a=ro.verticalAlign;var d=n.origin;if(d&&null!=n.rotation){var p=void 0,f=void 0;"center"===d?(p=.5*h.width,f=.5*h.height):(p=Qr(d[0],h.width),f=Qr(d[1],h.height)),l=!0,r.originX=-r.x+p+(i?0:h.x),r.originY=-r.y+f+(i?0:h.y)}}null!=n.rotation&&(r.rotation=n.rotation);var g=n.offset;g&&(r.x+=g[0],r.y+=g[1],l||(r.originX=-g[0],r.originY=-g[1]));var v=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={});if(c){var y=v.overflowRect=v.overflowRect||new Xe(0,0,0,0);r.getLocalTransform(ao),Ae(ao,ao),Xe.copy(y,h),y.applyTransform(ao)}else v.overflowRect=null;var m=void 0,x=void 0,_=void 0;(null==n.inside?"string"==typeof n.position&&n.position.indexOf("inside")>=0:n.inside)&&this.canBeInsideText()?(m=n.insideFill,x=n.insideStroke,null!=m&&"auto"!==m||(m=this.getInsideTextFill()),null!=x&&"auto"!==x||(x=this.getInsideTextStroke(m),_=!0)):(m=n.outsideFill,x=n.outsideStroke,null!=m&&"auto"!==m||(m=this.getOutsideFill()),null!=x&&"auto"!==x||(x=this.getOutsideStroke(m),_=!0)),(m=m||"#000")===v.fill&&x===v.stroke&&_===v.autoStroke&&o===v.align&&a===v.verticalAlign||(s=!0,v.fill=m,v.stroke=x,v.autoStroke=_,v.align=o,v.verticalAlign=a,e.setDefaultTextStyle(v)),e.__dirty|=1,s&&e.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Ar:Dr},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"==typeof e&&gi(e);n||(n=[255,255,255,1]);for(var i=n[3],r=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(r?0:255)*(1-i);return n[3]=1,Mi(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},k(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"==typeof t)this.attrKV(t,e);else if($(t))for(var n=W(t),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(eo,!1,t)},t.prototype.useState=function(t,e,n,i){var r=t===eo;if(this.hasState()||!r){var o=this.currentStates,a=this.stateTransition;if(!(R(o,t)>=0)||!e&&1!==o.length){var s;if(this.stateProxy&&!r&&(s=this.stateProxy(t)),s||(s=this.states&&this.states[t]),s||r){r||this.saveCurrentToNormalState(s);var l=this._textContent,u=po(this,l,s,i);u&&!this.__inHover&&(this.__inHover=u),this._applyStateObj(t,s,this._normalState,e,go(this,n,a),a);var c=this._textGuide;return l&&l.useState(t,e,n,!!u),c&&c.useState(t,e,n,!!u),r?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!u&&this.__inHover&&(this.__inHover=0,this.__dirty&=-2),s}T("State "+t+" not exists.")}}},t.prototype.useStates=function(t,e,n){if(t.length){var i=[],r=this.currentStates,o=t.length,a=o===r.length;if(a)for(var s=0;s=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var i=this.currentStates.slice(),r=R(i,t),o=R(i,e)>=0;r>=0?o?i.splice(r,1):i[r]=e:n&&!o&&i.push(e),this.useStates(i)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},i=0;i=0&&e.splice(n,1)}),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,i=n.length,r=[],o=0;o0&&n.during&&o[0].during(function(t,e){n.during(e)});for(var d=0;d0||r.force&&!a.length){var w,S=void 0,M=void 0,I=void 0;if(s){M={},d&&(S={});for(_=0;_0}E(so,$t),E(so,zr);var vo=function(t){function e(e){var n=t.call(this)||this;return n.isGroup=!0,n._children=[],n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.children=function(){return this._children.slice()},e.prototype.childAt=function(t){return this._children[t]},e.prototype.childOfName=function(t){for(var e=this._children,n=0;n=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,e){var n=R(this._children,t);return n>=0&&this.replaceAt(e,n),this},e.prototype.replaceAt=function(t,e){var n=this._children,i=n[e];if(t&&t!==this&&t.parent!==this&&t!==i){n[e]=t,i.parent=null;var r=this.__zr;r&&i.removeSelfFromZr(r),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,i=R(n,t);return i<0||(n.splice(i,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._disposed||this._refresh({animUpdate:!1,refresh:!1,refreshHover:!0})},t.prototype.resize=function(t){this._disposed||(t=t||{},this.painter.resize(t.width,t.height),this.handler.resize())},t.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},t.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},t.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},t.prototype.setCursorStyle=function(t){this._disposed||this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){if(!this._disposed)return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this._disposed||this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this._disposed||this.handler.off(t,e)},t.prototype.trigger=function(t,e){this._disposed||this.handler.trigger(t,e)},t.prototype.clear=function(){if(!this._disposed){for(var t=this.storage.getRoots(),e=0;e0){if(t<=r)return a;if(t>=o)return s}else{if(t>=r)return a;if(t<=o)return s}else{if(t===r)return a;if(t===o)return s}return(t-r)/l*u+a}var Vo=function(t,e,n){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return Go(t,e,n)};function Go(t,e,n){return j(t)?Fo(t)?parseFloat(t)/100*e+(n||0):parseFloat(t):null==t?NaN:+t}function Fo(t){return!!(e=t,e.replace(/^\s+|\s+$/g,"")).match(/%$/);var e}function Ho(t,e,n){return isNaN(e)?n?""+t:+t:(e=Co(Do(0,e),20),t=(+t).toFixed(e),n?t:+t)}function Wo(t){return t.sort(function(t,e){return t-e}),t}function Uo(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15;n++,e*=10)if(ko(t*e)/e===t)return n;return Yo(t)}function Yo(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),i=n>0?+e.slice(n+1):0,r=n>0?n:e.length,o=e.indexOf(".");return Do(0,(o<0?0:r-1-o)-i)}function Xo(t,e,n){var i=Ao(t[1]-t[0]);if(!isFinite(i)||0===i)return NaN;var r=Ro(2*Ao(n||1)*Ao(i))/No,o=Ro(Ao(e))/No,a=Do(0,Po(-r+o));return isFinite(a)||(a=NaN),a}function Zo(t,e){var n=G(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return[];for(var i=Oo(10,e),r=V(t,function(t){return(isNaN(t)?0:t)/n*i*100}),o=100*i,a=V(r,function(t){return Lo(t)}),s=G(a,function(t,e){return t+e},0),l=V(r,function(t,e){return t-a[e]});su&&(u=l[h],c=h);++a[c],l[c]=0,++s}return V(a,function(t){return t/i})}function jo(t,e){var n=Do(Uo(t),Uo(e)),i=t+e;return n>20?i:Ho(i,n)}var qo=Oo(2,53)-1;function Ko(t){var e=2*Eo;return(t%e+e)%e}function $o(t){return t>-1e-4&&t=10&&e++,e}function na(t,e){var n=ea(t),i=Oo(10,n),r=t/i;return Ho(t=(2===e?1:e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10)*i,-n)}function ia(t,e){var n=(t.length-1)*e+1,i=Lo(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r}function ra(t){t.sort(function(t,e){return s(t,e,0)?-1:1});for(var e=-1/0,n=1,i=0;i0?t.length:0,this.item=null,this.key=NaN,this},t.prototype.next=function(){return(this._step>0?this._idx=this._end)&&(this.item=this._list[this._idx],this.key=this._idx=this._idx+this._step,!0)},t}();function Ua(t){t.option=t.parentModel=t.ecModel=null}function Ya(){return[1/0,-1/0]}function Xa(t,e){qa(e)&&(et[1]&&(t[1]=e))}function Za(t,e){qa(e)&&et[1]&&(t[1]=e)}function qa(t){return null!=t&&isFinite(t)}function Ka(t,e){return qa(t)&&qa(e)&&t<=e}function $a(t){Ka(t[0],t[1])&&t[0]>t[1]&&(t[0]=t[1])}function Ja(){var t="__ec_once_"+Qa++;return function(e,n){wt(e,t)||(e[t]=1,n())}}var Qa=sa();function ts(t,e,n){var i=mt(),r=0;B(t,function(o){var a=e(o);var s=i.get(a)||0;n&&n(o,s),s||n||(t[r++]=o),i.set(a,s+1)}),n||(t.length=r)}function es(t){return t.value+""}function ns(t){return t+""}function is(t,e){return at(e,!0)?t.seriesIndex+2:0}function rs(t,e,n){var i=t.getData().count();return{progressiveRender:n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,large:t.get("large")&&i>=t.get("largeThreshold"),modDataCount:"mod"===t.get("progressiveChunkMode")?t.getData().count():null}}function os(t,e){return{seriesType:t,overallReset:e}}function as(t){return{overallReset:t}}var ss="___EC__COMPONENT__CONTAINER___",ls="___EC__EXTENDED_CLASS___";function us(t){var e={main:"",sub:""};if(t){var n=t.split(".");e.main=n[0]||"",e.sub=n[1]||""}return e}function cs(t,e){t.$constructor=t,t.extend=function(t){var e,i,r=this;return Z(i=r)&&/^class\s/.test(Function.prototype.toString.call(i))?e=function(t){function e(){return t.apply(this,arguments)||this}return n(e,t),e}(r):(e=function(){(t.$constructor||r).apply(this,arguments)},N(e,this)),k(e.prototype,t),e[ls]=!0,e.extend=this.extend,e.superCall=ps,e.superApply=fs,e.superClass=r,e}}function hs(t,e){t.extend=e.extend}var ds=Math.round(10*Math.random());function ps(t,e){for(var n=[],i=2;i=0||r&&R(r,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var ys=vs([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),ms=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return ys(this,t,e)},t}(),xs=new ni(50);function _s(t){if("string"==typeof t){var e=xs.get(t);return e&&e.image}return t}function bs(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=xs.get(t),a={hostEl:n,cb:i,cbPayload:r};return o?!Ss(e=o.image)&&o.pending.push(a):((e=c.loadImage(t,ws,ws)).__zrImageSrc=t,xs.put(t,e.__cachedImgObj={image:e,pending:[a]})),e}return t}return e}function ws(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=s;u++)l-=s;var c=Zr(a,n);return c>l&&(n="",c=0),l=t-c,r.ellipsis=n,r.ellipsisWidth=c,r.contentWidth=l,r.containerWidth=t,r}function Cs(t,e,n){var i=n.containerWidth,r=n.contentWidth,o=n.fontMeasureInfo;if(!i)return t.textLine="",void(t.isTruncated=!1);var a=Zr(o,e);if(a<=i)return t.textLine=e,void(t.isTruncated=!1);for(var s=0;;s++){if(a<=r||s>=n.maxIterations){e+=n.ellipsis;break}var l=0===s?Ds(e,r,o):a>0?Math.floor(e.length*r/a):0;a=Zr(o,e=e.substr(0,l))}""===e&&(e=n.placeholder),t.textLine=e,t.isTruncated=!0}function Ds(t,e,n){for(var i=0,r=0,o=t.length;r0&&f+i.accumWidth>i.width&&(o=e.split("\n"),h=!0),i.accumWidth=f}else{var g=Ns(e,c,i.width,i.breakAll,i.accumWidth);i.accumWidth=g.accumWidth+p,a=g.linesWidths,o=g.lines}}o||(o=e.split("\n"));for(var v=Wr(c),y=0;y=32&&e<=591||e>=880&&e<=4351||e>=4608&&e<=5119||e>=7680&&e<=8303}(t)||!!Os[t]}function Ns(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,c=0,h=Wr(e),d=0;dn:r+c+f>n)?c?(s||l)&&(g?(s||(s=l,l="",c=u=0),o.push(s),a.push(c-u),l+=p,s="",c=u+=f):(l&&(s+=l,l="",u=0),o.push(s),a.push(c),s=p,c=f)):g?(o.push(l),a.push(u),l=p,u=f):(o.push(p),a.push(f)):(c+=f,g?(l+=p,u+=f):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,c+=u),o.push(s),a.push(c),s="",l="",u=0,c=0}return l&&(s+=l),s&&(o.push(s),a.push(c)),1===o.length&&(c+=r),{accumWidth:c,lines:o,linesWidths:a}}function Es(t,e,n,i,r,o){if(t.baseX=n,t.baseY=i,t.outerWidth=t.outerHeight=null,e){var a=2*e.width,s=2*e.height;Xe.set(zs,Kr(n,a,r),$r(i,s,o),a,s),Xe.intersect(e,zs,null,Bs);var l=Bs.outIntersectRect;t.outerWidth=l.width,t.outerHeight=l.height,t.baseX=Kr(l.x,l.width,r,!0),t.baseY=$r(l.y,l.height,o,!0)}}var zs=new Xe(0,0,0,0),Bs={outIntersectRect:{},clamp:!0};function Vs(t){return null!=t?t+="":t=""}function Gs(t,e,n,i){var r=new Xe(Kr(t.x||0,e,t.textAlign),$r(t.y||0,n,t.textBaseline),e,n),o=null!=i?i:Fs(t)?t.lineWidth:0;return o>0&&(r.x-=o/2,r.y-=o/2,r.width+=o,r.height+=o),r}function Fs(t){var e=t.stroke;return null!=e&&"none"!==e&&t.lineWidth>0}var Hs="__zr_style_"+Math.round(10*Math.random()),Ws={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Us={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};Ws[Hs]=!0;var Ys=["z","z2","invisible"],Xs=["invisible"],Zs=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype._init=function(e){for(var n=W(e),i=0;i1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(el[0]=Qs(r)*n+t,el[1]=Js(r)*i+e,nl[0]=Qs(o)*n+t,nl[1]=Js(o)*i+e,u(s,el,nl),c(l,el,nl),(r%=tl)<0&&(r+=tl),(o%=tl)<0&&(o+=tl),r>o&&!a?o+=tl:rr&&(il[0]=Qs(p)*n+t,il[1]=Js(p)*i+e,u(s,il,s),c(l,il,l))}var hl={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},dl=[],pl=[],fl=[],gl=[],vl=[],yl=[],ml=Math.min,xl=Math.max,_l=Math.cos,bl=Math.sin,wl=Math.abs,Sl=Math.PI,Ml=2*Sl,Il="undefined"!=typeof Float32Array,Tl=[];function Cl(t){return Math.round(t/Sl*1e8)/1e8%2*Sl}function Dl(t,e){var n=Cl(t[0]);n<0&&(n+=Ml);var i=n-t[0],r=t[1];r+=i,!e&&r-n>=Ml?r=n+Ml:e&&n-r>=Ml?r=n-Ml:!e&&n>r?r=n+(Ml-Cl(n-r)):e&&n0&&(this._ux=wl(n/Cr/t)||0,this._uy=wl(n/Cr/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(hl.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=wl(t-this._xi),i=wl(e-this._yi),r=n>this._ux||i>this._uy;if(this.addData(hl.L,t,e),this._ctx&&r&&this._ctx.lineTo(t,e),r)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this._drawPendingPt(),this.addData(hl.C,t,e,n,i,r,o),this._ctx&&this._ctx.bezierCurveTo(t,e,n,i,r,o),this._xi=r,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,i){return this._drawPendingPt(),this.addData(hl.Q,t,e,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,e,n,i),this._xi=n,this._yi=i,this},t.prototype.arc=function(t,e,n,i,r,o){this._drawPendingPt(),Tl[0]=i,Tl[1]=r,Dl(Tl,o),i=Tl[0];var a=(r=Tl[1])-i;return this.addData(hl.A,t,e,n,n,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=_l(r)*n+t,this._yi=bl(r)*n+e,this},t.prototype.arcTo=function(t,e,n,i,r){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},t.prototype.rect=function(t,e,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,e,n,i),this.addData(hl.R,t,e,n,i),this},t.prototype.closePath=function(){this._drawPendingPt(),this.addData(hl.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&t.closePath(),this._xi=e,this._yi=n,this},t.prototype.fill=function(t){t&&t.fill(),this.toStatic()},t.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},t.prototype.len=function(){return this._len},t.prototype.setData=function(t){if(this._saveData){var e=t.length;this.data&&this.data.length===e||!Il||(this.data=new Float32Array(e));for(var n=0;n0&&o))for(var a=0;au.length&&(this._expandData(),u=this.data);for(var c=0;c0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},t.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){fl[0]=fl[1]=vl[0]=vl[1]=Number.MAX_VALUE,gl[0]=gl[1]=yl[0]=yl[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,i=0,r=0,o=0;for(t=0;tn||wl(v)>i||h===e-1)&&(f=Math.sqrt(A*A+v*v),r=g,o=x);break;case hl.C:var y=t[h++],m=t[h++],x=(g=t[h++],t[h++]),_=t[h++],b=t[h++];f=Un(r,o,y,m,g,x,_,b,10),r=_,o=b;break;case hl.Q:f=Kn(r,o,y=t[h++],m=t[h++],g=t[h++],x=t[h++],10),r=g,o=x;break;case hl.A:var w=t[h++],S=t[h++],M=t[h++],I=t[h++],T=t[h++],C=t[h++],D=C+T;h+=1,p&&(a=_l(T)*M+w,s=bl(T)*I+S),f=xl(M,I)*ml(Ml,Math.abs(C)),r=_l(D)*M+w,o=bl(D)*I+S;break;case hl.R:a=r=t[h++],s=o=t[h++],f=2*t[h++]+2*t[h++];break;case hl.Z:var A=a-r;v=s-o;f=Math.sqrt(A*A+v*v),r=a,o=s}f>=0&&(l[c++]=f,u+=f)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,c,h,d=this.data,p=this._ux,f=this._uy,g=this._len,v=e<1,y=0,m=0,x=0;if(!v||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=e*this._pathLen))t:for(var _=0;_0&&(t.lineTo(c,h),x=0),b){case hl.M:n=r=d[_++],i=o=d[_++],t.moveTo(r,o);break;case hl.L:a=d[_++],s=d[_++];var S=wl(a-r),M=wl(s-o);if(S>p||M>f){if(v){if(y+(j=l[m++])>u){var I=(u-y)/j;t.lineTo(r*(1-I)+a*I,o*(1-I)+s*I);break t}y+=j}t.lineTo(a,s),r=a,o=s,x=0}else{var T=S*S+M*M;T>x&&(c=a,h=s,x=T)}break;case hl.C:var C=d[_++],D=d[_++],A=d[_++],k=d[_++],L=d[_++],P=d[_++];if(v){if(y+(j=l[m++])>u){Hn(r,C,A,L,I=(u-y)/j,dl),Hn(o,D,k,P,I,pl),t.bezierCurveTo(dl[1],pl[1],dl[2],pl[2],dl[3],pl[3]);break t}y+=j}t.bezierCurveTo(C,D,A,k,L,P),r=L,o=P;break;case hl.Q:C=d[_++],D=d[_++],A=d[_++],k=d[_++];if(v){if(y+(j=l[m++])>u){jn(r,C,A,I=(u-y)/j,dl),jn(o,D,k,I,pl),t.quadraticCurveTo(dl[1],pl[1],dl[2],pl[2]);break t}y+=j}t.quadraticCurveTo(C,D,A,k),r=A,o=k;break;case hl.A:var O=d[_++],R=d[_++],N=d[_++],E=d[_++],z=d[_++],B=d[_++],V=d[_++],G=!d[_++],F=N>E?N:E,H=wl(N-E)>.001,W=z+B,U=!1;if(v)y+(j=l[m++])>u&&(W=z+B*(u-y)/j,U=!0),y+=j;if(H&&t.ellipse?t.ellipse(O,R,N,E,V,z,W,G):t.arc(O,R,F,z,W,G),U)break t;w&&(n=_l(z)*N+O,i=bl(z)*E+R),r=_l(W)*N+O,o=bl(W)*E+R;break;case hl.R:n=r=d[_],i=o=d[_+1],a=d[_++],s=d[_++];var Y=d[_++],X=d[_++];if(v){if(y+(j=l[m++])>u){var Z=u-y;t.moveTo(a,s),t.lineTo(a+ml(Z,Y),s),(Z-=Y)>0&&t.lineTo(a+Y,s+ml(Z,X)),(Z-=X)>0&&t.lineTo(a+xl(Y-Z,0),s+X),(Z-=Y)>0&&t.lineTo(a,s+xl(X-Z,0));break t}y+=j}t.rect(a,s,Y,X);break;case hl.Z:if(v){var j;if(y+(j=l[m++])>u){I=(u-y)/j;t.lineTo(r*(1-I)+n*I,o*(1-I)+i*I);break t}y+=j}t.closePath(),r=n,o=i}}},t.prototype.clone=function(){var e=new t,n=this.data;return e.data=n.slice?n.slice():Array.prototype.slice.call(n),e._len=this._len,e},t.prototype.canSave=function(){return!!this._saveData},t.CMD=hl,t.initDefaultProps=((e=t.prototype)._saveData=!0,e._ux=0,e._uy=0,e._pendingPtDist=0,void(e._version=0)),t}();function kl(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s||at+s&&o>n+s||oe+h&&c>i+h&&c>o+h&&c>s+h||ct+h&&u>n+h&&u>r+h&&u>a+h||ue+u&&l>i+u&&l>o+u||lt+u&&s>n+u&&s>r+u||sn||c+ur&&(r+=Nl);var d=Math.atan2(l,s);return d<0&&(d+=Nl),d>=i&&d<=r||d+Nl>=i&&d+Nl<=r}function zl(t,e,n,i,r,o){if(o>e&&o>i||or?s:0}var Bl=Al.CMD,Vl=2*Math.PI;var Gl=[-1,-1,-1],Fl=[-1,-1];function Hl(){var t=Fl[0];Fl[0]=Fl[1],Fl[1]=t}function Wl(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u1&&Hl(),p=Bn(e,i,o,s,Fl[0]),d>1&&(f=Bn(e,i,o,s,Fl[1]))),2===d?ve&&s>i&&s>o||s=0&&c<=1&&(r[l++]=c);else{var u=a*a-4*o*s;if(En(u))(c=-a/(2*o))>=0&&c<=1&&(r[l++]=c);else if(u>0){var c,h=Dn(u),d=(-a-h)/(2*o);(c=(-a+h)/(2*o))>=0&&c<=1&&(r[l++]=c),d>=0&&d<=1&&(r[l++]=d)}}return l}(e,i,o,s,Gl);if(0===l)return 0;var u=Zn(e,i,o);if(u>=0&&u<=1){for(var c=0,h=Yn(e,i,o,u),d=0;dn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);Gl[0]=-l,Gl[1]=l;var u=Math.abs(i-r);if(u<1e-4)return 0;if(u>=Vl-1e-4){i=0,r=Vl;var c=o?1:-1;return a>=Gl[0]+t&&a<=Gl[1]+t?c:0}if(i>r){var h=i;i=r,r=h}i<0&&(i+=Vl,r+=Vl);for(var d=0,p=0;p<2;p++){var f=Gl[p];if(f+t>a){var g=Math.atan2(s,f);c=o?1:-1;g<0&&(g=Vl+g),(g>=i&&g<=r||g+Vl>=i&&g+Vl<=r)&&(g>Math.PI/2&&g<1.5*Math.PI&&(c=-c),d+=c)}}return d}function Xl(t,e,n,i,r){for(var o,a,s,l,u=t.data,c=t.len(),h=0,d=0,p=0,f=0,g=0,v=0;v1&&(n||(h+=zl(d,p,f,g,i,r))),m&&(f=d=u[v],g=p=u[v+1]),y){case Bl.M:d=f=u[v++],p=g=u[v++];break;case Bl.L:if(n){if(kl(d,p,u[v],u[v+1],e,i,r))return!0}else h+=zl(d,p,u[v],u[v+1],i,r)||0;d=u[v++],p=u[v++];break;case Bl.C:if(n){if(Ll(d,p,u[v++],u[v++],u[v++],u[v++],u[v],u[v+1],e,i,r))return!0}else h+=Wl(d,p,u[v++],u[v++],u[v++],u[v++],u[v],u[v+1],i,r)||0;d=u[v++],p=u[v++];break;case Bl.Q:if(n){if(Pl(d,p,u[v++],u[v++],u[v],u[v+1],e,i,r))return!0}else h+=Ul(d,p,u[v++],u[v++],u[v],u[v+1],i,r)||0;d=u[v++],p=u[v++];break;case Bl.A:var x=u[v++],_=u[v++],b=u[v++],w=u[v++],S=u[v++],M=u[v++];v+=1;var I=!!(1-u[v++]);o=Math.cos(S)*b+x,a=Math.sin(S)*w+_,m?(f=o,g=a):h+=zl(d,p,o,a,i,r);var T=(i-x)*w/b+x;if(n){if(El(x,_,w,S,S+M,I,e,T,r))return!0}else h+=Yl(x,_,w,S,S+M,I,T,r);d=Math.cos(S+M)*b+x,p=Math.sin(S+M)*w+_;break;case Bl.R:if(f=d=u[v++],g=p=u[v++],o=f+u[v++],a=g+u[v++],n){if(kl(f,g,o,g,e,i,r)||kl(o,g,o,a,e,i,r)||kl(o,a,f,a,e,i,r)||kl(f,a,f,g,e,i,r))return!0}else h+=zl(o,g,o,a,i,r),h+=zl(f,a,f,g,i,r);break;case Bl.Z:if(n){if(kl(d,p,f,g,e,i,r))return!0}else h+=zl(d,p,f,g,i,r);d=f,p=g}}return n||(s=p,l=g,Math.abs(s-l)<1e-4)||(h+=zl(d,p,f,g,i,r)||0),0!==h}var Zl=P({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},Ws),jl={style:P({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Us.style)},ql=Fr.concat(["invisible","culling","z","z2","zlevel","parent"]),Kl=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var i=this.style;if(i.decal){var r=this._decalEl=this._decalEl||new e;r.buildPath===e.prototype.buildPath&&(r.buildPath=function(t){n.buildPath(t,n.shape)}),r.silent=!0;var o=r.style;for(var a in i)o[a]!==i[a]&&(o[a]=i[a]);o.fill=i.fill?i.decal:null,o.decal=null,o.shadowColor=null,i.strokeFirst&&(o.stroke=null);for(var s=0;s.5?Dr:e>.2?"#eee":Ar}if(t)return Ar}return Dr},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(j(e)){var n=this.__zr;if(!(!n||!n.isDarkMode())===Ii(t,0)<.4)return e}},e.prototype.buildPath=function(t,e,n){},e.prototype.pathUpdated=function(){this.__dirty&=-5},e.prototype.getUpdatedPathProxy=function(t){return!this.path&&this.createPathProxy(),this.path.beginPath(),this.buildPath(this.path,this.shape,t),this.path},e.prototype.createPathProxy=function(){this.path=new Al(!1)},e.prototype.hasStroke=function(){var t=this.style,e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.getBoundingRect=function(){var t=this._rect,e=this.style,n=!t;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var r=this.path;(i||4&this.__dirty)&&(r.beginPath(),this.buildPath(r,this.shape,!1),this.pathUpdated()),t=r.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var o=this._rectStroke||(this._rectStroke=t.clone());if(this.__dirty||n){o.copy(t);var a=e.strokeNoScale?this.getLineScale():1,s=e.lineWidth;if(!this.hasFill()){var l=this.strokeContainThreshold;s=Math.max(s,null==l?4:l)}a>1e-10&&(o.width+=s/a,o.height+=s/a,o.x-=s/a/2,o.y-=s/a/2)}return o}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),function(t,e,n,i){return Xl(t,e,!0,n,i)}(o,a/s,t,e)))return!0}if(this.hasFill())return function(t,e,n){return Xl(t,0,!1,e,n)}(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=4,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"==typeof t?n[t]=e:k(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(4&this.__dirty)},e.prototype.createStyle=function(t){return _t(Zl,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=k({},this.shape))},e.prototype._applyStateObj=function(e,n,i,r,o,a){if(t.prototype._applyStateObj.call(this,e,n,i,r,o,a),1!==this.__inHover){var s,l=!(n&&r);if(n&&n.shape?o?r?s=n.shape:(s=k({},i.shape),k(s,n.shape)):(s=k({},r?this.shape:i.shape),k(s,n.shape)):l&&(s=i.shape),s)if(o){this.shape=k({},this.shape);for(var u={},c=W(s),h=0;hu&&(n*=u/(a=n+i),i*=u/a),r+o>u&&(r*=u/(a=r+o),o*=u/a),i+r>c&&(i*=c/(a=i+r),r*=c/a),n+o>c&&(n*=c/(a=n+o),o*=c/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+c-r),0!==r&&t.arc(s+u-r,l+c-r,r,0,Math.PI/2),t.lineTo(s+o,l+c),0!==o&&t.arc(s+o,l+c-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI),t.closePath()}(t,e):t.rect(n,i,r,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(Kl);lu.prototype.type="rect";var uu={fill:"#000"},cu={},hu={style:P({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Us.style)},du=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=uu,n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){t.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var e=0;ey&&p){var x=Math.floor(y/d);f=f||v.length>x,m=(v=v.slice(0,x)).length*d}if(r&&c&&null!=g)for(var _=Ts(g,u,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),b={},w=0;w0,T=0;Tg&&Ps(o,a.substring(g,v),e,f),Ps(o,d[2],e,f,d[1]),g=Ms.lastIndex}gh){var R=o.lines.length;D>0?(I.tokens=I.tokens.slice(0,D),S(I,C,T),o.lines=o.lines.slice(0,M+1)):o.lines=o.lines.slice(0,M),o.isTruncated=o.isTruncated||o.lines.length=0&&"right"===(C=x[T]).align;)this._placeToken(C,t,b,f,I,"right",v),w-=C.width,I-=C.width,T--;for(M+=(s-(M-p)-(g-I)-w)/2;S<=T;)C=x[S],this._placeToken(C,t,b,f,M+C.width/2,"center",v),M+=C.width,S++;f+=b}},e.prototype._placeToken=function(t,e,n,i,r,o,s){var l=e.rich[t.styleName]||{};l.text=t.text;var u=t.verticalAlign,c=i+n/2;"top"===u?c=i+t.height/2:"bottom"===u&&(c=i+n-t.height/2),!t.isLineHolder&&Mu(l)&&this._renderBackground(l,e,"right"===o?r-t.width:"center"===o?r-t.width/2:r,c-t.height/2,t.width,t.height);var h=!!l.backgroundColor,d=t.textPadding;d&&(r=wu(r,o,d),c-=t.height/2-d[0]-t.innerHeight/2);var p=this._getOrCreateChild(Jl),f=p.createStyle();p.useStyle(f);var g=this._defaultStyle,v=!1,y=0,m=!1,x=bu("fill"in l?l.fill:"fill"in e?e.fill:(v=!0,g.fill)),_=_u("stroke"in l?l.stroke:"stroke"in e?e.stroke:h||s||g.autoStroke&&!v?null:(y=2,m=!0,g.stroke)),b=l.textShadowBlur>0||e.textShadowBlur>0;f.text=t.text,f.x=r,f.y=c,b&&(f.shadowBlur=l.textShadowBlur||e.textShadowBlur||0,f.shadowColor=l.textShadowColor||e.textShadowColor||"transparent",f.shadowOffsetX=l.textShadowOffsetX||e.textShadowOffsetX||0,f.shadowOffsetY=l.textShadowOffsetY||e.textShadowOffsetY||0),f.textAlign=o,f.textBaseline="middle",f.font=t.font||a,f.opacity=st(l.opacity,e.opacity,1),yu(f,l),_&&(f.lineWidth=st(l.lineWidth,e.lineWidth,y),f.lineDash=at(l.lineDash,e.lineDash),f.lineDashOffset=e.lineDashOffset||0,f.stroke=_),x&&(f.fill=x),p.setBoundingRect(Gs(f,t.contentWidth,t.contentHeight,m?0:null))},e.prototype._renderBackground=function(t,e,n,i,r,o){var a,s,l,u=t.backgroundColor,c=t.borderWidth,h=t.borderColor,d=u&&u.image,p=u&&!d,f=t.borderRadius,g=this;if(p||t.lineHeight||c&&h){(a=this._getOrCreateChild(lu)).useStyle(a.createStyle()),a.style.fill=null;var v=a.shape;v.x=n,v.y=i,v.width=r,v.height=o,v.r=f,a.dirtyShape()}if(p)(l=a.style).fill=u||null,l.fillOpacity=at(t.fillOpacity,1);else if(d){(s=this._getOrCreateChild(eu)).onload=function(){g.dirtyStyle()};var y=s.style;y.image=u.image,y.x=n,y.y=i,y.width=r,y.height=o}c&&h&&((l=a.style).lineWidth=c,l.stroke=h,l.strokeOpacity=at(t.strokeOpacity,1),l.lineDash=t.borderDash,l.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(l.strokeFirst=!0,l.lineWidth*=2));var m=(a||s).style;m.shadowBlur=t.shadowBlur||0,m.shadowColor=t.shadowColor||"transparent",m.shadowOffsetX=t.shadowOffsetX||0,m.shadowOffsetY=t.shadowOffsetY||0,m.opacity=st(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";return mu(t)&&(e=[t.fontStyle,t.fontWeight,vu(t.fontSize),t.fontFamily||"sans-serif"].join(" ")),e&&ht(e)||t.textFont||t.font},e}(Zs),pu={left:!0,right:1,center:1},fu={top:1,bottom:1,middle:1},gu=["fontStyle","fontWeight","fontSize","fontFamily"];function vu(t){return"string"!=typeof t||-1===t.indexOf("px")&&-1===t.indexOf("rem")&&-1===t.indexOf("em")?isNaN(+t)?"12px":t+"px":t}function yu(t,e){for(var n=0;n=0,o=!1;if(t instanceof Kl){var a=Uu(t),s=r&&a.selectFill||a.normalFill,l=r&&a.selectStroke||a.normalStroke;if(ec(s)||ec(l)){var u=(i=i||{}).style||{};"inherit"===u.fill?(o=!0,i=k({},i),(u=k({},u)).fill=s):!ec(u.fill)&&ec(s)?(o=!0,i=k({},i),(u=k({},u)).fill=Ci(s)):!ec(u.stroke)&&ec(l)&&(o||(i=k({},i),u=k({},u)),u.stroke=Ci(l)),i.style=u}}if(i&&null==i.z2){o||(i=k({},i));var c=t.z2EmphasisLift;i.z2=t.z2+(null!=c?c:ju)}return i}(this,0,e,n);if("blur"===t)return function(t,e,n){var i=R(t.currentStates,e)>=0,r=t.style.opacity,o=i?null:function(t,e,n,i){for(var r=t.style,o={},a=0;a0){var o={dataIndex:r,seriesIndex:t.seriesIndex};null!=i&&(o.dataType=i),e.push(o)}})}),e}function Ac(t,e,n){Nc(t,!0),cc(t,pc),Lc(t,e,n)}function kc(t,e,n,i){i?function(t){Nc(t,!1)}(t):Ac(t,e,n)}function Lc(t,e,n){var i=Iu(t);null!=e?(i.focus=e,i.blurScope=n):i.focus&&(i.focus=null)}var Pc=["emphasis","blur","select"],Oc={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function Rc(t,e,n,i){n=n||"itemStyle";for(var r=0;r1&&(a*=Uc(f),s*=Uc(f));var g=(r===o?-1:1)*Uc((a*a*(s*s)-a*a*(p*p)-s*s*(d*d))/(a*a*(p*p)+s*s*(d*d)))||0,v=g*a*p/s,y=g*-s*d/a,m=(t+n)/2+Xc(h)*v-Yc(h)*y,x=(e+i)/2+Yc(h)*v+Xc(h)*y,_=Kc([1,0],[(d-v)/a,(p-y)/s]),b=[(d-v)/a,(p-y)/s],w=[(-1*d-v)/a,(-1*p-y)/s],S=Kc(b,w);if(qc(b,w)<=-1&&(S=Zc),qc(b,w)>=1&&(S=0),S<0){var M=Math.round(S/Zc*1e6)/1e6;S=2*Zc+M%2*Zc}c.addData(u,m,x,a,s,_,S,h,o)}var Jc=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,Qc=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;var th=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.applyTransform=function(t){},e}(Kl);function eh(t){return null!=t.setData}function nh(t,e){var n=function(t){var e=new Al;if(!t)return e;var n,i=0,r=0,o=i,a=r,s=Al.CMD,l=t.match(Jc);if(!l)return e;for(var u=0;uk*k+L*L&&(M=T,I=C),{cx:M,cy:I,x0:-c,y0:-h,x1:M*(r/b-1),y1:I*(r/b-1)}}function bh(t,e){var n,i=yh(e.r,0),r=yh(e.r0||0,0),o=i>0;if(o||r>0){if(o||(i=r,r=0),r>i){var a=i;i=r,r=a}var s=e.startAngle,l=e.endAngle;if(!isNaN(s)&&!isNaN(l)){var u=e.cx,c=e.cy,h=!!e.clockwise,d=gh(l-s),p=d>ch&&d%ch;if(p>xh&&(d=p),i>xh)if(d>ch-xh)t.moveTo(u+i*dh(s),c+i*hh(s)),t.arc(u,c,i,s,l,!h),r>xh&&(t.moveTo(u+r*dh(l),c+r*hh(l)),t.arc(u,c,r,l,s,h));else{var f=void 0,g=void 0,v=void 0,y=void 0,m=void 0,x=void 0,_=void 0,b=void 0,w=void 0,S=void 0,M=void 0,I=void 0,T=void 0,C=void 0,D=void 0,A=void 0,k=i*dh(s),L=i*hh(s),P=r*dh(l),O=r*hh(l),R=d>xh;if(R){var N=e.cornerRadius;N&&(n=function(t){var e;if(X(t)){var n=t.length;if(!n)return t;e=1===n?[t[0],t[0],0,0]:2===n?[t[0],t[0],t[1],t[1]]:3===n?t.concat(t[2]):t}else e=[t,t,t,t];return e}(N),f=n[0],g=n[1],v=n[2],y=n[3]);var E=gh(i-r)/2;if(m=mh(E,v),x=mh(E,y),_=mh(E,f),b=mh(E,g),M=w=yh(m,x),I=S=yh(_,b),(w>xh||S>xh)&&(T=i*dh(l),C=i*hh(l),D=r*dh(s),A=r*hh(s),dxh){var U=mh(v,M),Y=mh(y,M),Z=_h(D,A,k,L,i,U,h),j=_h(T,C,P,O,i,Y,h);t.moveTo(u+Z.cx+Z.x0,c+Z.cy+Z.y0),M0&&t.arc(u+Z.cx,c+Z.cy,U,fh(Z.y0,Z.x0),fh(Z.y1,Z.x1),!h),t.arc(u,c,i,fh(Z.cy+Z.y1,Z.cx+Z.x1),fh(j.cy+j.y1,j.cx+j.x1),!h),Y>0&&t.arc(u+j.cx,c+j.cy,Y,fh(j.y1,j.x1),fh(j.y0,j.x0),!h))}else t.moveTo(u+k,c+L),t.arc(u,c,i,s,l,!h);else t.moveTo(u+k,c+L);if(r>xh&&R)if(I>xh){U=mh(f,I),Z=_h(P,O,T,C,r,-(Y=mh(g,I)),h),j=_h(k,L,D,A,r,-U,h);t.lineTo(u+Z.cx+Z.x0,c+Z.cy+Z.y0),I0&&t.arc(u+Z.cx,c+Z.cy,Y,fh(Z.y0,Z.x0),fh(Z.y1,Z.x1),!h),t.arc(u,c,r,fh(Z.cy+Z.y1,Z.cx+Z.x1),fh(j.cy+j.y1,j.cx+j.x1),h),U>0&&t.arc(u+j.cx,c+j.cy,U,fh(j.y1,j.x1),fh(j.y0,j.x0),!h))}else t.lineTo(u+P,c+O),t.arc(u,c,r,l,s,h);else t.lineTo(u+P,c+O)}else t.moveTo(u,c);t.closePath()}}}var wh=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0,this.cornerRadius=0},Sh=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new wh},e.prototype.buildPath=function(t,e){bh(t,e)},e.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},e}(Kl);Sh.prototype.type="sector";var Mh=function(){this.cx=0,this.cy=0,this.r=0,this.r0=0},Ih=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new Mh},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=2*Math.PI;t.moveTo(n+e.r,i),t.arc(n,i,e.r,0,r,!1),t.moveTo(n+e.r0,i),t.arc(n,i,e.r0,0,r,!0)},e}(Kl);function Th(t,e,n){var i=e.smooth,r=e.points;if(r&&r.length>=2){if(i){var o=function(t,e,n,i){var r,o,a,s,l=[],u=[],c=[],h=[];if(i){a=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,p=t.length;djh[1]){if(r=!1,qh.negativeSize||n)return r;var s=Xh(jh[0]-Zh[1]),l=Xh(Zh[0]-jh[1]);Uh(s,l)>$h.len()&&(s=l||!qh.bidirectional)&&(Pe.scale(Kh,a,-l*i),qh.useDir&&qh.calcDirMTV()))}}return r},t.prototype._getProjMinMaxOnAxis=function(t,e,n){for(var i=this._axes[t],r=this._origin,o=e[0].dot(i)+r[t],a=o,s=o,l=1;l0){var h={duration:c.duration,delay:c.delay||0,easing:c.easing,done:o,force:!!o||!!a,setToFinal:!u,scope:t,during:a};l?e.animateFrom(n,h):e.animateTo(n,h)}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function rd(t,e,n,i,r,o){id("update",t,e,n,i,r,o)}function od(t,e,n,i,r,o){id("enter",t,e,n,i,r,o)}function ad(t){if(!t.__zr)return!0;for(var e=0;eAo(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function Ad(t){return!t.isGroup}function kd(t,e,n){if(t&&e){var i,r=(i={},t.traverse(function(t){Ad(t)&&t.anid&&(i[t.anid]=t)}),i);e.traverse(function(t){if(Ad(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),rd(t,i,n,Iu(t).dataIndex)}}})}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return function(t){return null!=t.shape}(t)&&(e.shape=C(t.shape)),e}}function Ld(t,e){return V(t,function(t){var n=t[0];n=Do(n,e.x),n=Co(n,e.x+e.width);var i=t[1];return i=Do(i,e.y),[n,i=Co(i,e.y+e.height)]})}function Pd(t,e){var n=Do(t.x,e.x),i=Co(t.x+t.width,e.x+e.width),r=Do(t.y,e.y),o=Co(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function Od(t,e,n){var i=k({rectHover:!0},e),r=i.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),P(r,n),new eu(i)):xd(t.replace("path://",""),i,n,"center")}function Rd(t,e,n,i,r){for(var o=0,a=r[r.length-1];o=-1e-6)return!1;var f=t-r,g=e-o,v=Ed(f,g,u,c)/p;if(v<0||v>1)return!1;var y=Ed(f,g,h,d)/p;return!(y<0||y>1)}function Ed(t,e,n,i){return t*i-n*e}function zd(t,e,n,i,r){return null==e||(K(e)?Bd[0]=Bd[1]=Bd[2]=Bd[3]=e:(Bd[0]=e[0],Bd[1]=e[1],Bd[2]=e[2],Bd[3]=e[3]),i&&(Bd[0]=Do(0,Bd[0]),Bd[1]=Do(0,Bd[1]),Bd[2]=Do(0,Bd[2]),Bd[3]=Do(0,Bd[3])),n&&(Bd[0]=-Bd[0],Bd[1]=-Bd[1],Bd[2]=-Bd[2],Bd[3]=-Bd[3]),Vd(t,Bd,"x","width",3,1,r&&r[0]||0),Vd(t,Bd,"y","height",0,2,r&&r[1]||0)),t}var Bd=[0,0,0,0];function Vd(t,e,n,i,r,o,a){var s=e[o]+e[r],l=t[i];t[i]+=s,a=Do(0,Co(a,l)),t[i]=0?-e[r]:e[o]>=0?l+e[o]:Ao(s)>1e-8?(l-a)*e[r]/s:0):t[n]-=e[r]}function Gd(t){var e=t.itemTooltipOption,n=t.componentModel,i=t.itemName,r=j(e)?{formatter:e}:e,o=n.mainType,a=n.componentIndex,s={componentType:o,name:i,$vars:["name"]};s[o+"Index"]=a;var l=t.formatterParamsExtra;l&&B(W(l),function(t){wt(s,t)||(s[t]=l[t],s.$vars.push(t))});var u=Iu(t.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:i,option:P({content:i,encodeHTMLContent:!0,formatterParams:s},r)}}function Fd(t,e){var n;t.isGroup&&(n=e(t)),n||t.traverse(e)}function Hd(t,e){if(t)if(X(t))for(var n=0;ne&&(e=i),ie&&(n=e=0),{min:n,max:e}}function qd(t,e,n){Kd(t,e,n,-1/0)}function Kd(t,e,n,i){if(t.ignoreModelZ)return i;var r=t.getTextContent(),o=t.getTextGuideLine();if(t.isGroup)for(var a=t.childrenRef(),s=0;s-1?Rp:Ep;function Gp(t,e){t=t.toUpperCase(),Bp[t]=new kp(e),zp[t]=e}function Fp(t){return Bp[t]}Gp(Np,{time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst",custom:"Custom chart",chart:"Chart"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}}),Gp(Rp,{time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图",custom:"自定义图表",chart:"图表"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}});var Hp=null;function Wp(){return Hp}function Up(t,e){var n=Wp(),i=e.breakOption,r=e.breakParsed;return!r&&n&&(r=n.parseAxisBreakOption(i,t)),r}function Yp(t){var e=t.brk;return e?e.breaks:[]}function Xp(t){var e=t.brk;return!!e&&e.hasBreaks()}var Zp=1e3,jp=6e4,qp=36e5,Kp=864e5,$p=31536e6,Jp={year:/({yyyy}|{yy})/,month:/({MMMM}|{MMM}|{MM}|{M})/,day:/({dd}|{d})/,hour:/({HH}|{H}|{hh}|{h})/,minute:/({mm}|{m})/,second:/({ss}|{s})/,millisecond:/({SSS}|{S})/},Qp={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}"},tf="{yyyy}-{MM}-{dd}",ef={year:"{yyyy}",month:"{yyyy}-{MM}",day:tf,hour:tf+" "+Qp.hour,minute:tf+" "+Qp.minute,second:tf+" "+Qp.second,millisecond:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},nf=["year","month","day","hour","minute","second","millisecond"],rf=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function of(t){return j(t)||Z(t)?t:function(t){t=t||{};var e={},n=!0;return B(nf,function(e){n&&(n=null==t[e])}),B(nf,function(i,r){var o=t[i];e[i]={};for(var a=null,s=r;s>=0;s--){var l=nf[s],u=$(o)&&!X(o)?o[l]:o,c=void 0;X(u)?a=(c=u.slice())[0]||"":j(u)?c=[a=u]:(null==a?a=Qp[i]:Jp[l].test(a)||(a=e[l][l][0]+" "+a),c=[a],n&&(c[1]="{primary|"+a+"}")),e[i][l]=c}}),e}(t)}function af(t,e){return"0000".substr(0,e-(t+="").length)+t}function sf(t){switch(t){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return t}}function lf(t){return t===sf(t)}function uf(t,e,n,i){var r=Qo(t),o=r[df(n)](),a=r[pf(n)]()+1,s=Math.floor((a-1)/3)+1,l=r[ff(n)](),u=r["get"+(n?"UTC":"")+"Day"](),c=r[gf(n)](),h=(c-1)%12+1,d=r[vf(n)](),p=r[yf(n)](),f=r[mf(n)](),g=c>=12?"pm":"am",v=g.toUpperCase(),y=(i instanceof kp?i:Fp(i||Vp)||Bp[Ep]).getModel("time"),m=y.get("month"),x=y.get("monthAbbr"),_=y.get("dayOfWeek"),b=y.get("dayOfWeekAbbr");return(e||"").replace(/{a}/g,g+"").replace(/{A}/g,v+"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,af(o%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,m[a-1]).replace(/{MMM}/g,x[a-1]).replace(/{MM}/g,af(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,af(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,_[u]).replace(/{ee}/g,b[u]).replace(/{e}/g,u+"").replace(/{HH}/g,af(c,2)).replace(/{H}/g,c+"").replace(/{hh}/g,af(h+"",2)).replace(/{h}/g,h+"").replace(/{mm}/g,af(d,2)).replace(/{m}/g,d+"").replace(/{ss}/g,af(p,2)).replace(/{s}/g,p+"").replace(/{SSS}/g,af(f,3)).replace(/{S}/g,f+"")}function cf(t,e){var n=Qo(t),i=n[pf(e)]()+1,r=n[ff(e)](),o=n[gf(e)](),a=n[vf(e)](),s=n[yf(e)](),l=0===n[mf(e)](),u=l&&0===s,c=u&&0===a,h=c&&0===o,d=h&&1===r;return d&&1===i?"year":d?"month":h?"day":c?"hour":u?"minute":l?"second":"millisecond"}function hf(t,e,n){switch(e){case"year":t[_f(n)](0);case"month":t[bf(n)](1);case"day":t[wf(n)](0);case"hour":t[Sf(n)](0);case"minute":t[Mf(n)](0);case"second":t[If(n)](0)}return t}function df(t){return t?"getUTCFullYear":"getFullYear"}function pf(t){return t?"getUTCMonth":"getMonth"}function ff(t){return t?"getUTCDate":"getDate"}function gf(t){return t?"getUTCHours":"getHours"}function vf(t){return t?"getUTCMinutes":"getMinutes"}function yf(t){return t?"getUTCSeconds":"getSeconds"}function mf(t){return t?"getUTCMilliseconds":"getMilliseconds"}function xf(t){return t?"setUTCFullYear":"setFullYear"}function _f(t){return t?"setUTCMonth":"setMonth"}function bf(t){return t?"setUTCDate":"setDate"}function wf(t){return t?"setUTCHours":"setHours"}function Sf(t){return t?"setUTCMinutes":"setMinutes"}function Mf(t){return t?"setUTCSeconds":"setSeconds"}function If(t){return t?"setUTCMilliseconds":"setMilliseconds"}function Tf(t){if(!aa(t))return j(t)?t:"-";var e=(t+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function Cf(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var Df=ut;function Af(t,e,n){function i(t){return t&&ht(t)?t:"-"}function r(t){return ca(t)}var o="time"===e,a=t instanceof Date;if(o||a){var s=o?Qo(t):t;if(!isNaN(+s))return uf(s,"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}",n);if(a)return"-"}if("ordinal"===e)return q(t)?i(t):K(t)&&r(t)?t+"":"-";var l=oa(t);return r(l)?Tf(l):q(t)?i(t):"boolean"==typeof t?t+"":"-"}var kf=["a","b","c","d","e","f","g"],Lf=function(t,e){return"{"+t+(null==e?"":e)+"}"};function Pf(t,e,n){X(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],o=0;o':'':{renderMode:o,content:"{"+(n.markerId||"markerX")+"|} ",style:"subItem"===r?{width:4,height:4,borderRadius:2,backgroundColor:i}:{width:10,height:10,borderRadius:5,backgroundColor:i}}:""}function Nf(t,e){return e=e||"transparent",j(t)?t:$(t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Ef(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location.href=t}else window.open(t,e)}var zf={},Bf={},Vf=function(){function t(){this._normalMasterList=[],this._nonSeriesBoxMasterList=[]}return t.prototype.create=function(t,e){function n(n,i){var r=[];return B(n,function(n,i){var o=n.create(t,e);r=r.concat(o||[])}),r}this._nonSeriesBoxMasterList=n(zf,!0),this._normalMasterList=n(Bf,!1)},t.prototype.update=function(t,e){B(this._normalMasterList,function(n){n.update&&n.update(t,e)})},t.prototype.getCoordinateSystems=function(){return this._normalMasterList.concat(this._nonSeriesBoxMasterList)},t.register=function(t,e){"matrix"!==t&&"calendar"!==t?Bf[t]=e:zf[t]=e},t.get=function(t){return Bf[t]||zf[t]},t}();var Gf=mt();function Ff(t){var e=t.getShallow("coord",!0),n=1;if(null==e){var i=Gf.get(t.type);i&&i.getCoord2&&(n=2,e=i.getCoord2(t))}return{coord:e,from:n}}function Hf(t,e){var n=t.getShallow("coordinateSystem"),i=t.getShallow("coordinateSystemUsage",!0),r=0;if(n){var o="series"===t.mainType;null==i&&(i=o?"data":"box"),"data"===i?(r=1,o||(r=0)):"box"===i&&(r=2,o||function(t){return!!zf[t]}(n)||(r=0))}return{coordSysType:n,kind:r}}function Wf(t){var e=t.targetModel,n=t.coordSysType,i=t.coordSysProvider,r=t.isDefaultDataCoordSys;t.allowNotFound;var o=Hf(e),a=o.kind,s=o.coordSysType;if(r&&1!==a&&(a=1,s=n),0===a||s!==n)return 0;var l=i(n,e);return l?(1===a?e.coordinateSystem=l:e.boxCoordinateSystem=l,a):0}var Uf=function(t,e){var n=e.getReferringComponents(t,Ea).models[0];return n&&n.coordinateSystem},Yf=B,Xf=["left","right","top","bottom","width","height"],Zf=[["width","left","right"],["height","top","bottom"]];function jf(t,e,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;e.eachChild(function(l,u){var c,h,d=l.getBoundingRect(),p=e.childAt(u+1),f=p&&p.getBoundingRect();if("horizontal"===t){var g=d.width+(f?-f.x+d.x:0);(c=o+g)>i||l.newline?(o=0,c=g,a+=s+n,s=d.height):s=Math.max(s,d.height)}else{var v=d.height+(f?-f.y+d.y:0);(h=a+v)>r||l.newline?(o+=s+n,a=0,h=v,s=d.width):s=Math.max(s,d.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),"horizontal"===t?o=c+n:a=h+n)})}var qf=jf;Y(jf,"vertical"),Y(jf,"horizontal");function Kf(t,e){return{left:t.getShallow("left",e),top:t.getShallow("top",e),right:t.getShallow("right",e),bottom:t.getShallow("bottom",e),width:t.getShallow("width",e),height:t.getShallow("height",e)}}function $f(t,e){var n=function(t,e){var n,i,r=eg(t,e,{enableLayoutOnlyByCenter:!0}),o=t.getBoxLayoutParams();if(r.type===tg.point)i=r.refPoint,n=Jf(o,{width:e.getWidth(),height:e.getHeight()});else{var a=t.get("center"),s=X(a)?a:[a,a];n=Jf(o,r.refContainer),i=2===r.boxCoordFrom?r.refPoint:[Vo(s[0],n.width)+n.x,Vo(s[1],n.height)+n.y]}return{viewRect:n,center:i}}(t,e),i=n.viewRect,r=n.center,o=t.get("radius");X(o)||(o=[0,o]);var a=Vo(i.width,e.getWidth()),s=Vo(i.height,e.getHeight()),l=Math.min(a,s),u=Vo(o[0],l/2),c=Vo(o[1],l/2);return{cx:r[0],cy:r[1],r0:u,r:c,viewRect:i}}function Jf(t,e,n){n=Df(n||0);var i=e.width,r=e.height,o=Vo(t.left,i),a=Vo(t.top,r),s=Vo(t.right,i),l=Vo(t.bottom,r),u=Vo(t.width,i),c=Vo(t.height,r),h=n[2]+n[0],d=n[1]+n[3],p=t.aspect;switch(isNaN(u)&&(u=i-s-d-o),isNaN(c)&&(c=r-l-h-a),null!=p&&(isNaN(u)&&isNaN(c)&&(p>i/r?u=.8*i:c=.8*r),isNaN(u)&&(u=p*c),isNaN(c)&&(c=u/p)),isNaN(o)&&(o=i-s-u-d),isNaN(a)&&(a=r-l-c-h),t.left||t.right){case"center":o=i/2-u/2-n[3];break;case"right":o=i-u-d}switch(t.top||t.bottom){case"middle":case"center":a=r/2-c/2-n[0];break;case"bottom":a=r-c-h}o=o||0,a=a||0,isNaN(u)&&(u=i-d-o-(s||0)),isNaN(c)&&(c=r-h-a-(l||0));var f=new Xe((e.x||0)+o+n[3],(e.y||0)+a+n[0],u,c);return f.margin=n,f}function Qf(t,e,n){var i=t.getShallow("preserveAspect",!0);if(!i)return e;var r=e.width/e.height;if(Math.abs(Math.atan(n)-Math.atan(r))<1e-9)return e;var o=t.getShallow("preserveAspectAlign",!0),a=t.getShallow("preserveAspectVerticalAlign",!0),s={width:e.width,height:e.height},l="cover"===i;return r>n&&!l||r=2)return o;for(var c=0;c=0;a--)o=D(o,n[a],!0);e.defaultOption=o}return e.defaultOption},e.prototype.getReferringComponents=function(t,e){var n=t+"Index",i=t+"Id";return Ba(this.ecModel,t,{index:this.get(n,!0),id:this.get(i,!0)},e)},e.prototype.getBoxLayoutParams=function(){return Kf(this,!1)},e.prototype.getZLevelKey=function(){return""},e.prototype.setZLevel=function(t){this.option.zlevel=t},e.protoInitialize=((i=e.prototype).type="component",i.id="",i.name="",i.mainType="",i.subType="",void(i.componentIndex=0)),e}(kp);hs(lg,kp),gs(lg),function(t){var e={};t.registerSubTypeDefaulter=function(t,n){var i=us(t);e[i.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var o=us(n).main;t.hasSubTypes(n)&&e[o]&&(r=e[o](i))}return r}}(lg),function(t,e){function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}t.topologicalTravel=function(t,i,r,o){if(t.length){var a=function(t){var i={},r=[];return B(t,function(o){var a=n(i,o),s=function(t,e){var n=[];return B(t,function(t){R(e,t)>=0&&n.push(t)}),n}(a.originalDeps=e(o),t);a.entryCount=s.length,0===a.entryCount&&r.push(o),B(s,function(t){R(a.predecessor,t)<0&&a.predecessor.push(t);var e=n(i,t);R(e.successor,t)<0&&e.successor.push(o)})}),{graph:i,noEntryList:r}}(i),s=a.graph,l=a.noEntryList,u={};for(B(t,function(t){u[t]=!0});l.length;){var c=l.pop(),h=s[c],d=!!u[c];d&&(r.call(o,c,h.originalDeps.slice()),delete u[c]),B(h.successor,d?f:p)}B(u,function(){var t="";throw new Error(t)})}function p(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}function f(t){u[t]=!0,p(t)}}}(lg,function(t){var e=[];B(lg.getClassesByMainType(t),function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])}),e=V(e,function(t){return us(t).main}),"dataset"!==t&&R(e,"dataset")<=0&&e.unshift("dataset");return e});var ug={color:{},darkColor:{},size:{}},cg=ug.color={theme:["#5070dd","#b6d634","#505372","#ff994d","#0ca8df","#ffd10a","#fb628b","#785db0","#3fbe95"],neutral00:"#fff",neutral05:"#f4f7fd",neutral10:"#e8ebf0",neutral15:"#dbdee4",neutral20:"#cfd2d7",neutral25:"#c3c5cb",neutral30:"#b7b9be",neutral35:"#aaacb2",neutral40:"#9ea0a5",neutral45:"#929399",neutral50:"#86878c",neutral55:"#797b7f",neutral60:"#6d6e73",neutral65:"#616266",neutral70:"#54555a",neutral75:"#48494d",neutral80:"#3c3c41",neutral85:"#303034",neutral90:"#232328",neutral95:"#17171b",neutral99:"#000",accent05:"#eff1f9",accent10:"#e0e4f2",accent15:"#d0d6ec",accent20:"#c0c9e6",accent25:"#b1bbdf",accent30:"#a1aed9",accent35:"#91a0d3",accent40:"#8292cc",accent45:"#7285c6",accent50:"#6578ba",accent55:"#5c6da9",accent60:"#536298",accent65:"#4a5787",accent70:"#404c76",accent75:"#374165",accent80:"#2e3654",accent85:"#252b43",accent90:"#1b2032",accent95:"#121521",transparent:"rgba(0,0,0,0)",highlight:"rgba(255,231,130,0.8)"};for(var hg in k(cg,{primary:cg.neutral80,secondary:cg.neutral70,tertiary:cg.neutral60,quaternary:cg.neutral50,disabled:cg.neutral20,border:cg.neutral30,borderTint:cg.neutral20,borderShade:cg.neutral40,background:cg.neutral05,backgroundTint:"rgba(234,237,245,0.5)",backgroundTransparent:"rgba(255,255,255,0)",backgroundShade:cg.neutral10,shadow:"rgba(0,0,0,0.2)",shadowTint:"rgba(129,130,136,0.2)",axisLine:cg.neutral70,axisLineTint:cg.neutral40,axisTick:cg.neutral70,axisTickMinor:cg.neutral60,axisLabel:cg.neutral70,axisSplitLine:cg.neutral15,axisMinorSplitLine:cg.neutral05}),cg)if(cg.hasOwnProperty(hg)){var dg=cg[hg];"theme"===hg?ug.darkColor.theme=cg.theme.slice():"highlight"===hg?ug.darkColor.highlight="rgba(255,231,130,0.4)":0===hg.indexOf("accent")?ug.darkColor[hg]=wi(dg,null,function(t){return.5*t},function(t){return Math.min(1,1.3-t)}):ug.darkColor[hg]=wi(dg,null,function(t){return.9*t},function(t){return 1-Math.pow(t,1.5)})}ug.size={xxs:2,xs:5,s:10,m:15,l:20,xl:30,xxl:40,xxxl:50};var pg="";"undefined"!=typeof navigator&&(pg=navigator.platform||"");var fg="rgba(0, 0, 0, 0.2)",gg=ug.color.theme[0],vg=wi(gg,null,null,.9),yg={darkMode:"auto",colorBy:"series",color:ug.color.theme,gradientColor:[vg,gg],aria:{decal:{decals:[{color:fg,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:fg,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:fg,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:fg,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:fg,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:fg,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:pg.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},mg=1,xg=2,_g=3,bg=Pa();function wg(t,e,n){var i={},r=Mg(e);if(!r||!t)return i;var o,a,s=[],l=[],u=e.ecModel,c=bg(u).datasetMap,h=r.uid+"_"+n.seriesLayoutBy;B(t=t.slice(),function(e,n){var r=$(e)?e:t[n]={name:e};"ordinal"===r.type&&null==o&&(o=n,a=f(r)),i[r.name]=[]});var d=c.get(h)||c.set(h,{categoryWayDim:a,valueWayDim:0});function p(t,e,n){for(var i=0;ie)return t[i];return t[n-1]}(i,a):n;if((c=c||n)&&c.length){var h=c[l];return r&&(u[r]=h),s.paletteIdx=(l+1)%c.length,h}}var Eg="\0_ec_inner";var zg=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(t,e,n,i,r,o){i=i||{},this.option=null,this._theme=new kp(i),this._locale=new kp(r),this._optionManager=o},e.prototype.setOption=function(t,e,n){var i=Gg(e);this._optionManager.setOption(t,n,i),this._resetOption(null,i)},e.prototype.resetOption=function(t,e){return this._resetOption(t,Gg(e))},e.prototype._resetOption=function(t,e){var n=!1,i=this._optionManager;if(!t||"recreate"===t){var r=i.mountOption("recreate"===t);0,this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(r,e)):kg(this,r),n=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(n=!0,this._mergeOption(o,e))}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this);a.length&&B(a,function(t){n=!0,this._mergeOption(t,e)},this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,e){var n=this.option,i=this._componentsMap,r=this._componentsCount,o=[],a=mt(),s=e&&e.replaceMergeMainTypeMap;bg(this).datasetMap=mt(),B(t,function(t,e){null!=t&&(lg.hasClass(e)?e&&(o.push(e),a.set(e,!0)):n[e]=null==n[e]?C(t):D(n[e],t,!0))}),s&&s.each(function(t,e){lg.hasClass(e)&&!a.get(e)&&(o.push(e),a.set(e,!0))}),lg.topologicalTravel(o,lg.getAllClassMainTypes(),function(e){var o=function(t,e,n){var i=Cg.get(e);if(!i)return n;var r=i(t);return r?n.concat(r):n}(this,e,_a(t[e])),a=i.get(e),l=a?s&&s.get(e)?"replaceMerge":"normalMerge":"replaceAll",u=Ia(a,o,l);(function(t,e,n){B(t,function(t){var i=t.newOption;$(i)&&(t.keyInfo.mainType=e,t.keyInfo.subType=function(t,e,n,i){return e.type?e.type:n?n.subType:i.determineSubType(t,e)}(e,i,t.existing,n))})})(u,e,lg),n[e]=null,i.set(e,null),r.set(e,0);var c,h=[],d=[],p=0;B(u,function(t,n){var i=t.existing,r=t.newOption;if(r){var o="series"===e,a=lg.getClass(e,t.keyInfo.subType,!o);if(!a)return;if("tooltip"===e){if(c)return void 0;c=!0}if(i&&i.constructor===a)i.name=t.keyInfo.name,i.mergeOption(r,this),i.optionUpdated(r,!1);else{var s=k({componentIndex:n},t.keyInfo);k(i=new a(r,this,this,s),s),t.brandNew&&(i.__requireNewView=!0),i.init(r,this,this),i.optionUpdated(null,!0)}}else i&&(i.mergeOption({},this),i.optionUpdated({},!1));i?(h.push(i.option),d.push(i),p++):(h.push(void 0),d.push(void 0))},this),n[e]=h,i.set(e,d),r.set(e,p),"series"===e&&Dg(this)},this),this._seriesIndices||Dg(this)},e.prototype.getOption=function(){var t=C(this.option);return B(t,function(e,n){if(lg.hasClass(n)){for(var i=_a(e),r=i.length,o=!1,a=r-1;a>=0;a--)i[a]&&!ka(i[a])?o=!0:(i[a]=null,!o&&r--);i.length=r,t[n]=i}}),delete t[Eg],t},e.prototype.setTheme=function(t){this._theme=new kp(t),this._resetOption("recreate",null)},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){var i=n[e||0];if(i)return i;if(null==e)for(var r=0;r=e:"max"===n?t<=e:t===e})(i[a],t,o)||(r=!1)}}),r}var Ug=B,Yg=$,Xg=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function Zg(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=Xg.length;n0?t[n-1].seriesModel:null)}),function(t){B(t,function(e,n){var i=[],r=[NaN,NaN],o=[e.stackResultDimension,e.stackedOverDimension],a=e.data,s=e.isStackedByIndex,l=e.seriesModel.get("stackStrategy")||"samesign";a.modify(o,function(o,u,c){var h,d,p=a.get(e.stackedDimension,c);if(isNaN(p))return r;s?d=a.getRawIndex(c):h=a.get(e.stackedByDimension,c);for(var f=NaN,g=n-1;g>=0;g--){var v=t[g];if(s||(d=v.data.rawIndexOf(v.stackedByDimension,h)),d>=0){var y=v.data.getByRawIndex(v.stackResultDimension,d);if("all"===l||"positive"===l&&y>0||"negative"===l&&y<0||"samesign"===l&&p>=0&&y>0||"samesign"===l&&p<=0&&y<0){p=jo(p,y),f=y;break}}}return i[0]=p,i[1]=f,i})})}(t))})});var hv,dv,pv,fv,gv,vv,yv=function(t){this.data=t.data||(t.sourceFormat===Ou?{}:[]),this.sourceFormat=t.sourceFormat||Nu,this.seriesLayoutBy=t.seriesLayoutBy||Eu,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var e=this.dimensionsDefine=t.dimensionsDefine;if(e)for(var n=0;nu&&(u=p)}s[0]=l,s[1]=u}},i=function(){return this._data?this._data.length/this._dimSize:0};function r(t){for(var e=0;e=0&&(s=o.interpolatedValue[l])}return null!=s?s+"":""}):void 0},t.prototype.getRawValue=function(t,e){return zv(this.getData(e),t)},t.prototype.formatTooltip=function(t,e,n){},t}();function Gv(t){var e,n;return $(t)?t.type&&(n=t):e=t,{text:e,frag:n}}function Fv(t){return new Hv(t)}var Hv=function(){function t(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return t.prototype.perform=function(t){var e,n=this._upstream,i=t&&t.skip;if(this._dirty&&n){var r=this.context;r.data=r.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this),this._plan&&!i&&(e=this._plan(this.context));var o,a=c(this._modBy),s=this._modDataCount||0,l=c(t&&t.modBy),u=t&&t.modDataCount||0;function c(t){return!(t>=1)&&(t=1),t}a===l&&s===u||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,o=this._doReset(i)),this._modBy=l,this._modDataCount=u;var h=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,p=Math.min(null!=h?this._dueIndex+h:1/0,this._dueEnd);if(!i&&(o||d1&&i>0?s:a}};return o;function a(){return e=t?null:oe},gte:function(t,e){return t>=e}},jv=function(){function t(t,e){if(!K(e)){var n="";0,va(n)}this._opFn=Zv[t],this._rvalFloat=oa(e)}return t.prototype.evaluate=function(t){return K(t)?this._opFn(t,this._rvalFloat):this._opFn(oa(t),this._rvalFloat)},t}(),qv=function(){function t(t,e){var n="desc"===t;this._resultLT=n?1:-1,null==e&&(e=n?"min":"max"),this._incomparable="min"===e?-1/0:1/0}return t.prototype.evaluate=function(t,e){var n=K(t)?t:oa(t),i=K(e)?e:oa(e),r=isNaN(n),o=isNaN(i);if(r&&(n=this._incomparable),o&&(i=this._incomparable),r&&o){var a=j(t),s=j(e);a&&(n=s?t:0),s&&(i=a?e:0)}return ni?-this._resultLT:0},t}(),Kv=function(){function t(t,e){this._rval=e,this._isEQ=t,this._rvalTypeof=typeof e,this._rvalFloat=oa(e)}return t.prototype.evaluate=function(t){var e=t===this._rval;if(!e){var n=typeof t;n===this._rvalTypeof||"number"!==n&&"number"!==this._rvalTypeof||(e=oa(t)===this._rvalFloat)}return this._isEQ?e:!e},t}();function $v(t,e){return"eq"===t||"ne"===t?new Kv("eq"===t,e):wt(Zv,t)?new jv(t,e):null}function Jv(t){var e="",n=-1/0,i=-1/0,r=1/0,o=1/0;return t&&(null!=t.g&&(e+="G"+t.g,n=t.g),null!=t.ge&&(e+="GE"+t.ge,i=t.ge),null!=t.l&&(e+="L"+t.l,r=t.l),null!=t.le&&(e+="LE"+t.le,o=t.le)),{key:e,g:n,ge:i,l:r,le:o}}function Qv(t,e){return e>t.g&&e>=t.ge&&e65535?uy:cy}function gy(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function vy(t,e,n,i,r){var o=py[n||"float"];if(r){var a=t[e],s=a&&a.length;if(s!==i){for(var l=new o(i),u=0;ug[1]&&(g[1]=f)}return this._rawCount=this._count=s,{start:a,end:s}},t.prototype._initDataFromProvider=function(t,e,n){for(var i=this._provider,r=this._chunks,o=this._dimensions,a=o.length,s=this._rawExtent,l=V(o,function(t){return t.property}),u=0;uv[1]&&(v[1]=g)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=e,this._extent=[]},t.prototype.count=function(){return this._count},t.prototype.get=function(t,e){if(!(e>=0&&e=0&&e=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},t.prototype.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,i=this._count;if(n===Array){t=new n(i);for(var r=0;r=u&&x<=c||isNaN(x))&&(a[s++]=p),p++}d=!0}else if(2===r){f=h[i[0]];var v=h[i[1]],y=t[i[1]][0],m=t[i[1]][1];for(g=0;g=u&&x<=c||isNaN(x))&&(_>=y&&_<=m||isNaN(_))&&(a[s++]=p),p++}d=!0}}if(!d)if(1===r)for(g=0;g=u&&x<=c||isNaN(x))&&(a[s++]=b)}else for(g=0;gt[M][1])&&(w=!1)}w&&(a[s++]=e.getRawIndex(g))}return sv[1]&&(v[1]=g)}}}},t.prototype.lttbDownSample=function(t,e){var n,i,r,o=this.clone([t],!0),a=o._chunks[t],s=this.count(),l=0,u=Math.floor(1/e),c=this.getRawIndex(0),h=new(fy(this._rawCount))(Math.min(2*(Math.ceil(s/u)+2),s));h[l++]=c;for(var d=1;dn&&(n=i,r=I)}M>0&&M<_-x&&(h[l++]=Math.min(S,r),r=Math.max(S,r)),h[l++]=r,c=r}return h[l++]=this.getRawIndex(s-1),o._count=l,o._indices=h,o.getRawIndex=this._getRawIdx,o},t.prototype.minmaxDownSample=function(t,e){for(var n=this.clone([t],!0),i=n._chunks,r=Math.floor(1/e),o=i[t],a=this.count(),s=new(fy(this._rawCount))(2*Math.ceil(a/r)),l=0,u=0;ua&&(f=a-u);for(var g=0;gp&&(p=v,d=u+g)}var y=this.getRawIndex(c),m=this.getRawIndex(d);cu-p&&(s=u-p,a.length=s);for(var f=0;fc[1]&&(c[1]=v),h[d++]=y}return r._count=d,r._indices=h,r._updateGetRawIdx(),r},t.prototype.each=function(t,e){if(this._count)for(var n=t.length,i=this._chunks,r=0,o=this.count();rh&&(h=p))}return a[l]=[c,h]},t.prototype.getRawDataItem=function(t){var e=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(e);for(var n=[],i=this._chunks,r=0;r=0?this._indices[t]:-1},t.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},t.internalField=function(){function t(t,e,n,i){return Uv(t[i],this._dimensions[i])}ly={arrayRows:t,objectRows:function(t,e,n,i){return Uv(t[e],this._dimensions[i])},keyedColumns:t,original:function(t,e,n,i){var r=t&&(null==t.value?t:t.value);return Uv(r instanceof Array?r[i]:r,this._dimensions[i])},typedArray:function(t,e,n,i){return t[i]}}}(),t}(),my=function(){function t(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return t.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},t.prototype._setLocalSource=function(t,e){this._sourceList=t,this._upstreamSignList=e,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},t.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},t.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},t.prototype._createSource=function(){this._setLocalSource([],[]);var t,e,n=this._sourceHost,i=this._getUpstreamSourceManagers(),r=!!i.length;if(_y(n)){var o=n,a=void 0,s=void 0,l=void 0;if(r){var u=i[0];u.prepareSource(),a=(l=u.getSource()).data,s=l.sourceFormat,e=[u._getVersionSign()]}else s=Q(a=o.get("data",!0))?Ru:ku,e=[];var c=this._getSourceMetaRawOption()||{},h=l&&l.metaRawOption||{},d=at(c.seriesLayoutBy,h.seriesLayoutBy)||null,p=at(c.sourceHeader,h.sourceHeader),f=at(c.dimensions,h.dimensions);t=d!==h.seriesLayoutBy||!!p!=!!h.sourceHeader||f?[xv(a,{seriesLayoutBy:d,sourceHeader:p,dimensions:f},s)]:[]}else{var g=n;if(r){var v=this._applyTransform(i);t=v.sourceList,e=v.upstreamSignList}else{t=[xv(g.get("source",!0),this._getSourceMetaRawOption(),null)],e=[]}}this._setLocalSource(t,e)},t.prototype._applyTransform=function(t){var e,n=this._sourceHost,i=n.get("transform",!0),r=n.get("fromTransformResult",!0);if(null!=r){var o="";1!==t.length&&by(o)}var a,s=[],l=[];return B(t,function(t){t.prepareSource();var e=t.getSource(r||0),n="";null==r||e||by(n),s.push(e),l.push(t._getVersionSign())}),i?e=function(t,e){var n=_a(t),i=n.length,r="";i||va(r);for(var o=0,a=i;o1||n>0&&!t.noHeader;return B(t.blocks,function(t){var n=Ay(t);n>=e&&(e=n+ +(i&&(!n||Cy(t)&&!t.noHeader)))}),e}return 0}function ky(t,e,n,i){var r,o=e.noHeader,a=(r=Ay(e),{html:My[r],richText:Iy[r]}),s=[],l=e.blocks||[];ct(!l||X(l)),l=l||[];var u=t.orderMode;if(e.sortBlocks&&u){l=l.slice();var c={valueAsc:"asc",valueDesc:"desc"};if(wt(c,u)){var h=new qv(c[u],null);l.sort(function(t,e){return h.evaluate(t.sortParam,e.sortParam)})}else"seriesDesc"===u&&l.reverse()}B(l,function(n,r){var o=e.valueFormatter,l=Dy(n)(o?k(k({},t),{valueFormatter:o}):t,n,r>0?a.html:0,i);null!=l&&s.push(l)});var d="richText"===t.renderMode?s.join(a.richText):Oy(i,s.join(""),o?n:a.html);if(o)return d;var p=Af(e.header,"ordinal",t.useUTC),f=Sy(i,t.renderMode).nameStyle,g=wy(i);return"richText"===t.renderMode?Ry(t,p,f)+a.richText+d:Oy(i,'
'+se(p)+"
"+d,n)}function Ly(t,e,n,i){var r=t.renderMode,o=e.noName,a=e.noValue,s=!e.markerType,l=e.name,u=t.useUTC,c=e.valueFormatter||t.valueFormatter||function(t){return V(t=X(t)?t:[t],function(t,e){return Af(t,X(p)?p[e]:p,u)})};if(!o||!a){var h=s?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||ug.color.secondary,r),d=o?"":Af(l,"ordinal",u),p=e.valueType,f=a?[]:c(e.value,e.rawDataIndex),g=!s||!o,v=!s&&o,y=Sy(i,r),m=y.nameStyle,x=y.valueStyle;return"richText"===r?(s?"":h)+(o?"":Ry(t,d,m))+(a?"":function(t,e,n,i,r){var o=[r],a=i?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(X(e)?e.join(" "):e,o)}(t,f,g,v,x)):Oy(i,(s?"":h)+(o?"":function(t,e,n){return''+se(t)+""}(d,!s,m))+(a?"":function(t,e,n,i){var r=n?"10px":"20px",o=e?"float:right;margin-left:"+r:"";return t=X(t)?t:[t],''+V(t,function(t){return se(t)}).join("  ")+""}(f,g,v,x)),n)}}function Py(t,e,n,i,r,o){if(t)return Dy(t)({useUTC:r,renderMode:n,orderMode:i,markupStyleCreator:e,valueFormatter:t.valueFormatter},t,0,o)}function Oy(t,e,n){return'
'+e+'
'}function Ry(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function Ny(t,e){return Nf(t.getData().getItemVisual(e,"style")[t.visualDrawType])}function Ey(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?[8,10]:10}var zy=function(){function t(){this.richTextStyles={},this._nextStyleNameId=sa()}return t.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},t.prototype.makeTooltipMarker=function(t,e,n){var i="richText"===n?this._generateStyleName():null,r=Rf({color:e,type:t,renderMode:n,markerId:i});return j(r)?r:(this.richTextStyles[i]=r.style,r.content)},t.prototype.wrapRichTextStyle=function(t,e){var n={};X(e)?B(e,function(t){return k(n,t)}):k(n,e);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},t}();function By(t){var e,n,i,r,o=t.series,a=t.dataIndex,s=t.multipleSeries,l=o.getData(),u=l.mapDimensionsAll("defaultedTooltip"),c=u.length,h=o.getRawValue(a),d=X(h),p=Ny(o,a);if(c>1||d&&!c){var f=function(t,e,n,i,r){var o=e.getData(),a=G(t,function(t,e,n){var i=o.getDimensionInfo(n);return t||i&&!1!==i.tooltip&&null!=i.displayName},!1),s=[],l=[],u=[];function c(t,e){var n=o.getDimensionInfo(e);n&&!1!==n.otherDims.tooltip&&(a?u.push(Ty("nameValue",{markerType:"subItem",markerColor:r,name:n.displayName,value:t,valueType:n.type})):(s.push(t),l.push(n.type)))}return i.length?B(i,function(t){c(zv(o,n,t),t)}):B(t,c),{inlineValues:s,inlineValueTypes:l,blocks:u}}(h,o,a,u,p);e=f.inlineValues,n=f.inlineValueTypes,i=f.blocks,r=f.inlineValues[0]}else if(c){var g=l.getDimensionInfo(u[0]);r=e=zv(l,a,u[0]),n=g.type}else r=e=d?h[0]:h;var v=Aa(o),y=v&&o.name||"",m=l.getName(a),x=s?y:m;return Ty("section",{header:y,noHeader:s||!v,sortParam:r,blocks:[Ty("nameValue",{markerType:"item",markerColor:p,name:x,noName:!ht(x),value:e,valueType:n,rawDataIndex:l.getRawIndex(a)})].concat(i||[])})}var Vy=Pa();function Gy(t,e){return t.getName(e)||t.getId(e)}var Fy="__universalTransitionEnabled",Hy=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}var i;return n(e,t),e.prototype.init=function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=Fv({count:Uy,reset:Yy}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),(Vy(this).sourceManager=new my(this)).prepareSource();var i=this.getInitialData(t,n);Zy(i,this),this.dataTask.context.data=i,Vy(this).dataBeforeProcessed=i,Wy(this),this._initSelectedMapFromData(i)},e.prototype.mergeDefaultAndTheme=function(t,e){var n=ig(this),i=n?og(t):{},r=this.subType;lg.hasClass(r)&&(r+="Series"),D(t,e.getTheme().get(this.subType)),D(t,this.getDefaultOption()),ba(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&rg(t,i,n)},e.prototype.mergeOption=function(t,e){t=D(this.option,t,!0),this.fillDataTextStyle(t.data);var n=ig(this);n&&rg(this.option,t,n);var i=Vy(this).sourceManager;i.dirty(),i.prepareSource();var r=this.getInitialData(t,e);Zy(r,this),this.dataTask.dirty(),this.dataTask.context.data=r,Vy(this).dataBeforeProcessed=r,Wy(this),this._initSelectedMapFromData(r)},e.prototype.fillDataTextStyle=function(t){if(t&&!Q(t))for(var e=["show"],n=0;n=0&&c<0)&&(u=m,c=y,h=0),y===c&&(l[h++]=f))}return l.length=h,l},e.prototype.formatTooltip=function(t,e,n){return By({series:this,dataIndex:t,multipleSeries:e})},e.prototype.isAnimationEnabled=function(){var t=this.ecModel;if(r.node&&(!t||!t.ssr))return!1;var e=this.getShallow("animation");return e&&this.getData().count()>this.getShallow("animationThreshold")&&(e=!1),!!e},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,e,n){var i=this.ecModel,r=Og.prototype.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},e.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,r=this.getData(e);if("series"===i||"all"===n)return this.option.selectedMap={},void(this._selectedDataIndicesMap={});for(var o=0;o=0&&n.push(r)}return n},e.prototype.isSelected=function(t,e){var n=this.option.selectedMap;if(!n)return!1;var i=this.getData(e);return("all"===n||n[Gy(i,t)])&&!i.getItemModel(t).get(["select","disabled"])},e.prototype.isUniversalTransitionEnabled=function(){if(this[Fy])return!0;var t=this.option.universalTransition;return!!t&&(!0===t||t&&t.enabled)},e.prototype._innerSelect=function(t,e){var n,i,r=this.option,o=r.selectedMode,a=e.length;if(o&&a)if("series"===o)r.selectedMap="all";else if("multiple"===o){$(r.selectedMap)||(r.selectedMap={});for(var s=r.selectedMap,l=0;l0&&this._innerSelect(t,e)}},e.registerClass=function(t){return lg.registerClass(t)},e.protoInitialize=((i=e.prototype).type="series.__base__",i.seriesIndex=0,i.ignoreStyleOnData=!1,i.hasSymbolVisual=!1,i.defaultSymbol="circle",i.visualStyleAccessPath="itemStyle",void(i.visualDrawType="fill")),e}(lg);function Wy(t){var e=t.name;Aa(t)||(t.name=function(t){var e=t.getRawData(),n=e.mapDimensionsAll("seriesName"),i=[];return B(n,function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)}),i.join(" ")}(t)||e)}function Uy(t){return t.model.getRawData().count()}function Yy(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),Xy}function Xy(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Zy(t,e){B(xt(t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),function(n){t.wrapMethod(n,Y(jy,e))})}function jy(t,e){var n=qy(t);return n&&n.setOutputEnd((e||this).count()),e}function qy(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}E(Hy,Vv),E(Hy,Og),hs(Hy,lg);var Ky=function(){function t(){this.group=new vo,this.uid=Pp("viewComponent")}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){},t.prototype.updateLayout=function(t,e,n,i){},t.prototype.updateVisual=function(t,e,n,i){},t.prototype.toggleBlurSeries=function(t,e,n){},t.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)},t}();function $y(){var t=Pa();return function(e){var n=t(e),i=e.pipelineContext,r=!!n.large,o=!!n.progressiveRender,a=n.large=!(!i||!i.large),s=n.progressiveRender=!(!i||!i.progressiveRender);return!(r===a&&o===s)&&"reset"}}cs(Ky),gs(Ky);var Jy=Pa(),Qy=$y(),tm=function(){function t(){this.group=new vo,this.uid=Pp("viewChart"),this.renderTask=Fv({plan:im,reset:rm}),this.renderTask.context={view:this}}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){0},t.prototype.highlight=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&nm(r,i,"emphasis")},t.prototype.downplay=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&nm(r,i,"normal")},t.prototype.remove=function(t,e){this.group.removeAll()},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.eachRendered=function(t){Hd(this.group,t)},t.markUpdateMethod=function(t,e){Jy(t).updateMethod=e},t.protoInitialize=void(t.prototype.type="chart"),t}();function em(t,e,n){t&&Ec(t)&&("emphasis"===e?vc:yc)(t,n)}function nm(t,e,n){var i=La(t,e),r=e&&null!=e.highlightKey?function(t){var e=Wu[t];return null==e&&Hu<=32&&(e=Wu[t]=Hu++),e}(e.highlightKey):null;null!=i?B(_a(i),function(e){em(t.getItemGraphicEl(e),n,r)}):t.eachItemGraphicEl(function(t){em(t,n,r)})}function im(t){return Qy(t.model)}function rm(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelineContext.progressiveRender,a=t.view,s=r&&Jy(r).updateMethod,l=o?"incrementalPrepareRender":s&&a[s]?s:"render";return"render"!==l&&a[l](e,n,i,r),om[l]}cs(tm),gs(tm);var om={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},am="\0__throttleOriginMethod",sm="\0__throttleRate",lm="\0__throttleType";function um(t,e,n){var i,r,o,a,s,l=0,u=0,c=null;function h(){u=(new Date).getTime(),c=null,t.apply(o,a||[])}e=e||0;var d=function(){for(var t=[],d=0;d=0?h():c=setTimeout(h,-r),l=i};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){s=t},d}function cm(t,e,n,i){var r=t[e];if(r){var o=r[am]||r,a=r[lm];if(r[sm]!==n||a!==i){if(null==n||!i)return t[e]=o;(r=t[e]=um(o,n,"debounce"===i))[am]=o,r[lm]=i,r[sm]=n}return r}}function hm(t,e){var n=t[e];n&&n[am]&&(n.clear&&n.clear(),t[e]=n[am])}var dm=Pa(),pm={itemStyle:vs(Cp,!0),lineStyle:vs(Mp,!0)},fm={lineStyle:"stroke",itemStyle:"fill"};function gm(t,e){var n=t.visualStyleMapper||pm[e];return n||(console.warn("Unknown style type '"+e+"'."),pm.itemStyle)}function vm(t,e){var n=t.visualDrawType||fm[e];return n||(console.warn("Unknown style type '"+e+"'."),"fill")}var ym={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=t.getModel(i),o=gm(t,i)(r),a=r.getShallow("decal");a&&(n.setVisual("decal",a),a.dirty=!0);var s=vm(t,i),l=o[s],u=Z(l)?l:null,c="auto"===o.fill||"auto"===o.stroke;if(!o[s]||u||c){var h=t.getColorFromPalette(t.name,null,e.getSeriesCount());o[s]||(o[s]=h,n.setVisual("colorFromPalette",!0)),o.fill="auto"===o.fill||Z(o.fill)?h:o.fill,o.stroke="auto"===o.stroke||Z(o.stroke)?h:o.stroke}if(n.setVisual("style",o),n.setVisual("drawType",s),!e.isSeriesFiltered(t)&&u)return n.setVisual("colorFromPalette",!1),{dataEach:function(e,n){var i=t.getDataParams(n),r=k({},o);r[s]=u(i),e.setItemVisual(n,"style",r)}}}},mm=new kp,xm={createOnAllSeries:!0,reset:function(t,e){if(!t.ignoreStyleOnData){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=gm(t,i),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(t,e){var n=t.getRawDataItem(e);if(n&&n[i]){mm.option=n[i];var a=r(mm);k(t.ensureUniqueItemVisual(e,"style"),a),mm.option.decal&&(t.setItemVisual(e,"decal",mm.option.decal),mm.option.decal.dirty=!0),o in a&&t.setItemVisual(e,"colorFromPalette",!1)}}:null}}}},_m={performRawSeries:!0,overallReset:function(t){var e=mt();t.eachSeries(function(t){if(!t.isColorBySeries()){var n=t.type+"-"+t.getColorBy();dm(t).scope=e.get(n)||e.set(n,{})}}),t.eachSeries(function(t){if(!t.isColorBySeries()){var e=t.getRawData(),n={},i=t.getData(),r=dm(t).scope,o=t.visualStyleAccessPath||"itemStyle",a=vm(t,o);i.each(function(t){var e=i.getRawIndex(t);n[e]=t}),e.each(function(o){var s=n[o];if(i.getItemVisual(s,"colorFromPalette")){var l=i.ensureUniqueItemVisual(s,"style"),u=e.getName(o)||o+"",c=e.count();l[a]=t.getColorFromPalette(u,r,c)}})}})}},bm=Math.PI;var wm=function(){function t(t,e,n,i){this._stageTaskMap=mt(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return t.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each(function(t){var e=t.overallTask;e&&e.dirty()})},t.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,r=!e&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex?n.step:null,o=i&&i.modDataCount;return{step:r,modBy:null!=o?Math.ceil(o/r):null,modDataCount:o}}},t.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},t.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.__preparePipelineContext?t.__preparePipelineContext(e,n):rs(t,e,n);t.pipelineContext=n.context=i},t.prototype.restorePipelines=function(t,e){var n=this,i=n._pipelineMap=mt();e.eachSeries(function(e){var r="canvas"===t.painter.type&&e.getProgressive(),o=e.uid;i.set(o,{id:o,head:null,tail:null,threshold:e.getProgressiveThreshold(),progressiveEnabled:r&&!(e.preventIncremental&&e.preventIncremental()),blockIndex:-1,step:Math.round(r||700),count:0}),n._pipe(e,e.dataTask)})},t.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),n=this.api;B(this._allHandlers,function(i){var r=t.get(i.uid)||t.set(i.uid,{}),o="";ct(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,r,e,n),i.overallReset&&this._createOverallStageTask(i,r,e,n)},this)},t.prototype.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,this._pipe(e,r)},t.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},t.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},t.prototype._performStageTasks=function(t,e,n,i){i=i||{};var r=!1,o=this;function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}B(t,function(t,s){if(!i.visualType||i.visualType===t.visualType){var l=o._stageTaskMap.get(t.uid),u=l.seriesTaskMap,c=l.overallTask;if(c){var h,d=c.agentStubMap;d.each(function(t){a(i,t)&&(t.dirty(),h=!0)}),h&&c.dirty(),o.updatePayload(c,n);var p=o.getPerformArgs(c,i.block);d.each(function(t){t.perform(p)}),c.perform(p)&&(r=!0)}else u&&u.each(function(s,l){a(i,s)&&s.dirty();var u=o.getPerformArgs(s,i.block);u.skip=!t.performRawSeries&&e.isSeriesFiltered(s.context.model),o.updatePayload(s,n),s.perform(u)&&(r=!0)})}}),this.unfinished=r||this.unfinished},t.prototype.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e=t.dataTask.perform()||e}),this.unfinished=e||this.unfinished},t.prototype.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})},t.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},t.prototype._createSeriesStageTask=function(t,e,n,i){var r=this,o=e.seriesTaskMap,a=e.seriesTaskMap=mt(),s=t.seriesType,l=t.getTargetSeries;function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||Fv({plan:Cm,reset:Dm,count:Lm}));l.context={model:e,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:r},r._pipe(e,l)}t.createOnAllSeries?n.eachRawSeries(u):s?n.eachRawSeriesByType(s,u):l&&l(n,i).each(u)},t.prototype._createOverallStageTask=function(t,e,n,i){var r=this,o=e.overallTask=e.overallTask||Fv({reset:Sm});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:r};var a=o.agentStubMap,s=o.agentStubMap=mt(),l=t.seriesType,u=t.getTargetSeries,c=t.dirtyOnOverallProgress,h=!1,d="";function p(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(h=!0,Fv({reset:Mm,onDirty:Tm})));n.context={model:t,dirtyOnOverallProgress:c},n.agent=o,n.__block=c,r._pipe(t,n)}ct(!t.createOnAllSeries,d),l?n.eachRawSeriesByType(l,p):u?u(n,i).each(p):B(n.getSeries(),p),h&&o.dirty()},t.prototype._pipe=function(t,e){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=e),i.tail&&i.tail.pipe(e),i.tail=e,e.__idxInPipeline=i.count++,e.__pipeline=i},t.wrapStageHandler=function(t,e){return Z(t)&&(t={overallReset:t,seriesType:Pm(t)}),t.uid=Pp("stageHandler"),e&&(t.visualType=e),t},t}();function Sm(t){t.overallReset(t.ecModel,t.api,t.payload)}function Mm(t){return t.dirtyOnOverallProgress&&Im}function Im(){this.agent.dirty(),this.getDownstream().dirty()}function Tm(){this.agent&&this.agent.dirty()}function Cm(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function Dm(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=_a(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?V(e,function(t,e){return km(e)}):Am}var Am=km(0);function km(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var o=e.start;o0&&c===r.length-u.length){var h=r.slice(0,c);"data"!==h&&(e.mainType=h,e[u.toLowerCase()]=t,s=!0)}}a.hasOwnProperty(r)&&(n[r]=t,s=!0),s||(i[r]=t)})}return{cptQuery:e,dataQuery:n,otherQuery:i}},t.prototype.filter=function(t,e){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,r=n.packedEvent,o=n.model,a=n.view;if(!o||!a)return!0;var s=e.cptQuery,l=e.dataQuery;return u(s,o,"mainType")&&u(s,o,"subType")&&u(s,o,"index","componentIndex")&&u(s,o,"name")&&u(s,o,"id")&&u(l,r,"name")&&u(l,r,"dataIndex")&&u(l,r,"dataType")&&(!a.filterForExposedEvent||a.filterForExposedEvent(t,e.otherQuery,i,r));function u(t,e,n,i){return null==t[n]||e[i||n]===t[n]}},t.prototype.afterTrigger=function(){this.eventInfo=null},t}(),Um=["symbol","symbolSize","symbolRotate","symbolOffset"],Ym=Um.concat(["symbolKeepAspect"]),Xm={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData();if(t.legendIcon&&n.setVisual("legendIcon",t.legendIcon),t.hasSymbolVisual){for(var i={},r={},o=!1,a=0;a=0&&Sx(l)?l:.5,t.createRadialGradient(a,s,0,a,s,l)}(t,e,n):function(t,e,n){var i=null==e.x?0:e.x,r=null==e.x2?1:e.x2,o=null==e.y?0:e.y,a=null==e.y2?0:e.y2;return e.global||(i=i*n.width+n.x,r=r*n.width+n.x,o=o*n.height+n.y,a=a*n.height+n.y),i=Sx(i)?i:0,r=Sx(r)?r:1,o=Sx(o)?o:0,a=Sx(a)?a:0,t.createLinearGradient(i,o,r,a)}(t,e,n),r=e.colorStops,o=0;o0&&(e=i.lineDash,n=i.lineWidth,e&&"solid"!==e&&n>0?"dashed"===e?[4*n,2*n]:"dotted"===e?[n]:K(e)?[e]:X(e)?e:null:null),o=i.lineDashOffset;if(r){var a=i.strokeNoScale&&t.getLineScale?t.getLineScale():1;a&&1!==a&&(r=V(r,function(t){return t/a}),o/=a)}return[r,o]}var Dx=new Al(!0);function Ax(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))}function kx(t){return"string"==typeof t&&"none"!==t}function Lx(t){var e=t.fill;return null!=e&&"none"!==e}function Px(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.globalAlpha;t.globalAlpha=e.fillOpacity*e.opacity,t.fill(),t.globalAlpha=n}else t.fill()}function Ox(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t.globalAlpha;t.globalAlpha=e.strokeOpacity*e.opacity,t.stroke(),t.globalAlpha=n}else t.stroke()}function Rx(t,e,n){var i=bs(e.image,e.__image,n);if(Ss(i)){var r=t.createPattern(i,e.repeat||"repeat");if("function"==typeof DOMMatrix&&r&&r.setTransform){var o=new DOMMatrix;o.translateSelf(e.x||0,e.y||0),o.rotateSelf(0,0,(e.rotation||0)*Mt),o.scaleSelf(e.scaleX||1,e.scaleY||1),r.setTransform(o)}return r}}var Nx=["shadowBlur","shadowOffsetX","shadowOffsetY"],Ex=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function zx(t,e,n,i,r){var o=!1;if(!i&&e===(n=n||{}))return!1;if(i||e.opacity!==n.opacity){Gx(t,r),o=!0;var a=Math.max(Math.min(e.opacity,1),0);t.globalAlpha=isNaN(a)?Ws.opacity:a}(i||e.blend!==n.blend)&&(o||(Gx(t,r),o=!0),t.globalCompositeOperation=e.blend||Ws.blend);for(var s=0;s0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.isSSR=function(){return this._ssr},e.prototype.setOption=function(t,e,n){if(!this[e_])if(this._disposed)R_(this.id);else{var i,r,o;if($(e)&&(n=e.lazyUpdate,i=e.silent,r=e.replaceMerge,o=e.transition,e=e.notMerge),this[e_]=!0,D_(this),!this._model||e){var a=new Hg(this._api),s=this._theme,l=this._model=new zg;l.scheduler=this._scheduler,l.ssr=this._ssr,l.init(null,null,null,s,this._locale,a)}this._model.setOption(t,{replaceMerge:r},V_);var u={seriesTransition:o,optionChanged:!0};if(n)this[i_]={silent:i,updateParams:u},this[e_]=!1,this.getZr().wakeUp();else{try{c_(this),p_.update.call(this,null,u)}catch(t){throw this[i_]=null,this[e_]=!1,t}this._ssr||this._zr.flush(),this[i_]=null,this[e_]=!1,y_.call(this,i),m_.call(this,i)}}},e.prototype.setTheme=function(t,e){if(!this[e_])if(this._disposed)R_(this.id);else{var n=this._model;if(n){var i=e&&e.silent,r=null;this[i_]&&(null==i&&(i=this[i_].silent),r=this[i_].updateParams,this[i_]=null),this[e_]=!0,D_(this);try{this._updateTheme(t),n.setTheme(this._theme),c_(this),p_.update.call(this,{type:"setTheme"},r)}catch(t){throw this[e_]=!1,t}this[e_]=!1,y_.call(this,i),m_.call(this,i)}}},e.prototype._updateTheme=function(t){j(t)&&(t=F_[t]),t&&((t=C(t))&&uv(t,!0),this._theme=t)},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||r.hasGlobalWindow&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){return this.renderToCanvas(t)},e.prototype.renderToCanvas=function(t){t=t||{};var e=this._zr.painter;return e.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.renderToSVGString=function(t){t=t||{};var e=this._zr.painter;return e.renderToString({useViewBox:t.useViewBox})},e.prototype.getSvgDataURL=function(){var t=this._zr;return B(t.storage.getDisplayList(),function(t){t.stopAnimation(null,!0)}),t.painter.toDataURL()},e.prototype.getDataURL=function(t){if(!this._disposed){var e=(t=t||{}).excludeComponents,n=this._model,i=[],r=this;B(e,function(t){n.eachComponent({mainType:t},function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)})});var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.renderToCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return B(i,function(t){t.group.ignore=!1}),o}R_(this.id)},e.prototype.getConnectedDataURL=function(t){if(!this._disposed){var e="svg"===t.type,n=this.group,i=Math.min,r=Math.max,o=1/0;if(U_[n]){var a=o,s=o,l=-1/0,u=-1/0,h=[],d=t&&t.pixelRatio||this.getDevicePixelRatio();B(W_,function(o,c){if(o.group===n){var d=e?o.getZr().painter.getSvgDom().innerHTML:o.renderToCanvas(C(t)),p=o.getDom().getBoundingClientRect();a=i(p.left,a),s=i(p.top,s),l=r(p.right,l),u=r(p.bottom,u),h.push({dom:d,left:p.left,top:p.top})}});var p=(l*=d)-(a*=d),f=(u*=d)-(s*=d),g=c.createCanvas(),v=bo(g,{renderer:e?"svg":"canvas"});if(v.resize({width:p,height:f}),e){var y="";return B(h,function(t){var e=t.left-a,n=t.top-s;y+=''+t.dom+""}),v.painter.getSvgRoot().innerHTML=y,t.connectedBackgroundColor&&v.painter.setBackgroundColor(t.connectedBackgroundColor),v.refreshImmediately(),v.painter.toDataURL()}return t.connectedBackgroundColor&&v.add(new lu({shape:{x:0,y:0,width:p,height:f},style:{fill:t.connectedBackgroundColor}})),B(h,function(t){var e=new eu({style:{x:t.left*d-a,y:t.top*d-s,image:t.dom}});v.add(e)}),v.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}R_(this.id)},e.prototype.convertToPixel=function(t,e,n){return f_(this,"convertToPixel",t,e,n)},e.prototype.convertToLayout=function(t,e,n){return f_(this,"convertToLayout",t,e,n)},e.prototype.convertFromPixel=function(t,e,n){return f_(this,"convertFromPixel",t,e,n)},e.prototype.containPixel=function(t,e){var n;if(!this._disposed)return B(Ra(this._model,t),function(t,i){i.indexOf("Models")>=0&&B(t,function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n=n||!!r.containPoint(e);else if("seriesModels"===i){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n=n||o.containPoint(e,t))}else 0},this)},this),!!n;R_(this.id)},e.prototype.getVisual=function(t,e){var n=Ra(this._model,t,{defaultMainType:"series"}),i=n.seriesModel;var r=i.getData(),o=n.hasOwnProperty("dataIndexInside")?n.dataIndexInside:n.hasOwnProperty("dataIndex")?r.indexOfRawIndex(n.dataIndex):null;return null!=o?jm(r,o,e):qm(r,e)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t=this;B(O_,function(e){var n=function(n){var i,r=t.getModel(),o=n.target,a="globalout"===e;if(a?i={}:o&&Qm(o,function(t){var e=Iu(t);if(e&&null!=e.dataIndex){var n=e.dataModel||r.getSeriesByIndex(e.seriesIndex);return i=n&&n.getDataParams(e.dataIndex,e.dataType,o)||{},!0}if(e.eventData)return i=k({},e.eventData),!0},!0),i){var s=i.componentType,l=i.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=i.seriesIndex);var u=s&&null!=l&&r.getComponent(s,l),c=u&&t["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];0,i.event=n,i.type=e,t._$eventProcessor.eventInfo={targetEl:o,packedEvent:i,model:u,view:c},t.trigger(e,i)}};n.zrEventfulCallAtLast=!0,t._zr.on(e,n,t)});var e=this._messageCenter;B(z_,function(n,i){e.on(i,function(e){t.trigger(i,e)})}),function(t,e,n){t.on("selectchanged",function(t){var i=n.getModel();t.isFromClick?(Jm("map","selectchanged",e,i,t),Jm("pie","selectchanged",e,i,t)):"select"===t.fromAction?(Jm("map","selected",e,i,t),Jm("pie","selected",e,i,t)):"unselect"===t.fromAction&&(Jm("map","unselected",e,i,t),Jm("pie","unselected",e,i,t))})}(e,this,this._api)},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){this._disposed?R_(this.id):this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed)R_(this.id);else{this._disposed=!0,this.getDom()&&Ga(this.getDom(),Z_,"");var t=this,e=t._api,n=t._model;B(t._componentsViews,function(t){t.dispose(n,e)}),B(t._chartsViews,function(t){t.dispose(n,e)}),t._zr.dispose(),t._dom=t._model=t._chartsMap=t._componentsMap=t._chartsViews=t._componentsViews=t._scheduler=t._api=t._zr=t._throttledZrFlush=t._theme=t._coordSysMgr=t._messageCenter=null,delete W_[t.id]}},e.prototype.resize=function(t){if(!this[e_])if(this._disposed)R_(this.id);else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this[i_]&&(null==i&&(i=this[i_].silent),n=!0,this[i_]=null),this[e_]=!0,D_(this);try{n&&c_(this),p_.update.call(this,{type:"resize",animation:k({duration:0},t&&t.animation)})}catch(t){throw this[e_]=!1,t}this[e_]=!1,y_.call(this,i),m_.call(this,i)}}},e.prototype.showLoading=function(t,e){if(this._disposed)R_(this.id);else if($(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),H_[t]){var n=H_[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},e.prototype.hideLoading=function(){this._disposed?R_(this.id):(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},e.prototype.makeActionFromEvent=function(t){var e=k({},t);return e.type=E_[t.type],e},e.prototype.dispatchAction=function(t,e){if(this._disposed)R_(this.id);else if($(e)||(e={silent:!!e}),N_[t.type]&&this._model)if(this[e_])this._pendingActions.push(t);else{var n=e.silent;v_.call(this,t,n);var i=e.flush;i?this._zr.flush():!1!==i&&r.browser.weChat&&this._throttledZrFlush(),y_.call(this,n),m_.call(this,n)}},e.prototype.updateLabelLayout=function(){tx.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},e.prototype.appendData=function(t){if(this._disposed)R_(this.id);else{var e=t.seriesIndex,n=this.getModel().getSeriesByIndex(e);0,n.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()}},e.internalField=function(){function t(t){t.clearColorPalette(),t.eachSeries(function(t){t.clearColorPalette()})}function e(t){for(var e=[],n=t.currentStates,i=0;i0?{duration:o,delay:i.get("delay"),easing:i.get("easing")}:null;n.eachRendered(function(t){if(t.states&&t.states.emphasis){if(ad(t))return;if(t instanceof Kl&&function(t){var e=Uu(t);e.normalFill=t.style.fill,e.normalStroke=t.style.stroke;var n=t.states.select||{};e.selectFill=n.style&&n.style.fill||null,e.selectStroke=n.style&&n.style.stroke||null}(t),t.__dirty){var n=t.prevStates;n&&t.useStates(n)}if(r){t.stateTransition=a;var i=t.getTextContent(),o=t.getTextGuideLine();i&&(i.stateTransition=a),o&&(o.stateTransition=a)}t.__dirty&&e(t)}})}c_=function(t){var e;e=t._model,ox(e).prepare={};var n=t._scheduler;n.restorePipelines(t._zr,t._model),n.prepareStageTasks(),h_(t,!0),h_(t,!1),n.plan()},h_=function(t,e){for(var n=t._model,i=t._scheduler,r=e?t._componentsViews:t._chartsViews,o=e?t._componentsMap:t._chartsMap,a=t._zr,s=t._api,l=0;lat(e.get("hoverLayerThreshold"),yg.hoverLayerThreshold)&&!r.node&&!r.worker;(t._usingTHL||a)&&(e.eachSeries(function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.eachRendered(function(t){var e=t.states.emphasis;e&&2!==e.hoverLayer&&(e.hoverLayer=a?1:0)})}}),t._usingTHL=a)}(t,e),tx.trigger("series:afterupdate",e,n,l)},T_=function(t){t[r_]=!0,t.getZr().wakeUp()},D_=function(t){t[n_]=(t[n_]+1)%1e6},C_=function(t){t[r_]&&(t.getZr().storage.traverse(function(t){ad(t)||e(t)}),t[r_]=!1)},M_=function(t){return new(function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return n(i,e),i.prototype.getCoordinateSystems=function(){return t._coordSysMgr.getCoordinateSystems()},i.prototype.getComponentByElement=function(e){for(;e;){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}},i.prototype.enterEmphasis=function(e,n){vc(e,n),T_(t)},i.prototype.leaveEmphasis=function(e,n){yc(e,n),T_(t)},i.prototype.enterBlur=function(e){mc(e),T_(t)},i.prototype.leaveBlur=function(e){xc(e),T_(t)},i.prototype.enterSelect=function(e){_c(e),T_(t)},i.prototype.leaveSelect=function(e){bc(e),T_(t)},i.prototype.getModel=function(){return t.getModel()},i.prototype.getViewOfComponentModel=function(e){return t.getViewOfComponentModel(e)},i.prototype.getViewOfSeriesModel=function(e){return t.getViewOfSeriesModel(e)},i.prototype.getECUpdateCycleVersion=function(){return t[n_]},i.prototype.usingTHL=function(){return t._usingTHL},i}(Gu))(t)},I_=function(t){function e(t,e){for(var n=0;n=0)){sb.push(n);var a=wm.wrapStageHandler(n,r);a.__prio=e,a.__raw=n,t.push(a)}}function ub(t,e){H_[t]=e}function cb(t,e,n){var i=nx("registerMap");i&&i(t,e,n)}var hb=function(t){var e=(t=C(t)).type,n="";e||va(n);var i=e.split(":");2!==i.length&&va(n);var r=!1;"echarts"===i[0]&&(e=i[1],r=!0),t.__isBuiltIn=r,oy.set(e,t)};function db(t,e,n,i){return{eventContent:{selected:Dc(n),isFromClick:e.isFromClick||!1}}}ab(Jx,ym),ab(Qx,xm),ab(Qx,_m),ab(Jx,Xm),ab(Qx,Zm),ab(7e3,$x),J_(uv),Q_(900,cv),ub("default",function(t,e){P(e=e||{},{text:"loading",textColor:ug.color.primary,fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255,255,255,0.8)",showSpinner:!0,color:ug.color.theme[0],spinnerRadius:10,lineWidth:5,zlevel:0});var n=new vo,i=new lu({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(i);var r,o=new du({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),a=new lu({style:{fill:"none"},textContent:o,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});return n.add(a),e.showSpinner&&((r=new Vh({shape:{startAngle:-bm/2,endAngle:-bm/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001})).animateShape(!0).when(1e3,{endAngle:3*bm/2}).start("circularInOut"),r.animateShape(!0).when(1e3,{startAngle:3*bm/2}).delay(300).start("circularInOut"),n.add(r)),n.resize=function(){var n=o.getBoundingRect().width,s=e.showSpinner?e.spinnerRadius:0,l=(t.getWidth()-2*s-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner&&n?0:5+n/2)+(e.showSpinner?0:n/2)+(n?0:s),u=t.getHeight()/2;e.showSpinner&&r.setShape({cx:l,cy:u}),a.setShape({x:l-s,y:u-s,width:2*s,height:2*s}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n}),ib({type:qu,event:qu,update:qu},St),ib({type:Ku,event:Ku,update:Ku},St),ib({type:$u,event:tc,update:$u,action:St,refineEvent:db,publishNonRefinedEvent:!0}),ib({type:Ju,event:tc,update:Ju,action:St,refineEvent:db,publishNonRefinedEvent:!0}),ib({type:Qu,event:tc,update:Qu,action:St,refineEvent:db,publishNonRefinedEvent:!0}),$_("default",{}),$_("dark",Hm);var pb=[],fb={registerPreprocessor:J_,registerProcessor:Q_,registerPostInit:tb,registerPostUpdate:eb,registerUpdateLifecycle:nb,registerAction:ib,registerCoordinateSystem:rb,registerLayout:ob,registerVisual:ab,registerTransform:hb,registerLoading:ub,registerMap:cb,registerImpl:function(t,e){ex[t]=e},PRIORITY:t_,ComponentModel:lg,ComponentView:Ky,SeriesModel:Hy,ChartView:tm,registerComponentModel:function(t){lg.registerClass(t)},registerComponentView:function(t){Ky.registerClass(t)},registerSeriesModel:function(t){Hy.registerClass(t)},registerChartView:function(t){tm.registerClass(t)},registerCustomSeries:function(t,e){rx(t,e)},registerSubTypeDefaulter:function(t,e){lg.registerSubTypeDefaulter(t,e)},registerPainter:function(t,e){wo(t,e)}};function gb(t){X(t)?B(t,function(t){gb(t)}):R(pb,t)>=0||(pb.push(t),Z(t)&&(t={install:t}),t.install(fb))}function vb(t){return null==t?0:t.length||1}function yb(t){return t}var mb=function(){function t(t,e,n,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=n||yb,this._newKeyGetter=i||yb,this.context=r,this._diffModeMultiple="multiple"===o}return t.prototype.add=function(t){return this._add=t,this},t.prototype.update=function(t){return this._update=t,this},t.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},t.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},t.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},t.prototype.remove=function(t){return this._remove=t,this},t.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},t.prototype._executeOneToOne=function(){var t=this._old,e=this._new,n={},i=new Array(t.length),r=new Array(e.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(e,n,r,"_newKeyGetter");for(var o=0;o1){var u=s.shift();1===s.length&&(n[a]=s[0]),this._update&&this._update(u,o)}else 1===l?(n[a]=null,this._update&&this._update(s,o)):this._remove&&this._remove(o)}this._performRestAdd(r,n)},t.prototype._executeMultiple=function(){var t=this._old,e=this._new,n={},i={},r=[],o=[];this._initIndexMap(t,n,r,"_oldKeyGetter"),this._initIndexMap(e,i,o,"_newKeyGetter");for(var a=0;a1&&1===h)this._updateManyToOne&&this._updateManyToOne(u,l),i[s]=null;else if(1===c&&h>1)this._updateOneToMany&&this._updateOneToMany(u,l),i[s]=null;else if(1===c&&1===h)this._update&&this._update(u,l),i[s]=null;else if(c>1&&h>1)this._updateManyToMany&&this._updateManyToMany(u,l),i[s]=null;else if(c>1)for(var d=0;d1)for(var a=0;a30}var kb,Lb,Pb,Ob,Rb,Nb,Eb,zb=$,Bb=V,Vb="undefined"==typeof Int32Array?Array:Int32Array,Gb=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],Fb=["_approximateExtent"],Hb=function(){function t(t,e){var n;this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","minmaxDownSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","minmaxDownSample","lttbDownSample"];var i=!1;Tb(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,n=t),n=n||["x","y"];for(var r={},o=[],a={},s=!1,l={},u=0;u=e)){var n=this._store.getProvider();this._updateOrdinalMeta();var i=this._nameList,r=this._idList;if(n.getSource().sourceFormat===ku&&!n.pure)for(var o=[],a=t;a0},t.prototype.ensureUniqueItemVisual=function(t,e){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var r=i[e];return null==r&&(X(r=this.getVisual(e))?r=r.slice():zb(r)&&(r=k({},r)),i[e]=r),r},t.prototype.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,zb(e)?k(i,e):i[e]=n},t.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},t.prototype.setLayout=function(t,e){zb(t)?k(this._layout,t):this._layout[t]=e},t.prototype.getLayout=function(t){return this._layout[t]},t.prototype.getItemLayout=function(t){return this._itemLayouts[t]},t.prototype.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?k(this._itemLayouts[t]||{},e):e},t.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},t.prototype.setItemGraphicEl=function(t,e){var n=this.hostModel&&this.hostModel.seriesIndex;Tu(n,this.dataType,t,e),this._graphicEls[t]=e},t.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},t.prototype.eachItemGraphicEl=function(t,e){B(this._graphicEls,function(n,i){n&&t&&t.call(e,n,i)})},t.prototype.cloneShallow=function(e){return e||(e=new t(this._schema?this._schema:Bb(this.dimensions,this._getDimInfo,this),this.hostModel)),Rb(e,this),e._store=this._store,e},t.prototype.wrapMethod=function(t,e){var n=this[t];Z(n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(lt(arguments)))})},t.internalField=(kb=function(t){var e=t._invertedIndicesMap;B(e,function(n,i){var r=t._dimInfos[i],o=r.ordinalMeta,a=t._store;if(o){n=e[i]=new Vb(o.categories.length);for(var s=0;s1&&(s+="__ec__"+u),i[e]=s}})),t}();function Wb(t,e){mv(t)||(t=_v(t));var n=(e=e||{}).coordDimensions||[],i=e.dimensionsDefine||t.dimensionsDefine||[],r=mt(),o=[],a=function(t,e,n,i){var r=Math.max(t.dimensionsDetectedCount||1,e.length,n.length,i||0);return B(e,function(t){var e;$(t)&&(e=t.dimsDef)&&(r=Math.max(r,e.length))}),r}(t,n,i,e.dimensionsCount),s=e.canOmitUnusedDimensions&&Ab(a),l=i===t.dimensionsDefine,u=l?Db(t):Cb(i),c=e.encodeDefine;!c&&e.encodeDefaulter&&(c=e.encodeDefaulter(t,a));for(var h=mt(c),d=new hy(a),p=0;p0&&(t.name=t.name+(e-1))}),new Ib({source:t,dimensions:o,fullDimensionCount:a,dimensionOmitted:s})}function Ub(t,e,n){if(n||e.hasKey(t)){for(var i=0;e.hasKey(t+i);)i++;t+=i}return e.set(t,!0),t}var Yb=function(t){this.coordSysDims=[],this.axisMap=mt(),this.categoryAxisMap=mt(),this.coordSysName=t};var Xb={cartesian2d:function(t,e,n,i){var r=t.getReferringComponents("xAxis",Ea).models[0],o=t.getReferringComponents("yAxis",Ea).models[0];e.coordSysDims=["x","y"],n.set("x",r),n.set("y",o),Zb(r)&&(i.set("x",r),e.firstCategoryDimIndex=0),Zb(o)&&(i.set("y",o),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},singleAxis:function(t,e,n,i){var r=t.getReferringComponents("singleAxis",Ea).models[0];e.coordSysDims=["single"],n.set("single",r),Zb(r)&&(i.set("single",r),e.firstCategoryDimIndex=0)},polar:function(t,e,n,i){var r=t.getReferringComponents("polar",Ea).models[0],o=r.findAxisModel("radiusAxis"),a=r.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],n.set("radius",o),n.set("angle",a),Zb(o)&&(i.set("radius",o),e.firstCategoryDimIndex=0),Zb(a)&&(i.set("angle",a),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},geo:function(t,e,n,i){e.coordSysDims=["lng","lat"]},parallel:function(t,e,n,i){var r=t.ecModel,o=r.getComponent("parallel",t.get("parallelIndex")),a=e.coordSysDims=o.dimensions.slice();B(o.parallelAxisIndex,function(t,o){var s=r.getComponent("parallelAxis",t),l=a[o];n.set(l,s),Zb(s)&&(i.set(l,s),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=o))})},matrix:function(t,e,n,i){var r=t.getReferringComponents("matrix",Ea).models[0];e.coordSysDims=["x","y"];var o=r.getDimensionModel("x"),a=r.getDimensionModel("y");n.set("x",o),n.set("y",a),i.set("x",o),i.set("y",a)}};function Zb(t){return"category"===t.get("type")}function jb(t,e,n){var i,r,o,a=(n=n||{}).byIndex,s=n.stackedCoordDimension;!function(t){return!Tb(t.schema)}(e)?(r=e.schema,i=r.dimensions,o=e.store):i=e;var l,u,c,h,d=!(!t||!t.get("stack")),p=!0;function f(t){return"ordinal"!==t.type&&"time"!==t.type}if(B(i,function(t,e){j(t)&&(i[e]=t={name:t}),f(t)||(p=!1)}),B(i,function(t,e){d&&!t.isExtraCoord&&(a||l||!t.ordinalMeta||(l=t),u||!f(t)||p&&("x"===t.coordDim||"angle"===t.coordDim)||s&&s!==t.coordDim||(u=t))}),!u||a||l||(a=!0),u){c="__\0ecstackresult_"+t.id,h="__\0ecstackedover_"+t.id,l&&(l.createInvertedIndices=!0);var g=u.coordDim,v=u.type,y=0;B(i,function(t){t.coordDim===g&&y++});var m={name:c,coordDim:g,coordDimIndex:y,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length},x={name:h,coordDim:h,coordDimIndex:y+1,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length+1};r?(o&&(m.storeDimIndex=o.ensureCalculationDimension(h,v),x.storeDimIndex=o.ensureCalculationDimension(c,v)),r.appendCalculationDimension(m),r.appendCalculationDimension(x)):(i.push(m),i.push(x))}return{stackedDimension:u&&u.name,stackedByDimension:l&&l.name,isStackedByIndex:a,stackedOverDimension:h,stackResultDimension:c}}function qb(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function Kb(t,e){return qb(t,e)?t.getCalculationInfo("stackResultDimension"):e}function $b(t,e,n){n=n||{};var i,r=e.getSourceManager(),o=!1;t?(o=!0,i=_v(t)):o=(i=r.getSource()).sourceFormat===ku;var a=function(t){var e=t.get("coordinateSystem"),n=new Yb(e),i=Xb[e];if(i)return i(t,n,n.axisMap,n.categoryAxisMap),n}(e),s=function(t,e){var n,i=t.get("coordinateSystem"),r=Vf.get(i);return e&&e.coordSysDims&&(n=V(e.coordSysDims,function(t){var n={name:t},i=e.axisMap.get(t);if(i){var r=i.get("type");n.type=bb(r)}return n})),n||(n=r&&(r.getDimensionsInfo?r.getDimensionsInfo():r.dimensions.slice())||["x","y"]),n}(e,a),l=n.useEncodeDefaulter,u=Z(l)?l:l?Y(wg,s,e):null,c=Wb(i,{coordDimensions:s,generateCoord:n.generateCoord,encodeDefine:e.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!o}),h=function(t,e,n){var i,r;return n&&B(t,function(t,o){var a=t.coordDim,s=n.categoryAxisMap.get(a);s&&(null==i&&(i=o),t.ordinalMeta=s.getOrdinalMeta(),e&&(t.createInvertedIndices=!0)),null!=t.otherDims.itemName&&(r=!0)}),r||null==i||(t[i].otherDims.itemName=0),i}(c.dimensions,n.createInvertedIndices,a),d=o?null:r.getSharedDataStore(c),p=jb(e,{schema:c,store:d}),f=new Hb(c,e);f.setCalculationInfo(p);var g=null!=h&&function(t){if(t.sourceFormat===ku){var e=function(t){var e=0;for(;e=e[0]&&t<=e[1]},getExtent:function(){return this._extents[0].slice()},getExtentUnsafe:function(t){return this._extents[t]},setExtent:function(t,e){hw(this._extents,0,t,e)},setExtent2:function(t,e,n){var i=this._extents;i[t]||(i[t]=i[0].slice()),hw(i,t,e,n)},freeze:function(){0}};function hw(t,e,n,i){Ka(n,i)&&(t[e][0]=n,t[e][1]=i)}function dw(t){return pw(t)||gw(t)}function pw(t){return"interval"===t.type}function fw(t){return"time"===t.type}function gw(t){return"log"===t.type}function vw(t){return"ordinal"===t.type}function yw(t){var e=ea(t),n=Oo(10,e),i=ko(t/n);return i?2===i?i=3:3===i?i=5:i*=2:i=1,Ho(i*n,-e)}function mw(t){return Uo(t)+2}function xw(t,e){return Ro(t)/Ro(e)}function _w(t,e,n){var i=n&&n.lookup;if(i)for(var r=0;r1&&o/a>2&&(r=Math.round(Math.ceil(r/a)*a)),r!==i[0]&&l(i[0],!0,!0);for(var s=r;s<=i[1];s+=a)l(s,!1,s===i[0]||s===i[1]);function l(t,e,i){n({value:t,offInterval:e},i)}s-a!==i[1]&&l(i[1],!0,!0)}var Mw=function(t){function e(n){var i=t.call(this)||this;i.type="ordinal",i.parse=e.parse,rw(i,e.decoratedMethods);var r=n.ordinalMeta;r||(r=new tw({})),X(r)&&(r=new tw({categories:V(r,function(t){return $(t)?t.value:t})})),i._ordinalMeta=r;var o=iw(null,null,n.extent||[0,r.categories.length-1]);return i._mapper=o.mapper,ow(i,o.mapper),i}return n(e,t),e.parse=function(t){return null==t?t=NaN:j(t)?null==(t=this._ordinalMeta.getOrdinal(t))&&(t=NaN):t=ko(t),t},e.prototype.getTicks=function(){var t=[];return Sw(this,0,function(e){t.push(e)}),t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(null!=t){for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],r=0,o=this._ordinalMeta.categories.length,a=Co(o,e.length);r=0&&t=0&&t=0&&ta[0]&&fr[1]||!isFinite(d)||!isFinite(r[1]))break}else{if(p>h)break;d=Co(d,r[1]),p===h&&(d=r[1])}if(u.push({value:d}),d=Ho(d+n,o),s){var f=s.calcNiceTickMultiple(d,c);f>=0&&(d=Ho(d+f*n,o))}if(u.length>0&&d===u[u.length-1].value)break;if(u.length>3e3)return[]}var g=u.length?u[u.length-1].value:r[1];return i[1]>g&&u.push({value:t.expandToNicedExtent?Ho(g+n,o):i[1]}),l&&a.pruneTicksByBreak(t.pruneByBreak,u,s.breaks,function(t){return t.value},e.interval,i),l&&"none"!==t.breakTicks&&a.addBreaksToTicks(u,s.breaks,i),u},e.prototype.getMinorTicks=function(t){return Iw(this,t,Yp(this),this._cfg.interval)},e.prototype.getLabel=function(t,e){if(null==t)return"";var n=e&&e.precision;return null==n?n=Uo(t.value)||0:"auto"===n&&(n=this._cfg.intervalPrecision),Tf(Ho(t.value,n,!0))},e.type="interval",e}(Jb);Jb.registerClass(Tw);var Cw=function(t){function e(n){var i=t.call(this)||this;i.type="time",i.parse=e.parse,i._locale=n.locale,i._useUTC=n.useUTC,i._interval=0;var r=iw(i,Up(i,n),null);return i.brk=r.brk,i}return n(e,t),e.prototype.getLabel=function(t){return uf(t.value,ef[function(t){switch(t){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}(sf(this._minLevelUnit))]||ef.second,this._useUTC,this._locale)},e.prototype.getFormattedLabel=function(t,e,n){return function(t,e,n,i,r){var o=null;if(j(n))o=n;else if(Z(n)){var a={time:t.time,level:t.time?t.time.level:0},s=Wp();s&&s.makeAxisLabelFormatterParamBreak(a,t.break),o=n(t.value,e,a)}else{var l=t.time;if(l){var u=n[l.lowerTimeUnit][l.upperTimeUnit];o=u[Math.min(l.level,u.length-1)]||""}else{var c=cf(t.value,r);o=n[c][c][0]}}return uf(new Date(t.value),o,r,i)}(t,e,n,this._locale,this._useUTC)},e.prototype.getTicks=function(t){t=t||{};var e=this._interval,n=aw(this),i=Wp(),r=this.brk,o=i&&r,a=[];if(!e)return a;var s=this._useUTC;if(o&&"only_break"===t.breakTicks)return Wp().addBreaksToTicks(a,r.breaks,n),a;a=function(t,e,n,i,r,o){var a=3e3,s=rf,l=0;function u(t,e,n,r,s,u,c){for(var h=function(t,e){var n=new Date(0);n[t](1);var i=n.getTime();n[t](1+e);var r=n.getTime()-i;return function(t,e){return Math.max(0,Math.round((e-t)/r))}}(s,t),d=e,p=new Date(d);da){0;break}if(p[s](p[r]()+t),d=p.getTime(),o){var f=o.calcNiceTickMultiple(d,h);f>0&&(p[s](p[r]()+f*t),d=p.getTime())}}c.push({value:d,notAdd:d>i[1]})}function c(t,r,o){var a=[],s=!r.length;if(!Aw(sf(t),i[0],i[1],n)){s&&(r=[{value:Nw(i[0],t,n)},{value:i[1]}]);for(var l=0;l=i[0]&&c<=i[1]&&u(d,c,h,p,f,g,a),"year"===t&&o.length>1&&0===l&&o.unshift({value:o[0].value-d})}}for(l=0;l=i[0]&&x<=i[1]&&p++)}var _=r/e;if(p>1.5*_&&f>_/1.5)break;if(h.push(y),p>_||t===s[g])break}d=[]}}var b=F(V(h,function(t){return F(t,function(t){return t.value>=i[0]&&t.value<=i[1]&&!t.notAdd})}),function(t){return t.length>0}),w=b.length-1,S=[];for(g=0;gi[0])&&S.unshift({value:i[0],time:{level:0,upperTimeUnit:A,lowerTimeUnit:A},notNice:!0});(!D||D.value16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}function Lw(t){return(t/=2592e6)>6?6:t>3?3:t>2?2:1}function Pw(t){return(t/=qp)>12?12:t>6?6:t>3.5?4:t>2?2:1}function Ow(t,e){return(t/=e?jp:Zp)>30?30:t>20?20:t>15?15:t>10?10:t>5?5:t>2?2:1}function Rw(t){return Do(na(t,!0),1)}function Nw(t,e,n){var i=Math.max(0,R(nf,e)-1);return hf(new Date(t),nf[i],n).getTime()}Jb.registerClass(Cw);var Ew=function(t){function e(n){var i=t.call(this)||this;i.type="log",i.parse=Tw.parse,i.base=n.logBase||10;var r=[],o=[],a=i._lookup={from:r,to:o};r[0]=r[1]=o[0]=o[1]=NaN,rw(i,e.mapperMethods);var s=Wp(),l=n.breakOption,u={lookup:a};return s&&s.parseAxisBreakOptionInwardTransform(l,i,{noNegative:!0},2,u),i.powStub=new Tw({breakParsed:u.original}),i.intervalStub=new Tw({breakParsed:u.transformed}),ow(i,i.intervalStub),i}return n(e,t),e.prototype.getTicks=function(t){var e=this.base,n=this.powStub,i=Wp(),r=this.intervalStub,o={lookup:{from:r.getExtent(),to:n.getExtent()}};return V(r.getTicks(t||{}),function(t){var r,a=_w(t.value,e,o);if(i){var s=i.getTicksBreakOutwardTransform(this,t,Yp(n),this._lookup);s&&(r=s.vBreak,a=s.tickVal)}return{value:a,break:r}},this)},e.prototype.getMinorTicks=function(t){return Iw(this,t,Yp(this.powStub),this.intervalStub.getConfig().interval)},e.prototype.getLabel=function(t,e){return this.intervalStub.getLabel(t,e)},e.type="log",e.mapperMethods={needTransform:function(){return!0},normalize:function(t){return this.intervalStub.normalize(xw(t,this.base))},scale:function(t){return _w(this.intervalStub.scale(t),this.base,null)},transformIn:function(t,e){return t=xw(t,this.base),e&&2===e.depth?t:this.intervalStub.transformIn(t,e)},transformOut:function(t,e){var n=e?e.depth:null;return zw.depth=n,Bw.lookup=this._lookup,_w(2===n?t:this.intervalStub.transformOut(t,zw),this.base,Bw)},contain:function(t){return this.powStub.contain(t)},setExtent:function(t,e){this.setExtent2(0,t,e)},setExtent2:function(t,e,n){if(!(!Ka(e,n)||e<=0||n<=0)){var i=Vw,r=Vw;if(0===t){var o=this._lookup;i=o.to,r=o.from}this.powStub.setExtent2(t,i[0]=e,i[1]=n);var a=this.base;this.intervalStub.setExtent2(t,r[0]=xw(e,a),r[1]=xw(n,a))}},getFilter:function(){return{g:0}},sanitize:function(t,e){return Ka(e[0],e[1])&&ca(t)&&t<=0&&(t=e[0]),t},getDefaultStartValue:function(){return 1},getExtent:function(){return this.powStub.getExtent()},getExtentUnsafe:function(t,e){return null===e?this.powStub.getExtentUnsafe(t,null):this.intervalStub.getExtentUnsafe(t,e)}},e}(Jb);Jb.registerClass(Ew);var zw={},Bw={},Vw=[],Gw={value:1,category:1,time:1,log:1},Fw=Pa();function Hw(t){var e=t.get("type");return null!=e&&(wt(Gw,e)||Jb.getClass(e))||(e="value"),e}function Ww(t,e,n){var i;switch(Wp()&&(i=Jw(t,e,n)),e){case"category":return new Mw({ordinalMeta:t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),extent:[1/0,-1/0]});case"time":return new Cw({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC"),breakOption:i});case"log":return new Ew({logBase:t.get("logBase"),breakOption:i});case"value":return new Tw({breakOption:i});default:return new(Jb.getClass(e)||Tw)({})}}var Uw=1,Yw=2,Xw=3;function Zw(t){var e=t.getLabelModel().get("formatter");if("time"===t.type){var n=of(e);return function(e,i){return t.scale.getFormattedLabel(e,i,n)}}if(j(e))return function(n){var i=t.scale.getLabel(n);return e.replace("{value}",null!=i?i:"")};if(Z(e)){if("category"===t.type)return function(n,i){return e(jw(t,n),n.value-t.scale.getExtent()[0],null)};var i=Wp();return function(n,r){var o=null;return i&&(o=i.makeAxisLabelFormatterParamBreak(o,n.break)),e(jw(t,n),r,o)}}return function(e){return t.scale.getLabel(e)}}function jw(t,e){var n=t.scale;return vw(n)?n.getLabel(e):e.value}function qw(t){var e=t.get("interval");return null==e?"auto":e}function Kw(t){return"middle"===t||"center"===t}function $w(t){return t.getShallow("show")}function Jw(t,e,n){var i=t.get("breaks",!0);if(null!=i){if(!Wp())return void 0;if(!n||!function(t){return"category"!==t}(e))return;return i}}function Qw(t,e,n,i,r,o){var a,s,l=gw(t),u=l?t.intervalStub:t;if(u.setExtent(i[0],i[1]),l){var c=t.powStub,h={depth:2},d=t.transformOut(i[0],h),p=t.transformOut(i[1],h),f=(s=i,[(a=n)[0]!==s[0],a[1]!==s[1]]);e[0]&&!f[0]&&(d=r[0]),e[1]&&!f[1]&&(p=r[1]),c.setExtent(d,p)}u.setConfig(o)}function tS(t,e){return vw(t)?t.getRawOrdinalNumber(e.value):e.value}function eS(t,e){return vw(t)&&!!e.get("boundaryGap")}var nS=function(){function t(){}return t.prototype.needIncludeZero=function(){return!this.option.scale},t.prototype.getCoordSysModel=function(){},t}(),iS=Ja(),rS="|&",oS=Pa(),aS=Pa();function sS(t,e){var n=t.model,i=oS(sx(n.ecModel)).keyed,r=i&&i.get(e);return r&&r.get(n.uid)}function lS(t,e){return cS(sS(t,e))}function uS(t,e){var n=oS(sx(t)).keyed;n&&n.each(function(t,n){t.each(function(t,i){e(t,n,i)})})}function cS(t){return{liPosMinGap:t?t.liPosMinGap:void 0}}function hS(t,e,n){var i=sS(t,e);i&&dS(t.model.ecModel,i.sers,n)}function dS(t,e,n){if(e)for(var i=0;i=0}(u)||(u[0]=u[1]=NaN);var c=[],h=[!1,!1],d=e.get("min",!0);"dataMin"===d?(c[0]=u[0],h[0]=!0):(c[0]=MS(t,Z(d)?d({min:u[0],max:u[1]}):d),h[0]=null!=c[0]);var p=e.get("max",!0);"dataMax"===p?(c[1]=u[1],h[1]=!0):(c[1]=MS(t,Z(p)?p({min:u[0],max:u[1]}):p),h[1]=null!=c[1]);var f=function(t,e){var n;if(vw(t))n=[0,0];else{var i=e.get("boundaryGap");"boolean"==typeof i&&(i=null),n=X(i)?i:[i,i]}return[IS(n[0]),IS(n[1])]}(t,e),g=a?null:u[1]-u[0]||Math.abs(u[0]);null==c[0]&&(c[0]=a?o?u[0]:s?0:NaN:u[0]-f[0]*g),null==c[1]&&(c[1]=a?o?u[1]:s?s-1:NaN:u[1]+f[1]*g),!qa(c[0])&&(c[0]=NaN),!qa(c[1])&&(c[1]=NaN);var v=o||rt(c[0])||rt(c[1])||a&&!s,y=pw(t),m=y&&e.needIncludeZero&&e.needIncludeZero();m&&(c[0]>0&&c[1]>0&&!h[0]&&(c[0]=0),c[0]<0&&c[1]<0&&!h[1]&&(c[1]=0));var x=!1;c[0]>c[1]&&(c.reverse(),x=!0);var _=MS(t,e.get("startValue",!0)),b=null!=_;!ca(_)&&i&&(_=t.getDefaultStartValue?t.getDefaultStartValue():0),ca(_)&&(b||!y||m)&&(_c[1]&&!h[1]&&(c[1]=_,h[1]=!0)),SS(this._i={scale:t,dataMM:u,noZoomEffMM:c,zoomMM:[],fixMM:h,zoomFixMM:[!1,!1],startValue:_,isBlank:v,incl0:m,tggAxInv:x,ctnShp:r},c)}return t.prototype.makeNoZoom=function(){return this._i.noZoomEffMM.slice()},t.prototype.makeFinal=function(){var t=this._i,e=t.zoomMM,n=t.noZoomEffMM,i=t.zoomFixMM,r=t.fixMM,o={fixMM:r,zoomFixMM:i,isBlank:t.isBlank,incl0:t.incl0,tggAxInv:t.tggAxInv,ctnShp:t.ctnShp,effMM:n.slice()},a=o.effMM;return null!=e[0]&&(a[0]=e[0],r[0]=i[0]=!0),null!=e[1]&&(a[1]=e[1],r[1]=i[1]=!0),SS(t,a),o},t.prototype.makeRenderInfo=function(){return{startValue:this._i.startValue}},t.prototype.setZoomMM=function(t,e){this._i.zoomMM[t]=e},t}();function SS(t,e){var n=t.scale,i=t.dataMM;n.sanitize&&(e[0]=n.sanitize(e[0],i),e[1]=n.sanitize(e[1],i),$a(e))}function MS(t,e){return null==e?null:rt(e)?NaN:t.parse(e)}function IS(t){return Qr("boolean"==typeof t?0:t,1)||0}function TS(t){var e=bS(t.scale);return e.extent||(e.extent=[1/0,-1/0]),e}function CS(t,e){var n=t.scale,i=t.model,r=t.dim;n.rawExtentInfo||function(t,e,n,i,r){var o=TS(e),a=o.extent,s=!1;!function(t,e){var n=t.model.ecModel,i=oS(sx(n)).axSer;i&&dS(n,i.get(t.model.uid),e)}(e,function(i){if(i.boxCoordinateSystem){var r=Ff(i).coord,l=o.dimIdxInCoord;if(l>=0){if(X(r)){var u=r[l];null==u||X(u)||Xa(a,t.parse(u))}}else 0}else if(i.coordinateSystem){var c=i.getData();if(c){var h=t.getFilter?t.getFilter():null;B(function(t,e){var n={};return B(t.mapDimensionsAll(e),function(e){n[Kb(t,e)]=!0}),W(n)}(c,n),function(t){var e,n;e=a,Ka((n=c.getApproximateExtent(t,h))[0],n[1])&&(n[0]e[1]&&(e[1]=n[1]))})}i.__requireStartValue&&i.__requireStartValue(e)&&(s=!0)}});var l=function(t,e,n){var i=eS(t,n),r=n.get("containShape",!0);null!=r||i||(r=!0);if(!r)return!1;var o=!1;return fS(e,function(t){o=!!kS.get(t)||o}),o}(t,e,i),u=new wS(t,i,a,s,l);DS(t,u,r),o.extent=null}(n,t,r,i,e)}function DS(t,e,n){t.rawExtentInfo=e,e.from=n}function AS(t,e){kS.set(t,e)}var kS=mt();function LS(t,e,n,i,r){t.rawExtentInfo||function(t,e){var n=t.scale;DS(n,new wS(n,t.model,e,!1,!1),3)}({scale:t,model:e},r||[1/0,-1/0]);var o=t.rawExtentInfo.makeFinal(),a=o.effMM;return t.setExtent(a[0],a[1]),t.setBlank(o.isBlank),i&&o.tggAxInv&&n&&!n.get("legacyMinMaxDontInverseAxis")&&(i.inverse=!i.inverse),o}function PS(t,e,n,i){var r;if(n.ctnShp&&(fS(t,function(e){var n=kS.get(e);if(n){var o=n(t,i);o&&(Za(r=r||[0,0],o[0]),ja(r,o[1]),function(t){Fw(t).noOnMyZero=!0}(t))}}),r)){var o=e.getExtent();if(vw(e))t.onBand||e.setExtent2(1,Co(o[0],o[0]+r[0]),Do(o[1],o[1]+r[1]));else{var a=o.slice();n.zoomFixMM[0]||(a[0]=Co(a[0],e.transformOut(e.transformIn(a[0],null)+r[0],null))),n.zoomFixMM[1]||(a[1]=Do(a[1],e.transformOut(e.transformIn(a[1],null)+r[1],null))),(a[0]o[1])&&e.setExtent2(1,a[0],a[1])}}}function OS(t,e){var n=gw(t),i=n?t.intervalStub:t,r=e.fixMinMax||[],o=n?t.getExtent():null,a=i.getExtent(),s=bw(a,r,e.rawExtentResult);i.setExtent(s[0],s[1]),s=i.getExtent();var l=n?function(t,e){var n=ww(e.splitNumber,10),i=t.getExtent(),r=lw(t);0;var o=Do(ta(r),1);n/r*o<=.5&&(o*=10);var a=mw(o),s=[Ho(Po(i[0]/o)*o,a),Ho(Lo(i[1]/o)*o,a)];return{intervalPrecision:a,interval:o,niceExtent:s}}(i,e):function(t,e){var n=ww(e.splitNumber,5),i=lw(t);0;var r=e.minInterval,o=e.maxInterval,a=na(i/n,!0);null!=r&&ao&&(a=o);var s=mw(a),l=t.getExtent(),u=[Ho(Po(l[0]/a)*a,s),Ho(Lo(l[1]/a)*a,s)];return{interval:a,intervalPrecision:s,niceExtent:u}}(i,e),u=l.intervalPrecision,c=l.interval,h=e.userInterval;null!=h&&(l.interval=h,l.intervalPrecision=mw(h)),r[0]||(s[0]=Ho(Lo(s[0]/c)*c,u)),r[1]||(s[1]=Ho(Po(s[1]/c)*c,u)),null!=h&&(l.niceExtent=s.slice()),Qw(t,r,a,s,o,l)}function RS(t){var e=t.scale,n=t.model,i=n.axis,r=n.ecModel;NS(e,n,i,r,null)}function NS(t,e,n,i,r){var o=LS(t,e,i,n,r),a=pw(t)||fw(t);ES(t,{splitNumber:e.get("splitNumber"),fixMinMax:o.fixMM,userInterval:e.get("interval"),minInterval:a?e.get("minInterval"):null,maxInterval:a?e.get("maxInterval"):null,rawExtentResult:o}),n&&i&&PS(n,t,o,i)}function ES(t,e){zS[t.type](t,e)}var zS={interval:OS,log:OS,time:function(t,e){var n=t.getExtent();if(n[0]===n[1]&&(n[0]-=Kp,n[1]+=Kp),n[1]===-1/0&&n[0]===1/0){var i=new Date;n[1]=+new Date(i.getFullYear(),i.getMonth(),i.getDate()),n[0]=n[1]-Kp}t.setExtent(n[0],n[1]);var r=ww(e.splitNumber,10),o=lw(t)/r,a=e.minInterval,s=e.maxInterval;null!=a&&os&&(o=s);var l=Dw.length,u=Math.min(function(t,e,n,i){for(;n>>1;t[r][1]n&&(t=r,n=a)}if(t)return function(t){for(var e=0,n=0,i=0,r=t.length,o=t[r-1][0],a=t[r-1][1],s=0;s>1^-(1&s),l=l>>1^-(1&l),r=s+=r,o=l+=o,i.push([s/n,l/n])}return i}function JS(t,e){return V(F((t=function(t){if(!t.UTF8Encoding)return t;var e=t,n=e.UTF8Scale;return null==n&&(n=1024),B(e.features,function(t){var e=t.geometry,i=e.encodeOffsets,r=e.coordinates;if(i)switch(e.type){case"LineString":e.coordinates=$S(r,i,n);break;case"Polygon":case"MultiLineString":KS(r,i,n);break;case"MultiPolygon":B(r,function(t,e){return KS(t,i[e],n)})}}),e.UTF8Encoding=!1,e}(t)).features,function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0}),function(t){var n=t.properties,i=t.geometry,r=[];switch(i.type){case"Polygon":var o=i.coordinates;r.push(new XS(o[0],o.slice(1)));break;case"MultiPolygon":B(i.coordinates,function(t){t[0]&&r.push(new XS(t[0],t.slice(1)))});break;case"LineString":r.push(new ZS([i.coordinates]));break;case"MultiLineString":r.push(new ZS(i.coordinates))}var a=new jS(n[e||"name"],r,n.cp);return a.properties=n,a})}var QS=Object.freeze({__proto__:null,linearMap:Bo,round:function(t,e,n){return null==e&&(e=10),Ho(t,e,n)},asc:Wo,getPrecision:Uo,getPrecisionSafe:Yo,getPixelPrecision:function(t,e){var n=Lo(Ro(t[1]-t[0])/No),i=ko(Ro(Ao(e[1]-e[0]))/No),r=Co(Do(-n+i,0),20);return isFinite(r)?r:20},getPercentWithPrecision:function(t,e,n){return t[e]&&Zo(t,n)[e]||0},parsePercent:Vo,MAX_SAFE_INTEGER:qo,remRadian:Ko,isRadianAroundZero:$o,parseDate:Qo,quantity:ta,quantityExponent:ea,nice:na,quantile:ia,reformIntervals:ra,isNumeric:aa,numericToNumber:oa}),tM=Object.freeze({__proto__:null,parse:Qo,format:uf,roundTime:hf}),eM=Object.freeze({__proto__:null,extendShape:fd,extendPath:vd,makePath:xd,makeImage:_d,mergePath:wd,resizePath:Sd,createIcon:Od,updateProps:rd,initProps:od,getTransform:Td,clipPointsByRect:Ld,clipRectByRect:Pd,registerShape:yd,getShapeClass:md,Group:vo,Image:eu,Text:du,Circle:ah,Ellipse:lh,Sector:Sh,Ring:Ih,Polygon:Dh,Polyline:kh,Rect:lu,Line:Oh,BezierCurve:zh,Arc:Vh,IncrementalDisplayable:td,CompoundPath:Gh,LinearGradient:Hh,RadialGradient:Wh,BoundingRect:Xe}),nM=Object.freeze({__proto__:null,addCommas:Tf,toCamelCase:Cf,normalizeCssArray:Df,encodeHTML:se,formatTpl:Pf,getTooltipMarker:Rf,formatTime:function(t,e,n){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=Qo(e),r=n?"getUTC":"get",o=i[r+"FullYear"](),a=i[r+"Month"]()+1,s=i[r+"Date"](),l=i[r+"Hours"](),u=i[r+"Minutes"](),c=i[r+"Seconds"](),h=i[r+"Milliseconds"]();return t=t.replace("MM",af(a,2)).replace("M",a).replace("yyyy",o).replace("yy",af(o%100+"",2)).replace("dd",af(s,2)).replace("d",s).replace("hh",af(l,2)).replace("h",l).replace("mm",af(u,2)).replace("m",u).replace("ss",af(c,2)).replace("s",c).replace("SSS",af(h,3))},capitalFirst:function(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t},truncateText:function(t,e,n,i,r){var o={};return Is(o,t,e,n,i,r),o.text},getTextRect:function(t,e,n,i,r,o,a,s){return new du({style:{text:t,font:e,align:n,verticalAlign:i,padding:r,rich:o,overflow:a?"truncate":null,lineHeight:s}}).getBoundingRect()}}),iM=Object.freeze({__proto__:null,map:V,each:B,indexOf:R,inherits:N,reduce:G,filter:F,bind:U,curry:Y,isArray:X,isString:j,isObject:$,isFunction:Z,extend:k,defaults:P,clone:C,merge:D}),rM=Pa(),oM=Pa(),aM=1,sM=2;function lM(t){return{out:{noPxChangeTryDetermine:[]},kind:t}}function uM(t,e){var n=t.getLabelModel().get("customValues");if(n){var i=t.scale;return{labels:V(hM(n,i),function(e,n){return{formattedLabel:Zw(t)(e,n),rawLabel:i.getLabel(e),tick:e}})}}return"category"===t.type?function(t,e){var n=t.getLabelModel(),i=dM(t,n,e);return!n.get("show")||t.scale.isBlank()?{labels:[]}:i}(t,e):function(t){var e=t.scale.getTicks(),n=Zw(t);return{labels:V(e,function(e,i){return{formattedLabel:n(e,i),rawLabel:t.scale.getLabel(e),tick:e}})}}(t)}function cM(t,e,n){var i=t.scale,r=t.getTickModel().get("customValues");return r?{ticks:hM(r,i)}:"category"===t.type?function(t,e){var n,i,r=pM(t),o=qw(e),a=vM(r,o);if(a)return a;e.get("show")&&!t.scale.isBlank()||(n=[]);if(Z(o))n=_M(t,o,!0);else if("auto"===o){var s=dM(t,t.getLabelModel(),lM(sM));i=s.labelCategoryInterval,n=V(s.labels,function(t){return t.tick})}else n=_M(t,i=o,!0);return yM(r,o,{ticks:n,tickCategoryInterval:i})}(t,e):{ticks:i.getTicks(n)}}function hM(t,e){var n=e.getExtent(),i=[];return B(t,function(t){(t=e.parse(t))>=n[0]&&t<=n[1]&&i.push(t)}),ts(i,ns,null),Wo(i),V(i,function(t){return{value:t}})}function dM(t,e,n){var i,r,o=fM(t),a=qw(e),s=n.kind===aM;if(!s){var l=vM(o,a);if(l)return l}Z(a)?i=_M(t,a,!1):(r="auto"===a?function(t,e){if(e.kind===aM){var n=t.calculateCategoryInterval(e);return e.out.noPxChangeTryDetermine.push(function(){return oM(t).autoInterval=n,!0}),n}var i=oM(t).autoInterval;return null!=i?i:oM(t).autoInterval=t.calculateCategoryInterval(e)}(t,n):a,i=_M(t,r,!1));var u={labels:i,labelCategoryInterval:r};return s?n.out.noPxChangeTryDetermine.push(function(){return yM(o,a,u),!0}):yM(o,a,u),u}var pM=gM("axisTick"),fM=gM("axisLabel");function gM(t){return function(e){return oM(e)[t]||(oM(e)[t]={list:[]})}}function vM(t,e){for(var n=0;ne&&i.axisExtent0===r[0]&&i.axisExtent1===r[1])return o;i.lastTickCount=n,i.lastAutoInterval=e,i.axisExtent0=r[0],i.axisExtent1=r[1]}function _M(t,e,n){var i=Zw(t),r=t.scale,o=[],a=Z(e);return Sw(r,a?0:e,function(t,s){var l=r.getLabel(t);if(a){var u=!!e(t.value,l);if(t.offInterval=!u,!u&&!s)return}o.push(n?t:{formattedLabel:i(t),rawLabel:l,tick:t})}),o}function bM(t,e){e=e||{};var n,i={w:NaN,w2:NaN},r=t.scale,o=e.fromStat,a=e.min,s=(n=sw(r,3))[1]-n[0];ca(s)||(s=NaN);var l=t.getExtent(),u=Ao(l[1]-l[0]);return vw(r)?function(t,e,n,i){var r=e.onBand,o=n+(r?1:0);0===o&&(o=1),t.w=i/o,!r&&n&&i&&(t.w2=t.w*n/i)}(i,t,s,u):o&&function(t,e,n,i,r){0;var o=!1,a=-1/0;B(r.key?[lS(e,r.key)]:function(t,e){var n=[];return uS(t.model.ecModel,function(t){for(var i=0;i0?(e>a&&(a=e),o=!1):-2===e&&(o=!0))}),ca(n)&&n>0&&ca(a)?(t.w=i/n*a,t.w2=a):o&&(t.w=.8*i,t.w2=t.w*n/i)}(i,t,s,u,o),null!=a&&(i.w=ca(i.w)?Do(a,i.w):a),i}var wM=[0,1],SM=function(){function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=n||[0,0]}return t.prototype.contain=function(t){var e=this._extent,n=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return t>=n&&t<=i},t.prototype.containData=function(t){return this.scale.contain(this.scale.parse(t))},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.setExtent=function(t,e){var n=this._extent;n[0]=t,n[1]=e},t.prototype.dataToCoord=function(t,e){var n=this.scale;return Bo(t=n.normalize(n.parse(t)),wM,MM(this),e)},t.prototype.coordToData=function(t,e){var n=Bo(t,MM(this),wM,e);return this.scale.scale(n)},t.prototype.pointToData=function(t,e){},t.prototype.getTicksCoords=function(t){var e=(t=t||{}).tickModel||this.getTickModel(),n=V(cM(this,e,{breakTicks:t.breakTicks,pruneByBreak:t.pruneByBreak}).ticks,function(t){return{coord:this.dataToCoord(tS(this.scale,t)),tick:t}},this),i=function(t,e,n){var i=e.length;if(!t.onBand||n||!i)return!1;var r=bM(t).w;if(!r)return!1;B(e,function(t){t.coord-=r/2});var o=t.scale.getExtent(),a=e[i-1];a.tick.offInterval&&e.pop();return e.push({coord:a.coord+r,tick:{value:o[1]+1}}),!0}(this,n,e.get("alignWithLabel"));return V(n,function(t){return{coord:t.coord,tickValue:t.tick.value,onBand:i}})},t.prototype.getMinorTicksCoords=function(){if(vw(this.scale))return[];var t=this.model.getModel("minorTick").get("splitNumber");return t>0&&t<100||(t=5),V(this.scale.getMinorTicks(t),function(t){return V(t,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this)},this)},t.prototype.getViewLabels=function(t){return uM(this,t=t||lM(sM)).labels},t.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},t.prototype.getTickModel=function(){return this.model.getModel("axisTick")},t.prototype.getBandWidth=function(){return bM(this,{min:1}).w},t.prototype.calculateCategoryInterval=function(t){return function(t,e){var n=e.kind,i=function(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}(t),r=Zw(t),o=(i.axisRotate-i.labelRotate)/180*Math.PI,a=t.scale,s=a.getExtent(),l=a.count();if(s[1]-s[0]<1)return 0;var u=1;l>40&&(u=Math.max(1,Math.floor(l/40)));for(var c=s[0],h=t.dataToCoord(c+1)-t.dataToCoord(c),d=Math.abs(h*Math.cos(o)),p=Math.abs(h*Math.sin(o)),f=0,g=0;c<=s[1];c+=u){var v,y,m=qr(r({value:c}),i.font,"center","top");v=1.3*m.width,y=1.3*m.height,f=Math.max(f,v,7),g=Math.max(g,y,7)}var x=f/d,_=g/p;isNaN(x)&&(x=1/0),isNaN(_)&&(_=1/0);var b=Math.max(0,Math.floor(Math.min(x,_)));if(n===aM)return e.out.noPxChangeTryDetermine.push(U(mM,null,t,b,l)),b;var w=xM(t,b,l);return null!=w?w:b}(this,t=t||lM(sM))},t}();function MM(t){var e=t.getExtent();if(t.onBand){var n=(e[1]-e[0])/t.scale.count()/2;e[0]+=n,e[1]-=n}return e}var IM=2*Math.PI,TM=Al.CMD,CM=["top","right","bottom","left"];function DM(t,e,n,i,r){var o=n.width,a=n.height;switch(t){case"top":i.set(n.x+o/2,n.y-e),r.set(0,-1);break;case"bottom":i.set(n.x+o/2,n.y+a+e),r.set(0,1);break;case"left":i.set(n.x-e,n.y+a/2),r.set(-1,0);break;case"right":i.set(n.x+o+e,n.y+a/2),r.set(1,0)}}function AM(t,e,n,i,r,o,a,s,l){a-=t,s-=e;var u=Math.sqrt(a*a+s*s),c=(a/=u)*n+t,h=(s/=u)*n+e;if(Math.abs(i-r)%IM<1e-4)return l[0]=c,l[1]=h,u-n;if(o){var d=i;i=Rl(r),r=Rl(d)}else i=Rl(i),r=Rl(r);i>r&&(r+=IM);var p=Math.atan2(s,a);if(p<0&&(p+=IM),p>=i&&p<=r||p+IM>=i&&p+IM<=r)return l[0]=c,l[1]=h,u-n;var f=n*Math.cos(i)+t,g=n*Math.sin(i)+e,v=n*Math.cos(r)+t,y=n*Math.sin(r)+e,m=(f-a)*(f-a)+(g-s)*(g-s),x=(v-a)*(v-a)+(y-s)*(y-s);return m0){e=e/180*Math.PI,NM.fromArray(t[0]),EM.fromArray(t[1]),zM.fromArray(t[2]),Pe.sub(BM,NM,EM),Pe.sub(VM,zM,EM);var n=BM.len(),i=VM.len();if(!(n<.001||i<.001)){BM.scale(1/n),VM.scale(1/i);var r=BM.dot(VM);if(Math.cos(e)1&&Pe.copy(HM,zM),HM.toArray(t[1])}}}}function UM(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,NM.fromArray(t[0]),EM.fromArray(t[1]),zM.fromArray(t[2]),Pe.sub(BM,EM,NM),Pe.sub(VM,zM,EM);var i=BM.len(),r=VM.len();if(!(i<.001||r<.001))if(BM.scale(1/i),VM.scale(1/r),BM.dot(e)=a)Pe.copy(HM,zM);else{HM.scaleAndAdd(VM,o/Math.tan(Math.PI/2-s));var l=zM.x!==EM.x?(HM.x-EM.x)/(zM.x-EM.x):(HM.y-EM.y)/(zM.y-EM.y);if(isNaN(l))return;l<0?Pe.copy(HM,EM):l>1&&Pe.copy(HM,zM)}HM.toArray(t[1])}}}function YM(t,e,n,i){var r="normal"===n,o=r?t:t.ensureState(n);o.ignore=e;var a=i.get("smooth");a=!0===a?.3:Math.max(+a,0)||0,o.shape=o.shape||{},o.shape.smooth=a;var s=i.getModel("lineStyle").getLineStyle();r?t.useStyle(s):o.style=s}function XM(t,e){var n=e.smooth,i=e.points;if(i)if(t.moveTo(i[0][0],i[0][1]),n>0&&i.length>=3){var r=Ft(i[0],i[1]),o=Ft(i[1],i[2]);if(!r||!o)return t.lineTo(i[1][0],i[1][1]),void t.lineTo(i[2][0],i[2][1]);var a=Math.min(r,o)*n,s=Ut([],i[1],i[0],a/r),l=Ut([],i[1],i[2],a/o),u=Ut([],s,l,.5);t.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),t.bezierCurveTo(l[0],l[1],l[0],l[1],i[2][0],i[2][1])}else for(var c=1;c0&&r&&b(-h/o,0,o);var g,v,y=t[0],m=t[o-1];function x(){g=y.rect[a]-n,v=i-m.rect[a]-m.rect[s]}function _(t,e,n){if(t<0){var i=Math.min(e,-t);if(i>0){b(i*n,0,o);var r=i+t;r<0&&w(-r*n,1)}else w(-t*n,1)}}function b(e,n,i){0!==e&&(c=!0);for(var r=n;r0)for(l=0;l0;l--){b(-(i[l-1]*h),l,o)}}}function S(t){var e=t<0?-1:1;t=Math.abs(t);for(var n=Math.ceil(t/(o-1)),i=0;i0?b(n,0,i+1):b(-n,o-i-1,o),(t-=n)<=0)return}return x(),g<0&&w(-g,.8),v<0&&w(v,.8),x(),_(g,v,1),_(v,g,-1),x(),g<0&&S(-g),v<0&&S(v),c}function oI(t){var e=[];function n(t){if(!t.ignore){var e=t.ensureState("emphasis");null==e.ignore&&(e.ignore=!1)}t.ignore=!0}t.sort(function(t,e){return(e.suggestIgnore?1:0)-(t.suggestIgnore?1:0)||e.priority-t.priority});for(var i=0;i=0&&n.attr(p.oldLayoutSelect),R(u,"emphasis")>=0&&n.attr(p.oldLayoutEmphasis)),rd(n,s,e,a)}else if(n.attr(s),!fp(n).valueAnimation){var c=at(n.style.opacity,1);n.style.opacity=0,od(n,{style:{opacity:c}},e,a)}if(p.oldLayout=s,n.states.select){var h=p.oldLayoutSelect={};pI(h,s,fI),pI(h,n.states.select,fI)}if(n.states.emphasis){var d=p.oldLayoutEmphasis={};pI(d,s,fI),pI(d,n.states.emphasis,fI)}vp(n,a,l,e,e)}if(i&&!i.ignore&&!i.invisible){r=(p=dI(i)).oldLayout;var p,f={points:i.shape.points};r?(i.attr({shape:r}),rd(i,{shape:f},e)):(i.setShape(f),i.style.strokePercent=0,od(i,{style:{strokePercent:1}},e)),p.oldLayout=f}},t}(),vI=Pa();var yI=Math.sin,mI=Math.cos,xI=Math.PI,_I=2*Math.PI,bI=180/xI,wI=function(){function t(){}return t.prototype.reset=function(t){this._start=!0,this._d=[],this._str="",this._p=Math.pow(10,t||4)},t.prototype.moveTo=function(t,e){this._add("M",t,e)},t.prototype.lineTo=function(t,e){this._add("L",t,e)},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){this._add("C",t,e,n,i,r,o)},t.prototype.quadraticCurveTo=function(t,e,n,i){this._add("Q",t,e,n,i)},t.prototype.arc=function(t,e,n,i,r,o){this.ellipse(t,e,n,n,0,i,r,o)},t.prototype.ellipse=function(t,e,n,i,r,o,a,s){var l=a-o,u=!s,c=Math.abs(l),h=Pi(c-_I)||(u?l>=_I:-l>=_I),d=l>0?l%_I:l%_I+_I,p=!1;p=!!h||!Pi(c)&&d>=xI==!!u;var f=t+n*mI(o),g=e+i*yI(o);this._start&&this._add("M",f,g);var v=Math.round(r*bI);if(h){var y=1/this._p,m=(u?1:-1)*(_I-y);this._add("A",n,i,v,1,+u,t+n*mI(o+m),e+i*yI(o+m)),y>.01&&this._add("A",n,i,v,0,+u,f,g)}else{var x=t+n*mI(a),_=e+i*yI(a);this._add("A",n,i,v,+p,+u,x,_)}},t.prototype.rect=function(t,e,n,i){this._add("M",t,e),this._add("l",n,0),this._add("l",0,i),this._add("l",-n,0),this._add("Z")},t.prototype.closePath=function(){this._d.length>0&&this._add("Z")},t.prototype._add=function(t,e,n,i,r,o,a,s,l){for(var u=[],c=this._p,h=1;h"}(r,o)+("style"!==r?se(a):a||"")+(i?""+n+V(i,function(e){return t(e)}).join(n)+n:"")+("")}(t)}function RI(t){return{zrId:t,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssStyleCache:{},cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function NI(t,e,n,i){return PI("svg","root",{width:t,height:e,xmlns:DI,"xmlns:xlink":AI,version:"1.1",baseProfile:"full",viewBox:!!i&&"0 0 "+t+" "+e},n)}var EI=0;function zI(){return EI++}var BI={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},VI="transform-origin";function GI(t,e,n){var i=k({},t.shape);k(i,e),t.buildPath(n,i);var r=new wI;return r.reset(Hi(t)),n.rebuildPath(r,1),r.generateStr(),r.getStr()}function FI(t,e){var n=e.originX,i=e.originY;(n||i)&&(t[VI]=n+"px "+i+"px")}var HI={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function WI(t,e){var n=e.zrId+"-ani-"+e.cssAnimIdx++;return e.cssAnims[n]=t,n}function UI(t){return j(t)?BI[t]?"cubic-bezier("+BI[t]+")":Jn(t)?t:"":""}function YI(t,e,n,i){var r=t.animators,o=r.length,a=[];if(t instanceof Gh){var s=function(t,e,n){var i,r,o=t.shape.paths,a={};if(B(o,function(t){var e=RI(n.zrId);e.animation=!0,YI(t,{},e,!0);var o=e.cssAnims,s=e.cssNodes,l=W(o),u=l.length;if(u){var c=o[r=l[u-1]];for(var h in c){var d=c[h];a[h]=a[h]||{d:""},a[h].d+=d.d||""}for(var p in s){var f=s[p].animation;f.indexOf(r)>=0&&(i=f)}}}),i){e.d=!1;var s=WI(a,n);return i.replace(r,s)}}(t,e,n);if(s)a.push(s);else if(!o)return}else if(!o)return;for(var l={},u=0;u0}).length)return WI(c,n)+" "+r[0]+" both"}for(var v in l){(s=g(l[v]))&&a.push(s)}if(a.length){var y=n.zrId+"-cls-"+zI();n.cssNodes["."+y]={animation:a.join(",")},e.class=y}}function XI(t,e,n,i){var r=JSON.stringify(t),o=n.cssStyleCache[r];o||(o=n.zrId+"-cls-"+zI(),n.cssStyleCache[r]=o,n.cssNodes["."+o+(i?":hover":"")]=t),e.class=e.class?e.class+" "+o:o}var ZI=Math.round;function jI(t){return t&&j(t.src)}function qI(t){return t&&Z(t.toDataURL)}function KI(t,e,n,i){CI(function(r,o){var a="fill"===r||"stroke"===r;a&&Gi(o)?sT(e,t,r,i):a&&zi(o)?lT(n,t,r,i):t[r]=o,a&&i.ssr&&"none"===o&&(t["pointer-events"]="visible")},e,n,!1),function(t,e,n){var i=t.style;if(function(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}(i)){var r=function(t){var e=t.style,n=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),n[0],n[1]].join(",")}(t),o=n.shadowCache,a=o[r];if(!a){var s=t.getGlobalScale(),l=s[0],u=s[1];if(!l||!u)return;var c=i.shadowOffsetX||0,h=i.shadowOffsetY||0,d=i.shadowBlur,p=ki(i.shadowColor),f=p.opacity,g=p.color,v=d/2/l+" "+d/2/u;a=n.zrId+"-s"+n.shadowIdx++,n.defs[a]=PI("filter",a,{id:a,x:"-100%",y:"-100%",width:"300%",height:"300%"},[PI("feDropShadow","",{dx:c/l,dy:h/u,stdDeviation:v,"flood-color":g,"flood-opacity":f})]),o[r]=a}e.filter=Fi(a)}}(n,t,i)}function $I(t,e){var n=So(e);n&&(n.each(function(e,n){null!=e&&(t[(kI+n).toLowerCase()]=e+"")}),e.isSilent()&&(t[kI+"silent"]="true"))}function JI(t){return Pi(t[0]-1)&&Pi(t[1])&&Pi(t[2])&&Pi(t[3]-1)}function QI(t,e,n){if(e&&(!function(t){return Pi(t[4])&&Pi(t[5])}(e)||!JI(e))){var i=n?10:1e4;t.transform=JI(e)?"translate("+ZI(e[4]*i)/i+" "+ZI(e[5]*i)/i+")":function(t){return"matrix("+Oi(t[0])+","+Oi(t[1])+","+Oi(t[2])+","+Oi(t[3])+","+Ri(t[4])+","+Ri(t[5])+")"}(e)}}function tT(t,e,n){for(var i=t.points,r=[],o=0;o=0&&a||o;s&&(r=Ci(s))}var l=i.lineWidth;l&&(l/=!i.strokeNoScale&&t.transform?t.transform[0]:1);var u={cursor:"pointer"};r&&(u.fill=r),i.stroke&&(u.stroke=i.stroke),l&&(u["stroke-width"]=l),XI(u,e,n,!0)}}(t,o,e),PI(s,t.id+"",o)}function aT(t,e){return t instanceof Kl?oT(t,e):t instanceof eu?function(t,e){var n=t.style,i=n.image;if(i&&!j(i)&&(jI(i)?i=i.src:qI(i)&&(i=i.toDataURL())),i){var r=n.x||0,o=n.y||0,a={href:i,width:n.width,height:n.height};return r&&(a.x=r),o&&(a.y=o),QI(a,t.transform),KI(a,n,t,e),$I(a,t),e.animation&&YI(t,a,e),PI("image",t.id+"",a)}}(t,e):t instanceof Jl?function(t,e){var n=t.style,i=n.text;if(null!=i&&(i+=""),i&&!isNaN(n.x)&&!isNaN(n.y)){var r=n.font||a,s=n.x||0,l=function(t,e,n){return"top"===n?t+=e/2:"bottom"===n&&(t-=e/2),t}(n.y||0,Jr(r),n.textBaseline),u={"dominant-baseline":"central","text-anchor":Ni[n.textAlign]||n.textAlign};if(mu(n)){var c="",h=n.fontStyle,d=vu(n.fontSize);if(!parseFloat(d))return;var p=n.fontFamily||o,f=n.fontWeight;c+="font-size:"+d+";font-family:"+p+";",h&&"normal"!==h&&(c+="font-style:"+h+";"),f&&"normal"!==f&&(c+="font-weight:"+f+";"),u.style=c}else u.style="font: "+r;return i.match(/\s/)&&(u["xml:space"]="preserve"),s&&(u.x=s),l&&(u.y=l),QI(u,t.transform),KI(u,n,t,e),$I(u,t),e.animation&&YI(t,u,e),PI("text",t.id+"",u,void 0,i)}}(t,e):void 0}function sT(t,e,n,i){var r,o=t[n],a={gradientUnits:o.global?"userSpaceOnUse":"objectBoundingBox"};if(Bi(o))r="linearGradient",a.x1=o.x,a.y1=o.y,a.x2=o.x2,a.y2=o.y2;else{if(!Vi(o))return void 0;r="radialGradient",a.cx=at(o.x,.5),a.cy=at(o.y,.5),a.r=at(o.r,.5)}for(var s=o.colorStops,l=[],u=0,c=s.length;ul?ST(t,null==n[h+1]?null:n[h+1].elm,n,s,h):MT(t,e,a,l))}(n,i,r):xT(r)?(xT(t.text)&&vT(n,""),ST(n,null,r,0,r.length-1)):xT(i)?MT(n,i,0,i.length-1):xT(t.text)&&vT(n,""):t.text!==e.text&&(xT(i)&&MT(n,i,0,i.length-1),vT(n,e.text)))}var CT=0,DT=function(){function t(t,e,n){if(this.type="svg",this.configLayer=function(){},this.storage=e,this._opts=n=k({},n),this.root=t,this._id="zr"+CT++,this._oldVNode=NI(n.width,n.height),t&&!n.ssr){var i=this._viewport=document.createElement("div");i.style.cssText="position:relative;overflow:hidden";var r=this._svgDom=this._oldVNode.elm=LI("svg");IT(null,this._oldVNode),i.appendChild(r),t.appendChild(i)}this.resize(n.width,n.height)}return t.prototype.getType=function(){return this.type},t.prototype.getViewportRoot=function(){return this._viewport},t.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},t.prototype.getSvgDom=function(){return this._svgDom},t.prototype.refresh=function(){if(this.root){var t=this.renderToVNode({willUpdate:!0});t.attrs.style="position:absolute;left:0;top:0;user-select:none",function(t,e){if(bT(t,e))TT(t,e);else{var n=t.elm,i=fT(n);wT(e),null!==i&&(hT(i,e.elm,gT(n)),MT(i,[t],0,0))}}(this._oldVNode,t),this._oldVNode=t}},t.prototype.renderOneToVNode=function(t){return aT(t,RI(this._id))},t.prototype.renderToVNode=function(t){t=t||{};var e=this.storage.getDisplayList(!0),n=this._width,i=this._height,r=RI(this._id);r.animation=t.animation,r.willUpdate=t.willUpdate,r.compress=t.compress,r.emphasis=t.emphasis,r.ssr=this._opts.ssr;var o=[],a=this._bgVNode=function(t,e,n,i){var r;if(n&&"none"!==n)if(r=PI("rect","bg",{width:t,height:e,x:"0",y:"0"}),Gi(n))sT({fill:n},r.attrs,"fill",i);else if(zi(n))lT({style:{fill:n},dirty:St,getBoundingRect:function(){return{width:t,height:e}}},r.attrs,"fill",i);else{var o=ki(n),a=o.color,s=o.opacity;r.attrs.fill=a,s<1&&(r.attrs["fill-opacity"]=s)}return r}(n,i,this._backgroundColor,r);a&&o.push(a);var s=t.compress?null:this._mainVNode=PI("g","main",{},[]);this._paintList(e,r,s?s.children:o),s&&o.push(s);var l=V(W(r.defs),function(t){return r.defs[t]});if(l.length&&o.push(PI("defs","defs",{},l)),t.animation){var u=function(t,e,n){var i=(n=n||{}).newline?"\n":"",r=" {"+i,o=i+"}",a=V(W(t),function(e){return e+r+V(W(t[e]),function(n){return n+":"+t[e][n]+";"}).join(i)+o}).join(i),s=V(W(e),function(t){return"@keyframes "+t+r+V(W(e[t]),function(n){return n+r+V(W(e[t][n]),function(i){var r=e[t][n][i];return"d"===i&&(r='path("'+r+'")'),i+":"+r+";"}).join(i)+o}).join(i)+o}).join(i);return a||s?[""].join(i):""}(r.cssNodes,r.cssAnims,{newline:!0});if(u){var c=PI("style","stl",{},[],u);o.push(c)}}return NI(n,i,o,t.useViewBox)},t.prototype.renderToString=function(t){return t=t||{},OI(this.renderToVNode({animation:at(t.cssAnimation,!0),emphasis:at(t.cssEmphasis,!0),willUpdate:!1,compress:!0,useViewBox:at(t.useViewBox,!0)}),{newline:!0})},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t},t.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},t.prototype._paintList=function(t,e,n){for(var i,r,o=t.length,a=[],s=0,l=0,u=0;u=0&&(!h||!r||h[f]!==r[f]);f--);for(var g=p-1;g>f;g--)i=a[--s-1];for(var v=f+1;v=o)}}for(var u=LT(this),c=u.startIdx;c=0)&&(o=!0)}),o||r.__dirty){var a=n._opts.useDirtyRect&&!kT(r)?r.createRepaintRects(t,e,n._width,n._height):null,s=n._i.layerStack[0],l=!0;if(r.__dirty){l=!1,r.__dirty=!1;var u=r.zlevel===s.zl&&r.zlevel2===s.zl2?n._backgroundColor:null;r.clear(!1,u,a)}VT(r,function(e){var o=n._paintPerCursor(r,e,t,a,l);i=i&&o})}},YT),r.wxa&&FT(this._i,function(t){t&&t.ctx&&t.ctx.draw&&t.ctx.draw()}),i},t.prototype._paintPerCursor=function(t,e,n,i,r){var o=t.ctx;if(i)if(i.length)for(var a=this.dpr,s=0;s=e.endIdx},t.prototype._paintPerCursorInRect=function(t,e,n,i,r){for(var o={inHover:!1,allClipped:!1,prevEl:null,viewWidth:this._width,viewHeight:this._height,beforeBrushParam:{contentRetained:r}},a=t.ctx,s=kT(t),l=s&&c.getTime(),u=e.drawIdx,h=e.notClearIdx,d=h>=0?Math.min(h,u):u;d15){d++;break}}}Wx(a,o),e.drawIdx=Math.max(d,u)},t.prototype.getLayer=function(t,e){return this._ensureLayer(t,0,e)},t.prototype._ensureLayer=function(t,e,n){e=e||0;var i=this._singleCanvas;i&&!this._needsManuallyCompositing&&(t=RT,e=0);var r=GT(this._i,t)[e];return r||(r=ET("zr_"+t+"."+e,this,t,e),this._layerConfig[t]&&D(r,this._layerConfig[t],!0),(n||i&&t!==RT)&&(r.virtual=!0),this._insertLayer(r,t,e,!1),r.initContext()),r},t.prototype.insertLayer=function(t,e){this._insertLayer(e,t,0,!1)},t.prototype._insertLayer=function(t,e,n,i){var r=this._i,o=r.layers,a=r.layerStack,s=this._domRoot,l=null;if((!o[e]||!o[e][n])&&function(t){return!!t&&(!!t.__builtin__||"function"==typeof t.resize&&"function"==typeof t.refresh)}(t)){for(var u=a.length,c=0;c0&&(l=GT(r,a[c-1].zl)[a[c-1].zl2]),a.splice(c,0,{zl:e,zl2:n}),GT(r,e)[n]=t,!i&&!t.virtual)if(l){var h=l.dom;h.nextSibling?s.insertBefore(t.dom,h.nextSibling):s.appendChild(t.dom)}else s.firstChild?s.insertBefore(t.dom,s.firstChild):s.appendChild(t.dom);t.painter||(t.painter=this)}},t.prototype.eachLayer=function(t,e){return FT(this._i,function(n,i){t.call(e,n,i)})},t.prototype.eachBuiltinLayer=function(t,e){return FT(this._i,function(n,i){t.call(e,n,i)},HT)},t.prototype.eachOtherLayer=function(t,e){return FT(this._i,function(n,i){t.call(e,n,i)},WT)},t.prototype.getLayers=function(){var t={};return FT(this._i,function(e,n,i){t[e.id]=e}),t},t.prototype._updateLayerStatus=function(t,e){var n,i=this;if(i._singleCanvas)for(var r=1;r=0;o--){var a=r.get(n[o]);if(a.used){var s=a.endIdxNew;(kT(e)?s=0;i--){var r=e[i];if(r.zl===t){var o=n[t][r.zl2];if(o.__builtin__)continue;if(e.splice(i,1),n[t][r.zl2]=void 0,!o.virtual){var a=o.dom.parentNode;a&&a.removeChild(o.dom)}}}},t.prototype.resize=function(t,e){if(this._domRoot.style){var n=this._domRoot;n.style.display="none";var i=this._opts,r=this.root;null!=t&&(i.width=t),null!=e&&(i.height=e),t=Tx(r,0,i),e=Tx(r,1,i),n.style.display="",this._width===t&&e===this._height||(n.style.width=t+"px",n.style.height=e+"px",FT(this._i,function(n){n.resize(t,e)}),this.refresh({paintAll:!0})),this._width=t,this._height=e}else{if(null==t||null==e)return;this._width=t,this._height=e,this._ensureLayer(RT).resize(t,e)}return this},t.prototype.clearLayer=function(t){B(this._i.layers[t],function(t){t&&!t.__builtin__&&t.clear()})},t.prototype.dispose=function(){this.root.innerHTML="",this.root=this.storage=this._domRoot=this._i=null},t.prototype.getRenderedCanvas=function(t){if(t=t||{},this._singleCanvas&&!this._compositeManually)return this._i.layers[314159][0].dom;var e=new PT("image",this,t.pixelRatio||this.dpr);e.initContext(),e.clear(!1,t.backgroundColor||this._backgroundColor);var n=e.ctx;if(t.pixelRatio<=this.dpr){this.refresh();var i=e.dom.width,r=e.dom.height;FT(this._i,function(t){t.__builtin__?n.drawImage(t.dom,0,0,i,r):t.renderToCanvas&&(n.save(),t.renderToCanvas(n),n.restore())})}else{for(var o={inHover:!1,viewWidth:this._width,viewHeight:this._height,beforeBrushParam:{}},a=this.storage.getDisplayList(!0),s=0,l=a.length;s-1&&(s.style.stroke=s.style.fill,s.style.fill=ug.color.neutral00,s.style.lineWidth=2),e},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:6,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1,triggerEvent:!1},e}(Hy);function jT(t,e){var n=t.mapDimensionsAll("defaultedLabel"),i=n.length;if(1===i){var r=zv(t,e,n[0]);return null!=r?r+"":null}if(i){for(var o=[],a=0;a=0&&i.push(e[o])}return i.join(" ")}var KT=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.updateData(e,n,i,r),o}return n(e,t),e.prototype._createSymbol=function(t,e,n,i,r,o){this.removeAll();var a=xx(t,-1,-1,2,2,null,o);a.attr({z2:at(r,100),culling:!0,scaleX:i[0]/2,scaleY:i[1]/2}),a.drift=$T,this._symbolType=t,this.add(a)},e.prototype.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(null,t)},e.prototype.getSymbolType=function(){return this._symbolType},e.prototype.getSymbolPath=function(){return this.childAt(0)},e.prototype.highlight=function(){vc(this.childAt(0))},e.prototype.downplay=function(){yc(this.childAt(0))},e.prototype.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},e.prototype.setDraggable=function(t,e){var n=this.childAt(0);n.draggable=t,n.cursor=!e&&t?"move":n.cursor},e.prototype.updateData=function(t,n,i,r){this.silent=!1;var o=t.getItemVisual(n,"symbol")||"circle",a=t.hostModel,s=e.getSymbolSize(t,n),l=e.getSymbolZ2(t,n),u=o!==this._symbolType,c=r&&r.disableAnimation;if(u){var h=t.getItemVisual(n,"symbolKeepAspect");this._createSymbol(o,t,n,s,l,h)}else{(p=this.childAt(0)).silent=!1;var d={scaleX:s[0]/2,scaleY:s[1]/2};c?p.attr(d):rd(p,d,a,n),cd(p)}if(this._updateCommon(t,n,s,i,r),u){var p=this.childAt(0);if(!c){d={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:p.style.opacity}};p.scaleX=p.scaleY=0,p.style.opacity=0,od(p,d,a,n)}}c&&this.childAt(0).stopAnimation("leave")},e.prototype._updateCommon=function(t,e,n,i,r){var o,a,s,l,u,c,h,d,p,f=this.childAt(0),g=t.hostModel;if(i&&(o=i.emphasisItemStyle,a=i.blurItemStyle,s=i.selectItemStyle,l=i.focus,u=i.blurScope,h=i.labelStatesModels,d=i.hoverScale,p=i.cursorStyle,c=i.emphasisDisabled),!i||t.hasItemOption){var v=i&&i.itemModel?i.itemModel:t.getItemModel(e),y=v.getModel("emphasis");o=y.getModel("itemStyle").getItemStyle(),s=v.getModel(["select","itemStyle"]).getItemStyle(),a=v.getModel(["blur","itemStyle"]).getItemStyle(),l=y.get("focus"),u=y.get("blurScope"),c=y.get("disabled"),h=ap(v),d=y.getShallow("scale"),p=v.getShallow("cursor")}var m=t.getItemVisual(e,"symbolRotate");f.attr("rotation",(m||0)*Math.PI/180||0);var x=bx(t.getItemVisual(e,"symbolOffset"),n);x&&(f.x=x[0],f.y=x[1]),p&&f.attr("cursor",p);var _=t.getItemVisual(e,"style"),b=_.fill;if(f instanceof eu){var w=f.style;f.useStyle(k({image:w.image,x:w.x,y:w.y,width:w.width,height:w.height},_))}else f.__isEmptyBrush?f.useStyle(k({},_)):f.useStyle(_),f.style.decal=null,f.setColor(b,r&&r.symbolInnerColor),f.style.strokeNoScale=!0;var S=t.getItemVisual(e,"liftZ"),M=this._z2;null!=S?null==M&&(this._z2=f.z2,f.z2+=S):null!=M&&(f.z2=M,this._z2=null);var I=r&&r.useNameLabel;op(f,h,{labelFetcher:g,labelDataIndex:e,defaultText:function(e){return I?t.getName(e):jT(t,e)},inheritColor:b,defaultOpacity:_.opacity}),this._sizeX=n[0]/2,this._sizeY=n[1]/2;var T=f.ensureState("emphasis");T.style=o,f.ensureState("select").style=s,f.ensureState("blur").style=a;var C=null==d||!0===d?Math.max(1.1,3/this._sizeY):isFinite(d)&&d>0?+d:1;T.scaleX=this._sizeX*C,T.scaleY=this._sizeY*C,this.setSymbolScale(1),kc(this,l,u,c)},e.prototype.setSymbolScale=function(t){this.scaleX=this.scaleY=t},e.prototype.fadeOut=function(t,e,n){var i=this.childAt(0),r=Iu(this).dataIndex,o=n&&n.animation;if(this.silent=i.silent=!0,n&&n.fadeLabel){var a=i.getTextContent();a&&sd(a,{style:{opacity:0}},e,{dataIndex:r,removeOpt:o,cb:function(){i.removeTextContent()}})}else i.removeTextContent();sd(i,{style:{opacity:0},scaleX:0,scaleY:0},e,{dataIndex:r,cb:t,removeOpt:o})},e.getSymbolSize=function(t,e){return _x(t.getItemVisual(e,"symbolSize"))},e.getSymbolZ2=function(t,e){return t.getItemVisual(e,"z2")},e}(vo);function $T(t,e){this.parent.drift(t,e)}function JT(t,e,n,i){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(i&&i.isIgnore&&i.isIgnore(n))&&!(i&&i.clipShape&&!i.clipShape.contain(e[0],e[1]))&&"none"!==t.getItemVisual(n,"symbol")}function QT(t){return null==t||$(t)||(t={isIgnore:t}),t||{}}function tC(t){var e=t.hostModel,n=e.getModel("emphasis");return{emphasisItemStyle:n.getModel("itemStyle").getItemStyle(),blurItemStyle:e.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:e.getModel(["select","itemStyle"]).getItemStyle(),focus:n.get("focus"),blurScope:n.get("blurScope"),emphasisDisabled:n.get("disabled"),hoverScale:n.get("scale"),labelStatesModels:ap(e),cursorStyle:e.get("cursor")}}function eC(t,e,n,i,r,o,a){var s=new t(e,n,i,r);return s.setPosition(o),e.setItemGraphicEl(n,s),a.add(s),s}var nC=function(){function t(t){this.group=new vo,this._SymbolCtor=t||KT}return t.prototype.updateData=function(t,e){this._progressiveEls=null,e=QT(e);var n=this.group,i=t.hostModel,r=this._data,o=this._SymbolCtor,a=e.disableAnimation,s=this._seriesScope=tC(t),l={disableAnimation:a},u=e.getSymbolPoint||function(e){return t.getItemLayout(e)};r||n.removeAll(),t.diff(r).add(function(i){var r=u(i);JT(t,r,i,e)&&eC(o,t,i,s,l,r,n)}).update(function(c,h){var d=r.getItemGraphicEl(h),p=u(c);if(JT(t,p,c,e)){var f=t.getItemVisual(c,"symbol")||"circle",g=d&&d.getSymbolType&&d.getSymbolType();if(!d||g&&g!==f)n.remove(d),(d=new o(t,c,s,l)).setPosition(p);else{d.updateData(t,c,s,l);var v={x:p[0],y:p[1]};a?d.attr(v):rd(d,v,i)}n.add(d),t.setItemGraphicEl(c,d)}else n.remove(d)}).remove(function(t){var e=r.getItemGraphicEl(t);e&&e.fadeOut(function(){n.remove(e)},i)}).execute(),this._getSymbolPoint=u,this._data=t},t.prototype.updateLayout=function(t){var e=this._data;if(e)for(var n=this,i=0,r=e.getStore().count();i0?n=i[0]:i[1]<0&&(n=i[1]);return n}(r,n),a=i.dim,s=r.dim,l=e.mapDimension(s),u=e.mapDimension(a),c="x"===s||"radius"===s?1:0,h=V(t.dimensions,function(t){return e.mapDimension(t)}),d=!1,p=e.getCalculationInfo("stackResultDimension");return qb(e,h[0])&&(d=!0,h[0]=p),qb(e,h[1])&&(d=!0,h[1]=p),{dataDimsForPoint:h,valueStart:o,valueAxisDim:s,baseAxisDim:a,stacked:!!d,valueDim:l,baseDim:u,baseDataOffset:c,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function rC(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,i),a[1-o]=r,e.dataToPoint(a)}function oC(t,e){return!isFinite(t)||!isFinite(e)}var aC=typeof Float32Array!==Cu?Float32Array:void 0,sC=typeof Float64Array!==Cu?Float64Array:void 0;function lC(t){return uC({ctor:aC},t).arr}function uC(t,e){var n=t.arr,i=t.ctor;if(e>qo&&(e=qo),!n||t.typed&&n.length=r||g<0)break;if(oC(y,m)){if(l){g+=o;continue}break}if(g===n)t[o>0?"moveTo":"lineTo"](y,m),h=y,d=m;else{var x=y-u,_=m-c;if(x*x+_*_<.5){g+=o;continue}if(a>0){for(var b=g+o,w=e[2*b],S=e[2*b+1];w===y&&S===m&&v=i||oC(w,S))p=y,f=m;else{T=w-u,C=S-c;var k=y-u,L=w-y,P=m-c,O=S-m,R=void 0,N=void 0;if("x"===s){var E=T>0?1:-1;p=y-E*(R=Math.abs(k))*a,f=m,D=y+E*(N=Math.abs(L))*a,A=m}else if("y"===s){var z=C>0?1:-1;p=y,f=m-z*(R=Math.abs(P))*a,D=y,A=m+z*(N=Math.abs(O))*a}else R=Math.sqrt(k*k+P*P),p=y-T*a*(1-(I=(N=Math.sqrt(L*L+O*O))/(N+R))),f=m-C*a*(1-I),A=m+C*a*I,D=cC(D=y+T*a*I,hC(w,y)),A=cC(A,hC(S,m)),D=hC(D,cC(w,y)),f=m-(C=(A=hC(A,cC(S,m)))-m)*R/N,p=cC(p=y-(T=D-y)*R/N,hC(u,y)),f=cC(f,hC(c,m)),D=y+(T=y-(p=hC(p,cC(u,y))))*N/R,A=m+(C=m-(f=hC(f,cC(c,m))))*N/R}t.bezierCurveTo(h,d,p,f,y,m),h=D,d=A}else t.lineTo(y,m)}u=y,c=m,g+=o}return v}var pC=function(){this.smooth=0,this.smoothConstraint=!0},fC=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:ug.color.neutral99,fill:null}},e.prototype.getDefaultShape=function(){return new pC},e.prototype.buildPath=function(t,e){var n=e.points,i=0,r=n.length/2;if(e.connectNulls){for(;r>0&&oC(n[2*r-2],n[2*r-1]);r--);for(;i=0){var v=a?(c-i)*g+i:(u-n)*g+n;return a?[t,v]:[v,t]}n=u,i=c;break;case o.C:u=r[l++],c=r[l++],h=r[l++],d=r[l++],p=r[l++],f=r[l++];var y=a?Gn(n,u,h,p,t,s):Gn(i,c,d,f,t,s);if(y>0)for(var m=0;m=0){v=a?Bn(i,c,d,f,x):Bn(n,u,h,p,x);return a?[t,v]:[v,t]}}n=p,i=f}}},e}(Kl),gC=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(pC),vC=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}return n(e,t),e.prototype.getDefaultShape=function(){return new gC},e.prototype.buildPath=function(t,e){var n=e.points,i=e.stackedOnPoints,r=0,o=n.length/2,a=e.smoothMonotone;if(e.connectNulls){for(;o>0&&oC(n[2*o-2],n[2*o-1]);o--);for(;r=0,o=t.fill||ug.color.neutral99;DC(i,e);var a=null==i.textFill;return r?a&&(i.textFill=n.insideFill||ug.color.neutral00,!i.textStroke&&n.insideStroke&&(i.textStroke=n.insideStroke),!i.textStroke&&(i.textStroke=o),null==i.textStrokeWidth&&(i.textStrokeWidth=2)):(a&&(i.textFill=t.fill||n.outsideFill||ug.color.neutral00),!i.textStroke&&n.outsideStroke&&(i.textStroke=n.outsideStroke)),i.text=e.text,i.rich=e.rich,B(e.rich,function(t){DC(t,t)}),i}function DC(t,e){e&&(wt(e,"fill")&&(t.textFill=e.fill),wt(e,"stroke")&&(t.textStroke=e.fill),wt(e,"lineWidth")&&(t.textStrokeWidth=e.lineWidth),wt(e,"font")&&(t.font=e.font),wt(e,"fontStyle")&&(t.fontStyle=e.fontStyle),wt(e,"fontWeight")&&(t.fontWeight=e.fontWeight),wt(e,"fontSize")&&(t.fontSize=e.fontSize),wt(e,"fontFamily")&&(t.fontFamily=e.fontFamily),wt(e,"align")&&(t.textAlign=e.align),wt(e,"verticalAlign")&&(t.textVerticalAlign=e.verticalAlign),wt(e,"lineHeight")&&(t.textLineHeight=e.lineHeight),wt(e,"width")&&(t.textWidth=e.width),wt(e,"height")&&(t.textHeight=e.height),wt(e,"backgroundColor")&&(t.textBackgroundColor=e.backgroundColor),wt(e,"padding")&&(t.textPadding=e.padding),wt(e,"borderColor")&&(t.textBorderColor=e.borderColor),wt(e,"borderWidth")&&(t.textBorderWidth=e.borderWidth),wt(e,"borderRadius")&&(t.textBorderRadius=e.borderRadius),wt(e,"shadowColor")&&(t.textBoxShadowColor=e.shadowColor),wt(e,"shadowBlur")&&(t.textBoxShadowBlur=e.shadowBlur),wt(e,"shadowOffsetX")&&(t.textBoxShadowOffsetX=e.shadowOffsetX),wt(e,"shadowOffsetY")&&(t.textBoxShadowOffsetY=e.shadowOffsetY),wt(e,"textShadowColor")&&(t.textShadowColor=e.textShadowColor),wt(e,"textShadowBlur")&&(t.textShadowBlur=e.textShadowBlur),wt(e,"textShadowOffsetX")&&(t.textShadowOffsetX=e.textShadowOffsetX),wt(e,"textShadowOffsetY")&&(t.textShadowOffsetY=e.textShadowOffsetY))}function AC(t,e){if(t.length===e.length){for(var n=0;n=0;a--){var s=t.getDimensionInfo(i[a].dimension);if("x"===(r=s&&s.coordDim)||"y"===r){o=i[a];break}}if(o){var l=e.getAxis(r),u=V(o.stops,function(t){return{coord:l.toGlobalCoord(l.dataToCoord(t.value)),color:t.color}}),c=u.length,h=o.outerColors.slice();c&&u[0].coord>u[c-1].coord&&(u.reverse(),h.reverse());var d=function(t,e){var n,i,r=[],o=t.length;function a(t,e,n){var i=t.coord;return{coord:n,color:_i((n-i)/(e.coord-i),[t.color,e.color])}}for(var s=0;se){i?r.push(a(i,l,e)):n&&r.push(a(n,l,0),a(n,l,e));break}n&&(r.push(a(n,l,0)),n=null),r.push(l),i=l}}return r}(u,"x"===r?n.getWidth():n.getHeight()),p=d.length;if(!p&&c)return u[0].coord<0?h[1]?h[1]:u[c-1].color:h[0]?h[0]:u[0].color;var f=d[0].coord-10,g=d[p-1].coord+10,v=g-f;if(v<.001)return"transparent";B(d,function(t){t.offset=(t.coord-f)/v}),d.push({offset:p?d[p-1].offset:.5,color:h[1]||"transparent"}),d.unshift({offset:p?d[0].offset:.5,color:h[0]||"transparent"});var y=new Hh(0,0,0,0,d,!0);return y[r]=f,y[r+"2"]=g,y}}}function NC(t,e,n){var i=t.get("showAllSymbol"),r="auto"===i;if(!i||r){var o=n.getAxesByScale("ordinal")[0];if(o&&(!r||!function(t,e){var n=t.getExtent(),i=Math.abs(n[1]-n[0])/t.scale.count();isNaN(i)&&(i=0);for(var r=e.count(),o=Math.max(1,Math.round(r/5)),a=0;ai)return!1;return!0}(o,e))){var a=e.mapDimension(o.dim),s={};return B(o.getViewLabels(),function(t){t.tick.offInterval||(s[tS(o.scale,t.tick)]=1)}),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function EC(t,e){return[t[2*e],t[2*e+1]]}function zC(t){if(t.get(["endLabel","show"]))return!0;for(var e=0;e0&&"bolder"===t.get(["emphasis","lineStyle","width"]))&&(d.getState("emphasis").style.lineWidth=+d.style.lineWidth+1);Iu(d).seriesIndex=t.seriesIndex,kc(d,A,k,L);var O=PC(t.get("smooth")),R=t.get("smoothMonotone");if(d.setShape({smooth:O,smoothMonotone:R,connectNulls:b}),p){var N=o.getCalculationInfo("stackedOnSeries"),E=0;p.useStyle(P(s.getAreaStyle(),{fill:T,opacity:.7,lineJoin:"bevel",decal:o.getVisual("style").decal})),N&&(E=PC(N.get("smooth"))),p.setShape({smooth:O,stackedOnSmooth:E,smoothMonotone:R,connectNulls:b}),Rc(p,t,"areaStyle"),Iu(p).seriesIndex=t.seriesIndex,kc(p,A,k,L)}var z=this._changePolyState;o.eachItemGraphicEl(function(t){t&&(t.onHoverStateChange=z)}),this._polyline.onHoverStateChange=z,this._data=o,this._coordSys=i,this._stackedOnPoints=x,this._points=l,this._step=I,this._valueOrigin=y;var B=t.get("triggerEvent"),V=t.get("triggerLineEvent");var G=!0===V||!0===B||"line"===B,F=!0===V||!0===B||"area"===B;this.packEventData(t,d,G),p&&this.packEventData(t,p,F)},e.prototype.packEventData=function(t,e,n){Iu(e).eventData=n?{componentType:"series",componentSubType:"line",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"line",selfType:e===this._polygon?"area":"line"}:null},e.prototype.highlight=function(t,e,n,i){var r=t.getData(),o=La(r,i);if(this._changePolyState("emphasis"),!(o instanceof Array)&&null!=o&&o>=0){var a=r.getLayout("points"),s=r.getItemGraphicEl(o);if(!s){var l=a[2*o],u=a[2*o+1];if(oC(l,u))return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(l,u))return;var c=t.get("zlevel")||0,h=t.get("z")||0;(s=new KT(r,o)).x=l,s.y=u,s.setZ(c,h);var d=s.getSymbolPath().getTextContent();d&&(d.zlevel=c,d.z=h,d.z2=this._polyline.z2+1),s.__temp=!0,r.setItemGraphicEl(o,s),s.stopSymbolAnimation(!0),this.group.add(s)}s.highlight()}else tm.prototype.highlight.call(this,t,e,n,i)},e.prototype.downplay=function(t,e,n,i){var r=t.getData(),o=La(r,i);if(this._changePolyState("normal"),null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else tm.prototype.downplay.call(this,t,e,n,i)},e.prototype._changePolyState=function(t){var e=this._polygon;hc(this._polyline,t),e&&hc(e,t)},e.prototype._newPolyline=function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new fC({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(e),this._polyline=e,e},e.prototype._newPolygon=function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new vC({shape:{points:t,stackedOnPoints:e},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,e,n){var i,r,o=e.getBaseAxis(),a=o.inverse;"cartesian2d"===e.type?(i=o.isHorizontal(),r=!1):"polar"===e.type&&(i="angle"===o.dim,r=!0);var s=t.hostModel,l=s.get("animationDuration");Z(l)&&(l=l(null));var u=s.get("animationDelay")||0,c=Z(u)?u(null):u;t.eachItemGraphicEl(function(t,o){var s=t;if(s){var h=[t.x,t.y],d=void 0,p=void 0,f=void 0;if(n)if(r){var g=n,v=e.pointToCoord(h);i?(d=g.startAngle,p=g.endAngle,f=-v[1]/180*Math.PI):(d=g.r0,p=g.r,f=v[0])}else{var y=n;i?(d=y.x,p=y.x+y.width,f=t.x):(d=y.y+y.height,p=y.y,f=t.y)}var m=p===d?0:(f-d)/(p-d);a&&(m=1-m);var x=Z(u)?u(o):l*m+c,_=s.getSymbolPath(),b=_.getTextContent();s.attr({scaleX:0,scaleY:0}),s.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:x}),b&&b.animateFrom({style:{opacity:0}},{duration:300,delay:x}),_.disableLabelAnimation=!0}})},e.prototype._initOrUpdateEndLabel=function(t,e,n){var i=t.getModel("endLabel");if(zC(t)){var r=t.getData(),o=this._polyline,a=r.getLayout("points");if(!a)return o.removeTextContent(),void(this._endLabel=null);var s=this._endLabel;s||((s=this._endLabel=new du({z2:200})).ignoreClip=!0,o.setTextContent(this._endLabel),o.disableLabelAnimation=!0);var l=function(t){for(var e=t.length/2;e>0&&oC(t[2*e-2],t[2*e-1]);e--);return e-1}(a);l>=0&&(op(o,ap(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:l,defaultText:function(t,e,n){return null!=n?qT(r,n):jT(r,t)},enableTextSetter:!0},function(t,e){var n=e.getBaseAxis(),i=n.isHorizontal(),r=n.inverse,o=i?r?"right":"left":"center",a=i?"middle":r?"top":"bottom";return{normal:{align:t.get("align")||o,verticalAlign:t.get("verticalAlign")||a}}}(i,e)),o.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,e,n,i,r,o,a){var s=this._endLabel,l=this._polyline;if(s){t<1&&null==i.originalX&&(i.originalX=s.x,i.originalY=s.y);var u=n.getLayout("points"),c=n.hostModel,h=c.get("connectNulls"),d=o.get("precision"),p=o.get("distance")||0,f=a.getBaseAxis(),g=f.isHorizontal(),v=f.inverse,y=e.shape,m=v?g?y.x:y.y+y.height:g?y.x+y.width:y.y,x=(g?p:0)*(v?-1:1),_=(g?0:-p)*(v?-1:1),b=g?"x":"y",w=function(t,e,n){for(var i,r,o=t.length/2,a="x"===n?0:1,s=0,l=-1,u=0;u=e||i>=e&&r<=e){l=u;break}s=u,i=r}else i=r;return{range:[s,l],t:(e-i)/(r-i)}}(u,m,b),S=w.range,M=S[1]-S[0],I=void 0;if(M>=1){if(M>1&&!h){var T=EC(u,S[0]);s.attr({x:T[0]+x,y:T[1]+_}),r&&(I=c.getRawValue(S[0]))}else{(T=l.getPointOn(m,b))&&s.attr({x:T[0]+x,y:T[1]+_});var C=c.getRawValue(S[0]),D=c.getRawValue(S[1]);r&&(I=Ha(n,d,C,D,w.t))}i.lastFrameIndex=S[0]}else{var A=1===t||i.lastFrameIndex>0?S[0]:0;T=EC(u,A);r&&(I=c.getRawValue(A)),s.attr({x:T[0]+x,y:T[1]+_})}if(r){var k=fp(s);"function"==typeof k.setLabelText&&k.setLabelText(I)}}},e.prototype._doUpdateAnimation=function(t,e,n,i,r,o,a){var s=this._polyline,l=this._polygon,u=t.hostModel,c=function(t,e,n,i,r,o,a){for(var s=function(t,e){var n=[];return e.diff(t).add(function(t){n.push({cmd:"+",idx:t})}).update(function(t,e){n.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){n.push({cmd:"-",idx:t})}).execute(),n}(t,e),l=[],u=[],c=[],h=[],d=[],p=[],f=[],g=iC(r,e,a),v=t.getLayout("points")||[],y=e.getLayout("points")||[],m=0;m3e3||l&&LC(d,f)>3e3)return s.stopAnimation(),s.setShape({points:p}),void(l&&(l.stopAnimation(),l.setShape({points:p,stackedOnPoints:f})));s.shape.__points=c.current,s.shape.points=h;var g={shape:{points:p}};c.current!==h&&(g.shape.__points=c.next),s.stopAnimation(),rd(s,g,u),l&&(l.setShape({points:h,stackedOnPoints:d}),l.stopAnimation(),rd(l,{shape:{stackedOnPoints:f}},u),s.shape.points!==l.shape.points&&(l.shape.points=s.shape.points));for(var v=[],y=c.status,m=0;me&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;n10&&"cartesian2d"===o.type&&r){var s=o.getBaseAxis(),l=o.getOtherAxis(s),u=s.getExtent(),c=n.getDevicePixelRatio(),h=Math.abs(u[1]-u[0])*(c||1),d=Math.round(a/h);if(isFinite(d)&&d>1){"lttb"===r?t.setData(i.lttbDownSample(i.mapDimension(l.dim),1/d)):"minmax"===r&&t.setData(i.minmaxDownSample(i.mapDimension(l.dim),1/d));var p=void 0;j(r)?p=FC[r]:Z(r)&&(p=r),p&&t.setData(i.downSample(i.mapDimension(l.dim),1/d,p,HC))}}}}}var UC=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.index=0,a.type=r||"value",a.position=o||"bottom",a}return n(e,t),e.prototype.isHorizontal=function(){var t=this.position;return"top"===t||"bottom"===t},e.prototype.getGlobalExtent=function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},e.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},e.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e}(SM),YC=null;function XC(){return YC}var ZC="expandAxisBreak",jC="collapseAxisBreak",qC="toggleAxisBreak",KC="axisbreakchanged",$C={type:ZC,event:KC,update:"update",refineEvent:tD},JC={type:jC,event:KC,update:"update",refineEvent:tD},QC={type:qC,event:KC,update:"update",refineEvent:tD};function tD(t,e,n,i){var r=[];return B(t,function(t){r=r.concat(t.eventBreaks)}),{eventContent:{breaks:r}}}var eD=Math.PI,nD=[[1,2,1,2],[5,3,5,3],[8,3,8,3]],iD=[[0,1,0,1],[0,3,0,3],[0,3,0,3]],rD=Pa(),oD=Pa(),aD=function(){function t(t){this.recordMap={},this.resolveAxisNameOverlap=t}return t.prototype.ensureRecord=function(t){var e=t.axis.dim,n=t.componentIndex,i=this.recordMap,r=i[e]||(i[e]=[]);return r[n]||(r[n]={ready:{}})},t}();var sD=[1,0,0,1,0,0],lD=new Xe(0,0,0,0),uD=function(t,e,n,i,r,o){if(Kw(t.nameLocation)){var a=o.stOccupiedRect;a&&cD(function(t,e,n){return t.transform=Xd(t.transform,n),t.localRect=Yd(t.localRect,e),t.rect=Yd(t.rect,e),n&&t.rect.applyTransform(n),t.axisAligned=Wd(n),t.obb=void 0,(t.label=t.label||{}).ignore=!1,t}({},a,o.transGroup.transform),i,r)}else hD(o.labelInfoList,o.dirVec,i,r)};function cD(t,e,n){var i=new Pe;aI(t,e,i,{direction:Math.atan2(n.y,n.x),bidirectional:!1,touchThreshold:.05})&&eI(e,i)}function hD(t,e,n,i){for(var r=Pe.dot(i,e)>=0,o=0,a=t.length;o0?"top":"bottom",i="center"):$o(o-eD)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}},t.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},t.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},t}(),pD=["axisLine","axisTickLabelEstimate","axisTickLabelDetermine","axisName"],fD={axisLine:function(t,e,n,i,r,o,a){var s=i.get(["axisLine","show"]);if("auto"===s&&(s=!0,null!=t.raw.axisLineAutoShow&&(s=!!t.raw.axisLineAutoShow)),s){var l=i.axis.getExtent(),u=o.transform,c=[l[0],0],h=[l[1],0],d=c[0]>h[0];u&&(Yt(c,c,u),Yt(h,h,u));var p=k({lineCap:"round"},i.getModel(["axisLine","lineStyle"]).getLineStyle()),f={strokeContainThreshold:t.raw.strokeContainThreshold||5,silent:!0,z2:1,style:p};if(i.get(["axisLine","breakLine"])&&Xp(i.axis.scale))XC().buildAxisBreakLine(i,r,o,f);else{var g=new Oh(k({shape:{x1:c[0],y1:c[1],x2:h[0],y2:h[1]}},f));Md(g.shape,g.style.lineWidth),g.anid="line",r.add(g)}var v=i.get(["axisLine","symbol"]);if(null!=v){var y=i.get(["axisLine","symbolSize"]);j(v)&&(v=[v,v]),(j(y)||K(y))&&(y=[y,y]);var m=bx(i.get(["axisLine","symbolOffset"])||0,y),x=y[0],_=y[1];B([{rotate:t.rotation+Math.PI/2,offset:m[0],r:0},{rotate:t.rotation-Math.PI/2,offset:m[1],r:Math.sqrt((c[0]-h[0])*(c[0]-h[0])+(c[1]-h[1])*(c[1]-h[1]))}],function(e,n){if("none"!==v[n]&&null!=v[n]){var i=xx(v[n],-x/2,-_/2,x,_,p.stroke,!0),o=e.r+e.offset,a=d?h:c;i.attr({rotation:e.rotate,x:a[0]+o*Math.cos(t.rotation),y:a[1]-o*Math.sin(t.rotation),silent:!0,z2:11}),r.add(i)}})}}},axisTickLabelEstimate:function(t,e,n,i,r,o,a,s){mD(e,r,s)&&gD(t,e,n,i,r,o,a,aM)},axisTickLabelDetermine:function(t,e,n,i,r,o,a,s){mD(e,r,s)&&gD(t,e,n,i,r,o,a,sM);var l=function(t,e,n,i){var r=i.axis,o=i.getModel("axisTick"),a=o.get("show");"auto"===a&&(a=!0,null!=t.raw.axisTickAutoShow&&(a=!!t.raw.axisTickAutoShow));if(!a||r.scale.isBlank())return[];for(var s=o.getModel("lineStyle"),l=t.tickDirection*o.get("length"),u=yD(r.getTicksCoords(),n.transform,l,P(s.getLineStyle(),{stroke:i.get(["axisLine","lineStyle","color"])}),"ticks"),c=0;ci[1],l="start"===e&&!s||"start"!==e&&s;$o(a-eD/2)?(o=l?"bottom":"top",r="center"):$o(a-1.5*eD)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*eD&&a>eD/2?l?"left":"right":l?"right":"left");return{rotation:a,textAlign:r,textVerticalAlign:o}}(t.rotation,c,b||0,f),null!=(_=t.raw.axisNameAvailableWidth)&&(_=Math.abs(_/Math.sin(x.rotation)),!isFinite(_)&&(_=null)));var w=d.getFont(),S=i.get("nameTruncate",!0)||{},M=S.ellipsis,I=ot(t.raw.nameTruncateMaxWidth,S.maxWidth,_),T=s.nameMarginLevel||0,C=new du({x:v.x,y:v.y,rotation:x.rotation,silent:dD.isLabelSilent(i),style:sp(d,{text:u,font:w,overflow:"truncate",width:I,ellipsis:M,fill:d.getTextColor()||i.get(["axisLine","lineStyle","color"]),align:d.get("align")||x.textAlign,verticalAlign:d.get("verticalAlign")||x.textVerticalAlign}),z2:1});if(Gd({el:C,componentModel:i,itemName:u}),C.__fullText=u,C.anid="name",i.get("triggerEvent")){var D=dD.makeAxisEventDataBase(i);D.targetType="axisName",D.name=u,Iu(C).eventData=D}o.add(C),C.updateTransform(),e.nameEl=C;var A=l.nameLayout=JM({label:C,priority:C.z2,defaultAttr:{ignore:C.ignore},marginDefault:Kw(c)?nD[T]:iD[T]});if(l.nameLocation=c,r.add(C),C.decomposeTransform(),t.shouldNameMoveOverlap&&A){var k=n.ensureRecord(i);0,n.resolveAxisNameOverlap(t,n,i,A,y,k)}}}};function gD(t,e,n,i,r,o,a,s){xD(e)||function(t,e,n,i,r,o){var a=r.axis,s=ot(t.raw.axisLabelShow,r.get(["axisLabel","show"])),l=new vo;n.add(l);var u=lM(i);if(!s||a.scale.isBlank())return void _D(e,[],l,u);var c=r.getModel("axisLabel"),h=a.getViewLabels(u),d=(ot(t.raw.labelRotate,c.get("rotate"))||0)*eD/180,p=dD.innerTextLayout(t.rotation,d,t.labelDirection),f=r.getCategories&&r.getCategories(!0),g=[],v=r.get("triggerEvent"),y=1/0,m=-1/0;B(h,function(t,e){var n,i=t.tick,s=t.formattedLabel,u=t.rawLabel,d=c,x=tS(a.scale,i);if(f&&f[x]){var _=f[x];$(_)&&_.textStyle&&(d=new kp(_.textStyle,c,r.ecModel))}var b=d.getTextColor()||r.get(["axisLine","lineStyle","color"]),w=d.getShallow("align",!0)||p.textAlign,S=at(d.getShallow("alignMinLabel",!0),w),M=at(d.getShallow("alignMaxLabel",!0),w),I=d.getShallow("verticalAlign",!0)||d.getShallow("baseline",!0)||p.textVerticalAlign,T=at(d.getShallow("verticalAlignMinLabel",!0),I),C=at(d.getShallow("verticalAlignMaxLabel",!0),I),D=10+((null===(n=i.time)||void 0===n?void 0:n.level)||0);y=Math.min(y,D),m=Math.max(m,D);var A=new du({x:0,y:0,rotation:0,silent:dD.isLabelSilent(r),z2:D,style:sp(d,{text:s,align:0===e?S:e===h.length-1?M:w,verticalAlign:0===e?T:e===h.length-1?C:I,fill:Z(b)?b("category"===a.type?u:"value"===a.type?x+"":x,e):b})});A.anid="label_"+x;var k=rD(A);if(k.labelInfo=t,k.layoutRotation=p.rotation,Gd({el:A,componentModel:r,itemName:s,formatterParamsExtra:{isTruncated:function(){return A.isTruncated},value:u,tickIndex:e}}),v){var L=dD.makeAxisEventDataBase(r);L.targetType="axisLabel",L.value=u,L.tickIndex=e;var P=t.tick.break;if(P){var O=P.parsedBreak;L.break={start:O.vmin,end:O.vmax}}"category"===a.type&&(L.dataIndex=x),Iu(A).eventData=L,P&&function(t,e,n,i){n.on("click",function(n){var r={type:ZC,breaks:[{start:i.parsedBreak.breakOption.start,end:i.parsedBreak.breakOption.end}]};r[t.axis.dim+"AxisIndex"]=t.componentIndex,e.dispatchAction(r)})}(r,o,A,P)}g.push(A),l.add(A)});var x=V(g,function(t){return{label:t,priority:rD(t).labelInfo.tick.break?t.z2+(m-y+1):t.z2,defaultAttr:{ignore:t.ignore}}});_D(e,x,l,u)}(t,e,r,s,i,a);var l=e.labelLayoutList;!function(t,e,n,i){var r=e.get(["axisLabel","margin"]);B(n,function(n,o){var a=JM(n);if(a){var s=a.label,l=rD(s);a.suggestIgnore=s.ignore,s.ignore=!1,Hr(bD,wD);var u=e.axis;bD.x=u.dataToCoord(tS(u.scale,l.labelInfo.tick)),bD.y=t.labelOffset+t.labelDirection*r,bD.rotation=l.layoutRotation,i.add(bD),bD.updateTransform(),i.remove(bD),bD.decomposeTransform(),Hr(s,bD),s.markRedraw(),KM(a,!0),JM(a)}})}(t,i,l,o),function(t,e,n){var i=Wp();if(!i)return;var r=i.retrieveAxisBreakPairs(n,function(t){return t&&rD(t.label).labelInfo.tick.break},!0),o=t.get(["breakLabelLayout","moveOverlap"],!0);!0!==o&&"auto"!==o||B(r,function(i){XC().adjustBreakLabelPair(t.axis.inverse,e,[JM(n[i[0]]),JM(n[i[1]])])})}(i,t.rotation,l);var u=t.optionHideOverlap;!function(t,e,n){var i=t.axis,r=t.get(["axisLabel","customValues"]);if(function(t){return"category"===t.type&&0===qw(t.getLabelModel())}(i))return;function o(t,o,a){var s=JM(e[o]),l=JM(e[a]),u=i.scale;if(s&&l){if(null==t){if(!n&&r)return;var c=rD(s.label).labelInfo.tick;if(fw(u)&&c.notNice||vw(u)&&c.offInterval)return void vD(s.label)}if(!1===t||s.suggestIgnore)vD(s.label);else if(l.suggestIgnore)vD(l.label);else{var h=.1;if(!n){var d=[0,0,0,0];s=nI({marginForce:d},s),l=nI({marginForce:d},l)}aI(s,l,null,{touchThreshold:h})&&vD(t?l.label:s.label)}}}var a=t.get(["axisLabel","showMinLabel"]),s=t.get(["axisLabel","showMaxLabel"]),l=e.length;o(a,0,1),o(s,l-1,l-2)}(i,l,u),u&&oI(F(l,function(t){return t&&!t.label.ignore})),function(t,e,n,i){var r,o=n.axis,a=e.ensureRecord(n),s=[],l=SD(t.axisName)&&Kw(t.nameLocation);B(i,function(t){var e=JM(t);if(e&&!e.label.ignore){s.push(e);var n=a.transGroup;l&&(n.transform?Ae(sD,n.transform):Se(sD),e.transform&&Ie(sD,sD,e.transform),Xe.copy(lD,e.localRect),lD.applyTransform(sD),r?r.union(lD):Xe.copy(r=new Xe(0,0,0,0),lD))}});var u=Math.abs(a.dirVec.x)>.1?"x":"y",c=a.transGroup[u];if(s.sort(function(t,e){return Math.abs(t.label[u]-c)-Math.abs(e.label[u]-c)}),l&&r){var h=o.getExtent(),d=Math.min(h[0],h[1]),p=Math.max(h[0],h[1])-d;r.union(new Xe(d,0,p,1))}a.stOccupiedRect=r,a.labelInfoList=s}(t,n,i,l)}function vD(t){t&&(t.ignore=!0)}function yD(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;l=0&&n(i,t,e.getStore())})}var p=0;if(d(function(t,e,n){r.set(e.uid,1),o&&o.hasKey(e.uid)||(i=!0),p+=n.count()}),o&&o.keys().length===r.keys().length||(i=!0),i||null==a){uC(CD,p);var f=0;d(function(t,e,n){for(var i=0,r=n.count();i0&&m0?-2:-1,n.serUids=r}else e.liPosMinGap=a}var CD=uC({ctor:sC},50);function DD(t){return function(e,n){var i=bM(e,{fromStat:{key:t}});if(ca(i.w2))return[-i.w2/2,i.w2/2]}}function AD(t){return t+rS}function kD(t,e){return t+rS+e}function LD(t){return ID(),{liPosMinGap:!vw(t.scale)}}var PD="bar",OD="pictorialBar";function RD(t,e,n,i){xS(t,{key:e,seriesType:n,coordSysType:i,getMetrics:LD})}function ND(t){var e=t.scale.rawExtentInfo.makeRenderInfo().startValue;return e}var ED={left:0,right:0,top:0,bottom:0},zD=["25%","25%"],BD="cartesian2d",VD=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.mergeDefaultAndTheme=function(e,n){var i=og(e.outerBounds);t.prototype.mergeDefaultAndTheme.apply(this,arguments),i&&e.outerBounds&&rg(e.outerBounds,i)},e.prototype.mergeOption=function(e,n){t.prototype.mergeOption.apply(this,arguments),this.option.outerBounds&&e.outerBounds&&rg(this.option.outerBounds,e.outerBounds)},e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,z:0,left:"15%",top:65,right:"10%",bottom:80,containLabel:!1,outerBoundsMode:"auto",outerBounds:ED,outerBoundsContain:"all",outerBoundsClampWidth:zD[0],outerBoundsClampHeight:zD[1],backgroundColor:ug.color.transparent,borderWidth:1,borderColor:ug.color.neutral30},e}(lg),GD=Ja(),FD="__ec_stack_";function HD(t){return t.get("stack")||FD+t.seriesIndex}function WD(t,e){var n=function(t,e){var n=kD(e,BD),i=[],r=bM(t,{fromStat:{key:n},min:1});return hS(t,n,function(t){i.push({barWidth:Vo(t.get("barWidth"),r.w),barMaxWidth:Vo(t.get("barMaxWidth"),r.w),barMinWidth:Vo(t.get("barMinWidth")||(ZD(t)?.5:1),r.w),barGap:t.get("barGap"),barCategoryGap:t.get("barCategoryGap"),defaultBarGap:t.get("defaultBarGap"),stackId:HD(t)})}),{bandWidthResult:r,seriesInfo:i}}(t,e);return n.columnMap=UD(n),n}function UD(t){var e,n,i=t.bandWidthResult.w,r=i,o=0,a=[],s={};B(t.seriesInfo,function(t,i){i||(n=t.defaultBarGap||0);var l=t.stackId;wt(s,l)||o++;var u=s[l];u||(u=s[l]={width:0,maxWidth:0},a.push(l));var c=t.barWidth;c&&!u.width&&(u.width=c,c=Co(r,c),r-=c);var h=t.barMaxWidth;h&&(u.maxWidth=h);var d=t.barMinWidth;d&&(u.minWidth=d);var p=t.barGap;null!=p&&(n=p);var f=t.barCategoryGap;null!=f&&(e=f)}),null==e&&(e=Do(35-4*a.length,15)+"%");var l=Vo(e,i),u=Vo(n,1),c=(r-l)/(o+(o-1)*u);c=Do(c,0),B(a,function(t){var e=s[t],n=e.maxWidth,i=e.minWidth;if(e.width){a=e.width;n&&(a=Co(a,n)),i&&(a=Do(a,i)),e.width=a,r-=a+u*a,o--}else{var a=c;n&&na&&(a=i),a!==c&&(e.width=a,r-=a+u*a,o--)}}),c=Do(c=(r-l)/(o+(o-1)*u),0);var h,d=0;B(a,function(t){var e=s[t];e.width||(e.width=c),h=e,d+=e.width*(1+u)}),h&&(d-=h.width*u);var p={},f=-d/2;return B(a,function(t){var e=s[t];p[t]=p[t]||{bandWidth:i,offset:f,width:e.width},f+=e.width*(1+u)}),p}function YD(t){return{seriesType:t,overallReset:function(e){var n=kD(t,BD);pS(e,n,function(e){var i=WD(e,t);hS(e,n,function(t){var e=i.columnMap[HD(t)];t.getData().setLayout({bandWidth:e.bandWidth,offset:e.offset,size:e.width})})})}}}function XD(t){return{seriesType:t,plan:$y(),reset:function(t){if(function(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}(t)){var e=t.getData(),n=t.coordinateSystem,i=n.getBaseAxis(),r=n.getOtherAxis(i),o=e.getDimensionIndex(e.mapDimension(r.dim)),a=e.getDimensionIndex(e.mapDimension(i.dim)),s=t.get("showBackground",!0),l=e.mapDimension(r.dim),u=e.getCalculationInfo("stackResultDimension"),c=qb(e,l)&&!!e.getCalculationInfo("stackedOnSeries"),h=r.isHorizontal(),d=r.toGlobalCoord(r.dataToCoord(ND(r))),p=ZD(t),f=t.get("barMinHeight")||0,g=u&&e.getDimensionIndex(u),v=e.getLayout("size"),y=e.getLayout("offset");return{progress:function(t,e){for(var i,r=t.count,l=p&&lC(3*r),u=p&&s&&lC(3*r),m=p&&lC(r),x=n.master.getRect(),_=h?x.width:x.height,b=e.getStore(),w=0;null!=(i=t.next());){var S=b.get(c?g:o,i),M=b.get(a,i),I=d,T=void 0;c&&(T=+S-b.get(o,i));var C=void 0,D=void 0,A=void 0,k=void 0;if(h){var L=n.dataToPoint([S,M]);c&&(I=n.dataToPoint([T,M])[0]),C=I,D=L[1]+y,A=L[0]-I,k=v,Ao(A)s){c=(p+u)/2;break}1===d&&(h=f-i[0].tickValue)}null==c&&(u?u&&(c=i[i.length-1].coord):c=i[0].coord),o[n]=t.toGlobalCoord(c)}});else{var a=this.getData(),s=a.getLayout("offset"),l=a.getLayout("size"),u=i.getBaseAxis().isHorizontal()?0:1;o[u]+=s+l/2}return o}return[NaN,NaN]},e.prototype.__requireStartValue=function(t){return this.getBaseAxis()!==t},e.type="series.__base_bar__",e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",defaultBarGap:"10%"},e}(Hy);Hy.registerClass(qD);var KD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(){return $b(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return!!this.get("large")&&this.get("progressive")},e.prototype.__preparePipelineContext=function(t,e){var n=rs(this,t,e);return n.progressiveRender&&(n.large=!0),n},e.prototype.brushSelector=function(t,e,n){return n.rect(e.getItemLayout(t))},e.type="series."+PD,e.dependencies=["grid","polar"],e.defaultOption=Op(qD.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:ug.color.primary,borderWidth:2}},realtimeSort:!1}),e}(qD),$D=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0},JD=function(t){function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}return n(e,t),e.prototype.getDefaultShape=function(){return new $D},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-r),s=r+a,l=e.startAngle,u=e.endAngle,c=e.clockwise,h=2*Math.PI,d=c?u-lo)return!0;o=u}return!1},e.prototype._isOrderDifferentInView=function(t,e){for(var n=e.scale,i=n.getExtent(),r=Math.max(0,i[0]),o=Math.min(i[1],n.getOrdinalMeta().categories.length-1);r<=o;++r)if(t.ordinalNumbers[r]!==n.getRawOrdinalNumber(r))return!0},e.prototype._updateSortWithinSameData=function(t,e,n,i){if(this._isOrderChangedWithinSameData(t,e,n)){var r=this._dataSort(t,n,e);this._isOrderDifferentInView(r,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:r}))}},e.prototype._dispatchInitSort=function(t,e,n){var i=e.baseAxis,r=this._dataSort(t,i,function(n){return t.get(t.mapDimension(e.otherAxis.dim),n)});n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:r})},e.prototype.remove=function(t,e){this._clear(this._model),this._removeOnRenderedListener(e)},e.prototype.dispose=function(t,e){this._removeOnRenderedListener(e)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var e=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl(function(e){ud(e,t,Iu(e).dataIndex)})):e.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type=PD,e}(tm),oA={cartesian2d:function(t,e){var n=e.width<0?-1:1,i=e.height<0?-1:1;n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height);var r=t.x+t.width,o=t.y+t.height,a=nA(e.x,t.x),s=iA(e.x+e.width,r),l=nA(e.y,t.y),u=iA(e.y+e.height,o),c=sr?s:a,e.y=h&&l>o?u:l,e.width=c?0:s-a,e.height=h?0:u-l,n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height),c||h},polar:function(t,e){var n=e.r0<=e.r?1:-1;if(n<0){var i=e.r;e.r=e.r0,e.r0=i}var r=iA(e.r,t.r),o=nA(e.r0,t.r0);e.r=r,e.r0=o;var a=r-o<0;if(n<0){i=e.r;e.r=e.r0,e.r0=i}return a}},aA={cartesian2d:function(t,e,n,i,r,o,a,s,l){var u=new lu({shape:k({},i),z2:1});(u.__dataIndex=n,u.name="item",o)&&(u.shape[r?"height":"width"]=0);return u},polar:function(t,e,n,i,r,o,a,s,l){var u=!r&&l?JD:Sh,c=new u({shape:i,z2:1});c.name="item";var h,d,p=pA(r);if(c.calculateTextPosition=(h=p,d=({isRoundCap:u===JD}||{}).isRoundCap,function(t,e,n){var i=e.position;if(!i||i instanceof Array)return to(t,e,n);var r=h(i),o=null!=e.distance?e.distance:5,a=this.shape,s=a.cx,l=a.cy,u=a.r,c=a.r0,p=(u+c)/2,f=a.startAngle,g=a.endAngle,v=(f+g)/2,y=d?Math.abs(u-c)/2:0,m=Math.cos,x=Math.sin,_=s+u*m(f),b=l+u*x(f),w="left",S="top";switch(r){case"startArc":_=s+(c-o)*m(v),b=l+(c-o)*x(v),w="center",S="top";break;case"insideStartArc":_=s+(c+o)*m(v),b=l+(c+o)*x(v),w="center",S="bottom";break;case"startAngle":_=s+p*m(f)+QD(f,o+y,!1),b=l+p*x(f)+tA(f,o+y,!1),w="right",S="middle";break;case"insideStartAngle":_=s+p*m(f)+QD(f,-o+y,!1),b=l+p*x(f)+tA(f,-o+y,!1),w="left",S="middle";break;case"middle":_=s+p*m(v),b=l+p*x(v),w="center",S="middle";break;case"endArc":_=s+(u+o)*m(v),b=l+(u+o)*x(v),w="center",S="bottom";break;case"insideEndArc":_=s+(u-o)*m(v),b=l+(u-o)*x(v),w="center",S="top";break;case"endAngle":_=s+p*m(g)+QD(g,o+y,!0),b=l+p*x(g)+tA(g,o+y,!0),w="left",S="middle";break;case"insideEndAngle":_=s+p*m(g)+QD(g,-o+y,!0),b=l+p*x(g)+tA(g,-o+y,!0),w="right",S="middle";break;default:return to(t,e,n)}return(t=t||{}).x=_,t.y=b,t.align=w,t.verticalAlign=S,t}),o){var f=r?"r":"endAngle",g={};c.shape[f]=r?i.r0:i.startAngle,g[f]=i[f],(s?rd:od)(c,{shape:g},o)}return c}};function sA(t,e,n,i,r,o,a,s){var l,u;o?(u={x:i.x,width:i.width},l={y:i.y,height:i.height}):(u={y:i.y,height:i.height},l={x:i.x,width:i.width}),s||(a?rd:od)(n,{shape:l},e,r,null),(a?rd:od)(n,{shape:u},e?t.baseAxis.model:null,r)}function lA(t,e){for(var n=0;n0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(t,e,n){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle,clockwise:i.clockwise}}};function pA(t){return function(t){var e=t?"Arc":"Angle";return function(t){switch(t){case"start":case"insideStart":case"end":case"insideEnd":return t+e;default:return t}}}(t)}function fA(t,e,n,i,r,o,a,s){var l=e.getItemVisual(n,"style");if(s){if(!o.get("roundCap")){var u=t.shape;k(u,eA(i.getModel("itemStyle"),u,!0)),t.setShape(u)}}else{var c=i.get(["itemStyle","borderRadius"])||0;t.setShape("r",c)}t.useStyle(l);var h=i.getShallow("cursor");h&&t.attr("cursor",h);var d=s?a?r.r>=r.r0?"endArc":"startArc":r.endAngle>=r.startAngle?"endAngle":"startAngle":a?function(t,e){if(0===t.height){return e.getOtherAxis(e.getBaseAxis()).inverse?"bottom":"top"}return t.height>0?"bottom":"top"}(r,o.coordinateSystem):function(t,e){if(0===t.width){return e.getOtherAxis(e.getBaseAxis()).inverse?"left":"right"}return t.width>=0?"right":"left"}(r,o.coordinateSystem),p=ap(i);op(t,p,{labelFetcher:o,labelDataIndex:n,defaultText:jT(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:d});var f=t.getTextContent();if(s&&f){var g=i.get(["label","position"]);t.textConfig.inside="middle"===g||null,function(t,e,n,i){if(K(i))t.setTextConfig({rotation:i});else if(X(e))t.setTextConfig({rotation:0});else{var r,o=t.shape,a=o.clockwise?o.startAngle:o.endAngle,s=o.clockwise?o.endAngle:o.startAngle,l=(a+s)/2,u=n(e);switch(u){case"startArc":case"insideStartArc":case"middle":case"insideEndArc":case"endArc":r=l;break;case"startAngle":case"insideStartAngle":r=a;break;case"endAngle":case"insideEndAngle":r=s;break;default:return void t.setTextConfig({rotation:0})}var c=1.5*Math.PI-r;"middle"===u&&c>Math.PI/2&&c<1.5*Math.PI&&(c-=Math.PI),t.setTextConfig({rotation:c})}}(t,"outside"===g?d:g,pA(a),i.get(["label","rotate"]))}gp(f,p,o.getRawValue(n),function(t){return qT(e,t)});var v=i.getModel(["emphasis"]);kc(t,v.get("focus"),v.get("blurScope"),v.get("disabled")),Rc(t,i),function(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}(r)&&(t.style.fill="none",t.style.stroke="none",B(t.states,function(t){t.style&&(t.style.fill=t.style.stroke="none")}))}var gA=function(){},vA=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}return n(e,t),e.prototype.getDefaultShape=function(){return new gA},e.prototype.buildPath=function(t,e){for(var n=e.points,i=this.baseDimIdx,r=1-this.baseDimIdx,o=[],a=[],s=this.barWidth,l=0;l=s[0]&&e<=s[0]+l[0]&&n>=s[1]&&n<=s[1]+l[1])return a[c]}return-1}(this,t.offsetX,t.offsetY);Iu(this).dataIndex=e>=0?e:null},30,!1);function xA(t,e,n){if(wC(n,"cartesian2d")){var i=e,r=n.getArea();return{x:t?i.x:r.x,y:t?r.y:i.y,width:t?i.width:r.width,height:t?r.height:i.height}}var o=e;return{cx:(r=n.getArea()).cx,cy:r.cy,r0:t?r.r0:o.r0,r:t?r.r:o.r,startAngle:t?o.startAngle:0,endAngle:t?o.endAngle:2*Math.PI}}function _A(t){return{seriesType:t,reset:function(t,e){var n=e.findComponents({mainType:"legend"});if(n&&n.length){var i=t.getData();i.filterSelf(function(t){for(var e=i.getName(t),r=0;r=0},t.prototype.indexOfName=function(t){return this._getDataWithEncodedVisual().indexOfName(t)},t.prototype.getItemVisual=function(t,e){return this._getDataWithEncodedVisual().getItemVisual(t,e)},t}(),MA="pie",IA=Pa(),TA=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new SA(U(this.getData,this),U(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.mergeOption=function(){t.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return bA(this,{coordDimensions:["value"],encodeDefaulter:Y(Sg,this)})},e.prototype.getDataParams=function(e){var n=this.getData(),i=IA(n),r=i.seats;if(!r){var o=[];n.each(n.mapDimension("value"),function(t){o.push(t)}),r=i.seats=Zo(o,n.hostModel.get("percentPrecision"))}var a=t.prototype.getDataParams.call(this,e);return a.percent=r[e]||0,a.$vars.push("percent"),a},e.prototype._defaultLabelLine=function(t){ba(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series."+MA,e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"50%"],clockwise:!0,startAngle:90,endAngle:"auto",padAngle:0,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,coordinateSystemUsage:"box",left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:30,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e}(Hy);wA={fullType:TA.type,getCoord2:function(t){return t.getShallow("center")}},Gf.set(wA.fullType,{getCoord2:void 0}).getCoord2=wA.getCoord2;var CA=Math.PI/180;function DA(t,e,n,i,r,o,a,s,l,u){if(!(t.length<2)){for(var c=t.length,h=0;hn?a:o,c=Math.abs(l.label.y-n);if(c>=u.maxY){var h=l.label.x-e-l.len2*r,d=i+l.len,f=Math.abs(h)t.unconstrainedWidth?null:d:null;i.setStyle("width",p)}kA(o,i)}}}function kA(t,e){PA.rect=t,QM(PA,e,LA)}var LA={minMarginForce:[null,0,null,0],marginDefault:[1,0,1,0]},PA={};function OA(t){return"center"===t.position}function RA(t){var e,n,i=t.getData(),r=[],o=!1,a=(t.get("minShowLabelAngle")||0)*CA,s=i.getLayout("viewRect"),l=i.getLayout("r"),u=s.width,c=s.x,h=s.y,d=s.height;function p(t){t.ignore=!0}i.each(function(t){var s=i.getItemGraphicEl(t),h=s.shape,f=s.getTextContent(),g=s.getTextGuideLine(),v=i.getItemModel(t),y=v.getModel("label"),m=y.get("position")||v.get(["emphasis","label","position"]),x=y.get("distanceToLabelLine"),_=y.get("alignTo"),b=Vo(y.get("edgeDistance"),u),w=y.get("bleedMargin");null==w&&(w=Math.min(u,d)>200?10:2);var S=v.getModel("labelLine"),M=S.get("length");M=Vo(M,u);var I=S.get("length2");if(I=Vo(I,u),Math.abs(h.endAngle-h.startAngle)0?"right":"left":L>0?"left":"right"}var G=Math.PI,F=0,H=y.get("rotate");if(K(H))F=H*(G/180);else if("center"===m)F=0;else if("radial"===H||!0===H){F=L<0?-k+G:-k}else if("tangential"===H||"tangential-noflip"===H&&"outside"!==m&&"outer"!==m){var W=Math.atan2(L,P);W<0&&(W=2*G+W),P>0&&"tangential-noflip"!==H&&(W=G+W),F=W-G}if(o=!!F,f.x=T,f.y=C,f.rotation=F,f.setStyle({verticalAlign:"middle"}),O){f.setStyle({align:A});var U=f.states.select;U&&(U.x+=f.x,U.y+=f.y)}else{var Y=new Xe(0,0,0,0);kA(Y,f),r.push({label:f,labelLine:g,position:m,len:M,len2:I,minTurnAngle:S.get("minTurnAngle"),maxSurfaceAngle:S.get("maxSurfaceAngle"),surfaceNormal:new Pe(L,P),linePoints:D,textAlign:A,labelDistance:x,labelAlignTo:_,edgeDistance:b,bleedMargin:w,rect:Y,unconstrainedWidth:Y.width,labelStyleWidth:f.style.width})}s.setTextConfig({inside:O})}}),!o&&t.get("avoidLabelOverlap")&&function(t,e,n,i,r,o,a,s){for(var l=[],u=[],c=Number.MAX_VALUE,h=-Number.MAX_VALUE,d=0;di?c=u=D+b*i/2:(u=D+S,c=r-S),n.setItemLayout(e,{angle:i,startAngle:u,endAngle:c,clockwise:y,cx:o,cy:a,r0:l,r:m?Bo(t,_,[l,s]):s}),D=r}}),T0){for(var l=o.getItemLayout(0),u=1;isNaN(l&&l.startAngle)&&u=n.r0}},e.type=MA,e}(tm);var FA=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){return $b(null,this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},e.prototype.brushSelector=function(t,e,n){return n.point(e.getItemLayout(t))},e.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar","matrix"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:ug.color.primary}},universalTransition:{divideShape:"clone"}},e}(Hy),HA=function(){},WA=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return n(e,t),e.prototype.getDefaultShape=function(){return new HA},e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.beforeBrush=function(t){t&&!t.contentRetained&&this.reset()},e.prototype.buildPath=function(t,e){var n,i=e.points,r=e.size,o=this.symbolProxy,a=o.shape,s=t.getContext?t.getContext():t,l=s&&r[0]<4,u=this.softClipShape;if(l)this._ctx=s;else{for(this._ctx=null,n=this._off;n=0;s--){var l=2*s,u=i[l]-o/2,c=i[l+1]-a/2;if(t>=u&&e>=c&&t<=u+o&&e<=c+a)return s}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return t=n[0],e=n[1],i.contain(t,e)?(this.hoverDataIdx=this.findDataIndex(t,e))>=0:(this.hoverDataIdx=-1,!1)},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape,n=e.points,i=e.size,r=i[0],o=i[1],a=1/0,s=1/0,l=-1/0,u=-1/0,c=0;c=0&&(l.dataIndex=n+(t.startIndex||0))})},t.prototype.remove=function(){this._clear()},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),YA=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).updateData(i,XA(t)),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).incrementalPrepareUpdate(i),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._symbolDraw.incrementalUpdate(t,e.getData(),is(e),XA(e)),this._finished=t.end===e.getData().count()},e.prototype.updateTransform=function(t,e,n){var i=t.getData();if(this.group.dirty(),!this._finished)return{update:!0};var r=GC("").reset(t,e,n);r.progress&&r.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(XA(t))},e.prototype.eachRendered=function(t){this._symbolDraw&&this._symbolDraw.eachRendered(t)},e.prototype._updateSymbolDraw=function(t,e){var n=this._symbolDraw,i=e.pipelineContext.large;return n&&i===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=i?new UA:new nC,this._isLargeDraw=i,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e}(tm);function XA(t){return{clipShape:bC(t)}}var ZA=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Ea).models[0]},e.type="cartesian2dAxis",e}(lg);E(ZA,nS);var jA={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:"auto",onZeroAxisIndex:null,lineStyle:{color:ug.color.axisLine,width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15],breakLine:!0},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12,color:ug.color.axisLabel,textMargin:[0,3]},splitLine:{show:!0,showMinLine:!0,showMaxLine:!0,lineStyle:{color:ug.color.axisSplitLine,width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:[ug.color.backgroundTint,ug.color.backgroundTransparent]}},breakArea:{show:!0,itemStyle:{color:ug.color.neutral00,borderColor:ug.color.border,borderWidth:1,borderType:[3,3],opacity:.6},zigzagAmplitude:4,zigzagMinSpan:4,zigzagMaxSpan:20,zigzagZ:100,expandOnClick:!0},breakLabelLayout:{moveOverlap:"auto"}},qA=D({boundaryGap:!0,deduplication:null,jitter:0,jitterOverlap:!0,jitterMargin:2,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto",show:"auto"},axisLabel:{interval:"auto"}},jA),KA=D({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:ug.color.axisMinorSplitLine,width:1}}},jA),$A={category:qA,value:KA,time:D({splitNumber:6,axisLabel:{rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},KA),log:P({logBase:10},KA)};function JA(t,e,i,r){B(Gw,function(o,a){var s=D(D({},$A[a],!0),r,!0),l=function(t){function i(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e+"Axis."+a,n}return n(i,t),i.prototype.mergeDefaultAndTheme=function(t,e){var n=ig(this),i=n?og(t):{};D(t,e.getTheme().get(a+"Axis")),D(t,this.getDefaultOption()),t.type=QA(t),n&&rg(t,i,n)},i.prototype.optionUpdated=function(){"category"===this.option.type&&(this.__ordinalMeta=tw.createByAxisModel(this))},i.prototype.getCategories=function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},i.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},i.prototype.updateAxisBreaks=function(t){var e=XC();return e?e.updateModelAxisBreak(this,t):{breaks:[]}},i.type=e+"Axis."+a,i.defaultOption=s,i}(i);t.registerComponentModel(l)}),t.registerSubTypeDefaulter(e+"Axis",QA)}function QA(t){return t.type||(t.data?"category":"value")}var tk=function(){function t(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return t.prototype.getAxis=function(t){return this._axes[t]},t.prototype.getAxes=function(){return V(this._dimList,function(t){return this._axes[t]},this)},t.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),F(this.getAxes(),function(e){return e.scale.type===t})},t.prototype.addAxis=function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},t}(),ek=["x","y"];function nk(t){return("interval"===t.type||"time"===t.type)&&!Xp(t)}var ik=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=BD,e.dimensions=ek,e}return n(e,t),e.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var t=this.getAxis("x").scale,e=this.getAxis("y").scale;if(nk(t)&&nk(e)){var n=sw(t,null),i=sw(e,null),r=this.dataToPoint([n[0],i[0]]),o=this.dataToPoint([n[1],i[1]]),a=n[1]-n[0],s=i[1]-i[0];if(a&&s){var l=(o[0]-r[0])/a,u=(o[1]-r[1])/s,c=r[0]-n[0]*l,h=r[1]-i[0]*u,d=this._transform=[l,0,0,u,c,h];this._invTransform=Ae([],d)}}},e.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},e.prototype.containPoint=function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},e.prototype.containData=function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},e.prototype.containZone=function(t,e){var n=this.dataToPoint(t),i=this.dataToPoint(e),r=this.getArea(),o=new Xe(n[0],n[1],i[0]-n[0],i[1]-n[1]);return r.intersect(o)},e.prototype.dataToPoint=function(t,e,n){n=n||[];var i=t[0],r=t[1];if(this._transform&&null!=i&&isFinite(i)&&null!=r&&isFinite(r))return Yt(n,t,this._transform);var o=this.getAxis("x"),a=this.getAxis("y");return n[0]=o.toGlobalCoord(o.dataToCoord(i,e)),n[1]=a.toGlobalCoord(a.dataToCoord(r,e)),n},e.prototype.clampData=function(t,e){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),a=n.parse(t[0]),s=i.parse(t[1]);return(e=e||[])[0]=Math.min(Math.max(Math.min(r[0],r[1]),a),Math.max(r[0],r[1])),e[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),e},e.prototype.pointToData=function(t,e,n){if(n=n||[],this._invTransform)return Yt(n,t,this._invTransform);var i=this.getAxis("x"),r=this.getAxis("y");return n[0]=i.coordToData(i.toLocalCoord(t[0]),e),n[1]=r.coordToData(r.toLocalCoord(t[1]),e),n},e.prototype.getOtherAxis=function(t){return this.getAxis("x"===t.dim?"y":"x")},e.prototype.getArea=function(t){t=t||0;var e=this.getAxis("x").getGlobalExtent(),n=this.getAxis("y").getGlobalExtent(),i=Math.min(e[0],e[1])-t,r=Math.min(n[0],n[1])-t,o=Math.max(e[0],e[1])-i+t,a=Math.max(n[0],n[1])-r+t;return new Xe(i,r,o,a)},e}(tk);function rk(t,e){var n=t.scale,i=t.model;var r,o,a,s=LS(n,i,i.ecModel,t,null),l=gw(n),u=gw(e)?e.intervalStub:e,c=l?n.intervalStub:n,h=n.base,d=u.getTicks(),p=u.getTicks({expandToNicedExtent:!0}),f=d.length-1;if(1===f)r=o=0,a=1;else if(2===f){var g=Ao(d[0].value-d[1].value),v=Ao(d[1].value-d[2].value);r=o=0,g===v?a=2:(a=1,g=A[1])return!0})):T[1]?(x=A[1],k(function(){if(R(),S=Ho(w-_*a,b),L(),m<=A[0])return!0})):k(function(){S=Ho(Po(A[0]/_)*_,b),w=Ho(Lo(A[1]/_)*_,b);var t=ko((w-S)/_);if(t<=a){var e=a-t,n=void 0,i=s.incl0||l;if(i&&0===A[0])n=[0,e];else if(i&&0===A[1])n=[e,0];else{var r=Lo(e/2);n=e%2==0?[r,r]:m+x=A[1])return!0}})}Qw(n,T,D,[m,x],C,{interval:_,intervalCount:a,intervalPrecision:b,niceExtent:[S,w]})}var ok,ak=[[3,1],[0,2]],sk=function(){function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=ek,this._initCartesian(t,e,n),this.model=t}return t.prototype.getRect=function(){return this._rect},t.prototype.update=function(t,e){var n=this._axesMap;function i(t){for(var e=W(t),n=[],i=e.length-1;i>=0;i--){var r=t[+e[i]];r.__alignTo?n.push(r):RS(r)}B(n,function(t){var e,n;e=t,n=t.__alignTo,Xp(e.scale)||Xp(n.scale)||n.scale.getTicks().length<2?RS(t):rk(t,t.__alignTo.scale)})}B(this._axesList,function(t){CS(t,1);var e=t.scale;vw(e)&&e.setSortInfo(t.model.get("categorySortInfo"))}),i(n.x),i(n.y);var r={};B(n.x,function(t){lk(n,"y",t,r)}),B(n.y,function(t){lk(n,"x",t,r)}),this.resize(this.model,e)},t.prototype.resize=function(t,e,n){var i=eg(t,e),r=this._rect=Jf(t.getBoxLayoutParams(),i.refContainer),o=this._axesMap,a=this._coordsList,s=t.get("containLabel");if(hk(o,r),!n){var l=function(t,e,n,i,r){var o=new aD(gk);return B(n,function(n){return B(n,function(n){if($w(n.model)){var a=!i;n.axisBuilder=function(t,e,n,i,r,o){for(var a=MD(t,n),s=!1,l=!1,u=0;ue?Uw:Xw:Xw}(e.scale,0,!1),i=e&&"category"!==e.type&&"time"!==e.type&&n!==Xw;return i&&"auto"===t&&function(t){return Fw(t).noOnMyZero}(e)&&(i=!1),i}function ck(t){for(var e,n=W(t),i=[],r=n.length-1;r>=0;r--){var o=t[+n[r]];dw(o.scale)&&null==Jw(o.model,o.type,!0)&&(o.model.get("alignTicks")&&null==o.model.get("interval")?i.push(o):e=o)}e||(e=i.pop()),e&&B(i,function(t){t.__alignTo=e})}function hk(t,e){B(t.x,function(t){return dk(t,e.x,e.width)}),B(t.y,function(t){return dk(t,e.y,e.height)})}function dk(t,e,n){var i=[0,n],r=t.inverse?1:0;t.setExtent(i[r],i[1-r]),function(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}(t,e)}function pk(t,e,n,i,r,o,a){fk(i,r,aM,e,!1,a);var s=[0,0,0,0];u(0),u(1),c(i,0,NaN),c(i,1,NaN);var l=null==H(s,function(t){return t>0});return zd(i,s,!0,!0,n),hk(r,i),l;function u(t){B(r[dd[t]],function(e){if($w(e.model)){var n=o.ensureRecord(e.model),i=n.labelInfoList;if(i)for(var r=0;r0&&!rt(e)&&e>1e-4&&(t/=e),t}}function fk(t,e,n,i,r,o){var a=n===sM;B(e,function(e){return B(e,function(e){$w(e.model)&&(!function(t,e,n){var i=MD(e,n);t.updateCfg(i)}(e.axisBuilder,t,e.model),e.axisBuilder.build(a?{axisTickLabelDetermine:!0}:{axisTickLabelEstimate:!0},{noPxChange:r}))})});var s={x:0,y:0};function l(e){s[dd[1-e]]=t[pd[e]]<=.5*o.refContainer[pd[e]]?0:1-e==1?2:1}l(0),l(1),B(e,function(t,e){return B(t,function(t){$w(t.model)&&(("all"===i||a)&&t.axisBuilder.build({axisName:!0},{nameMarginLevel:s[e]}),a&&t.axisBuilder.build({axisLine:!0}))})})}var gk=function(t,e,n,i,r,o){var a="x"===n.axis.dim?"y":"x";uD(t,0,0,i,r,o),Kw(t.nameLocation)||B(e.recordMap[a],function(t){t&&t.labelInfoList&&t.dirVec&&hD(t.labelInfoList,t.dirVec,i,r)})};function vk(t,e){var n={axesInfo:{},seriesInvolved:!1,coordSysAxesInfo:{},coordSysMap:{}};return function(t,e,n){var i=e.getComponent("tooltip"),r=e.getComponent("axisPointer"),o=r.get("link",!0)||[],a=[];B(n.getCoordinateSystems(),function(n){if(n.axisPointerEnabled){var s=_k(n.model),l=t.coordSysAxesInfo[s]={};t.coordSysMap[s]=n;var u=n.model.getModel("tooltip",i);if(B(n.getAxes(),Y(p,!1,null)),n.getTooltipAxes&&i&&u.get("show")){var c="axis"===u.get("trigger"),h="cross"===u.get(["axisPointer","type"]),d=n.getTooltipAxes(u.get(["axisPointer","axis"]));(c||h)&&B(d.baseAxes,Y(p,!h||"cross",c)),h&&B(d.otherAxes,Y(p,"cross",!1))}}function p(i,s,c){var h=c.model.getModel("axisPointer",r),d=h.get("show");if(d&&("auto"!==d||i||xk(h))){null==s&&(s=h.get("triggerTooltip")),h=i?function(t,e,n,i,r,o){var a=e.getModel("axisPointer"),s={};B(["type","snap","lineStyle","shadowStyle","label","animation","animationDurationUpdate","animationEasingUpdate","z"],function(t){s[t]=C(a.get(t))}),s.snap="category"!==t.type&&!!o,"cross"===a.get("type")&&(s.type="line");var l=s.label||(s.label={});if(null==l.show&&(l.show=!1),"cross"===r){var u=a.get(["label","show"]);if(l.show=null==u||u,!o){var c=s.lineStyle=a.get("crossStyle");c&&P(l,c.textStyle)}}return t.model.getModel("axisPointer",new kp(s,n,i))}(c,u,r,e,i,s):h;var p=h.get("snap"),f=h.get("triggerEmphasis"),g=_k(c.model),v=s||p||"category"===c.type,y=t.axesInfo[g]={key:g,axis:c,coordSys:n,axisPointerModel:h,triggerTooltip:s,triggerEmphasis:f,involveSeries:v,snap:p,useHandle:xk(h),seriesModels:[],linkGroup:null};l[g]=y,t.seriesInvolved=t.seriesInvolved||v;var m=function(t,e){for(var n=e.model,i=e.dim,r=0;r=0||t===e}function mk(t){var e=(t.ecModel.getComponent("axisPointer")||{}).coordSysAxesInfo;return e&&e.axesInfo[_k(t)]}function xk(t){return!!t.get(["handle","show"])}function _k(t){return t.type+"||"+t.id}var bk={},wk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(e,n,i,r){this.axisPointerClass&&function(t){var e=mk(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=xk(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent();(null==a||a>l[1])&&(a=l[1]),a0))return n;var a=r.get("jitterOverlap"),s=r.get("jitterMargin")||0,l=vw(t.scale)?bM(t).w:null;return a?Vk(n,o,l,i):function(t,e,n,i,r,o){var a=zk(t);a.items||(a.items=[]);var s=a.items,l=Gk(s,e,n,i,r,o,1),u=Gk(s,e,n,i,r,o,-1),c=Math.abs(l-n)r/2||h&&d>h/2-i)return Vk(n,r,h,i);return s.push({fixedCoord:e,floatCoord:c,r:i}),c}(t,e,n,i,o,s)}function Vk(t,e,n,i){if(null===n)return t+(Math.random()-.5)*e;var r=n-2*i,o=Math.min(Math.max(0,e),r);return t+(Math.random()-.5)*o}function Gk(t,e,n,i,r,o,a){for(var s=n,l=0;lr/2)return Number.MAX_VALUE;if(1===a&&f>s||-1===a&&f0;return a&&s}(t,n);if(i){var r=n.dim,o=n.orient,a="horizontal"===o&&"category"!==n.type||"vertical"===o&&"category"===n.type,s="y"===r||"single"===r&&a,l="x"===r||"single"===r&&!a;if(s||l)return{progress:function(t,e){var i=e.getLayout("points"),r=!!i;for(var o=t.start;o0&&!d.min?d.min=0:null!=d.min&&d.min<0&&!d.max&&(d.max=0);var p=s;null!=d.color&&(p=P({color:d.color},s));var f=D(C(d),{boundaryGap:t,splitNumber:e,clockwise:n,scale:i,axisLine:r,axisTick:o,axisLabel:a,name:d.text,showName:l,nameLocation:"end",nameGap:c,nameTextStyle:p,triggerEvent:h},!1);if(j(u)){var g=f.name;f.name=u.replace("{value}",null!=g?g:"")}else Z(u)&&(f.name=u(f.name,f));var v=new kp(f,null,this.ecModel);return E(v,nS.prototype),v.mainType="radar",v.componentIndex=this.componentIndex,v.uid=Pp("ec_radar"),v},this);this._indicatorModels=d},e.prototype.getIndicatorModels=function(){return this._indicatorModels},e.type=jk,e.defaultOption={z:0,center:["50%","50%"],radius:"50%",startAngle:90,clockwise:!1,axisName:{show:!0,color:ug.color.axisLabel},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:D({lineStyle:{color:ug.color.neutral20}},Xk.axisLine),axisLabel:Kk(Xk.axisLabel,!1),axisTick:Kk(Xk.axisTick,!1),splitLine:Kk(Xk.splitLine,!0),splitArea:Kk(Xk.splitArea,!0),indicator:[]},e}(lg),Jk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeAll(),this._buildAxes(t,n),this._buildSplitLineAndArea(t)},e.prototype._buildAxes=function(t,e){var n=t.coordinateSystem;B(V(n.getIndicatorAxes(),function(t){var i=t.model.get("showName")?t.name:"";return new dD(t.model,e,{axisName:i,position:[n.cx,n.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})}),function(t){t.build(),this.group.add(t.group)},this)},e.prototype._buildSplitLineAndArea=function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes();if(n.length){var i=t.get("shape"),r=t.getModel("splitLine"),o=t.getModel("splitArea"),a=r.getModel("lineStyle"),s=o.getModel("areaStyle"),l=r.get("show"),u=o.get("show"),c=a.get("color"),h=s.get("color"),d=X(c)?c:[c],p=X(h)?h:[h],f=[],g=[];if("circle"===i)for(var v=n[0].getTicksCoords(),y=e.cx,m=e.cy,x=0;x3?1.4:r>1?1.2:1.1,l=i>0?s:1/s;this._checkTriggerMoveZoom(this,"zoom","zoomOnMouseWheel",t,{scale:l,originX:o,originY:a,isAvailableBehavior:null})}if(n){var u=Math.abs(i),c=(i>0?1:-1)*(u>3?.4:u>1?.15:.05);this._checkTriggerMoveZoom(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:c,originX:o,originY:a,isAvailableBehavior:null})}}}},e.prototype._pinchHandler=function(t){if(!aL(this._zr,"globalPan")&&!cL(t)){var e=t.pinchScale>1?1.1:1/1.1;this._checkTriggerMoveZoom(this,"zoom",null,t,{scale:e,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})}},e.prototype._checkTriggerMoveZoom=function(t,e,n,i,r){t._checkPointer(i,r.originX,r.originY)&&(ye(i.event),i.__ecRoamConsumed=!0,yL(t,e,n,i,r))},e}($t);function cL(t){return t.__ecRoamConsumed}var hL,dL=Pa();function pL(t){var e=dL(t);return e.roam=e.roam||{},e.uniform=e.uniform||{},e}function fL(t,e,n,i){for(var r=pL(t).roam,o=r[e]=r[e]||[],a=0;a=4&&(l={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(l&&null!=a&&null!=s&&(u=VL(l,{x:0,y:0,width:a,height:s}),!e.ignoreViewBox)){var d=i;(i=new vo).add(d),d.scaleX=d.scaleY=u.scale,d.x=u.x,d.y=u.y}return e.ignoreRootClip||null==a||null==s||i.setClipPath(new lu({shape:{x:0,y:0,width:a,height:s}})),{root:i,width:a,height:s,viewBoxRect:l,viewBoxTransform:u,named:r}},t.prototype._parseNode=function(t,e,n,i,r,o){var a,s=t.nodeName.toLowerCase(),l=i;if("defs"===s&&(r=!0),"text"===s&&(o=!0),"defs"===s||"switch"===s)a=e;else{if(!r){var u=hL[s];if(u&&wt(hL,s)){a=u.call(this,t,e);var c=t.getAttribute("name");if(c){var h={name:c,namedFrom:null,svgNodeTagLower:s,el:a};n.push(h),"g"===s&&(l=h)}else i&&n.push({name:i.name,namedFrom:i,svgNodeTagLower:s,el:a});e.add(a)}}var d=IL[s];if(d&&wt(IL,s)){var p=d.call(this,t),f=t.getAttribute("id");f&&(this._defs[f]=p)}}if(a&&a.isGroup)for(var g=t.firstChild;g;)1===g.nodeType?this._parseNode(g,a,n,l,r,o):3===g.nodeType&&o&&this._parseText(g,a),g=g.nextSibling},t.prototype._parseText=function(t,e){var n=new Jl({style:{text:t.textContent},silent:!0,x:this._textX||0,y:this._textY||0});DL(e,n),kL(t,n,this._defsUsePending,!1,!1),function(t,e){var n=e.__selfStyle;if(n){var i=n.textBaseline,r=i;i&&"auto"!==i?"baseline"===i?r="alphabetic":"before-edge"===i||"text-before-edge"===i?r="top":"after-edge"===i||"text-after-edge"===i?r="bottom":"central"!==i&&"mathematical"!==i||(r="middle"):r="alphabetic",t.style.textBaseline=r}var o=e.__inheritedStyle;if(o){var a=o.textAlign,s=a;a&&("middle"===a&&(s="center"),t.style.textAlign=s)}}(n,e);var i=n.style,r=i.fontSize;r&&r<9&&(i.fontSize=9,n.scaleX*=r/9,n.scaleY*=r/9);var o=(i.fontSize||i.fontFamily)&&[i.fontStyle,i.fontWeight,(i.fontSize||12)+"px",i.fontFamily||"sans-serif"].join(" ");i.font=o;var a=n.getBoundingRect();return this._textX+=a.width,e.add(n),n},t.internalField=void(hL={g:function(t,e){var n=new vo;return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n},rect:function(t,e){var n=new lu;return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n.setShape({x:parseFloat(t.getAttribute("x")||"0"),y:parseFloat(t.getAttribute("y")||"0"),width:parseFloat(t.getAttribute("width")||"0"),height:parseFloat(t.getAttribute("height")||"0")}),n.silent=!0,n},circle:function(t,e){var n=new ah;return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),r:parseFloat(t.getAttribute("r")||"0")}),n.silent=!0,n},line:function(t,e){var n=new Oh;return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n.setShape({x1:parseFloat(t.getAttribute("x1")||"0"),y1:parseFloat(t.getAttribute("y1")||"0"),x2:parseFloat(t.getAttribute("x2")||"0"),y2:parseFloat(t.getAttribute("y2")||"0")}),n.silent=!0,n},ellipse:function(t,e){var n=new lh;return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),rx:parseFloat(t.getAttribute("rx")||"0"),ry:parseFloat(t.getAttribute("ry")||"0")}),n.silent=!0,n},polygon:function(t,e){var n,i=t.getAttribute("points");i&&(n=AL(i));var r=new Dh({shape:{points:n||[]},silent:!0});return DL(e,r),kL(t,r,this._defsUsePending,!1,!1),r},polyline:function(t,e){var n,i=t.getAttribute("points");i&&(n=AL(i));var r=new kh({shape:{points:n||[]},silent:!0});return DL(e,r),kL(t,r,this._defsUsePending,!1,!1),r},image:function(t,e){var n=new eu;return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n.setStyle({image:t.getAttribute("xlink:href")||t.getAttribute("href"),x:+t.getAttribute("x"),y:+t.getAttribute("y"),width:+t.getAttribute("width"),height:+t.getAttribute("height")}),n.silent=!0,n},text:function(t,e){var n=t.getAttribute("x")||"0",i=t.getAttribute("y")||"0",r=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0";this._textX=parseFloat(n)+parseFloat(r),this._textY=parseFloat(i)+parseFloat(o);var a=new vo;return DL(e,a),kL(t,a,this._defsUsePending,!1,!0),a},tspan:function(t,e){var n=t.getAttribute("x"),i=t.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=i&&(this._textY=parseFloat(i));var r=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0",a=new vo;return DL(e,a),kL(t,a,this._defsUsePending,!1,!0),this._textX+=parseFloat(r),this._textY+=parseFloat(o),a},path:function(t,e){var n=ih(t.getAttribute("d")||"");return DL(e,n),kL(t,n,this._defsUsePending,!1,!1),n.silent=!0,n}}),t}(),IL={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||"0",10),n=parseInt(t.getAttribute("y1")||"0",10),i=parseInt(t.getAttribute("x2")||"10",10),r=parseInt(t.getAttribute("y2")||"0",10),o=new Hh(e,n,i,r);return TL(t,o),CL(t,o),o},radialgradient:function(t){var e=parseInt(t.getAttribute("cx")||"0",10),n=parseInt(t.getAttribute("cy")||"0",10),i=parseInt(t.getAttribute("r")||"0",10),r=new Wh(e,n,i);return TL(t,r),CL(t,r),r}};function TL(t,e){"userSpaceOnUse"===t.getAttribute("gradientUnits")&&(e.global=!0)}function CL(t,e){for(var n=t.firstChild;n;){if(1===n.nodeType&&"stop"===n.nodeName.toLocaleLowerCase()){var i=n.getAttribute("offset"),r=void 0;r=i&&i.indexOf("%")>0?parseInt(i,10)/100:i?parseFloat(i):0;var o={};BL(n,o,o);var a=o.stopColor||n.getAttribute("stop-color")||"#000000",s=o.stopOpacity||n.getAttribute("stop-opacity");if(s){var l=gi(a);l&&l[3]&&(l[3]*=si(s),a=Mi(l,"rgba"))}e.colorStops.push({offset:r,color:a})}n=n.nextSibling}}function DL(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),P(e.__inheritedStyle,t.__inheritedStyle))}function AL(t){for(var e=RL(t),n=[],i=0;i0;o-=2){var a=i[o],s=i[o-1],l=RL(a);switch(r=r||we(),s){case"translate":Te(r,r,[parseFloat(l[0]),parseFloat(l[1]||"0")]);break;case"scale":De(r,r,[parseFloat(l[0]),parseFloat(l[1]||l[0])]);break;case"rotate":Ce(r,r,-parseFloat(l[0])*EL,[parseFloat(l[1]||"0"),parseFloat(l[2]||"0")]);break;case"skewX":Ie(r,[1,0,Math.tan(parseFloat(l[0])*EL),1,0,0],r);break;case"skewY":Ie(r,[1,Math.tan(parseFloat(l[0])*EL),0,1,0,0],r);break;case"matrix":r[0]=parseFloat(l[0]),r[1]=parseFloat(l[1]),r[2]=parseFloat(l[2]),r[3]=parseFloat(l[3]),r[4]=parseFloat(l[4]),r[5]=parseFloat(l[5])}}e.setLocalTransform(r)}}(t,e),BL(t,a,s),i||function(t,e,n){for(var i=0;i1e-6;zP[0]=a?(r[0]-i.x)/o:r[0],zP[1]=a?(r[1]-i.y)/o:r[1],Yt(zP,zP,t.mtRawInv);var s=function(t,e){var n=t.centerOption,i=t.dataRect;0;return!n||t.lgCt?e.slice():[NP(0,e,n,i),NP(1,e,n,i)]}(t,zP);BP(e,s,o),B(n,function(t){t!==e&&BP(t,s.slice(),o)})}(r,e,n,AP)}var AP=Vr(),kP=Vr();function LP(t,e,n){var i=PP(e);i&&(DP(i,e,n,t),dP(i,e))}function PP(t){return t.__ownRoamView?t.__ownRoamView():null}function OP(t,e,n,i){n.setUpdatePayload($d(t));var r=Fu(i,e);r&&r.__updateOnOwnRoam&&r.__updateOnOwnRoam(t,e,i)}function RP(t){return t.scaleX}function NP(t,e,n,i){return n&&i&&i[pd[t]]&&(j(r=n[t])&&Fo(r))?(e[t]-i[dd[t]])/i[pd[t]]*100+"%":e[t];var r}function EP(t,e){return e&&t&&t.getShallow("legacyViewCoordSysCenterBase")?{w:e.getWidth(),h:e.getHeight()}:null}var zP=[];function BP(t,e,n){var i=t.option;i.center=e,i.zoom=n}function VP(t,e){if(e){var n=e.min||0,i=e.max||1/0;t=Math.max(Math.min(i,t),n)}return t}function GP(t,e){var n=e.getShallow("nodeScaleRatio",!0)||1,i=t;return((i.zoom-1)*n+1)/(i.trans[2].scaleX||1)}function FP(t,e,n,i,r,o,a,s){function l(n){var i=t.mainType,r=$d(P({type:YP(i,t.subType,Bu)},n));s&&(r.componentType=i),r[i+"Id"]=t.id,e.dispatchAction(r)}PP(t)?(n.enable(at(t.get("roam"),a),{api:e,zInfo:{component:t},triggerInfo:{roamTrigger:t.get("roamTrigger"),isInSelf:i,isInClip:function(t,e,n){return!r||r.contain(e,n)}}}),n.off("pan").off("zoom").on("pan",function(t){o&&o("pan"),l({dx:t.dx,dy:t.dy})}).on("zoom",function(t){o&&o("zoom"),l({zoom:t.scale,originX:t.originX,originY:t.originY})})):n.disable()}function HP(t){return function(e,n,i){return WP.copy(t.getBoundingRect()),WP.applyTransform(t.getComputedTransform()),WP.contain(n,i)}}var WP=new Xe(0,0,0,0);function UP(t,e,n){var i=YP(e,n,Bu);t.registerAction({type:i,event:i,update:"none"},function(t,i,r){i.eachComponent(Va(t,e,n),function(e){LP(t,e),OP(t,e,i,r)})})}function YP(t,e,n){return(t!==Du?t:"map"===e?"geo":e)+n}function XP(t){return null!=t.zoom}function ZP(t,e,n,i,r,o,a){var s=new nP(null,EP(t.ecModel,e));return pP(s,n,i,r,o),a?fP(s,a.x,a.y,a.width,a.height):fP(s,n,i,r,o),dP(s,t),s}var jP=["rect","circle","line","ellipse","polygon","polyline","path"],qP=mt(jP),KP=mt(jP.concat(["g"])),$P=mt(jP.concat(["g"])),JP=Pa();function QP(t){var e=t.getItemStyle(),n=t.get("areaColor");return null!=n&&(e.fill=n),e}function tO(t){var e=t.style;e&&(e.stroke=e.stroke||e.fill,e.fill=null)}var eO=function(){function t(t){var e=this.group=new vo,n=this._transformGroup=new vo;e.add(n),this.uid=Pp("ec_map_draw"),this._controller=new uL(t.getZr()),n.add(this._regionsGroup=new vo),n.add(this._svgGroup=new vo)}return t.prototype.draw=function(t,e,n,i,r){var o=this,a=t.getData&&t.getData();lO(t)&&e.eachComponent({mainType:"series",subType:"map"},function(e){a||e.getHostGeoModel()!==t||(a=e.getData())});var s,l=t.coordinateSystem,u=l.view,c=this._regionsGroup,h=this._transformGroup,d=!c.childAt(0)||r;l.shouldClip()?(s=sP(null,u),this.group.setClipPath(new lu({shape:s.clone()}))):this.group.removeClipPath(),CP(h,1,u,d?null:t);var p=a&&a.getVisual("visualMeta")&&a.getVisual("visualMeta").length>0;"geoJSON"===l.resourceType?this._buildGeoJSON(u,n,l,t,a,p):"geoSVG"===l.resourceType&&this._buildSVG(u,n,l,t,a,p),FP(t,n,this._controller,function(e,n,i){return t.coordinateSystem.containPoint([n,i])},s,function(){o._mouseDownFlag=!1},!1,!0),this._updateMapSelectHandler(t,c,n,i)},t.prototype.__updateOnOwnRoam=function(t){CP(this._transformGroup,1,t.coordinateSystem.view,null)},t.prototype._buildGeoJSON=function(t,e,n,i,r,o){var a=this._regionsGroupByName=mt(),s=mt(),l=this._regionsGroup,u=n.projection,c=u&&u.stream,h=Br(lP(null,t,0));function d(t,e){return e&&(t=e(t)),t&&Yt([],t,h)}function p(t){for(var e=[],n=!c&&u&&u.project,i=0;i=0)&&(c=t);var h=a?{normal:{align:"center",verticalAlign:"middle"}}:null;op(n,ap(r),{labelFetcher:c,labelDataIndex:u,defaultText:i},h);var d=n.getTextContent();if(d&&(JP(d).ignore=d.ignore,n.textConfig&&a)){var p=n.getBoundingRect().clone();n.textConfig.layoutRect=p,n.textConfig.position=[(a[0]-p.x)/p.width*100+"%",(a[1]-p.y)/p.height*100+"%"]}n.disableLabelAnimation=!0}else n.removeTextContent(),n.removeTextConfig(),n.disableLabelAnimation=null}function rO(t,e,n,i,r,o){e?e.setItemGraphicEl(o,n):Iu(n).eventData={componentType:"geo",componentIndex:t.componentIndex,geoIndex:t.componentIndex,name:i,region:r&&r.option||{}}}function oO(t,e,n,i,r){e||Gd({el:n,componentModel:t,itemName:i,itemTooltipOption:r.get("tooltip")})}function aO(t,e,n,i){e.highDownSilentOnTouch=!!t.get("selectedMode");var r=i.getModel("emphasis"),o=r.get("focus");return kc(e,o,r.get("blurScope"),r.get("disabled")),lO(t)&&function(t,e,n){var i=Iu(t);i.componentMainType=e.mainType,i.componentIndex=e.componentIndex,i.componentHighDownName=n}(e,t,n),o}function sO(t,e,n){var i,r=[];function o(){i=[]}function a(){i.length&&(r.push(i),i=[])}var s=e({polygonStart:o,polygonEnd:a,lineStart:o,lineEnd:a,point:function(t,e){isFinite(t)&&isFinite(e)&&i.push([t,e])},sphere:function(){}});return!n&&s.polygonStart(),B(t,function(t){s.lineStart();for(var e=0;e-1&&(n.style.stroke=n.style.fill,n.style.fill=ug.color.neutral00,n.style.lineWidth=2),n},e.prototype.__ownRoamView=function(){return dO(this)?this.coordinateSystem.view:null},e.type="series."+uO,e.dependencies=["geo"],e.layoutMode="box",e.defaultOption={z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:null,showLegendSymbol:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,selectedMode:!0,label:{show:!1,color:ug.color.tertiary},itemStyle:{borderWidth:.5,borderColor:ug.color.border,areaColor:ug.color.background},emphasis:{label:{show:!0,color:ug.color.primary},itemStyle:{areaColor:ug.color.highlight}},select:{label:{show:!0,color:ug.color.primary},itemStyle:{color:ug.color.highlight}},nameProperty:"name"},e}(Hy);function hO(t){return 0===t.indexOf("i")}function dO(t){return pO(t.seriesGroup)===t&&!t.getHostGeoModel()}function pO(t){return t.f[0]}function fO(t,e){var n={};return t.eachRawSeriesByType(uO,function(i){var r=i.getHostGeoModel(),o=r?"o"+r.id:"i"+i.getMapType(),a=n[o]=n[o]||{f:[],r:[]};t.isSeriesFiltered(i)||e||a.f.push(i),a.r.push(i)}),n}var gO=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=uO,e}return n(e,t),e.prototype.render=function(t,e,n,i){if(!i||"mapToggleSelect"!==i.type||i.from!==this.uid){var r=this.group;if(r.removeAll(),!t.getHostGeoModel()){var o=this._mapDraw;o&&i&&"geoRoam"===i.type&&o.resetForLabelLayout(),i&&"geoRoam"===i.type&&"series"===i.componentType&&i.seriesId===t.id?o&&r.add(o.group):dO(t)?(o=o||(this._mapDraw=new eO(n)),r.add(o.group),o.draw(t,e,n,this,i)):this._clearMapDraw(),t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t)}}},e.prototype.__updateOnOwnRoam=function(t,e,n){var i=this._mapDraw;dO(e)&&i&&i.__updateOnOwnRoam(e)},e.prototype.remove=function(){this._clearMapDraw(),this.group.removeAll()},e.prototype.dispose=function(){this._clearMapDraw()},e.prototype._clearMapDraw=function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},e.prototype._renderSymbols=function(t){var e=t.originalData,n=this.group;e.each(e.mapDimension("value"),function(i,r){if(!isNaN(i)){var o=e.getItemLayout(r);if(o&&o.point){var a=o.point,s=o.offset,l=new ah({style:{fill:t.getData().getVisual("style").fill},shape:{cx:a[0]+9*s,cy:a[1],r:3},silent:!0,z2:8+(s?0:11)});if(!s){var u=pO(t.seriesGroup).getData(),c=e.getName(r),h=u.indexOfName(c),d=e.getItemModel(r),p=d.getModel("label"),f=u.getItemGraphicEl(h);op(l,ap(d),{labelFetcher:{getFormattedLabel:function(e,n){return t.getFormattedLabel(h,n)}},defaultText:c}),l.disableLabelAnimation=!0,p.get("position")||l.setTextConfig({position:"bottom"}),f.onHoverStateChange=function(t){hc(l,t)}}n.add(l)}}})},e.type=uO,e}(tm),vO={geoJSON:{aspectScale:.75,invertLongitute:!0},geoSVG:{aspectScale:1,invertLongitute:!1}},yO=["lng","lat"],mO=function(t){function e(e,n,i){var r=t.call(this)||this;r.dimensions=yO,r.type="geo",r._nameCoordMap=mt(),r.name=e;var o=i.projection,a=eP(n,i.nameMap,i.nameProperty),s=QL(n),l=(r.resourceType=s?s.type:null,r.regions=a.regions),u=vO[s.type];r._clip=i.clip;var c,h=!o&&u.invertLongitute;if(r.view=new nP(h,EP(i.ecModel,i.api),r),r.map=n,r._regionsMap=a.regionsMap,r.regions=a.regions,r.projection=o,o)for(var d=0;d1?(f.width=p,f.height=p/x):(f.height=p,f.width=p*x),f.y=d[1]-f.height/2,f.x=d[0]-f.width/2;else{var b=t.getBoxLayoutParams();b.aspect=x,f=Qf(t,f=Jf(b,m),x)}fP(n,f.x,f.y,f.width,f.height),dP(n,t)}var bO=function(){function t(){this.dimensions=yO}return t.prototype.create=function(t,e){var n=[];function i(t){return{nameProperty:t.get("nameProperty"),aspectScale:t.get("aspectScale"),projection:t.get("projection"),clip:t.getShallow("clip",!0)}}return t.eachComponent("geo",function(r,o){var a=r.get("map"),s=new mO(a+o,a,k({nameMap:r.get("nameMap"),api:e,ecModel:t},i(r)));n.push(s),r.coordinateSystem=s,s.model=r,s.resize=_O,s.resize(r,e)}),t.eachSeries(function(t){Wf({targetModel:t,coordSysType:"geo",coordSysProvider:function(){var e=t.subType===uO?t.getHostGeoModel():t.getReferringComponents("geo",Ea).models[0];return e&&e.coordinateSystem},allowNotFound:!0})}),B(fO(t,!0),function(r,o){if(hO(o)){var a=r.r[0],s=[];B(r.r,function(t){s.push(t.get("nameMap")),t.seriesGroup=null});var l,u=o.slice(1),c=new mO(u,u,k({nameMap:A(s),api:e,ecModel:t},i(a)));B(r.r,function(t){l=at(l,t.get("scaleLimit"))}),n.push(c),c.resize=_O,c.resize(a,e),B(r.r,function(t){t.coordinateSystem=c,function(t,e){B(e.get("geoCoord"),function(e,n){t.addGeoCoord(n,e)})}(c,t)})}}),n},t.prototype.getFilledRegions=function(t,e,n,i){for(var r=(t||[]).slice(),o=mt(),a=0;a=0;){var o=e[n];o.hierNode.prelim+=i,o.hierNode.modifier+=i,r+=o.hierNode.change,i+=o.hierNode.shift+r}}(t);var o=(n[0].hierNode.prelim+n[n.length-1].hierNode.prelim)/2;r?(t.hierNode.prelim=r.hierNode.prelim+e(t,r),t.hierNode.modifier=t.hierNode.prelim-o):t.hierNode.prelim=o}else r&&(t.hierNode.prelim=r.hierNode.prelim+e(t,r));t.parentNode.hierNode.defaultAncestor=function(t,e,n,i){if(e){for(var r=t,o=t,a=o.parentNode.children[0],s=e,l=r.hierNode.modifier,u=o.hierNode.modifier,c=a.hierNode.modifier,h=s.hierNode.modifier;s=OO(s),o=RO(o),s&&o;){r=OO(r),a=RO(a),r.hierNode.ancestor=t;var d=s.hierNode.prelim+h-o.hierNode.prelim-u+i(s,o);d>0&&(EO(NO(s,t,n),t,d),u+=d,l+=d),h+=s.hierNode.modifier,u+=o.hierNode.modifier,l+=r.hierNode.modifier,c+=a.hierNode.modifier}s&&!OO(r)&&(r.hierNode.thread=s,r.hierNode.modifier+=h-l),o&&!RO(a)&&(a.hierNode.thread=o,a.hierNode.modifier+=u-c,n=t)}return n}(t,r,t.parentNode.hierNode.defaultAncestor||i[0],e)}function kO(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function LO(t){return arguments.length?t:zO}function PO(t,e){return t-=Math.PI/2,{x:e*Math.cos(t),y:e*Math.sin(t)}}function OO(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function RO(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function NO(t,e,n){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:n}function EO(t,e,n){var i=n/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=i,e.hierNode.shift+=n,e.hierNode.modifier+=n,e.hierNode.prelim+=n,t.hierNode.change+=i}function zO(t,e){return t.parentNode===e.parentNode?1:2}var BO=Pa();function VO(t){var e=t.mainData,n=t.datas;n||(n={main:e},t.datasAttr={main:"data"}),t.datas=t.mainData=null,YO(e,n,t),B(n,function(n){B(e.TRANSFERABLE_METHODS,function(e){n.wrapMethod(e,Y(GO,t))})}),e.wrapMethod("cloneShallow",Y(HO,t)),B(e.CHANGABLE_METHODS,function(n){e.wrapMethod(n,Y(FO,t))}),ct(n[e.dataType]===e)}function GO(t,e){if(BO(i=this).mainData===i){var n=k({},BO(this).datas);n[this.dataType]=e,YO(e,n,t)}else XO(e,this.dataType,BO(this).mainData,t);var i;return e}function FO(t,e){return t.struct&&t.struct.update(),e}function HO(t,e){return B(BO(e).datas,function(n,i){n!==e&&XO(n.cloneShallow(),i,e,t)}),e}function WO(t){var e=BO(this).mainData;return null==t||null==e?e:BO(e).datas[t]}function UO(){var t=BO(this).mainData;return null==t?[{data:t}]:V(W(BO(t).datas),function(e){return{type:e,data:BO(t).datas[e]}})}function YO(t,e,n){BO(t).datas={},B(e,function(e,i){XO(e,i,t,n)})}function XO(t,e,n,i){BO(n).datas[e]=t,BO(t).mainData=n,t.dataType=e,i.struct&&(t[i.structAttr]=i.struct,i.struct[i.datasAttr[e]]=t),t.getLinkedData=WO,t.getLinkedDataAll=UO}var ZO=function(){function t(t,e){this.depth=0,this.height=0,this.dataIndex=-1,this.children=[],this.viewChildren=[],this.isExpand=!1,this.name=t||"",this.hostTree=e}return t.prototype.isRemoved=function(){return this.dataIndex<0},t.prototype.eachNode=function(t,e,n){Z(t)&&(n=e,e=t,t=null),j(t=t||{})&&(t={order:t});var i,r=t.order||"preorder",o=this[t.attr||"children"];"preorder"===r&&(i=e.call(n,this));for(var a=0;!i&&ae&&(e=i.height)}this.height=e+1},t.prototype.getNodeById=function(t){if(this.getId()===t)return this;for(var e=0,n=this.children,i=n.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},t.prototype.getLayout=function(){return this.hostTree.data.getItemLayout(this.dataIndex)},t.prototype.getModel=function(t){if(!(this.dataIndex<0))return this.hostTree.data.getItemModel(this.dataIndex).getModel(t)},t.prototype.getLevelModel=function(){return(this.hostTree.levelModels||[])[this.depth]},t.prototype.setVisual=function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},t.prototype.getVisual=function(t){return this.hostTree.data.getItemVisual(this.dataIndex,t)},t.prototype.getRawIndex=function(){return this.hostTree.data.getRawIndex(this.dataIndex)},t.prototype.getId=function(){return this.hostTree.data.getId(this.dataIndex)},t.prototype.getChildIndex=function(){if(this.parentNode){for(var t=this.parentNode.children,e=0;e=0){var i=n.getData().tree.root,r=t.targetNode;if(j(r)&&(r=i.getNodeById(r)),r&&i.contains(r))return{node:r};var o=t.targetNodeId;if(null!=o&&(r=i.getNodeById(o)))return{node:r}}}function KO(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function $O(t,e){return R(KO(t),e)>=0}function JO(t,e){for(var n=[];t;){var i=t.dataIndex;n.push({name:t.name,dataIndex:i,value:e.getRawValue(i)}),t=t.parentNode}return n.reverse(),n}var QO="tree",tR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n.ignoreStyleOnData=!0,n}return n(e,t),e.prototype.getInitialData=function(t){var e={name:t.name,children:t.data},n=t.leaves||{},i=new kp(n,this,this.ecModel),r=jO.createTree(e,this,function(t){t.wrapMethod("getItemModel",function(t,e){var n=r.getNodeByDataIndex(e);return n&&n.children.length&&n.isExpand||(t.parentModel=i),t})});var o=0;r.eachNode("preorder",function(t){t.depth>o&&(o=t.depth)});var a=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:o;return r.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=a}),r.data},e.prototype.getOrient=function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},e.prototype.formatTooltip=function(t,e,n){for(var i=this.getData().tree,r=i.root.children[0],o=i.getNodeByDataIndex(t),a=o.getValue(),s=o.name;o&&o!==r;)s=o.parentNode.name+"."+s,o=o.parentNode;return Ty("nameValue",{name:s,value:a,noValue:isNaN(a)||null==a})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=JO(i,this),n.collapsed=!i.isExpand,n},e.prototype.__ownRoamView=function(){return this.coordinateSystem},e.type="series."+QO,e.layoutMode="box",e.defaultOption={z:2,coordinateSystemUsage:"box",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,roamTrigger:"global",nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:ug.color.borderTint,width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderWidth:1.5},label:{show:!0},animationEasing:"linear",animationDuration:700,animationDurationUpdate:500},e}(Hy),eR=function(){this.parentPoint=[],this.childPoints=[]},nR=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:ug.color.neutral99,fill:null}},e.prototype.getDefaultShape=function(){return new eR},e.prototype.buildPath=function(t,e){var n=e.childPoints,i=n.length,r=e.parentPoint,o=n[0],a=n[i-1];if(1===i)return t.moveTo(r[0],r[1]),void t.lineTo(o[0],o[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,c=Vo(e.forkPosition,1),h=[];h[l]=r[l],h[u]=r[u]+(a[u]-r[u])*c,t.moveTo(r[0],r[1]),t.lineTo(h[0],h[1]),t.moveTo(o[0],o[1]),h[l]=o[l],t.lineTo(h[0],h[1]),h[l]=a[l],t.lineTo(h[0],h[1]),t.lineTo(a[0],a[1]);for(var d=1;dm.x)||(_-=Math.PI);var S=b?"left":"right",M=s.getModel("label"),I=M.get("rotate"),T=I*(Math.PI/180),C=v.getTextContent();C&&(v.setTextConfig({position:M.get("position")||S,rotation:null==I?-_:T,origin:"center"}),C.setStyle("verticalAlign","middle"))}var D=s.get(["emphasis","focus"]),A="relative"===D?xt(a.getAncestorsIndices(),a.getDescendantIndices()):"ancestor"===D?a.getAncestorsIndices():"descendant"===D?a.getDescendantIndices():null;A&&(Iu(n).focus=A),function(t,e,n,i,r,o,a,s){var l=e.getModel(),u=t.get("edgeShape"),c=t.get("layout"),h=t.getOrient(),d=t.get(["lineStyle","curveness"]),p=t.get("edgeForkPosition"),f=l.getModel("lineStyle").getLineStyle(),g=i.__edge;if("curve"===u)e.parentNode&&e.parentNode!==n&&(g||(g=i.__edge=new zh({shape:uR(c,h,d,r,r)})),rd(g,{shape:uR(c,h,d,o,a)},t));else if("polyline"===u)if("orthogonal"===c){if(e!==n&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var v=e.children,y=[],m=0;m=0;o--)i.push(r[o])}}function hR(t,e){t.eachSeriesByType("tree",function(t){!function(t,e){var n=eg(t,e).refContainer,i=Jf(t.getBoxLayoutParams(),n);t.layoutInfo=i;var r=t.get("layout"),o=0,a=0,s=null;"radial"===r?(o=2*Math.PI,a=Math.min(i.height,i.width)/2,s=LO(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(o=i.width,a=i.height,s=LO());var l=t.getData().tree.root,u=l.children[0];if(u){!function(t){var e=t;e.hierNode={defaultAncestor:null,ancestor:e,prelim:0,modifier:0,change:0,shift:0,i:0,thread:null};for(var n,i,r=[e];n=r.pop();)if(i=n.children,n.isExpand&&i.length)for(var o=i.length-1;o>=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},r.push(a)}}(l),function(t,e,n){for(var i,r=[t],o=[];i=r.pop();)if(o.push(i),i.isExpand){var a=i.children;if(a.length)for(var s=0;sh.getLayout().x&&(h=t),t.depth>d.depth&&(d=t)});var p=c===h?1:s(c,h)/2,f=p-c.getLayout().x,g=0,v=0,y=0,m=0;if("radial"===r)g=o/(h.getLayout().x+p+f),v=a/(d.depth-1||1),cR(u,function(t){y=(t.getLayout().x+f)*g,m=(t.depth-1)*v;var e=PO(y,m);t.setLayout({x:e.x,y:e.y,rawX:y,rawY:m},!0)});else{var x=t.getOrient();"RL"===x||"LR"===x?(v=a/(h.getLayout().x+p+f),g=o/(d.depth-1||1),cR(u,function(t){m=(t.getLayout().x+f)*v,y="LR"===x?(t.depth-1)*g:o-(t.depth-1)*g,t.setLayout({x:y,y:m},!0)})):"TB"!==x&&"BT"!==x||(g=o/(h.getLayout().x+p+f),v=a/(d.depth-1||1),cR(u,function(t){y=(t.getLayout().x+f)*g,m="TB"===x?(t.depth-1)*v:a-(t.depth-1)*v,t.setLayout({x:y,y:m},!0)}))}}}(t,e)})}var dR=os(QO,function(t){t.eachSeriesByType(QO,function(t){var e=t.getData();e.tree.eachNode(function(t){var n=t.getModel().getModel("itemStyle").getItemStyle();k(e.ensureUniqueItemVisual(t.dataIndex,"style"),n)})})});var pR=["treemapZoomToNode","treemapRender","treemapMove"];function fR(t){var e=t.getData().tree,n={};e.eachNode(function(e){for(var i=e;i&&i.depth>1;)i=i.parentNode;var r=Rg(t.ecModel,i.name||i.dataIndex+"",n);e.setVisual("decal",r)})}var gR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.preventUsingHoverLayer=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};vR(n);var i=t.levels||[],r=this.designatedVisualItemStyle={},o=new kp({itemStyle:r},this,e);i=t.levels=function(t,e){var n,i,r=_a(e.get("color")),o=_a(e.get(["aria","decal","decals"]));if(!r)return;t=t||[],B(t,function(t){var e=new kp(t),r=e.get("color"),o=e.get("decal");(e.get(["itemStyle","color"])||r&&"none"!==r)&&(n=!0),(e.get(["itemStyle","decal"])||o&&"none"!==o)&&(i=!0)});var a=t[0]||(t[0]={});n||(a.color=r.slice());!i&&o&&(a.decal=o.slice());return t}(i,e);var a=V(i||[],function(t){return new kp(t,o,e)},this),s=jO.createTree(n,this,function(t){t.wrapMethod("getItemModel",function(t,e){var n=s.getNodeByDataIndex(e),i=n?a[n.depth]:null;return t.parentModel=i||o,t})});return s.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.formatTooltip=function(t,e,n){var i=this.getData(),r=this.getRawValue(t);return Ty("nameValue",{name:i.getName(t),value:r})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=JO(i,this),n.treePathInfo=n.treeAncestors,n},e.prototype.setLayoutInfo=function(t){this.layoutInfo=this.layoutInfo||{},k(this.layoutInfo,t)},e.prototype.mapIdToIndex=function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=mt(),this._idIndexMapCount=0);var n=e.get(t);return null==n&&e.set(t,n=this._idIndexMapCount++),n},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)},e.prototype.enableAriaDecal=function(){fR(this)},e.type="series.treemap",e.layoutMode="box",e.defaultOption={progressive:0,coordinateSystemUsage:"box",left:ug.size.l,top:ug.size.xxxl,right:ug.size.l,bottom:ug.size.xxxl,sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,scaleLimit:{max:5,min:.2},roam:!0,roamTrigger:"global",nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",bottom:ug.size.m,emptyItemWidth:25,itemStyle:{color:ug.color.backgroundShade,textStyle:{color:ug.color.secondary}},emphasis:{itemStyle:{color:ug.color.background}}},label:{show:!0,distance:0,padding:5,position:"inside",color:ug.color.neutral00,overflow:"truncate"},upperLabel:{show:!1,position:[0,"50%"],height:20,overflow:"truncate",verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:ug.color.neutral00,borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],overflow:"truncate",verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},e}(Hy);function vR(t){var e=0;B(t.children,function(t){vR(t);var n=t.value;X(n)&&(n=n[0]),e+=n});var n=t.value;X(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),X(t.value)?t.value[0]=n:t.value=n}var yR=function(){function t(t){this.group=new vo,t.add(this.group)}return t.prototype.render=function(t,e,n,i){var r=t.getModel("breadcrumb"),o=this.group;if(o.removeAll(),r.get("show")&&n){var a=r.getModel("itemStyle"),s=r.getModel("emphasis"),l=a.getModel("textStyle"),u=s.getModel(["itemStyle","textStyle"]),c=eg(t,e).refContainer,h={left:r.get("left"),right:r.get("right"),top:r.get("top"),bottom:r.get("bottom")},d={emptyItemWidth:r.get("emptyItemWidth"),totalWidth:0,renderList:[]},p=Jf(h,c);this._prepare(n,d,l),this._renderContent(t,d,p,a,s,l,u,i),ng(o,h,c)}},t.prototype._prepare=function(t,e,n){for(var i=t;i;i=i.parentNode){var r=Da(i.getModel().get("name"),""),o=n.getTextRect(r),a=Math.max(o.width+16,e.emptyItemWidth);e.totalWidth+=a+8,e.renderList.push({node:i,text:r,width:a})}},t.prototype._renderContent=function(t,e,n,i,r,o,a,s){for(var l=0,u=e.emptyItemWidth,c=t.get(["breadcrumb","height"]),h=e.totalWidth,d=e.renderList,p=r.getModel("itemStyle").getItemStyle(),f=d.length-1;f>=0;f--){var g=d[f],v=g.node,y=g.width,m=g.text;h>n.width&&(h-=y-u,y=u,m=null);var x=new Dh({shape:{points:mR(l,0,y,c,f===d.length-1,0===f)},style:P(i.getItemStyle(),{lineJoin:"bevel"}),textContent:new du({style:sp(o,{text:m})}),textConfig:{position:"inside"},z2:1e5,onclick:Y(s,v)});x.disableLabelAnimation=!0,x.getTextContent().ensureState("emphasis").style=sp(a,{text:m}),x.ensureState("emphasis").style=p,kc(x,r.get("focus"),r.get("blurScope"),r.get("disabled")),this.group.add(x),xR(x,t,v),l+=y+8}},t.prototype.remove=function(){this.group.removeAll()},t}();function mR(t,e,n,i,r,o){var a=[[r?t:t-5,e],[t+n,e],[t+n,e+i],[r?t:t-5,e+i]];return!o&&a.splice(2,0,[t+n+5,e+i/2]),!r&&a.push([t,e+i/2]),a}function xR(t,e,n){Iu(t).eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.seriesIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:n&&n.dataIndex,name:n&&n.name},treePathInfo:n&&JO(n,e)}}var _R=function(){function t(){this._storage=[],this._elExistsMap={}}return t.prototype.add=function(t,e,n,i,r){return!this._elExistsMap[t.id]&&(this._elExistsMap[t.id]=!0,this._storage.push({el:t,target:e,duration:n,delay:i,easing:r}),!0)},t.prototype.finished=function(t){return this._finishedCallback=t,this},t.prototype.start=function(){for(var t=this,e=this._storage.length,n=function(){--e<=0&&(t._storage.length=0,t._elExistsMap={},t._finishedCallback&&t._finishedCallback())},i=0,r=this._storage.length;iqo&&(c=qo),o=r}ca[1]&&(a[1]=e)})):a=[NaN,NaN];return{sum:i,dataExtent:a}}(e,a,s);if(0===u.sum)return t.viewChildren=[];if(u.sum=function(t,e,n,i,r){if(!i)return n;for(var o=t.get("visibleMin"),a=r.length,s=a,l=a-1;l>=0;l--){var u=r["asc"===i?a-l-1:l].getValue();u/n*ei&&(i=a));var l=t.area*t.area,u=e*e*n;return l?bR(u*i/l,l/(u*r)):1/0}function LR(t,e,n,i,r){var o=e===n.width?0:1,a=1-o,s=["x","y"],l=["width","height"],u=n[s[o]],c=e?t.area/e:0;(r||c>n[l[a]])&&(c=n[l[a]]);for(var h=0,d=t.length;h3||Math.abs(t.dy)>3)){var e=this.seriesModel.getData().tree.root;if(!e)return;var n=e.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t.dx,y:n.y+t.dy,width:n.width,height:n.height}})}},e.prototype._onZoom=function(t){var e=t.originX,n=t.originY,i=t.scale,r=this.seriesModel;if("animating"!==this._state){var o=r.getData().tree.root;if(!o)return;var a=o.getLayout();if(!a)return;var s=new Xe(a.x,a.y,a.width,a.height),l=r.layoutInfo,u=RR(l,a),c=u*i,h=(c=NR(c,r))/u,d=[1,0,0,1,0,0];Te(d,d,[-(e-=l.x),-(n-=l.y)]),De(d,d,[h,h]),Te(d,d,[e,n]),s.applyTransform(d),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:s.x,y:s.y,width:s.width,height:s.height}})}},e.prototype._initEvents=function(t){var e=this;t.on("click",function(t){if("ready"===e._state){var n=e.seriesModel.get("nodeClick",!0);if(n){var i=e.findTarget(t.offsetX,t.offsetY);if(i){var r=i.node;if(r.getLayout().isLeafRoot)e._rootToNode(i);else if("zoomToNode"===n)e._zoomToNode(i);else if("link"===n){var o=r.hostTree.data.getItemModel(r.dataIndex),a=o.get("link",!0),s=o.get("target",!0)||"blank";a&&Ef(a,s)}}}}},this)},e.prototype._renderBreadcrumb=function(t,e,n){var i=this;n||(n=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(n={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new yR(this.group))).render(t,e,n.node,function(e){"animating"!==i._state&&($O(t.getViewRoot(),e)?i._rootToNode({node:e}):i._zoomToNode({node:e}))})},e.prototype.remove=function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},e.prototype.dispose=function(){this._clearController()},e.prototype._zoomToNode=function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype._rootToNode=function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype.findTarget=function(t,e){var n;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},function(i){var r=this._storage.background[i.getRawIndex()];if(r){var o=r.transformCoordToLocal(t,e),a=r.shape;if(!(a.x<=o[0]&&o[0]<=a.x+a.width&&a.y<=o[1]&&o[1]<=a.y+a.height))return!1;n={node:i,offsetX:o[0],offsetY:o[1]}}},this),n},e.type="treemap",e}(tm);var UR=B,YR=$,XR=-1,ZR=function(){function t(e){var n=e.mappingMethod,i=e.type,r=this.option=C(e);this.type=i,this.mappingMethod=n,this._normalizeData=iN[n];var o=t.visualHandlers[i];this.applyVisual=o.applyVisual,this.getColorMapper=o.getColorMapper,this._normalizedToVisual=o._normalizedToVisual[n],"piecewise"===n?(jR(r),function(t){var e=t.pieceList;t.hasSpecialVisual=!1,B(e,function(e,n){e.originIndex=n,null!=e.visual&&(t.hasSpecialVisual=!0)})}(r)):"category"===n?r.categories?function(t){var e=t.categories,n=t.categoryMap={},i=t.visual;if(UR(e,function(t,e){n[t]=e}),!X(i)){var r=[];$(i)?UR(i,function(t,e){var i=n[e];r[null!=i?i:XR]=t}):r[-1]=i,i=nN(t,r)}for(var o=e.length-1;o>=0;o--)null==i[o]&&(delete n[e[o]],e.pop())}(r):jR(r,!0):(ct("linear"!==n||r.dataExtent),jR(r))}return t.prototype.mapValueToVisual=function(t){var e=this._normalizeData(t);return this._normalizedToVisual(e,t)},t.prototype.getNormalizer=function(){return U(this._normalizeData,this)},t.listVisualTypes=function(){return W(t.visualHandlers)},t.isValidType=function(e){return t.visualHandlers.hasOwnProperty(e)},t.eachVisual=function(t,e,n){$(t)?B(t,e,n):e.call(n,t)},t.mapVisual=function(e,n,i){var r,o=X(e)?[]:$(e)?{}:(r=!0,null);return t.eachVisual(e,function(t,e){var a=n.call(i,t,e);r?o=a:o[e]=a}),o},t.retrieveVisuals=function(e){var n,i={};return e&&UR(t.visualHandlers,function(t,r){e.hasOwnProperty(r)&&(i[r]=e[r],n=!0)}),n?i:null},t.prepareVisualTypes=function(t){if(X(t))t=t.slice();else{if(!YR(t))return[];var e=[];UR(t,function(t,n){e.push(n)}),t=e}return t.sort(function(t,e){return"color"===e&&"color"!==t&&0===t.indexOf("color")?1:-1}),t},t.dependsOn=function(t,e){return"color"===e?!(!t||0!==t.indexOf(e)):t===e},t.findPieceIndex=function(t,e,n){for(var i,r=1/0,o=0,a=e.length;ou[1]&&(u[1]=l);var c=e.get("colorMappingBy"),h={type:a.name,dataExtent:u,visual:a.range};"color"!==h.type||"index"!==c&&"id"!==c?h.mappingMethod="linear":(h.mappingMethod="category",h.loop=!0);var d=new ZR(h);return oN(d).drColorMappingBy=c,d}(0,r,o,0,u,p);B(p,function(t,e){if(t.depth>=n.length||t===n[t.depth]){var o=function(t,e,n,i,r,o){var a=k({},e);if(r){var s=r.type,l="color"===s&&oN(r).drColorMappingBy,u="index"===l?i:"id"===l?o.mapIdToIndex(n.getId()):n.getValue(t.get("visualDimension"));a[s]=r.mapValueToVisual(u)}return a}(r,u,t,e,f,i);sN(t,o,n,i)}})}else s=lN(u),c.fill=s}}function lN(t){var e=uN(t,"color");if(e){var n=uN(t,"colorAlpha"),i=uN(t,"colorSaturation");return i&&(e=wi(e,null,null,i)),n&&(e=Si(e,n)),e}}function uN(t,e){var n=t[e];if(null!=n&&"none"!==n)return n}function cN(t,e){var n=t.get(e);return X(n)&&n.length?{name:e,range:n}:null}function hN(t){return"_EC_"+t}var dN=function(){function t(t){this.type="graph",this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this._directed=t||!1}return t.prototype.isDirected=function(){return this._directed},t.prototype.addNode=function(t,e){t=null==t?""+e:""+t;var n=this._nodesMap;if(!n[hN(t)]){var i=new pN(t,e);return i.hostGraph=this,this.nodes.push(i),n[hN(t)]=i,i}},t.prototype.getNodeByIndex=function(t){var e=this.data.getRawIndex(t);return this.nodes[e]},t.prototype.getNodeById=function(t){return this._nodesMap[hN(t)]},t.prototype.addEdge=function(t,e,n){var i=this._nodesMap,r=this._edgesMap;if(K(t)&&(t=this.nodes[t]),K(e)&&(e=this.nodes[e]),t instanceof pN||(t=i[hN(t)]),e instanceof pN||(e=i[hN(e)]),t&&e){var o=t.id+"-"+e.id,a=new fN(t,e,n);return a.hostGraph=this,this._directed&&(t.outEdges.push(a),e.inEdges.push(a)),t.edges.push(a),t!==e&&e.edges.push(a),this.edges.push(a),r[o]=a,a}},t.prototype.getEdgeByIndex=function(t){var e=this.edgeData.getRawIndex(t);return this.edges[e]},t.prototype.getEdge=function(t,e){t instanceof pN&&(t=t.id),e instanceof pN&&(e=e.id);var n=this._edgesMap;return this._directed?n[t+"-"+e]:n[t+"-"+e]||n[e+"-"+t]},t.prototype.eachNode=function(t,e){for(var n=this.nodes,i=n.length,r=0;r=0&&t.call(e,n[r],r)},t.prototype.eachEdge=function(t,e){for(var n=this.edges,i=n.length,r=0;r=0&&n[r].node1.dataIndex>=0&&n[r].node2.dataIndex>=0&&t.call(e,n[r],r)},t.prototype.breadthFirstTraverse=function(t,e,n,i){if(e instanceof pN||(e=this._nodesMap[hN(e)]),e){for(var r="out"===n?"outEdges":"in"===n?"inEdges":"edges",o=0;o=0&&n.node2.dataIndex>=0});for(r=0,o=i.length;r=0&&!t.hasKey(p)&&(t.set(p,!0),o.push(d.node1))}for(s=0;s=0&&!t.hasKey(m)&&(t.set(m,!0),a.push(y.node2))}}}return{edge:t.keys(),node:e.keys()}},t}(),fN=function(){function t(t,e,n){this.dataIndex=-1,this.node1=t,this.node2=e,this.dataIndex=null==n?-1:n}return t.prototype.getModel=function(t){if(!(this.dataIndex<0))return this.hostGraph.edgeData.getItemModel(this.dataIndex).getModel(t)},t.prototype.getAdjacentDataIndices=function(){return{edge:[this.dataIndex],node:[this.node1.dataIndex,this.node2.dataIndex]}},t.prototype.getTrajectoryDataIndices=function(){var t=mt(),e=mt();t.set(this.dataIndex,!0);for(var n=[this.node1],i=[this.node2],r=0;r=0&&!t.hasKey(u)&&(t.set(u,!0),n.push(l.node1))}for(r=0;r=0&&!t.hasKey(d)&&(t.set(d,!0),i.push(h.node2))}return{edge:t.keys(),node:e.keys()}},t}();function gN(t,e){return{getValue:function(n){var i=this[t][e];return i.getStore().get(i.getDimensionIndex(n||"value"),this.dataIndex)},setVisual:function(n,i){this.dataIndex>=0&&this[t][e].setItemVisual(this.dataIndex,n,i)},getVisual:function(n){return this[t][e].getItemVisual(this.dataIndex,n)},setLayout:function(n,i){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,n,i)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}}function vN(t,e,n,i,r){for(var o=new dN(i),a=0;a "+d)),u++)}var p,f=n.get("coordinateSystem");if("cartesian2d"===f||"polar"===f||"matrix"===f)p=$b(t,n);else{var g=Vf.get(f),v=g&&g.dimensions||[];R(v,"value")<0&&v.concat(["value"]);var y=Wb(t,{coordDimensions:v,encodeDefine:n.getEncode()}).dimensions;(p=new Hb(y,n)).initData(t)}var m=new Hb(["value"],n);return m.initData(l,s),r&&r(p,m),VO({mainData:p,struct:o,structAttr:"graph",datas:{node:p,edge:m},datasAttr:{node:"data",edge:"edgeData"}}),o.update(),o}E(pN,gN("hostGraph","data")),E(fN,gN("hostGraph","edgeData"));var yN="--\x3e",mN=function(t){return t.get("autoCurveness")||null},xN=function(t,e){var n=mN(t),i=20,r=[];if(K(n))i=n;else if(X(n))return void(t.__curvenessList=n);e>i&&(i=e);var o=i%2?i+2:i+3;r=[];for(var a=0;a "),value:r.value,noValue:null==r.value})}return By({series:this,dataIndex:t,multipleSeries:e})},e.prototype._updateCategoriesData=function(){var t=V(this.option.categories||[],function(t){return null!=t.value?t:k({value:0},t)}),e=new Hb(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t)})},e.prototype.isAnimationEnabled=function(){return t.prototype.isAnimationEnabled.call(this)&&!("force"===this.get("layout")&&this.get(["force","layoutAnimation"]))},e.prototype.__ownRoamView=function(){var t=this.coordinateSystem;return TP(t)&&t},e.type="series."+MN,e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={z:2,coordinateSystem:"view",legendHoverLink:!0,layout:null,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:ug.color.neutral50,width:1,opacity:.5},emphasis:{scale:!0,label:{show:!0}},select:{itemStyle:{borderColor:ug.color.primary}}},e}(Hy);function TN(t){return t instanceof Array||(t=[t,t]),t}var CN=os(MN,function(t){t.eachSeriesByType(MN,function(t){var e=t.getGraph(),n=t.getEdgeData(),i=TN(t.get("edgeSymbol")),r=TN(t.get("edgeSymbolSize"));n.setVisual("fromSymbol",i&&i[0]),n.setVisual("toSymbol",i&&i[1]),n.setVisual("fromSymbolSize",r&&r[0]),n.setVisual("toSymbolSize",r&&r[1]),n.setVisual("style",t.getModel("lineStyle").getLineStyle()),n.each(function(t){var i=n.getItemModel(t),r=e.getEdgeByIndex(t),o=TN(i.getShallow("symbol",!0)),a=TN(i.getShallow("symbolSize",!0)),s=i.getModel("lineStyle").getLineStyle(),l=n.ensureUniqueItemVisual(t,"style");switch(k(l,s),l.stroke){case"source":var u=r.node1.getVisual("style");l.stroke=u&&u.fill;break;case"target":u=r.node2.getVisual("style");l.stroke=u&&u.fill}o[0]&&r.setVisual("fromSymbol",o[0]),o[1]&&r.setVisual("toSymbol",o[1]),a[0]&&r.setVisual("fromSymbolSize",a[0]),a[1]&&r.setVisual("toSymbolSize",a[1])})})});function DN(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var n=t.getGraph();n.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),AN(n,t)}}function AN(t,e){t.eachEdge(function(t,n){var i=st(t.getModel().get(["lineStyle","curveness"]),-SN(t,e,n,!0),0),r=At(t.node1.getLayout()),o=At(t.node2.getLayout()),a=[r,o];+i&&a.push([(r[0]+o[0])/2-(r[1]-o[1])*i,(r[1]+o[1])/2-(o[0]-r[0])*i]),t.setLayout(a)})}var kN=os(MN,function(t,e){t.eachSeriesByType(MN,function(t){var e=t.get("layout"),n=t.coordinateSystem;if(n&&"view"!==n.type){var i=t.getData(),r=[];B(n.dimensions,function(t){r=r.concat(i.mapDimensionsAll(t))});for(var o=0;o0&&(m[0]=-m[0],m[1]=-m[1]);var _=y[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var b=-Math.atan2(y[1],y[0]);u[0].8?"left":c[0]<-.8?"right":"center",d=c[1]>.8?"top":c[1]<-.8?"bottom":"middle";break;case"start":i.x=-c[0]*f+l[0],i.y=-c[1]*g+l[1],h=c[0]>.8?"right":c[0]<-.8?"left":"center",d=c[1]>.8?"bottom":c[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=f*_+l[0],i.y=l[1]+w,h=y[0]<0?"right":"left",i.originX=-f*_,i.originY=-w;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=x[0],i.y=x[1]+w,h="center",i.originY=-w;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-f*_+u[0],i.y=u[1]+w,h=y[0]>=0?"right":"left",i.originX=f*_,i.originY=-w}i.scaleX=i.scaleY=r,i.setStyle({verticalAlign:i.__verticalAlign||d,align:i.__align||h})}}}function S(t,e){var n=t.__specifiedRotation;if(null==n){var i=a.tangentAt(e);t.attr("rotation",(1===e?-1:1)*Math.PI/2-Math.atan2(i[1],i[0]))}else t.attr("rotation",n)}},e}(vo),QN=function(){function t(t){this.group=new vo,this._LineCtor=t||JN}return t.prototype.updateData=function(t){var e=this;this._progressiveEls=null;var n=this,i=n.group,r=n._lineData;n._lineData=t,r||i.removeAll();var o=tE(t);t.diff(r).add(function(n){e._doAdd(t,n,o)}).update(function(n,i){e._doUpdate(r,t,i,n,o)}).remove(function(t){i.remove(r.getItemGraphicEl(t))}).execute()},t.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl(function(e,n){e.updateLayout(t,n)},this)},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=tE(t),this._lineData=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e,n){function i(t){t.isGroup||function(t){return t.animators&&t.animators.length>0}(t)||(t.incremental=n,t.ensureState("emphasis").hoverLayer=2)}this._progressiveEls=[];for(var r=t.start;r=0?i+=u:i-=u:f>=0?i-=u:i+=u}return i}function cE(t,e){var n=[],i=jn,r=[[],[],[]],o=[[],[]],a=[];e/=2,t.eachEdge(function(t,s){var l=t.getLayout(),u=t.getVisual("fromSymbol"),c=t.getVisual("toSymbol");l.__original||(l.__original=[At(l[0]),At(l[1])],l[2]&&l.__original.push(At(l[2])));var h=l.__original;if(null!=l[2]){if(Dt(r[0],h[0]),Dt(r[1],h[2]),Dt(r[2],h[1]),u&&"none"!==u){var d=PN(t.node1),p=uE(r,h[0],d*e);i(r[0][0],r[1][0],r[2][0],p,n),r[0][0]=n[3],r[1][0]=n[4],i(r[0][1],r[1][1],r[2][1],p,n),r[0][1]=n[3],r[1][1]=n[4]}if(c&&"none"!==c){d=PN(t.node2),p=uE(r,h[1],d*e);i(r[0][0],r[1][0],r[2][0],p,n),r[1][0]=n[1],r[2][0]=n[2],i(r[0][1],r[1][1],r[2][1],p,n),r[1][1]=n[1],r[2][1]=n[2]}Dt(l[0],r[0]),Dt(l[1],r[2]),Dt(l[2],r[1])}else{if(Dt(o[0],h[0]),Dt(o[1],h[1]),Ot(a,o[1],o[0]),Vt(a,a),u&&"none"!==u){d=PN(t.node1);Pt(o[0],o[0],a,d*e)}if(c&&"none"!==c){d=PN(t.node2);Pt(o[1],o[1],a,-d*e)}Dt(l[0],o[0]),Dt(l[1],o[1])}})}var hE=Pa();function dE(t,e){t&&(hE(t).bridge=e)}var pE=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=MN,e}return n(e,t),e.prototype.init=function(t,e){var n=new nC,i=new QN,r=this.group,o=new vo;this._controller=new uL(e.getZr()),o.add(n.group),o.add(i.group),r.add(o),this._symbolDraw=n,this._lineDraw=i,this._mainGroup=o,this._firstRender=!0},e.prototype.render=function(t,e,n){var i=this,r=PP(t),o=!1;this._model=t,this._api=n,this._active=!0;var a=this._mainGroup,s=this._getThumbnailInfo();s&&s.bridge.reset(n);var l=this._symbolDraw,u=this._lineDraw;r&&CP(a,2,r,this._firstRender?null:t),cE(t.getGraph(),LN(t));var c=t.getData();l.updateData(c);var h=t.getEdgeData();u.updateData(h),this._updateNodeAndLinkScale(),r&&FP(t,n,this._controller,function(e,n,i){return t.coordinateSystem.containPoint([n,i])},null),clearTimeout(this._layoutTimeout);var d=t.forceLayout,p=t.get(["force","layoutAnimation"]);d&&(o=!0,this._startForceLayoutIteration(d,n,p));var f=t.get("layout");c.graph.eachNode(function(e){var r=e.dataIndex,o=e.getGraphicEl(),a=e.getModel();if(o){o.off("drag").off("dragend");var s=a.get("draggable");s&&o.on("drag",function(a){switch(f){case"force":d.warmUp(),!i._layouting&&i._startForceLayoutIteration(d,n,p),d.setFixed(r),c.setItemLayout(r,[o.x,o.y]);break;case"circular":c.setItemLayout(r,[o.x,o.y]),e.setLayout({fixed:!0},!0),NN(t,"symbolSize",e,[a.offsetX,a.offsetY]),i.updateLayout(t);break;default:c.setItemLayout(r,[o.x,o.y]),AN(t.getGraph(),t),i.updateLayout(t)}}).on("dragend",function(){d&&d.setUnfixed(r)}),o.setDraggable(s,!!a.get("cursor")),"adjacency"===a.get(["emphasis","focus"])&&(Iu(o).focus=e.getAdjacentDataIndices())}}),c.graph.eachEdge(function(t){var e=t.getGraphicEl(),n=t.getModel().get(["emphasis","focus"]);e&&"adjacency"===n&&(Iu(e).focus={edge:[t.dataIndex],node:[t.node1.dataIndex,t.node2.dataIndex]})});var g="circular"===t.get("layout")&&t.get(["circular","rotateLabel"]),v=c.getLayout("cx"),y=c.getLayout("cy");c.graph.eachNode(function(t){zN(t,g,v,y)}),this._firstRender=!1,o||this._renderThumbnail(t,n,this._symbolDraw,this._lineDraw)},e.prototype.dispose=function(){this.remove(),this._controller&&this._controller.dispose()},e.prototype._startForceLayoutIteration=function(t,e,n){var i=this,r=!1;!function o(){t.step(function(t){i.updateLayout(i._model),!t&&r||(r=!0,i._renderThumbnail(i._model,e,i._symbolDraw,i._lineDraw)),(i._layouting=!t)&&(n?i._layoutTimeout=setTimeout(o,16):o())})}()},e.prototype.__updateOnOwnRoam=function(t,e,n){var i=PP(e);this._active&&i&&(CP(this._mainGroup,2,i,null),XP(t)&&(this._updateNodeAndLinkScale(),cE(e.getGraph(),LN(e)),this._lineDraw.updateLayout(),n.updateLabelLayout()),this._updateThumbnailWindow())},e.prototype._updateNodeAndLinkScale=function(){var t=this._model,e=t.getData(),n=LN(t);e.eachItemGraphicEl(function(t,e){t&&t.setSymbolScale(n)})},e.prototype.updateLayout=function(t){this._active&&(cE(t.getGraph(),LN(t)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout())},e.prototype.remove=function(){this._active=!1,clearTimeout(this._layoutTimeout),this._layouting=!1,this._layoutTimeout=null,this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove(),this._controller&&this._controller.disable()},e.prototype._getThumbnailInfo=function(){var t=this._model,e=t.coordinateSystem;if("view"===e.type){var n=function(t){if(t)return hE(t).bridge}(t);if(n)return{bridge:n,coordSys:e}}},e.prototype._updateThumbnailWindow=function(){var t=this._getThumbnailInfo();t&&t.bridge.updateWindow(rP(null,t.coordSys),this._api)},e.prototype._renderThumbnail=function(t,e,n,i){var r=this._getThumbnailInfo();if(r){var o=new vo,a=n.group.children(),s=i.group.children(),l=new vo,u=new vo;o.add(u),o.add(l);for(var c=0;c "),value:i.value,noValue:null==i.value})}return Ty("nameValue",{name:i.name,value:i.value,noValue:null==i.value})},e.prototype.getDataParams=function(e,n){var i=t.prototype.getDataParams.call(this,e,n);if("node"===n){var r=this.getData(),o=this.getGraph().getNodeByIndex(e);if(null==i.name&&(i.name=r.getName(e)),null==i.value){var a=o.getLayout().value;i.value=a}}return i},e.type="series."+vE,e.defaultOption={z:2,coordinateSystem:"none",legendHoverLink:!0,colorBy:"data",left:0,top:0,right:0,bottom:0,width:null,height:null,center:["50%","50%"],radius:["70%","80%"],clockwise:!0,startAngle:90,endAngle:"auto",minAngle:0,padAngle:3,itemStyle:{borderRadius:[0,0,5,5]},lineStyle:{width:0,color:"source",opacity:.2},label:{show:!0,position:"outside",distance:5},emphasis:{focus:"adjacency",lineStyle:{opacity:.5}}},e}(Hy),mE=function(t){function e(e,n,i){var r=t.call(this)||this;Iu(r).dataType="node",r.z2=2;var o=new du;return r.setTextContent(o),r.updateData(e,n,i,!0),r}return n(e,t),e.prototype.updateData=function(t,e,n,i){var r=this,o=t.graph.getNodeByIndex(e),a=t.hostModel,s=o.getModel(),l=s.getModel("emphasis"),u=t.getItemLayout(e),c=k(eA(s.getModel("itemStyle"),u,!0),u),h=this;if(isNaN(c.startAngle))h.setShape(c);else{i?h.setShape(c):rd(h,{shape:c},a,e);var d=k(eA(s.getModel("itemStyle"),u,!0),u);r.setShape(d),r.useStyle(t.getItemVisual(e,"style")),Rc(r,s),this._updateLabel(a,s,o),t.setItemGraphicEl(e,h),Rc(h,s,"itemStyle");var p=l.get("focus");kc(this,"adjacency"===p?o.getAdjacentDataIndices():p,l.get("blurScope"),l.get("disabled"))}},e.prototype._updateLabel=function(t,e,n){var i=this.getTextContent(),r=n.getLayout(),o=(r.startAngle+r.endAngle)/2,a=Math.cos(o),s=Math.sin(o),l=e.getModel("label");i.ignore=!l.get("show");var u=ap(e),c=n.getVisual("style");op(i,u,{labelFetcher:{getFormattedLabel:function(n,i,r,o,a,s){return t.getFormattedLabel(n,i,"node",o,st(a,u.normal&&u.normal.get("formatter"),e.get("name")),s)}},labelDataIndex:n.dataIndex,defaultText:n.dataIndex+"",inheritColor:c.fill,defaultOpacity:c.opacity,defaultOutsidePosition:"startArc"});var h,d=l.get("position")||"outside",p=l.get("distance")||0;h="outside"===d?r.r+p:(r.r+r.r0)/2,this.textConfig={inside:"outside"!==d};var f="outside"!==d?l.get("align")||"center":a>0?"left":"right",g="outside"!==d?l.get("verticalAlign")||"middle":s>0?"top":"bottom";i.attr({x:a*h+r.cx,y:s*h+r.cy,rotation:0,style:{align:f,verticalAlign:g}})},e}(Sh),xE=function(t){function e(e,n,i,r){var o=t.call(this)||this;return Iu(o).dataType="edge",o.updateData(e,n,i,r,!0),o}return n(e,t),e.prototype.buildPath=function(t,e){t.moveTo(e.s1[0],e.s1[1]);var n=.7,i=e.clockwise;t.arc(e.cx,e.cy,e.r,e.sStartAngle,e.sEndAngle,!i),t.bezierCurveTo((e.cx-e.s2[0])*n+e.s2[0],(e.cy-e.s2[1])*n+e.s2[1],(e.cx-e.t1[0])*n+e.t1[0],(e.cy-e.t1[1])*n+e.t1[1],e.t1[0],e.t1[1]),t.arc(e.cx,e.cy,e.r,e.tStartAngle,e.tEndAngle,!i),t.bezierCurveTo((e.cx-e.t2[0])*n+e.t2[0],(e.cy-e.t2[1])*n+e.t2[1],(e.cx-e.s1[0])*n+e.s1[0],(e.cy-e.s1[1])*n+e.s1[1],e.s1[0],e.s1[1]),t.closePath()},e.prototype.updateData=function(t,e,n,i,r){var o=t.hostModel,a=e.graph.getEdgeByIndex(n),s=a.getLayout(),l=a.node1.getModel(),u=e.getItemModel(a.dataIndex),c=u.getModel("lineStyle"),h=u.getModel("emphasis"),d=h.get("focus"),p=k(eA(l.getModel("itemStyle"),s,!0),s),f=this;isNaN(p.sStartAngle)||isNaN(p.tStartAngle)?f.setShape(p):(r?(f.setShape(p),_E(f,a,t,c)):(cd(f),_E(f,a,t,c),rd(f,{shape:p},o,n)),kc(this,"adjacency"===d?a.getAdjacentDataIndices():d,h.get("blurScope"),h.get("disabled")),Rc(f,u,"lineStyle"),e.setItemGraphicEl(a.dataIndex,f))},e}(Kl);function _E(t,e,n,i){var r=e.node1,o=e.node2,a=t.style;switch(t.setStyle(i.getLineStyle()),i.get("color")){case"source":a.fill=n.getItemVisual(r.dataIndex,"style").fill,a.decal=r.getVisual("style").decal;break;case"target":a.fill=n.getItemVisual(o.dataIndex,"style").fill,a.decal=o.getVisual("style").decal;break;case"gradient":var s=n.getItemVisual(r.dataIndex,"style").fill,l=n.getItemVisual(o.dataIndex,"style").fill;if(j(s)&&j(l)){var u=t.shape,c=(u.s1[0]+u.s2[0])/2,h=(u.s1[1]+u.s2[1])/2,d=(u.t1[0]+u.t2[0])/2,p=(u.t1[1]+u.t2[1])/2;a.fill=new Hh(c,h,d,p,[{offset:0,color:s},{offset:1,color:l}],!0)}}}var bE=Math.PI/180,wE=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=vE,e}return n(e,t),e.prototype.init=function(t,e){},e.prototype.render=function(t,e,n){var i=t.getData(),r=this._data,o=this.group,a=-t.get("startAngle")*bE;if(i.diff(r).add(function(t){if(i.getItemLayout(t)){var e=new mE(i,t,a);Iu(e).dataIndex=t,o.add(e)}}).update(function(e,n){var s=r.getItemGraphicEl(n);i.getItemLayout(e)?(s?s.updateData(i,e,a):s=new mE(i,e,a),o.add(s)):s&&ud(s,t,n)}).remove(function(e){var n=r.getItemGraphicEl(e);n&&ud(n,t,e)}).execute(),!r){var s=t.get("center");this.group.scaleX=.01,this.group.scaleY=.01,this.group.originX=Vo(s[0],n.getWidth()),this.group.originY=Vo(s[1],n.getHeight()),od(this.group,{scaleX:1,scaleY:1},t)}this._data=i,this.renderEdges(t,a)},e.prototype.renderEdges=function(t,e){var n=t.getData(),i=t.getEdgeData(),r=this._edgeData,o=this.group;i.diff(r).add(function(t){var r=new xE(n,i,t,e);Iu(r).dataIndex=t,o.add(r)}).update(function(t,a){var s=r.getItemGraphicEl(a);s.updateData(n,i,t,e),o.add(s)}).remove(function(e){var n=r.getItemGraphicEl(e);n&&ud(n,t,e)}).execute(),this._edgeData=i},e.prototype.dispose=function(){},e.type=vE,e}(tm),SE=Math.PI/180,ME=os(vE,function(t,e){t.eachSeriesByType(vE,function(t){!function(t,e){var n=t.getData(),i=n.graph,r=t.getEdgeData();if(!r.count())return;var o=$f(t,e),a=o.cx,s=o.cy,l=o.r,u=o.r0,c=Math.max((t.get("padAngle")||0)*SE,0),h=Math.max((t.get("minAngle")||0)*SE,0),d=-t.get("startAngle")*SE,p=d+2*Math.PI,f=t.get("clockwise"),g=f?1:-1,v=[d,p];Dl(v,!f);var y=v[0],m=v[1]-y,x=0===n.getSum("value")&&0===r.getSum("value"),_=[],b=0;i.eachEdge(function(t){var e=x?1:t.getValue("value");x&&(e>0||h)&&(b+=2);var n=t.node1.dataIndex,i=t.node2.dataIndex;_[n]=(_[n]||0)+e,_[i]=(_[i]||0)+e});var w=0;if(i.eachNode(function(t){var e=t.getValue("value");isNaN(e)||(_[t.dataIndex]=Math.max(e,_[t.dataIndex]||0)),!x&&(_[t.dataIndex]>0||h)&&b++,w+=_[t.dataIndex]||0}),0===b||0===w)return;c*b>=Math.abs(m)&&(c=Math.max(0,(Math.abs(m)-h*b)/b));(c+h)*b>=Math.abs(m)&&(h=(Math.abs(m)-c*b)/b);var S=(m-c*b*g)/w,M=0,I=0,T=0;i.eachNode(function(t){var e=_[t.dataIndex]||0,n=S*(w?e:1)*g;Math.abs(n)I){var D=M/I;i.eachNode(function(t){var e=t.getLayout().angle;Math.abs(e)>=h?t.setLayout({angle:e*D,ratio:D},!0):t.setLayout({angle:h,ratio:0===h?1:e/h},!0)})}else i.eachNode(function(t){if(!C){var e=t.getLayout().angle;e-Math.min(e/T,1)*Mh&&h>0){var n=C?1:Math.min(e/T,1),i=e-h,r=Math.min(i,Math.min(A,M*n));A-=r,t.setLayout({angle:e-r,ratio:(e-r)/e},!0)}else h>0&&t.setLayout({angle:h,ratio:0===e?1:h/e},!0)}});var k=y,L=[];i.eachNode(function(t){var e=Math.max(t.getLayout().angle,h);t.setLayout({cx:a,cy:s,r0:u,r:l,startAngle:k,endAngle:k+e*g,clockwise:f},!0),L[t.dataIndex]=k,k+=(e+c)*g}),i.eachEdge(function(t){var e=x?1:t.getValue("value"),n=S*(w?e:1)*g,i=t.node1.dataIndex,r=L[i]||0,o=r+Math.abs((t.node1.getLayout().ratio||1)*n)*g,l=[a+u*Math.cos(r),s+u*Math.sin(r)],c=[a+u*Math.cos(o),s+u*Math.sin(o)],h=t.node2.dataIndex,d=L[h]||0,p=d+Math.abs((t.node2.getLayout().ratio||1)*n)*g,v=[a+u*Math.cos(d),s+u*Math.sin(d)],y=[a+u*Math.cos(p),s+u*Math.sin(p)];t.setLayout({s1:l,s2:c,sStartAngle:r,sEndAngle:o,t1:v,t2:y,tStartAngle:d,tEndAngle:p,cx:a,cy:s,r:u,value:e,clockwise:f}),L[i]=o,L[h]=p})}(t,e)})});var IE=function(){this.angle=0,this.width=10,this.r=10,this.x=0,this.y=0},TE=function(t){function e(e){var n=t.call(this,e)||this;return n.type="pointer",n}return n(e,t),e.prototype.getDefaultShape=function(){return new IE},e.prototype.buildPath=function(t,e){var n=Math.cos,i=Math.sin,r=e.r,o=e.width,a=e.angle,s=e.x-n(a)*o*(o>=r/3?1:2),l=e.y-i(a)*o*(o>=r/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+n(a)*o,e.y+i(a)*o),t.lineTo(e.x+n(e.angle)*r,e.y+i(e.angle)*r),t.lineTo(e.x-n(a)*o,e.y-i(a)*o),t.lineTo(s,l)},e}(Kl);function CE(t,e){var n=null==t?"":t+"";return e&&(j(e)?n=e.replace("{value}",n):Z(e)&&(n=e(t))),n}var DE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeAll();var i=t.get(["axisLine","lineStyle","color"]),r=function(t,e){var n=t.get("center"),i=e.getWidth(),r=e.getHeight(),o=Math.min(i,r);return{cx:Vo(n[0],e.getWidth()),cy:Vo(n[1],e.getHeight()),r:Vo(t.get("radius"),o/2)}}(t,n);this._renderMain(t,e,n,i,r),this._data=t.getData()},e.prototype.dispose=function(){},e.prototype._renderMain=function(t,e,n,i,r){var o=this.group,a=t.get("clockwise"),s=-t.get("startAngle")/180*Math.PI,l=-t.get("endAngle")/180*Math.PI,u=t.getModel("axisLine"),c=u.get("roundCap")?JD:Sh,h=u.get("show"),d=u.getModel("lineStyle"),p=d.get("width"),f=[s,l];Dl(f,!a);for(var g=(l=f[1])-(s=f[0]),v=s,y=[],m=0;h&&m=t&&(0===e?0:i[e-1][0])Math.PI/2&&(B+=Math.PI):"tangential"===z?B=-M-Math.PI/2:K(z)&&(B=z*Math.PI/180),0===B?h.add(new du({style:sp(x,{text:O,x:N,y:E,verticalAlign:c<-.8?"top":c>.8?"bottom":"middle",align:u<-.4?"left":u>.4?"right":"center"},{inheritColor:R}),silent:!0})):h.add(new du({style:sp(x,{text:O,x:N,y:E,verticalAlign:"middle",align:"center"},{inheritColor:R}),silent:!0,originX:N,originY:E,rotation:B}))}if(m.get("show")&&k!==_){P=(P=m.get("distance"))?P+l:l;for(var V=0;V<=b;V++){u=Math.cos(M),c=Math.sin(M);var G=new Oh({shape:{x1:u*(f-P)+d,y1:c*(f-P)+p,x2:u*(f-S-P)+d,y2:c*(f-S-P)+p},silent:!0,style:D});"auto"===D.stroke&&G.setStyle({stroke:i((k+V/b)/_)}),h.add(G),M+=T}M-=T}else M+=I}},e.prototype._renderPointer=function(t,e,n,i,r,o,a,s,l){var u=this.group,c=this._data,h=this._progressEls,d=[],p=t.get(["pointer","show"]),f=t.getModel("progress"),g=f.get("show"),v=t.getData(),y=v.mapDimension("value"),m=+t.get("min"),x=+t.get("max"),_=[m,x],b=[o,a];function w(e,n){var i,o=v.getItemModel(e).getModel("pointer"),a=Vo(o.get("width"),r.r),s=Vo(o.get("length"),r.r),l=t.get(["pointer","icon"]),u=o.get("offsetCenter"),c=Vo(u[0],r.r),h=Vo(u[1],r.r),d=o.get("keepAspect");return(i=l?xx(l,c-a/2,h-s,a,s,null,d):new TE({shape:{angle:-Math.PI/2,width:a,r:s,x:c,y:h}})).rotation=-(n+Math.PI/2),i.x=r.cx,i.y=r.cy,i}function S(t,e){var n=f.get("roundCap")?JD:Sh,i=f.get("overlap"),a=i?f.get("width"):l/v.count(),u=i?r.r-a:r.r-(t+1)*a,c=i?r.r:r.r-t*a,h=new n({shape:{startAngle:o,endAngle:e,cx:r.cx,cy:r.cy,clockwise:s,r0:u,r:c}});return i&&(h.z2=Bo(v.get(y,t),[m,x],[100,0],!0)),h}(g||p)&&(v.diff(c).add(function(e){var n=v.get(y,e);if(p){var i=w(e,o);od(i,{rotation:-((isNaN(+n)?b[0]:Bo(n,_,b,!0))+Math.PI/2)},t),u.add(i),v.setItemGraphicEl(e,i)}if(g){var r=S(e,o),a=f.get("clip");od(r,{shape:{endAngle:Bo(n,_,b,a)}},t),u.add(r),Tu(t.seriesIndex,v.dataType,e,r),d[e]=r}}).update(function(e,n){var i=v.get(y,e);if(p){var r=c.getItemGraphicEl(n),a=r?r.rotation:o,s=w(e,a);s.rotation=a,rd(s,{rotation:-((isNaN(+i)?b[0]:Bo(i,_,b,!0))+Math.PI/2)},t),u.add(s),v.setItemGraphicEl(e,s)}if(g){var l=h[n],m=S(e,l?l.shape.endAngle:o),x=f.get("clip");rd(m,{shape:{endAngle:Bo(i,_,b,x)}},t),u.add(m),Tu(t.seriesIndex,v.dataType,e,m),d[e]=m}}).execute(),v.each(function(t){var e=v.getItemModel(t),n=e.getModel("emphasis"),r=n.get("focus"),o=n.get("blurScope"),a=n.get("disabled"),s=i(Bo(v.get(y,t),_,[0,1],!0));if(p){var l=v.getItemGraphicEl(t),u=v.getItemVisual(t,"style"),c=u.fill;if(l instanceof eu){var h=l.style;l.useStyle(k({image:h.image,x:h.x,y:h.y,width:h.width,height:h.height},u))}else l.useStyle(u),"pointer"!==l.type&&l.setColor(c);l.setStyle(e.getModel(["pointer","itemStyle"]).getItemStyle()),"auto"===l.style.fill&&l.setStyle("fill",s),l.z2EmphasisLift=0,Rc(l,e),kc(l,r,o,a)}if(g){var f=d[t];f.useStyle(v.getItemVisual(t,"style")),f.setStyle(e.getModel(["progress","itemStyle"]).getItemStyle()),"auto"===f.style.fill&&f.setStyle("fill",s),f.z2EmphasisLift=0,Rc(f,e),kc(f,r,o,a)}}),this._progressEls=d)},e.prototype._renderAnchor=function(t,e){var n=t.getModel("anchor");if(n.get("show")){var i=n.get("size"),r=n.get("icon"),o=n.get("offsetCenter"),a=n.get("keepAspect"),s=xx(r,e.cx-i/2+Vo(o[0],e.r),e.cy-i/2+Vo(o[1],e.r),i,i,null,a);s.z2=n.get("showAbove")?1:0,s.setStyle(n.getModel("itemStyle").getItemStyle()),this.group.add(s)}},e.prototype._renderTitleAndDetail=function(t,e,n,i,r){var o=this,a=t.getData(),s=a.mapDimension("value"),l=+t.get("min"),u=+t.get("max"),c=new vo,h=[],d=[],p=t.isAnimationEnabled(),f=t.get(["pointer","showAbove"]);a.diff(this._data).add(function(t){h[t]=new du({silent:!0}),d[t]=new du({silent:!0})}).update(function(t,e){h[t]=o._titleEls[e],d[t]=o._detailEls[e]}).execute(),a.each(function(e){var n=a.getItemModel(e),o=a.get(s,e),g=new vo,v=i(Bo(o,[l,u],[0,1],!0)),y=n.getModel("title");if(y.get("show")){var m=y.get("offsetCenter"),x=r.cx+Vo(m[0],r.r),_=r.cy+Vo(m[1],r.r);(D=h[e]).attr({z2:f?0:2,style:sp(y,{x:x,y:_,text:a.getName(e),align:"center",verticalAlign:"middle"},{inheritColor:v})}),g.add(D)}var b=n.getModel("detail");if(b.get("show")){var w=b.get("offsetCenter"),S=r.cx+Vo(w[0],r.r),M=r.cy+Vo(w[1],r.r),I=Vo(b.get("width"),r.r),T=Vo(b.get("height"),r.r),C=t.get(["progress","show"])?a.getItemVisual(e,"style").fill:v,D=d[e],A=b.get("formatter");D.attr({z2:f?0:2,style:sp(b,{x:S,y:M,text:CE(o,A),width:isNaN(I)?null:I,height:isNaN(T)?null:T,align:"center",verticalAlign:"middle"},{inheritColor:C})}),gp(D,{normal:b},o,function(t){return CE(t,A)}),p&&vp(D,e,a,t,{getFormattedLabel:function(t,e,n,i,r,a){return CE(a?a.interpolatedValue:o,A)}}),g.add(D)}c.add(g)}),this.group.add(c),this._titleEls=h,this._detailEls=d},e.type="gauge",e}(tm),AE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="itemStyle",n}return n(e,t),e.prototype.getInitialData=function(t,e){return bA(this,["value"])},e.type="series.gauge",e.defaultOption={z:2,colorBy:"data",center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,roundCap:!1,lineStyle:{color:[[1,ug.color.neutral10]],width:10}},progress:{show:!1,overlap:!0,width:10,roundCap:!1,clip:!0},splitLine:{show:!0,length:10,distance:10,lineStyle:{color:ug.color.axisTick,width:3,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:6,distance:10,lineStyle:{color:ug.color.axisTickMinor,width:1,type:"solid"}},axisLabel:{show:!0,distance:15,color:ug.color.axisLabel,fontSize:12,rotate:0},pointer:{icon:null,offsetCenter:[0,0],show:!0,showAbove:!0,length:"60%",width:6,keepAspect:!1},anchor:{show:!1,showAbove:!1,size:6,icon:"circle",offsetCenter:[0,0],keepAspect:!1,itemStyle:{color:ug.color.neutral00,borderWidth:0,borderColor:ug.color.theme[0]}},title:{show:!0,offsetCenter:[0,"20%"],color:ug.color.secondary,fontSize:16,valueAnimation:!1},detail:{show:!0,backgroundColor:ug.color.transparent,borderWidth:0,borderColor:ug.color.neutral40,width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:ug.color.primary,fontSize:30,fontWeight:"bold",lineHeight:30,valueAnimation:!1}},e}(Hy);var kE="funnel",LE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new SA(U(this.getData,this),U(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.getInitialData=function(t,e){return bA(this,{coordDimensions:["value"],encodeDefaulter:Y(Sg,this)})},e.prototype._defaultLabelLine=function(t){ba(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.prototype.getDataParams=function(e){var n=this.getData(),i=t.prototype.getDataParams.call(this,e),r=n.mapDimension("value"),o=n.getSum(r);return i.percent=o?+(n.get(r,e)/o*100).toFixed(2):0,i.$vars.push("percent"),i},e.type="series."+kE,e.defaultOption={coordinateSystemUsage:"box",z:2,legendHoverLink:!0,colorBy:"data",left:80,top:60,right:80,bottom:65,minSize:"0%",maxSize:"100%",sort:"descending",orient:"vertical",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1}},itemStyle:{borderColor:ug.color.neutral00,borderWidth:1},emphasis:{label:{show:!0}},select:{itemStyle:{borderColor:ug.color.primary}}},e}(Hy),PE=["itemStyle","opacity"],OE=function(t){function e(e,n){var i=t.call(this)||this,r=i,o=new kh,a=new du;return r.setTextContent(a),i.setTextGuideLine(o),i.updateData(e,n,!0),i}return n(e,t),e.prototype.updateData=function(t,e,n){var i=this,r=t.hostModel,o=t.getItemModel(e),a=t.getItemLayout(e),s=o.getModel("emphasis"),l=o.get(PE);l=null==l?1:l,n||cd(i),i.useStyle(t.getItemVisual(e,"style")),i.style.lineJoin="round",n?(i.setShape({points:a.points}),i.style.opacity=0,od(i,{style:{opacity:l}},r,e)):rd(i,{style:{opacity:l},shape:{points:a.points}},r,e),Rc(i,o),this._updateLabel(t,e),kc(this,s.get("focus"),s.get("blurScope"),s.get("disabled"))},e.prototype._updateLabel=function(t,e){var n=this,i=this.getTextGuideLine(),r=n.getTextContent(),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e).label,l=t.getItemVisual(e,"style"),u=l.fill;op(r,ap(a),{labelFetcher:t.hostModel,labelDataIndex:e,defaultOpacity:l.opacity,defaultText:t.getName(e)},{normal:{align:s.textAlign,verticalAlign:s.verticalAlign}});var c="inherit"===a.getModel("label").get("color")?u:null;n.setTextConfig({local:!0,inside:!!s.inside,insideStroke:c,outsideFill:c});var h=s.linePoints;i.setShape({points:h}),n.textGuideLineConfig={anchor:h?new Pe(h[0][0],h[0][1]):null},rd(r,{style:{x:s.x,y:s.y}},o,e),r.attr({rotation:s.rotation,originX:s.x,originY:s.y,z2:10}),ZM(n,jM(a),{stroke:u})},e}(Dh),RE=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=kE,e.ignoreLabelLineUpdate=!0,e}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this._data,o=this.group;i.diff(r).add(function(t){var e=new OE(i,t);i.setItemGraphicEl(t,e),o.add(e)}).update(function(t,e){var n=r.getItemGraphicEl(e);n.updateData(i,t),o.add(n),i.setItemGraphicEl(t,n)}).remove(function(e){ud(r.getItemGraphicEl(e),t,e)}).execute(),this._data=i},e.prototype.remove=function(){this.group.removeAll(),this._data=null},e.prototype.dispose=function(){},e.type=kE,e}(tm);var NE=os(kE,function(t,e){t.eachSeriesByType(kE,function(t){var n=t.getData(),i=n.mapDimension("value"),r=t.get("sort"),o=eg(t,e),a=Jf(t.getBoxLayoutParams(),o.refContainer),s=EE(t),l=a.width,u=a.height,c=function(t,e){for(var n=t.mapDimension("value"),i=t.mapArray(n,function(t){return t}),r=[],o="ascending"===e,a=0,s=t.count();a-1&&(l="left"),e&&R(["left","right"],l)>-1&&(l="bottom")),"left"===l?(p=(h[3][0]+h[0][0])/2,f=(h[3][1]+h[0][1])/2,r=(g=p-y)-5,i="right"):"right"===l?(p=(h[1][0]+h[2][0])/2,f=(h[1][1]+h[2][1])/2,r=(g=p+y)+5,i="left"):"top"===l?(p=(h[3][0]+h[0][0])/2,o=(v=(f=(h[3][1]+h[0][1])/2)-y)-5,i="center"):"bottom"===l?(p=(h[1][0]+h[2][0])/2,o=(v=(f=(h[1][1]+h[2][1])/2)+y)+5,i="center"):"rightTop"===l?(p=e?h[3][0]:h[1][0],f=e?h[3][1]:h[1][1],e?(o=(v=f-y)-5,i="center"):(r=(g=p+y)+5,i="top")):"rightBottom"===l?(p=h[2][0],f=h[2][1],e?(o=(v=f+y)+5,i="center"):(r=(g=p+y)+5,i="bottom")):"leftTop"===l?(p=h[0][0],f=e?h[0][1]:h[1][1],e?(o=(v=f-y)-5,i="center"):(r=(g=p-y)-5,i="right")):"leftBottom"===l?(p=e?h[1][0]:h[3][0],f=e?h[1][1]:h[2][1],e?(o=(v=f+y)+5,i="center"):(r=(g=p-y)-5,i="right")):(p=(h[1][0]+h[2][0])/2,f=(h[1][1]+h[2][1])/2,e?(o=(v=f+y)+5,i="center"):(r=(g=p+y)+5,i="left")),e?r=g=p:o=v=f,a=[[p,f],[g,v]]}c.label={linePoints:a,x:r,y:o,verticalAlign:"middle",textAlign:i,inside:d}})}(n)})});function EE(t){return"horizontal"===t.get("orient")}var zE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._dataGroup=new vo,n._initialized=!1,n}return n(e,t),e.prototype.init=function(){this.group.add(this._dataGroup)},e.prototype.render=function(t,e,n,i){var r=this._dataGroup;this._progressiveEls=[],r.removeAll();var o=t.getData(),a=this._data,s=t.coordinateSystem,l=s.dimensions,u=GE(t);if(o.diff(a).add(function(t){FE(VE(o,r,t,l,s),o,t,u)}).update(function(e,n){var i=a.getItemGraphicEl(n);r.add(i);var c=BE(o,e,l,s);o.setItemGraphicEl(e,i),rd(i,{shape:{points:c}},t,e),cd(i),FE(i,o,e,u)}).remove(function(t){var e=a.getItemGraphicEl(t);r.remove(e)}).execute(),!this._initialized){this._initialized=!0;var c=function(t,e,n){var i=t.model,r=t.getRect(),o=new lu({shape:{x:r.x,y:r.y,width:r.width,height:r.height}}),a="horizontal"===i.get("layout")?"width":"height";return o.setShape(a,0),od(o,{shape:{width:r.width,height:r.height}},e,n),o}(s,t,function(){setTimeout(function(){r.removeClipPath()})});r.setClipPath(c)}this._data=o},e.prototype.incrementalPrepareRender=function(t,e,n){this._initialized=!0,this._data=null,this._dataGroup.removeAll()},e.prototype.incrementalRender=function(t,e,n){for(var i=e.getData(),r=e.coordinateSystem,o=this._progressiveEls=[],a=t.start;a5)return;var i=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==i.behavior&&this._dispatchExpand({axisExpandWindow:i.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&KE(this,"mousemove")){var e=this._model,n=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),i=n.behavior;"jump"===i&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===i?null:{axisExpandWindow:n.axisExpandWindow,animation:"jump"===i?null:{duration:0}})}}};function KE(t,e){var n=t._model;return n.get("axisExpandable")&&n.get("axisExpandTriggerOn")===e}var $E="parallel",JE=$E,QE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){t.prototype.init.apply(this,arguments),this.mergeOption({})},e.prototype.mergeOption=function(t){var e=this.option;t&&D(e,t,!0),this._initDimensions()},e.prototype.contains=function(t,e){var n=t.get("parallelIndex");return null!=n&&e.getComponent("parallel",n)===this},e.prototype.setAxisExpand=function(t){B(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])},this)},e.prototype._initDimensions=function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[];B(F(this.ecModel.queryComponents({mainType:"parallelAxis"}),function(t){return(t.get("parallelIndex")||0)===this.componentIndex},this),function(n){t.push("dim"+n.get("dim")),e.push(n.componentIndex)})},e.type=JE,e.dependencies=["parallelAxis"],e.layoutMode="box",e.defaultOption={z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},e}(lg),tz=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.type=r||"value",a.axisIndex=o,a}return n(e,t),e.prototype.isHorizontal=function(){return"horizontal"!==this.coordinateSystem.getModel().get("layout")},e}(SM);function ez(t,e,n,i,r,o){t=t||0;var a=jo(n[1],-n[0]);if(null!=r&&(r=iz(r,[0,a])),null!=o&&(o=Math.max(o,null!=r?r:0)),"all"===i){var s=Math.abs(jo(e[1],-e[0]));s=iz(s,[0,a]),r=o=iz(s,[r,o]),i=0}e[0]=iz(e[0],n),e[1]=iz(e[1],n);var l=nz(e,i);e[i]+=t;var u,c=r||0,h=n.slice();return l.sign<0?h[0]=jo(h[0],c):h[1]=jo(h[1],-c),e[i]=iz(e[i],h),u=nz(e,i),null!=r&&(u.sign!==l.sign||u.spano&&(e[1-i]=jo(e[i],u.sign*o)),e}function nz(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function iz(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}var rz=function(){function t(t,e,n){this.type=$E,this._axesMap=mt(),this._axesLayout={},this.dimensions=t.dimensions,this._model=t,this._init(t,e,n)}return t.prototype._init=function(t,e,n){var i=t.dimensions,r=t.parallelAxisIndex;B(i,function(t,n){var i=r[n],o=e.getComponent("parallelAxis",i),a=Hw(o),s=this._axesMap.set(t,new tz(t,Ww(o,a,!1),[0,0],a,i));s.onBand=eS(s.scale,o),s.inverse=o.get("inverse"),o.axis=s,s.model=o,s.coordinateSystem=o.coordinateSystem=this},this)},t.prototype.update=function(t,e){B(this.dimensions,function(t){var e=this._axesMap.get(t);CS(e,1),RS(e)},this)},t.prototype.containPoint=function(t){var e=this._makeLayoutInfo(),n=e.axisBase,i=e.layoutBase,r=e.pixelDimIndex,o=t[1-r],a=t[r];return o>=n&&o<=n+e.axisLength&&a>=i&&a<=i+e.layoutLength},t.prototype.getModel=function(){return this._model},t.prototype.resize=function(t,e){var n=eg(t,e).refContainer;this._rect=Jf(t.getBoxLayoutParams(),n),this._layoutAxes()},t.prototype.getRect=function(){return this._rect},t.prototype._makeLayoutInfo=function(){var t,e=this._model,n=this._rect,i=["x","y"],r=["width","height"],o=e.get("layout"),a="horizontal"===o?0:1,s=n[r[a]],l=[0,s],u=this.dimensions.length,c=oz(e.get("axisExpandWidth"),l),h=oz(e.get("axisExpandCount")||0,[0,u]),d=e.get("axisExpandable")&&u>3&&u>h&&h>1&&c>0&&s>0,p=e.get("axisExpandWindow");p?(t=oz(p[1]-p[0],l),p[1]=p[0]+t):(t=oz(c*(h-1),l),(p=[c*(e.get("axisExpandCenter")||Lo(u/2))-t/2])[1]=p[0]+t);var f=(s-t)/(u-h);f<3&&(f=0);var g=[Lo(Ho(p[0]/c,1))+1,Po(Ho(p[1]/c,1))-1],v=f/c*p[0];return{layout:o,pixelDimIndex:a,layoutBase:n[i[a]],layoutLength:s,axisBase:n[i[1-a]],axisLength:n[r[1-a]],axisExpandable:d,axisExpandWidth:c,axisCollapseWidth:f,axisExpandWindow:p,axisCount:u,winInnerIndices:g,axisExpandWindow0Pos:v}},t.prototype._layoutAxes=function(){var t=this._rect,e=this._axesMap,n=this.dimensions,i=this._makeLayoutInfo(),r=i.layout;e.each(function(t){var e=[0,i.axisLength],n=t.inverse?1:0;t.setExtent(e[n],e[1-n])}),B(n,function(e,n){var o=(i.axisExpandable?sz:az)(n,i),a={horizontal:{x:o.position,y:i.axisLength},vertical:{x:0,y:o.position}},s={horizontal:Eo/2,vertical:0},l=[a[r].x+t.x,a[r].y+t.y],u=s[r],c=[1,0,0,1,0,0];Ce(c,c,u),Te(c,c,l),this._axesLayout[e]={position:l,rotation:u,transform:c,axisNameAvailableWidth:o.axisNameAvailableWidth,axisLabelShow:o.axisLabelShow,nameTruncateMaxWidth:o.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}},this)},t.prototype.getAxis=function(t){return this._axesMap.get(t)},t.prototype.dataToPoint=function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},t.prototype.eachActiveState=function(t,e,n,i){null==n&&(n=0),null==i&&(i=t.count());var r=this._axesMap,o=this.dimensions,a=[],s=[];B(o,function(e){a.push(t.mapDimension(e)),s.push(r.get(e).model)});for(var l=this.hasAxisBrushed(),u=n;ur*(1-c[0])?(l="jump",a=s-r*(1-c[2])):(a=s-r*c[1])>=0&&(a=s-r*(1-c[1]))<=0&&(a=0),(a*=e.axisExpandWidth/u)?ez(a,i,o,"all"):l="none";else{var d=i[1]-i[0];(i=[Do(0,o[1]*s/d-d/2)])[1]=Co(o[1],i[0]+d),i[0]=i[1]-d}return{axisExpandWindow:i,behavior:l}},t}();function oz(t,e){return Co(Do(t,e[0]),e[1])}function az(t,e){var n=e.layoutLength/(e.axisCount-1);return{position:n*t,axisNameAvailableWidth:n,axisLabelShow:!0}}function sz(t,e){var n,i,r=e.layoutLength,o=e.axisExpandWidth,a=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,c=!1;return t=0;n--)Wo(e[n])},e.prototype.getActiveState=function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(+t))return"inactive";if(1===e.length){var n=e[0];if(n[0]<=t&&t<=n[1])return"active"}else for(var i=0,r=e.length;i6}(t)||o){if(a&&!o){"single"===s.brushMode&&Dz(t);var l=C(s);l.brushType=Yz(l.brushType,a),l.panelId=a===cz?null:a.panelId,o=t._creatingCover=_z(t,l),t._covers.push(o)}if(o){var u=jz[Yz(t._brushType,a)];o.__brushOption.range=u.getCreatingRange(Fz(t,o,t._track)),i&&(bz(t,o),u.updateCommon(t,o)),wz(t,o),r={isEnd:i}}}else i&&"single"===s.brushMode&&s.removeOnClick&&Tz(t,e,n)&&Dz(t)&&(r={isEnd:i,removeOnClick:!0});return r}function Yz(t,e){return"auto"===t?e.defaultBrushType:t}var Xz={mousedown:function(t){if(this._dragging)Zz(this,t);else if(!t.target||!t.target.draggable){Hz(t);var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);this._creatingCover=null,(this._creatingPanel=Tz(this,t,e))&&(this._dragging=!0,this._track=[e.slice()])}},mousemove:function(t){var e=t.offsetX,n=t.offsetY,i=this.group.transformCoordToLocal(e,n);if(function(t,e,n){if(t._brushType&&!function(t,e,n){var i=t._zr;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}(t,e.offsetX,e.offsetY)){var i=t._zr,r=t._covers,o=Tz(t,e,n);if(!t._dragging)for(var a=0;a=0&&(o[r[a].depth]=new kp(r[a],this,e));var s=vN(i,n,this,!0,function(t,e){t.wrapMethod("getItemModel",function(t,e){var n=t.parentModel,i=n.getData().getItemLayout(e);if(i){var r=i.depth,o=n.levelModels[r];o&&(t.parentModel=o)}return t}),e.wrapMethod("getItemModel",function(t,e){var n=t.parentModel,i=n.getGraph().getEdgeByIndex(e).node1.getLayout();if(i){var r=i.depth,o=n.levelModels[r];o&&(t.parentModel=o)}return t})});return s.data},e.prototype.setNodePosition=function(t,e){var n=(this.option.data||this.option.nodes)[t];n.localX=e[0],n.localY=e[1]},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.formatTooltip=function(t,e,n){function i(t){return isNaN(t)||null==t}if("edge"===n){var r=this.getDataParams(t,n),o=r.data,a=r.value;return Ty("nameValue",{name:o.source+" -- "+o.target,value:a,noValue:i(a)})}var s=this.getGraph().getNodeByIndex(t).getLayout().value,l=this.getDataParams(t,n).data.name;return Ty("nameValue",{name:null!=l?l+"":null,value:s,noValue:i(s)})},e.prototype.optionUpdated=function(){},e.prototype.getDataParams=function(e,n){var i=t.prototype.getDataParams.call(this,e,n);if(null==i.value&&"node"===n){var r=this.getGraph().getNodeByIndex(e).getLayout().value;i.value=r}return i},e.prototype.__ownRoamView=function(){return this.coordinateSystem},e.type="series."+rB,e.layoutMode="box",e.defaultOption={z:2,coordinateSystemUsage:"box",left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,layoutIterations:32,roam:!1,roamTrigger:"global",center:null,zoom:1,label:{show:!0,position:"right",fontSize:12},edgeLabel:{show:!1,fontSize:12},levels:[],nodeAlign:"justify",lineStyle:{color:ug.color.neutral50,opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},select:{itemStyle:{borderColor:ug.color.primary}},animationEasing:"linear",animationDuration:1e3},e}(Hy),aB=function(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.cpx1=0,this.cpy1=0,this.cpx2=0,this.cpy2=0,this.extent=0},sB=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new aB},e.prototype.buildPath=function(t,e){var n=e.extent;t.moveTo(e.x1,e.y1),t.bezierCurveTo(e.cpx1,e.cpy1,e.cpx2,e.cpy2,e.x2,e.y2),"vertical"===e.orient?(t.lineTo(e.x2+n,e.y2),t.bezierCurveTo(e.cpx2+n,e.cpy2,e.cpx1+n,e.cpy1,e.x1+n,e.y1)):(t.lineTo(e.x2,e.y2+n),t.bezierCurveTo(e.cpx2,e.cpy2+n,e.cpx1,e.cpy1+n,e.x1,e.y1+n)),t.closePath()},e.prototype.highlight=function(){vc(this)},e.prototype.downplay=function(){yc(this)},e}(Kl),lB=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type=rB,e._mainGroup=new vo,e}return n(e,t),e.prototype.init=function(t,e){this._controller=new uL(e.getZr()),this.group.add(this._mainGroup),this._firstRender=!0},e.prototype.render=function(t,e,n){var i=t.getGraph(),r=this._mainGroup,o=t.layoutInfo,a=o.width,s=o.height,l=t.getData(),u=t.getData("edge"),c=t.get("orient");r.removeAll(),r.x=o.x,r.y=o.y,this._updateViewCoordSys(t,n),FP(t,n,this._controller,HP(r),null),i.eachEdge(function(e){var n=new sB,i=Iu(n);i.dataIndex=e.dataIndex,i.seriesIndex=t.seriesIndex,i.dataType="edge";var o,l,h,d,p,f,g,v,y=e.getModel(),m=y.getModel("lineStyle"),x=m.get("curveness"),_=e.node1.getLayout(),b=e.node1.getModel(),w=b.get("localX"),S=b.get("localY"),M=e.node2.getLayout(),I=e.node2.getModel(),T=I.get("localX"),C=I.get("localY"),D=e.getLayout();n.shape.extent=Math.max(1,D.dy),n.shape.orient=c,"vertical"===c?(o=(null!=w?w*a:_.x)+D.sy,l=(null!=S?S*s:_.y)+_.dy,h=(null!=T?T*a:M.x)+D.ty,p=o,f=l*(1-x)+(d=null!=C?C*s:M.y)*x,g=h,v=l*x+d*(1-x)):(o=(null!=w?w*a:_.x)+_.dx,l=(null!=S?S*s:_.y)+D.sy,p=o*(1-x)+(h=null!=T?T*a:M.x)*x,f=l,g=o*x+h*(1-x),v=d=(null!=C?C*s:M.y)+D.ty),n.setShape({x1:o,y1:l,x2:h,y2:d,cpx1:p,cpy1:f,cpx2:g,cpy2:v}),n.useStyle(m.getItemStyle()),uB(n.style,c,e);var A=""+y.get("value"),k=ap(y,"edgeLabel");op(n,k,{labelFetcher:{getFormattedLabel:function(e,n,i,r,o,a){return t.getFormattedLabel(e,n,"edge",r,st(o,k.normal&&k.normal.get("formatter"),A),a)}},labelDataIndex:e.dataIndex,defaultText:A}),n.setTextConfig({position:"inside"});var L=y.getModel("emphasis");Rc(n,y,"lineStyle",function(t){var n=t.getItemStyle();return uB(n,c,e),n}),r.add(n),u.setItemGraphicEl(e.dataIndex,n);var P=L.get("focus");kc(n,"adjacency"===P?e.getAdjacentDataIndices():"trajectory"===P?e.getTrajectoryDataIndices():P,L.get("blurScope"),L.get("disabled"))}),i.eachNode(function(e){var n=e.getLayout(),i=e.getModel(),o=i.get("localX"),u=i.get("localY"),c=i.getModel("emphasis"),h=i.get(["itemStyle","borderRadius"])||0,d=new lu({shape:{x:null!=o?o*a:n.x,y:null!=u?u*s:n.y,width:n.dx,height:n.dy,r:h},style:i.getModel("itemStyle").getItemStyle(),z2:10});op(d,ap(i),{labelFetcher:{getFormattedLabel:function(e,n){return t.getFormattedLabel(e,n,"node")}},labelDataIndex:e.dataIndex,defaultText:e.id}),d.disableLabelAnimation=!0,d.setStyle("fill",e.getVisual("color")),d.setStyle("decal",e.getVisual("style").decal),Rc(d,i),r.add(d),l.setItemGraphicEl(e.dataIndex,d),Iu(d).dataType="node";var p=c.get("focus");kc(d,"adjacency"===p?e.getAdjacentDataIndices():"trajectory"===p?e.getTrajectoryDataIndices():p,c.get("blurScope"),c.get("disabled"))}),l.eachItemGraphicEl(function(e,i){l.getItemModel(i).get("draggable")&&(e.drift=function(e,r){this.shape.x+=e,this.shape.y+=r,this.dirty(),n.dispatchAction({type:"dragNode",seriesId:t.id,dataIndex:l.getRawIndex(i),localX:this.shape.x/a,localY:this.shape.y/s})},e.draggable=!0,e.cursor="move")}),!this._data&&t.isAnimationEnabled()&&r.setClipPath(function(t,e,n){var i=new lu({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return od(i,{shape:{width:t.width+20}},e,n),i}(r.getBoundingRect(),t,function(){r.removeClipPath()})),this._data=t.getData(),this._firstRender=!1},e.prototype.__updateOnOwnRoam=function(t,e,n){CP(this.group,2,e.coordinateSystem,null)},e.prototype.dispose=function(){this._controller&&this._controller.dispose()},e.prototype._updateViewCoordSys=function(t,e){var n=t.layoutInfo,i=t.coordinateSystem=ZP(t,e,n.x,n.y,n.width,n.height);CP(this.group,2,i,this._firstRender?null:t)},e.type=rB,e}(tm);function uB(t,e,n){switch(t.fill){case"source":t.fill=n.node1.getVisual("color"),t.decal=n.node1.getVisual("style").decal;break;case"target":t.fill=n.node2.getVisual("color"),t.decal=n.node2.getVisual("style").decal;break;case"gradient":var i=n.node1.getVisual("color"),r=n.node2.getVisual("color");j(i)&&j(r)&&(t.fill=new Hh(0,0,+("horizontal"===e),+("vertical"===e),[{color:i,offset:0},{color:r,offset:1}]))}}var cB=os(rB,function(t,e){t.eachSeriesByType(rB,function(t){var n=t.get("nodeWidth"),i=t.get("nodeGap"),r=eg(t,e).refContainer,o=Jf(t.getBoxLayoutParams(),r);t.layoutInfo=o;var a=o.width,s=o.height,l=t.getGraph(),u=l.nodes,c=l.edges;!function(t){B(t,function(t){var e=_B(t.outEdges,xB),n=_B(t.inEdges,xB),i=t.getValue()||0,r=Math.max(e,n,i);t.setLayout({value:r},!0)})}(u),function(t,e,n,i,r,o,a,s,l){(function(t,e,n,i,r,o,a){for(var s=[],l=[],u=[],c=[],h=0,d=0;d=0;y&&v.depth>p&&(p=v.depth),g.setLayout({depth:y?v.depth:h},!0),"vertical"===o?g.setLayout({dy:n},!0):g.setLayout({dx:n},!0);for(var m=0;mh-1?p:h-1;a&&"left"!==a&&function(t,e,n,i){if("right"===e){for(var r=[],o=t,a=0;o.length;){for(var s=0;s0;o--)pB(s,l*=.99,a),dB(s,r,n,i,a),bB(s,l,a),dB(s,r,n,i,a)}(t,e,o,r,i,a,s),function(t,e){var n="vertical"===e?"x":"y";B(t,function(t){t.outEdges.sort(function(t,e){return t.node2.getLayout()[n]-e.node2.getLayout()[n]}),t.inEdges.sort(function(t,e){return t.node1.getLayout()[n]-e.node1.getLayout()[n]})}),B(t,function(t){var e=0,n=0;B(t.outEdges,function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy}),B(t.inEdges,function(t){t.setLayout({ty:n},!0),n+=t.getLayout().dy})})}(t,s)}(u,c,n,i,a,s,0!==F(u,function(t){return 0===t.getLayout().value}).length?0:t.get("layoutIterations"),t.get("orient"),t.get("nodeAlign"))})});function hB(t){var e=t.hostGraph.data.getRawDataItem(t.dataIndex);return null!=e.depth&&e.depth>=0}function dB(t,e,n,i,r){var o="vertical"===r?"x":"y";B(t,function(t){var a,s,l;t.sort(function(t,e){return t.getLayout()[o]-e.getLayout()[o]});for(var u=0,c=t.length,h="vertical"===r?"dx":"dy",d=0;d0&&(a=s.getLayout()[o]+l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]+s.getLayout()[h]+e;if((l=u-e-("vertical"===r?i:n))>0){a=s.getLayout()[o]-l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0),u=a;for(d=c-2;d>=0;--d)(l=(s=t[d]).getLayout()[o]+s.getLayout()[h]+e-u)>0&&(a=s.getLayout()[o]-l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]}})}function pB(t,e,n){B(t.slice().reverse(),function(t){B(t,function(t){if(t.outEdges.length){var i=_B(t.outEdges,fB,n)/_B(t.outEdges,xB);if(isNaN(i)){var r=t.outEdges.length;i=r?_B(t.outEdges,gB,n)/r:0}if("vertical"===n){var o=t.getLayout().x+(i-mB(t,n))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(i-mB(t,n))*e;t.setLayout({y:a},!0)}}})})}function fB(t,e){return mB(t.node2,e)*t.getValue()}function gB(t,e){return mB(t.node2,e)}function vB(t,e){return mB(t.node1,e)*t.getValue()}function yB(t,e){return mB(t.node1,e)}function mB(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function xB(t){return t.getValue()}function _B(t,e,n){for(var i=0,r=t.length,o=-1;++oo&&(o=e)}),B(n,function(e){var n=new ZR({type:"color",mappingMethod:"linear",dataExtent:[r,o],visual:t.get("color")}).mapValueToVisual(e.getLayout().value),i=e.getModel().get(["itemStyle","color"]);null!=i?(e.setVisual("color",i),e.setVisual("style",{fill:i})):(e.setVisual("color",n),e.setVisual("style",{fill:n}))})}i.length&&B(i,function(t){var e=t.getModel().get("lineStyle");t.setVisual("style",e)})})});var SB=function(){function t(){}return t.prototype._hasEncodeRule=function(t){var e=this.getEncode();return e&&null!=e.get(t)},t.prototype.getInitialData=function(t,e){var n,i,r=e.getComponent("xAxis",this.get("xAxisIndex")),o=e.getComponent("yAxis",this.get("yAxisIndex")),a=r.get("type"),s=o.get("type"),l=t.layout;"category"===a?(l="horizontal",n=r.getOrdinalMeta(),i=!this._hasEncodeRule("x")):"category"===s&&(l="vertical",n=o.getOrdinalMeta(),i=!this._hasEncodeRule("y")),l||(l="time"===s?"vertical":"horizontal"),this._layout=l;var u=["x","y"],c="horizontal"===l?0:1,h=this._baseAxisDim=u[c],d=u[1-c],p=[r,o],f=p[c].get("type"),g=p[1-c].get("type"),v=t.data;if(v&&i){var y=[];B(v,function(t,e){var n;X(t)?(n=t.slice(),t.unshift(e)):X(t.value)?((n=k({},t)).value=n.value.slice(),t.value.unshift(e)):n=t,y.push(n)}),t.data=y}var m=this.defaultValueDimensions,x=[{name:h,type:bb(f),ordinalMeta:n,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:d,type:bb(g),dimsDef:m.slice()}];return bA(this,{coordDimensions:x,dimensionsCount:m.length+1,encodeDefaulter:Y(wg,x,this)})},t.prototype.getBaseAxis=function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis},t.prototype.getWhiskerBoxesLayout=function(){return this._layout},t}();function MB(t,e){for(var n=e.ends.length,i=0,r=0;rg){var _=[y,x];i.push(_)}}}return{boxData:n,outliers:i}}(e.getRawData(),t.config);return[{dimensions:["ItemName","Low","Q1","Q2","Q3","High"],data:i.boxData},{data:i.outliers}]}};var EB="candlestick",zB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"open",defaultTooltip:!0},{name:"close",defaultTooltip:!0},{name:"lowest",defaultTooltip:!0},{name:"highest",defaultTooltip:!0}],n}return n(e,t),e.prototype.getShadowDim=function(){return"open"},e.prototype.brushSelector=function(t,e,n){var i=e.getItemLayout(t);return i&&n.rect(i.brushRect)},e.type="series."+EB,e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,clip:!0,itemStyle:{color:"#eb5454",color0:"#47b262",borderColor:"#eb5454",borderColor0:"#47b262",borderColorDoji:null,borderWidth:1},emphasis:{itemStyle:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,large:!0,largeThreshold:600,progressive:3e3,progressiveThreshold:1e4,progressiveChunkMode:"mod",animationEasing:"linear",animationDuration:300},e}(Hy);E(zB,SB,!0);var BB=["itemStyle","borderColor"],VB=["itemStyle","borderColor0"],GB=["itemStyle","borderColorDoji"],FB=["itemStyle","color"],HB=["itemStyle","color0"];function WB(t,e){return e.get(t>0?FB:HB)}function UB(t,e){return e.get(0===t?GB:t>0?BB:VB)}var YB={seriesType:EB,plan:$y(),performRawSeries:!0,reset:function(t,e){if(!e.isSeriesFiltered(t))return!t.pipelineContext.large&&{progress:function(t,e){for(var n;null!=(n=t.next());){var i=e.getItemModel(n),r=e.getItemLayout(n).sign,o=i.getItemStyle();o.fill=WB(r,i),o.stroke=UB(r,i)||o.fill,k(e.ensureUniqueItemVisual(n,"style"),o)}}}}},XB=["color","borderColor"],ZB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeClipPath(),this._progressiveEls=null,this._updateDrawMode(t),this._isLargeDraw?this._renderLarge(t):this._renderNormal(t)},e.prototype.incrementalPrepareRender=function(t,e,n){this._clear(),this._updateDrawMode(t)},e.prototype.incrementalRender=function(t,e,n,i){this._progressiveEls=[],this._isLargeDraw?this._incrementalRenderLarge(t,e):this._incrementalRenderNormal(t,e)},e.prototype.eachRendered=function(t){Hd(this._progressiveEls||this.group,t)},e.prototype._updateDrawMode=function(t){var e=t.pipelineContext.large;null!=this._isLargeDraw&&e===this._isLargeDraw||(this._isLargeDraw=e,this._clear())},e.prototype._renderNormal=function(t){var e=t.getData(),n=this._data,i=this.group,r=e.getLayout("isSimpleBox"),o=t.get("clip",!0),a=t.coordinateSystem,s=a.getArea&&a.getArea(),l=o&&xC(a,!1,t);this._data||i.removeAll();var u=QB(t);e.diff(n).add(function(n){if(e.hasValue(n)){var a=e.getItemLayout(n),c=o?MB(s,a):0;if(2===c)return;var h=KB(a,n,u,!0);od(h,{shape:{points:a.ends}},t,n),_C(1===c,h,l),$B(h,e,n,r),i.add(h),e.setItemGraphicEl(n,h)}}).update(function(a,c){var h=n.getItemGraphicEl(c);if(e.hasValue(a)){var d=e.getItemLayout(a),p=o?MB(s,d):0;2!==p?(h?(rd(h,{shape:{points:d.ends}},t,a),cd(h)):h=KB(d,a,u),$B(h,e,a,r),_C(1===p,h,l),i.add(h),e.setItemGraphicEl(a,h)):i.remove(h)}else i.remove(h)}).remove(function(t){var e=n.getItemGraphicEl(t);e&&i.remove(e)}).execute(),this._data=e},e.prototype._renderLarge=function(t){this._clear(),nV(t,this.group);var e=t.get("clip",!0)?xC(t.coordinateSystem,!1,t):null;_C(!!e,this.group,e)},e.prototype._incrementalRenderNormal=function(t,e){for(var n,i=e.getData(),r=i.getLayout("isSimpleBox"),o=QB(e);null!=(n=t.next());){var a=KB(i.getItemLayout(n),n,o);$B(a,i,n,r),a.incremental=is(e),this.group.add(a),this._progressiveEls.push(a)}},e.prototype._incrementalRenderLarge=function(t,e){nV(e,this.group,this._progressiveEls,!0)},e.prototype.remove=function(t){this._clear()},e.prototype._clear=function(){this.group.removeAll(),_C(!1,this.group,null),this._data=null},e.type=EB,e}(tm),jB=function(){},qB=function(t){function e(e){var n=t.call(this,e)||this;return n.type="normalCandlestickBox",n}return n(e,t),e.prototype.getDefaultShape=function(){return new jB},e.prototype.buildPath=function(t,e){var n=e.points;this.__simpleBox?(t.moveTo(n[4][0],n[4][1]),t.lineTo(n[6][0],n[6][1])):(t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1]),t.lineTo(n[2][0],n[2][1]),t.lineTo(n[3][0],n[3][1]),t.closePath(),t.moveTo(n[4][0],n[4][1]),t.lineTo(n[5][0],n[5][1]),t.moveTo(n[6][0],n[6][1]),t.lineTo(n[7][0],n[7][1]))},e}(Kl);function KB(t,e,n,i){var r=t.ends;return new qB({shape:{points:i?JB(r,n,t):r},z2:100})}function $B(t,e,n,i){var r=e.getItemModel(n);t.useStyle(e.getItemVisual(n,"style")),t.style.strokeNoScale=!0;var o=r.getShallow("cursor");o&&t.attr("cursor",o),t.__simpleBox=i,Rc(t,r);var a=e.getItemLayout(n).sign;B(t.states,function(t,e){var n=r.getModel(e),i=WB(a,n),o=UB(a,n)||i,s=t.style||(t.style={});i&&(s.fill=i),o&&(s.stroke=o)});var s=r.getModel("emphasis");kc(t,s.get("focus"),s.get("blurScope"),s.get("disabled"))}function JB(t,e,n){return V(t,function(t){return(t=t.slice())[e]=n.initBaseline,t})}function QB(t){return"horizontal"===t.getWhiskerBoxesLayout()?1:0}var tV=function(){},eV=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeCandlestickBox",n}return n(e,t),e.prototype.getDefaultShape=function(){return new tV},e.prototype.buildPath=function(t,e){for(var n=e.points,i=0;ig?b[o]:_[o],ends:M,brushRect:D(v,y,p)})}function T(t,n){var i=[];return i[r]=n,i[o]=t,isNaN(n)||isNaN(t)?[NaN,NaN]:e.dataToPoint(i)}function C(t,e,n){var o=e.slice(),a=e.slice();o[r]=Id(o[r]+i/2,1,!1),a[r]=Id(a[r]-i/2,1,!0),n?t.push(o,a):t.push(a,o)}function D(t,e,n){var a=T(t,n),s=T(e,n);return a[r]-=i/2,s[r]-=i/2,{x:a[0],y:a[1],width:o?i:s[0]-a[0],height:o?s[1]-a[1]:i}}function A(t){return t[r]=Id(t[r],1),t}}}}};function sV(t,e,n,i,r,o){return n>i?-1:n0?t.get(r,e-1)<=i?1:-1:1}function lV(t,e){var n=e.rippleEffectColor||e.color;t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?n:null,fill:"fill"===e.brushType?n:null}})})}var uV=function(t){function e(e,n){var i=t.call(this)||this,r=new KT(e,n),o=new vo;return i.add(r),i.add(o),i.updateData(e,n),i}return n(e,t),e.prototype.stopEffectAnimation=function(){this.childAt(1).removeAll()},e.prototype.startEffectAnimation=function(t){for(var e=t.symbolType,n=t.color,i=t.rippleNumber,r=this.childAt(1),o=0;o0&&(o=this._getLineLength(i)/l*1e3),o!==this._period||a!==this._loop||s!==this._roundTrip){i.stopAnimation();var c=void 0;c=Z(u)?u(n):u,i.__t>0&&(c=-o*i.__t),this._animateSymbol(i,o,c,a,s)}this._period=o,this._loop=a,this._roundTrip=s}},e.prototype._animateSymbol=function(t,e,n,i,r){if(e>0){t.__t=0;var o=this,a=t.animate("",i).when(r?2*e:e,{__t:r?2:1}).delay(n).during(function(){o._updateSymbolPosition(t)});i||a.done(function(){o.remove(t)}),a.start()}},e.prototype._getLineLength=function(t){return Ft(t.__p1,t.__cp1)+Ft(t.__cp1,t.__p2)},e.prototype._updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},e.prototype.updateData=function(t,e,n){this.childAt(0).updateData(t,e,n),this._updateEffectSymbol(t,e)},e.prototype._updateSymbolPosition=function(t){var e=t.__p1,n=t.__p2,i=t.__cp1,r=t.__t<=1?t.__t:2-t.__t,o=[t.x,t.y],a=o.slice(),s=Yn,l=Xn;o[0]=s(e[0],i[0],n[0],r),o[1]=s(e[1],i[1],n[1],r);var u=t.__t<=1?l(e[0],i[0],n[0],r):l(n[0],i[0],e[0],1-r),c=t.__t<=1?l(e[1],i[1],n[1],r):l(n[1],i[1],e[1],1-r);t.rotation=-Math.atan2(c,u)-Math.PI/2,"line"!==this._symbolType&&"rect"!==this._symbolType&&"roundRect"!==this._symbolType||(void 0!==t.__lastT&&t.__lastT=0&&!(i[o]<=e);o--);o=Math.min(o,r-2)}else{for(o=a;oe);o++);o=Math.min(o-1,r-2)}var s=(e-i[o])/(i[o+1]-i[o]),l=n[o],u=n[o+1];t.x=l[0]*(1-s)+s*u[0],t.y=l[1]*(1-s)+s*u[1];var c=t.__t<=1?u[0]-l[0]:l[0]-u[0],h=t.__t<=1?u[1]-l[1]:l[1]-u[1];t.rotation=-Math.atan2(h,c)-Math.PI/2,this._lastFrame=o,this._lastFramePercent=e,t.ignore=!1}},e}(pV),vV=function(){this.polyline=!1,this.curveness=0,this.segs=[]},yV=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return n(e,t),e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.beforeBrush=function(t){t&&!t.contentRetained&&this.reset()},e.prototype.getDefaultStyle=function(){return{stroke:ug.color.neutral99,fill:null}},e.prototype.getDefaultShape=function(){return new vV},e.prototype.buildPath=function(t,e){var n,i=e.segs,r=e.curveness;if(e.polyline)for(n=this._off;n0){t.moveTo(i[n++],i[n++]);for(var a=1;a0){var h=(s+u)/2-(l-c)*r,d=(l+c)/2-(u-s)*r;t.quadraticCurveTo(h,d,u,c)}else t.lineTo(u,c)}this.incremental&&(this._off=n,this.notClear=!0)},e.prototype.findDataIndex=function(t,e){var n=this.shape,i=n.segs,r=n.curveness,o=this.style.lineWidth;if(n.polyline)for(var a=0,s=0;s0)for(var u=i[s++],c=i[s++],h=1;h0){if(Pl(u,c,(u+d)/2-(c-p)*r,(c+p)/2-(d-u)*r,d,p,o,t,e))return a}else if(kl(u,c,d,p,o,t,e))return a;a++}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return t=n[0],e=n[1],i.contain(t,e)?(this.hoverDataIdx=this.findDataIndex(t,e))>=0:(this.hoverDataIdx=-1,!1)},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape.segs,n=1/0,i=1/0,r=-1/0,o=-1/0,a=0;a0&&(o.dataIndex=n+t.__startIndex)})},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),xV={seriesType:"lines",plan:$y(),reset:function(t){var e=t.coordinateSystem;if(e){var n=t.get("polyline"),i=t.pipelineContext.large;return{progress:function(r,o){var a=[];if(i){var s=void 0,l=r.end-r.start;if(n){for(var u=0,c=r.start;c0&&l&&s.configLayer(o,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(a/10+.9,1),0)}),r.updateData(i);var u=t.get("clip",!0)&&xC(t.coordinateSystem,!1,t);u?this.group.setClipPath(u):this.group.removeClipPath(),this._lastZlevel=o,this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateLineDraw(i,t).incrementalPrepareUpdate(i),this._clearLayer(n),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._lineDraw.incrementalUpdate(t,e.getData(),is(e)),this._finished=t.end===e.getData().count()},e.prototype.eachRendered=function(t){this._lineDraw&&this._lineDraw.eachRendered(t)},e.prototype.updateTransform=function(t,e,n){var i=t.getData(),r=this._lineDraw;if(!(this._finished&&r&&r.updateLayout))return{update:!0};var o=xV.reset(t,e,n);o.progress&&o.progress({start:0,end:i.count(),count:i.count()},i),r.updateLayout(),this._clearLayer(n)},e.prototype._updateLineDraw=function(t,e){var n=this._lineDraw,i=this._showEffect(e),r=!!e.get("polyline"),o=e.pipelineContext.large;return n&&i===this._hasEffet&&r===this._isPolyline&&o===this._isLargeDraw||(n&&n.remove(),n=this._lineDraw=o?new mV:new QN(r?i?gV:fV:i?pV:JN),this._hasEffet=i,this._isPolyline=r,this._isLargeDraw=o),this.group.add(n.group),n},e.prototype._showEffect=function(t){return!!t.get(["effect","show"])},e.prototype._clearLayer=function(t){var e=tp(t);e&&null!=this._lastZlevel&&e.getLayer(this._lastZlevel).clear(!0)},e.prototype.remove=function(t,e){this._lineDraw&&this._lineDraw.remove(),this._lineDraw=null,this._clearLayer(e)},e.prototype.dispose=function(t,e){this.remove(t,e)},e.type="lines",e}(tm),bV="undefined"==typeof Uint32Array?Array:Uint32Array,wV="undefined"==typeof Float64Array?Array:Float64Array;function SV(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=V(e,function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),A([e,t[0],t[1]])}))}var MV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="lineStyle",n.visualDrawType="stroke",n}return n(e,t),e.prototype.init=function(e){e.data=e.data||[],SV(e);var n=this._processFlatCoordsArray(e.data);this._flatCoords=n.flatCoords,this._flatCoordsOffset=n.flatCoordsOffset,n.flatCoords&&(e.data=new Float32Array(n.count)),t.prototype.init.apply(this,arguments)},e.prototype.mergeOption=function(e){if(SV(e),e.data){var n=this._processFlatCoordsArray(e.data);this._flatCoords=n.flatCoords,this._flatCoordsOffset=n.flatCoordsOffset,n.flatCoords&&(e.data=new Float32Array(n.count))}t.prototype.mergeOption.apply(this,arguments)},e.prototype.appendData=function(t){var e=this._processFlatCoordsArray(t.data);e.flatCoords&&(this._flatCoords?(this._flatCoords=xt(this._flatCoords,e.flatCoords),this._flatCoordsOffset=xt(this._flatCoordsOffset,e.flatCoordsOffset)):(this._flatCoords=e.flatCoords,this._flatCoordsOffset=e.flatCoordsOffset),t.data=new Float32Array(e.count)),this.getRawData().appendData(t.data)},e.prototype._getCoordsFromItemModel=function(t){var e=this.getData().getItemModel(t),n=e.option instanceof Array?e.option:e.getShallow("coords");return n},e.prototype.getLineCoordsCount=function(t){return this._flatCoordsOffset?this._flatCoordsOffset[2*t+1]:this._getCoordsFromItemModel(t).length},e.prototype.getLineCoords=function(t,e){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[2*t],i=this._flatCoordsOffset[2*t+1],r=0;r ")}return Ty("nameValue",{name:a,value:r,noValue:null==r||isNaN(r)})},e.prototype.preventIncremental=function(){return!!this.get(["effect","show"])},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},e.prototype.getZLevelKey=function(){var t=this.getModel("effect"),e=t.get("trailLength");return this.getData().count()>this.getProgressiveThreshold()?this.id:t.get("show")&&e>0?e+"":""},e.type="series.lines",e.dependencies=["grid","polar","geo","calendar"],e.defaultOption={coordinateSystem:"geo",z:2,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}},e}(Hy);function IV(t){return t instanceof Array||(t=[t,t]),t}var TV={seriesType:"lines",reset:function(t){var e=IV(t.get("symbol")),n=IV(t.get("symbolSize")),i=t.getData();return i.setVisual("fromSymbol",e&&e[0]),i.setVisual("toSymbol",e&&e[1]),i.setVisual("fromSymbolSize",n&&n[0]),i.setVisual("toSymbolSize",n&&n[1]),{dataEach:i.hasItemOption?function(t,e){var n=t.getItemModel(e),i=IV(n.getShallow("symbol",!0)),r=IV(n.getShallow("symbolSize",!0));i[0]&&t.setItemVisual(e,"fromSymbol",i[0]),i[1]&&t.setItemVisual(e,"toSymbol",i[1]),r[0]&&t.setItemVisual(e,"fromSymbolSize",r[0]),r[1]&&t.setItemVisual(e,"toSymbolSize",r[1])}:null}}};var CV=function(){function t(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={inRange:null,outOfRange:null};var t=c.createCanvas();this.canvas=t}return t.prototype.update=function(t,e,n,i,r,o){var a=this._getBrush(),s=this._getGradient(r,"inRange"),l=this._getGradient(r,"outOfRange"),u=this.pointSize+this.blurSize,c=this.canvas,h=c.getContext("2d"),d=t.length;c.width=e,c.height=n;for(var p=0;p0){var I=o(y)?s:l;y>0&&(y=y*S+w),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*y*256}else _+=4}return h.putImageData(m,0,0),c},t.prototype._getBrush=function(){var t=this._brushCanvas||(this._brushCanvas=c.createCanvas()),e=this.pointSize+this.blurSize,n=2*e;t.width=n,t.height=n;var i=t.getContext("2d");return i.clearRect(0,0,n,n),i.shadowOffsetX=n,i.shadowBlur=this.blurSize,i.shadowColor=ug.color.neutral99,i.beginPath(),i.arc(-e,e,this.pointSize,0,2*Math.PI,!0),i.closePath(),i.fill(),t},t.prototype._getGradient=function(t,e){for(var n=this._gradientPixels,i=n[e]||(n[e]=new Uint8ClampedArray(1024)),r=[0,0,0,0],o=0,a=0;a<256;a++)t[e](a/255,!0,r),i[o++]=r[0],i[o++]=r[1],i[o++]=r[2],i[o++]=r[3];return i},t}();var DV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(n){n===t&&(i=e)})}),this._progressiveEls=null,this.group.removeAll();var r=t.coordinateSystem;"cartesian2d"===r.type||"calendar"===r.type||"matrix"===r.type?this._renderOnGridLike(t,n,0,t.getData().count()):SC(r)&&this._renderOnGeo(r,t,i,n)},e.prototype.incrementalPrepareRender=function(t,e,n){this.group.removeAll()},e.prototype.incrementalRender=function(t,e,n,i){var r=e.coordinateSystem;r&&(SC(r)?this.render(e,n,i):(this._progressiveEls=[],this._renderOnGridLike(e,i,t.start,t.end,!0)))},e.prototype.eachRendered=function(t){Hd(this._progressiveEls||this.group,t)},e.prototype._renderOnGridLike=function(t,e,n,i,r){var o,a,s,l,u=t.coordinateSystem,c=wC(u,"cartesian2d"),h=wC(u,"matrix");if(c){var d=u.getAxis("x"),p=u.getAxis("y");0,o=bM(d).w+.5,a=bM(p).w+.5,s=d.scale.getExtent(),l=p.scale.getExtent()}for(var f=this.group,g=t.getData(),v=t.getModel(["emphasis","itemStyle"]).getItemStyle(),y=t.getModel(["blur","itemStyle"]).getItemStyle(),m=t.getModel(["select","itemStyle"]).getItemStyle(),x=t.get(["itemStyle","borderRadius"]),_=ap(t),b=t.getModel("emphasis"),w=b.get("focus"),S=b.get("blurScope"),M=b.get("disabled"),I=c||h?[g.mapDimension("x"),g.mapDimension("y"),g.mapDimension("value")]:[g.mapDimension("time"),g.mapDimension("value")],T=n;Ts[1]||kl[1])continue;var L=u.dataToPoint([A,k]);C=new lu({shape:{x:L[0]-o/2,y:L[1]-a/2,width:o,height:a},style:D})}else if(h){if(rt((P=u.dataToLayout([g.get(I[0],T),g.get(I[1],T)]).rect).x))continue;C=new lu({z2:1,shape:P,style:D})}else{if(isNaN(g.get(I[1],T)))continue;var P,O=u.dataToLayout([g.get(I[0],T)]);if(rt((P=O.contentRect||O.rect).x)||rt(P.y))continue;C=new lu({z2:1,shape:P,style:D})}if(g.hasItemOption){var R=g.getItemModel(T),N=R.getModel("emphasis");v=N.getModel("itemStyle").getItemStyle(),y=R.getModel(["blur","itemStyle"]).getItemStyle(),m=R.getModel(["select","itemStyle"]).getItemStyle(),x=R.get(["itemStyle","borderRadius"]),w=N.get("focus"),S=N.get("blurScope"),M=N.get("disabled"),_=ap(R)}C.shape.r=x;var E=t.getRawValue(T),z="-";E&&null!=E[2]&&(z=E[2]+""),op(C,_,{labelFetcher:t,labelDataIndex:T,defaultOpacity:D.opacity,defaultText:z}),C.ensureState("emphasis").style=v,C.ensureState("blur").style=y,C.ensureState("select").style=m,kc(C,w,S,M),C.incremental=is(t,r),r&&(C.states.emphasis.hoverLayer=2),f.add(C),g.setItemGraphicEl(T,C),this._progressiveEls&&this._progressiveEls.push(C)}},e.prototype._renderOnGeo=function(t,e,n,i){var r=n.targetVisuals.inRange,o=n.targetVisuals.outOfRange,a=e.getData(),s=this._hmLayer||this._hmLayer||new CV;s.blurSize=e.get("blurSize"),s.pointSize=e.get("pointSize"),s.minOpacity=e.get("minOpacity"),s.maxOpacity=e.get("maxOpacity");var l=t.getViewRect().clone(),u=t.getRoamTransform();l.applyTransform(u);var c=Math.max(l.x,0),h=Math.max(l.y,0),d=Math.min(l.width+l.x,i.getWidth()),p=Math.min(l.height+l.y,i.getHeight()),f=d-c,g=p-h,v=[a.mapDimension("lng"),a.mapDimension("lat"),a.mapDimension("value")],y=a.mapArray(v,function(e,n,i){var r=t.dataToPoint([e,n]);return r[0]-=c,r[1]-=h,r.push(i),r}),m=n.getExtent(),x="visualMap.continuous"===n.type?function(t,e){var n=t[1]-t[0];return e=[(e[0]-t[0])/n,(e[1]-t[0])/n],function(t){return t>=e[0]&&t<=e[1]}}(m,n.option.range):function(t,e,n){var i=t[1]-t[0],r=(e=V(e,function(e){return{interval:[(e.interval[0]-t[0])/i,(e.interval[1]-t[0])/i]}})).length,o=0;return function(t){var i;for(i=o;i=0;i--){var a;if((a=e[i].interval)[0]<=t&&t<=a[1]){o=i;break}}return i>=0&&i=0?1:-1:o>0?1:-1}(n,o,r,i,h),function(t,e,n,i,r,o,a,s,l,u){var c,h=l.valueDim,d=l.categoryDim,p=Math.abs(n[d.wh]),f=t.getItemVisual(e,"symbolSize");c=X(f)?f.slice():null==f?["100%","100%"]:[f,f];c[d.index]=Vo(c[d.index],p),c[h.index]=Vo(c[h.index],i?p:Math.abs(o)),u.symbolSize=c;var g=u.symbolScale=[c[0]/s,c[1]/s];g[h.index]*=(l.isHorizontal?-1:1)*a}(t,e,r,o,0,h.boundingLength,h.pxSign,u,i,h),function(t,e,n,i,r){var o=t.get(kV)||0;o&&(PV.attr({scaleX:e[0],scaleY:e[1],rotation:n}),PV.updateTransform(),o/=PV.getLineScale(),o*=e[i.valueDim.index]);r.valueLineWidth=o||0}(n,h.symbolScale,l,i,h);var d=h.symbolSize,p=bx(n.get("symbolOffset"),d);return function(t,e,n,i,r,o,a,s,l,u,c,h){var d=c.categoryDim,p=c.valueDim,f=h.pxSign,g=Math.max(e[p.index]+s,0),v=g;if(i){var y=Math.abs(l),m=ot(t.get("symbolMargin"),"15%")+"",x=!1;m.lastIndexOf("!")===m.length-1&&(x=!0,m=m.slice(0,m.length-1));var _=Vo(m,e[p.index]),b=Math.max(g+2*_,0),w=x?0:2*_,S=aa(i),M=S?i:KV((y+w)/b);b=g+2*(_=(y-M*g)/2/(x?M:Math.max(M-1,1))),w=x?0:2*_,S||"fixed"===i||(M=u?KV((Math.abs(u)+w)/b):0),v=M*b-w,h.repeatTimes=M,h.symbolMargin=_}var I=f*(v/2),T=h.pathPosition=[];T[d.index]=n[d.wh]/2,T[p.index]="start"===a?I:"end"===a?l-I:l/2,o&&(T[0]+=o[0],T[1]+=o[1]);var C=h.bundlePosition=[];C[d.index]=n[d.xy],C[p.index]=n[p.xy];var D=h.barRectShape=k({},n);D[p.wh]=f*Math.max(Math.abs(n[p.wh]),Math.abs(T[p.index]+I)),D[d.wh]=n[d.wh];var A=h.clipShape={};A[d.xy]=-n[d.xy],A[d.wh]=c.ecSize[d.wh],A[p.xy]=0,A[p.wh]=n[p.wh]}(n,d,r,o,0,p,s,h.valueLineWidth,h.boundingLength,h.repeatCutLength,i,h),h}function NV(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function EV(t){var e=t.symbolPatternSize,n=xx(t.symbolType,-e/2,-e/2,e,e);return n.attr({culling:!0}),"image"!==n.type&&n.setStyle({strokeNoScale:!0}),n}function zV(t,e,n,i){var r=t.__pictorialBundle,o=n.symbolSize,a=n.valueLineWidth,s=n.pathPosition,l=e.valueDim,u=n.repeatTimes||0,c=0,h=o[e.valueDim.index]+a+2*n.symbolMargin;for(ZV(t,function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=u,c0:i<0)&&(r=u-1-t),e[l.index]=h*(r-u/2+.5)+s[l.index],{x:e[0],y:e[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation}}}function BV(t,e,n,i){var r=t.__pictorialBundle,o=t.__pictorialMainPath;o?jV(o,null,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation},n,i):(o=t.__pictorialMainPath=EV(n),r.add(o),jV(o,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:0,scaleY:0,rotation:n.rotation},{scaleX:n.symbolScale[0],scaleY:n.symbolScale[1]},n,i))}function VV(t,e,n){var i=k({},e.barRectShape),r=t.__pictorialBarRect;r?jV(r,null,{shape:i},e,n):((r=t.__pictorialBarRect=new lu({z2:2,shape:i,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}})).disableMorphing=!0,t.add(r))}function GV(t,e,n,i){if(n.symbolClip){var r=t.__pictorialClipPath,o=k({},n.clipShape),a=e.valueDim,s=n.animationModel,l=n.dataIndex;if(r)rd(r,{shape:o},s,l);else{o[a.wh]=0,r=new lu({shape:o}),t.__pictorialBundle.setClipPath(r),t.__pictorialClipPath=r;var u={};u[a.wh]=n.clipShape[a.wh],ep[i?"updateProps":"initProps"](r,{shape:u},s,l)}}}function FV(t,e){var n=t.getItemModel(e);return n.getAnimationDelayParams=HV,n.isAnimationEnabled=WV,n}function HV(t){return{index:t.__pictorialAnimationIndex,count:t.__pictorialRepeatTimes}}function WV(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function UV(t,e,n,i){var r=new vo,o=new vo;return r.add(o),r.__pictorialBundle=o,o.x=n.bundlePosition[0],o.y=n.bundlePosition[1],n.symbolRepeat?zV(r,e,n):BV(r,0,n),VV(r,n,i),GV(r,e,n,i),r.__pictorialShapeStr=XV(t,n),r.__pictorialSymbolMeta=n,r}function YV(t,e,n,i){var r=i.__pictorialBarRect;r&&r.removeTextContent();var o=[];ZV(i,function(t){o.push(t)}),i.__pictorialMainPath&&o.push(i.__pictorialMainPath),i.__pictorialClipPath&&(n=null),B(o,function(t){sd(t,{scaleX:0,scaleY:0},n,e,function(){i.parent&&i.parent.remove(i)})}),t.setItemGraphicEl(e,null)}function XV(t,e){return[t.getItemVisual(e.dataIndex,"symbol")||"none",!!e.symbolRepeat,!!e.symbolClip].join(":")}function ZV(t,e,n){B(t.__pictorialBundle.children(),function(i){i!==t.__pictorialBarRect&&e.call(n,i)})}function jV(t,e,n,i,r,o){e&&t.attr(e),i.symbolClip&&!r?n&&t.attr(n):n&&ep[r?"updateProps":"initProps"](t,n,i.animationModel,i.dataIndex,o)}function qV(t,e,n){var i=n.dataIndex,r=n.itemModel,o=r.getModel("emphasis"),a=o.getModel("itemStyle").getItemStyle(),s=r.getModel(["blur","itemStyle"]).getItemStyle(),l=r.getModel(["select","itemStyle"]).getItemStyle(),u=r.getShallow("cursor"),c=o.get("focus"),h=o.get("blurScope"),d=o.get("scale");ZV(t,function(t){if(t instanceof eu){var e=t.style;t.useStyle(k({image:e.image,x:e.x,y:e.y,width:e.width,height:e.height},n.style))}else t.useStyle(n.style);var i=t.ensureState("emphasis");i.style=a,d&&(i.scaleX=1.1*t.scaleX,i.scaleY=1.1*t.scaleY),t.ensureState("blur").style=s,t.ensureState("select").style=l,u&&(t.cursor=u),t.z2=n.z2});var p=e.valueDim.posDesc[+(n.boundingLength>0)],f=t.__pictorialBarRect;f.ignoreClip=!0,op(f,ap(r),{labelFetcher:e.seriesModel,labelDataIndex:i,defaultText:jT(e.seriesModel.getData(),i),inheritColor:n.style.fill,defaultOpacity:n.style.opacity,defaultOutsidePosition:p}),kc(t,c,h,o.get("disabled"))}function KV(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}var $V=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n.defaultSymbol="roundRect",n}return n(e,t),e.prototype.getInitialData=function(e){return e.stack=null,t.prototype.getInitialData.apply(this,arguments)},e.type="series."+OD,e.dependencies=["grid"],e.defaultOption=Op(qD.defaultOption,{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",clip:!1,progressive:0,emphasis:{scale:!1},select:{itemStyle:{borderColor:ug.color.primary}}}),e}(qD);var JV="themeRiver",QV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new SA(U(this.getData,this),U(this.getRawData,this))},e.prototype.fixData=function(t){var e=t.length,n={},i=Fa(t,function(t){return n.hasOwnProperty(t[0]+"")||(n[t[0]+""]=-1),t[2]}),r=[];i.buckets.each(function(t,e){r.push({name:e,dataList:t})});for(var o=r.length,a=0;ao&&(o=s),i.push(s)}for(var u=0;uo&&(o=h)}return{y0:r,max:o}}(l),c=u.y0,h=n/u.max,d=o.length,p=o[0].indices.length,f=0;fI&&!$o(C-I)&&C0?(r.virtualPiece?r.virtualPiece.updateData(!1,i,t,e,n):(r.virtualPiece=new iG(i,t,e,n),l.add(r.virtualPiece)),o.piece.off("click"),r.virtualPiece.on("click",function(t){r._rootToNode(o.parentNode)})):r.virtualPiece&&(l.remove(r.virtualPiece),r.virtualPiece=null)}(a,s),this._initEvents(),this._oldChildren=c},e.prototype._initEvents=function(){var t=this;this.group.off("click"),this.group.on("click",function(e){var n=!1;t.seriesModel.getViewRoot().eachNode(function(i){if(!n&&i.piece&&i.piece===e.target){var r=i.getModel().get("nodeClick");if("rootToNode"===r)t._rootToNode(i);else if("link"===r){var o=i.getModel(),a=o.get("link");if(a)Ef(a,o.get("target",!0)||"_blank")}n=!0}})})},e.prototype._rootToNode=function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:sG,from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},e.prototype.containPoint=function(t,e){var n=e.getData().getItemLayout(0);if(n){var i=t[0]-n.cx,r=t[1]-n.cy,o=Math.sqrt(i*i+r*r);return o<=n.r&&o>=n.r0}},e.type=rG,e}(tm),cG=os(rG,function(t){var e={};t.eachSeriesByType(rG,function(t){var n=t.getData(),i=n.tree;i.eachNode(function(r){var o=r.getModel().getModel("itemStyle").getItemStyle();o.fill||(o.fill=function(t,n,i){if(0===t.depth)return ug.color.neutral50;for(var r=t;r&&r.depth>1;)r=r.parentNode;var o=n.getColorFromPalette(r.name||r.dataIndex+"",e);return t.depth>1&&j(o)&&(o=yi(o,(t.depth-1)/(i-1)*.5)),o}(r,t,i.root.height)),k(n.ensureUniqueItemVisual(r.dataIndex,"style"),o)})})});var hG=Math.PI/180,dG=os(rG,function(t,e){t.eachSeriesByType(rG,function(t){var n=t.get("center"),i=t.get("radius");X(i)||(i=[0,i]),X(n)||(n=[n,n]);var r=e.getWidth(),o=e.getHeight(),a=Math.min(r,o),s=Vo(n[0],r),l=Vo(n[1],o),u=Vo(i[0],a/2),c=Vo(i[1],a/2),h=-t.get("startAngle")*hG,d=t.get("minAngle")*hG,p=t.getData().tree.root,f=t.getViewRoot(),g=f.depth,v=t.get("sort");null!=v&&pG(f,v);var y=0;B(f.children,function(t){!isNaN(t.getValue())&&y++});var m=f.getValue(),x=Math.PI/(m||y)*2,_=f.depth>0,b=f.height-(_?-1:1),w=(c-u)/(b||1),S=t.get("clockwise"),M=t.get("stillShowZeroSum"),I=S?1:-1,T=function(e,n){if(e){var i=n;if(e!==p){var r=e.getValue(),o=0===m&&M?x:r*x;o0&&(a.during=s?U(OG,{el:e,userDuring:s}):null,a.setToFinal=!0,a.scope=t),k(a,n[o]),a}function CG(t,e,n,i){var r=(i=i||{}).dataIndex,o=i.isInit,a=i.clearStyle,s=n.isAnimationEnabled(),l=IG(t),u=e.style;l.userDuring=e.during;var c={},h={};if(function(t,e,n){for(var i=0;i=0)){var h=t.getAnimationStyleProps(),d=h?h.style:null;if(d){!r&&(r=i.style={});var p=W(n);for(u=0;u0&&t.animateFrom(g,v)}else!function(t,e,n,i,r){if(r){var o=TG("update",t,e,i,n);o.duration>0&&t.animateFrom(r,o)}}(t,e,r||0,n,c);DG(t,e),u?t.dirty():t.markRedraw()}function DG(t,e){for(var n=IG(t).leaveToProps,i=0;i=0){!o&&(o=i[t]={});var d=W(a);for(c=0;ci[1]&&i.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:i[1],r0:i[0]},api:{coord:function(i){var r=e.dataToRadius(i[0]),o=n.dataToAngle(i[1]),a=t.coordToPoint([r,o]);return a.push(r,o*Math.PI/180),a},size:U(bG,t)}}},calendar:function(t){var e=t.getRect(),n=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:n.start,end:n.end,weeks:n.weeks,dayCount:n.allDay}},api:{coord:function(e,n){return t.dataToPoint(e,n)},layout:function(e,n){return t.dataToLayout(e,n)}}}},matrix:function(t){var e=t.getRect();return{coordSys:{type:"matrix",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(e,n){return t.dataToPoint(e,n)},layout:function(e,n){return t.dataToLayout(e,n)}}}}};function $G(t){return t instanceof Kl}function JG(t){return t instanceof Zs}var QG=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n,i){this._progressiveEls=null;var r=this._data,o=t.getData(),a=this.group,s=rF(t,o,e,n);r||a.removeAll(),o.diff(r).add(function(e){aF(n,null,e,s(e,i),t,a,o)}).remove(function(e){var n=r.getItemGraphicEl(e);n&&AG(n,vG(n).option,t)}).update(function(e,l){var u=r.getItemGraphicEl(l);aF(n,u,e,s(e,i),t,a,o)}).execute();var l=t.get("clip",!0)?xC(t.coordinateSystem,!1,t):null;l?a.setClipPath(l):a.removeClipPath(),this._data=o},e.prototype.incrementalPrepareRender=function(t,e,n){this.group.removeAll(),this._data=null},e.prototype.incrementalRender=function(t,e,n,i,r){var o=e.getData(),a=rF(e,o,n,i),s=this._progressiveEls=[];function l(t){t.isGroup||(t.incremental=is(e),t.ensureState("emphasis").hoverLayer=2)}for(var u=t.start;u=0?e.getStore().get(r,n):void 0}var o=e.get(i.name,n),a=i&&i.ordinalMeta;return a?a.categories[o]:o},styleEmphasis:function(n,i){0;null==i&&(i=l);var r=x(i,FG).getItemStyle(),o=_(i,FG),a=sp(o,null,null,!0,!0);a.text=o.getShallow("show")?st(t.getFormattedLabel(i,FG),t.getFormattedLabel(i,HG),jT(e,i)):null;var s=lp(o,null,!0);return w(n,r),r=CC(r,a,s),n&&b(r,n),r.legacy=!0,r},visual:function(t,n){if(null==n&&(n=l),wt(fG,t)){var i=e.getItemVisual(n,"style");return i?i[fG[t]]:null}if(wt(gG,t))return e.getItemVisual(n,t)},barLayout:function(t){if("cartesian2d"===a.type){return function(t){if(vw(t.axis.scale)){for(var e=bM(t.axis),n=[],i=0;i=h;f--){var g=e.childAt(f);dF(e,g,r)}}(t,h,n,i,r),a>=0?o.replaceAt(h,a):o.add(h),h}function lF(t,e,n){var i,r=vG(t),o=e.type,a=e.shape,s=e.style;return n.isUniversalTransitionEnabled()||null!=o&&o!==r.customGraphicType||"path"===o&&((i=a)&&(wt(i,"pathData")||wt(i,"d")))&&vF(a)!==r.customPathData||"image"===o&&wt(s,"image")&&s.image!==r.customImagePath}function uF(t,e,n){var i=e?cF(t,e):t,r=e?hF(t,i,FG):t.style,o=t.type,a=i?i.textConfig:null,s=t.textContent,l=s?e?cF(s,e):s:null;if(r&&(n.isLegacy||MC(r,o,!!a,!!l))){n.isLegacy=!0;var u=IC(r,o,!e);!a&&u.textConfig&&(a=u.textConfig),!l&&u.textContent&&(l=u.textContent)}if(!e&&l){var c=l;!c.type&&(c.type="text")}var h=e?n[e]:n.normal;h.cfg=a,h.conOpt=l}function cF(t,e){return e?t?t[e]:null:t}function hF(t,e,n){var i=e&&e.style;return null==i&&n===FG&&t&&(i=t.styleEmphasis),i}function dF(t,e,n){e&&AG(e,vG(t).option,n)}function pF(t,e){var n=t&&t.name;return null!=n?n:"e\0\0"+e}function fF(t,e){var n=this.context,i=null!=t?n.newChildren[t]:null,r=null!=e?n.oldChildren[e]:null;sF(n.api,r,n.dataIndex,i,n.seriesModel,n.group)}function gF(t){var e=this.context,n=e.oldChildren[t];n&&AG(n,vG(n).option,e.seriesModel)}function vF(t){return t&&(t.pathData||t.d)}var yF=Pa(),mF=C,xF=U,_F=function(){function t(){this._dragging=!1,this.animationThreshold=15}return t.prototype.render=function(t,e,n,i){var r=e.get("value"),o=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=n,i||this._lastValue!==r||this._lastStatus!==o){this._lastValue=r,this._lastStatus=o;var a=this._group,s=this._handle;if(!o||"hide"===o)return a&&a.hide(),void(s&&s.hide());a&&a.show(),s&&s.show();var l={};this.makeElOption(l,r,t,e,n);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(n),this._lastGraphicKey=u;var c=this._moveAnimation=this.determineAnimation(t,e);if(a){var h=Y(bF,e,c);this.updatePointerEl(a,l,h),this.updateLabelEl(a,l,h,e)}else a=this._group=new vo,this.createPointerEl(a,l,t,e),this.createLabelEl(a,l,t,e),n.getZr().add(a);IF(a,e,!0),this._renderHandle(r)}},t.prototype.remove=function(t){this.clear(t)},t.prototype.dispose=function(t){this.clear(t)},t.prototype.determineAnimation=function(t,e){var n=e.get("animation"),i=t.axis,r="category"===i.type,o=e.get("snap");if(!o&&!r)return!1;if("auto"===n||null==n){var a=this.animationThreshold;if(r&&bM(i).w>a)return!0;if(o){var s=mk(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1}return!0===n},t.prototype.makeElOption=function(t,e,n,i,r){},t.prototype.createPointerEl=function(t,e,n,i){var r=e.pointer;if(r){var o=yF(t).pointerEl=new ep[r.type](mF(e.pointer));t.add(o)}},t.prototype.createLabelEl=function(t,e,n,i){if(e.label){var r=yF(t).labelEl=new du(mF(e.label));t.add(r),SF(r,i)}},t.prototype.updatePointerEl=function(t,e,n){var i=yF(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},t.prototype.updateLabelEl=function(t,e,n,i){var r=yF(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{x:e.label.x,y:e.label.y}),SF(r,i))},t.prototype._renderHandle=function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,i=this._api.getZr(),r=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return r&&i.remove(r),void(this._handle=null);this._handle||(e=!0,r=this._handle=Od(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){ye(t.event)},onmousedown:xF(this._onHandleDragMove,this,0,0),drift:xF(this._onHandleDragMove,this),ondragend:xF(this._onHandleDragEnd,this)}),i.add(r)),IF(r,n,!1),r.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");X(s)||(s=[s,s]),r.scaleX=s[0]/2,r.scaleY=s[1]/2,cm(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},t.prototype._moveHandleToValue=function(t,e){bF(this._axisPointerModel,!e&&this._moveAnimation,this._handle,MF(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},t.prototype._onHandleDragMove=function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(MF(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(MF(i)),yF(n).lastProp=null,this._doDispatchAxisPointer()}},t.prototype._doDispatchAxisPointer=function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},t.prototype._onHandleDragEnd=function(){if(this._dragging=!1,this._handle){var t=this._axisPointerModel.get("value");this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"})}},t.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),hm(this,"_doDispatchAxisPointer")},t.prototype.doClear=function(){},t.prototype.buildLabel=function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}},t}();function bF(t,e,n,i){wF(yF(n).lastProp,i)||(yF(n).lastProp=i,e?rd(n,i,t):(n.stopAnimation(),n.attr(i)))}function wF(t,e){if($(t)&&$(e)){var n=!0;return B(e,function(e,i){n=n&&wF(t[i],e)}),!!n}return t===e}function SF(t,e){t[e.get(["label","show"])?"show":"hide"]()}function MF(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}function IF(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)})}function TF(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle()).fill=null:"shadow"===n&&((e=i.getAreaStyle()).stroke=null),e}function CF(t,e,n,i,r){var o=DF(n.get("value"),e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),a=n.getModel("label"),s=Df(a.get("padding")||0),l=a.getFont(),u=qr(o,l),c=r.position,h=u.width+s[1]+s[3],d=u.height+s[0]+s[2],p=r.align;"right"===p&&(c[0]-=h),"center"===p&&(c[0]-=h/2);var f=r.verticalAlign;"bottom"===f&&(c[1]-=d),"middle"===f&&(c[1]-=d/2),function(t,e,n,i){var r=i.getWidth(),o=i.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+n,o)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}(c,h,d,i);var g=a.get("backgroundColor");g&&"auto"!==g||(g=e.get(["axisLine","lineStyle","color"])),t.label={x:c[0],y:c[1],style:sp(a,{text:o,font:l,fill:a.getTextColor(),padding:s,backgroundColor:g}),z2:10}}function DF(t,e,n,i,r){t=e.scale.parse(t);var o=e.scale.getLabel({value:t},{precision:r.precision}),a=r.formatter;if(a){var s={value:jw(e,{value:t}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};B(i,function(t){var e=n.getSeriesByIndex(t.seriesIndex),i=t.dataIndexInside,r=e&&e.getDataParams(i);r&&s.seriesData.push(r)}),j(a)?o=a.replace("{value}",o):Z(a)&&(o=a(s))}return o}function AF(t,e,n){var i=[1,0,0,1,0,0];return Ce(i,i,n.rotation),Te(i,i,n.position),Cd([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}function kF(t,e,n,i,r,o){var a=dD.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get(["label","margin"]),CF(e,i,r,o,{position:AF(i.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function LF(t,e,n){return{x1:t[n=n||0],y1:t[1-n],x2:e[n],y2:e[1-n]}}function PF(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}}function OF(t,e,n,i,r,o){return{cx:t,cy:e,r0:n,r:i,startAngle:r,endAngle:o,clockwise:!0}}function RF(t,e,n){return bM(t,{fromStat:{sers:V(e,function(t){return n.getSeriesByIndex(t.seriesIndex)})},min:1}).w}function NF(t,e,n){return[Do(Co(e[0],e[1]),t-n/2),Co(t+n/2,Do(e[0],e[1]))]}var EF=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.grid,s=i.get("type"),l=o.getGlobalExtent(),u=zF(a,o).getOtherAxis(o).getGlobalExtent(),c=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var h=TF(i),d=BF[s](o,c,l,u,i.get("seriesDataIndices"),i.ecModel);d.style=h,t.graphicKey=d.type,t.pointer=d}kF(e,t,MD(a.getRect(),n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=MD(e.axis.grid.getRect(),e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=AF(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.grid,a=r.getGlobalExtent(!0),s=zF(o,r).getOtherAxis(r).getGlobalExtent(),l="x"===r.dim?0:1,u=[t.x,t.y];u[l]+=e[l],u[l]=Co(a[1],u[l]),u[l]=Do(a[0],u[l]);var c=(s[1]+s[0])/2,h=[c,c];h[l]=u[l];return{x:u[0],y:u[1],rotation:t.rotation,cursorPoint:h,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}},e}(_F);function zF(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var BF={line:function(t,e,n,i){return{type:"Line",subPixelOptimize:!0,shape:LF([e,i[0]],[e,i[1]],VF(t))}},shadow:function(t,e,n,i,r,o){var a=RF(t,r,o),s=i[1]-i[0],l=NF(e,n,a),u=l[0],c=l[1];return{type:"Rect",shape:PF([u,i[0]],[c-u,s],VF(t))}}};function VF(t){return"x"===t.dim?0:1}var GF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="axisPointer",e.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:ug.color.border,width:1,type:"dashed"},shadowStyle:{color:ug.color.shadowTint},label:{show:!0,formatter:null,precision:"auto",margin:3,color:ug.color.neutral00,padding:[5,7,5,7],backgroundColor:ug.color.accent60,borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:ug.color.accent40,throttle:40}},e}(lg),FF=Pa(),HF=B;function WF(t,e,n){if(!r.node){var i=e.getZr();FF(i).records||(FF(i).records={}),function(t,e){if(FF(t).initialized)return;function n(n,i){t.on(n,function(n){var r=function(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}(e);HF(FF(t).records,function(t){t&&i(t,n,r.dispatchAction)}),function(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]);n&&(n.dispatchAction=null,e.dispatchAction(n))}(r.pendings,e)})}FF(t).initialized=!0,n("click",Y(YF,"click")),n("mousemove",Y(YF,"mousemove")),n("mousewheel",Y(YF,"mousewheel")),n("globalout",UF)}(i,e),(FF(i).records[t]||(FF(i).records[t]={})).handler=n}}function UF(t,e,n){t.handler("leave",null,n)}function YF(t,e,n,i){e.handler(t,n,i)}function XF(t,e){if(!r.node){var n=e.getZr();(FF(n).records||{})[t]&&(FF(n).records[t]=null)}}var ZF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=e.getComponent("tooltip"),r=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click|mousewheel";WF("axisPointer",n,function(t,e,n){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},e.prototype.remove=function(t,e){XF("axisPointer",e)},e.prototype.dispose=function(t,e){XF("axisPointer",e)},e.type="axisPointer",e}(Ky);function jF(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesByIndex(r)))return{point:[]};var o=n.getData(),a=La(o,t);if(null==a||a<0||X(a))return{point:[]};var s=o.getItemGraphicEl(a),l=n.coordinateSystem;if(n.getTooltipPosition)i=n.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(t.isStacked){var u=l.getBaseAxis(),c=l.getOtherAxis(u).dim,h=u.dim,d="x"===c||"radius"===c?1:0,p=o.mapDimension(h),f=[];f[d]=o.get(p,a),f[1-d]=o.get(o.getCalculationInfo("stackResultDimension"),a),i=l.dataToPoint(f)||[]}else i=l.dataToPoint(o.getValues(V(l.dimensions,function(t){return o.mapDimension(t)}),a))||[];else if(s){var g=s.getBoundingRect().clone();g.applyTransform(s.transform),i=[g.x+g.width/2,g.y+g.height/2]}return{point:i,el:s}}var qF=Pa();function KF(t,e,n){var i=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||U(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){eH(r)&&(r=jF({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=eH(r),u=o.axesInfo,c=s.axesInfo,h="leave"===i||eH(r),d={},p={},f={list:[],map:{}},g={showPointer:Y(JF,p),showTooltip:Y(QF,f)};B(s.coordSysMap,function(t,e){var n=l||t.containPoint(r);B(s.coordSysAxesInfo[e],function(t,e){var i=t.axis,o=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(u,t);if(!h&&n&&(!u||o)){var a=o&&o.value;null!=a||l||(a=i.pointToData(r)),null!=a&&$F(t,a,g,!1,d)}})});var v={};return B(c,function(t,e){var n=t.linkGroup;n&&!p[e]&&B(n.axesInfo,function(e,i){var r=p[i];if(e!==t&&r){var o=r.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,tH(e),tH(t)))),v[t.key]=o}})}),B(v,function(t,e){$F(c[e],t,g,!0,d)}),function(t,e,n){var i=n.axesInfo=[];B(e,function(e,n){var r=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(r.status="show"),r.value=o.value,r.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})})}(p,c,d),function(t,e,n,i){if(eH(e)||!t.list.length)return void i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}(f,r,t,a),function(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",o=qF(i)[r]||{},a=qF(i)[r]={};B(t,function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&t.triggerEmphasis&&B(n.seriesDataIndices,function(t){a[t.seriesIndex+"|"+t.dataIndex]=t})});var s=[],l=[];function u(t){return{seriesIndex:t.seriesIndex,dataIndex:t.dataIndex}}B(o,function(t,e){!a[e]&&l.push(u(t))}),B(a,function(t,e){!o[e]&&s.push(u(t))}),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}(c,0,n),d}}function $F(t,e,n,i,r){var o=t.axis;if(!o.scale.isBlank()&&o.containData(e))if(t.involveSeries){var a=function(t,e){var n=e.axis,i=n.dim,r=t,o=[],a=Number.MAX_VALUE,s=-1;return B(e.seriesModels,function(e,l){var u,c,h=e.getData().mapDimensionsAll(i);if(e.getAxisTooltipData){var d=e.getAxisTooltipData(h,t,n);c=d.dataIndices,u=d.nestestValue}else{if(!(c=e.indicesOfNearest(i,h[0],t,"category"===n.type?.5:null)).length)return;u=e.getData().get(h[0],c[0])}if(ca(u)){var p=t-u,f=Math.abs(p);f<=a&&((f=0&&s<0)&&(a=f,s=p,r=u,o.length=0),B(c,function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:o,snapToValue:r}}(e,t),s=a.payloadBatch,l=a.snapToValue;s[0]&&null==r.seriesIndex&&k(r,s[0]),!i&&t.snap&&o.containData(l)&&null!=l&&(e=l),n.showPointer(t,e,s),n.showTooltip(t,a,l)}else n.showPointer(t,e)}function JF(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function QF(t,e,n,i){var r=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,u=_k(l),c=t.map[u];c||(c=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(c)),c.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:i,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:r.slice()})}}function tH(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function eH(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function nH(t){wk.registerAxisPointerClass("CartesianAxisPointer",EF),t.registerComponentModel(GF),t.registerComponentView(ZF),t.registerPreprocessor(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!X(e)&&(t.axisPointer.link=[e])}}),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,{overallReset:function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=vk(t,e)}}),t.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},KF)}var iH=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis;"angle"===o.dim&&(this.animationThreshold=Math.PI/18);var a=o.polar,s=o.getExtent(),l=a.getOtherAxis(o).getExtent(),u=o.dataToCoord(e),c=i.get("type");if(c&&"none"!==c){var h=TF(i),d=rH[c](o,a,u,s,l,i.get("seriesDataIndices"),i.ecModel);d.style=h,t.graphicKey=d.type,t.pointer=d}var p=function(t,e,n,i,r){var o=e.axis,a=o.dataToCoord(t),s=i.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,c,h=i.getRadiusAxis().getExtent();if("radius"===o.dim){var d=[1,0,0,1,0,0];Ce(d,d,s),Te(d,d,[i.cx,i.cy]),l=Cd([a,-r],d);var p=e.getModel("axisLabel").get("rotate")||0,f=dD.innerTextLayout(s,p*Math.PI/180,-1);u=f.textAlign,c=f.textVerticalAlign}else{var g=h[1];l=i.coordToPoint([g+r,a]);var v=i.cx,y=i.cy;u=Math.abs(l[0]-v)/g<.3?"center":l[0]>v?"left":"right",c=Math.abs(l[1]-y)/g<.3?"middle":l[1]>y?"top":"bottom"}return{position:l,align:u,verticalAlign:c}}(e,n,0,a,i.get(["label","margin"]));CF(t,n,i,r,p)},e}(_F);var rH={line:function(t,e,n,i,r){return"angle"===t.dim?{type:"Line",shape:LF(e.coordToPoint([r[0],n]),e.coordToPoint([r[1],n]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:n}}},shadow:function(t,e,n,i,r,o,a){var s,l=Math.PI/180,u=RF(t,o,a);if("angle"===t.dim)s=OF(e.cx,e.cy,r[0],r[1],(-n-u/2)*l,(u/2-n)*l);else{var c=NF(n,i,u),h=c[0],d=c[1];s=OF(e.cx,e.cy,h,d,0,2*Math.PI)}return{type:"Sector",shape:s}}},oH="polar",aH=oH,sH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.findAxisModel=function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},e.type=oH,e.dependencies=["radiusAxis","angleAxis"],e.defaultOption={z:0,center:["50%","50%"],radius:"80%"},e}(lg),lH=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("polar",Ea).models[0]},e.type="polarAxis",e}(lg);E(lH,nS);var uH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="angleAxis",e}(lH),cH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="radiusAxis",e}(lH),hH=function(t){function e(e,n){return t.call(this,"radius",e,n)||this}return n(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e}(SM);hH.prototype.dataToRadius=SM.prototype.dataToCoord,hH.prototype.radiusToData=SM.prototype.coordToData;var dH=Pa(),pH=function(t){function e(e,n){return t.call(this,"angle",e,n||[0,360])||this}return n(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e.prototype.calculateCategoryInterval=function(){var t=this,e=t.getLabelModel(),n=t.scale,i=n.getExtent(),r=n.count();if(i[1]-i[0]<1)return 0;var o=i[0],a=t.dataToCoord(o+1)-t.dataToCoord(o),s=Math.abs(a),l=qr(null==o?"":o+"",e.getFont(),"center","top"),u=Math.max(l.height,7)/s;isNaN(u)&&(u=1/0);var c=Math.max(0,Math.floor(u)),h=dH(t.model),d=h.lastAutoInterval,p=h.lastTickCount;return null!=d&&null!=p&&Math.abs(d-c)<=1&&Math.abs(p-r)<=1&&d>c?c=d:(h.lastTickCount=r,h.lastAutoInterval=c),c},e}(SM);pH.prototype.dataToAngle=SM.prototype.dataToCoord,pH.prototype.angleToData=SM.prototype.coordToData;var fH=["radius","angle"],gH=function(){function t(t){this.dimensions=fH,this.type=oH,this.cx=0,this.cy=0,this._radiusAxis=new hH,this._angleAxis=new pH,this.axisPointerEnabled=!0,this.name=t||"",this._radiusAxis.polar=this._angleAxis.polar=this}return t.prototype.containPoint=function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},t.prototype.containData=function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},t.prototype.getAxis=function(t){return this["_"+t+"Axis"]},t.prototype.getAxes=function(){return[this._radiusAxis,this._angleAxis]},t.prototype.getAxesByScale=function(t){var e=[],n=this._angleAxis,i=this._radiusAxis;return n.scale.type===t&&e.push(n),i.scale.type===t&&e.push(i),e},t.prototype.getAngleAxis=function(){return this._angleAxis},t.prototype.getRadiusAxis=function(){return this._radiusAxis},t.prototype.getOtherAxis=function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},t.prototype.getTooltipAxes=function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},t.prototype.dataToPoint=function(t,e,n){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)],n)},t.prototype.pointToData=function(t,e,n){n=n||[];var i=this.pointToCoord(t);return n[0]=this._radiusAxis.radiusToData(i[0],e),n[1]=this._angleAxis.angleToData(i[1],e),n},t.prototype.pointToCoord=function(t){var e=t[0]-this.cx,n=t[1]-this.cy,i=this.getAngleAxis(),r=i.getExtent(),o=Math.min(r[0],r[1]),a=Math.max(r[0],r[1]);i.inverse?o=a-360:a=o+360;var s=Math.sqrt(e*e+n*n);e/=s,n/=s;for(var l=Math.atan2(-n,e)/Math.PI*180,u=la;)l+=360*u;return[s,l]},t.prototype.coordToPoint=function(t,e){e=e||[];var n=t[0],i=t[1]/180*Math.PI;return e[0]=Math.cos(i)*n+this.cx,e[1]=-Math.sin(i)*n+this.cy,e},t.prototype.getArea=function(){var t=this.getAngleAxis(),e=this.getRadiusAxis().getExtent().slice();e[0]>e[1]&&e.reverse();var n=t.getExtent(),i=Math.PI/180,r=1e-4;return{cx:this.cx,cy:this.cy,r0:e[0],r:e[1],startAngle:-n[0]*i,endAngle:-n[1]*i,clockwise:t.inverse,contain:function(t,e){var n=t-this.cx,i=e-this.cy,o=n*n+i*i,a=this.r,s=this.r0;return a!==s&&o-r<=a*a&&o+r>=s*s},x:this.cx-e[1],y:this.cy-e[1],width:2*e[1],height:2*e[1]}},t.prototype.convertToPixel=function(t,e,n){return vH(e)===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){return vH(e)===this?this.pointToData(n):null},t}();function vH(t){var e=t.seriesModel,n=t.polarModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}function yH(t,e){var n=this.getAngleAxis(),i=this.getRadiusAxis();if(CS(n,1),CS(i,1),RS(n),RS(i),"category"===n.type&&!n.onBand){var r=n.getExtent(),o=360/n.scale.count();n.inverse?r[1]+=o:r[1]-=o,n.setExtent(r[0],r[1])}}function mH(t,e){var n;if(t.type=Hw(e),t.scale=Ww(e,t.type,!1),t.onBand=eS(t.scale,e),t.inverse=e.get("inverse"),function(t){return"angleAxis"===t.mainType}(e)){t.inverse=t.inverse!==e.get("clockwise");var i=e.get("startAngle"),r=null!==(n=e.get("endAngle"))&&void 0!==n?n:i+(t.inverse?-360:360);t.setExtent(i,r)}e.axis=t,t.model=e}var xH={dimensions:fH,create:function(t,e){var n=[];return t.eachComponent(aH,function(t,i){var r=new gH(i+"");r.update=yH;var o=r.getRadiusAxis(),a=r.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");mH(o,s),mH(a,l),function(t,e,n){var i=e.get("center"),r=eg(e,n).refContainer;t.cx=Vo(i[0],r.width)+r.x,t.cy=Vo(i[1],r.height)+r.y;var o=t.getRadiusAxis(),a=Math.min(r.width,r.height)/2,s=e.get("radius");null==s?s=[0,"100%"]:X(s)||(s=[0,s]);var l=[Vo(s[0],a),Vo(s[1],a)];o.inverse?o.setExtent(l[1],l[0]):o.setExtent(l[0],l[1])}(r,t,e),n.push(r),t.coordinateSystem=r,r.model=t}),t.eachSeries(function(t){if(t.get("coordinateSystem")===oH){var e=t.getReferringComponents(aH,Ea).models[0];0;var n=t.coordinateSystem=e.coordinateSystem;n&&(yS(n.getRadiusAxis(),t,oH),yS(n.getAngleAxis(),t,oH))}}),n}},_H=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function bH(t,e,n){e[1]>e[0]&&(e=e.slice().reverse());var i=t.coordToPoint([e[0],n]),r=t.coordToPoint([e[1],n]);return{x1:i[0],y1:i[1],x2:r[0],y2:r[1]}}function wH(t){return t.getRadiusAxis().inverse?0:1}function SH(t){var e=t[0],n=t[t.length-1];e&&n&&Math.abs(Math.abs(e.coord-n.coord)-360)<1e-4&&t.pop()}var MH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.axisPointerClass="PolarAxisPointer",n}return n(e,t),e.prototype.render=function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,i=n.polar,r=i.getRadiusAxis().getExtent(),o=n.getTicksCoords({breakTicks:"none"}),a=n.getMinorTicksCoords(),s=[];B(n.getViewLabels(),function(t){if(!t.tick.offInterval){t=C(t);var e=n.scale;t.coord=n.dataToCoord(tS(e,t.tick)),s.push(t)}}),SH(s),SH(o),B(_H,function(e){!t.get([e,"show"])||n.scale.isBlank()&&"axisLine"!==e||IH[e](this.group,t,i,o,a,r,s)},this)}},e.type="angleAxis",e}(wk),IH={axisLine:function(t,e,n,i,r,o){var a,s=e.getModel(["axisLine","lineStyle"]),l=n.getAngleAxis(),u=Math.PI/180,c=l.getExtent(),h=wH(n),d=h?0:1,p=360===Math.abs(c[1]-c[0])?"Circle":"Arc";(a=0===o[d]?new ep[p]({shape:{cx:n.cx,cy:n.cy,r:o[h],startAngle:-c[0]*u,endAngle:-c[1]*u,clockwise:l.inverse},style:s.getLineStyle(),z2:1,silent:!0}):new Ih({shape:{cx:n.cx,cy:n.cy,r:o[h],r0:o[d]},style:s.getLineStyle(),z2:1,silent:!0})).style.fill=null,t.add(a)},axisTick:function(t,e,n,i,r,o){var a=e.getModel("axisTick"),s=(a.get("inside")?-1:1)*a.get("length"),l=o[wH(n)],u=V(i,function(t){return new Oh({shape:bH(n,[l,l+s],t.coord)})});t.add(wd(u,{style:P(a.getModel("lineStyle").getLineStyle(),{stroke:e.get(["axisLine","lineStyle","color"])})}))},minorTick:function(t,e,n,i,r,o){if(r.length){for(var a=e.getModel("axisTick"),s=e.getModel("minorTick"),l=(a.get("inside")?-1:1)*s.get("length"),u=o[wH(n)],c=[],h=0;hf?"left":"right",y=Math.abs(p[1]-g)/d<.3?"middle":p[1]>g?"top":"bottom";if(s&&s[h]){var m=s[h];$(m)&&m.textStyle&&(a=new kp(m.textStyle,l,l.ecModel))}var x=new du({silent:dD.isLabelSilent(e),style:sp(a,{x:p[0],y:p[1],fill:a.getTextColor()||e.get(["axisLine","lineStyle","color"]),text:i.formattedLabel,align:v,verticalAlign:y})});if(t.add(x),Gd({el:x,componentModel:e,itemName:i.formattedLabel,formatterParamsExtra:{isTruncated:function(){return x.isTruncated},value:i.rawLabel,tickIndex:r}}),c){var _=dD.makeAxisEventDataBase(e);_.targetType="axisLabel",_.value=i.rawLabel,Iu(x).eventData=_}},this)},splitLine:function(t,e,n,i,r,o){var a=e.getModel("splitLine").getModel("lineStyle"),s=a.get("color"),l=0;s=s instanceof Array?s:[s];for(var u=[],c=0;c=0?"p":"n",I=x;y&&(i[o][S]||(i[o][S]={p:x,n:x}),I=i[o][S][M]);var T=void 0,C=void 0,D=void 0,A=void 0;if("radius"===c.dim){var k=c.dataToCoord(w)-x,L=t.dataToCoord(S);Ao(k)=A})}}(t,e,n,i)})})});var PH={startAngle:90,clockwise:!0,splitNumber:12,containShape:!1,axisLabel:{rotate:0}},OH={splitNumber:5},RH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="polar",e}(Ky);function NH(t,e){e=e||{};var n=t.coordinateSystem,i=t.axis,r={},o=i.position,a=i.orient,s=n.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],u={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};r.position=["vertical"===a?u.vertical[o]:l[0],"horizontal"===a?u.horizontal[o]:l[3]];r.rotation=Math.PI/2*{horizontal:0,vertical:1}[a];r.labelDirection=r.tickDirection=r.nameDirection={top:-1,bottom:1,right:1,left:-1}[o],t.get(["axisTick","inside"])&&(r.tickDirection=-r.tickDirection),ot(e.labelInside,t.get(["axisLabel","inside"]))&&(r.labelDirection=-r.labelDirection);var c=t.get(["axisLabel","rotate"]);return r.labelRotate="top"===o?-c:c,r.z2=1,r}var EH=["splitArea","splitLine","breakArea"],zH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.axisPointerClass="SingleAxisPointer",n}return n(e,t),e.prototype.render=function(e,n,i,r){var o=this.group;o.removeAll();var a=this._axisGroup;this._axisGroup=new vo;var s=NH(e),l=new dD(e,i,s);l.build(),o.add(this._axisGroup),o.add(l.group),B(EH,function(t){e.get([t,"show"])&&BH[t](this,this.group,this._axisGroup,e,i)},this),kd(a,this._axisGroup,e),t.prototype.render.call(this,e,n,i,r)},e.prototype.remove=function(){Ik(this)},e.type="singleAxis",e}(wk),BH={splitLine:function(t,e,n,i,r){var o=i.axis;if(!o.scale.isBlank()){var a=i.getModel("splitLine"),s=a.getModel("lineStyle"),l=s.get("color");l=l instanceof Array?l:[l];for(var u=s.get("width"),c=i.coordinateSystem.getRect(),h=o.isHorizontal(),d=[],p=0,f=o.getTicksCoords({tickModel:a,breakTicks:"none",pruneByBreak:"preserve_extent_bound"}),g=[],v=[],y=0;y=e.y&&t[1]<=e.y+e.height:n.contain(n.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},t.prototype.pointToData=function(t,e,n){n=n||[];var i=this.getAxis();return n[0]=i.coordToData(i.toLocalCoord(t["horizontal"===i.orient?0:1])),n},t.prototype.dataToPoint=function(t,e,n){var i=this.getAxis(),r=this.getRect();n=n||[];var o="horizontal"===i.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=i.toGlobalCoord(i.dataToCoord(+t)),n[1-o]=0===o?r.y+r.height/2:r.x+r.width/2,n},t.prototype.convertToPixel=function(t,e,n){return HH(e)===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){return HH(e)===this?this.pointToData(n):null},t}();function HH(t){var e=t.seriesModel,n=t.singleAxisModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}var WH={create:function(t,e){var n=[];return t.eachComponent(Nk,function(i,r){var o=new FH(i,t,e);o.name="single_"+r,o.resize(i,e),i.coordinateSystem=o,n.push(o)}),t.eachSeries(function(t){if("singleAxis"===t.get("coordinateSystem")){var e=t.getReferringComponents(Nk,Ea).models[0],n=t.coordinateSystem=e&&e.coordinateSystem;n&&yS(n.getAxis(),t,Rk)}}),n},dimensions:GH},UH=["x","y"],YH=["width","height"],XH=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.coordinateSystem,s=jH(o),l=qH(a,s),u=qH(a,1-s),c=a.dataToPoint(e)[0],h=i.get("type");if(h&&"none"!==h){var d=TF(i),p=ZH[h](o,c,l,u,i.get("seriesDataIndices"),i.ecModel);p.style=d,t.graphicKey=p.type,t.pointer=p}kF(e,t,NH(n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=NH(e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=AF(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.coordinateSystem,a=jH(r),s=qH(o,a),l=[t.x,t.y];l[a]+=e[a],l[a]=Math.min(s[1],l[a]),l[a]=Math.max(s[0],l[a]);var u=qH(o,1-a),c=(u[1]+u[0])/2,h=[c,c];return h[a]=l[a],{x:l[0],y:l[1],rotation:t.rotation,cursorPoint:h,tooltipOption:{verticalAlign:"middle"}}},e}(_F),ZH={line:function(t,e,n,i){return{type:"Line",subPixelOptimize:!0,shape:LF([e,i[0]],[e,i[1]],jH(t))}},shadow:function(t,e,n,i,r,o){var a=RF(t,r,o),s=i[1]-i[0],l=NF(e,n,a),u=l[0],c=l[1];return{type:"Rect",shape:PF([u,i[0]],[c-u,s],jH(t))}}};function jH(t){return t.isHorizontal()?0:1}function qH(t,e){var n=t.getRect();return[n[UH[e]],n[UH[e]]+n[YH[e]]]}var KH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="single",e}(Ky);var $H=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e,n,i){var r=og(e);t.prototype.init.apply(this,arguments),JH(e,r)},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),JH(this.option,e)},e.prototype.getCellSize=function(){return this.option.cellSize},e.type="calendar",e.layoutMode="box",e.defaultOption={z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:ug.color.axisLine,width:1,type:"solid"}},itemStyle:{color:ug.color.neutral00,borderWidth:1,borderColor:ug.color.neutral10},dayLabel:{show:!0,firstDay:0,position:"start",margin:ug.size.s,color:ug.color.secondary},monthLabel:{show:!0,position:"start",margin:ug.size.s,align:"center",formatter:null,color:ug.color.secondary},yearLabel:{show:!0,position:null,margin:ug.size.xl,formatter:null,color:ug.color.quaternary,fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},e}(lg);function JH(t,e){var n,i=t.cellSize;1===(n=X(i)?i:t.cellSize=[i,i]).length&&(n[1]=n[0]);var r=V([0,1],function(t){return function(t,e){return null!=t[Zf[e][0]]||null!=t[Zf[e][1]]&&null!=t[Zf[e][2]]}(e,t)&&(n[t]="auto"),null!=n[t]&&"auto"!==n[t]});rg(t,e,{type:"box",ignoreSize:r})}var QH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=this.group;i.removeAll();var r=t.coordinateSystem,o=r.getRangeInfo(),a=r.getOrient(),s=e.getLocaleModel();this._renderDayRect(t,o,i),this._renderLines(t,o,a,i),this._renderYearText(t,o,a,i),this._renderMonthText(t,s,a,i),this._renderWeekText(t,s,o,a,i)},e.prototype._renderDayRect=function(t,e,n){for(var i=t.coordinateSystem,r=t.getModel("itemStyle").getItemStyle(),o=i.getCellWidth(),a=i.getCellHeight(),s=e.start.time;s<=e.end.time;s=i.getNextNDay(s,1).time){var l=i.dataToCalendarLayout([s],!1).tl,u=new lu({shape:{x:l[0],y:l[1],width:o,height:a},cursor:"default",style:r});n.add(u)}},e.prototype._renderLines=function(t,e,n,i){var r=this,o=t.coordinateSystem,a=t.getModel(["splitLine","lineStyle"]).getLineStyle(),s=t.get(["splitLine","show"]),l=a.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,c=0;u.time<=e.end.time;c++){d(u.formatedDate),0===c&&(u=o.getDateInfo(e.start.y+"-"+e.start.m));var h=u.date;h.setMonth(h.getMonth()+1),u=o.getDateInfo(h)}function d(e){r._firstDayOfMonth.push(o.getDateInfo(e)),r._firstDayPoints.push(o.dataToCalendarLayout([e],!1).tl);var l=r._getLinePointsOfOneWeek(t,e,n);r._tlpoints.push(l[0]),r._blpoints.push(l[l.length-1]),s&&r._drawSplitline(l,a,i)}d(o.getNextNDay(e.end.time,1).formatedDate),s&&this._drawSplitline(r._getEdgesPoints(r._tlpoints,l,n),a,i),s&&this._drawSplitline(r._getEdgesPoints(r._blpoints,l,n),a,i)},e.prototype._getEdgesPoints=function(t,e,n){var i=[t[0].slice(),t[t.length-1].slice()],r="horizontal"===n?0:1;return i[0][r]=i[0][r]-e/2,i[1][r]=i[1][r]+e/2,i},e.prototype._drawSplitline=function(t,e,n){var i=new kh({z2:20,shape:{points:t},style:e});n.add(i)},e.prototype._getLinePointsOfOneWeek=function(t,e,n){for(var i=t.coordinateSystem,r=i.getDateInfo(e),o=[],a=0;a<7;a++){var s=i.getNextNDay(r.time,a),l=i.dataToCalendarLayout([s.time],!1);o[2*s.day]=l.tl,o[2*s.day+1]=l["horizontal"===n?"bl":"tr"]}return o},e.prototype._formatterLabel=function(t,e){return j(t)&&t?Of(t,e):Z(t)?t(e):e.nameMap},e.prototype._yearTextPositionControl=function(t,e,n,i,r){var o=e[0],a=e[1],s=["center","bottom"];"bottom"===i?(a+=r,s=["center","top"]):"left"===i?o-=r:"right"===i?(o+=r,s=["center","top"]):a-=r;var l=0;return"left"!==i&&"right"!==i||(l=Math.PI/2),{rotation:l,x:o,y:a,style:{align:s[0],verticalAlign:s[1]}}},e.prototype._renderYearText=function(t,e,n,i){var r=t.getModel("yearLabel");if(r.get("show")){var o=r.get("margin"),a=r.get("position");a||(a="horizontal"!==n?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,c="horizontal"===n?0:1,h={top:[l,s[c][1]],bottom:[l,s[1-c][1]],left:[s[1-c][0],u],right:[s[c][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var p=r.get("formatter"),f={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(p,f),v=new du({z2:30,style:sp(r,{text:g}),silent:r.get("silent")});v.attr(this._yearTextPositionControl(v,h[a],n,a,o)),i.add(v)}},e.prototype._monthTextPositionControl=function(t,e,n,i,r){var o="left",a="top",s=t[0],l=t[1];return"horizontal"===n?(l+=r,e&&(o="center"),"start"===i&&(a="bottom")):(s+=r,e&&(a="middle"),"start"===i&&(o="right")),{x:s,y:l,align:o,verticalAlign:a}},e.prototype._renderMonthText=function(t,e,n,i){var r=t.getModel("monthLabel");if(r.get("show")){var o=r.get("nameMap"),a=r.get("margin"),s=r.get("position"),l=r.get("align"),u=[this._tlpoints,this._blpoints];o&&!j(o)||(o&&(e=Fp(o)||e),o=e.get(["time","monthAbbr"])||[]);var c="start"===s?0:1,h="horizontal"===n?0:1;a="start"===s?-a:a;for(var d="center"===l,p=r.get("silent"),f=0;f=r.start.time&&i.timea.end.time&&t.reverse(),t},t.prototype._getRangeInfo=function(t){var e,n=[this.getDateInfo(t[0]),this.getDateInfo(t[1])];n[0].time>n[1].time&&(e=!0,n.reverse());var i=Math.floor(n[1].time/tW)-Math.floor(n[0].time/tW)+1,r=new Date(n[0].time),o=r.getDate(),a=n[1].date.getDate();r.setDate(o+i-1);var s=r.getDate();if(s!==a)for(var l=r.getTime()-n[1].time>0?1:-1;(s=r.getDate())!==a&&(r.getTime()-n[1].time)*l>0;)i-=l,r.setDate(s-l);var u=Math.floor((i+n[0].day+6)/7),c=e?1-u:u-1;return e&&n.reverse(),{range:[n[0].formatedDate,n[1].formatedDate],start:n[0],end:n[1],allDay:i,weeks:u,nthWeek:c,fweek:n[0].day,lweek:n[1].day}},t.prototype._getDateByWeeksAndDay=function(t,e,n){var i=this._getRangeInfo(n);if(t>i.weeks||0===t&&ei.lweek)return null;var r=7*(t-1)-i.fweek+e,o=new Date(i.start.time);return o.setDate(+i.start.d+r),this.getDateInfo(o)},t.create=function(e,n){var i=[];return e.eachComponent("calendar",function(r){var o=new t(r,e,n);i.push(o),r.coordinateSystem=o}),e.eachComponent(function(t,e){Wf({targetModel:e,coordSysType:"calendar",coordSysProvider:Uf})}),i},t.dimensions=["time","value"],t}();function nW(t){var e=t.calendarModel,n=t.seriesModel;return e?e.coordinateSystem:n?n.coordinateSystem:null}var iW=1,rW=2,oW=3,aW={none:0,all:1,body:2,corner:3};function sW(t,e,n){var i=e[dd[n]].getCell(t);return!i&&K(t)&&t<0&&(i=e[dd[1-n]].getUnitLayoutInfo(n,Math.round(t))),i}function lW(t){var e=t||[];return e[0]=e[0]||[],e[1]=e[1]||[],e[0][0]=e[0][1]=e[1][0]=e[1][1]=NaN,e}function uW(t,e,n,i,r){cW(t[0],e,r,n,i,0),cW(t[1],e,r,n,i,1)}function cW(t,e,n,i,r,o){t[0]=1/0,t[1]=-1/0;var a=i[o],s=X(a)?a:[a],l=s.length,u=!!n;if(l>=1?(hW(t,e,s,u,r,o,0),l>1&&hW(t,e,s,u,r,o,l-1)):t[0]=t[1]=NaN,u){var c=-r[dd[1-o]].getLocatorCount(o),h=r[dd[o]].getLocatorCount(o)-1;n===aW.body?c=Do(0,c):n===aW.corner&&(h=Co(-1,h)),h=e[0]&&t[0]<=e[1]}function yW(t,e){t.id.set(e[0][0],e[1][0]),t.span.set(e[0][1]-t.id.x+1,e[1][1]-t.id.y+1)}function mW(t,e,n,i){var r=sW(e[i][0],n,i),o=sW(e[i][1],n,i);t[dd[i]]=t[pd[i]]=NaN,r&&o&&(t[dd[i]]=r.xy,t[pd[i]]=o.xy+o.wh-r.xy)}function xW(t,e,n,i){return t[dd[e]]=n,t[dd[1-e]]=i,t}var _W=function(){function t(t,e){this._cells=[],this._levels=[],this.dim=t,this.dimIdx="x"===t?0:1,this._model=e,this._uniqueValueGen=function(t){var e=t.toUpperCase(),n=new RegExp("^"+e+"([0-9]+)$"),i=0;function r(t){var e;null!=t&&(e=t.match(n))&&(i=Do(i,+e[1]+1))}function o(){return""+e+i++}function a(t,e){for(var n=mt(),i=0;i=1,x=n[dd[i]],_=o.getLocatorCount(i)-1,b=new Wa;for(a.resetLayoutIterator(b,i);b.next();)w(b.item);for(o.resetLayoutIterator(b,i);b.next();)w(b.item);function w(t){rt(t.wh)&&(t.wh=y),t.xy=x,t.id[dd[i]]!==_||m||(t.wh=n[dd[i]]+n[pd[i]]-t.xy),x+=t.wh}}function XW(t,e){for(var n=e[dd[t]].resetCellIterator();n.next();){var i=n.item;jW(i.rect,t,i.id,i.span,e),jW(i.rect,1-t,i.id,i.span,e),i.type===oW&&(i.xy=i.rect[dd[t]],i.wh=i.rect[pd[t]])}}function ZW(t,e){t.travelExistingCells(function(t){var n=t.span;if(n){var i=t.spanRect,r=t.id;jW(i,0,r,n,e),jW(i,1,r,n,e)}})}function jW(t,e,n,i,r){t[pd[e]]=0;var o=n[dd[e]]<0?r[dd[1-e]]:r[dd[e]],a=o.getUnitLayoutInfo(e,n[dd[e]]);if(t[dd[e]]=a.xy,t[pd[e]]=a.wh,i[dd[e]]>1){var s=o.getUnitLayoutInfo(e,n[dd[e]]+i[dd[e]]-1);t[pd[e]]=s.xy+s.wh-a.xy}}function qW(t,e){return Math.max(Math.min(t,at(e,1/0)),0)}function KW(t){var e=t.matrixModel,n=t.seriesModel;return e?e.coordinateSystem:n?n.coordinateSystem:null}var $W={inBody:1,inCorner:2,outside:3},JW={x:null,y:null,point:[]};function QW(t,e,n,i,r){var o=n[dd[e]],a=n[dd[1-e]],s=o.getUnitLayoutInfo(e,o.getLocatorCount(e)-1),l=o.getUnitLayoutInfo(e,0),u=a.getUnitLayoutInfo(e,-a.getLocatorCount(e)),c=a.shouldShow()?a.getUnitLayoutInfo(e,-1):null,h=t.point[e]=i[e];if(l||c)if(r!==aW.body)if(r!==aW.corner){var d=l?l.xy:c?c.xy+c.wh:NaN,p=u?u.xy:d,f=s?s.xy+s.wh:d;if(hf){if(!r)return void(t[dd[e]]=$W.outside);h=f}t.point[e]=h,t[dd[e]]=d<=h&&h<=f?$W.inBody:p<=h&&h<=d?$W.inCorner:$W.outside}else c?(t[dd[e]]=$W.inCorner,h=Co(c.xy+c.wh,Do(u.xy,h)),t.point[e]=h):t[dd[e]]=$W.outside;else l?(t[dd[e]]=$W.inBody,h=Co(s.xy+s.wh,Do(l.xy,h)),t.point[e]=h):t[dd[e]]=$W.outside;else t[dd[e]]=$W.outside}function tU(t,e,n,i){var r=1-n;if(t[dd[n]]!==$W.outside)for(i[dd[n]].resetCellIterator(UW);UW.next();){var o=UW.item;if(iU(t.point[n],o.rect,n)&&iU(t.point[r],o.rect,r))return e[n]=o.ordinal,void(e[r]=o.id[dd[r]])}}function eU(t,e,n,i){if(t[dd[n]]!==$W.outside)for((t[dd[n]]===$W.inCorner?i[dd[1-n]]:i[dd[n]]).resetLayoutIterator(WW,n);WW.next();)if(nU(t.point[n],WW.item))return void(e[n]=WW.item.id[dd[n]])}function nU(t,e){return e.xy<=t&&t<=e.xy+e.wh}function iU(t,e,n){return e[dd[n]]<=t&&t<=e[dd[n]]+e[pd[n]]}function rU(t,e){var n;return B(e,function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)}),n}var oU=["transition","enterFrom","leaveTo"],aU=oU.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function sU(t,e,n){if(n&&(!t[n]&&e[n]&&(t[n]={}),t=t[n],e=e[n]),t&&e)for(var i=n?oU:aU,r=0;r=0;l--){var d,p,f;if(f=null!=(p=Da((d=n[l]).id,null))?r.get(p):null){var g=f.parent,v=(h=cU(g),{}),y=ng(f,d,g===i?{width:o,height:a}:{width:h.width,height:h.height},null,{hv:d.hv,boundingMode:d.bounding},v);if(!cU(f).isNew&&y){for(var m=d.transition,x={},_=0;_=0)?x[b]=w:f[b]=w}rd(f,x,t,0)}else f.attr(v)}}},e.prototype._clear=function(){var t=this,e=this._elMap;e.each(function(n){fU(n,cU(n).option,e,t._lastGraphicModel)}),this._elMap=mt()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e}(Ky);function dU(t){var e=wt(uU,t)?uU[t]:md(t);var n=new e({});return cU(n).type=t,n}function pU(t,e,n,i){var r=dU(n);return e.add(r),i.set(t,r),cU(r).id=t,cU(r).isNew=!0,r}function fU(t,e,n,i){t&&t.parent&&("group"===t.type&&t.traverse(function(t){fU(t,e,n,i)}),AG(t,e,i),n.removeKey(cU(t).id))}function gU(t,e,n,i){t.isGroup||B([["cursor",Zs.prototype.cursor],["zlevel",i||0],["z",n||0],["z2",0]],function(n){var i=n[0];wt(e,i)?t[i]=at(e[i],n[1]):null==t[i]&&(t[i]=n[1])}),B(W(e),function(n){if(0===n.indexOf("on")){var i=e[n];t[n]=Z(i)?i:null}}),wt(e,"draggable")&&(t.draggable=e.draggable),null!=e.name&&(t.name=e.name),null!=e.id&&(t.id=e.id)}var vU=["x","y","radius","angle","single"],yU=Pa(),mU=["cartesian2d","polar","singleAxis"];function xU(t){return t+"Axis"}function _U(t,e){var n,i=mt(),r=[],o=mt();t.eachComponent({mainType:"dataZoom",query:e},function(t){o.get(t.uid)||s(t)});do{n=!1,t.eachComponent("dataZoom",a)}while(n);function a(t){!o.get(t.uid)&&function(t){var e=!1;return t.eachTargetAxis(function(t,n){var r=i.get(t);r&&r[n]&&(e=!0)}),e}(t)&&(s(t),n=!0)}function s(t){o.set(t.uid,!0),r.push(t),t.eachTargetAxis(function(t,e){(i.get(t)||i.set(t,[]))[e]=!0})}return r}function bU(t){var e=t.ecModel,n={infoList:[],infoMap:mt()};return t.eachTargetAxis(function(t,i){var r=e.getComponent(xU(t),i);if(r){var o=r.getCoordSysModel();if(o){var a=o.uid,s=n.infoMap.get(a);s||(s={model:o,axisModels:[]},n.infoList.push(s),n.infoMap.set(a,s)),s.axisModels.push(r)}}}),n}function wU(t){var e=yU(ax(t));return e.axisProxyMap||(e.axisProxyMap=mt())}function SU(t){if(t)return wU(t.ecModel).get(t.uid)}function MU(t,e){var n=e.getAxisModel().axis.__alignTo;return n&&t.getAxisProxy(n.dim,n.model.componentIndex)?SU(n.model):null}var IU=function(){function t(){this.indexList=[],this.indexMap=[]}return t.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},t}(),TU=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._autoThrottle=!0,n._noTarget=!0,n._rangePropMode=["percent","percent"],n}return n(e,t),e.prototype.init=function(t,e,n){var i=CU(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this._doInit(i)},e.prototype.mergeOption=function(t){var e=CU(t);D(this.option,t,!0),D(this.settledOption,e,!0),this._doInit(e)},e.prototype._doInit=function(t){var e=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;B([["start","startValue"],["end","endValue"]],function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=n[t[0]]=null)},this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),e=this._targetAxisInfoMap=mt();this._fillSpecifiedTargetAxis(e)?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(e,this._orient)),this._noTarget=!0,e.each(function(t){t.indexList.length&&(this._noTarget=!1)},this)},e.prototype._fillSpecifiedTargetAxis=function(t){var e=!1;return B(vU,function(n){var i=this.getReferringComponents(xU(n),za);if(i.specified){e=!0;var r=new IU;B(i.models,function(t){r.add(t.componentIndex)}),t.set(n,r)}},this),e},e.prototype._fillAutoTargetAxisByOrient=function(t,e){var n=this.ecModel,i=!0;if(i){var r="vertical"===e?"y":"x";o(n.findComponents({mainType:r+"Axis"}),r)}i&&o(n.findComponents({mainType:"singleAxis",filter:function(t){return t.get("orient",!0)===e}}),"single");function o(e,n){var r=e[0];if(r){var o=new IU;if(o.add(r.componentIndex),t.set(n,o),i=!1,"x"===n||"y"===n){var a=r.getReferringComponents("grid",Ea).models[0];a&&B(e,function(t){r.componentIndex!==t.componentIndex&&a===t.getReferringComponents("grid",Ea).models[0]&&o.add(t.componentIndex)})}}}i&&B(vU,function(e){if(i){var r=n.findComponents({mainType:xU(e),filter:function(t){return"category"===t.get("type",!0)}});if(r[0]){var o=new IU;o.add(r[0].componentIndex),t.set(e,o),i=!1}}},this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis(function(e){!t&&(t=e)},this),"y"===t?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var e=this._rangePropMode,n=this.get("rangeMode");B([["start","startValue"],["end","endValue"]],function(i,r){var o=null!=t[i[0]],a=null!=t[i[1]];o&&!a?e[r]="percent":!o&&a?e[r]="value":n?e[r]=n[r]:o&&(e[r]="percent")})},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis(function(e,n){null==t&&(t=this.ecModel.getComponent(xU(e),n))},this),t},e.prototype.eachTargetAxis=function(t,e){this._targetAxisInfoMap.each(function(n,i){B(n.indexList,function(n){t.call(e,i,n)})})},e.prototype.getAxisProxy=function(t,e){return SU(this.getAxisModel(t,e))},e.prototype.getAxisModel=function(t,e){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[e])return this.ecModel.getComponent(xU(t),e)},e.prototype.setRawRange=function(t){var e=this.option,n=this.settledOption;B([["start","startValue"],["end","endValue"]],function(i){null==t[i[0]]&&null==t[i[1]]||(e[i[0]]=n[i[0]]=t[i[0]],e[i[1]]=n[i[1]]=t[i[1]])},this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var e=this.option;B(["start","startValue","end","endValue"],function(n){e[n]=t[n]})},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getWindow().percent},e.prototype.getValueRange=function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getWindow().value;var n=this.findRepresentativeAxisProxy();return n?n.getWindow().value:void 0},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return SU(t);for(var e,n=this._targetAxisInfoMap.keys(),i=0;i=0}(e)){var n=xU(this._dimName),i=e.getReferringComponents(n,Ea).models[0];i&&this._axisIndex===i.componentIndex&&t.push(e)}},this),t},t.prototype.getAxisModel=function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},t.prototype.getMinMaxSpan=function(){return C(this._minMaxSpan)},t.prototype.calculateDataWindow=function(t){var e,n=this._extent,i=this.getAxisModel().axis,r=i.scale,o=this._dataZoomModel.getRangePropMode(),a=[0,100],s=[],l=[],u=[!1,!1];B(["start","end"],function(i,c){var h=t[i],d=t[i+"Value"];"percent"===o[c]?(null==h&&(h=a[c]),d=Bo(h,a,n),u[c]=!0):(e=!0,null==d?d=n[c]:(d=r.parse(d),r.sanitize&&(d=r.sanitize(d,n))),h=Bo(d,n,a)),l[c]=null==d||isNaN(d)?n[c]:d,s[c]=null==h||isNaN(h)?a[c]:h}),Wo(l),Wo(s);var c=this._minMaxSpan;function h(t,e,n,i,r){var o=r?"Span":"ValueSpan";ez(0,t,n,"all",c["min"+o],c["max"+o]);for(var a=0;a<2;a++)e[a]=Bo(t[a],n,i,!0),r&&(e[a]=e[a],u[a]=!0);$a(e)}e?h(l,s,n,a,!1):h(s,l,a,n,!0);var d=vw(r)||fw(r),p=i.getExtent(),f=Ao(p[1]-p[0]),g=d?0:Xo(l,f,.5);B([[0,Po],[1,Lo]],function(t){var e=t[0],i=t[1];u[e]&&isFinite(g)&&(l[e]=Ho(l[e],g),l[e]=Co(n[1],Do(n[0],l[e])),s[e]===a[e]&&(l[e]=n[e],d&&(l[e]=i(l[e]))))}),$a(l);var v=[Bo(l[0],n,a,!0),Bo(l[1],n,a,!0)];return $a(v),{value:l,percent:s,percentInverted:v,valuePrecision:g}},t.prototype.reset=function(t,e){if(this.hostedBy(t)){var n=this.getAxisModel().axis;CS(n,2);var i=n.scale.rawExtentInfo;this._extent=i.makeNoZoom(),this._updateMinMaxSpan();var r=t.settledOption;e&&(r=P({start:e[0],end:e[1]},r));var o=this._window=this.calculateDataWindow(r),a=o.percent,s=o.value;0!==a[0]&&i.setZoomMM(0,s[0]),100!==a[1]&&i.setZoomMM(1,s[1])}},t.prototype.filterData=function(t,e){if(this.hostedBy(t)){var n=this._dimName,i=this.getTargetSeriesModels(),r=t.get("filterMode"),o=this._window.value;"none"!==r&&B(i,function(t){var e=t.getData(),i=e.mapDimensionsAll(n);if(i.length){if("weakFilter"===r){var a=e.getStore(),s=V(i,function(t){return e.getDimensionIndex(t)},e);e.filterSelf(function(t){for(var e,n,r,l=0;lo[1];if(c&&!h&&!d)return!0;c&&(r=!0),h&&(e=!0),d&&(n=!0)}return r&&e&&n})}else B(i,function(n){if("empty"===r)t.setData(e=e.map(n,function(t){return function(t){return t>=o[0]&&t<=o[1]}(t)?t:NaN}));else{var i={};i[n]=o,e.selectRange(i)}});B(i,function(t){e.setApproximateExtent(o,t)})}})}},t.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,n=this._extent;B(["min","max"],function(i){var r=e.get(i+"Span"),o=e.get(i+"ValueSpan");null!=o&&(o=this.getAxisModel().axis.scale.parse(o)),null!=o?r=Bo(n[0]+o,n,[0,100],!0):null!=r&&(o=Bo(r,[0,100],n,!0)-n[0]),t[i+"Span"]=r,t[i+"ValueSpan"]=o},this)},t}(),PU={dirtyOnOverallProgress:!0,getTargetSeries:function(t){var e,n=[];e=function(e,i,r,o){if(!SU(r)){var a=new LU(e,i,o,t);n.push(a),function(t,e){wU(t.ecModel).set(t.uid,e)}(r,a)}},t.eachComponent("dataZoom",function(n){n.eachTargetAxis(function(i,r){var o=t.getComponent(xU(i),r);e(i,r,o,n)})});var i=mt();return B(n,function(t){B(t.getTargetSeriesModels(),function(t){i.set(t.uid,t)})}),i},overallReset:function(t,e){t.eachComponent("dataZoom",function(t){var n=[];t.eachTargetAxis(function(e,i){var r=t.getAxisProxy(e,i),o=MU(t,r);o?n.push([r,o]):r.reset(t,null)}),B(n,function(e){e[0].reset(t,e[1].getWindow().percentInverted)}),t.eachTargetAxis(function(n,i){t.getAxisProxy(n,i).filterData(t,e)})}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy();if(e){var n=e.getWindow(),i=n.percent,r=n.value;t.setCalculatedRange({start:i[0],end:i[1],startValue:r[0],endValue:r[1]})}})}};var OU=Ja();function RU(t){OU(t,function(){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,PU),function(t){t.registerAction("dataZoom",function(t,e){B(_U(e,t),function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})})}(t),t.registerSubTypeDefaulter("dataZoom",function(){return"slider"})})}function NU(t){t.registerComponentModel(DU),t.registerComponentView(kU),RU(t)}var EU=function(){},zU={};function BU(t,e){zU[t]=e}function VU(t){return zU[t]}var GU=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e,n,i){var r=i.getTheme().get("toolbox"),o=r?r.feature:null;o&&(this._themeFeatureOption=k({},o),r.feature={}),t.prototype.init.call(this,e,n,i),o&&(r.feature=o)},e.prototype.optionUpdated=function(){B(this.option.feature,function(t,e){var n=this._themeFeatureOption,i=VU(e);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(this.ecModel)),n&&n[e]&&(D(t,n[e]),n[e]=null),D(t,i.defaultOption))},this)},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:ug.color.border,borderRadius:0,borderWidth:0,padding:ug.size.m,itemSize:15,itemGap:ug.size.s,showTitle:!0,iconStyle:{borderColor:ug.color.accent50,color:"none"},emphasis:{iconStyle:{borderColor:ug.color.accent70}},tooltip:{show:!1,position:"bottom"}},e}(lg);function FU(t,e){var n=Df(e.get("padding")),i=e.getItemStyle(["color","opacity"]);return i.fill=e.get("backgroundColor"),new lu({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:i,silent:!0,z2:-1})}var HU=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this.group;if(r.removeAll(),t.get("show")){var o=+t.get("itemSize"),a="vertical"===t.get("orient"),s=t.get("feature")||{},l=this._features||(this._features=mt()),u=[];B(s,function(t,e){u.push(e)}),new mb(this._featureNames||[],u).add(f).update(f).remove(Y(f,null)).execute(),this._featureNames=F(u,function(t){return l.hasKey(t)});var c=eg(t,n).refContainer,h=t.getBoxLayoutParams(),d=t.get("padding"),p=Jf(h,c,d);qf(t.get("orient"),r,t.get("itemGap"),p.width,p.height),ng(r,h,c,d),r.add(FU(r.getBoundingRect(),t)),a||r.eachChild(function(t){var e=t.__title,i=t.ensureState("emphasis"),a=i.textConfig||(i.textConfig={}),s=t.getTextContent(),l=s&&s.ensureState("emphasis");if(l&&!Z(l)&&e){var u=l.style||(l.style={}),c=qr(e,du.makeFont(u)),h=t.x+r.x,d=!1;t.y+r.y+o+c.height>n.getHeight()&&(a.position="top",d=!0);var p=d?-5-c.height:o+10;h+c.width/2>n.getWidth()?(a.position=["100%",p],u.align="right"):h-c.width/2<0&&(a.position=[0,p],u.align="left")}})}function f(c,h){var d,p=null!=c&&null==h,f=null!=c&&null!=h,g=null==c,v=p||f?u[c]:u[h],y=s[v],m=p||f?new kp(y,t,e):null,x=m&&m.get("show");if(p){if(!x)return;if(function(t){return 0===t.indexOf("my")}(v))d={onclick:m.option.onclick,featureName:v};else{var _=VU(v);if(!_)return;d=new _}l.set(v,d)}else d=l.get(v);if(g||!x)return WU(d)&&d.dispose&&d.dispose(e,n),void l.removeKey(v);i&&null!=i.newTitle&&i.featureName===v&&(y.title=i.newTitle),p&&(d.uid=Pp("toolbox-feature")),d.model=m,d.ecModel=e,d.api=n,function(i,s,l){var u,c,h=i.getModel("iconStyle"),d=i.getModel(["emphasis","iconStyle"]),p=s instanceof EU&&s.getIcons?s.getIcons():i.get("icon"),f=i.get("title")||{};j(p)?(u={})[l]=p:u=p;j(f)?(c={})[l]=f:c=f;var g=i.iconPaths={};B(u,function(l,u){var p=Od(l,{},{x:-o/2,y:-o/2,width:o,height:o});p.setStyle(h.getItemStyle()),p.ensureState("emphasis").style=d.getItemStyle();var f=new du({style:{text:c[u],align:d.get("textAlign"),borderRadius:d.get("textBorderRadius"),padding:d.get("textPadding"),fill:null,font:pp({fontStyle:d.get("textFontStyle"),fontFamily:d.get("textFontFamily"),fontSize:d.get("textFontSize"),fontWeight:d.get("textFontWeight")},e)},ignore:!0});p.setTextContent(f),Gd({el:p,componentModel:t,itemName:u,formatterParamsExtra:{title:c[u]}}),p.__title=c[u],p.on("mouseover",function(){var e=d.getItemStyle(),i=a?null==t.get("right")&&"right"!==t.get("left")?"right":"left":null==t.get("bottom")&&"bottom"!==t.get("top")?"bottom":"top";f.setStyle({fill:d.get("textFill")||e.fill||e.stroke||ug.color.neutral99,backgroundColor:d.get("textBackgroundColor")}),p.setTextConfig({position:d.get("textPosition")||i}),f.ignore=!t.get("showTitle"),n.enterEmphasis(this)}).on("mouseout",function(){"emphasis"!==i.get(["iconStatus",u])&&n.leaveEmphasis(this),f.hide()}),("emphasis"===i.get(["iconStatus",u])?vc:yc)(p),r.add(p),p.on("click",U(s.onclick,s,e,n,u)),g[u]=p})}(m,d,v),m.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&("emphasis"===e?vc:yc)(i[t])},WU(d)&&d.render&&d.render(m,e,n,i)}},e.prototype.updateView=function(t,e,n,i){B(this._features,function(t){t&&t instanceof EU&&t.updateView&&t.updateView(t.model,e,n,i)})},e.prototype.dispose=function(t,e){B(this._features,function(n){n&&n instanceof EU&&n.dispose&&n.dispose(t,e)})},e.type="toolbox",e}(Ky);function WU(t){return t instanceof EU}var UU=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.onclick=function(t,e){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",o="svg"===e.getZr().painter.getType(),a=o?"svg":n.get("type",!0)||"png",s=e.getConnectedDataURL({type:a,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||ug.color.neutral00,connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),l=r.browser;if("function"!=typeof MouseEvent||!l.newEdge&&(l.ie||l.edge))if(window.navigator.msSaveOrOpenBlob||o){var u=s.split(","),c=u[0].indexOf("base64")>-1,h=o?decodeURIComponent(u[1]):u[1];c&&(h=window.atob(h));var d=i+"."+a;if(window.navigator.msSaveOrOpenBlob){for(var p=h.length,f=new Uint8Array(p);p--;)f[p]=h.charCodeAt(p);var g=new Blob([f]);window.navigator.msSaveOrOpenBlob(g,d)}else{var v=document.createElement("iframe");document.body.appendChild(v);var y=v.contentWindow,m=y.document;m.open("image/svg+xml","replace"),m.write(h),m.close(),y.focus(),m.execCommand("SaveAs",!0,d),document.body.removeChild(v)}}else{var x=n.get("lang"),_='',b=window.open();b.document.write(_),b.document.title=i}else{var w=document.createElement("a");w.download=i+"."+a,w.target="_blank",w.href=s;var S=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});w.dispatchEvent(S)}},e.getDefaultOption=function(t){return{show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:ug.color.neutral00,name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])}},e}(EU),YU="__ec_magicType_stack__",XU=[["line","bar"],["stack"]],ZU=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return B(t.get("type"),function(t){e[t]&&(n[t]=e[t])}),n},e.getDefaultOption=function(t){return{show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}}},e.prototype.onclick=function(t,e,n){var i=this.model,r=i.get(["seriesIndex",n]);if(jU[n]){var o,a={series:[]};B(XU,function(t){R(t,n)>=0&&B(t,function(t){i.setIconStatus(t,"normal")})}),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},function(t){var e=t.subType,r=t.id,o=jU[n](e,r,t,i);o&&(P(o,t.option),a.series.push(o));var s=t.coordinateSystem;if(s&&"cartesian2d"===s.type&&("line"===n||"bar"===n)){var l=s.getAxesByScale("ordinal")[0];if(l){var u=l.dim+"Axis",c=t.getReferringComponents(u,Ea).models[0].componentIndex;a[u]=a[u]||[];for(var h=0;h<=c;h++)a[u][c]=a[u][c]||{};a[u][c].boundaryGap="bar"===n}}});var s=n;"stack"===n&&(o=D({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),"emphasis"!==i.get(["iconStatus",n])&&(s="tiled")),e.dispatchAction({type:"changeMagicType",currentType:s,newOption:a,newTitle:o,featureName:"magicType"})}},e}(EU),jU={line:function(t,e,n,i){if("bar"===t)return D({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","line"])||{},!0)},bar:function(t,e,n,i){if("line"===t)return D({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","bar"])||{},!0)},stack:function(t,e,n,i){var r=n.get("stack")===YU;if("line"===t||"bar"===t)return i.setIconStatus("stack",r?"normal":"emphasis"),D({id:e,stack:r?"":YU},i.get(["option","stack"])||{},!0)}};ib({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)});var qU=new Array(60).join("-"),KU="\t";function $U(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}var JU=new RegExp("[\t]+","g");function QU(t,e){var n=t.split(new RegExp("\n*"+qU+"\n*","g")),i={series:[]};return B(n,function(t,n){if(function(t){if(t.slice(0,t.indexOf("\n")).indexOf(KU)>=0)return!0}(t)){var r=function(t){for(var e=t.split(/\n+/g),n=[],i=V($U(e.shift()).split(JU),function(t){return{name:t,data:[]}}),r=0;r=0)&&t(r,i._targetInfoList)})}return t.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=pY[t.brushType](0,n,e);t.__rangeOffset={offset:gY[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}}),t},t.prototype.matchOutputRanges=function(t,e,n){B(t,function(t){var i=this.findTargetInfo(t,e);i&&!0!==i&&B(i.coordSyses,function(i){var r=pY[t.brushType](1,i,t.range,!0);n(t,r.values,i,e)})},this)},t.prototype.setInputRanges=function(t,e){B(t,function(t){var n,i,r,o,a,s=this.findTargetInfo(t,e);if(t.range=t.range||[],s&&!0!==s){t.panelId=s.panelId;var l=pY[t.brushType](0,s.coordSys,t.coordRange),u=t.__rangeOffset;t.range=u?gY[t.brushType](l.values,u.offset,(n=l.xyMinMax,i=u.xyMinMax,r=yY(n),o=yY(i),a=[r[0]/o[0],r[1]/o[1]],isNaN(a[0])&&(a[0]=1),isNaN(a[1])&&(a[1]=1),a)):l.values}},this)},t.prototype.makePanelOpts=function(t,e){return V(this._targetInfoList,function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e?e(n):null,clipPath:Kz(i),isTargetByCursor:Jz(i,t,n.coordSysModel),getLinearBrushOtherExtent:$z(i)}})},t.prototype.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&R(i.coordSyses,e.coordinateSystem)>=0},t.prototype.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=uY(e,t),r=0;rt[1]&&t.reverse(),t}function uY(t,e){return Ra(t,e,{includeMainTypes:aY})}var cY={grid:function(t,e){var n=t.xAxisModels,i=t.yAxisModels,r=t.gridModels,o=mt(),a={},s={};(n||i||r)&&(B(n,function(t){var e=t.axis.grid.model;o.set(e.id,e),a[e.id]=!0}),B(i,function(t){var e=t.axis.grid.model;o.set(e.id,e),s[e.id]=!0}),B(r,function(t){o.set(t.id,t),a[t.id]=!0,s[t.id]=!0}),o.each(function(t){var r=t.coordinateSystem,o=[];B(r.getCartesians(),function(t,e){(R(n,t.getAxis("x").model)>=0||R(i,t.getAxis("y").model)>=0)&&o.push(t)}),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:dY.grid,xAxisDeclared:a[t.id],yAxisDeclared:s[t.id]})}))},geo:function(t,e){B(t.geoModels,function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:dY.geo})})}},hY=[function(t,e){var n=t.xAxisModel,i=t.yAxisModel,r=t.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],dY={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var t=this.coordSys.view,e=aP(null,t);return $e(e,e,rP(null,t)),e}},pY={lineX:Y(fY,0),lineY:Y(fY,1),rect:function(t,e,n,i){var r=t?e.pointToData([n[0][0],n[1][0]],i):e.dataToPoint([n[0][0],n[1][0]],i),o=t?e.pointToData([n[0][1],n[1][1]],i):e.dataToPoint([n[0][1],n[1][1]],i),a=[lY([r[0],o[0]]),lY([r[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,n,i){var r=[[1/0,-1/0],[1/0,-1/0]];return{values:V(n,function(n){var o=t?e.pointToData(n,i):e.dataToPoint(n,i);return r[0][0]=Math.min(r[0][0],o[0]),r[1][0]=Math.min(r[1][0],o[1]),r[0][1]=Math.max(r[0][1],o[0]),r[1][1]=Math.max(r[1][1],o[1]),o}),xyMinMax:r}}};function fY(t,e,n,i){var r=n.getAxis(["x","y"][t]),o=lY(V([0,1],function(t){return e?r.coordToData(r.toLocalCoord(i[t]),!0):r.toGlobalCoord(r.dataToCoord(i[t]))})),a=[];return a[t]=o,a[1-t]=[NaN,NaN],{values:o,xyMinMax:a}}var gY={lineX:Y(vY,0),lineY:Y(vY,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return V(t,function(t,i){return[t[0]-n[0]*e[i][0],t[1]-n[1]*e[i][1]]})}};function vY(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}function yY(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var mY,xY,_Y=B,bY=xa+"toolbox-dataZoom_",wY={x:"width",y:"height"},SY=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){this._brushController||(this._brushController=new xz(n.getZr()),this._brushController.on("brush",U(this._onBrush,this)).mount()),function(t,e,n,i,r){var o=n._isZoomActive;i&&"takeGlobalCursor"===i.type&&(o="dataZoomSelect"===i.key&&i.dataZoomSelectActive);n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var a=new sY(IY(t),e,{include:["grid"]}),s=a.makePanelOpts(r,function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"});n._brushController.setPanels(s).enableBrush(!(!o||!s.length)&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}(t,e,this,i,n),function(t,e){t.setIconStatus("back",function(t){return rY(t).length}(e)>1?"emphasis":"normal")}(t,e)},e.prototype.onclick=function(t,e,n){MY[n].call(this)},e.prototype.dispose=function(t,e){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var e=t.areas;if(t.isEnd&&e.length){var n={},i=this.ecModel;this._brushController.updateCovers([]),new sY(IY(this.model),i,{include:["grid"]}).matchOutputRanges(e,i,function(t,e,n){if("cartesian2d"===n.type){var i=n.master.getRect().clone(),o=t.brushType;"rect"===o?(r("x",n,i,e[0]),r("y",n,i,e[1])):r({lineX:"x",lineY:"y"}[o],n,i,e)}}),function(t,e){var n=rY(t);nY(e,function(e,i){for(var r=n.length-1;r>=0&&!n[r][i];r--);if(r<0){var o=t.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(o){var a=o.getPercentRange();n[0][i]={dataZoomId:i,start:a[0],end:a[1]}}}}),n.push(e)}(i,n),this._dispatchZoomAction(n)}function r(t,e,r,o){var a=e.getAxis(t),s=a.model,l=function(t,e,n){var i;return n.eachComponent({mainType:"dataZoom",subType:"select"},function(n){n.getAxisModel(t,e.componentIndex)&&(i=n)}),i}(t,s,i),u=l.findRepresentativeAxisProxy(s).getMinMaxSpan(),c=a.scale.getExtent();null==u.minValueSpan&&null==u.maxValueSpan||(o=ez(0,o.slice(),c,0,u.minValueSpan,u.maxValueSpan));var h=Xo(c,r[wY[t]],.5);l&&(n[l.id]={dataZoomId:l.id,startValue:isFinite(h)?Ho(o[0],h):o[0],endValue:isFinite(h)?Ho(o[1],h):o[1]})}},e.prototype._dispatchZoomAction=function(t){var e=[];_Y(t,function(t,n){e.push(C(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},e.getDefaultOption=function(t){return{show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:ug.color.backgroundTint}}},e}(EU),MY={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(function(t){var e=rY(t),n=e[e.length-1];e.length>1&&e.pop();var i={};return nY(n,function(t,n){for(var r=e.length-1;r>=0;r--)if(t=e[r][n]){i[n]=t;break}}),i}(this.ecModel))}};function IY(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get("yAxisIndex",!0),xAxisId:t.get("xAxisId",!0),yAxisId:t.get("yAxisId",!0)};return null==e.xAxisIndex&&null==e.xAxisId&&(e.xAxisIndex="all"),null==e.yAxisIndex&&null==e.yAxisId&&(e.yAxisIndex="all"),e}mY="dataZoom",xY=function(t){var e=t.getComponent("toolbox",0),n=["feature","dataZoom"];if(e&&null!=e.get(n)){var i=e.getModel(n),r=[],o=Ra(t,IY(i));return _Y(o.xAxisModels,function(t){return a(t,"xAxis","xAxisIndex")}),_Y(o.yAxisModels,function(t){return a(t,"yAxis","yAxisIndex")}),r}function a(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!0,filterMode:i.get("filterMode",!0)||"filter",id:bY+e+o};a[n]=o,r.push(a)}},ct(null==Cg.get(mY)&&xY),Cg.set(mY,xY);var TY=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click|mousewheel",alwaysShowContent:!1,renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,displayTransition:!0,enterable:!1,backgroundColor:ug.color.neutral00,shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,defaultBorderColor:ug.color.border,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:ug.color.borderShade,width:1,type:"dashed",textStyle:{}}},textStyle:{color:ug.color.tertiary,fontSize:14}},e}(lg);function CY(t){var e=t.get("confine");return null!=e?!!e:"richText"===t.get("renderMode")}function DY(t){if(r.domSupported)for(var e=document.documentElement.style,n=0,i=t.length;n0&&o.push(function(t,e,n){var i="cubic-bezier(0.23,1,0.32,1)",o="",a="";return n&&(a="opacity"+(o=" "+t/2+"s "+i)+",visibility"+o),e||(o=" "+t+"s "+i,a+=(a.length?",":"")+(r.transformSupported?""+PY+o:",left"+o+",top"+o)),LY+":"+a}(a,n,i)),s&&o.push("background-color:"+s),B(["width","color","radius"],function(e){var n="border-"+e,i=Cf(n),r=t.get(i);null!=r&&o.push(n+":"+r+("color"===e?"":"px"))}),o.push(function(t){var e=[],n=t.get("fontSize"),i=t.getTextColor();i&&e.push("color:"+i),e.push("font:"+t.getFont());var r=at(t.get("lineHeight"),Math.round(3*n/2));n&&e.push("line-height:"+r+"px");var o=t.get("textShadowColor"),a=t.get("textShadowBlur")||0,s=t.get("textShadowOffsetX")||0,l=t.get("textShadowOffsetY")||0;return o&&a&&e.push("text-shadow:"+s+"px "+l+"px "+a+"px "+o),B(["decoration","align"],function(n){var i=t.get(n);i&&e.push("text-"+n+":"+i)}),e.join(";")}(d)),null!=p&&o.push("padding:"+Df(p).join("px ")+"px"),o.join(";")+";"}function EY(t,e,n,i,r){var o=e&&e.painter;if(n){var a=o&&o.getViewportRoot();a&&function(t,e,n,i,r){ie(ne,e,i,r,!0)&&ie(t,n,ne[0],ne[1])}(t,a,n,i,r)}else{t[0]=i,t[1]=r;var s=o&&o.getViewportRootOffset();s&&(t[0]+=s.offsetLeft,t[1]+=s.offsetTop)}t[2]=t[0]/e.getWidth(),t[3]=t[1]/e.getHeight()}var zY=function(){function t(t,e){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._alwaysShowContent=!1,this._firstShow=!0,this._longHide=!0,r.wxa)return null;var n=document.createElement("div");n.domBelongToZr=!0,this.el=n;var i=this._zr=t.getZr(),o=e.appendTo,a=o&&(j(o)?document.querySelector(o):tt(o)?o:Z(o)&&o(t.getDom()));EY(this._styleCoord,i,a,t.getWidth()/2,t.getHeight()/2),(a||t.getDom()).appendChild(n),this._api=t,this._container=a;var s=this;n.onmouseenter=function(){s._enterable&&(clearTimeout(s._hideTimeout),s._show=!0),s._inContent=!0},n.onmousemove=function(t){if(t=t||window.event,!s._enterable){var e=i.handler;fe(i.painter.getViewportRoot(),t,!0),e.dispatch("mousemove",t)}},n.onmouseleave=function(){s._inContent=!1,s._enterable&&s._show&&s.hideLater(s._hideDelay)}}return t.prototype.update=function(t){if(!this._container){var e=this._api.getDom(),n=(o="position",(a=(r=e).currentStyle||document.defaultView&&document.defaultView.getComputedStyle(r))?o?a[o]:a:null),i=e.style;"absolute"!==i.position&&"absolute"!==n&&(i.position="relative")}var r,o,a,s=t.get("alwaysShowContent");s&&this._moveIfResized(),this._alwaysShowContent=s,this._enableDisplayTransition=t.get("displayTransition")&&t.get("transitionDuration")>0,this.el.className=t.get("className")||""},t.prototype.show=function(t,e){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var n=this.el,i=n.style,r=this._styleCoord;n.innerHTML?i.cssText=OY+NY(t,!this._firstShow,this._longHide,this._enableDisplayTransition)+RY(r[0],r[1],!0)+"border-color:"+Nf(e)+";"+(t.get("extraCssText")||"")+";pointer-events:"+(this._enterable?"auto":"none"):i.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},t.prototype.setContent=function(t,e,n,i,r){var o=this.el;if(null!=t){var a="";if(j(r)&&"item"===n.get("trigger")&&!CY(n)&&(a=function(t,e,n){if(!j(n)||"inside"===n)return"";var i=t.get("backgroundColor"),r=t.get("borderWidth");e=Nf(e);var o,a,s="left"===(o=n)?"right":"right"===o?"left":"top"===o?"bottom":"top",l=Math.max(1.5*Math.round(r),6),u="",c=PY+":";R(["left","right"],s)>-1?(u+="top:50%",c+="translateY(-50%) rotate("+(a="left"===s?-225:-45)+"deg)"):(u+="left:50%",c+="translateX(-50%) rotate("+(a="top"===s?225:45)+"deg)");var h=a*Math.PI/180,d=l+r,p=d*Math.abs(Math.cos(h))+d*Math.abs(Math.sin(h)),f=e+" solid "+r+"px;";return'
'}(n,i,r)),j(t))o.innerHTML=t+a;else if(t){o.innerHTML="",X(t)||(t=[t]);for(var s=0;s=0?this._tryShow(n,i):"leave"===e&&this._hide(i))},this))},e.prototype._keepShow=function(){var t=this._tooltipModel,e=this._ecModel,n=this._api,i=t.get("triggerOn");if("axis"!==t.get("trigger")&&(this._lastDataByCoordSys=null,this._cbParamsList=null),null!=this._lastX&&null!=this._lastY&&"none"!==i&&"click"!==i){var r=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!n.isDisposed()&&r.manuallyShowTip(t,e,n,{x:r._lastX,y:r._lastY,dataByCoordSys:r._lastDataByCoordSys})})}},e.prototype.manuallyShowTip=function(t,e,n,i){if(i.from!==this.uid&&!r.node&&n.getDom()){var o=YY(i,n);this._ticket="";var a=i.dataByCoordSys,s=function(t,e,n){var i=Na(t).queryOptionMap,r=i.keys()[0];if(!r||"series"===r)return;var o=Ba(e,r,i.get(r),{useDefault:!1,enableAll:!1,enableNone:!1}),a=o.models[0];if(!a)return;var s,l=n.getViewOfComponentModel(a);if(l.group.traverse(function(e){var n=Iu(e).tooltipConfig;if(n&&n.name===t.name)return s=e,!0}),s)return{componentMainType:r,componentIndex:a.componentIndex,el:s}}(i,e,n);if(s){var l=s.el.getBoundingRect().clone();l.applyTransform(s.el.transform),this._tryShow({offsetX:l.x+l.width/2,offsetY:l.y+l.height/2,target:s.el,position:i.position,positionDefault:"bottom"},o)}else if(i.tooltip&&null!=i.x&&null!=i.y){var u=HY;u.x=i.x,u.y=i.y,u.update(),Iu(u).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:u},o)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:a,tooltipOption:i.tooltipOption},o);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var c=jF(i,e),h=c.point[0],d=c.point[1];null!=h&&null!=d&&this._tryShow({offsetX:h,offsetY:d,target:c.el,position:i.position,positionDefault:"bottom"},o)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},o))}},e.prototype.manuallyHideTip=function(t,e,n,i){var r=this._tooltipContent;this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,this._cbParamsList=null,i.from!==this.uid&&this._hide(YY(i,n))},e.prototype._manuallyAxisShowTip=function(t,e,n,i){var r=i.seriesIndex,o=i.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=e.getSeriesByIndex(r);if(s)if("axis"===UY([s.getData().getItemModel(o),s,(s.coordinateSystem||{}).model],this._tooltipModel).get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}},e.prototype._tryShow=function(t,e){var n=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var i=t.dataByCoordSys;if(i&&i.length)this._showAxisTooltip(i,t);else if(n){var r,o;if("legend"===Iu(n).ssrType)return;this._lastDataByCoordSys=null,this._cbParamsList=null,Qm(n,function(t){if(t.tooltipDisabled)return r=o=null,!0;r||o||(null!=Iu(t).dataIndex?r=t:null!=Iu(t).tooltipConfig&&(o=t))},!0),r?this._showSeriesItemTooltip(t,r,e):o?this._showComponentItemTooltip(t,o,e):this._hide(e)}else this._lastDataByCoordSys=null,this._cbParamsList=null,this._hide(e)}},e.prototype._showOrMove=function(t,e){var n=t.get("showDelay");e=U(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},e.prototype._showAxisTooltip=function(t,e){var n=this._ecModel,i=this._tooltipModel,r=[e.offsetX,e.offsetY],o=UY([e.tooltipOption],i),a=this._renderMode,s=[],l=Ty("section",{blocks:[],noHeader:!0}),u=[],c=new zy;B(t,function(t){B(t.dataByAxis,function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),r=t.value,o=e.axis,h=o.scale.parse(r);if(e&&null!=r){var d=DF(r,o,n,t.seriesDataIndices,t.valueLabelOpt),p=Ty("section",{header:d,noHeader:!ht(d),sortBlocks:!0,blocks:[]});l.blocks.push(p),B(t.seriesDataIndices,function(r){var o=n.getSeriesByIndex(r.seriesIndex),l=r.dataIndexInside,f=o.getDataParams(l);if(!(f.dataIndex<0)){f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=jw(e.axis,{value:h}),f.axisValueLabel=d,f.marker=c.makeTooltipMarker("item",Nf(f.color),a);var g=Gv(o.formatTooltip(l,!0,null)),v=g.frag;if(v){var y=UY([o],i).get("valueFormatter");p.blocks.push(y?k({valueFormatter:y},v):v)}g.text&&u.push(g.text),s.push(f)}})}})}),l.blocks.reverse(),u.reverse();var h=e.position,d=o.get("order"),p=Py(l,c,a,d,n.get("useUTC"),o.get("textStyle"));p&&u.unshift(p);var f="richText"===a?"\n\n":"
",g=u.join(f);this._showOrMove(o,function(){this._updateContentNotChangedOnAxis(t,s)?this._updatePosition(o,h,r[0],r[1],this._tooltipContent,s):this._showTooltipContent(o,g,s,Math.random()+"",r[0],r[1],h,null,c)})},e.prototype._showSeriesItemTooltip=function(t,e,n){var i=this._ecModel,r=Iu(e),o=r.seriesIndex,a=i.getSeriesByIndex(o),s=r.dataModel||a,l=r.dataIndex,u=r.dataType,c=s.getData(u),h=this._renderMode,d=t.positionDefault,p=UY([c.getItemModel(l),s,a&&(a.coordinateSystem||{}).model],this._tooltipModel,d?{position:d}:null),f=p.get("trigger");if(null==f||"item"===f){var g=s.getDataParams(l,u),v=new zy;g.marker=v.makeTooltipMarker("item",Nf(g.color),h);var y=Gv(s.formatTooltip(l,!1,u)),m=p.get("order"),x=p.get("valueFormatter"),_=y.frag,b=_?Py(x?k({valueFormatter:x},_):_,v,h,m,i.get("useUTC"),p.get("textStyle")):y.text,w="item_"+s.name+"_"+l;this._showOrMove(p,function(){this._showTooltipContent(p,b,g,w,t.offsetX,t.offsetY,t.position,t.target,v)}),n({type:"showTip",dataIndexInside:l,dataIndex:c.getRawIndex(l),seriesIndex:o,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,e,n){var i="html"===this._renderMode,r=Iu(e),o=r.tooltipConfig.option||{},a=o.encodeHTMLContent;if(j(o)){o={content:o,formatter:o},a=!0}a&&i&&o.content&&((o=C(o)).content=se(o.content));var s=[o],l=this._ecModel.getComponent(r.componentMainType,r.componentIndex);l&&s.push(l),s.push({formatter:o.content});var u=t.positionDefault,c=UY(s,this._tooltipModel,u?{position:u}:null),h=c.get("content"),d=Math.random()+"",p=new zy;this._showOrMove(c,function(){var n=C(c.get("formatterParams")||{});this._showTooltipContent(c,h,n,d,t.offsetX,t.offsetY,t.position,e,p)}),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,e,n,i,r,o,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent;u.setEnterable(t.get("enterable"));var c=t.get("formatter");a=a||t.get("position");var h=e,d=this._getNearestPoint([r,o],n,t.get("trigger"),t.get("borderColor"),t.get("defaultBorderColor",!0)).color;if(c)if(j(c)){var p=t.ecModel.get("useUTC"),f=X(n)?n[0]:n;h=c,f&&f.axisType&&f.axisType.indexOf("time")>=0&&(h=uf(f.axisValue,h,p)),h=Pf(h,n,!0)}else if(Z(c)){var g=U(function(e,i){e===this._ticket&&(u.setContent(i,l,t,d,a),this._updatePosition(t,a,r,o,u,n,s))},this);this._ticket=i,h=c(n,i,g)}else h=c;u.setContent(h,l,t,d,a),u.show(t,d),this._updatePosition(t,a,r,o,u,n,s)}},e.prototype._getNearestPoint=function(t,e,n,i,r){return"axis"===n||X(e)?{color:i||r}:X(e)?void 0:{color:i||e.color||e.borderColor}},e.prototype._updatePosition=function(t,e,n,i,r,o,a){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=r.getSize(),c=t.get("align"),h=t.get("verticalAlign"),d=a&&a.getBoundingRect().clone();if(a&&d.applyTransform(a.transform),Z(e)&&(e=e([n,i],o,r.el,d,{viewSize:[s,l],contentSize:u.slice()})),X(e))n=Vo(e[0],s),i=Vo(e[1],l);else if($(e)){var p=e;p.width=u[0],p.height=u[1];var f=Jf(p,{width:s,height:l});n=f.x,i=f.y,c=null,h=null}else if(j(e)&&a){var g=function(t,e,n,i){var r=n[0],o=n[1],a=Math.ceil(Math.SQRT2*i)+8,s=0,l=0,u=e.width,c=e.height;switch(t){case"inside":s=e.x+u/2-r/2,l=e.y+c/2-o/2;break;case"top":s=e.x+u/2-r/2,l=e.y-o-a;break;case"bottom":s=e.x+u/2-r/2,l=e.y+c+a;break;case"left":s=e.x-r-a,l=e.y+c/2-o/2;break;case"right":s=e.x+u+a,l=e.y+c/2-o/2}return[s,l]}(e,d,u,t.get("borderWidth"));n=g[0],i=g[1]}else{g=function(t,e,n,i,r,o,a){var s=n.getSize(),l=s[0],u=s[1];null!=o&&(t+l+o+2>i?t-=l+o:t+=o);null!=a&&(e+u+a>r?e-=u+a:e+=a);return[t,e]}(n,i,r,s,l,c?null:20,h?null:20);n=g[0],i=g[1]}if(c&&(n-=XY(c)?u[0]/2:"right"===c?u[0]:0),h&&(i-=XY(h)?u[1]/2:"bottom"===h?u[1]:0),CY(t)){g=function(t,e,n,i,r){var o=n.getSize(),a=o[0],s=o[1];return t=Math.min(t+a,i)-a,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}(n,i,r,s,l);n=g[0],i=g[1]}r.moveTo(n,i)},e.prototype._updateContentNotChangedOnAxis=function(t,e){var n=this._lastDataByCoordSys,i=this._cbParamsList,r=!!n&&n.length===t.length;return r&&B(n,function(n,o){var a=n.dataByAxis||[],s=(t[o]||{}).dataByAxis||[];(r=r&&a.length===s.length)&&B(a,function(t,n){var o=s[n]||{},a=t.seriesDataIndices||[],l=o.seriesDataIndices||[];(r=r&&t.value===o.value&&t.axisType===o.axisType&&t.axisId===o.axisId&&a.length===l.length)&&B(a,function(t,e){var n=l[e];r=r&&t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex}),i&&B(t.seriesDataIndices,function(t){var n=t.seriesIndex,o=e[n],a=i[n];o&&a&&a.data!==o.data&&(r=!1)})})}),this._lastDataByCoordSys=t,this._cbParamsList=e,!!r},e.prototype._hide=function(t){this._lastDataByCoordSys=null,this._cbParamsList=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,e){!r.node&&e.getDom()&&(hm(this,"_updatePosition"),this._tooltipContent.dispose(),XF("itemTooltip",e),this._tooltipContent=null,this._tooltipModel=null,this._lastDataByCoordSys=null,this._cbParamsList=null)},e.type="tooltip",e}(Ky);function UY(t,e,n){var i,r=e.ecModel;n?(i=new kp(n,r,r),i=new kp(e.option,i,r)):i=e;for(var o=t.length-1;o>=0;o--){var a=t[o];a&&(a instanceof kp&&(a=a.get("tooltip",!0)),j(a)&&(a={formatter:a}),a&&(i=new kp(a,i,r)))}return i}function YY(t,e){return t.dispatchAction||U(e.dispatchAction,e)}function XY(t){return"center"===t||"middle"===t}var ZY=["rect","polygon","keep","clear"];function jY(t,e){var n=_a(t?t.brush:[]);if(n.length){var i=[];B(n,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(i=i.concat(e))});var r=t&&t.toolbox;X(r)&&(r=r[0]),r||(r={feature:{}},t.toolbox=[r]);var o=r.feature||(r.feature={}),a=o.brush||(o.brush={}),s=a.type||(a.type=[]);s.push.apply(s,i),ts(s,function(t){return t+""},null),e&&!s.length&&s.push.apply(s,ZY)}}var qY=B;function KY(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function $Y(t,e,n){var i={};return qY(e,function(e){var r,o=i[e]=((r=function(){}).prototype.__hidden=r.prototype,new r);qY(t[e],function(t,i){if(ZR.isValidType(i)){var r={type:i,visual:t};n&&n(r,e),o[i]=new ZR(r),"opacity"===i&&((r=C(r)).type="colorAlpha",o.__hidden.__alphaForOpacity=new ZR(r))}})}),i}function JY(t,e,n){var i;B(n,function(t){e.hasOwnProperty(t)&&KY(e[t])&&(i=!0)}),i&&B(n,function(n){e.hasOwnProperty(n)&&KY(e[n])?t[n]=C(e[n]):delete t[n]})}var QY={lineX:tX(0),lineY:tX(1),rect:{point:function(t,e,n){return t&&n.boundingRect.contain(t[0],t[1])},rect:function(t,e,n){return t&&n.boundingRect.intersect(t)}},polygon:{point:function(t,e,n){return t&&n.boundingRect.contain(t[0],t[1])&&FS(n.range,t[0],t[1])},rect:function(t,e,n){var i=n.range;if(!t||i.length<=1)return!1;var r=t.x,o=t.y,a=t.width,s=t.height,l=i[0];return!!(FS(i,r,o)||FS(i,r+a,o)||FS(i,r,o+s)||FS(i,r+a,o+s)||Xe.create(t).contain(l[0],l[1])||Rd(r,o,r+a,o,i)||Rd(r,o,r,o+s,i)||Rd(r+a,o,r+a,o+s,i)||Rd(r,o+s,r+a,o+s,i))||void 0}}};function tX(t){var e=["x","y"],n=["width","height"];return{point:function(e,n,i){if(e){var r=i.range;return eX(e[t],r)}},rect:function(i,r,o){if(i){var a=o.range,s=[i[e[t]],i[e[t]]+i[n[t]]];return s[1]e[0][1]&&(e[0][1]=o[0]),o[1]e[1][1]&&(e[1][1]=o[1])}return e&&cX(e)}};function cX(t){return new Xe(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var hX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new xz(e.getZr())).on("brush",U(this._onBrush,this)).mount()},e.prototype.render=function(t,e,n,i){this.model=t,this._updateController(t,e,n,i)},e.prototype.updateTransform=function(t,e,n,i){oX(e),this._updateController(t,e,n,i)},e.prototype.updateVisual=function(t,e,n,i){this.updateTransform(t,e,n,i)},e.prototype.updateView=function(t,e,n,i){this._updateController(t,e,n,i)},e.prototype._updateController=function(t,e,n,i){(!i||i.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(n)).enableBrush(t.brushOption).updateCovers(t.areas.slice())},e.prototype.dispose=function(){this._brushController.dispose()},e.prototype._onBrush=function(t){var e=this.model.id,n=this.model.brushTargetManager.setOutputRanges(t.areas,this.ecModel);(!t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:e,areas:C(n),$from:e}),t.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:e,areas:C(n),$from:e})},e.type="brush",e}(Ky),dX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.areas=[],n.brushOption={},n}return n(e,t),e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&JY(n,t,["inBrush","outOfBrush"]);var i=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:this.option.defaultOutOfBrushColor},i.hasOwnProperty("liftZ")||(i.liftZ=5)},e.prototype.setAreas=function(t){t&&(this.areas=V(t,function(t){return pX(this.option,t)},this))},e.prototype.setBrushOption=function(t){this.brushOption=pX(this.option,t),this.brushType=this.brushOption.brushType},e.type="brush",e.dependencies=["geo","grid","xAxis","yAxis","parallel","series"],e.defaultOption={seriesIndex:"all",brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:ug.color.backgroundTint,borderColor:ug.color.borderTint},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4,defaultOutOfBrushColor:ug.color.disabled},e}(lg);function pX(t,e){return D({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new kp(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}var fX=["rect","polygon","lineX","lineY","keep","clear"],gX=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n){var i,r,o;e.eachComponent({mainType:"brush"},function(t){i=t.brushType,r=t.brushOption.brushMode||"single",o=o||!!t.areas.length}),this._brushType=i,this._brushMode=r,B(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===r:"clear"===e?o:e===i)?"emphasis":"normal")})},e.prototype.updateView=function(t,e,n){this.render(t,e,n)},e.prototype.getIcons=function(){var t=this.model,e=t.get("icon",!0),n={};return B(t.get("type",!0),function(t){e[t]&&(n[t]=e[t])}),n},e.prototype.onclick=function(t,e,n){var i=this._brushType,r=this._brushMode;"clear"===n?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===n?i:i!==n&&n,brushMode:"keep"===n?"multiple"===r?"single":"multiple":r}})},e.getDefaultOption=function(t){return{show:!0,type:fX.slice(),icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:t.getLocaleModel().get(["toolbox","brush","title"])}},e}(EU);var vX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode={type:"box",ignoreSize:!0},n}return n(e,t),e.type="title",e.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:"center",top:ug.size.m,backgroundColor:ug.color.transparent,borderColor:ug.color.primary,borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:ug.color.primary},subtextStyle:{fontSize:12,color:ug.color.quaternary}},e}(lg),yX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=at(t.get("textBaseline"),t.get("textVerticalAlign")),l=new du({style:sp(r,{text:t.get("text"),fill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),c=t.get("subtext"),h=new du({style:sp(o,{text:c,fill:o.getTextColor(),y:u.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),d=t.get("link"),p=t.get("sublink"),f=t.get("triggerEvent",!0);l.silent=!d&&!f,h.silent=!p&&!f,d&&l.on("click",function(){Ef(d,"_"+t.get("target"))}),p&&h.on("click",function(){Ef(p,"_"+t.get("subtarget"))}),Iu(l).eventData=Iu(h).eventData=f?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),c&&i.add(h);var g=i.getBoundingRect(),v=t.getBoxLayoutParams();v.width=g.width,v.height=g.height;var y=Jf(v,eg(t,n).refContainer,t.get("padding"));a||("middle"===(a=t.get("left")||t.get("right"))&&(a="center"),"right"===a?y.x+=y.width:"center"===a&&(y.x+=y.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?y.y+=y.height:"middle"===s&&(y.y+=y.height/2),s=s||"top"),i.x=y.x,i.y=y.y,i.markRedraw();var m={align:a,verticalAlign:s};l.setStyle(m),h.setStyle(m),g=i.getBoundingRect();var x=y.margin,_=t.getItemStyle(["color","opacity"]);_.fill=t.get("backgroundColor");var b=new lu({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:t.get("borderRadius")},style:_,subPixelOptimize:!0,silent:!0});i.add(b)}},e.type="title",e}(Ky);var mX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode="box",n}return n(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n),this._initData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this._initData()},e.prototype.setCurrentIndex=function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},e.prototype.getCurrentIndex=function(){return this.option.currentIndex},e.prototype.isIndexMax=function(){return this.getCurrentIndex()>=this._data.count()-1},e.prototype.setPlayState=function(t){this.option.autoPlay=!!t},e.prototype.getPlayState=function(){return!!this.option.autoPlay},e.prototype._initData=function(){var t,e=this.option,n=e.data||[],i=e.axisType,r=this._names=[];"category"===i?(t=[],B(n,function(e,n){var i,o=Da(Sa(e),"");$(e)?(i=C(e)).value=n:i=n,t.push(i),r.push(o)})):t=n;var o={category:"ordinal",time:"time",value:"number"}[i]||"number";(this._data=new Hb([{name:"value",type:o}],this)).initData(t,r)},e.prototype.getData=function(){return this._data},e.prototype.getCategories=function(){if("category"===this.get("axisType"))return this._names.slice()},e.type="timeline",e.defaultOption={z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:ug.size.m,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:ug.color.secondary},data:[]},e}(lg),xX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="timeline.slider",e.defaultOption=Op(mX.defaultOption,{backgroundColor:"rgba(0,0,0,0)",borderColor:ug.color.border,borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"circle",symbolSize:12,lineStyle:{show:!0,width:2,color:ug.color.accent10},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:ug.color.tertiary},itemStyle:{color:ug.color.accent20,borderWidth:0},checkpointStyle:{symbol:"circle",symbolSize:15,color:ug.color.accent50,borderColor:ug.color.accent50,borderWidth:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"rgba(0, 0, 0, 0)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:24,itemGap:12,position:"left",playIcon:"path://M15 0C23.2843 0 30 6.71573 30 15C30 23.2843 23.2843 30 15 30C6.71573 30 0 23.2843 0 15C0 6.71573 6.71573 0 15 0ZM15 3C8.37258 3 3 8.37258 3 15C3 21.6274 8.37258 27 15 27C21.6274 27 27 21.6274 27 15C27 8.37258 21.6274 3 15 3ZM11.5 10.6699C11.5 9.90014 12.3333 9.41887 13 9.80371L20.5 14.1338C21.1667 14.5187 21.1667 15.4813 20.5 15.8662L13 20.1963C12.3333 20.5811 11.5 20.0999 11.5 19.3301V10.6699Z",stopIcon:"path://M15 0C23.2843 0 30 6.71573 30 15C30 23.2843 23.2843 30 15 30C6.71573 30 0 23.2843 0 15C0 6.71573 6.71573 0 15 0ZM15 3C8.37258 3 3 8.37258 3 15C3 21.6274 8.37258 27 15 27C21.6274 27 27 21.6274 27 15C27 8.37258 21.6274 3 15 3ZM11.5 10C12.3284 10 13 10.6716 13 11.5V18.5C13 19.3284 12.3284 20 11.5 20C10.6716 20 10 19.3284 10 18.5V11.5C10 10.6716 10.6716 10 11.5 10ZM18.5 10C19.3284 10 20 10.6716 20 11.5V18.5C20 19.3284 19.3284 20 18.5 20C17.6716 20 17 19.3284 17 18.5V11.5C17 10.6716 17.6716 10 18.5 10Z",nextIcon:"path://M0.838834 18.7383C0.253048 18.1525 0.253048 17.2028 0.838834 16.617L7.55635 9.89949L0.838834 3.18198C0.253048 2.59619 0.253048 1.64645 0.838834 1.06066C1.42462 0.474874 2.37437 0.474874 2.96015 1.06066L10.7383 8.83883L10.8412 8.95277C11.2897 9.50267 11.2897 10.2963 10.8412 10.8462L10.7383 10.9602L2.96015 18.7383C2.37437 19.3241 1.42462 19.3241 0.838834 18.7383Z",prevIcon:"path://M10.9602 1.06066C11.5459 1.64645 11.5459 2.59619 10.9602 3.18198L4.24264 9.89949L10.9602 16.617C11.5459 17.2028 11.5459 18.1525 10.9602 18.7383C10.3744 19.3241 9.42462 19.3241 8.83883 18.7383L1.06066 10.9602L0.957771 10.8462C0.509245 10.2963 0.509245 9.50267 0.957771 8.95277L1.06066 8.83883L8.83883 1.06066C9.42462 0.474874 10.3744 0.474874 10.9602 1.06066Z",prevBtnSize:18,nextBtnSize:18,color:ug.color.accent50,borderColor:ug.color.accent50,borderWidth:0},emphasis:{label:{show:!0,color:ug.color.accent60},itemStyle:{color:ug.color.accent60,borderColor:ug.color.accent60},controlStyle:{color:ug.color.accent70,borderColor:ug.color.accent70}},progress:{lineStyle:{color:ug.color.accent30},itemStyle:{color:ug.color.accent40}},data:[]}),e}(mX);E(xX,Vv.prototype);var _X=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="timeline",e}(Ky),bX=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i)||this;return o.type=r||"value",o}return n(e,t),e.prototype.getLabelModel=function(){return this.model.getModel("label")},e.prototype.isHorizontal=function(){return"horizontal"===this.model.get("orient")},e}(SM),wX=Math.PI,SX=Pa(),MX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){this.api=e},e.prototype.render=function(t,e,n){if(this.model=t,this.api=n,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var i=this._layout(t,n),r=this._createGroup("_mainGroup"),o=this._createGroup("_labelGroup"),a=this._axis=this._createAxis(i,t);t.formatTooltip=function(t){return Ty("nameValue",{noName:!0,value:a.scale.getLabel({value:t})})},B(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](i,r,a,t)},this),this._renderAxisLabel(i,o,a,t),this._position(i,t)}this._doPlayStop(),this._updateTicksStatus()},e.prototype.remove=function(){this._clearTimer(),this.group.removeAll()},e.prototype.dispose=function(){this._clearTimer()},e.prototype._layout=function(t,e){var n,i,r,o,a=t.get(["label","position"]),s=t.get("orient"),l=function(t,e){return Jf(t.getBoxLayoutParams(),eg(t,e).refContainer,t.get("padding"))}(t,e),u={horizontal:"center",vertical:(n=null==a||"auto"===a?"horizontal"===s?l.y+l.height/2=0||"+"===n?"left":"right"},c={horizontal:n>=0||"+"===n?"top":"bottom",vertical:"middle"},h={horizontal:0,vertical:wX/2},d="vertical"===s?l.height:l.width,p=t.getModel("controlStyle"),f=p.get("show",!0),g=f?p.get("itemSize"):0,v=f?p.get("itemGap"):0,y=g+v,m=t.get(["label","rotate"])||0;m=m*wX/180;var x=p.get("position",!0),_=f&&p.get("showPlayBtn",!0),b=f&&p.get("showPrevBtn",!0),w=f&&p.get("showNextBtn",!0),S=0,M=d;"left"===x||"bottom"===x?(_&&(i=[0,0],S+=y),b&&(r=[S,0],S+=y),w&&(o=[M-g,0],M-=y)):(_&&(i=[M-g,0],M-=y),b&&(r=[0,0],S+=y),w&&(o=[M-g,0],M-=y));var I=[S,M];return t.get("inverse")&&I.reverse(),{viewRect:l,mainLength:d,orient:s,rotation:h[s],labelRotation:m,labelPosOpt:n,labelAlign:t.get(["label","align"])||u[s],labelBaseline:t.get(["label","verticalAlign"])||t.get(["label","baseline"])||c[s],playPosition:i,prevBtnPosition:r,nextBtnPosition:o,axisExtent:I,controlSize:g,controlGap:v}},e.prototype._position=function(t,e){var n=this._mainGroup,i=this._labelGroup,r=t.viewRect;if("vertical"===t.orient){var o=[1,0,0,1,0,0],a=r.x,s=r.y+r.height;Te(o,o,[-a,-s]),Ce(o,o,-wX/2),Te(o,o,[a,s]),(r=r.clone()).applyTransform(o)}var l=v(r),u=v(n.getBoundingRect()),c=v(i.getBoundingRect()),h=[n.x,n.y],d=[i.x,i.y];d[0]=h[0]=l[0][0];var p,f=t.labelPosOpt;null==f||j(f)?(y(h,u,l,1,p="+"===f?0:1),y(d,c,l,1,1-p)):(y(h,u,l,1,p=f>=0?0:1),d[1]=h[1]+f);function g(t){t.originX=l[0][0]-t.x,t.originY=l[1][0]-t.y}function v(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function y(t,e,n,i,r){t[i]+=n[i][r]-e[i][r]}n.setPosition(h),i.setPosition(d),n.rotation=i.rotation=t.rotation,g(n),g(i)},e.prototype._createAxis=function(t,e){var n=e.getData(),i=e.get("axisType")||e.get("type");"category"!==i&&"time"!==i&&(i="value");var r=Ww(e,i,!1);r.getTicks=function(){return n.mapArray(["value"],function(t){return{value:t}})};var o=n.getDataExtent("value");r.setExtent(o[0],o[1]),ES(r,{fixMinMax:[!0,!0]});var a=new bX("value",r,t.axisExtent,i);return a.model=e,a},e.prototype._createGroup=function(t){var e=this[t]=new vo;return this.group.add(e),e},e.prototype._renderAxisLine=function(t,e,n,i){var r=n.getExtent();if(i.get(["lineStyle","show"])){var o=new Oh({shape:{x1:r[0],y1:0,x2:r[1],y2:0},style:k({lineCap:"round"},i.getModel("lineStyle").getLineStyle()),silent:!0,z2:1});e.add(o);var a=this._progressLine=new Oh({shape:{x1:r[0],x2:this._currentPointer?this._currentPointer.x:r[0],y1:0,y2:0},style:P({lineCap:"round",lineWidth:o.style.lineWidth},i.getModel(["progress","lineStyle"]).getLineStyle()),silent:!0,z2:1});e.add(a)}},e.prototype._renderAxisTick=function(t,e,n,i){var r=this,o=i.getData(),a=n.scale.getTicks();this._tickSymbols=[],B(a,function(t){var a=n.dataToCoord(t.value),s=o.getItemModel(t.value),l=s.getModel("itemStyle"),u=s.getModel(["emphasis","itemStyle"]),c=s.getModel(["progress","itemStyle"]),h={x:a,y:0,onclick:U(r._changeTimeline,r,t.value)},d=IX(s,l,e,h);d.ensureState("emphasis").style=u.getItemStyle(),d.ensureState("progress").style=c.getItemStyle(),Ac(d);var p=Iu(d);s.get("tooltip")?(p.dataIndex=t.value,p.dataModel=i):p.dataIndex=p.dataModel=null,r._tickSymbols.push(d)})},e.prototype._renderAxisLabel=function(t,e,n,i){var r=this;if(n.getLabelModel().get("show")){var o=i.getData(),a=n.getViewLabels();this._tickLabels=[],B(a,function(i){if(!i.tick.offInterval){var a=i.tick.value,s=o.getItemModel(a),l=s.getModel("label"),u=s.getModel(["emphasis","label"]),c=s.getModel(["progress","label"]),h=n.dataToCoord(a),d=new du({x:h,y:0,rotation:t.labelRotation-t.rotation,onclick:U(r._changeTimeline,r,a),silent:!1,style:sp(l,{text:i.formattedLabel,align:t.labelAlign,verticalAlign:t.labelBaseline})});d.ensureState("emphasis").style=sp(u),d.ensureState("progress").style=sp(c),e.add(d),Ac(d),SX(d).dataIndex=a,r._tickLabels.push(d)}})}},e.prototype._renderControl=function(t,e,n,i){var r=t.controlSize,o=t.rotation,a=i.getModel("controlStyle").getItemStyle(),s=i.getModel(["emphasis","controlStyle"]).getItemStyle(),l=i.getPlayState(),u=i.get("inverse",!0);function c(t,n,l,u){if(t){var c=Qr(at(i.get(["controlStyle",n+"BtnSize"]),r),r),h=function(t,e,n,i){var r=i.style,o=Od(t.get(["controlStyle",e]),i||{},new Xe(n[0],n[1],n[2],n[3]));r&&o.setStyle(r);return o}(i,n+"Icon",[0,-c/2,c,c],{x:t[0],y:t[1],originX:r/2,originY:0,rotation:u?-o:0,rectHover:!0,style:a,onclick:l});h.ensureState("emphasis").style=s,e.add(h),Ac(h)}}c(t.nextBtnPosition,"next",U(this._changeTimeline,this,u?"-":"+")),c(t.prevBtnPosition,"prev",U(this._changeTimeline,this,u?"+":"-")),c(t.playPosition,l?"stop":"play",U(this._handlePlayClick,this,!l),!0)},e.prototype._renderCurrentPointer=function(t,e,n,i){var r=i.getData(),o=i.getCurrentIndex(),a=r.getItemModel(o).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=U(s._handlePointerDrag,s),t.ondragend=U(s._handlePointerDragend,s),TX(t,s._progressLine,o,n,i,!0)},onUpdate:function(t){TX(t,s._progressLine,o,n,i)}};this._currentPointer=IX(a,a,this._mainGroup,{},this._currentPointer,l)},e.prototype._handlePlayClick=function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},e.prototype._handlePointerDrag=function(t,e,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},e.prototype._handlePointerDragend=function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},e.prototype._pointerChangeTimeline=function(t,e){var n=this._toAxisCoord(t)[0],i=Wo(this._axis.getExtent().slice());n>i[1]&&(n=i[1]),n=0&&(s[a]=+s[a].toFixed(d)),[s,h]}var zX={min:Y(EX,"min"),max:Y(EX,"max"),average:Y(EX,"average"),median:Y(EX,"median")};function BX(t,e){if(e){var n=t.getData(),i=t.coordinateSystem,r=i&&i.dimensions;if(!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!X(e.coord)&&X(r)){var o=VX(e,n,i,t);if((e=C(e)).type&&zX[e.type]&&o.baseAxis&&o.valueAxis){var a=R(r,o.baseAxis.dim),s=R(r,o.valueAxis.dim),l=zX[e.type](n,o.valueAxis.dim,o.baseDataDim,o.valueDataDim,a,s);e.coord=l[0],e.value=l[1]}else e.coord=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis]}if(null!=e.coord&&X(r))for(var u=e.coord,c=0;c<2;c++)zX[u[c]]&&(u[c]=HX(n,n.mapDimension(r[c]),u[c]));else{e.coord=[];var h=t.getBaseAxis();if(h&&e.type&&zX[e.type]){var d=i.getOtherAxis(h);d&&(e.value=HX(n,n.mapDimension(d.dim),e.type))}}return e}}function VX(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(function(t,e){var n=t.getData().getDimensionInfo(e);return n&&n.coordDim}(i,r.valueDataDim)),r.baseAxis=n.getOtherAxis(r.valueAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim)):(r.baseAxis=i.getBaseAxis(),r.valueAxis=n.getOtherAxis(r.baseAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim),r.valueDataDim=e.mapDimension(r.valueAxis.dim)),r}function GX(t,e){return!(t&&t.containData&&e.coord&&!NX(e))||t.containData(e.coord)}function FX(t,e){return t?function(t,n,i,r){return Uv(r<2?t.coord&&t.coord[r]:t.value,e[r])}:function(t,n,i,r){return Uv(t.value,e[r])}}function HX(t,e,n){if("average"===n){var i=0,r=0;return t.each(e,function(t,e){isNaN(t)||(i+=t,r++)}),i/r}return"median"===n?t.getMedian(e):t.getDataExtent(e)["max"===n?1:0]}var WX=Pa(),UX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){this.markerGroupMap=mt()},e.prototype.render=function(t,e,n){var i=this,r=this.markerGroupMap;r.each(function(t){WX(t).keep=!1}),e.eachSeries(function(t){var r=OX.getMarkerModelFromSeries(t,i.type);r&&i.renderSeries(t,r,e,n)}),r.each(function(t){!WX(t).keep&&i.group.remove(t.group)}),function(t,e,n){t.eachSeries(function(t){var i=OX.getMarkerModelFromSeries(t,n),r=e.get(t.id);if(i&&r&&r.group){var o=Zd(i),a=o.z,s=o.zlevel;qd(r.group,a,s)}})}(e,r,this.type)},e.prototype.markKeep=function(t){WX(t).keep=!0},e.prototype.toggleBlurSeries=function(t,e){var n=this;B(t,function(t){var i=OX.getMarkerModelFromSeries(t,n.type);i&&i.getData().eachItemGraphicEl(function(t){t&&(e?mc(t):xc(t))})})},e.type="marker",e}(Ky);function YX(t,e,n){var i=e.coordinateSystem,r=n.getWidth(),o=n.getHeight(),a=i&&i.getArea&&i.getArea();t.each(function(n){var s,l=t.getItemModel(n),u="coordinate"===l.get("relativeTo"),c=u?a?a.width:0:r,h=u?a?a.height:0:o,d=u&&a?a.x:0,p=u&&a?a.y:0,f=Vo(l.get("x"),c)+d,g=Vo(l.get("y"),h)+p;if(isNaN(f)||isNaN(g)){if(e.getMarkerPosition)s=e.getMarkerPosition(t.getValues(t.dimensions,n));else if(i){var v=t.get(i.dimensions[0],n),y=t.get(i.dimensions[1],n);s=i.dataToPoint([v,y])}}else s=[f,g];isNaN(f)||(s[0]=f),isNaN(g)||(s[1]=g),t.setItemLayout(n,s)})}var XX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries(function(t){var e=OX.getMarkerModelFromSeries(t,"markPoint");e&&(YX(e.getData(),t,n),this.markerGroupMap.get(t.id).updateLayout())},this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new nC),u=function(t,e,n){var i;i=t?V(t&&t.dimensions,function(t){var n=e.getData();return k(k({},n.getDimensionInfo(n.mapDimension(t))||{}),{name:t,ordinalMeta:null})}):[{name:"value",type:"float"}];var r=new Hb(i,n),o=V(n.get("data"),Y(BX,e));t&&(o=F(o,Y(GX,t)));var a=FX(!!t,i);return r.initData(o,null,a),r}(r,t,e);e.setData(u),YX(e.getData(),t,i),u.each(function(t){var n=u.getItemModel(t),i=n.getShallow("symbol"),r=n.getShallow("symbolSize"),o=n.getShallow("symbolRotate"),s=n.getShallow("symbolOffset"),l=n.getShallow("symbolKeepAspect");if(Z(i)||Z(r)||Z(o)||Z(s)){var c=e.getRawValue(t),h=e.getDataParams(t);Z(i)&&(i=i(c,h)),Z(r)&&(r=r(c,h)),Z(o)&&(o=o(c,h)),Z(s)&&(s=s(c,h))}var d=n.getModel("itemStyle").getItemStyle(),p=n.get("z2"),f=qm(a,"color");d.fill||(d.fill=f),u.setItemVisual(t,{z2:at(p,0),symbol:i,symbolSize:r,symbolRotate:o,symbolOffset:s,symbolKeepAspect:l,style:d})}),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl(function(t){t.traverse(function(t){Iu(t).dataModel=e})}),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markPoint",e}(UX);var ZX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markLine",e.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},e}(OX),jX=Pa(),qX=function(t,e,n,i){var r,o=t.getData();if(X(i))r=i;else{var a=i.type;if("min"===a||"max"===a||"average"===a||"median"===a||null!=i.xAxis||null!=i.yAxis){var s=void 0,l=void 0;if(null!=i.yAxis||null!=i.xAxis)s=e.getAxis(null!=i.yAxis?"y":"x"),l=ot(i.yAxis,i.xAxis);else{var u=VX(i,o,e,t);s=u.valueAxis,l=HX(o,Kb(o,u.valueDataDim),a)}var c="x"===s.dim?0:1,h=1-c,d=C(i),p={coord:[]};d.type=null,d.coord=[],d.coord[h]=-1/0,p.coord[h]=1/0;var f=n.get("precision");f>=0&&K(l)&&(l=+l.toFixed(Math.min(f,20))),d.coord[c]=p.coord[c]=l,r=[d,p,{type:a,valueIndex:i.valueIndex,value:l}]}else r=[]}var g=[BX(t,r[0]),BX(t,r[1]),k({},r[2])];return g[2].type=g[2].type||null,D(g[2],g[0]),D(g[2],g[1]),g};function KX(t){return!isNaN(t)&&!isFinite(t)}function $X(t,e,n,i){var r=1-t,o=i.dimensions[t];return KX(e[r])&&KX(n[r])&&e[t]===n[t]&&i.getAxis(o).containData(e[t])}function JX(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coord;if(n&&i&&($X(1,n,i,t)||$X(0,n,i,t)))return!0}return GX(t,e[0])&&GX(t,e[1])}function QX(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Vo(s.get("x"),r.getWidth()),u=Vo(s.get("y"),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(t.dimensions,e));else{var c=a.dimensions,h=t.get(c[0],e),d=t.get(c[1],e);o=a.dataToPoint([h,d])}if(wC(a,"cartesian2d")){var p=a.getAxis("x"),f=a.getAxis("y");c=a.dimensions;KX(t.get(c[0],e))?o[0]=p.toGlobalCoord(p.getExtent()[n?0:1]):KX(t.get(c[1],e))&&(o[1]=f.toGlobalCoord(f.getExtent()[n?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];t.setItemLayout(e,o)}var tZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries(function(t){var e=OX.getMarkerModelFromSeries(t,"markLine");if(e){var i=e.getData(),r=jX(e).from,o=jX(e).to;r.each(function(e){QX(r,e,!0,t,n),QX(o,e,!1,t,n)}),i.each(function(t){i.setItemLayout(t,[r.getItemLayout(t),o.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new QN);this.group.add(l.group);var u=function(t,e,n){var i;i=t?V(t&&t.dimensions,function(t){var n=e.getData();return k(k({},n.getDimensionInfo(n.mapDimension(t))||{}),{name:t,ordinalMeta:null})}):[{name:"value",type:"float"}];var r=new Hb(i,n),o=new Hb(i,n),a=new Hb([],n),s=V(n.get("data"),Y(qX,e,t,n));t&&(s=F(s,Y(JX,t)));var l=FX(!!t,i);return r.initData(V(s,function(t){return t[0]}),null,l),o.initData(V(s,function(t){return t[1]}),null,l),a.initData(V(s,function(t){return t[2]})),a.hasItemOption=!0,{from:r,to:o,line:a}}(r,t,e),c=u.from,h=u.to,d=u.line;jX(e).from=c,jX(e).to=h,e.setData(d);var p=e.get("symbol"),f=e.get("symbolSize"),g=e.get("symbolRotate"),v=e.get("symbolOffset");function y(e,n,r){var o=e.getItemModel(n);QX(e,n,r,t,i);var s=o.getModel("itemStyle").getItemStyle();null==s.fill&&(s.fill=qm(a,"color")),e.setItemVisual(n,{symbolKeepAspect:o.get("symbolKeepAspect"),symbolOffset:at(o.get("symbolOffset",!0),v[r?0:1]),symbolRotate:at(o.get("symbolRotate",!0),g[r?0:1]),symbolSize:at(o.get("symbolSize"),f[r?0:1]),symbol:at(o.get("symbol",!0),p[r?0:1]),style:s})}X(p)||(p=[p,p]),X(f)||(f=[f,f]),X(g)||(g=[g,g]),X(v)||(v=[v,v]),u.from.each(function(t){y(c,t,!0),y(h,t,!1)}),d.each(function(t){var e=d.getItemModel(t),n=e.getModel("lineStyle").getLineStyle();d.setItemLayout(t,[c.getItemLayout(t),h.getItemLayout(t)]);var i=e.get("z2");null==n.stroke&&(n.stroke=c.getItemVisual(t,"style").fill),d.setItemVisual(t,{z2:at(i,0),fromSymbolKeepAspect:c.getItemVisual(t,"symbolKeepAspect"),fromSymbolOffset:c.getItemVisual(t,"symbolOffset"),fromSymbolRotate:c.getItemVisual(t,"symbolRotate"),fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolKeepAspect:h.getItemVisual(t,"symbolKeepAspect"),toSymbolOffset:h.getItemVisual(t,"symbolOffset"),toSymbolRotate:h.getItemVisual(t,"symbolRotate"),toSymbolSize:h.getItemVisual(t,"symbolSize"),toSymbol:h.getItemVisual(t,"symbol"),style:n})}),l.updateData(d),u.line.eachItemGraphicEl(function(t){Iu(t).dataModel=e,t.traverse(function(t){Iu(t).dataModel=e})}),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markLine",e}(UX);var eZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markArea",e.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e}(OX),nZ=Pa(),iZ=function(t,e,n,i){var r=i[0],o=i[1];if(r&&o){var a=BX(t,r),s=BX(t,o),l=a.coord,u=s.coord;l[0]=ot(l[0],-1/0),l[1]=ot(l[1],-1/0),u[0]=ot(u[0],1/0),u[1]=ot(u[1],1/0);var c=A([{},a,s]);return c.coord=[a.coord,s.coord],c.x0=a.x,c.y0=a.y,c.x1=s.x,c.y1=s.y,c}};function rZ(t){return!isNaN(t)&&!isFinite(t)}function oZ(t,e,n,i){var r=1-t;return rZ(e[r])&&rZ(n[r])}function aZ(t,e){var n=e.coord[0],i=e.coord[1],r={coord:n,x:e.x0,y:e.y0},o={coord:i,x:e.x1,y:e.y1};return wC(t,"cartesian2d")?!(!n||!i||!oZ(1,n,i)&&!oZ(0,n,i))||function(t,e,n){return!(t&&t.containZone&&e.coord&&n.coord&&!NX(e)&&!NX(n))||t.containZone(e.coord,n.coord)}(t,r,o):GX(t,r)||GX(t,o)}function sZ(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Vo(s.get(n[0]),r.getWidth()),u=Vo(s.get(n[1]),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition){var c=t.getValues(["x0","y0"],e),h=t.getValues(["x1","y1"],e),d=a.clampData(c),p=a.clampData(h),f=[];"x0"===n[0]?f[0]=d[0]>p[0]?h[0]:c[0]:f[0]=d[0]>p[0]?c[0]:h[0],"y0"===n[1]?f[1]=d[1]>p[1]?h[1]:c[1]:f[1]=d[1]>p[1]?c[1]:h[1],o=i.getMarkerPosition(f,n,!0)}else{var g=[m=t.get(n[0],e),x=t.get(n[1],e)];a.clampData&&a.clampData(g,g),o=a.dataToPoint(g,!0)}if(wC(a,"cartesian2d")){var v=a.getAxis("x"),y=a.getAxis("y"),m=t.get(n[0],e),x=t.get(n[1],e);rZ(m)?o[0]=v.toGlobalCoord(v.getExtent()["x0"===n[0]?0:1]):rZ(x)&&(o[1]=y.toGlobalCoord(y.getExtent()["y0"===n[1]?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];return o}var lZ=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],uZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries(function(t){var e=OX.getMarkerModelFromSeries(t,"markArea");if(e){var i=e.getData();i.each(function(e){var r=V(lZ,function(r){return sZ(i,e,r,t,n)});i.setItemLayout(e,r),i.getItemGraphicEl(e).setShape("points",r)})}},this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,{group:new vo});this.group.add(l.group),this.markKeep(l);var u=function(t,e,n){var i,r,o=["x0","y0","x1","y1"];if(t){var a=V(t&&t.dimensions,function(t){var n=e.getData();return k(k({},n.getDimensionInfo(n.mapDimension(t))||{}),{name:t,ordinalMeta:null})});r=V(o,function(t,e){return{name:t,type:a[e%2].type}}),i=new Hb(r,n)}else i=new Hb(r=[{name:"value",type:"float"}],n);var s=V(n.get("data"),Y(iZ,e,t,n));t&&(s=F(s,Y(aZ,t)));var l=t?function(t,e,n,i){return Uv(t.coord[Math.floor(i/2)][i%2],r[i])}:function(t,e,n,i){return Uv(t.value,r[i])};return i.initData(s,null,l),i.hasItemOption=!0,i}(r,t,e);e.setData(u),u.each(function(e){var n=V(lZ,function(n){return sZ(u,e,n,t,i)}),o=r.getAxis("x").scale,s=r.getAxis("y").scale,l=o.getExtent(),c=s.getExtent(),h=[o.parse(u.get("x0",e)),o.parse(u.get("x1",e))],d=[s.parse(u.get("y0",e)),s.parse(u.get("y1",e))];Wo(h),Wo(d);var p=!!(l[0]>h[1]||l[1]d[1]||c[1]=0},e.prototype.getOrient=function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",bottom:ug.size.m,align:"auto",backgroundColor:ug.color.transparent,borderColor:ug.color.border,borderRadius:0,borderWidth:0,padding:5,itemGap:8,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:ug.color.disabled,inactiveBorderColor:ug.color.disabled,inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:ug.color.disabled,inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:ug.color.secondary},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:ug.color.tertiary,borderWidth:1,borderColor:ug.color.border},emphasis:{selectorLabel:{show:!0,color:ug.color.quaternary}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1},triggerEvent:!1},e}(lg),hZ=Y,dZ=B,pZ=vo,fZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.newlineDisabled=!1,n}return n(e,t),e.prototype.init=function(){this.group.add(this._contentGroup=new pZ),this.group.add(this._selectorGroup=new pZ),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,e,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var r=t.get("align"),o=t.get("orient");r&&"auto"!==r||(r="right"===t.get("left")&&"vertical"===o?"right":"left");var a=t.get("selector",!0),s=t.get("selectorPosition",!0);!a||s&&"auto"!==s||(s="horizontal"===o?"end":"start"),this.renderInner(r,t,e,n,a,o,s);var l=eg(t,n).refContainer,u=t.getBoxLayoutParams(),c=t.get("padding"),h=Jf(u,l,c),d=this.layoutInner(t,r,h,i,a,s),p=Jf(P({width:d.width,height:d.height},u),l,c);this.group.x=p.x-d.x,this.group.y=p.y-d.y,this.group.markRedraw(),this.group.add(this._backgroundEl=FU(d,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,e,n,i,r,o,a){var s=this.getContentGroup(),l=mt(),u=e.get("selectedMode"),c=e.get("triggerEvent"),h=[];n.eachRawSeries(function(t){!t.get("legendHoverLink")&&h.push(t.id)}),dZ(e.getData(),function(r,o){var a=this,d=r.get("name");if(!this.newlineDisabled&&(""===d||"\n"===d)){var p=new pZ;return p.newline=!0,void s.add(p)}var f=n.getSeriesByName(d)[0];if(!l.get(d)){if(f){var g=f.getData(),v=g.getVisual("legendLineStyle")||{},y=g.getVisual("legendIcon"),m=g.getVisual("style"),x=this._createItem(f,d,o,r,e,t,v,m,y,u,i);x.on("click",hZ(gZ,d,null,i,h)).on("mouseover",hZ(vZ,f.name,null,i,h)).on("mouseout",hZ(yZ,f.name,null,i,h)),n.ssr&&x.eachChild(function(t){var e=Iu(t);e.seriesIndex=f.seriesIndex,e.dataIndex=o,e.ssrType="legend"}),c&&x.eachChild(function(t){a.packEventData(t,e,f,o,d)}),l.set(d,!0)}else n.eachRawSeries(function(a){var s=this;if(!l.get(d)&&a.legendVisualProvider){var p=a.legendVisualProvider;if(!p.containName(d))return;var f=p.indexOfName(d),g=p.getItemVisual(f,"style"),v=p.getItemVisual(f,"legendIcon"),y=gi(g.fill);y&&0===y[3]&&(y[3]=.2,g=k(k({},g),{fill:Mi(y,"rgba")}));var m=this._createItem(a,d,o,r,e,t,{},g,v,u,i);m.on("click",hZ(gZ,null,d,i,h)).on("mouseover",hZ(vZ,null,d,i,h)).on("mouseout",hZ(yZ,null,d,i,h)),n.ssr&&m.eachChild(function(t){var e=Iu(t);e.seriesIndex=a.seriesIndex,e.dataIndex=o,e.ssrType="legend"}),c&&m.eachChild(function(t){s.packEventData(t,e,a,o,d)}),l.set(d,!0)}},this);0}},this),r&&this._createSelector(r,e,i,o,a)},e.prototype.packEventData=function(t,e,n,i,r){var o={componentType:"legend",componentIndex:e.componentIndex,dataIndex:i,value:r,seriesIndex:n.seriesIndex};Iu(t).eventData=o},e.prototype._createSelector=function(t,e,n,i,r){var o=this.getSelectorGroup();dZ(t,function(t){var i=t.type,r=new du({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===i?"legendAllSelect":"legendInverseSelect",legendId:e.id})}});o.add(r),op(r,{normal:e.getModel("selectorLabel"),emphasis:e.getModel(["emphasis","selectorLabel"])},{defaultText:t.title}),Ac(r)})},e.prototype._createItem=function(t,e,n,i,r,o,a,s,l,u,c){var h=t.visualDrawType,d=r.get("itemWidth"),p=r.get("itemHeight"),f=r.isSelected(e),g=i.get("symbolRotate"),v=i.get("symbolKeepAspect"),y=i.get("icon"),m=function(t,e,n,i,r,o,a){function s(t,e){"auto"===t.lineWidth&&(t.lineWidth=e.lineWidth>0?2:0),dZ(t,function(n,i){"inherit"===t[i]&&(t[i]=e[i])})}var l=e.getModel("itemStyle"),u=l.getItemStyle(),c=0===t.lastIndexOf("empty",0)?"fill":"stroke",h=l.getShallow("decal");u.decal=h&&"inherit"!==h?Zx(h,a):i.decal,"inherit"===u.fill&&(u.fill=i[r]);"inherit"===u.stroke&&(u.stroke=i[c]);"inherit"===u.opacity&&(u.opacity=("fill"===r?i:n).opacity);s(u,i);var d=e.getModel("lineStyle"),p=d.getLineStyle();if(s(p,n),"auto"===u.fill&&(u.fill=i.fill),"auto"===u.stroke&&(u.stroke=i.fill),"auto"===p.stroke&&(p.stroke=i.fill),!o){var f=e.get("inactiveBorderWidth"),g=u[c];u.lineWidth="auto"===f?i.lineWidth>0&&g?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),p.stroke=d.get("inactiveColor"),p.lineWidth=d.get("inactiveWidth")}return{itemStyle:u,lineStyle:p}}(l=y||l||"roundRect",i,a,s,h,f,c),x=new pZ,_=i.getModel("textStyle");if(!Z(t.getLegendIcon)||y&&"inherit"!==y){var b="inherit"===y&&t.getData().getVisual("symbol")?"inherit"===g?t.getData().getVisual("symbolRotate"):g:0;x.add(function(t){var e=t.icon||"roundRect",n=xx(e,0,0,t.itemWidth,t.itemHeight,t.itemStyle.fill,t.symbolKeepAspect);n.setStyle(t.itemStyle),n.rotation=(t.iconRotate||0)*Math.PI/180,n.setOrigin([t.itemWidth/2,t.itemHeight/2]),e.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill=ug.color.neutral00,n.style.lineWidth=2);return n}({itemWidth:d,itemHeight:p,icon:l,iconRotate:b,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:v}))}else x.add(t.getLegendIcon({itemWidth:d,itemHeight:p,icon:l,iconRotate:g,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:v}));var w="left"===o?d+5:-5,S=o,M=r.get("formatter"),I=e;j(M)&&M?I=M.replace("{name}",null!=e?e:""):Z(M)&&(I=M(e));var T=f?_.getTextColor():i.get("inactiveColor");x.add(new du({style:sp(_,{text:I,x:w,y:p/2,fill:T,align:S,verticalAlign:"middle"},{inheritColor:T})}));var C=new lu({shape:x.getBoundingRect(),style:{fill:"transparent"}}),D=i.getModel("tooltip");return D.get("show")&&Gd({el:C,componentModel:r,itemName:e,itemTooltipOption:D.option}),x.add(C),x.eachChild(function(t){t.silent=!0}),C.silent=!u,this.getContentGroup().add(x),Ac(x),x.__legendDataIndex=n,x},e.prototype.layoutInner=function(t,e,n,i,r,o){var a=this.getContentGroup(),s=this.getSelectorGroup();qf(t.get("orient"),a,t.get("itemGap"),n.width,n.height);var l=a.getBoundingRect(),u=[-l.x,-l.y];if(s.markRedraw(),a.markRedraw(),r){qf("horizontal",s,t.get("selectorItemGap",!0));var c=s.getBoundingRect(),h=[-c.x,-c.y],d=t.get("selectorButtonGap",!0),p=t.getOrient().index,f=0===p?"width":"height",g=0===p?"height":"width",v=0===p?"y":"x";"end"===o?h[p]+=l[f]+d:u[p]+=c[f]+d,h[1-p]+=l[g]/2-c[g]/2,s.x=h[0],s.y=h[1],a.x=u[0],a.y=u[1];var y={x:0,y:0};return y[f]=l[f]+d+c[f],y[g]=Math.max(l[g],c[g]),y[v]=Math.min(0,c[v]+h[1-p]),y}return a.x=u[0],a.y=u[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e}(Ky);function gZ(t,e,n,i){yZ(t,e,n,i),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),vZ(t,e,n,i)}function vZ(t,e,n,i){n.usingTHL()||n.dispatchAction({type:"highlight",seriesName:t,name:e,excludeSeriesId:i})}function yZ(t,e,n,i){n.usingTHL()||n.dispatchAction({type:"downplay",seriesName:t,name:e,excludeSeriesId:i})}function mZ(t,e,n){var i="allSelect"===t||"inverseSelect"===t,r={},o=[];n.eachComponent({mainType:"legend",query:e},function(n){i?n[t]():n[t](e.name),xZ(n,r),o.push(n.componentIndex)});var a={};return n.eachComponent("legend",function(t){B(r,function(e,n){t[e?"select":"unSelect"](n)}),xZ(t,a)}),i?{selected:a,legendIndex:o}:{name:e.name,selected:a}}function xZ(t,e){var n=e||{};return B(t.getData(),function(e){var i=e.get("name");if("\n"!==i&&""!==i){var r=t.isSelected(i);wt(n,i)?n[i]=n[i]&&r:n[i]=r}}),n}var _Z=as(function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var n=0;nn[r],f=[-h.x,-h.y];e||(f[i]=l[s]);var g=[0,0],v=[-d.x,-d.y],y=at(t.get("pageButtonGap",!0),t.get("itemGap",!0));p&&("end"===t.get("pageButtonPosition",!0)?v[i]+=n[r]-d[r]:g[i]+=d[r]+y);v[1-i]+=h[o]/2-d[o]/2,l.setPosition(f),u.setPosition(g),c.setPosition(v);var m={x:0,y:0};if(m[r]=p?n[r]:h[r],m[o]=Math.max(h[o],d[o]),m[a]=Math.min(0,d[a]+v[1-i]),u.__rectSize=n[r],p){var x={x:0,y:0};x[r]=Math.max(n[r]-d[r]-y,0),x[o]=m[o],u.setClipPath(new lu({shape:x})),u.__rectSize=x[r]}else c.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var _=this._getPageInfo(t);return null!=_.pageIndex&&rd(l,{x:_.contentPosition[0],y:_.contentPosition[1]},p?t:null),this._updatePageInfoView(t,_),m},e.prototype._pageGo=function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},e.prototype._updatePageInfoView=function(t,e){var n=this._controllerGroup;B(["pagePrev","pageNext"],function(i){var r=null!=e[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")});var i=n.childOfName("pageText"),r=t.get("pageFormatter"),o=e.pageIndex,a=null!=o?o+1:0,s=e.pageCount;i&&r&&i.setStyle("text",j(r)?r.replace("{current}",null==a?"":a+"").replace("{total}",null==s?"":s+""):r({current:a,total:s}))},e.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=IZ[r],a=TZ[r],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],c=l.length,h=c?1:0,d={contentPosition:[n.x,n.y],pageCount:h,pageIndex:h-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return d;var p=m(u);d.contentPosition[r]=-p.s;for(var f=s+1,g=p,v=p,y=null;f<=c;++f)(!(y=m(l[f]))&&v.e>g.s+i||y&&!x(y,g.s))&&(g=v.i>g.i?v:y)&&(null==d.pageNextDataIndex&&(d.pageNextDataIndex=g.i),++d.pageCount),v=y;for(f=s-1,g=p,v=p,y=null;f>=-1;--f)(y=m(l[f]))&&x(v,y.s)||!(g.i=e&&t.s<=e+i}},e.prototype._findTargetItemIndex=function(t){return this._showController?(this.getContentGroup().eachChild(function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===t&&(e=r)}),null!=e?e:n):0;var e,n},e.type="legend.scroll",e}(fZ);function DZ(t){gb(bZ),t.registerComponentModel(wZ),t.registerComponentView(CZ),function(t){t.registerAction("legendScroll","legendscroll",function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(n)})})}(t)}var AZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.inside",e.defaultOption=Op(TU.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e}(TU),kZ=Pa();function LZ(t,e){if(e){t.removeKey(e.model.uid);var n=e.controller;n&&n.dispose()}}function PZ(t,e){t.isDisposed()||t.dispatchAction({type:"dataZoom",animation:{easing:"cubicOut",duration:100},batch:e})}function OZ(t,e,n,i){return t.coordinateSystem.containPoint([n,i])}function RZ(t){t.registerUpdateLifecycle("coordsys:aftercreate",function(t,e){var n=kZ(e),i=n.coordSysRecordMap||(n.coordSysRecordMap=mt());i.each(function(t){t.dataZoomInfoMap=null}),t.eachComponent({mainType:"dataZoom",subType:"inside"},function(t){B(bU(t).infoList,function(n){var r=n.model.uid,o=i.get(r)||i.set(r,function(t,e){var n={model:e,containsPoint:Y(OZ,e),dispatchAction:Y(PZ,t),dataZoomInfoMap:null,controller:null},i=n.controller=new uL(t.getZr());return B(["pan","zoom","scrollMove"],function(t){i.on(t,function(e){var i=[];n.dataZoomInfoMap.each(function(r){if(e.isAvailableBehavior(r.model.option)){var o=(r.getRange||{})[t],a=o&&o(r.dzReferCoordSysInfo,n.model.mainType,n.controller,e);!r.model.get("disabled",!0)&&a&&i.push({dataZoomId:r.model.id,start:a[0],end:a[1]})}}),i.length&&n.dispatchAction(i)})}),n}(e,n.model));(o.dataZoomInfoMap||(o.dataZoomInfoMap=mt())).set(t.uid,{dzReferCoordSysInfo:n,model:t,getRange:null})})}),i.each(function(t){var n,r=t.controller,o=t.dataZoomInfoMap;if(o){var a=o.keys()[0];null!=a&&(n=o.get(a))}if(n){var s=function(t,e,n){var i,r,o,a="type_",s={type_true:2,type_move:1,type_false:0,type_undefined:-1},l=!0;return t.each(function(t){var e=t.model,n=!e.get("disabled",!0)&&(!e.get("zoomLock",!0)||"move");s[a+n]>s[a+i]&&(i=n),l=l&&e.get("preventDefaultMouseMove",!0),r=at(e.get("cursorGrab",!0),r),o=at(e.get("cursorGrabbing",!0),o)}),{controlType:i,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!l,api:n,zInfo:{component:e.model},triggerInfo:{roamTrigger:null,isInSelf:e.containsPoint},cursorGrab:r,cursorGrabbing:o}}}(o,t,e);r.enable(s.controlType,s.opt),cm(t,"dispatchAction",n.model.get("throttle",!0),"fixRate")}else LZ(i,t)})})}var NZ=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return n(e,t),e.prototype.render=function(e,n,i){t.prototype.render.apply(this,arguments),e.noTarget()?this._clear():(this.range=e.getPercentRange(),function(t,e,n){kZ(t).coordSysRecordMap.each(function(t){var i=t.dataZoomInfoMap.get(e.uid);i&&(i.getRange=n)})}(i,e,{pan:U(EZ.pan,this),zoom:U(EZ.zoom,this),scrollMove:U(EZ.scrollMove,this)}))},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){!function(t,e){for(var n=kZ(t).coordSysRecordMap,i=n.keys(),r=0;r0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(o[1]-o[0])+o[0],u=Math.max(1/i.scale,0);o[0]=(o[0]-l)*u+l,o[1]=(o[1]-l)*u+l;var c=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return ez(0,o,[0,100],0,c.minSpan,c.maxSpan),this.range=o,r[0]!==o[0]||r[1]!==o[1]?o:void 0}},pan:zZ(function(t,e,n,i,r,o){var a=BZ[i]([o.oldX,o.oldY],[o.newX,o.newY],e,r,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength}),scrollMove:zZ(function(t,e,n,i,r,o){return BZ[i]([0,0],[o.scrollDelta,o.scrollDelta],e,r,n).signal*(t[1]-t[0])*o.scrollDelta})};function zZ(t){return function(e,n,i,r){var o=this.range,a=o.slice(),s=e.axisModels[0];if(s)return ez(t(a,s,e,n,i,r),a,[0,100],"all"),this.range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}}var BZ={grid:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}};function VZ(t){RU(t),t.registerComponentModel(AZ),t.registerComponentView(NZ),RZ(t)}var GZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=Op(TU.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:ug.color.accent10,borderRadius:0,backgroundColor:ug.color.transparent,dataBackground:{lineStyle:{color:ug.color.accent30,width:.5},areaStyle:{color:ug.color.accent20,opacity:.2}},selectedDataBackground:{lineStyle:{color:ug.color.accent40,width:.5},areaStyle:{color:ug.color.accent20,opacity:.3}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:ug.color.neutral00,borderColor:ug.color.accent20},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:ug.color.accent40,opacity:.5},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:ug.color.tertiary},brushSelect:!0,brushStyle:{color:ug.color.accent30,opacity:.3},emphasis:{handleLabel:{show:!0},handleStyle:{borderColor:ug.color.accent40},moveHandleStyle:{opacity:.8}},defaultLocationEdgeGap:15}),e}(TU),FZ=lu,HZ="horizontal",WZ="vertical",UZ=["line","bar","candlestick","scatter"],YZ={easing:"cubicOut",duration:100,delay:0},XZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._displayables={},n}return n(e,t),e.prototype.init=function(t,e){this.api=e,this._onBrush=U(this._onBrush,this),this._onBrushEnd=U(this._onBrushEnd,this)},e.prototype.render=function(e,n,i,r){if(t.prototype.render.apply(this,arguments),cm(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),!1!==e.get("show")){if(e.noTarget())return this._clear(),void this.group.removeAll();r&&"dataZoom"===r.type&&r.from===this.uid||this._buildView(),this._updateView()}else this.group.removeAll()},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){hm(this,"_dispatchZoomAction");var t=this.api.getZr();t.off("mousemove",this._onBrush),t.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var e=this._displayables.sliderGroup=new vo;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,e=this.api,n=t.get("brushSelect")?7:0,i=eg(t,e).refContainer,r=this._findCoordRect(),o=t.get("defaultLocationEdgeGap",!0)||0,a=this._orient===HZ?{right:i.width-r.x-r.width,top:i.height-30-o-n,width:r.width,height:30}:{right:o,top:r.y,width:30,height:r.height},s=og(t.option);B(["right","top","width","height"],function(t){"ph"===s[t]&&(s[t]=a[t])});var l=Jf(s,i);this._location={x:l.x,y:l.y},this._size=[l.width,l.height],this._orient===WZ&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,e=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.sliderGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==HZ||r?n===HZ&&r?{scaleY:a?1:-1,scaleX:-1}:n!==WZ||r?{scaleY:a?-1:1,scaleX:-1,rotation:Math.PI/2}:{scaleY:a?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:a?1:-1,scaleX:1});var s=t.getBoundingRect([o]),l=isNaN(s.x)?0:s.x,u=isNaN(s.y)?0:s.y;t.x=e.x-l,t.y=e.y-u,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,e=this._size,n=this._displayables.sliderGroup,i=t.get("brushSelect");n.add(new FZ({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var r=new FZ({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:U(this._onClickPanel,this)}),o=this.api.getZr();i?(r.on("mousedown",this._onBrushStart,this),r.cursor="crosshair",o.on("mousemove",this._onBrush),o.on("mouseup",this._onBrushEnd)):(o.off("mousemove",this._onBrush),o.off("mouseup",this._onBrushEnd)),n.add(r)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],t){var e=this._size,n=this._shadowSize||[],i=t.series,r=i.getRawData(),o=i.getShadowDim&&i.getShadowDim(),a=o&&r.getDimensionInfo(o)?i.getShadowDim():t.otherDim;if(null!=a){var s=this._shadowPolygonPts,l=this._shadowPolylinePts;if(r!==this._shadowData||a!==this._shadowDim||e[0]!==n[0]||e[1]!==n[1]){var u=r.getDataExtent(t.thisDim),c=r.getDataExtent(a),h=.3*(c[1]-c[0]);c=[c[0]-h,c[1]+h];var d,p=[0,e[1]],f=[0,e[0]],g=[[e[0],0],[0,0]],v=[],y=f[1]/Math.max(1,r.count()-1),m=e[0]/(u[1]-u[0]),x="time"===t.thisAxis.type,_=-y,b=Math.round(r.count()/e[0]);r.each([t.thisDim,a],function(t,e,n){if(b>0&&n%b)x||(_+=y);else{_=x?(+t-u[0])*m:_+y;var i=null==e||isNaN(e)||""===e,r=i?0:Bo(e,c,p,!0);i&&!d&&n?(g.push([g[g.length-1][0],0]),v.push([v[v.length-1][0],0])):!i&&d&&(g.push([_,0]),v.push([_,0])),i||(g.push([_,r]),v.push([_,r])),d=i}}),s=this._shadowPolygonPts=g,l=this._shadowPolylinePts=v}this._shadowData=r,this._shadowDim=a,this._shadowSize=[e[0],e[1]];for(var w=this.dataZoomModel,S=0;S<3;S++){var M=I(1===S);this._displayables.sliderGroup.add(M),this._displayables.dataShadowSegs.push(M)}}}function I(t){var e=w.getModel(t?"selectedDataBackground":"dataBackground"),n=new vo,i=new Dh({shape:{points:s},segmentIgnoreThreshold:1,style:e.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),r=new kh({shape:{points:l},segmentIgnoreThreshold:1,style:e.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return n.add(i),n.add(r),n}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,i=this.ecModel;return t.eachTargetAxis(function(r,o){B(t.getAxisProxy(r,o).getTargetSeriesModels(),function(t){if(!(n||!0!==e&&R(UZ,t.get("type"))<0)){var a,s=i.getComponent(xU(r),o).axis,l=function(t){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[t]}(r),u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(a=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l);var c=t.getData().mapDimension(r);n={thisAxis:s,series:t,thisDim:c,otherDim:l,otherAxisInverse:a}}},this)},this),n}},e.prototype._renderHandle=function(){var t=this.group,e=this._displayables,n=e.handles=[null,null],i=e.handleLabels=[null,null],r=this._displayables.sliderGroup,o=this._size,a=this.dataZoomModel,s=this.api,l=a.get("borderRadius")||0,u=a.get("brushSelect"),c=e.filler=new FZ({silent:u,style:{fill:a.get("fillerColor")},textConfig:{position:"inside"}});r.add(c),r.add(new FZ({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:o[0],height:o[1],r:l},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:ug.color.transparent}})),B([0,1],function(e){var o=a.get("handleIcon");!vx[o]&&o.indexOf("path://")<0&&o.indexOf("image://")<0&&(o="path://"+o);var s,l=xx(o,-1,0,2,2,null,!0);l.attr({cursor:(s=this._orient,"vertical"===s?"ns-resize":"ew-resize"),draggable:!0,drift:U(this._onDragMove,this,e),ondragend:U(this._onDragEnd,this),onmouseover:U(this._onOverDataInfoTriggerArea,this,!0),onmouseout:U(this._onOverDataInfoTriggerArea,this,!1),z2:5});var u=l.getBoundingRect(),c=a.get("handleSize");this._handleHeight=Vo(c,this._size[1]),this._handleWidth=u.width/u.height*this._handleHeight,l.setStyle(a.getModel("handleStyle").getItemStyle()),l.style.strokeNoScale=!0,l.rectHover=!0,l.ensureState("emphasis").style=a.getModel(["emphasis","handleStyle"]).getItemStyle(),Ac(l);var h=a.get("handleColor");null!=h&&(l.style.fill=h),r.add(n[e]=l);var d=a.getModel("textStyle"),p=(a.get("handleLabel")||{}).show||!1;t.add(i[e]=new du({silent:!0,invisible:!p,style:sp(d,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:d.getTextColor(),font:d.getFont()}),z2:10}))},this);var h=c;if(u){var d=Vo(a.get("moveHandleSize"),o[1]),p=e.moveHandle=new lu({style:a.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:o[1]-.5,height:d}}),f=.8*d,g=e.moveHandleIcon=xx(a.get("moveHandleIcon"),-f/2,-f/2,f,f,ug.color.neutral00,!0);g.silent=!0,g.y=o[1]+d/2-.5,p.ensureState("emphasis").style=a.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var v=Math.min(o[1]/2,Math.max(d,10));(h=e.moveZone=new lu({invisible:!0,shape:{y:o[1]-v,height:d+v}})).on("mouseover",function(){s.enterEmphasis(p)}).on("mouseout",function(){s.leaveEmphasis(p)}),r.add(p),r.add(g),r.add(h)}h.attr({draggable:!0,cursor:"grab",drift:U(this._onActualMoveZoneDrift,this),ondragstart:U(this._onActualMoveZoneDragStart,this),ondragend:U(this._onActualMoveZoneDragEnd,this),onmouseover:U(this._onOverDataInfoTriggerArea,this,!0),onmouseout:U(this._onOverDataInfoTriggerArea,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[Bo(t[0],[0,100],e,!0),Bo(t[1],[0,100],e,!0)]},e.prototype._updateInterval=function(t,e){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];ez(e,i,r,n.get("zoomLock")?"all":t,null!=o.minSpan?Bo(o.minSpan,a,r,!0):null,null!=o.maxSpan?Bo(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=Wo([Bo(i[0],r,a,!0),Bo(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},e.prototype._updateView=function(t){var e=this._displayables,n=this._handleEnds,i=Wo(n.slice()),r=this._size;B([0,1],function(t){var i=e.handles[t],o=this._handleHeight;i.attr({scaleX:o/2,scaleY:o/2,x:n[t]+(t?-1:1),y:r[1]/2-o/2})},this),e.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]});var o={x:i[0],width:i[1]-i[0]};e.moveHandle&&(e.moveHandle.setShape(o),e.moveZone.setShape(o),e.moveZone.getBoundingRect(),e.moveHandleIcon&&e.moveHandleIcon.attr("x",o.x+o.width/2));for(var a=e.dataShadowSegs,s=[0,i[0],i[1],r[0]],l=0;le[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var e=t.offsetX,n=t.offsetY;this._brushStart=new Pe(e,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var e=this._displayables.brushRect;if(this._brushing=!1,e){e.attr("ignore",!0);var n=e.shape;if(!(+new Date-this._brushStartTime<200&&Math.abs(n.width)<5)){var i=this._getViewExtent(),r=[0,100],o=this._handleEnds=[n.x,n.x+n.width],a=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();ez(0,o,i,0,null!=a.minSpan?Bo(a.minSpan,r,i,!0):null,null!=a.maxSpan?Bo(a.maxSpan,r,i,!0):null),this._range=Wo([Bo(o[0],i,r,!0),Bo(o[1],i,r,!0)]),this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(ye(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,e){var n=this._displayables,i=this.dataZoomModel,r=n.brushRect;r||(r=n.brushRect=new FZ({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(r)),r.attr("ignore",!1);var o=this._brushStart,a=this._displayables.sliderGroup,s=a.transformCoordToLocal(t,e),l=a.transformCoordToLocal(o.x,o.y),u=this._size;s[0]=Math.max(Math.min(u[0],s[0]),0),r.setShape({x:l[0],y:0,width:s[0]-l[0],height:u[1]})},e.prototype._dispatchZoomAction=function(t){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?YZ:null,start:e[0],end:e[1]})},e.prototype._findCoordRect=function(){var t,e=bU(this.dataZoomModel).infoList;if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var i=this.api.getWidth(),r=this.api.getHeight();t={x:.2*i,y:.2*r,width:.6*i,height:.6*r}}return t},e.type="dataZoom.slider",e}(AU);function ZZ(t,e,n,i){var r=t.get("labelFormatter"),o=t.get("labelPrecision");null!=o&&"auto"!==o||(o=n.valuePrecision);var a=n.value[e],s=null==a||isNaN(a)?"":vw(i)||fw(i)?i.getLabel({value:Math.round(a)}):isFinite(o)?Ho(a,o,!0):a+"";return Z(r)?r(a,s):j(r)?r.replace("{value}",s):s}function jZ(t){t.registerComponentModel(GZ),t.registerComponentView(XZ),RU(t)}var qZ=function(t,e,n){var i=C((KZ[t]||{})[e]);return n&&X(i)?i[i.length-1]:i},KZ={color:{active:["#006edd","#e0ffff"],inactive:[ug.color.transparent]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},$Z=ZR.mapVisual,JZ=ZR.eachVisual,QZ=X,tj=B,ej=Wo,nj=Bo,ij=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.stateList=["inRange","outOfRange"],n.replacableOptionKeys=["inRange","outOfRange","target","controller","color"],n.layoutMode={type:"box",ignoreSize:!0},n.dataBound=[-1/0,1/0],n.targetVisuals={},n.controllerVisuals={},n}return n(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n)},e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&JY(n,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},e.prototype.resetVisual=function(t){var e=this.stateList;t=U(t,this),this.controllerVisuals=$Y(this.option.controller,e,t),this.targetVisuals=$Y(this.option.target,e,t)},e.prototype.getItemSymbol=function(){return null},e.prototype.getTargetSeriesIndices=function(){var t=this,e=this.option.seriesTargets;if(e){var n=[];return tj(e,function(e){if(null!=e.seriesIndex)n.push(e.seriesIndex);else if(null!=e.seriesId){var i;t.ecModel.eachSeries(function(t){t.id===e.seriesId&&(i=t)}),i&&n.push(i.componentIndex)}}),n}var i=this.option.seriesId,r=this.option.seriesIndex;return null==r&&null==i&&(r="all"),V(Ba(this.ecModel,"series",{index:r,id:i},{useDefault:!1,enableAll:!0,enableNone:!1}).models,function(t){return t.componentIndex})},e.prototype.eachTargetSeries=function(t,e){B(this.getTargetSeriesIndices(),function(n){var i=this.ecModel.getSeriesByIndex(n);i&&t.call(e,i)},this)},e.prototype.isTargetSeries=function(t){var e=!1;return this.eachTargetSeries(function(n){n===t&&(e=!0)}),e},e.prototype.formatValueText=function(t,e,n){var i,r=this.option,o=r.precision,a=this.dataBound,s=r.formatter;n=n||["<",">"],X(t)&&(t=t.slice(),i=!0);var l=e?t:i?[u(t[0]),u(t[1])]:u(t);return j(s)?s.replace("{value}",i?l[0]:l).replace("{value2}",i?l[1]:l):Z(s)?i?s(t[0],t[1]):s(t):i?t[0]===a[0]?n[0]+" "+l[1]:t[1]===a[1]?n[1]+" "+l[0]:l[0]+" - "+l[1]:l;function u(t){return t===a[0]?"min":t===a[1]?"max":(+t).toFixed(Math.min(o,20))}},e.prototype.resetExtent=function(){var t=this.option,e=ej([t.min,t.max]);this._dataExtent=e},e.prototype.getDimension=function(t){var e=this,n=this.option.seriesTargets;if(n){var i=H(n,function(n){return null!=n.seriesIndex&&n.seriesIndex===t||null!=n.seriesId&&n.seriesId===e.ecModel.getSeriesByIndex(t).id});if(i)return i.dimension}return this.option.dimension},e.prototype.getDataDimensionIndex=function(t){var e=t.hostModel.seriesIndex,n=this.getDimension(e);if(null!=n)return t.getDimensionIndex(n);for(var i=t.dimensions,r=i.length-1;r>=0;r--){var o=i[r],a=t.getDimensionInfo(o);if(!a.isCalculationCoord)return a.storeDimIndex}},e.prototype.getExtent=function(){return this._dataExtent.slice()},e.prototype.completeVisualOption=function(){var t=this.ecModel,e=this.option,n={inRange:e.inRange,outOfRange:e.outOfRange},i=e.target||(e.target={}),r=e.controller||(e.controller={});D(i,n),D(r,n);var o=this.isCategory();function a(n){QZ(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")}}a.call(this,i),a.call(this,r),function(t,e,n){var i=t[e],r=t[n];i&&!r&&(r=t[n]={},tj(i,function(t,e){if(ZR.isValidType(e)){var n=qZ(e,"inactive",o);null!=n&&(r[e]=n,"color"!==e||r.hasOwnProperty("opacity")||r.hasOwnProperty("colorAlpha")||(r.opacity=[0,0]))}}))}.call(this,i,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,i=this.get("inactiveColor"),r=this.getItemSymbol()||"roundRect";tj(this.stateList,function(a){var s=this.itemSize,l=t[a];l||(l=t[a]={color:o?i:[i]}),null==l.symbol&&(l.symbol=e&&C(e)||(o?r:[r])),null==l.symbolSize&&(l.symbolSize=n&&C(n)||(o?s[0]:[s[0],s[0]])),l.symbol=$Z(l.symbol,function(t){return"none"===t?r:t});var u=l.symbolSize;if(null!=u){var c=-1/0;JZ(u,function(t){t>c&&(c=t)}),l.symbolSize=$Z(u,function(t){return nj(t,[0,c],[0,s[0]],!0)})}},this)}.call(this,r)},e.prototype.resetItemSize=function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},e.prototype.isCategory=function(){return!!this.option.categories},e.prototype.setSelected=function(t){},e.prototype.getSelected=function(){return null},e.prototype.getValueState=function(t){return null},e.prototype.getVisualMeta=function(t){return null},e.type="visualMap",e.dependencies=["series"],e.defaultOption={show:!0,z:4,min:0,max:200,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:ug.color.transparent,borderColor:ug.color.borderTint,contentColor:ug.color.theme[0],inactiveColor:ug.color.disabled,borderWidth:0,padding:ug.size.m,textGap:10,precision:0,textStyle:{color:ug.color.secondary}},e}(lg),rj=[20,140],oj=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},e.prototype.resetItemSize=function(){t.prototype.resetItemSize.apply(this,arguments);var e=this.itemSize;(null==e[0]||isNaN(e[0]))&&(e[0]=rj[0]),(null==e[1]||isNaN(e[1]))&&(e[1]=rj[1])},e.prototype._resetRange=function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):X(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},e.prototype.completeVisualOption=function(){t.prototype.completeVisualOption.apply(this,arguments),B(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=e[1]/3)},this)},e.prototype.setSelected=function(t){this.option.range=t.slice(),this._resetRange()},e.prototype.getSelected=function(){var t=this.getExtent(),e=Wo((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=n[1]||t<=e[1])?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[];return this.eachTargetSeries(function(n){var i=[],r=n.getData();r.each(this.getDataDimensionIndex(r),function(e,n){t[0]<=e&&e<=t[1]&&i.push(n)},this),e.push({seriesId:n.id,dataIndex:i})},this),e},e.prototype.getVisualMeta=function(t){var e=aj(this,"outOfRange",this.getExtent()),n=aj(this,"inRange",this.option.range.slice()),i=[];function r(e,n){i.push({value:e,color:t(e,n)})}for(var o=0,a=0,s=n.length,l=e.length;at[1])break;n.push({color:this.getControllerVisual(o,"color",e),offset:r/100})}return n.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),n},e.prototype._createBarPoints=function(t,e){var n=this.visualMapModel.itemSize;return[[n[0]-e[0],t[0]],[n[0],t[0]],[n[0],t[1]],[n[0]-e[1],t[1]]]},e.prototype._createBarGroup=function(t){var e=this._orient,n=this.visualMapModel.get("inverse");return new vo("horizontal"!==e||n?"horizontal"===e&&n?{scaleX:"bottom"===t?-1:1,rotation:-Math.PI/2}:"vertical"!==e||n?{scaleX:"left"===t?1:-1}:{scaleX:"left"===t?1:-1,scaleY:-1}:{scaleX:"bottom"===t?1:-1,rotation:Math.PI/2})},e.prototype._updateHandle=function(t,e){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,r=n.handleThumbs,o=n.handleLabels,a=i.itemSize,s=i.getExtent(),l=this._applyTransform("left",n.mainGroup);dj([0,1],function(u){var c=r[u];c.setStyle("fill",e.handlesColor[u]),c.y=t[u];var h=hj(t[u],[0,a[1]],s,!0),d=this.getControllerVisual(h,"symbolSize");c.scaleX=c.scaleY=d/a[0],c.x=a[0]-d/2;var p=Cd(n.handleLabelPoints[u],Td(c,this.group));if("horizontal"===this._orient){var f="left"===l||"top"===l?(a[0]-d)/2:(a[0]-d)/-2;p[1]+=f}o[u].setStyle({x:p[0],y:p[1],text:i.formatValueText(this._dataInterval[u]),verticalAlign:"middle",align:"vertical"===this._orient?this._applyTransform("left",n.mainGroup):"center"})},this)}},e.prototype._showIndicator=function(t,e,n,i){var r=this.visualMapModel,o=r.getExtent(),a=r.itemSize,s=[0,a[1]],l=this._shapes,u=l.indicator;if(u){u.attr("invisible",!1);var c=this.getControllerVisual(t,"color",{convertOpacityToAlpha:!0}),h=this.getControllerVisual(t,"symbolSize"),d=hj(t,o,s,!0),p=a[0]-h/2,f={x:u.x,y:u.y};u.y=d,u.x=p;var g=Cd(l.indicatorLabelPoint,Td(u,this.group)),v=l.indicatorLabel;v.attr("invisible",!1);var y=this._applyTransform("left",l.mainGroup),m="horizontal"===this._orient;v.setStyle({text:(n||"")+r.formatValueText(e),verticalAlign:m?y:"middle",align:m?"center":y});var x={x:p,y:d,style:{fill:c}},_={style:{x:g[0],y:g[1]}};if(r.ecModel.isAnimationEnabled()&&!this._firstShowIndicator){var b={duration:100,easing:"cubicInOut",additive:!0};u.x=f.x,u.y=f.y,u.animateTo(x,b),v.animateTo(_,b)}else u.attr(x),v.attr(_);this._firstShowIndicator=!1;var w=this._shapes.handleLabels;if(w)for(var S=0;Sr[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",a):u[1]===1/0?this._showIndicator(l,u[0],"> ",a):this._showIndicator(l,l,"≈ ",a));var c=this._hoverLinkDataIndices,h=[];(e||yj(n))&&(h=this._hoverLinkDataIndices=n.findTargetDataIndices(u));var d=function(t,e){var n={},i={};return r(t||[],n),r(e||[],i,n),[o(n),o(i)];function r(t,e,n){for(var i=0,r=t.length;i=0&&(r.dimension=o,i.push(r))}}),t.getData().setVisual("visualMeta",i)}}];function wj(t,e,n,i){for(var r=e.targetVisuals[i],o=ZR.prepareVisualTypes(r),a={color:qm(t.getData(),"color")},s=0,l=o.length;s0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"}),t.registerAction(xj,_j),B(bj,function(e){t.registerVisual(t.PRIORITY.VISUAL.COMPONENT,e)}),t.registerPreprocessor(Mj))}function Dj(t){t.registerComponentModel(oj),t.registerComponentView(gj),Cj(t)}var Aj=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._pieceList=[],n}return n(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent();var i=this._mode=this._determineMode();this._pieceList=[],kj[this._mode].call(this,this._pieceList),this._resetSelected(e,n);var r=this.option.categories;this.resetVisual(function(t,e){"categories"===i?(t.mappingMethod="category",t.categories=C(r)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=V(this._pieceList,function(t){return t=C(t),"inRange"!==e&&(t.visual=null),t}))})},e.prototype.completeVisualOption=function(){var e=this.option,n={},i=ZR.listVisualTypes(),r=this.isCategory();function o(t,e,n){return t&&t[e]&&t[e].hasOwnProperty(n)}B(e.pieces,function(t){B(i,function(e){t.hasOwnProperty(e)&&(n[e]=1)})}),B(n,function(t,n){var i=!1;B(this.stateList,function(t){i=i||o(e,t,n)||o(e.target,t,n)},this),!i&&B(this.stateList,function(t){(e[t]||(e[t]={}))[n]=qZ(n,"inRange"===t?"active":"inactive",r)})},this),t.prototype.completeVisualOption.apply(this,arguments)},e.prototype._resetSelected=function(t,e){var n=this.option,i=this._pieceList,r=(e?n:t).selected||{};if(n.selected=r,B(i,function(t,e){var n=this.getSelectedMapKey(t);r.hasOwnProperty(n)||(r[n]=!0)},this),"single"===n.selectedMode){var o=!1;B(i,function(t,e){var n=this.getSelectedMapKey(t);r[n]&&(o?r[n]=!1:o=!0)},this)}},e.prototype.getItemSymbol=function(){return this.get("itemSymbol")},e.prototype.getSelectedMapKey=function(t){return"categories"===this._mode?t.value+"":t.index+""},e.prototype.getPieceList=function(){return this._pieceList},e.prototype._determineMode=function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},e.prototype.setSelected=function(t){this.option.selected=C(t)},e.prototype.getValueState=function(t){var e=ZR.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[],n=this._pieceList;return this.eachTargetSeries(function(i){var r=[],o=i.getData();o.each(this.getDataDimensionIndex(o),function(e,i){ZR.findPieceIndex(e,n)===t&&r.push(i)},this),e.push({seriesId:i.id,dataIndex:r})},this),e},e.prototype.getRepresentValue=function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var n=t.interval||[];e=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return e},e.prototype.getVisualMeta=function(t){if(!this.isCategory()){var e=[],n=["",""],i=this,r=this._pieceList.slice();if(r.length){var o=r[0].interval[0];o!==-1/0&&r.unshift({interval:[-1/0,o]}),(o=r[r.length-1].interval[1])!==1/0&&r.push({interval:[o,1/0]})}else r.push({interval:[-1/0,1/0]});var a=-1/0;return B(r,function(t){var e=t.interval;e&&(e[0]>a&&s([a,e[0]],"outOfRange"),s(e.slice()),a=e[1])},this),{stops:e,outerColors:n}}function s(r,o){var a=i.getRepresentValue({interval:r});o||(o=i.getValueState(a));var s=t(a,o);r[0]===-1/0?n[0]=s:r[1]===1/0?n[1]=s:e.push({value:r[0],color:s},{value:r[1],color:s})}},e.type="visualMap.piecewise",e.defaultOption=Op(ij.defaultOption,{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieces:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0}),e}(ij),kj={splitNumber:function(t){var e=this.option,n=Math.min(e.precision,20),i=this.getExtent(),r=e.splitNumber;r=Math.max(parseInt(r,10),1),e.splitNumber=r;for(var o=(i[1]-i[0])/r;+o.toFixed(n)!==o&&n<5;)n++;e.precision=n,o=+o.toFixed(n),e.minOpen&&t.push({interval:[-1/0,i[0]],close:[0,0]});for(var a=0,s=i[0];a","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,n)},this)}};function Lj(t,e){var n=t.inverse;("vertical"===t.orient?!n:n)&&e.reverse()}var Pj=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.doRender=function(){var t=this.group;t.removeAll();var e=this.visualMapModel,n=e.get("textGap"),i=e.textStyleModel,r=this._getItemAlign(),o=e.itemSize,a=this._getViewData(),s=a.endsText,l=ot(e.get("showLabel",!0),!s),u=!e.get("selectedMode");s&&this._renderEndsText(t,s[0],o,l,r),B(a.viewPieceList,function(a){var s=a.piece,c=new vo;c.onclick=U(this._onItemClick,this,s),this._enableHoverLink(c,a.indexInModelPieceList);var h=e.getRepresentValue(s);if(this._createItemSymbol(c,h,[0,0,o[0],o[1]],u),l){var d=this.visualMapModel.getValueState(h),p=i.get("align")||r;c.add(new du({style:sp(i,{x:"right"===p?-n:o[0]+n,y:o[1]/2,text:s.text,verticalAlign:i.get("verticalAlign")||"middle",align:p,opacity:at(i.get("opacity"),"outOfRange"===d?.5:1)}),silent:u}))}t.add(c)},this),s&&this._renderEndsText(t,s[1],o,l,r),qf(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},e.prototype._enableHoverLink=function(t,e){var n=this;t.on("mouseover",function(){return i("highlight")}).on("mouseout",function(){return i("downplay")});var i=function(t){var i=n.visualMapModel;i.option.hoverLink&&n.api.dispatchAction({type:t,batch:cj(i.findTargetDataIndices(e),i)})}},e.prototype._getItemAlign=function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return uj(t,this.api,t.itemSize);var n=e.align;return n&&"auto"!==n||(n="left"),n},e.prototype._renderEndsText=function(t,e,n,i,r){if(e){var o=new vo,a=this.visualMapModel.textStyleModel;o.add(new du({style:sp(a,{x:i?"right"===r?n[0]:0:n[0]/2,y:n[1]/2,verticalAlign:"middle",align:i?r:"center",text:e})})),t.add(o)}},e.prototype._getViewData=function(){var t=this.visualMapModel,e=V(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),n=t.get("text"),i=t.get("orient"),r=t.get("inverse");return("horizontal"===i?r:!r)?e.reverse():n&&(n=n.slice().reverse()),{viewPieceList:e,endsText:n}},e.prototype._createItemSymbol=function(t,e,n,i){var r=xx(this.getControllerVisual(e,"symbol"),n[0],n[1],n[2],n[3],this.getControllerVisual(e,"color"));r.silent=i,t.add(r)},e.prototype._onItemClick=function(t){var e=this.visualMapModel,n=e.option,i=n.selectedMode;if(i){var r=C(n.selected),o=e.getSelectedMapKey(t);"single"===i||!0===i?(r[o]=!0,B(r,function(t,e){r[e]=e===o})):r[o]=!r[o],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:r})}},e.type="visualMap.piecewise",e}(sj);function Oj(t){t.registerComponentModel(Aj),t.registerComponentView(Pj),Cj(t)}var Rj=function(){function t(t){this._thumbnailModel=t}return t.prototype.reset=function(t){this._renderVersion=t.getECUpdateCycleVersion()},t.prototype.renderContent=function(t){var e=t.api.getViewOfComponentModel(this._thumbnailModel);e&&(t.group.silent=!0,e.renderContent({group:t.group,targetTrans:t.targetTrans,z2Range:jd(t.group),roamType:t.roamType,viewportRect:t.viewportRect,renderVersion:this._renderVersion}))},t.prototype.updateWindow=function(t,e){var n=e.getViewOfComponentModel(this._thumbnailModel);n&&n.updateWindow({targetTrans:t,renderVersion:this._renderVersion})},t}(),Nj=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.preventAutoZ=!0,n}return n(e,t),e.prototype.optionUpdated=function(t,e){this._updateBridge()},e.prototype._updateBridge=function(){var t=this._birdge=this._birdge||new Rj(this);(this._target=null,this.ecModel.eachSeries(function(t){dE(t,null)}),this.shouldShow())&&dE(this.getTarget().baseMapProvider,t)},e.prototype.shouldShow=function(){return this.getShallow("show",!0)},e.prototype.getBridge=function(){return this._birdge},e.prototype.getTarget=function(){if(this._target)return this._target;var t=this.getReferringComponents("series",{useDefault:!1,enableAll:!1,enableNone:!1}).models[0];return t?"graph"!==t.subType&&(t=null):t=this.ecModel.queryComponents({mainType:"series",subType:"graph"})[0],this._target={baseMapProvider:t},this._target},e.type="thumbnail",e.layoutMode="box",e.dependencies=["series","geo"],e.defaultOption={show:!0,right:1,bottom:1,height:"25%",width:"25%",itemStyle:{borderColor:ug.color.border,borderWidth:2},windowStyle:{borderWidth:1,color:ug.color.neutral30,borderColor:ug.color.neutral40,opacity:.3},z:10},e}(lg),Ej=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){if(this._api=n,this._model=t,this._coordSys||(this._coordSys=new nP),this._isEnabled()){this._renderVersion=n.getECUpdateCycleVersion();var i=this.group;i.removeAll();var r=t.getModel("itemStyle"),o=r.getItemStyle();null==o.fill&&(o.fill=e.get("backgroundColor")||ug.color.neutral00);var a=eg(t,n).refContainer,s=Jf(Kf(t,!0),a),l=o.lineWidth||0,u=this._contentRect=zd(s.clone(),l/2,!0,!0),c=new vo;i.add(c),c.setClipPath(new lu({shape:u.plain()}));var h=this._targetGroup=new vo;c.add(h);var d=s.plain();d.r=r.getShallow("borderRadius",!0),i.add(this._bgRect=new lu({style:o,shape:d,silent:!1,cursor:"grab"}));var p=t.getModel("windowStyle"),f=p.getShallow("borderRadius",!0);c.add(this._windowRect=new lu({shape:{x:0,y:0,width:0,height:0,r:f},style:p.getItemStyle(),silent:!1,cursor:"grab"})),this._dealRenderContent(),this._dealUpdateWindow(),Bj(t,this)}else this._clear()},e.prototype.renderContent=function(t){this._bridgeRendered=t,this._isEnabled()&&(this._dealRenderContent(),this._dealUpdateWindow(),Bj(this._model,this))},e.prototype._dealRenderContent=function(){var t=this._bridgeRendered;if(t&&t.renderVersion===this._renderVersion){var e=this._targetGroup,n=this._coordSys,i=this._contentRect;if(e.removeAll(),t){var r=t.group,o=r.getBoundingRect();e.add(r),this._bgRect.z2=t.z2Range.min-10,pP(n,o.x,o.y,o.width,o.height);var a=Jf({left:"center",top:"center",aspect:o.width/o.height},i);fP(n,a.x,a.y,a.width,a.height),lP(r,n,0),r.dirty(),this._windowRect.z2=t.z2Range.max+10,this._resetRoamController(t.roamType)}}},e.prototype.updateWindow=function(t){var e=this._bridgeRendered;e&&e.renderVersion===t.renderVersion&&(e.targetTrans=t.targetTrans),this._isEnabled()&&this._dealUpdateWindow()},e.prototype._dealUpdateWindow=function(){var t=this._bridgeRendered;if(t&&t.renderVersion===this._renderVersion){var e=Ae([],t.targetTrans),n=Ie([],rP(null,this._coordSys),e);this._transThisToTarget=Ae([],n);var i=t.viewportRect;(i=i?i.clone():new Xe(0,0,this._api.getWidth(),this._api.getHeight())).applyTransform(n);var r=this._windowRect,o=r.shape.r;r.setShape(P({r:o},i))}},e.prototype._resetRoamController=function(t){var e=this,n=this._api,i=this._roamController;i||(i=this._roamController=new uL(n.getZr())),t&&this._isEnabled()?(i.enable(t,{api:n,zInfo:{component:this._model},triggerInfo:{roamTrigger:null,isInSelf:function(t,n,i){return e._contentRect.contain(n,i)}}}),i.off("pan").off("zoom").on("pan",U(this._onPan,this)).on("zoom",U(this._onZoom,this))):i.disable()},e.prototype._onPan=function(t){var e=this._transThisToTarget;if(this._isEnabled()&&e){var n=Yt([],[t.oldX,t.oldY],e),i=Yt([],[t.oldX-t.dx,t.oldY-t.dy],e);this._api.dispatchAction(zj(this._model.getTarget().baseMapProvider,{dx:i[0]-n[0],dy:i[1]-n[1]}))}},e.prototype._onZoom=function(t){var e=this._transThisToTarget;if(this._isEnabled()&&e){var n=Yt([],[t.originX,t.originY],e);this._api.dispatchAction(zj(this._model.getTarget().baseMapProvider,{zoom:1/t.scale,originX:n[0],originY:n[1]}))}},e.prototype._isEnabled=function(){var t=this._model;return!(!t||!t.shouldShow())&&!!t.getTarget().baseMapProvider},e.prototype._clear=function(){this.group.removeAll(),this._bridgeRendered=null,this._roamController&&this._roamController.disable()},e.prototype.remove=function(){this._clear()},e.prototype.dispose=function(){this._clear()},e.type="thumbnail",e}(Ky);function zj(t,e){var n={type:"series"===t.mainType?t.subType+"Roam":t.mainType+"Roam"};return n[t.mainType+"Id"]=t.id,k(n,e),n}function Bj(t,e){var n=Zd(t);qd(e.group,n.z,n.zlevel)}var Vj={label:{enabled:!0},decal:{show:!1}},Gj=Pa(),Fj=Pa(),Hj=as(function(t,e){var n=t.getModel("aria");if(!n.get("enabled"))return;var i=Fj(t).scope||(Fj(t).scope={}),r=C(Vj);function o(t,e){if(!j(t))return t;var n=t;return B(e,function(t,e){n=n.replace(new RegExp("\\{\\s*"+e+"\\s*\\}","g"),t)}),n}D(r.label,t.getLocaleModel().get("aria"),!1),D(n.option,r,!1),function(){if(n.getModel("decal").get("show")){var e=mt();t.eachSeries(function(t){t.isColorBySeries()||(Gj(t).scope=e.get(t.type)||e.set(t.type,{}))}),t.eachSeries(function(e){if(Z(e.enableAriaDecal))e.enableAriaDecal();else{var n=e.getData();if(e.isColorBySeries()){var r=Rg(e.ecModel,e.name,i,t.getSeriesCount()),o=n.getVisual("decal");n.setVisual("decal",c(o,r))}else{var a=e.getRawData(),s={},l=Gj(e).scope;n.each(function(t){var e=n.getRawIndex(t);s[e]=t});var u=a.count();a.each(function(t){var i=s[t],r=a.getName(t)||t+"",o=Rg(e.ecModel,r,l,u),h=n.getItemVisual(i,"decal");n.setItemVisual(i,"decal",c(h,o))})}}function c(t,e){var n=t?k(k({},e),t):e;return n.dirty=!0,n}})}}(),function(){var i=e.getZr().dom;if(i){var r=t.getLocaleModel().get("aria"),a=n.getModel("label");if(a.option=P(a.option,r),a.get("enabled"))if(i.setAttribute("role","img"),a.get("description"))i.setAttribute("aria-label",a.get("description"));else{var s,l=t.getSeriesCount(),u=a.get(["data","maxCount"])||10,c=a.get(["series","maxCount"])||10,h=Math.min(l,c);if(!(l<1)){var d=function(){var e=t.get("title");return e&&e.length&&(e=e[0]),e&&e.text}();s=d?o(a.get(["general","withTitle"]),{title:d}):a.get(["general","withoutTitle"]);var p=[];s+=o(l>1?a.get(["series","multiple","prefix"]):a.get(["series","single","prefix"]),{seriesCount:l}),t.eachSeries(function(e,n){if(n1?a.get(["series","multiple",r]):a.get(["series","single",r]),{seriesId:e.seriesIndex,seriesName:e.get("name"),seriesType:(_=e.subType,b=t.getLocaleModel().get(["series","typeNames"]),b[_]||b.chart)});var s=e.getData();s.count()>u?i+=o(a.get(["data","partialData"]),{displayCnt:u}):i+=a.get(["data","allData"]);for(var c=a.get(["data","separator","middle"]),d=a.get(["data","separator","end"]),f=a.get(["data","excludeDimensionId"]),g=[],v=0;v":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},Yj=function(){function t(t){if(null==(this._condVal=j(t)?new RegExp(t):it(t)?t:null)){var e="";0,va(e)}}return t.prototype.evaluate=function(t){var e=typeof t;return j(e)?this._condVal.test(t):!!K(e)&&this._condVal.test(t+"")},t}(),Xj=function(){function t(){}return t.prototype.evaluate=function(){return this.value},t}(),Zj=function(){function t(){}return t.prototype.evaluate=function(){for(var t=this.children,e=0;e2&&l.push(e),e=[t,n]}function f(t,n,i,r){aq(t,i)&&aq(n,r)||e.push(t,n,i,r,i,r)}function g(t,n,i,r,o,a){var s=Math.abs(n-t),l=4*Math.tan(s/4)/3,u=nM:C2&&l.push(e),l}function lq(t,e,n,i,r,o,a,s,l,u){if(aq(t,n)&&aq(e,i)&&aq(r,a)&&aq(o,s))l.push(a,s);else{var c=2/u,h=c*c,d=a-t,p=s-e,f=Math.sqrt(d*d+p*p);d/=f,p/=f;var g=n-t,v=i-e,y=r-a,m=o-s,x=g*g+v*v,_=y*y+m*m;if(x=0&&_-w*w=0)l.push(a,s);else{var S=[],M=[];Hn(t,n,r,a,.5,S),Hn(e,i,o,s,.5,M),lq(S[0],M[0],S[1],M[1],S[2],M[2],S[3],M[3],l,u),lq(S[4],M[4],S[5],M[5],S[6],M[6],S[7],M[7],l,u)}}}}function uq(t,e,n){var i=t[e],r=t[1-e],o=Math.abs(i/r),a=Math.ceil(Math.sqrt(o*n)),s=Math.floor(n/a);0===s&&(s=1,a=n);for(var l=[],u=0;u0)for(u=0;uMath.abs(u),h=uq([l,u],c?0:1,e),d=(c?s:u)/h.length,p=0;p1?null:new Pe(p*l+t,p*u+e)}function pq(t,e,n){var i=new Pe;Pe.sub(i,n,e),i.normalize();var r=new Pe;return Pe.sub(r,t,e),r.dot(i)}function fq(t,e){var n=t[t.length-1];n&&n[0]===e[0]&&n[1]===e[1]||t.push(e)}function gq(t){var e=t.points,n=[],i=[];rl(e,n,i);var r=new Xe(n[0],n[1],i[0]-n[0],i[1]-n[1]),o=r.width,a=r.height,s=r.x,l=r.y,u=new Pe,c=new Pe;return o>a?(u.x=c.x=s+o/2,u.y=l,c.y=l+a):(u.y=c.y=l+a/2,u.x=s,c.x=s+o),function(t,e,n){for(var i=t.length,r=[],o=0;or,a=uq([i,r],o?0:1,e),s=o?"width":"height",l=o?"height":"width",u=o?"x":"y",c=o?"y":"x",h=t[s]/a.length,d=0;d0)for(var b=i/n,w=-i/2;w<=i/2;w+=b){var S=Math.sin(w),M=Math.cos(w),I=0;for(x=0;x0;l/=2){var u=0,c=0;(t&l)>0&&(u=1),(e&l)>0&&(c=1),s+=l*l*(3*u^c),0===c&&(1===u&&(t=l-1-t,e=l-1-e),a=t,t=e,e=a)}return s}function Pq(t){var e=1/0,n=1/0,i=-1/0,r=-1/0,o=V(t,function(t){var o=t.getBoundingRect(),a=t.getComputedTransform(),s=o.x+o.width/2+(a?a[4]:0),l=o.y+o.height/2+(a?a[5]:0);return e=Math.min(s,e),n=Math.min(l,n),i=Math.max(s,i),r=Math.max(l,r),[s,l]});return V(o,function(o,a){return{cp:o,z:Lq(o[0],o[1],e,n,i,r),path:t[a]}}).sort(function(t,e){return t.z-e.z}).map(function(t){return t.path})}function Oq(t){return mq(t.path,t.count)}function Rq(t){return X(t[0])}function Nq(t,e){for(var n=[],i=t.length,r=0;r=0;r--)if(!n[r].many.length){var l=n[s].many;if(l.length<=1){if(!s)return n;s=0}o=l.length;var u=Math.ceil(o/2);n[r].many=l.slice(u,o),n[s].many=l.slice(0,u),s++}return n}var Eq={clone:function(t){for(var e=[],n=1-Math.pow(1-t.path.style.opacity,1/t.count),i=0;i0){var s,l,u=i.getModel("universalTransition").get("delay"),c=k({setToFinal:!0},a);Rq(t)&&(s=t,l=e),Rq(e)&&(s=e,l=t);for(var h=s?s===t:t.length>e.length,d=s?Nq(l,s):Nq(h?e:t,[h?t:e]),p=0,f=0;f1e4))for(var r=n.getIndices(),o=0;o0&&i.group.traverse(function(t){t instanceof Kl&&!t.animators.length&&t.animateFrom({style:{opacity:0}},r)})})}function Zq(t){var e=t.getModel("universalTransition").get("seriesKey");return e||t.id}function jq(t){return X(t)?t.sort().join(","):t}function qq(t){if(t.hostModel)return t.hostModel.getModel("universalTransition").get("divideShape")}function Kq(t,e){for(var n=0;na.vmin?n+=a.vmin-i+(t-a.vmin)/(a.vmax-a.vmin)*a.gapReal:n+=t-i,i=a.vmax,r=!1;break}n+=a.vmin-i+a.gapReal,i=a.vmax}return r&&(n+=t-i),n},transformOut:function(t,e){if(e&&2===e.depth)return t;for(var n=Qq,i=tK,r=!0,o=0,a=0;al?s.vmin+(t-l)/(u-l)*(s.vmax-s.vmin):i+t-n,i=s.vmax,r=!1;break}n=u,i=s.vmax}return r&&(o=i+t-n),o}},t}();function Jq(t,e){return new $q(t,e)}var Qq=0,tK=0;function eK(t,e,n,i,r,o){"no"!==t&&B(n,function(n){var a=iK(n,o);if(a)for(var s=e.length-1;s>=0;s--){var l=e[s],u=i(l),c=3*r/4;u>a.vmin-c&&ue[0]&&n=0&&t<.99999})(s)||(s=0),r.gapParsed.type="tpPrct",r.gapParsed.val=s,o=!0}}if(!o){var l=e.parse(t.gap);(!isFinite(l)||l<0)&&(l=0),r.gapParsed.type="tpAbs",r.gapParsed.val=l}}if(r.vmin===r.vmax&&(r.gapParsed.type="tpAbs",r.gapParsed.val=0),n&&n.noNegative&&B(["vmin","vmax"],function(t){r[t]<0&&(r[t]=0)}),r.vmin>r.vmax){var u=r.vmax;r.vmax=r.vmin,r.vmin=u}i.push(r)}}),i.sort(function(t,e){return t.vmin-e.vmin});var r=-1/0;return B(i,function(t,e){r>t.vmin&&(i[e]=null),r=t.vmax}),{breaks:F(i,function(t){return!!t})}}function oK(t,e){return aK(e)===aK(t)}function aK(t){return t.start+"_\0_"+t.end}function sK(t,e,n){var i=[];B(t,function(t,n){var r=e(t);r&&"vmin"===r.type&&i.push([n])}),B(t,function(n,r){var o=e(n);if(o&&"vmax"===o.type){var a=H(i,function(n){return oK(e(t[n[0]]).parsedBreak.breakOption,o.parsedBreak.breakOption)});a&&a.push(r)}});var r=[];return B(i,function(e){2===e.length&&r.push(n?e:[t[e[0]],t[e[1]]])}),r}function lK(t,e,n,i){if(e.break){var r=e.break.parsedBreak,o=H(n,function(t){return oK(t.breakOption,e.break.parsedBreak.breakOption)}),a={lookup:i,depth:2},s={vmin:t.transformOut(r.vmin,a),vmax:t.transformOut(r.vmax,a),breakOption:r.breakOption,gapParsed:C(o.gapParsed),gapReal:r.gapReal};return{tickVal:s[e.break.type],vBreak:{type:e.break.type,parsedBreak:s}}}}function uK(t,e,n,i,r){r.original=rK(t,e,n);var o=r.transformed=rK(t,e,n),a=r.lookup;o.breaks=V(o.breaks,function(t,n){var r={depth:2},o=e.transformIn(t.vmin,r),s=e.transformIn(t.vmax,r),l={type:t.gapParsed.type,val:"tpAbs"===t.gapParsed.type?e.transformIn(t.vmin+t.gapParsed.val,r)-o:t.gapParsed.val};return a.from[i+n]=o,a.to[i+n]=t.vmin,a.from[i+n+1]=s,a.to[i+n+1]=t.vmax,{vmin:o,vmax:s,gapParsed:l,gapReal:t.gapReal,breakOption:t.breakOption}})}var cK={vmin:"start",vmax:"end"};function hK(t,e){return e&&((t=t||{}).break={type:cK[e.type],start:e.parsedBreak.vmin,end:e.parsedBreak.vmax}),t}function dK(){var t;t={createBreakScaleMapper:Jq,pruneTicksByBreak:eK,addBreaksToTicks:nK,parseAxisBreakOption:rK,identifyAxisBreak:oK,serializeAxisBreakIdentifier:aK,retrieveAxisBreakPairs:sK,getTicksBreakOutwardTransform:lK,parseAxisBreakOptionInwardTransform:uK,makeAxisLabelFormatterParamBreak:hK},Hp||(Hp=t)}var pK=Pa();function fK(t,e,n,i,r){var o=n.axis;if(!o.scale.isBlank()&&Wp()){var a=Wp().retrieveAxisBreakPairs(o.scale.getTicks({breakTicks:"only_break"}),function(t){return t.break},!1);if(a.length){var s=n.getModel("breakArea"),l=s.get("zigzagAmplitude"),u=s.get("zigzagMinSpan"),c=s.get("zigzagMaxSpan");u=Math.max(2,u||0),c=Math.max(u,c||0);var h=s.get("expandOnClick"),d=s.get("zigzagZ"),p=s.getModel("itemStyle").getItemStyle(),f=p.stroke,g=p.lineWidth,v=p.lineDash,y=p.fill,m=new vo({ignoreModelZ:!0}),x=o.isHorizontal(),_=pK(e).visualList||(pK(e).visualList=[]);B(_,function(t){return t.shouldRemove=!0});for(var b=function(t){var e=a[t][0].break.parsedBreak,s=[];s[0]=o.toGlobalCoord(o.dataToCoord(e.vmin,!0)),s[1]=o.toGlobalCoord(o.dataToCoord(e.vmax,!0)),s[1]=x;C&&(M=x);var D=[],A=[];D[h]=n,A[h]=r,T||C||(D[h]+=S?-l:l,A[h]-=S?l:-l),D[m]=M,A[m]=M,b.push(D),w.push(A);var k=void 0;if(I=0;e--)t[e].shouldRemove&&t.splice(e,1)}(_)}}}function gK(t,e,n,i){var r=t.axis,o=n.transform;ct(i.style);var a=r.getExtent();r.inverse&&(a=a.slice()).reverse();var s=V(Wp().retrieveAxisBreakPairs(r.scale.getTicks({breakTicks:"only_break"}),function(t){return t.break},!1),function(t){var e=t[0].break.parsedBreak,n=[r.dataToCoord(e.vmin,!0),r.dataToCoord(e.vmax,!0)];return n[0]>n[1]&&n.reverse(),{coordPair:n,brkId:Wp().serializeAxisBreakIdentifier(e.breakOption)}});s.sort(function(t,e){return t.coordPair[0]-e.coordPair[0]});for(var l=a[0],u=null,c=0;c=0?s[0].width:s[1].width)+u.x)/2-l.x,h=Math.min(c,c-u.x),d=Math.max(c,c-u.x);a=(c-(d<0?d:h>0?h:0))/u.x}var p=new Pe,f=new Pe;Pe.scale(p,i,-a),Pe.scale(f,i,1-a),eI(n[0],p),eI(n[1],f)}}function g(t){var e=n[0].localRect,i=new Pe(e[pd[t]]*o[0][0],e[pd[t]]*o[0][1]);return Math.abs(i.y)<1e-5}}function yK(t,e){var n={breaks:[]};return B(e.breaks,function(i){if(i){var r=H(t.get("breaks",!0),function(t){return Wp().identifyAxisBreak(t,i)});if(r){var o=e.type,a={isExpanded:!!r.isExpanded};r.isExpanded=o===ZC||o!==jC&&(o===qC?!r.isExpanded:r.isExpanded),n.breaks.push({start:r.start,end:r.end,isExpanded:!!r.isExpanded,old:a})}}}),n}function mK(){var t;t={adjustBreakLabelPair:vK,buildAxisBreakLine:gK,rectCoordBuildBreakAxis:fK,updateModelAxisBreak:yK},YC||(YC=t)}function xK(t,e){B(t,function(t){if(!t.model.get(["axisLabel","inside"])){var n=function(t){var e,n,i=t.model,r=t.scale;if(!i.get(["axisLabel","show"])||r.isBlank())return;var o=r.getExtent();n=r instanceof Mw?r.count():(e=r.getTicks()).length;var a,s=t.getLabelModel(),l=Zw(t),u=1;n>40&&(u=Math.ceil(n/40));for(var c=0;c=0&&r.push({dataGroupId:e.oldDataGroupIds[n],data:e.oldData[n],divide:qq(e.oldData[n]),groupIdDim:t.dimension})}),B(_a(t.to),function(t){var i=Kq(n.updatedSeries,t);if(i>=0){var r=n.updatedSeries[i].getData();o.push({dataGroupId:e.oldDataGroupIds[i],data:r,divide:qq(r),groupIdDim:t.dimension})}}),r.length>0&&o.length>0&&Xq(r,o,i)}(t,i,n,e)});else{var o=function(t,e){var n=mt(),i=mt(),r=mt();return B(t.oldSeries,function(e,n){var o=t.oldDataGroupIds[n],a=t.oldData[n],s=Zq(e),l=jq(s);i.set(l,{dataGroupId:o,data:a}),X(s)&&B(s,function(t){r.set(t,{key:l,dataGroupId:o,data:a})})}),B(e.updatedSeries,function(t){if(t.isUniversalTransitionEnabled()&&t.isAnimationEnabled()){var e=t.get("dataGroupId"),o=t.getData(),a=Zq(t),s=jq(a),l=i.get(s);if(l)n.set(s,{oldSeries:[{dataGroupId:l.dataGroupId,divide:qq(l.data),data:l.data}],newSeries:[{dataGroupId:e,divide:qq(o),data:o}]});else if(X(a)){var u=[];B(a,function(t){var e=i.get(t);e.data&&u.push({dataGroupId:e.dataGroupId,divide:qq(e.data),data:e.data})}),u.length&&n.set(s,{oldSeries:u,newSeries:[{dataGroupId:e,data:o,divide:qq(o)}]})}else{var c=r.get(a);if(c){var h=n.get(c.key);h||(h={oldSeries:[{dataGroupId:c.dataGroupId,data:c.data,divide:qq(c.data)}],newSeries:[]},n.set(c.key,h)),h.newSeries.push({dataGroupId:e,data:o,divide:qq(o)})}}}}),n}(i,n);B(o.keys(),function(t){var n=o.get(t);Xq(n.oldSeries,n.newSeries,e)})}B(n.updatedSeries,function(t){t[Fy]&&(t[Fy]=!1)})}for(var a=t.getSeries(),s=i.oldSeries=[],l=i.oldDataGroupIds=[],u=i.oldData=[],c=0;c Date: Fri, 9 Oct 2026 14:01:33 -0700 Subject: [PATCH 14/39] fix(app): protect route edits and simplify model loading Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-menubar/src/controller.rs | 60 ++++++-- crates/switchyard-menubar/src/models.rs | 132 +++--------------- crates/switchyard-menubar/src/server.rs | 19 +-- .../switchyard-menubar/src/server_config.rs | 10 +- crates/switchyard-menubar/src/summary.rs | 1 + crates/switchyard-menubar/src/tui.rs | 32 ++++- crates/switchyard-menubar/ui/analytics.js | 8 +- tests/test_linux_install.py | 21 +-- tests/test_macos_install.py | 84 +++-------- 9 files changed, 140 insertions(+), 227 deletions(-) diff --git a/crates/switchyard-menubar/src/controller.rs b/crates/switchyard-menubar/src/controller.rs index c3fd9905ca..bd1686d26c 100644 --- a/crates/switchyard-menubar/src/controller.rs +++ b/crates/switchyard-menubar/src/controller.rs @@ -165,7 +165,7 @@ impl Controller { routes.push(json!({"key": route.key, "id": route.id, "kind": route.kind, "label": format!("{} · {} · {}", route.id, route.kind, models), "choices": choices, "tiers": config.algorithm(&route.key).map(|a| config.roles(&route.key, a).iter().map(|r| r.tier.map(|t| format!("{t:?}"))).collect::>()), - "editable": true, "generated": config.generated_by("routes", &route.key)})); + "editable": config.algorithm(&route.key).is_some(), "generated": config.generated_by("routes", &route.key)})); } clients = config.clients().iter().map(|c| json!({"name":c.name,"host":c.host(),"models":config.models_on(&c.name),"unlisted":models::unlisted(c),"accepts_key":cfg!(target_os = "macos") && !models::unlisted(c) && (c.forward_auth || c.api_key_env.is_some()),"note":models::missing_env(c).map(models::missing_env_note)})).collect(); } @@ -201,6 +201,9 @@ impl Controller { self.check_generation(generation)?; let config = self.routes()?; current_route(&config, &route, None)?; + config + .algorithm(&route) + .ok_or("This route must be edited in the server config file.")?; let algorithm = algorithm_by_id(&algorithm)?; let roles = config.roles(&route, algorithm); let data = json!({"roles": roles.iter().map(|r|json!({"label":r.label,"hint":r.hint,"tier":r.tier.map(|t|format!("{t:?}"))})).collect::>(),"choices":config.choices(&route)}); @@ -218,6 +221,9 @@ impl Controller { self.check_generation(generation)?; let config = self.routes()?; current_route(&config, &route, None)?; + config + .algorithm(&route) + .ok_or("This route must be edited in the server config file.")?; let algorithm = algorithm_by_id(&algorithm)?; server::apply(&self.config, &route, algorithm, &choices).map(Reply::message) } @@ -254,14 +260,8 @@ impl Controller { models::save_key(&client.base_url, key)?; } let cache = self.settings.with_file_name(models::CACHE_FILE); - let result = models::load( - &cache, - std::slice::from_ref(&client), - refresh || key.is_some(), - key.as_deref().map(|key| (client.base_url.as_str(), key)), - &|_| {}, - ); - let loaded = result.into_iter().next().ok_or("No model list returned.")?; + let loaded = + models::load(&cache, &client, refresh || key.is_some(), key.as_deref()); if let Some(key) = &key { match &loaded.error { None | Some(models::ListError::NotCached(_)) => { @@ -818,6 +818,48 @@ mod tests { } } + #[test] + fn unsupported_routes_are_read_only_before_any_write() { + let dir = tempfile::tempdir().expect("directory"); + let config = dir.path().join("server.toml"); + let settings = dir.path().join("app.toml"); + std::fs::write( + &settings, + format!("config_file={config:?}\nserver_url='http://127.0.0.1:0'"), + ) + .expect("settings"); + let mut controller = Controller::new(Config::load(&settings).expect("settings"), settings); + // These fixtures use valid server algorithms that the app cannot edit. + for fields in [ + "type='noop'", + "type='prefill_router'\ntargets=['answer']\ncheckpoint='router.pt'", + "type='llm_classifier'\nmode='custom'\nmodels={judge=['judge'],any=['answer']}\ndefault_target='any'\nprompt='Select a target.'\nresponse_schema='{\"type\":\"object\"}'\npolicy={type='target_selector',selector='/target'}", + ] { + let _: switchyard_runner::AlgorithmSpec = + toml::from_str(fields).expect("server route schema"); + let original = format!("[routes.r]\nid='public'\n{fields}\n"); + std::fs::write(&config, &original).expect("config"); + assert_eq!( + controller.snapshot().expect("snapshot")["routes"][0]["editable"], + false + ); + for kind in ["editor", "apply"] { + let mut raw = + json!({"kind":kind,"generation":0,"route":"r","algorithm":"passthrough"}); + if kind == "apply" { + raw["choices"] = json!([]); + } + let action = serde_json::from_value(raw).expect("action"); + assert_eq!( + controller.dispatch(action).err().expect("read only"), + "This route must be edited in the server config file." + ); + } + assert_eq!(std::fs::read_to_string(&config).expect("config"), original); + assert_eq!(std::fs::read_dir(dir.path()).expect("files").count(), 2); + } + } + #[test] fn rejected_install_has_no_writes() { let dir = tempfile::tempdir().expect("directory"); diff --git a/crates/switchyard-menubar/src/models.rs b/crates/switchyard-menubar/src/models.rs index 7a0a572d6a..3a966b8a69 100644 --- a/crates/switchyard-menubar/src/models.rs +++ b/crates/switchyard-menubar/src/models.rs @@ -13,7 +13,7 @@ //! a list from the cache file until the user refreshes it, so it fetches a //! list on its own only when the file does not have it. -use std::collections::{BTreeMap, HashMap}; +use std::collections::BTreeMap; use std::io::Write; use std::path::{Path, PathBuf}; use std::process::{Command, Stdio}; @@ -141,75 +141,11 @@ pub fn missing_env(client: &Client) -> Option<&str> { .filter(|_| env_key(client).is_none()) } -/// SavedKeys stores the Keychain's answer for each `base_url`. The threads of one [`load`] -/// share it. -type SavedKeys = Mutex, String>>>; - -/// This function returns the model list at each URL that `clients` use, in the order the -/// URLs first appear. Clients whose models share a URL share one list and -/// one request. -/// -/// Each URL loads on its own thread, so a slow URL does not hold back the -/// others. `loaded` gets each URL's result as soon as it is ready. -/// -/// Without `refresh`, a list in the cache file comes back without a -/// request, and only a URL with no cached list is fetched. With `refresh`, -/// every URL is fetched. A fetched list replaces the one in the cache file -/// unless the file holds a newer list for that URL. When the file cannot be -/// written, the fetched list still comes back, with -/// [`ListError::NotCached`], and the file keeps its old list. When a fetch -/// fails, the cached list comes back with the error. -/// -/// `typed_key` contains the selected `base_url` and the key the user entered. -/// Clients with that exact URL use the key instead of their environment variable -/// or the Keychain when they require authentication. Other URLs keep their own credentials. -pub fn load( - cache: &Path, - clients: &[Client], - refresh: bool, - typed_key: Option<(&str, &str)>, - loaded: &(dyn Fn(&Loaded) + Sync), -) -> Vec { - let cached = read_cache(cache); - let saved_keys = SavedKeys::default(); - std::thread::scope(|scope| { - let workers: Vec<_> = by_url(clients) - .into_iter() - .map(|(url, client)| { - let old = cached.get(&url).cloned(); - let saved_keys = &saved_keys; - scope.spawn(move || { - let typed_key = typed_key - .filter(|(base_url, _)| *base_url == client.base_url) - .map(|(_, key)| key); - let entry = load_url(cache, url, client, old, refresh, typed_key, saved_keys); - loaded(&entry); - entry - }) - }) - .collect(); - workers - .into_iter() - .map(|worker| { - worker - .join() - .unwrap_or_else(|panic| std::panic::resume_unwind(panic)) - }) - .collect() - }) -} - -/// This function loads the list at one URL: from the cache file, or fetched with the -/// client's key and then added to the cache file. -fn load_url( - cache: &Path, - url: String, - client: &Client, - old: Option, - refresh: bool, - typed_key: Option<&str>, - saved_keys: &SavedKeys, -) -> Loaded { +/// This function loads one endpoint's models and retains the cached list when refresh fails. +/// The selected endpoint alone receives the entered key. +pub fn load(cache: &Path, client: &Client, refresh: bool, typed_key: Option<&str>) -> Loaded { + let url = list_url(client); + let old = read_cache(cache).remove(&url); if unlisted(client) { // ChatGPT has no list to fetch, so nothing goes in the cache file. return Loaded { @@ -225,7 +161,7 @@ fn load_url( error: None, }; } - match key(client, typed_key, saved_keys).and_then(|key| list(client, key.as_deref())) { + match key(client, typed_key).and_then(|key| list(client, key.as_deref())) { Ok(models) => { let new = ModelList { models, @@ -346,21 +282,6 @@ fn models_url(format: &str, base_url: &str) -> String { format!("{path}{query}") } -/// This function pairs each models URL with the client whose settings fetch it: the first -/// client with that URL that sends a key, or else the first client with it. -fn by_url(clients: &[Client]) -> Vec<(String, &Client)> { - let mut urls: Vec<(String, &Client)> = Vec::new(); - for client in clients { - let url = list_url(client); - match urls.iter_mut().find(|(seen, _)| *seen == url) { - Some(entry) if !sends_key(entry.1) && sends_key(client) => entry.1 = client, - Some(_) => {} - None => urls.push((url, client)), - } - } - urls -} - /// This function returns whether the server sends this client a key. If it does, listing /// the client's models needs a key too. fn sends_key(client: &Client) -> bool { @@ -370,29 +291,15 @@ fn sends_key(client: &Client) -> bool { /// This function returns the key to list the client's models with, or `None` when the /// client needs no key or none is available. /// -/// The typed key comes first, then the client's `api_key_env` variable when -/// this process has it, then the Keychain item for the client's `base_url`. -/// `saved` stores each Keychain answer, and a thread holds its lock while -/// it reads the Keychain. So macOS asks at most once per `base_url` when it -/// needs the user's permission to hand over a key. -fn key( - client: &Client, - typed_key: Option<&str>, - saved: &SavedKeys, -) -> Result, ListError> { +/// The entered key takes precedence over the environment and the Keychain. +fn key(client: &Client, typed_key: Option<&str>) -> Result, ListError> { if !sends_key(client) { return Ok(None); } if let Some(key) = typed_key.map(str::to_string).or_else(|| env_key(client)) { return Ok(Some(key)); } - saved - .lock() - .unwrap_or_else(PoisonError::into_inner) - .entry(client.base_url.clone()) - .or_insert_with(|| saved_key(&client.base_url)) - .clone() - .map_err(ListError::Keychain) + saved_key(&client.base_url).map_err(ListError::Keychain) } fn env_key(client: &Client) -> Option { @@ -742,13 +649,18 @@ mod tests { ..client("public", "openai_chat", &unauthenticated.url) }, ]; - let loaded = load( - &dir.path().join(CACHE_FILE), - &clients, - true, - Some((&selected.url, "selected-secret")), - &|_| {}, - ); + let loaded: Vec<_> = clients + .iter() + .enumerate() + .map(|(index, client)| { + load( + &dir.path().join(CACHE_FILE), + client, + true, + (index == 0).then_some("selected-secret"), + ) + }) + .collect(); assert_eq!(loaded[0].error, None); assert!( !std::fs::read_to_string(dir.path().join(CACHE_FILE)) diff --git a/crates/switchyard-menubar/src/server.rs b/crates/switchyard-menubar/src/server.rs index 552ae5a86d..4d43b010ed 100644 --- a/crates/switchyard-menubar/src/server.rs +++ b/crates/switchyard-menubar/src/server.rs @@ -401,23 +401,10 @@ mod tests { assert_eq!(backups(dir.path()).len(), 1); assert_eq!(std::fs::read_to_string(&backup).expect("read"), "old"); assert_eq!(mode(&backup), 0o640, "the backup gets the same permissions"); - } - - #[test] - fn a_second_save_keeps_the_first_backup() { - let dir = tempfile::tempdir().expect("tempdir"); - let config = dir.path().join("composite.toml"); - std::fs::write(&config, "old").expect("write config"); - let binary = fake_server(dir.path(), "exit 0"); - - // Both saves usually fall in the same second, so their backups get - // the same timestamp. - save_checked(&binary, &config, "old", "new").expect("saved"); - save_checked(&binary, &config, "new", "newer").expect("saved"); - - let mut kept: Vec = backups(dir.path()) + save_checked(&binary, &config, "new", "newer").expect("saved again"); + let mut kept: Vec<_> = backups(dir.path()) .iter() - .map(|backup| std::fs::read_to_string(backup).expect("read")) + .map(|path| std::fs::read_to_string(path).expect("backup")) .collect(); kept.sort(); assert_eq!(kept, ["new", "old"]); diff --git a/crates/switchyard-menubar/src/server_config.rs b/crates/switchyard-menubar/src/server_config.rs index 3936674db7..626293f3b4 100644 --- a/crates/switchyard-menubar/src/server_config.rs +++ b/crates/switchyard-menubar/src/server_config.rs @@ -518,6 +518,9 @@ impl ServerConfig { if self.route(route).is_none() { return Err(format!("The config has no [routes.{route}] table.")); } + let current = self + .algorithm(route) + .ok_or("This route must be edited in the server config file.")?; let roles = self.roles(route, algorithm); if roles.len() != choices.len() { return Err(format!( @@ -543,11 +546,8 @@ impl ServerConfig { } } - let current = self.algorithm(route); - let same_type = current.is_some_and(|current| current.kind == algorithm.kind); - let old_roles = current - .map(|current| self.roles(route, current)) - .unwrap_or_default(); + let same_type = current.kind == algorithm.kind; + let old_roles = self.roles(route, current); // When the type changes, each new role starts from the old role with // the same tier, so a composite's capable target stays the capable one. let by_tier: Vec<(Option, &str)> = old_roles diff --git a/crates/switchyard-menubar/src/summary.rs b/crates/switchyard-menubar/src/summary.rs index 0edb6532ab..9ed42cfb8c 100644 --- a/crates/switchyard-menubar/src/summary.rs +++ b/crates/switchyard-menubar/src/summary.rs @@ -131,6 +131,7 @@ fn money(value: f64) -> String { } /// The tray ranks models by recorded tokens and combines models below the top three. +#[cfg(any(target_os = "macos", test))] pub fn tray_models(totals: &Totals) -> Vec { let mut models = totals.routed.clone(); for (model, overhead) in &totals.classifier { diff --git a/crates/switchyard-menubar/src/tui.rs b/crates/switchyard-menubar/src/tui.rs index ee1fc3d673..a395ae7105 100644 --- a/crates/switchyard-menubar/src/tui.rs +++ b/crates/switchyard-menubar/src/tui.rs @@ -266,7 +266,18 @@ impl View { } FormKind::RouteFilter => { self.route_filter = value(0); - self.move_route(false); + if !self + .routes() + .get(self.route) + .is_some_and(|r| self.matches_route(r)) + { + self.route = self + .routes() + .iter() + .position(|r| self.matches_route(r)) + .unwrap_or(0); + } + self.preview = None; self.scroll = 0; return Ok(()); } @@ -630,6 +641,25 @@ mod tests { } } + #[test] + fn route_search_preserves_matching_selection_and_selects_the_first_match() { + let dir = tempfile::tempdir().expect("directory"); + let mut controller = Controller::new(Config::default(), dir.path().join("app.toml")); + let mut view = view(); + view.route = 1; + for (filter, expected) in [("", 1), ("beta", 1), ("alpha", 0), ("missing", 0)] { + view.form( + "Search", + FormKind::RouteFilter, + vec![("Search".into(), filter.into())], + ); + view.submit(&mut controller).expect("search"); + assert_eq!(view.route, expected); + assert!(view.preview.is_none()); + } + assert!(view.route().is_err()); + } + #[test] // A mismatched confirmation must fail before controller dispatch can create files. fn unconfirmed_restore_leaves_files_untouched() { diff --git a/crates/switchyard-menubar/ui/analytics.js b/crates/switchyard-menubar/ui/analytics.js index d4a445ff25..aa14b96949 100644 --- a/crates/switchyard-menubar/ui/analytics.js +++ b/crates/switchyard-menubar/ui/analytics.js @@ -124,11 +124,13 @@ function renderDaily(parent) { for(let offset=6;offset>=0;offset--) {const date=new Date(end);date.setDate(date.getDate()-offset);days.push(`${date.getFullYear()}-${String(date.getMonth()+1).padStart(2,'0')}-${String(date.getDate()).padStart(2,'0')}`);} const models=modelRows(snapshot.analytics.week).sort((a,b)=>tokenTotal(b)-tokenTotal(a)||a.id.localeCompare(b.id)); if(!models.length){panel.append(node('p','No model calls recorded in the past 7 days.','empty-state'));return;} - const series=models.slice(0,5).map((model,i)=>({name:model.id,type:'bar',stack:'models',barMaxWidth:40,itemStyle:{color:chartColors[i]},data:days.map(day=>tokenTotal(modelRows(snapshot.analytics.days[day]||{routed:{},classifier:{}}).find(row=>row.id===model.id)||emptyTokens()))})); - if(models.length>5)series.push({name:'Other models',type:'bar',stack:'models',itemStyle:{color:chartColors[5]},data:days.map(day=>modelRows(snapshot.analytics.days[day]||{routed:{},classifier:{}}).filter(row=>!models.slice(0,5).some(model=>model.id===row.id)).reduce((sum,row)=>sum+tokenTotal(row),0))}); + const shown=models.slice(0,5),ids=new Set(shown.map(model=>model.id)); + const daily=days.map(day=>new Map(modelRows(snapshot.analytics.days[day]||{routed:{},classifier:{}}).map(row=>[row.id,tokenTotal(row)]))); + const series=shown.map((model,i)=>({name:model.id,type:'bar',stack:'models',barMaxWidth:40,itemStyle:{color:chartColors[i]},data:daily.map(totals=>totals.get(model.id)||0)})); + if(models.length>5)series.push({name:'Other models',type:'bar',stack:'models',itemStyle:{color:chartColors[5]},data:daily.map(totals=>[...totals].reduce((sum,[id,count])=>sum+(ids.has(id)?0:count),0))}); mountChart(panel,{grid:{left:12,right:20,top:20,bottom:28,containLabel:true}, xAxis:{type:'category',data:days.map(day=>new Date(`${day}T12:00:00`).toLocaleDateString(undefined,{month:'short',day:'numeric'})),axisLabel:{color:'#d1d7e0'},axisTick:{show:false}}, yAxis:{type:'value',axisLabel:{color:'#d1d7e0',formatter:compactNumber},splitLine:{lineStyle:{color:'#454d59'}}},series},220,'Daily recorded tokens. Exact daily totals follow.'); const key=node('div',undefined,'chart-key');series.forEach((item,i)=>{const label=node('span'),swatch=node('i');swatch.style.background=chartColors[i];label.append(swatch,document.createTextNode(item.name));key.append(label);});panel.append(key); - const daily=node('details');daily.append(node('summary','Exact daily totals'));for(const [index,day] of days.entries())daily.append(node('p',`${day}: ${series.map(item=>`${item.name} ${item.data[index].toLocaleString()}`).join(' · ')}`,'summary-row'));panel.append(daily); + const details=node('details');details.append(node('summary','Exact daily totals'));for(const [index,day] of days.entries())details.append(node('p',`${day}: ${series.map(item=>`${item.name} ${item.data[index].toLocaleString()}`).join(' · ')}`,'summary-row'));panel.append(details); } diff --git a/tests/test_linux_install.py b/tests/test_linux_install.py index 7d070c8e35..e3a740f9a5 100644 --- a/tests/test_linux_install.py +++ b/tests/test_linux_install.py @@ -51,7 +51,7 @@ def setup(tmp_path): return scripts, home, bin_dir, env -def run(setup, script, *args): +def run(setup, script, args=()): scripts, _, _, env = setup return subprocess.run( ["bash", str(scripts / script), *args], @@ -68,7 +68,7 @@ def test_bad_arguments_leave_files_unchanged(setup, script, args): _, home, _, env = setup rc = home / ".bashrc" rc.write_text(RC) - result = run(setup, script, *args) + result = run(setup, script, args) assert result.returncode == 2 assert "Usage:" in result.stderr assert rc.read_text() == RC @@ -113,7 +113,7 @@ def test_uninstall_cleans_profile_and_aliases_before_systemctl_failure(setup): def test_dry_run_leaves_files_unchanged(setup, script): _, home, _, env = setup (home / ".bashrc").write_text(RC) - result = run(setup, script, "--dry-run") + result = run(setup, script, ["--dry-run"]) assert result.returncode == 0, result.stderr assert (home / ".bashrc").read_text() == RC assert sorted(path.name for path in home.iterdir()) == [".bashrc"] @@ -180,18 +180,3 @@ def test_failed_start_leaves_existing_profile_unchanged(setup): assert result.returncode != 0 assert "journalctl" in result.stderr assert profile.read_text() == "user profile\n" - - -def test_default_make_only_prints_help(setup): - _, home, _, env = setup - result = subprocess.run( - ["make", "-f", str(REPO / "Makefile")], - cwd=REPO, - env=env, - capture_output=True, - text=True, - timeout=10, - ) - assert result.returncode == 0, result.stderr - assert "install-linux-dry-run" in result.stdout - assert not list(home.iterdir()) diff --git a/tests/test_macos_install.py b/tests/test_macos_install.py index 4823bae8fb..1f0bf84565 100644 --- a/tests/test_macos_install.py +++ b/tests/test_macos_install.py @@ -29,7 +29,7 @@ def setup(tmp_path): home.mkdir() bin_dir = tmp_path / "bin" bin_dir.mkdir() - switchyard_home = home / "Switchyard & Routing " + switchyard_home = home / 'Switchyard "quoted" \\ & Routing ' env = { **os.environ, "HOME": str(home), @@ -91,24 +91,30 @@ def test_install_escapes_switchyard_path_in_launch_agent(setup): str(switchyard_home / "menubar.toml"), ] - -def test_menu_bar_settings_escape_sy_home_as_toml_strings(setup): - _, home, _, env = setup - switchyard_home = home / 'Switchyard "quoted" \\ folder' - env["SY_HOME"] = str(switchyard_home) - - result = run(setup, "install.sh") - - assert result.returncode == 0, result.stderr settings = tomllib.loads((switchyard_home / "menubar.toml").read_text()) assert settings["routing_log"] == str(switchyard_home / "routing.jsonl") assert settings["config_file"] == str(switchyard_home / "composite.toml") + contents = home / "Applications" / "Switchyard.app" / "Contents" + bundle_entries = list(ET.parse(contents / "Info.plist").getroot().find("dict")) + bundle = {bundle_entries[i].text: bundle_entries[i + 1].text for i in range(0, len(bundle_entries), 2)} + assert bundle["CFBundleIdentifier"] == "com.nvidia.switchyard" + assert bundle["CFBundleExecutable"] == "Switchyard" + for path in [contents / "Resources" / "Update.command", contents / "MacOS" / "Switchyard"]: + assert os.access(path, os.X_OK) + assert subprocess.run(["bash", "-n", str(path)]).returncode == 0 def test_reinstall_backs_up_profile_and_keeps_user_settings(setup): _, _, switchyard_home, env = setup + defaults = Path(env["CODEX_HOME"]) / "config.toml" + defaults.parent.mkdir() + defaults.write_text("user defaults\n") + snapshot = defaults.with_name("config.toml.direct") + snapshot.write_text("original direct config\n") result = run(setup, "install.sh") assert result.returncode == 0, result.stderr + assert defaults.read_text() == "user defaults\n" + assert snapshot.read_text() == "original direct config\n" profile = Path(env["CODEX_HOME"]) / "sy.config.toml" # Older installs used this route ID; reinstall must update the profile and back it up. original = profile.read_text().replace("composite-gpt-6-sol-gpt-6-luna", "switchyard") @@ -127,43 +133,12 @@ def test_reinstall_backs_up_profile_and_keeps_user_settings(setup): backups = list(profile.parent.glob("sy.config.toml.switchyard-backup.*")) assert len(backups) == 1 assert backups[0].read_text() == original + assert defaults.read_text() == "user defaults\n" + assert snapshot.read_text() == "original direct config\n" assert server_config.read_text() == "user server settings\n" assert menu_settings.read_text() == "user menu settings\n" -def test_existing_codex_config_is_preserved_and_shared_templates_are_used(setup): - _, home, switchyard_home, env = setup - codex = Path(env["CODEX_HOME"]) - codex.mkdir() - config = codex / "config.toml" - original = """theme = "dark" - -[model_providers."sy"] # old provider -name = "Old" -base_url = "http://old" - -[other] -model_provider = "sy" -""" - config.write_text(original) - snapshot = codex / "config.toml.direct" - snapshot.write_text("original direct config\n") - result = run(setup, "install.sh") - assert result.returncode == 0, result.stderr - assert config.read_text() == original - profile = (codex / "sy.config.toml").read_text() - expected = ( - (REPO / "scripts" / "config" / "codex.sy.toml").read_text().replace("@SY_PORT@", "4123") - ) - assert profile == expected - assert tomllib.loads(profile)["model_providers"]["sy"]["name"] == "Switchyard" - assert not (codex / "config.sy.toml").exists() - assert (switchyard_home / "composite.toml").read_text() == ( - REPO / "scripts" / "config" / "composite.toml" - ).read_text() - assert snapshot.read_text() == "original direct config\n" - - def test_uninstall_preserves_routed_config_before_restoring_snapshot(setup): _, home, _, env = setup codex = Path(env["CODEX_HOME"]) @@ -224,27 +199,6 @@ def test_scripts_reject_unknown_arguments_before_any_work(setup, script, args): assert after == before -def test_app_bundle_has_a_launcher_and_source_update_command(setup): - _, home, switchyard_home, _ = setup - result = run(setup, "install.sh") - assert result.returncode == 0, result.stderr - contents = home / "Applications" / "Switchyard.app" / "Contents" - root = ET.parse(contents / "Info.plist").getroot() - entries = list(root.find("dict")) - values = {entries[i].text: entries[i + 1] for i in range(0, len(entries), 2)} - assert values["CFBundleIdentifier"].text == "com.nvidia.switchyard" - assert values["CFBundleExecutable"].text == "Switchyard" - assert os.access(contents / "MacOS" / "Switchyard", os.X_OK) - update = contents / "Resources" / "Update.command" - assert os.access(update, os.X_OK) - home_line = next( - line for line in update.read_text().splitlines() if line.startswith("export SY_HOME=") - ) - assert shlex.split(home_line.split("=", 1)[1])[0] == str(switchyard_home) - for path in [update, contents / "MacOS" / "Switchyard"]: - assert subprocess.run(["bash", "-n", str(path)]).returncode == 0 - - def test_app_launcher_preserves_quotes_and_shell_metacharacters(setup): """The launcher must pass shell syntax in the settings path as literal text.""" _, home, _, env = setup @@ -294,7 +248,7 @@ def test_named_profile_keeps_route_and_update_settings(setup): bundle = home / "Applications" / "Switchyard.app" / "Contents" assert (bundle / "MacOS" / "switchyard-server").is_file() update = (bundle / "Resources" / "Update.command").read_text() - for key in ["SY_PROFILE", "SY_MODEL"]: + for key in ["SY_HOME", "SY_PROFILE", "SY_MODEL"]: line = next(line for line in update.splitlines() if line.startswith(f"export {key}=")) assert shlex.split(line.split("=", 1)[1])[0] == env[key] assert run(setup, "uninstall.sh").returncode == 0 From 1c3e9eded5df978c347bf6e100a361173625f702 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 16:57:31 -0700 Subject: [PATCH 15/39] fix(app): detect Codex and explain routing installation Signed-off-by: Elyas Mehtabuddin --- Cargo.lock | 2 + crates/switchyard-menubar/Cargo.toml | 2 + crates/switchyard-menubar/README.md | 26 +++++++----- crates/switchyard-menubar/src/harness.rs | 11 +++++ crates/switchyard-menubar/ui/app.css | 4 ++ crates/switchyard-menubar/ui/app.js | 52 ++++++++++++++++++------ 6 files changed, 74 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7ae2b6562..603163c79d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5093,6 +5093,8 @@ name = "switchyard-menubar" version = "0.3.0" dependencies = [ "chrono", + "objc2-app-kit", + "objc2-foundation", "ratatui", "security-framework", "serde", diff --git a/crates/switchyard-menubar/Cargo.toml b/crates/switchyard-menubar/Cargo.toml index 29be5cb73e..0cad528d55 100644 --- a/crates/switchyard-menubar/Cargo.toml +++ b/crates/switchyard-menubar/Cargo.toml @@ -25,6 +25,8 @@ uuid.workspace = true ratatui = "0.30.2" [target.'cfg(target_os = "macos")'.dependencies] +objc2-app-kit = { version = "0.3.2", default-features = false, features = ["NSWorkspace"] } +objc2-foundation = { version = "0.3.2", default-features = false, features = ["NSString", "NSURL"] } security-framework = "3" tauri = { version = "2", features = ["tray-icon", "custom-protocol"] } diff --git a/crates/switchyard-menubar/README.md b/crates/switchyard-menubar/README.md index e34a66e8bd..5683a9fc92 100644 --- a/crates/switchyard-menubar/README.md +++ b/crates/switchyard-menubar/README.md @@ -123,19 +123,25 @@ instead. ## Install coding-tool settings **Install** has one coding-tool selector for Codex CLI, Codex app, Claude Code, -and Pi. It shows whether the tool's binary was detected. Choose a route and -settings location to review a diff of the routing settings. Credential values -stay hidden. The preview changes no files. The install button names the selected -tool. An optional absolute file path selects settings in another location; for -Pi, choose `models.json`, and the app uses `settings.json` beside it. A custom -file cannot be combined with a saved account. +and Pi. macOS finds the Codex app by its registered bundle identity, including +copies renamed to `ChatGPT.app`. Choose a route and settings location to compare +the current and proposed settings and their exact file paths. Credential values +stay hidden. The preview changes no files. **Apply routing…** shows a confirmation +before saving. Progress and the result appear beside the button. If the settings +already match, the button reads **Routing already applied**. An optional absolute +file path selects settings in another location. For Pi, choose `models.json`; +the app also uses `settings.json` beside it. A custom file cannot be combined +with a saved account. The app's **Install** page defaults to `sy.config.toml` for Codex CLI and `codex -p sy`. The source installer's `SY_PROFILE` choice does not change this -destination. Select a custom file to update another profile. The Codex app option -changes the defaults in `config.toml` for both the app and CLI. Claude Code gets -environment settings in `settings.json`. Pi gets a custom provider in -`models.json` and defaults in `settings.json`. Unrelated settings remain. +destination. Select a custom file to update another profile. With the normal +user settings location, the Codex app option changes shared defaults in +`config.toml` for both the app and CLI. A custom file or saved account changes +only that destination; the coding tool must load those settings separately. +Claude Code gets environment settings in `settings.json`. Pi gets a custom +provider in `models.json` and defaults in `settings.json`. Unrelated settings +remain. The app backs up each original file as `.switchyard-original`. If a file did not exist, `.switchyard-original-missing` records its absence. diff --git a/crates/switchyard-menubar/src/harness.rs b/crates/switchyard-menubar/src/harness.rs index bd8d625828..1f4d1cb264 100644 --- a/crates/switchyard-menubar/src/harness.rs +++ b/crates/switchyard-menubar/src/harness.rs @@ -682,6 +682,17 @@ fn replace( pub fn binary(tool: Harness) -> Option { if tool == Harness::CodexApp { + #[cfg(target_os = "macos")] + if let Some(path) = objc2_app_kit::NSWorkspace::sharedWorkspace() + .URLForApplicationWithBundleIdentifier(&objc2_foundation::NSString::from_str( + "com.openai.codex", + )) + .and_then(|url| url.path()) + .map(|path| PathBuf::from(path.to_string())) + .filter(|path| path.is_dir()) + { + return Some(path); + } return [ PathBuf::from("/Applications/Codex.app"), crate::config::expand_home(Path::new("~/Applications/Codex.app")), diff --git a/crates/switchyard-menubar/ui/app.css b/crates/switchyard-menubar/ui/app.css index 344a655b33..81c98ac188 100644 --- a/crates/switchyard-menubar/ui/app.css +++ b/crates/switchyard-menubar/ui/app.css @@ -47,6 +47,7 @@ section { display: grid; gap: 18px; } button, input, select { font: inherit; color: inherit; border: 1px solid var(--control-border); border-radius: 5px; background: var(--control); min-height: 32px; padding: 6px 10px; } button { cursor: pointer; text-align: left; font-weight: 500; line-height: 1.35; } button:hover { background: var(--hover); } +button:active:not(:disabled) { transform: translateY(1px); } button:disabled, input:disabled, select:disabled { opacity: .55; } button:disabled { cursor: default; } button.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-text); } @@ -63,6 +64,9 @@ pre + p { margin-top: 12px; } pre { font: 12px/1.7 var(--mono); white-space: pre-wrap; overflow-wrap: anywhere; margin: 0; } #status { margin: 0 0 18px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--panel); color: var(--status); white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; } #status:empty { display: none; } +.install-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 20px; margin-bottom: 18px; } +.install-progress:empty { display: none; } +.install-progress { padding: 12px; border: 1px solid var(--line); color: var(--status); white-space: pre-wrap; overflow-wrap: anywhere; } [data-role] { padding: 16px 0; border-top: 1px solid var(--line); } [data-role] label:first-child { margin-top: 0; } [data-role] .actions { margin-top: 10px; } diff --git a/crates/switchyard-menubar/ui/app.js b/crates/switchyard-menubar/ui/app.js index e68ccb0473..ddcbafb4b1 100644 --- a/crates/switchyard-menubar/ui/app.js +++ b/crates/switchyard-menubar/ui/app.js @@ -89,7 +89,7 @@ function render() { const intro=card('Connect your coding tools'); intro.append(node('p','Choose a Switchyard route for each coding tool, review the settings below, then install the route.')); const help=node('details');help.append(node('summary','How accounts and settings work'));help.append(node('p','Subscription routes use the coding tool’s login. API routes use credentials configured on the Switchyard server. Keys entered in Routes only load model lists.'));help.append(node('p','Installation backs up the original settings. Shell variables and project settings may override these defaults.'));intro.append(help); - const tool=field(intro,'Coding tool',select(snapshot.tools.map(t=>[t.tool,`${t.label} · ${t.available?'Detected':'Binary not found'}`]),installView.tool||snapshot.tools[0].tool)); + const tool=field(intro,'Coding tool',select(snapshot.tools.map(t=>[t.tool,`${t.label} · ${t.available?'Detected':'Not detected'}`]),installView.tool||snapshot.tools[0].tool)); installView.tool=tool.value; const panel=node('div');content.append(panel); const show=()=>{installView.tool=tool.value;installView.account='';installView.file='';panel.replaceChildren();renderInstall(snapshot.tools.find(t=>t.tool===tool.value),panel);}; @@ -170,7 +170,13 @@ function renderRouteBrowser() { // renderInstall checks each reply's revision before updating the preview or Install button. function renderInstall(tool, parent) { const c=card(tool.label);parent.append(c);c.dataset.tool=tool.tool; - c.append(node('p',tool.available?'Coding tool detected.':'Binary not found. You can configure settings before installing the tool.','muted')); + c.append(node('p',tool.available?'Coding tool detected.':'Coding tool not detected. You can still prepare its settings.','muted')); + c.append(node('p',{ + codex_cli:'This changes the selected Codex CLI profile file. The default is sy.config.toml, used with codex -p sy.', + codex_app:'The normal user settings location changes shared defaults for the Codex app and CLI. A custom file or saved account changes only that destination. The coding tool must load those settings separately.', + claude:'This changes the selected Claude Code user settings. Start a new Claude Code session to use the route.', + pi:'This adds a Switchyard provider and selects the route in Pi. Start a new Pi session to use it.', + }[tool.tool])); const fields=node('div',undefined,'field-grid');c.append(fields); const account=field(fields,'Settings location',select([['','Detected user settings'],...tool.accounts.map(name=>[name,`Account: ${name}`])],installView.account)); const route=routeField(fields);if(installView.route&&snapshot.routes.some(r=>r.key===installView.route))route.value=installView.route; @@ -179,31 +185,51 @@ function renderInstall(tool, parent) { c.append(node('small','Use an absolute file path for settings in another location. Leave empty to use the selected settings location. Pi also uses settings.json beside models.json.')); const comparison=node('div',undefined,'install-diff');c.append(comparison); const authentication=node('p',undefined,'install-auth');c.append(authentication); + const progress=node('p',undefined,'install-progress');progress.setAttribute('role','status');progress.setAttribute('aria-live','polite');c.append(progress); const target=()=>({tool:tool.tool,account:account.value||null,settings_file:file.value||null}); - const a=actions(c),install=button(a,`Install into ${tool.label} →`,()=>run({kind:'install',...target(),...routeArgs(route)}),true); + let plan; + const a=actions(c),install=button(a,'Apply routing…',()=>{ + if(!plan)return; + const selected=plan; + confirmAction(`Apply routing to ${tool.label}?`,`${selected.data.proposed}\n\n${selected.data.authentication}\n\nSwitchyard will back up the original settings and update these files. Unrelated settings are preserved. Use “Restore backed-up settings…” to undo this installation.`, 'Apply routing',async()=>{ + // A confirmation applies only while its panel and preview plan are still current. + if(!c.isConnected||selected!==plan)return; + progress.textContent='Saving routing settings and backing up the originals…';install.textContent='Applying routing…'; + const result=await run(selected.action,false); + progress.textContent=result?.message||status.textContent;install.textContent='Apply routing…'; + update(); + }); + },true); button(a,'Restore backed-up settings…',()=>confirmAction('Restore coding-tool settings?','Restore the settings saved before the first installation. This changes coding tool settings and keeps your Switchyard routes.','Restore settings',()=>run({kind:'restore',...target()}))); let revision=0; const update=()=>{ installView.account=account.value;installView.route=route.value;installView.file=file.value; - const requested=++revision;install.dataset.blocked='true';install.disabled=true;comparison.replaceChildren(node('p','Loading settings preview…'));authentication.textContent=''; + const requested=++revision;plan=undefined;install.dataset.blocked='true';install.disabled=true;install.textContent='Checking settings…';comparison.replaceChildren(node('p','Loading settings preview…'));authentication.textContent=''; enqueue(async()=>{ if(!c.isConnected||requested!==revision)return; - if(!route.value){comparison.replaceChildren(node('p',snapshot.routes.length?'Choose a route to preview its settings.':'Add a route in the server config first.'));return;} + if(!route.value){install.textContent='Choose a route';comparison.replaceChildren(node('p',snapshot.routes.length?'Choose a route to preview its settings.':'Add a route in the server config first.'));return;} setBusy(true); try { const result=await invoke('action',{action:{kind:'preview_install',...target(),...routeArgs(route)}}); if(!c.isConnected||requested!==revision)return; - comparison.replaceChildren(node('h4','Settings diff · − current / + proposed')); - if(result.data.error)comparison.append(node('p',result.data.error)); - else {for(const change of result.data.changes){comparison.append(node('pre',`${change.file} · ${change.key}`,'diff-heading'));comparison.append(node('pre',`− ${change.before}`,'diff-remove'),node('pre',`+ ${change.after}`,'diff-add'));}if(!result.data.changes.length)comparison.append(node('p','These settings already match the selected route.'));} - if(result.data.current){const current=node('details');current.append(node('summary','Current settings and file locations'),node('pre',result.data.current));comparison.append(current);} + comparison.replaceChildren(); + const summaries=node('div',undefined,'install-summary');comparison.append(summaries); + for(const [title,value] of [['Current settings',result.data.current],['After applying routing',result.data.proposed]])if(value){const summary=node('div');summary.append(node('h4',title),node('pre',value));summaries.append(summary);} + comparison.append(node('h4','Settings diff · − current / + proposed')); authentication.textContent=result.data.authentication||''; - install.dataset.blocked=String(Boolean(result.data.error)); - } catch(error) { if(c.isConnected&&requested===revision)comparison.replaceChildren(node('p',String(error))); } + if(result.data.error){comparison.append(node('p',result.data.error));install.textContent='Preview unavailable';return;} + for(const change of result.data.changes){comparison.append(node('pre',`${change.file} · ${change.key}`,'diff-heading'));comparison.append(node('pre',`− ${change.before}`,'diff-remove'),node('pre',`+ ${change.after}`,'diff-add'));} + if(!result.data.changes.length)comparison.append(node('p','These settings already match the selected route.')); + const ready=result.data.changes.length>0; + if(ready)plan={data:result.data,action:{kind:'install',...target(),...routeArgs(route)}}; + install.textContent=ready?'Apply routing…':'Routing already applied'; + install.dataset.blocked=String(!ready); + } catch(error) { if(c.isConnected&&requested===revision){install.textContent='Preview unavailable';comparison.replaceChildren(node('p',String(error)));} } finally { setBusy(false); } }); }; - account.onchange=update;route.onchange=update;file.oninput=()=>{installView.file=file.value;revision++;install.dataset.blocked='true';install.disabled=true;comparison.replaceChildren(node('p','Finish entering the file path, then press Enter or leave the field to preview.'));};file.onchange=update;file.onkeydown=event=>{if(event.key==='Enter')update();};update(); + const changed=()=>{progress.textContent='';update();}; + account.onchange=changed;route.onchange=changed;file.oninput=()=>{installView.file=file.value;revision++;plan=undefined;progress.textContent='';install.dataset.blocked='true';install.disabled=true;install.textContent='Preview required';comparison.replaceChildren(node('p','Finish entering the file path, then press Enter or leave the field to preview.'));};file.onchange=changed;file.onkeydown=event=>{if(event.key==='Enter')changed();};update(); } function renderAccounts() { const c=card('Subscription accounts');const disclosure=node('details');disclosure.append(node('summary','Sign in to another subscription account…'));c.append(disclosure);const parent=disclosure; @@ -266,7 +292,7 @@ window.addEventListener?.('switchyard-page', event=>{ if(!snapshot)refresh(); }); async function poll() { - if(document.querySelector('[role="dialog"]')){setTimeout(poll,(snapshot?.refresh_seconds||30)*1000);return;} + if(page==='install'||document.querySelector('[role="dialog"]')){setTimeout(poll,(snapshot?.refresh_seconds||30)*1000);return;} if(page==='overview'||page==='usage')await refresh(); else if(!busy) { setBusy(true); From 200c1ce2145836e4ce8e04e69c637c2e5503e321 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 23:35:27 -0700 Subject: [PATCH 16/39] fix(translation): read streamed custom tool input from the completed item Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-server/tests/server.rs | 107 ++++++++++++++++++ .../src/codecs/responses/stream.rs | 27 +++-- .../src/codecs/stream.rs | 5 + 3 files changed, 125 insertions(+), 14 deletions(-) diff --git a/crates/switchyard-server/tests/server.rs b/crates/switchyard-server/tests/server.rs index a000f8f735..13068819ea 100644 --- a/crates/switchyard-server/tests/server.rs +++ b/crates/switchyard-server/tests/server.rs @@ -61,6 +61,10 @@ impl MockUpstream { post(upstream_responses_requires_forwarded_auth), ) .route("/silo/{silo}/responses", post(upstream_responses_silo)) + .route( + "/gateway-stream/responses", + post(upstream_gateway_tool_stream), + ) .route("/capture", post(upstream_redirect_capture)) .route("/v1/messages/count_tokens", post(upstream_count_tokens)) .route( @@ -3283,6 +3287,109 @@ target = "openai" Ok(()) } +/// Streams a tool call the way the LiteLLM Responses gateway in front of Bedrock Claude does. +/// The gateway sends data-only frames, streams a custom tool's call as +/// `response.function_call_arguments.delta` events whose JSON differs from the finished +/// item's `input`, and closes an empty text message at output index 0 after the call. +async fn upstream_gateway_tool_stream( + State(calls): State>>>, + Json(body): Json, +) -> HttpResponse { + calls.lock().await.push(body.clone()); + let model = body["model"].as_str().unwrap_or_default(); + let call = + json!({"type": "custom_tool_call", "id": "ctc_1", "call_id": "call_1", "name": "exec"}); + let mut added = call.clone(); + added["status"] = json!("in_progress"); + added["input"] = json!(""); + let mut done = call; + done["status"] = json!("completed"); + done["input"] = json!("ls"); + let message = json!({"type": "message", "id": "msg_1", "role": "assistant", "status": "completed", + "content": [{"type": "output_text", "text": "", "annotations": []}]}); + let response = json!({"id": "resp_gateway", "object": "response", "model": model, "status": "completed", + "output": [message, done], + "usage": {"input_tokens": 1, "output_tokens": 1, "total_tokens": 2}}); + let mut created = response.clone(); + created["status"] = json!("in_progress"); + created["output"] = json!([]); + let events = [ + json!({"type": "response.created", "response": created}), + json!({"type": "response.output_item.added", "output_index": 1, "item": added}), + json!({"type": "response.function_call_arguments.delta", "item_id": "ctc_1", "output_index": 1, "delta": "{\"content\": "}), + json!({"type": "response.function_call_arguments.delta", "item_id": "ctc_1", "output_index": 1, "delta": "\"ls\"}"}), + json!({"type": "response.function_call_arguments.done", "item_id": "ctc_1", "output_index": 1, "arguments": "{\"content\": \"ls\"}"}), + json!({"type": "response.output_item.done", "output_index": 1, "item": done}), + json!({"type": "response.output_text.done", "item_id": "msg_1", "output_index": 0, "content_index": 0, "text": ""}), + json!({"type": "response.content_part.done", "item_id": "msg_1", "output_index": 0, "content_index": 0, + "part": {"type": "output_text", "text": "", "annotations": []}}), + json!({"type": "response.output_item.done", "output_index": 0, "item": message}), + json!({"type": "response.completed", "response": response}), + ]; + let stream = futures_util::stream::iter( + events + .into_iter() + .map(|event| Ok::(Event::default().data(event.to_string()))), + ); + Sse::new(stream).into_response() +} + +fn gateway_stream_config(base_url: &str) -> String { + let root = base_url.trim_end_matches("/v1"); + format!( + r#" +schema_version = 1 + +[llm_clients.gateway] +format = "openai_responses" +base_url = "{root}/gateway-stream" +max_retries = 0 + +[targets.claude] +id = "model/gateway-claude" +llm_client = "gateway" + +[routes.claude] +id = "switchyard/gateway-claude" +type = "passthrough" +target = "claude" +"# + ) +} + +#[tokio::test] +async fn responses_stream_completes_a_gateway_custom_tool_call() -> TestResult { + let upstream = MockUpstream::start().await?; + let app = build_switchyard_router(load_test_config(&gateway_stream_config( + &upstream.base_url, + ))?); + let response = send( + &app, + "POST", + "/v1/responses", + Some(json!({ + "model": "switchyard/gateway-claude", + "input": "list files", + "tools": [{"type": "custom", "name": "exec", "format": {"type": "text"}}], + "stream": true + })), + ) + .await?; + assert_eq!(response.status, StatusCode::OK); + let events = sse_events(response.text()?); + let call = events + .iter() + .find(|event| { + event["type"] == "response.output_item.done" + && event["item"]["type"] == "custom_tool_call" + }) + .ok_or("the stream must close the custom tool call")?; + assert_eq!(call["item"]["input"], "ls"); + let last = events.last().ok_or("the stream must not be empty")?; + assert_eq!(last["type"], "response.completed", "{events:#?}"); + Ok(()) +} + /// Serves `/v1/responses` and `/v1/messages` for a stub gateway on one host and records the /// path and `authorization` values of each call. `/v1/responses` calls get a judge verdict. async fn upstream_gateway_records_auth( diff --git a/crates/switchyard-translation/src/codecs/responses/stream.rs b/crates/switchyard-translation/src/codecs/responses/stream.rs index 6d30a60e2d..eb54e7772d 100644 --- a/crates/switchyard-translation/src/codecs/responses/stream.rs +++ b/crates/switchyard-translation/src/codecs/responses/stream.rs @@ -188,22 +188,23 @@ fn decode_responses_stream( event .get("delta") .and_then(Value::as_str) - .map(|delta| { + .and_then(|delta| { state.decoded_tool_call = true; + let tool = state.tool_states.entry(output_index as usize).or_default(); + // The completed item carries a custom call's input. The decoder skips + // argument deltas for that call because their JSON can differ from it. + if tool.decoded_custom_call { + return None; + } // Recorded so `response.output_item.done`, which repeats // the complete arguments, can tell it is a repeat. - state - .tool_states - .entry(output_index as usize) - .or_default() - .decoded_arguments - .push_str(delta); - vec![LlmResponseChunk::ToolCallDelta { + tool.decoded_arguments.push_str(delta); + Some(vec![LlmResponseChunk::ToolCallDelta { index: output_index as usize, id: None, name: None, arguments_delta: Some(delta.to_string()), - }] + }]) }) .unwrap_or_default() } @@ -670,12 +671,10 @@ fn decode_responses_output_item_added( .or_else(|| item.get("id")) .and_then(Value::as_str); let name = item.get("name").and_then(Value::as_str); - state - .tool_states - .entry(index) - .or_default() - .has_decoded_identity |= + let tool = state.tool_states.entry(index).or_default(); + tool.has_decoded_identity |= id.is_some_and(|id| !id.is_empty()) && name.is_some_and(|name| !name.is_empty()); + tool.decoded_custom_call |= item_type == Some("custom_tool_call"); // A freeform call's `input` becomes the single `input` argument; it is only complete on // the done event, so nothing is emitted for it here beyond id and name. let arguments_delta = if item_type == Some("custom_tool_call") { diff --git a/crates/switchyard-translation/src/codecs/stream.rs b/crates/switchyard-translation/src/codecs/stream.rs index db83015a7c..04f3b0f299 100644 --- a/crates/switchyard-translation/src/codecs/stream.rs +++ b/crates/switchyard-translation/src/codecs/stream.rs @@ -131,6 +131,11 @@ pub(crate) struct StreamToolState { pub(crate) decoded_arguments: String, #[serde(default)] pub(crate) has_decoded_identity: bool, + /// True when the source announced a `custom_tool_call`. The decoder then reads the call's + /// input only from the completed item, because some providers also stream argument deltas + /// whose JSON does not match that input. + #[serde(default)] + pub(crate) decoded_custom_call: bool, pub(crate) pending_arguments: String, pub(crate) started: bool, pub(crate) content_index: Option, From 09cc09ac6bc21bfbbc1cd33315436e81e70605d3 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Fri, 9 Oct 2026 23:37:59 -0700 Subject: [PATCH 17/39] fix(translation): send an error event when a Responses snapshot conflicts Signed-off-by: Elyas Mehtabuddin --- crates/switchyard-server/src/sse.rs | 4 ++ crates/switchyard-server/tests/server.rs | 51 ++++++++++++++++++- .../src/codecs/responses/stream.rs | 8 +-- .../tests/stream_translation.rs | 2 +- 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/crates/switchyard-server/src/sse.rs b/crates/switchyard-server/src/sse.rs index dd2cb1595f..c6549eff16 100644 --- a/crates/switchyard-server/src/sse.rs +++ b/crates/switchyard-server/src/sse.rs @@ -39,6 +39,10 @@ pub(crate) fn frame_stream( // Preserve the upstream error's fields, apart from credential redaction, // rather than replacing it with a synthesized error. Err(LlmStreamError::Upstream(value)) => { + // The error message can quote request content, so the log records only + // the event type. + let event_type = value.get("type").and_then(Value::as_str).unwrap_or("error"); + tracing::warn!(event_type, "stream ended with an in-band error event"); failed = true; frame_event(target_format, value.clone(), &redactor).unwrap_or_else(|error| { tracing::warn!(error = %error, "in-band error event could not be framed"); diff --git a/crates/switchyard-server/tests/server.rs b/crates/switchyard-server/tests/server.rs index 13068819ea..a5898ee5af 100644 --- a/crates/switchyard-server/tests/server.rs +++ b/crates/switchyard-server/tests/server.rs @@ -3290,7 +3290,9 @@ target = "openai" /// Streams a tool call the way the LiteLLM Responses gateway in front of Bedrock Claude does. /// The gateway sends data-only frames, streams a custom tool's call as /// `response.function_call_arguments.delta` events whose JSON differs from the finished -/// item's `input`, and closes an empty text message at output index 0 after the call. +/// item's `input`, and closes an empty text message at output index 0 after the call. With +/// `conflicting-arguments` in the request, the call is a `function_call` whose finished +/// `arguments` do not start with the streamed deltas. async fn upstream_gateway_tool_stream( State(calls): State>>>, Json(body): Json, @@ -3305,6 +3307,16 @@ async fn upstream_gateway_tool_stream( let mut done = call; done["status"] = json!("completed"); done["input"] = json!("ls"); + if body.to_string().contains("conflicting-arguments") { + let call = + json!({"type": "function_call", "id": "fc_1", "call_id": "call_1", "name": "exec"}); + added = call.clone(); + added["status"] = json!("in_progress"); + added["arguments"] = json!(""); + done = call; + done["status"] = json!("completed"); + done["arguments"] = json!("{\"path\": \"b\"}"); + } let message = json!({"type": "message", "id": "msg_1", "role": "assistant", "status": "completed", "content": [{"type": "output_text", "text": "", "annotations": []}]}); let response = json!({"id": "resp_gateway", "object": "response", "model": model, "status": "completed", @@ -3390,6 +3402,43 @@ async fn responses_stream_completes_a_gateway_custom_tool_call() -> TestResult { Ok(()) } +#[tokio::test] +async fn responses_stream_reports_a_conflicting_tool_call_snapshot_as_an_error() -> TestResult { + let upstream = MockUpstream::start().await?; + let app = build_switchyard_router(load_test_config(&gateway_stream_config( + &upstream.base_url, + ))?); + let response = send( + &app, + "POST", + "/v1/responses", + Some(json!({ + "model": "switchyard/gateway-claude", + "input": "conflicting-arguments", + "tools": [{"type": "function", "name": "exec", "parameters": {"type": "object"}}], + "stream": true + })), + ) + .await?; + assert_eq!(response.status, StatusCode::OK); + let events = sse_events(response.text()?); + // The finished call contradicts the streamed arguments, so the server sends an error + // event in its place and ends the stream there. + let last = events.last().ok_or("the stream must not be empty")?; + assert_eq!(last["type"], "error", "{events:#?}"); + assert_eq!( + last["message"], + "Responses snapshot conflicts with streamed content" + ); + assert!( + !events + .iter() + .any(|event| event["type"] == "response.output_item.done"), + "{events:#?}" + ); + Ok(()) +} + /// Serves `/v1/responses` and `/v1/messages` for a stub gateway on one host and records the /// path and `authorization` values of each call. `/v1/responses` calls get a judge verdict. async fn upstream_gateway_records_auth( diff --git a/crates/switchyard-translation/src/codecs/responses/stream.rs b/crates/switchyard-translation/src/codecs/responses/stream.rs index eb54e7772d..d64ed93669 100644 --- a/crates/switchyard-translation/src/codecs/responses/stream.rs +++ b/crates/switchyard-translation/src/codecs/responses/stream.rs @@ -270,7 +270,7 @@ fn decode_responses_stream( for (position, item) in items.iter().enumerate() { if let Some(item) = item.as_object() { out.extend(decode_responses_completed_item(item, position, state)); - if matches!(out.last(), Some(LlmResponseChunk::StreamError { .. })) { + if matches!(out.last(), Some(LlmResponseChunk::DecodeError { .. })) { return out; } } @@ -788,13 +788,15 @@ fn decode_responses_completed_item( Vec::new() } -// A snapshot may extend streamed content, but cannot retract content already sent. +// A snapshot may extend streamed content, but cannot retract content already sent. A +// conflict means the provider sent inconsistent data, so it decodes to `DecodeError`: the +// server then replaces the event with an error frame instead of replaying it. fn snapshot_suffix( decoded: &mut String, snapshot: &str, ) -> Result, LlmResponseChunk> { let Some(suffix) = snapshot.strip_prefix(decoded.as_str()) else { - return Err(LlmResponseChunk::StreamError { + return Err(LlmResponseChunk::DecodeError { message: "Responses snapshot conflicts with streamed content".to_string(), }); }; diff --git a/crates/switchyard-translation/tests/stream_translation.rs b/crates/switchyard-translation/tests/stream_translation.rs index 26d65adae9..3a913765a3 100644 --- a/crates/switchyard-translation/tests/stream_translation.rs +++ b/crates/switchyard-translation/tests/stream_translation.rs @@ -3419,7 +3419,7 @@ fn responses_terminal_snapshots_recover_missing_output_once() -> TestResult { )?; assert!(matches!( decoded.normalized().last(), - Some(LlmResponseChunk::StreamError { .. }) + Some(LlmResponseChunk::DecodeError { .. }) )); assert!( !decoded From d37a4b7a0092360acc03d9bd1f85fbede7020106 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Sat, 10 Oct 2026 02:01:45 -0700 Subject: [PATCH 18/39] fix(client): define tools for replayed tool calls when a request has none Signed-off-by: Elyas Mehtabuddin --- crates/libsy-llm-client/src/client.rs | 114 ++++++++++++- crates/switchyard-server/tests/server.rs | 201 +++++++++++++++++++++++ 2 files changed, 314 insertions(+), 1 deletion(-) diff --git a/crates/libsy-llm-client/src/client.rs b/crates/libsy-llm-client/src/client.rs index e1976de291..650f8d591f 100644 --- a/crates/libsy-llm-client/src/client.rs +++ b/crates/libsy-llm-client/src/client.rs @@ -4,7 +4,7 @@ //! [`TranslatingLlmClient`]: encode a neutral //! request, call the configured backend over HTTP, decode the neutral response. -use std::collections::{BTreeMap, BTreeSet, HashMap}; +use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; use std::future::ready; use std::sync::atomic::{AtomicU64, Ordering}; use std::time::{Duration, SystemTime}; @@ -277,6 +277,9 @@ impl TranslatingLlmClient { if matches!(backend, Backend::OpenAiResponses(_)) { sanitize_openai_responses_provider_body(&mut body); } + if matches!(endpoint, UpstreamEndpoint::Completion) { + define_tools_for_replayed_calls(&mut body, wire_format); + } // Strip before `merge_extra_body` so a target can reinstate either field // deliberately via `extra_body`. if matches!(backend, Backend::Anthropic(_)) { @@ -1074,6 +1077,115 @@ fn ensure_responses_function_tool_description(object: &mut Map) { } } +/// Description of a tool definition that Switchyard adds only so that earlier calls to the +/// tool stay valid. The same request sets `tool_choice` to `none`. +const REPLAYED_TOOL_DESCRIPTION: &str = + "Earlier calls to this tool appear in the conversation. It is not available in this request."; + +// Adds a definition for each tool that the conversation history calls when the request +// defines no tools, and sets `tool_choice` to `none`. +// +// Codex compacts a long conversation by sending the whole history, including its tool calls +// and results, with an empty `tools` list. OpenAI accepts that. LiteLLM in front of Bedrock +// Claude rejects it on both OpenAI APIs ("Bedrock doesn't support tool calling without +// `tools=` param specified"), so compaction could never finish on such a target. A +// same-format request is replayed verbatim, so the fix has to apply to the outbound body. +// +// Bedrock has no `tool_choice` of `none`, and LiteLLM drops it. A Bedrock model can therefore +// still call one of these tools if the prompt asks it to. +fn define_tools_for_replayed_calls(body: &mut Value, wire_format: WireFormat) { + let Value::Object(object) = body else { + return; + }; + if object + .get("tools") + .and_then(Value::as_array) + .is_some_and(|tools| !tools.is_empty()) + { + return; + } + let tools = match wire_format { + WireFormat::OpenAiResponses => replayed_responses_tools(object.get("input")), + WireFormat::OpenAiChat => replayed_chat_tools(object.get("messages")), + WireFormat::AnthropicMessages => return, + }; + if tools.is_empty() { + return; + } + object.insert("tools".to_string(), Value::Array(tools)); + object.insert("tool_choice".to_string(), json!("none")); +} + +// One definition per tool name called in Responses `input`, in first-call order. A freeform +// `custom_tool_call` gets a `custom` definition and a `function_call` gets a `function` one. +fn replayed_responses_tools(input: Option<&Value>) -> Vec { + let Some(Value::Array(items)) = input else { + return Vec::new(); + }; + // A Responses-lite request defines its tools inside `input`. + if items + .iter() + .any(|item| item.get("type").and_then(Value::as_str) == Some("additional_tools")) + { + return Vec::new(); + } + let mut names = HashSet::new(); + let mut tools = Vec::new(); + for item in items { + let kind = match item.get("type").and_then(Value::as_str) { + Some("function_call") => "function", + Some("custom_tool_call") => "custom", + _ => continue, + }; + let Some(name) = item.get("name").and_then(Value::as_str) else { + continue; + }; + if !names.insert(name) { + continue; + } + tools.push(if kind == "function" { + json!({ + "type": "function", + "name": name, + "description": REPLAYED_TOOL_DESCRIPTION, + "parameters": {"type": "object"}, + }) + } else { + json!({"type": "custom", "name": name, "description": REPLAYED_TOOL_DESCRIPTION}) + }); + } + tools +} + +// One function definition per tool name called by assistant messages, in first-call order. +fn replayed_chat_tools(messages: Option<&Value>) -> Vec { + let Some(Value::Array(messages)) = messages else { + return Vec::new(); + }; + let mut names = HashSet::new(); + let mut tools = Vec::new(); + let calls = messages + .iter() + .filter_map(|message| message.get("tool_calls").and_then(Value::as_array)) + .flatten(); + for call in calls { + let Some(name) = call.pointer("/function/name").and_then(Value::as_str) else { + continue; + }; + if names.insert(name) { + tools.push(json!({ + "type": "function", + "function": { + "name": name, + "description": REPLAYED_TOOL_DESCRIPTION, + "parameters": {"type": "object"}, + }, + })); + } + } + tools +} + // Drops fields accepted by OpenAI-like APIs but rejected by Anthropic Messages. // // A router can serve earlier turns of a session from an OpenAI-format target and diff --git a/crates/switchyard-server/tests/server.rs b/crates/switchyard-server/tests/server.rs index a5898ee5af..805c54e1da 100644 --- a/crates/switchyard-server/tests/server.rs +++ b/crates/switchyard-server/tests/server.rs @@ -65,6 +65,11 @@ impl MockUpstream { "/gateway-stream/responses", post(upstream_gateway_tool_stream), ) + .route("/bedrock-gateway/responses", post(upstream_bedrock_gateway)) + .route( + "/bedrock-gateway/chat/completions", + post(upstream_bedrock_gateway), + ) .route("/capture", post(upstream_redirect_capture)) .route("/v1/messages/count_tokens", post(upstream_count_tokens)) .route( @@ -3439,6 +3444,202 @@ async fn responses_stream_reports_a_conflicting_tool_call_snapshot_as_an_error() Ok(()) } +/// Answers like LiteLLM in front of Bedrock Claude: a request whose history calls a tool but +/// that defines no tools gets HTTP 400, and any other request gets the text "ok". +async fn upstream_bedrock_gateway( + State(calls): State>>>, + uri: Uri, + Json(body): Json, +) -> HttpResponse { + calls.lock().await.push(body.clone()); + let model = body["model"].as_str().unwrap_or_default(); + let calls_a_tool = body["input"].as_array().into_iter().flatten().any(|item| { + matches!( + item["type"].as_str(), + Some("function_call" | "custom_tool_call") + ) + }) || body["messages"] + .as_array() + .into_iter() + .flatten() + .any(|message| message.get("tool_calls").is_some()); + let defines_tools = body["tools"] + .as_array() + .is_some_and(|tools| !tools.is_empty()); + if calls_a_tool && !defines_tools { + return ( + StatusCode::BAD_REQUEST, + Json(json!({"error": { + "message": "litellm.UnsupportedParamsError: Bedrock doesn't support tool calling without `tools=` param specified.", + "type": "invalid_request_error", "code": "400" + }})), + ) + .into_response(); + } + if uri.path().ends_with("/chat/completions") { + return Json(json!({ + "id": "chatcmpl-gateway", "object": "chat.completion", "model": model, + "choices": [{"index": 0, "finish_reason": "stop", + "message": {"role": "assistant", "content": "ok"}}], + "usage": {"prompt_tokens": 1, "completion_tokens": 1, "total_tokens": 2} + })) + .into_response(); + } + let response = responses_body("resp_gateway", model, "ok"); + if body["stream"] != true { + return Json(response).into_response(); + } + let events = [ + json!({"type": "response.created", "response": {"id": "resp_gateway", "model": model, "status": "in_progress", "output": []}}), + json!({"type": "response.output_text.delta", "output_index": 0, "delta": "ok"}), + json!({"type": "response.completed", "response": response}), + ]; + let stream = futures_util::stream::iter( + events + .into_iter() + .map(|event| Ok::(Event::default().data(event.to_string()))), + ); + Sse::new(stream).into_response() +} + +#[tokio::test] +async fn requests_replaying_tool_calls_without_tools_get_tool_definitions() -> TestResult { + let upstream = MockUpstream::start().await?; + let root = upstream.base_url.trim_end_matches("/v1"); + let app = build_switchyard_router(load_test_config(&format!( + r#" +schema_version = 1 + +[llm_clients.responses] +format = "openai_responses" +base_url = "{root}/bedrock-gateway" +max_retries = 0 + +[llm_clients.chat] +format = "openai_chat" +base_url = "{root}/bedrock-gateway" +max_retries = 0 + +[targets.responses] +id = "model/bedrock-responses" +llm_client = "responses" + +[targets.chat] +id = "model/bedrock-chat" +llm_client = "chat" + +[routes.responses] +id = "switchyard/bedrock-responses" +type = "passthrough" +target = "responses" + +[routes.chat] +id = "switchyard/bedrock-chat" +type = "passthrough" +target = "chat" +"# + ))?); + + // Codex compacts a conversation by sending its history with an empty `tools` list. + let compaction = send( + &app, + "POST", + "/v1/responses", + Some(json!({ + "model": "switchyard/bedrock-responses", + "stream": true, + "tools": [], + "tool_choice": "auto", + "parallel_tool_calls": false, + "input": [ + {"type": "message", "role": "user", "content": [{"type": "input_text", "text": "List files"}]}, + {"type": "custom_tool_call", "call_id": "call_1", "name": "exec", "input": "ls"}, + {"type": "custom_tool_call_output", "call_id": "call_1", "output": "README.md"}, + {"type": "function_call", "call_id": "call_2", "name": "shell", "arguments": "{}"}, + {"type": "function_call_output", "call_id": "call_2", "output": "ok"}, + {"type": "function_call", "call_id": "call_3", "name": "shell", "arguments": "{}"}, + {"type": "function_call_output", "call_id": "call_3", "output": "ok"}, + {"type": "message", "role": "user", "content": [{"type": "input_text", "text": "Summarize the conversation."}]} + ] + })), + ) + .await?; + assert_eq!(compaction.status, StatusCode::OK, "{}", compaction.text()?); + let events = sse_events(compaction.text()?); + assert_eq!( + events.last().ok_or("the stream must not be empty")?["type"], + "response.completed" + ); + + let chat = send( + &app, + "POST", + "/v1/chat/completions", + Some(json!({ + "model": "switchyard/bedrock-chat", + "messages": [ + {"role": "user", "content": "List files"}, + {"role": "assistant", "content": null, "tool_calls": [{"id": "call_1", "type": "function", + "function": {"name": "shell", "arguments": "{}"}}]}, + {"role": "tool", "tool_call_id": "call_1", "content": "README.md"}, + {"role": "user", "content": "Summarize the conversation."} + ] + })), + ) + .await?; + assert_eq!(chat.status, StatusCode::OK, "{}", chat.text()?); + + // A request that already defines tools reaches the gateway with its own definitions. + let defined = send( + &app, + "POST", + "/v1/responses", + Some(json!({ + "model": "switchyard/bedrock-responses", + "tools": [{"type": "function", "name": "shell", "description": "Run a command", + "parameters": {"type": "object"}}], + "tool_choice": "auto", + "input": [ + {"type": "message", "role": "user", "content": [{"type": "input_text", "text": "List files"}]}, + {"type": "function_call", "call_id": "call_1", "name": "shell", "arguments": "{}"}, + {"type": "function_call_output", "call_id": "call_1", "output": "README.md"} + ] + })), + ) + .await?; + assert_eq!(defined.status, StatusCode::OK, "{}", defined.text()?); + + let calls = upstream.calls.lock().await; + let tool_list = |call: &Value| -> Vec<(String, String)> { + let tools = call["tools"].as_array().cloned().unwrap_or_default(); + tools + .iter() + .map(|tool| { + let name = tool["name"].as_str().or(tool["function"]["name"].as_str()); + ( + tool["type"].as_str().unwrap_or_default().to_string(), + name.unwrap_or_default().to_string(), + ) + }) + .collect() + }; + assert_eq!(calls.len(), 3); + assert_eq!( + tool_list(&calls[0]), + [ + ("custom".into(), "exec".into()), + ("function".into(), "shell".into()) + ] + ); + assert_eq!(calls[0]["tool_choice"], "none"); + assert_eq!(tool_list(&calls[1]), [("function".into(), "shell".into())]); + assert_eq!(calls[1]["tool_choice"], "none"); + assert_eq!(calls[2]["tools"][0]["description"], "Run a command"); + assert_eq!(calls[2]["tools"].as_array().map(Vec::len), Some(1)); + assert_eq!(calls[2]["tool_choice"], "auto"); + Ok(()) +} + /// Serves `/v1/responses` and `/v1/messages` for a stub gateway on one host and records the /// path and `authorization` values of each call. `/v1/responses` calls get a judge verdict. async fn upstream_gateway_records_auth( From c7b515bb0c6d6245e1dfb2b11fc71d441a6fc270 Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Sat, 10 Oct 2026 02:15:54 -0700 Subject: [PATCH 19/39] test(server): reproduce the Codex failures through a LiteLLM gateway Signed-off-by: Elyas Mehtabuddin --- .../tests/litellm_gateway.rs | 776 ++++++++++++++++++ crates/switchyard-server/tests/server.rs | 357 -------- .../tests/stream_translation.rs | 77 ++ 3 files changed, 853 insertions(+), 357 deletions(-) create mode 100644 crates/switchyard-server/tests/litellm_gateway.rs diff --git a/crates/switchyard-server/tests/litellm_gateway.rs b/crates/switchyard-server/tests/litellm_gateway.rs new file mode 100644 index 0000000000..d32cf6c541 --- /dev/null +++ b/crates/switchyard-server/tests/litellm_gateway.rs @@ -0,0 +1,776 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Regression tests for Codex traffic sent through a LiteLLM gateway to Bedrock Claude. +//! +//! The stub gateway reproduces three behaviors of the real gateway that broke Codex: +//! it streams a freeform tool call as function-style argument deltas whose JSON differs from +//! the finished call, it stops at 4,096 output tokens when a request sets no limit, and it +//! rejects tool-call history in a request that defines no tools. Each test runs the +//! production server, config loader, router, and HTTP client against that stub. + +use std::convert::Infallible; +use std::error::Error; +use std::io::Write; +use std::sync::Arc; + +use axum::body::Body; +use axum::extract::State; +use axum::http::{Request, StatusCode, Uri}; +use axum::response::sse::{Event, Sse}; +use axum::response::{IntoResponse, Response}; +use axum::routing::post; +use axum::{Json, Router}; +use http_body_util::BodyExt; +use serde_json::{Value, json}; +use switchyard_server::{build_switchyard_router, config::load_server_state}; +use tokio::net::TcpListener; +use tokio::sync::Mutex; +use tokio::task::JoinHandle; +use tower::ServiceExt; + +type TestResult = Result>; + +/// Output tokens the gateway allows Bedrock Claude when a request sets no limit. +const GATEWAY_DEFAULT_OUTPUT_CAP: u64 = 4096; +/// Output limit that the `claude` target adds through `extra_body`. +const CONFIGURED_OUTPUT_LIMIT: u64 = 64000; +const LITELLM_TOOLS_ERROR: &str = "litellm.UnsupportedParamsError: Bedrock doesn't support tool calling without `tools=` param specified."; +const CONFLICT_MESSAGE: &str = "Responses snapshot conflicts with streamed content"; +/// Both route types send the requests in these tests to the `claude` target. +const CLAUDE_ROUTES: [&str; 2] = ["gateway/passthrough", "gateway/stage"]; + +// `Gateway::drop` stops the server task even when an assertion fails. +struct Gateway { + root: String, + calls: Arc>>, + task: JoinHandle>, +} + +impl Gateway { + async fn start() -> TestResult { + let calls = Arc::new(Mutex::new(Vec::new())); + let app = Router::new() + .route("/v1/responses", post(gateway)) + .route("/v1/chat/completions", post(gateway)) + .with_state(Arc::clone(&calls)); + let listener = TcpListener::bind("127.0.0.1:0").await?; + let root = format!("http://{}", listener.local_addr()?); + let task = tokio::spawn(async move { axum::serve(listener, app).await }); + Ok(Self { root, calls, task }) + } + + /// The single request the gateway received since the last call. + async fn only_call(&self) -> TestResult { + let mut calls = self.calls.lock().await; + let [call] = std::mem::take(&mut *calls) + .try_into() + .map_err(|calls: Vec| { + format!("expected one gateway call, got {}", calls.len()) + })?; + Ok(call) + } +} + +impl Drop for Gateway { + fn drop(&mut self) { + self.task.abort(); + } +} + +/// Builds the server from a config file, as `switchyard-server --config` does. +fn app(gateway: &Gateway) -> TestResult { + let mut config = tempfile::Builder::new().suffix(".toml").tempfile()?; + write!( + config, + r#" +schema_version = 1 + +[llm_clients.responses] +format = "openai_responses" +base_url = "{root}/v1" +max_retries = 0 + +[llm_clients.chat] +format = "openai_chat" +base_url = "{root}/v1" +max_retries = 0 + +[targets.claude] +id = "model/claude" +llm_client = "responses" +extra_body = {{ max_output_tokens = {CONFIGURED_OUTPUT_LIMIT} }} + +[targets.claude_uncapped] +id = "model/claude-uncapped" +llm_client = "responses" + +[targets.gpt] +id = "model/gpt" +llm_client = "responses" + +[targets.claude_chat] +id = "model/claude-chat" +llm_client = "chat" + +[routes.passthrough] +id = "gateway/passthrough" +type = "passthrough" +target = "claude" + +[routes.stage] +id = "gateway/stage" +type = "stage_router" +capable_target = "gpt" +efficient_target = "claude" +picker = "efficient_first" +confidence_threshold = 0.5 + +[routes.uncapped] +id = "gateway/uncapped" +type = "passthrough" +target = "claude_uncapped" + +[routes.chat] +id = "gateway/chat" +type = "passthrough" +target = "claude_chat" +"#, + root = gateway.root, + )?; + Ok(build_switchyard_router(load_server_state(config.path())?)) +} + +async fn post_json(app: &Router, path: &str, body: &Value) -> TestResult<(StatusCode, String)> { + let request = Request::builder() + .method("POST") + .uri(path) + .header("content-type", "application/json") + .body(Body::from(serde_json::to_vec(body)?))?; + let response = app.clone().oneshot(request).await?; + let status = response.status(); + let bytes = response.into_body().collect().await?.to_bytes(); + Ok((status, String::from_utf8(bytes.to_vec())?)) +} + +/// Every `data:` frame of an SSE body, parsed as JSON. +fn sse_events(body: &str) -> Vec { + body.lines() + .filter_map(|line| line.strip_prefix("data: ")) + .filter(|data| *data != "[DONE]") + .filter_map(|data| serde_json::from_str(data).ok()) + .collect() +} + +fn event_types(events: &[Value]) -> Vec<&str> { + events + .iter() + .map(|event| event["type"].as_str().unwrap_or_default()) + .collect() +} + +/// A Codex turn: the tools Codex offers and one user message naming the gateway scenario. +fn codex_turn(route: &str, scenario: &str, stream: bool) -> Value { + json!({ + "model": route, + "stream": stream, + "tools": [ + {"type": "custom", "name": "exec", "description": "Run JavaScript", "format": {"type": "text"}}, + {"type": "function", "name": "shell", "description": "Run a command", + "parameters": {"type": "object", "properties": {"cmd": {"type": "string"}}}} + ], + "tool_choice": "auto", + "parallel_tool_calls": true, + "input": [user_text(&format!("scenario:{scenario}"))] + }) +} + +fn user_text(text: &str) -> Value { + json!({"type": "message", "role": "user", "content": [{"type": "input_text", "text": text}]}) +} + +/// Answers like LiteLLM in front of Bedrock Claude. The `scenario:` text in the request +/// selects the response stream; see [`gateway_output`]. +async fn gateway( + State(calls): State>>>, + uri: Uri, + Json(body): Json, +) -> Response { + calls.lock().await.push(body.clone()); + if calls_a_tool(&body) && !defines_tools(&body) { + return ( + StatusCode::BAD_REQUEST, + Json(json!({"error": {"message": LITELLM_TOOLS_ERROR, "type": "invalid_request_error", "code": "400"}})), + ) + .into_response(); + } + let model = body["model"].as_str().unwrap_or_default(); + if uri.path().ends_with("/chat/completions") { + return Json(json!({ + "id": "chatcmpl-gateway", "object": "chat.completion", "model": model, + "choices": [{"index": 0, "finish_reason": "stop", "message": {"role": "assistant", "content": "ok"}}], + "usage": {"prompt_tokens": 1, "completion_tokens": 1, "total_tokens": 2} + })) + .into_response(); + } + let (mut events, terminal) = gateway_output(&body); + if body["stream"] != true { + return Json(terminal["response"].clone()).into_response(); + } + let mut created = terminal["response"].clone(); + created["status"] = json!("in_progress"); + created["output"] = json!([]); + events.insert(0, json!({"type": "response.created", "response": created})); + events.push(terminal); + // The real gateway sends data-only frames without `event:` names. + let frames = events + .into_iter() + .map(|event| Ok::(Event::default().data(event.to_string()))); + Sse::new(futures_util::stream::iter(frames)).into_response() +} + +fn calls_a_tool(body: &Value) -> bool { + let responses_call = body["input"].as_array().into_iter().flatten().any(|item| { + matches!( + item["type"].as_str(), + Some("function_call" | "custom_tool_call") + ) + }); + let chat_call = body["messages"] + .as_array() + .into_iter() + .flatten() + .any(|message| message.get("tool_calls").is_some()); + responses_call || chat_call +} + +fn defines_tools(body: &Value) -> bool { + body["tools"] + .as_array() + .is_some_and(|tools| !tools.is_empty()) + || body["input"] + .as_array() + .into_iter() + .flatten() + .any(|item| item["type"] == "additional_tools") +} + +/// The streamed events between `response.created` and the terminal event, plus the terminal +/// event itself, for the scenario named in the request. +fn gateway_output(body: &Value) -> (Vec, Value) { + let text = body.to_string(); + let scenario: String = text + .split("scenario:") + .nth(1) + .unwrap_or_default() + .chars() + .take_while(|c| c.is_ascii_lowercase() || *c == '-') + .collect(); + let mut items = Vec::new(); + match scenario.as_str() { + "custom" => items.push(litellm_custom_call(1, "call_1", "ls")), + "two-custom" => { + items.push(litellm_custom_call(1, "call_1", "ls")); + items.push(litellm_custom_call(2, "call_2", "pwd")); + } + "custom-and-function" => { + items.push(litellm_custom_call(1, "call_1", "ls")); + let arguments = r#"{"cmd": "pwd"}"#; + items.push(function_call(2, "call_2", arguments, arguments)); + } + "native-custom" => items.push(openai_custom_call(0, "call_1", "ls\n")), + "conflicting-arguments" => { + items.push(function_call( + 0, + "call_1", + r#"{"cmd": "ls"}"#, + r#"{"cmd": "pwd"}"#, + )); + } + "conflicting-text" => items.push(text_message(0, "Hello", "Goodbye")), + "long-answer" if body.get("max_output_tokens").is_none() => { + let (events, item) = text_message(0, "1\n2\n3\n", "1\n2\n3\n"); + let mut response = + response_body(body, "incomplete", vec![item], GATEWAY_DEFAULT_OUTPUT_CAP); + response["incomplete_details"] = json!({"reason": "max_output_tokens"}); + let terminal = json!({"type": "response.incomplete", "response": response}); + return (events, terminal); + } + _ => items.push(text_message(0, "ok", "ok")), + } + // After tool calls, the gateway closes an empty text message at output index 0 that it + // never announced. + if items + .iter() + .any(|(_, item)| item["type"] == "custom_tool_call") + && scenario != "native-custom" + { + items.push(litellm_empty_message()); + } + let events = items + .iter() + .flat_map(|(events, _)| events.clone()) + .collect(); + let mut output: Vec<(u64, Value)> = items + .into_iter() + .map(|(events, item)| (output_index(&events), item)) + .collect(); + output.sort_by_key(|(index, _)| *index); + let output = output.into_iter().map(|(_, item)| item).collect(); + let terminal = json!({"type": "response.completed", "response": response_body(body, "completed", output, 1)}); + (events, terminal) +} + +fn output_index(events: &[Value]) -> u64 { + events + .first() + .and_then(|event| event["output_index"].as_u64()) + .unwrap_or_default() +} + +fn response_body(body: &Value, status: &str, output: Vec, output_tokens: u64) -> Value { + json!({ + "id": "resp_gateway", "object": "response", "model": body["model"], "status": status, + "output": output, + "usage": {"input_tokens": 1, "output_tokens": output_tokens, "total_tokens": 1 + output_tokens} + }) +} + +/// A freeform call in the gateway's shape: function-style argument deltas that spell +/// `{"content": ...}`, then a finished `custom_tool_call` whose `input` is the bare text. +fn litellm_custom_call(index: u64, call_id: &str, input: &str) -> (Vec, Value) { + let id = format!("ctc_{call_id}"); + let call = json!({"type": "custom_tool_call", "id": id, "call_id": call_id, "name": "exec"}); + let mut added = call.clone(); + added["status"] = json!("in_progress"); + added["input"] = json!(""); + let mut done = call; + done["status"] = json!("completed"); + done["input"] = json!(input); + let arguments = json!({"content": input}).to_string(); + let (first, second) = arguments.split_at(arguments.len() / 2); + let events = vec![ + json!({"type": "response.output_item.added", "output_index": index, "item": added}), + json!({"type": "response.function_call_arguments.delta", "item_id": id, "output_index": index, "delta": first}), + json!({"type": "response.function_call_arguments.delta", "item_id": id, "output_index": index, "delta": second}), + json!({"type": "response.function_call_arguments.done", "item_id": id, "output_index": index, "arguments": arguments}), + json!({"type": "response.output_item.done", "output_index": index, "item": done}), + ]; + (events, done) +} + +/// A freeform call in OpenAI's own shape, which streams the input with custom input deltas. +fn openai_custom_call(index: u64, call_id: &str, input: &str) -> (Vec, Value) { + let id = format!("ctc_{call_id}"); + let call = json!({"type": "custom_tool_call", "id": id, "call_id": call_id, "name": "exec"}); + let mut added = call.clone(); + added["status"] = json!("in_progress"); + added["input"] = json!(""); + let mut done = call; + done["status"] = json!("completed"); + done["input"] = json!(input); + let events = vec![ + json!({"type": "response.output_item.added", "output_index": index, "item": added}), + json!({"type": "response.custom_tool_call_input.delta", "item_id": id, "output_index": index, "delta": input}), + json!({"type": "response.custom_tool_call_input.done", "item_id": id, "output_index": index, "input": input}), + json!({"type": "response.output_item.done", "output_index": index, "item": done}), + ]; + (events, done) +} + +/// A function call whose streamed arguments are `streamed` and whose finished item says `done`. +fn function_call( + index: u64, + call_id: &str, + streamed: &str, + done_arguments: &str, +) -> (Vec, Value) { + let id = format!("fc_{call_id}"); + let call = json!({"type": "function_call", "id": id, "call_id": call_id, "name": "shell"}); + let mut added = call.clone(); + added["status"] = json!("in_progress"); + added["arguments"] = json!(""); + let mut done = call; + done["status"] = json!("completed"); + done["arguments"] = json!(done_arguments); + let events = vec![ + json!({"type": "response.output_item.added", "output_index": index, "item": added}), + json!({"type": "response.function_call_arguments.delta", "item_id": id, "output_index": index, "delta": streamed}), + json!({"type": "response.function_call_arguments.done", "item_id": id, "output_index": index, "arguments": streamed}), + json!({"type": "response.output_item.done", "output_index": index, "item": done}), + ]; + (events, done) +} + +/// A text message whose streamed text is `streamed` and whose finished item says `done`. +fn text_message(index: u64, streamed: &str, done_text: &str) -> (Vec, Value) { + let added = json!({"type": "message", "id": "msg_1", "role": "assistant", "status": "in_progress", "content": []}); + let done = json!({"type": "message", "id": "msg_1", "role": "assistant", "status": "completed", + "content": [{"type": "output_text", "text": done_text, "annotations": []}]}); + let events = vec![ + json!({"type": "response.output_item.added", "output_index": index, "item": added}), + json!({"type": "response.content_part.added", "item_id": "msg_1", "output_index": index, "content_index": 0, + "part": {"type": "output_text", "text": "", "annotations": []}}), + json!({"type": "response.output_text.delta", "item_id": "msg_1", "output_index": index, "content_index": 0, "delta": streamed}), + json!({"type": "response.output_text.done", "item_id": "msg_1", "output_index": index, "content_index": 0, "text": done_text}), + json!({"type": "response.output_item.done", "output_index": index, "item": done}), + ]; + (events, done) +} + +/// The empty text message the gateway closes at output index 0 after a tool call. +fn litellm_empty_message() -> (Vec, Value) { + let done = json!({"type": "message", "id": "msg_empty", "role": "assistant", "status": "completed", + "content": [{"type": "output_text", "text": "", "annotations": []}]}); + let events = vec![ + json!({"type": "response.output_text.done", "item_id": "msg_empty", "output_index": 0, "content_index": 0, "text": ""}), + json!({"type": "response.content_part.done", "item_id": "msg_empty", "output_index": 0, "content_index": 0, + "part": {"type": "output_text", "text": "", "annotations": []}}), + json!({"type": "response.output_item.done", "output_index": 0, "item": done}), + ]; + (events, done) +} + +/// The tool calls a stream finished, as `(type, name, input or arguments)`. +fn finished_tool_calls(events: &[Value]) -> Vec<(String, String, String)> { + events + .iter() + .filter(|event| event["type"] == "response.output_item.done") + .map(|event| &event["item"]) + .filter(|item| { + matches!( + item["type"].as_str(), + Some("custom_tool_call" | "function_call") + ) + }) + .map(|item| { + let value = item["input"].as_str().or(item["arguments"].as_str()); + ( + item["type"].as_str().unwrap_or_default().to_string(), + item["name"].as_str().unwrap_or_default().to_string(), + value.unwrap_or_default().to_string(), + ) + }) + .collect() +} + +/// An expected finished tool call: `(type, name, input or arguments)`. +type ToolCall<'a> = (&'a str, &'a str, &'a str); + +/// Codex showed "Reconnecting... (stream closed before response.completed)" after every tool +/// call because the server ended the stream after the gateway's freeform call. +#[tokio::test] +async fn codex_tool_call_streams_reach_response_completed() -> TestResult { + let gateway = Gateway::start().await?; + let app = app(&gateway)?; + let cases: [(&str, &[ToolCall]); 4] = [ + ("custom", &[("custom_tool_call", "exec", "ls")]), + ( + "two-custom", + &[ + ("custom_tool_call", "exec", "ls"), + ("custom_tool_call", "exec", "pwd"), + ], + ), + ( + "custom-and-function", + &[ + ("custom_tool_call", "exec", "ls"), + ("function_call", "shell", r#"{"cmd": "pwd"}"#), + ], + ), + // OpenAI streams freeform input with its own events; it must keep working. + ("native-custom", &[("custom_tool_call", "exec", "ls\n")]), + ]; + for route in CLAUDE_ROUTES { + for (scenario, expected) in cases { + let case = format!("{route} {scenario}"); + let (status, body) = + post_json(&app, "/v1/responses", &codex_turn(route, scenario, true)).await?; + assert_eq!(status, StatusCode::OK, "{case}: {body}"); + let events = sse_events(&body); + let types = event_types(&events); + assert_eq!( + types.last(), + Some(&"response.completed"), + "{case}: {types:?}" + ); + assert!(!types.contains(&"error"), "{case}: {types:?}"); + let expected: Vec<_> = expected + .iter() + .map(|(kind, name, value)| (kind.to_string(), name.to_string(), value.to_string())) + .collect(); + assert_eq!(finished_tool_calls(&events), expected, "{case}"); + assert_eq!( + gateway.only_call().await?["model"], + "model/claude", + "{case}" + ); + } + } + Ok(()) +} + +/// A finished item that contradicts content that was already streamed ends the stream with an +/// error event in its place. The contradicting event must not be forwarded as if it were the +/// error, which ended the stream with no error event and no log. +#[tokio::test] +async fn contradicting_snapshots_end_the_stream_with_an_error_event() -> TestResult { + let gateway = Gateway::start().await?; + let app = app(&gateway)?; + for route in CLAUDE_ROUTES { + for scenario in ["conflicting-arguments", "conflicting-text"] { + let case = format!("{route} {scenario}"); + let (status, body) = + post_json(&app, "/v1/responses", &codex_turn(route, scenario, true)).await?; + assert_eq!(status, StatusCode::OK, "{case}: {body}"); + let events = sse_events(&body); + let types = event_types(&events); + let last = events.last().ok_or("the stream must not be empty")?; + assert_eq!(last["type"], "error", "{case}: {types:?}"); + assert_eq!(last["message"], CONFLICT_MESSAGE, "{case}"); + // The contradicting item is replaced by the error, and nothing follows it. + assert!( + !types.contains(&"response.output_item.done"), + "{case}: {types:?}" + ); + assert!(!types.contains(&"response.completed"), "{case}: {types:?}"); + gateway.only_call().await?; + } + } + Ok(()) +} + +/// Codex sends no `max_output_tokens`, so the gateway stopped Sonnet at 4,096 tokens and Codex +/// ended long turns with an empty reply. A target's `extra_body` limit lifts the cap without +/// overriding a limit the caller sets. +#[tokio::test] +async fn target_output_limit_lifts_the_gateway_default_cap() -> TestResult { + let gateway = Gateway::start().await?; + let app = app(&gateway)?; + + // Without a configured limit the gateway cuts the answer off, and the client receives + // `response.incomplete`. + let (status, body) = post_json( + &app, + "/v1/responses", + &codex_turn("gateway/uncapped", "long-answer", true), + ) + .await?; + assert_eq!(status, StatusCode::OK, "{body}"); + let events = sse_events(&body); + assert_eq!( + event_types(&events).last(), + Some(&"response.incomplete"), + "{body}" + ); + assert!( + gateway + .only_call() + .await? + .get("max_output_tokens") + .is_none() + ); + + for route in CLAUDE_ROUTES { + for stream in [true, false] { + let case = format!("{route} stream={stream}"); + let (status, body) = post_json( + &app, + "/v1/responses", + &codex_turn(route, "long-answer", stream), + ) + .await?; + assert_eq!(status, StatusCode::OK, "{case}: {body}"); + if stream { + let events = sse_events(&body); + assert_eq!( + event_types(&events).last(), + Some(&"response.completed"), + "{case}: {body}" + ); + } else { + assert_eq!( + serde_json::from_str::(&body)?["status"], + "completed", + "{case}" + ); + } + let call = gateway.only_call().await?; + assert_eq!(call["max_output_tokens"], CONFIGURED_OUTPUT_LIMIT, "{case}"); + } + + let mut limited = codex_turn(route, "long-answer", true); + limited["max_output_tokens"] = json!(1000); + let (status, body) = post_json(&app, "/v1/responses", &limited).await?; + assert_eq!(status, StatusCode::OK, "{route}: {body}"); + assert_eq!( + gateway.only_call().await?["max_output_tokens"], + 1000, + "{route}" + ); + } + Ok(()) +} + +/// The `(type, name)` of each tool definition in a gateway request, for either OpenAI API. +fn defined_tools(call: &Value) -> Vec<(String, String)> { + call["tools"] + .as_array() + .into_iter() + .flatten() + .map(|tool| { + let name = tool["name"].as_str().or(tool["function"]["name"].as_str()); + ( + tool["type"].as_str().unwrap_or_default().to_string(), + name.unwrap_or_default().to_string(), + ) + }) + .collect() +} + +fn codex_compaction(route: &str, stream: bool) -> Value { + json!({ + "model": route, + "stream": stream, + "tools": [], + "tool_choice": "auto", + "parallel_tool_calls": false, + "input": [ + user_text("List files"), + {"type": "custom_tool_call", "call_id": "call_1", "name": "exec", "input": "ls"}, + {"type": "custom_tool_call_output", "call_id": "call_1", "output": "README.md"}, + {"type": "function_call", "call_id": "call_2", "name": "shell", "arguments": "{}"}, + {"type": "function_call_output", "call_id": "call_2", "output": "ok"}, + {"type": "function_call", "call_id": "call_3", "name": "shell", "arguments": "{}"}, + {"type": "function_call_output", "call_id": "call_3", "output": "ok"}, + {"type": "function_call", "call_id": "call_4", "namespace": "collaboration", + "name": "spawn_agent", "arguments": "{}"}, + {"type": "function_call_output", "call_id": "call_4", "output": "ok"}, + user_text("Summarize the conversation.") + ] + }) +} + +/// Codex compacts a long thread by sending its tool-call history with an empty `tools` list. +/// The gateway rejected those requests with HTTP 400, so compaction never finished. +#[tokio::test] +async fn tool_history_without_tools_gets_definitions_the_gateway_accepts() -> TestResult { + let gateway = Gateway::start().await?; + let app = app(&gateway)?; + let codex_tools = [ + ("custom".to_string(), "exec".to_string()), + ("function".to_string(), "shell".to_string()), + ( + "function".to_string(), + "collaboration__spawn_agent".to_string(), + ), + ]; + for route in CLAUDE_ROUTES { + for stream in [true, false] { + let case = format!("{route} compaction stream={stream}"); + let (status, body) = + post_json(&app, "/v1/responses", &codex_compaction(route, stream)).await?; + assert_eq!(status, StatusCode::OK, "{case}: {body}"); + if stream { + let types = event_types(&sse_events(&body)).join(","); + assert!(types.ends_with("response.completed"), "{case}: {types}"); + } + let call = gateway.only_call().await?; + assert_eq!(call["model"], "model/claude", "{case}"); + assert_eq!(defined_tools(&call), codex_tools, "{case}"); + assert_eq!(call["tool_choice"], "none", "{case}"); + } + + // Anthropic Messages clients such as Claude Code reach the same target through + // translation. + let messages = json!({ + "model": route, + "max_tokens": 300, + "messages": [ + {"role": "user", "content": "List files"}, + {"role": "assistant", "content": [{"type": "tool_use", "id": "toolu_1", "name": "Bash", "input": {"command": "ls"}}]}, + {"role": "user", "content": [ + {"type": "tool_result", "tool_use_id": "toolu_1", "content": "README.md"}, + {"type": "text", "text": "Summarize the conversation."} + ]} + ] + }); + let (status, body) = post_json(&app, "/v1/messages", &messages).await?; + assert_eq!(status, StatusCode::OK, "{route} messages: {body}"); + let call = gateway.only_call().await?; + assert_eq!( + defined_tools(&call), + [("function".to_string(), "Bash".to_string())], + "{route} messages" + ); + assert_eq!(call["tool_choice"], "none", "{route} messages"); + } + + let chat = json!({ + "model": "gateway/chat", + "messages": [ + {"role": "user", "content": "List files"}, + {"role": "assistant", "content": null, "tool_calls": [ + {"id": "call_1", "type": "function", "function": {"name": "shell", "arguments": "{}"}}, + {"id": "call_2", "type": "function", "function": {"name": "shell", "arguments": "{}"}} + ]}, + {"role": "tool", "tool_call_id": "call_1", "content": "README.md"}, + {"role": "tool", "tool_call_id": "call_2", "content": "README.md"}, + {"role": "user", "content": "Summarize the conversation."} + ] + }); + let (status, body) = post_json(&app, "/v1/chat/completions", &chat).await?; + assert_eq!(status, StatusCode::OK, "chat: {body}"); + let call = gateway.only_call().await?; + assert_eq!( + defined_tools(&call), + [("function".to_string(), "shell".to_string())] + ); + assert_eq!(call["tool_choice"], "none"); + Ok(()) +} + +/// Requests that define their own tools, or that call no tools, reach the gateway unchanged. +#[tokio::test] +async fn requests_with_their_own_tools_or_no_tool_history_are_unchanged() -> TestResult { + let gateway = Gateway::start().await?; + let app = app(&gateway)?; + for route in CLAUDE_ROUTES { + let mut defined = codex_compaction(route, true); + defined["tools"] = json!([{"type": "function", "name": "shell", "description": "Run a command", + "parameters": {"type": "object"}}]); + let (status, body) = post_json(&app, "/v1/responses", &defined).await?; + assert_eq!(status, StatusCode::OK, "{route} defined: {body}"); + let call = gateway.only_call().await?; + assert_eq!(call["tools"], defined["tools"], "{route} defined"); + assert_eq!(call["tool_choice"], "auto", "{route} defined"); + + // Codex's Responses-lite requests carry their tools inside `input`. + let mut lite = codex_compaction(route, true); + let lite_tools = json!({"type": "additional_tools", "role": "developer", + "tools": [{"type": "function", "name": "shell", "parameters": {"type": "object"}}]}); + lite.as_object_mut() + .ok_or("request must be an object")? + .remove("tools"); + lite["input"] + .as_array_mut() + .ok_or("input must be an array")? + .insert(0, lite_tools.clone()); + let (status, body) = post_json(&app, "/v1/responses", &lite).await?; + assert_eq!(status, StatusCode::OK, "{route} lite: {body}"); + let call = gateway.only_call().await?; + assert!(call.get("tools").is_none(), "{route} lite: {call}"); + assert_eq!(call["input"][0], lite_tools, "{route} lite"); + assert_eq!(call["tool_choice"], "auto", "{route} lite"); + + let mut plain = codex_turn(route, "ok", true); + plain["tools"] = json!([]); + let (status, body) = post_json(&app, "/v1/responses", &plain).await?; + assert_eq!(status, StatusCode::OK, "{route} plain: {body}"); + let call = gateway.only_call().await?; + assert_eq!(defined_tools(&call), [], "{route} plain"); + assert_eq!(call["tool_choice"], "auto", "{route} plain"); + } + Ok(()) +} diff --git a/crates/switchyard-server/tests/server.rs b/crates/switchyard-server/tests/server.rs index 805c54e1da..a000f8f735 100644 --- a/crates/switchyard-server/tests/server.rs +++ b/crates/switchyard-server/tests/server.rs @@ -61,15 +61,6 @@ impl MockUpstream { post(upstream_responses_requires_forwarded_auth), ) .route("/silo/{silo}/responses", post(upstream_responses_silo)) - .route( - "/gateway-stream/responses", - post(upstream_gateway_tool_stream), - ) - .route("/bedrock-gateway/responses", post(upstream_bedrock_gateway)) - .route( - "/bedrock-gateway/chat/completions", - post(upstream_bedrock_gateway), - ) .route("/capture", post(upstream_redirect_capture)) .route("/v1/messages/count_tokens", post(upstream_count_tokens)) .route( @@ -3292,354 +3283,6 @@ target = "openai" Ok(()) } -/// Streams a tool call the way the LiteLLM Responses gateway in front of Bedrock Claude does. -/// The gateway sends data-only frames, streams a custom tool's call as -/// `response.function_call_arguments.delta` events whose JSON differs from the finished -/// item's `input`, and closes an empty text message at output index 0 after the call. With -/// `conflicting-arguments` in the request, the call is a `function_call` whose finished -/// `arguments` do not start with the streamed deltas. -async fn upstream_gateway_tool_stream( - State(calls): State>>>, - Json(body): Json, -) -> HttpResponse { - calls.lock().await.push(body.clone()); - let model = body["model"].as_str().unwrap_or_default(); - let call = - json!({"type": "custom_tool_call", "id": "ctc_1", "call_id": "call_1", "name": "exec"}); - let mut added = call.clone(); - added["status"] = json!("in_progress"); - added["input"] = json!(""); - let mut done = call; - done["status"] = json!("completed"); - done["input"] = json!("ls"); - if body.to_string().contains("conflicting-arguments") { - let call = - json!({"type": "function_call", "id": "fc_1", "call_id": "call_1", "name": "exec"}); - added = call.clone(); - added["status"] = json!("in_progress"); - added["arguments"] = json!(""); - done = call; - done["status"] = json!("completed"); - done["arguments"] = json!("{\"path\": \"b\"}"); - } - let message = json!({"type": "message", "id": "msg_1", "role": "assistant", "status": "completed", - "content": [{"type": "output_text", "text": "", "annotations": []}]}); - let response = json!({"id": "resp_gateway", "object": "response", "model": model, "status": "completed", - "output": [message, done], - "usage": {"input_tokens": 1, "output_tokens": 1, "total_tokens": 2}}); - let mut created = response.clone(); - created["status"] = json!("in_progress"); - created["output"] = json!([]); - let events = [ - json!({"type": "response.created", "response": created}), - json!({"type": "response.output_item.added", "output_index": 1, "item": added}), - json!({"type": "response.function_call_arguments.delta", "item_id": "ctc_1", "output_index": 1, "delta": "{\"content\": "}), - json!({"type": "response.function_call_arguments.delta", "item_id": "ctc_1", "output_index": 1, "delta": "\"ls\"}"}), - json!({"type": "response.function_call_arguments.done", "item_id": "ctc_1", "output_index": 1, "arguments": "{\"content\": \"ls\"}"}), - json!({"type": "response.output_item.done", "output_index": 1, "item": done}), - json!({"type": "response.output_text.done", "item_id": "msg_1", "output_index": 0, "content_index": 0, "text": ""}), - json!({"type": "response.content_part.done", "item_id": "msg_1", "output_index": 0, "content_index": 0, - "part": {"type": "output_text", "text": "", "annotations": []}}), - json!({"type": "response.output_item.done", "output_index": 0, "item": message}), - json!({"type": "response.completed", "response": response}), - ]; - let stream = futures_util::stream::iter( - events - .into_iter() - .map(|event| Ok::(Event::default().data(event.to_string()))), - ); - Sse::new(stream).into_response() -} - -fn gateway_stream_config(base_url: &str) -> String { - let root = base_url.trim_end_matches("/v1"); - format!( - r#" -schema_version = 1 - -[llm_clients.gateway] -format = "openai_responses" -base_url = "{root}/gateway-stream" -max_retries = 0 - -[targets.claude] -id = "model/gateway-claude" -llm_client = "gateway" - -[routes.claude] -id = "switchyard/gateway-claude" -type = "passthrough" -target = "claude" -"# - ) -} - -#[tokio::test] -async fn responses_stream_completes_a_gateway_custom_tool_call() -> TestResult { - let upstream = MockUpstream::start().await?; - let app = build_switchyard_router(load_test_config(&gateway_stream_config( - &upstream.base_url, - ))?); - let response = send( - &app, - "POST", - "/v1/responses", - Some(json!({ - "model": "switchyard/gateway-claude", - "input": "list files", - "tools": [{"type": "custom", "name": "exec", "format": {"type": "text"}}], - "stream": true - })), - ) - .await?; - assert_eq!(response.status, StatusCode::OK); - let events = sse_events(response.text()?); - let call = events - .iter() - .find(|event| { - event["type"] == "response.output_item.done" - && event["item"]["type"] == "custom_tool_call" - }) - .ok_or("the stream must close the custom tool call")?; - assert_eq!(call["item"]["input"], "ls"); - let last = events.last().ok_or("the stream must not be empty")?; - assert_eq!(last["type"], "response.completed", "{events:#?}"); - Ok(()) -} - -#[tokio::test] -async fn responses_stream_reports_a_conflicting_tool_call_snapshot_as_an_error() -> TestResult { - let upstream = MockUpstream::start().await?; - let app = build_switchyard_router(load_test_config(&gateway_stream_config( - &upstream.base_url, - ))?); - let response = send( - &app, - "POST", - "/v1/responses", - Some(json!({ - "model": "switchyard/gateway-claude", - "input": "conflicting-arguments", - "tools": [{"type": "function", "name": "exec", "parameters": {"type": "object"}}], - "stream": true - })), - ) - .await?; - assert_eq!(response.status, StatusCode::OK); - let events = sse_events(response.text()?); - // The finished call contradicts the streamed arguments, so the server sends an error - // event in its place and ends the stream there. - let last = events.last().ok_or("the stream must not be empty")?; - assert_eq!(last["type"], "error", "{events:#?}"); - assert_eq!( - last["message"], - "Responses snapshot conflicts with streamed content" - ); - assert!( - !events - .iter() - .any(|event| event["type"] == "response.output_item.done"), - "{events:#?}" - ); - Ok(()) -} - -/// Answers like LiteLLM in front of Bedrock Claude: a request whose history calls a tool but -/// that defines no tools gets HTTP 400, and any other request gets the text "ok". -async fn upstream_bedrock_gateway( - State(calls): State>>>, - uri: Uri, - Json(body): Json, -) -> HttpResponse { - calls.lock().await.push(body.clone()); - let model = body["model"].as_str().unwrap_or_default(); - let calls_a_tool = body["input"].as_array().into_iter().flatten().any(|item| { - matches!( - item["type"].as_str(), - Some("function_call" | "custom_tool_call") - ) - }) || body["messages"] - .as_array() - .into_iter() - .flatten() - .any(|message| message.get("tool_calls").is_some()); - let defines_tools = body["tools"] - .as_array() - .is_some_and(|tools| !tools.is_empty()); - if calls_a_tool && !defines_tools { - return ( - StatusCode::BAD_REQUEST, - Json(json!({"error": { - "message": "litellm.UnsupportedParamsError: Bedrock doesn't support tool calling without `tools=` param specified.", - "type": "invalid_request_error", "code": "400" - }})), - ) - .into_response(); - } - if uri.path().ends_with("/chat/completions") { - return Json(json!({ - "id": "chatcmpl-gateway", "object": "chat.completion", "model": model, - "choices": [{"index": 0, "finish_reason": "stop", - "message": {"role": "assistant", "content": "ok"}}], - "usage": {"prompt_tokens": 1, "completion_tokens": 1, "total_tokens": 2} - })) - .into_response(); - } - let response = responses_body("resp_gateway", model, "ok"); - if body["stream"] != true { - return Json(response).into_response(); - } - let events = [ - json!({"type": "response.created", "response": {"id": "resp_gateway", "model": model, "status": "in_progress", "output": []}}), - json!({"type": "response.output_text.delta", "output_index": 0, "delta": "ok"}), - json!({"type": "response.completed", "response": response}), - ]; - let stream = futures_util::stream::iter( - events - .into_iter() - .map(|event| Ok::(Event::default().data(event.to_string()))), - ); - Sse::new(stream).into_response() -} - -#[tokio::test] -async fn requests_replaying_tool_calls_without_tools_get_tool_definitions() -> TestResult { - let upstream = MockUpstream::start().await?; - let root = upstream.base_url.trim_end_matches("/v1"); - let app = build_switchyard_router(load_test_config(&format!( - r#" -schema_version = 1 - -[llm_clients.responses] -format = "openai_responses" -base_url = "{root}/bedrock-gateway" -max_retries = 0 - -[llm_clients.chat] -format = "openai_chat" -base_url = "{root}/bedrock-gateway" -max_retries = 0 - -[targets.responses] -id = "model/bedrock-responses" -llm_client = "responses" - -[targets.chat] -id = "model/bedrock-chat" -llm_client = "chat" - -[routes.responses] -id = "switchyard/bedrock-responses" -type = "passthrough" -target = "responses" - -[routes.chat] -id = "switchyard/bedrock-chat" -type = "passthrough" -target = "chat" -"# - ))?); - - // Codex compacts a conversation by sending its history with an empty `tools` list. - let compaction = send( - &app, - "POST", - "/v1/responses", - Some(json!({ - "model": "switchyard/bedrock-responses", - "stream": true, - "tools": [], - "tool_choice": "auto", - "parallel_tool_calls": false, - "input": [ - {"type": "message", "role": "user", "content": [{"type": "input_text", "text": "List files"}]}, - {"type": "custom_tool_call", "call_id": "call_1", "name": "exec", "input": "ls"}, - {"type": "custom_tool_call_output", "call_id": "call_1", "output": "README.md"}, - {"type": "function_call", "call_id": "call_2", "name": "shell", "arguments": "{}"}, - {"type": "function_call_output", "call_id": "call_2", "output": "ok"}, - {"type": "function_call", "call_id": "call_3", "name": "shell", "arguments": "{}"}, - {"type": "function_call_output", "call_id": "call_3", "output": "ok"}, - {"type": "message", "role": "user", "content": [{"type": "input_text", "text": "Summarize the conversation."}]} - ] - })), - ) - .await?; - assert_eq!(compaction.status, StatusCode::OK, "{}", compaction.text()?); - let events = sse_events(compaction.text()?); - assert_eq!( - events.last().ok_or("the stream must not be empty")?["type"], - "response.completed" - ); - - let chat = send( - &app, - "POST", - "/v1/chat/completions", - Some(json!({ - "model": "switchyard/bedrock-chat", - "messages": [ - {"role": "user", "content": "List files"}, - {"role": "assistant", "content": null, "tool_calls": [{"id": "call_1", "type": "function", - "function": {"name": "shell", "arguments": "{}"}}]}, - {"role": "tool", "tool_call_id": "call_1", "content": "README.md"}, - {"role": "user", "content": "Summarize the conversation."} - ] - })), - ) - .await?; - assert_eq!(chat.status, StatusCode::OK, "{}", chat.text()?); - - // A request that already defines tools reaches the gateway with its own definitions. - let defined = send( - &app, - "POST", - "/v1/responses", - Some(json!({ - "model": "switchyard/bedrock-responses", - "tools": [{"type": "function", "name": "shell", "description": "Run a command", - "parameters": {"type": "object"}}], - "tool_choice": "auto", - "input": [ - {"type": "message", "role": "user", "content": [{"type": "input_text", "text": "List files"}]}, - {"type": "function_call", "call_id": "call_1", "name": "shell", "arguments": "{}"}, - {"type": "function_call_output", "call_id": "call_1", "output": "README.md"} - ] - })), - ) - .await?; - assert_eq!(defined.status, StatusCode::OK, "{}", defined.text()?); - - let calls = upstream.calls.lock().await; - let tool_list = |call: &Value| -> Vec<(String, String)> { - let tools = call["tools"].as_array().cloned().unwrap_or_default(); - tools - .iter() - .map(|tool| { - let name = tool["name"].as_str().or(tool["function"]["name"].as_str()); - ( - tool["type"].as_str().unwrap_or_default().to_string(), - name.unwrap_or_default().to_string(), - ) - }) - .collect() - }; - assert_eq!(calls.len(), 3); - assert_eq!( - tool_list(&calls[0]), - [ - ("custom".into(), "exec".into()), - ("function".into(), "shell".into()) - ] - ); - assert_eq!(calls[0]["tool_choice"], "none"); - assert_eq!(tool_list(&calls[1]), [("function".into(), "shell".into())]); - assert_eq!(calls[1]["tool_choice"], "none"); - assert_eq!(calls[2]["tools"][0]["description"], "Run a command"); - assert_eq!(calls[2]["tools"].as_array().map(Vec::len), Some(1)); - assert_eq!(calls[2]["tool_choice"], "auto"); - Ok(()) -} - /// Serves `/v1/responses` and `/v1/messages` for a stub gateway on one host and records the /// path and `authorization` values of each call. `/v1/responses` calls get a judge verdict. async fn upstream_gateway_records_auth( diff --git a/crates/switchyard-translation/tests/stream_translation.rs b/crates/switchyard-translation/tests/stream_translation.rs index 3a913765a3..fdd093c06e 100644 --- a/crates/switchyard-translation/tests/stream_translation.rs +++ b/crates/switchyard-translation/tests/stream_translation.rs @@ -3430,3 +3430,80 @@ fn responses_terminal_snapshots_recover_missing_output_once() -> TestResult { } Ok(()) } + +// LiteLLM in front of Bedrock streams a freeform call as function-style argument deltas that +// spell `{"content": ...}`. OpenAI streams it with custom input deltas. Both must decode to +// one call whose only arguments are the finished input, and the terminal snapshot that +// repeats the call must neither conflict with it nor repeat it. +#[test] +fn responses_custom_tool_calls_decode_from_the_finished_item() -> TestResult { + let engine = TranslationEngine::default(); + let source = WireFormat::OpenAiResponses; + let call = + json!({"type": "custom_tool_call", "id": "ctc_1", "call_id": "call_1", "name": "exec"}); + let mut added = call.clone(); + added["input"] = json!(""); + let mut done = call; + done["input"] = json!("ls"); + let added = json!({"type": "response.output_item.added", "output_index": 1, "item": added}); + let item_done = json!({"type": "response.output_item.done", "output_index": 1, "item": done}); + let completed = json!({"type": "response.completed", "response": {"id": "resp_1", "status": "completed", + "output": [{"type": "message", "role": "assistant", "content": [{"type": "output_text", "text": ""}]}, done]}}); + let litellm = vec![ + added.clone(), + json!({"type": "response.function_call_arguments.delta", "output_index": 1, "delta": "{\"content\": "}), + json!({"type": "response.function_call_arguments.delta", "output_index": 1, "delta": "\"ls\"}"}), + json!({"type": "response.function_call_arguments.done", "output_index": 1, "arguments": "{\"content\": \"ls\"}"}), + item_done.clone(), + completed.clone(), + ]; + let openai = vec![ + added, + json!({"type": "response.custom_tool_call_input.delta", "output_index": 1, "delta": "ls"}), + json!({"type": "response.custom_tool_call_input.done", "output_index": 1, "input": "ls"}), + item_done, + completed, + ]; + for (shape, events) in [("litellm", litellm), ("openai", openai)] { + let mut state = StreamTranslationState::new(source, WireFormat::OpenAiChat); + let mut chunks = Vec::new(); + for event in events { + chunks.extend( + engine + .decode_stream_event(&mut state, source, event)? + .normalized() + .to_vec(), + ); + } + assert!( + !chunks.iter().any(|chunk| matches!( + chunk, + LlmResponseChunk::DecodeError { .. } | LlmResponseChunk::StreamError { .. } + )), + "{shape}: {chunks:?}" + ); + let arguments: String = chunks + .iter() + .filter_map(|chunk| match chunk { + LlmResponseChunk::ToolCallDelta { + arguments_delta: Some(arguments), + .. + } => Some(arguments.as_str()), + _ => None, + }) + .collect(); + assert_eq!(arguments, r#"{"input":"ls"}"#, "{shape}"); + assert!( + chunks.iter().any(|chunk| matches!(chunk, + LlmResponseChunk::ToolCallDelta { id: Some(id), name: Some(name), .. } + if id == "call_1" && name == "exec")), + "{shape}: {chunks:?}" + ); + assert!( + chunks.iter().any(|chunk| matches!(chunk, + LlmResponseChunk::MessageStop { reason: Some(reason) } if reason == "tool_use")), + "{shape}: {chunks:?}" + ); + } + Ok(()) +} From 083cce82cb0afd51a023dfd315f42dc46480d24d Mon Sep 17 00:00:00 2001 From: Elyas Mehtabuddin Date: Sat, 10 Oct 2026 02:57:04 -0700 Subject: [PATCH 20/39] feat(desktop): install and update the app with Rust on macOS, Linux, and Windows Signed-off-by: Elyas Mehtabuddin --- .cargo/config.toml | 3 + Cargo.lock | 105 +- Cargo.toml | 3 +- INSTALLATION.md | 57 +- Makefile | 37 - README.md | 3 + crates/switchyard-desktop-install/Cargo.toml | 25 + crates/switchyard-desktop-install/prices.toml | 31 + crates/switchyard-desktop-install/src/lib.rs | 1278 ++++++++++++ crates/switchyard-desktop-install/src/main.rs | 214 ++ .../switchyard-desktop-install/src/windows.rs | 562 +++++ .../tests/fixture.txt | 35 + .../tests/install.rs | 670 ++++++ .../tests/windows.rs | 406 ++++ .../.gitignore | 0 .../Cargo.toml | 10 +- crates/switchyard-desktop/README.md | 361 ++++ .../build.rs | 2 +- crates/switchyard-desktop/icons/README.md | 38 + crates/switchyard-desktop/icons/icon.icns | Bin 0 -> 1726562 bytes crates/switchyard-desktop/icons/icon.ico | Bin 0 -> 52479 bytes crates/switchyard-desktop/icons/icon.png | Bin 0 -> 885182 bytes .../icons/tray.png | Bin .../icons/tray.rgba | Bin .../icons/tray.svg | 0 .../src/accounts.rs | 159 +- crates/switchyard-desktop/src/config.rs | 229 ++ crates/switchyard-desktop/src/controller.rs | 1852 +++++++++++++++++ .../src/gui.rs | 146 +- .../src/harness.rs | 191 +- crates/switchyard-desktop/src/health.rs | 116 ++ .../src/history.rs | 0 .../src/main.rs | 75 +- .../src/models.rs | 41 +- .../src/pricing.rs | 51 +- .../src/rollup.rs | 55 + .../src/server.rs | 220 +- .../src/server_config.rs | 202 +- crates/switchyard-desktop/src/sessions.rs | 682 ++++++ .../src/summary.rs | 6 +- crates/switchyard-desktop/src/tui.rs | 1217 +++++++++++ crates/switchyard-desktop/src/windows.rs | 119 ++ .../tauri.conf.json | 5 +- .../tests/frontend.test.cjs | 148 ++ crates/switchyard-desktop/tests/print.rs | 20 + .../tests/windows_terminal.rs | 70 + .../ui/analytics.js | 58 +- .../ui/app.css | 54 +- crates/switchyard-desktop/ui/app.js | 493 +++++ .../ui/index.html | 19 +- .../ui/vendor/LICENSE.echarts | 0 .../ui/vendor/NOTICE.echarts | 0 .../ui/vendor/echarts.min.js | 0 crates/switchyard-menubar/README.md | 300 --- crates/switchyard-menubar/icons/icon.png | Bin 1233641 -> 0 bytes crates/switchyard-menubar/src/config.rs | 83 - crates/switchyard-menubar/src/controller.rs | 904 -------- crates/switchyard-menubar/src/health.rs | 55 - crates/switchyard-menubar/src/sessions.rs | 364 ---- crates/switchyard-menubar/src/tui.rs | 702 ------- .../tests/frontend.test.cjs | 76 - crates/switchyard-menubar/ui/app.js | 304 --- crates/switchyard-server/README.md | 2 +- scripts/common.sh | 117 -- scripts/linux/common.sh | 8 - scripts/linux/install.sh | 97 - scripts/linux/uninstall.sh | 51 - scripts/macos/common.sh | 57 - scripts/macos/install.sh | 249 --- scripts/macos/uninstall.sh | 76 - tests/test_linux_install.py | 182 -- tests/test_macos_install.py | 278 --- 72 files changed, 9819 insertions(+), 4154 deletions(-) delete mode 100644 Makefile create mode 100644 crates/switchyard-desktop-install/Cargo.toml create mode 100644 crates/switchyard-desktop-install/prices.toml create mode 100644 crates/switchyard-desktop-install/src/lib.rs create mode 100644 crates/switchyard-desktop-install/src/main.rs create mode 100644 crates/switchyard-desktop-install/src/windows.rs create mode 100644 crates/switchyard-desktop-install/tests/fixture.txt create mode 100644 crates/switchyard-desktop-install/tests/install.rs create mode 100644 crates/switchyard-desktop-install/tests/windows.rs rename crates/{switchyard-menubar => switchyard-desktop}/.gitignore (100%) rename crates/{switchyard-menubar => switchyard-desktop}/Cargo.toml (74%) create mode 100644 crates/switchyard-desktop/README.md rename crates/{switchyard-menubar => switchyard-desktop}/build.rs (79%) create mode 100644 crates/switchyard-desktop/icons/README.md create mode 100644 crates/switchyard-desktop/icons/icon.icns create mode 100644 crates/switchyard-desktop/icons/icon.ico create mode 100644 crates/switchyard-desktop/icons/icon.png rename crates/{switchyard-menubar => switchyard-desktop}/icons/tray.png (100%) rename crates/{switchyard-menubar => switchyard-desktop}/icons/tray.rgba (100%) rename crates/{switchyard-menubar => switchyard-desktop}/icons/tray.svg (100%) rename crates/{switchyard-menubar => switchyard-desktop}/src/accounts.rs (55%) create mode 100644 crates/switchyard-desktop/src/config.rs create mode 100644 crates/switchyard-desktop/src/controller.rs rename crates/{switchyard-menubar => switchyard-desktop}/src/gui.rs (54%) rename crates/{switchyard-menubar => switchyard-desktop}/src/harness.rs (87%) create mode 100644 crates/switchyard-desktop/src/health.rs rename crates/{switchyard-menubar => switchyard-desktop}/src/history.rs (100%) rename crates/{switchyard-menubar => switchyard-desktop}/src/main.rs (59%) rename crates/{switchyard-menubar => switchyard-desktop}/src/models.rs (93%) rename crates/{switchyard-menubar => switchyard-desktop}/src/pricing.rs (77%) rename crates/{switchyard-menubar => switchyard-desktop}/src/rollup.rs (88%) rename crates/{switchyard-menubar => switchyard-desktop}/src/server.rs (71%) rename crates/{switchyard-menubar => switchyard-desktop}/src/server_config.rs (87%) create mode 100644 crates/switchyard-desktop/src/sessions.rs rename crates/{switchyard-menubar => switchyard-desktop}/src/summary.rs (97%) create mode 100644 crates/switchyard-desktop/src/tui.rs create mode 100644 crates/switchyard-desktop/src/windows.rs rename crates/{switchyard-menubar => switchyard-desktop}/tauri.conf.json (89%) create mode 100644 crates/switchyard-desktop/tests/frontend.test.cjs create mode 100644 crates/switchyard-desktop/tests/print.rs create mode 100644 crates/switchyard-desktop/tests/windows_terminal.rs rename crates/{switchyard-menubar => switchyard-desktop}/ui/analytics.js (61%) rename crates/{switchyard-menubar => switchyard-desktop}/ui/app.css (77%) create mode 100644 crates/switchyard-desktop/ui/app.js rename crates/{switchyard-menubar => switchyard-desktop}/ui/index.html (56%) rename crates/{switchyard-menubar => switchyard-desktop}/ui/vendor/LICENSE.echarts (100%) rename crates/{switchyard-menubar => switchyard-desktop}/ui/vendor/NOTICE.echarts (100%) rename crates/{switchyard-menubar => switchyard-desktop}/ui/vendor/echarts.min.js (100%) delete mode 100644 crates/switchyard-menubar/README.md delete mode 100644 crates/switchyard-menubar/icons/icon.png delete mode 100644 crates/switchyard-menubar/src/config.rs delete mode 100644 crates/switchyard-menubar/src/controller.rs delete mode 100644 crates/switchyard-menubar/src/health.rs delete mode 100644 crates/switchyard-menubar/src/sessions.rs delete mode 100644 crates/switchyard-menubar/src/tui.rs delete mode 100644 crates/switchyard-menubar/tests/frontend.test.cjs delete mode 100644 crates/switchyard-menubar/ui/app.js delete mode 100644 scripts/common.sh delete mode 100644 scripts/linux/common.sh delete mode 100755 scripts/linux/install.sh delete mode 100755 scripts/linux/uninstall.sh delete mode 100644 scripts/macos/common.sh delete mode 100755 scripts/macos/install.sh delete mode 100755 scripts/macos/uninstall.sh delete mode 100644 tests/test_linux_install.py delete mode 100644 tests/test_macos_install.py diff --git a/.cargo/config.toml b/.cargo/config.toml index 94a019606a..066b810119 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -10,3 +10,6 @@ rustflags = ["-C", "target-cpu=x86-64-v3", "-C", "force-frame-pointers=yes"] # Force frame pointers to make performance and memory profiling much easier [target.aarch64-unknown-linux-gnu] rustflags = ["-C", "target-cpu=neoverse-n1", "-C", "force-frame-pointers=yes"] + +[alias] +desktop = "run --package switchyard-desktop-install --" diff --git a/Cargo.lock b/Cargo.lock index 603163c79d..38ff98971d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2787,6 +2787,17 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "mslnk" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86c97310150b7f496a93f31690da7822b99d95ff68ca9d30fb09d3ad54375c76" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "log", +] + [[package]] name = "muda" version = "0.20.0" @@ -4351,6 +4362,29 @@ dependencies = [ "web-sys", ] +[[package]] +name = "rfd" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20dafead71c16a34e1ff357ddefc8afc11e7d51d6d2b9fbd07eaa48e3e540220" +dependencies = [ + "block2", + "dispatch2", + "js-sys", + "libc", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "percent-encoding", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.61.2", +] + [[package]] name = "ring" version = "0.17.14" @@ -4597,6 +4631,17 @@ dependencies = [ "smallvec", ] +[[package]] +name = "self-replace" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ec815b5eab420ab893f63393878d89c90fdd94c0bcc44c07abb8ad95552fb7" +dependencies = [ + "fastrand", + "tempfile", + "windows-sys 0.52.0", +] + [[package]] name = "semver" version = "1.0.28" @@ -5035,6 +5080,45 @@ dependencies = [ "serde_json", ] +[[package]] +name = "switchyard-desktop" +version = "0.3.0" +dependencies = [ + "chrono", + "objc2-app-kit", + "objc2-foundation", + "ratatui", + "rfd", + "security-framework", + "serde", + "serde_json", + "switchyard-desktop-install", + "switchyard-runner", + "tauri", + "tauri-build", + "tempfile", + "toml 0.9.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", + "url", + "uuid", + "windows", +] + +[[package]] +name = "switchyard-desktop-install" +version = "0.3.0" +dependencies = [ + "mslnk", + "plist", + "self-replace", + "serde", + "serde_json", + "tempfile", + "toml 0.9.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", + "windows-sys 0.61.2", +] + [[package]] name = "switchyard-libsy" version = "0.3.0" @@ -5088,27 +5172,6 @@ dependencies = [ "wiremock", ] -[[package]] -name = "switchyard-menubar" -version = "0.3.0" -dependencies = [ - "chrono", - "objc2-app-kit", - "objc2-foundation", - "ratatui", - "security-framework", - "serde", - "serde_json", - "switchyard-runner", - "tauri", - "tauri-build", - "tempfile", - "toml 0.9.12+spec-1.1.0", - "toml_edit 0.25.13+spec-1.1.0", - "url", - "uuid", -] - [[package]] name = "switchyard-nemo-relay-plugin" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index 5e64fbd9e8..3714296c55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,8 @@ members = [ "crates/protocol", "crates/switchyard-nemo-relay-plugin", "crates/switchyard-runner", - "crates/switchyard-menubar", + "crates/switchyard-desktop", + "crates/switchyard-desktop-install", "crates/switchyard-server", "crates/switchyard-skill-distillation", "crates/switchyard-soak", diff --git a/INSTALLATION.md b/INSTALLATION.md index 15755f0c10..4c808b2228 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -46,13 +46,16 @@ port while the service is stopped and receive your login and prompts. From a checkout, preview or install the service: ```bash -make install-linux-dry-run -make install-linux +cargo desktop install --dry-run +cargo desktop install systemctl --user status switchyard codex -p sy ``` -The installer builds and installs `~/.switchyard/bin/switchyard-server`. +The installer builds and installs `~/.switchyard/bin/switchyard-server` and +`~/.switchyard/bin/switchyard-desktop`. Run the same command to reinstall from +the current checkout; update the checkout first to install newer code. +Run `~/.switchyard/bin/switchyard-desktop --tui` to open the terminal app. It creates `~/.switchyard/composite.toml` if missing and keeps existing edits. It replaces `~/.config/systemd/user/switchyard.service` and restarts the service. It writes `~/.codex/sy.config.toml`, backing up a changed profile first. @@ -62,21 +65,60 @@ The profile format requires [Codex 0.134.0 or newer](https://developers.openai.c Remove any old `[profiles.sy]` table from `~/.codex/config.toml` before using it. Set `SY_HOME` or `SY_PORT` to change the server directory or port (default 4123). -`SY_HOME` must not contain whitespace, control characters, or a trailing -backslash; `SY_PORT` must contain only digits. `XDG_CONFIG_HOME` and `CODEX_HOME` +`SY_HOME` must be an absolute UTF-8 path without ASCII control characters. +`SY_PORT` must be a number from 1 to 65535. `XDG_CONFIG_HOME` and `CODEX_HOME` set the systemd and Codex config directories. Read server logs with `journalctl --user -u switchyard`. Routing records are stored in `~/.switchyard/routing.jsonl`. Use `systemctl --user edit switchyard` for service changes that survive reinstalling. -Remove the service and profile with `make uninstall-linux`. This also removes +Remove the service and profile with `cargo desktop uninstall`. This also removes marked Codex aliases left by older installs from existing `.bashrc` and `.zshrc` files. If upgrading an older install, uninstall first and run `unalias codex` in any open shell. The server directory, routing records, profile backups, and systemd drop-in files stay in place. Use the same path overrides when installing and uninstalling. +## Windows Desktop App + +From PowerShell in the repository, run: + +```powershell +cargo desktop install --dry-run +cargo desktop install +``` + +Windows needs the Rust MSVC toolchain, Visual Studio C++ build tools, and +[WebView2](https://v2.tauri.app/start/prerequisites/#windows). +The installer uses Task Scheduler for the current logged-in user. It installs +executables in `%LOCALAPPDATA%\Programs\Switchyard`, falling back to +`%USERPROFILE%\AppData\Local\Programs\Switchyard` when `LOCALAPPDATA` is unset. +It saves that location and adds a Start menu shortcut. Two independent tasks +start the server and desktop app after login with ordinary user privileges. +Quitting the app leaves the server running. + +Run `cargo desktop install` again to build and install the current checkout. +This Cargo command waits for installation to finish. The app's source update +uses the saved checkout and runs from a temporary Rust executable so Windows +can release and replace the installed files. Running the installed installer +also starts a temporary executable and returns before installation finishes; +read `SY_HOME\logs\update.log` for progress and errors. +The installer builds and validates before stopping the tasks. If a binary +replacement fails, it tries to restore the previous binaries. If restoration +also fails, the error names the directory containing recovery files. +Rerun installation if a later task or settings operation fails; the complete +installation is not one transaction. + +Settings, server config, accounts, and routing history stay in +`%USERPROFILE%\.switchyard` unless `SY_HOME` changes the directory. Server and app +logs are in `SY_HOME\logs`. Model-list keys entered in Routes are saved in the +current user's Windows Credential Manager. Coding tools keep their own login files. + +Use `cargo desktop uninstall` to stop and remove both tasks, the shortcut, and +the installed executables. Uninstall preserves settings, accounts, and history, +and makes a recovery copy of the Codex profile before removing it. + ## Rust Libraries Add the crates needed by an embedded application: @@ -106,3 +148,6 @@ uv run pytest tests/ -v The `dev` dependency group contains testing and linting tools and is not exposed in the published wheel metadata. + +See the [desktop and terminal quickstart](crates/switchyard-desktop/README.md) for +first-run setup, reviewed settings changes, usage, recovery, and safe uninstall. diff --git a/Makefile b/Makefile deleted file mode 100644 index 86ecf29290..0000000000 --- a/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -.DEFAULT_GOAL := help -.PHONY: help install-linux install-linux-dry-run uninstall-linux install-macos install-macos-dry-run uninstall-macos - -help: - @echo "install-linux Install the systemd user service and Codex profile" - @echo "install-linux-dry-run Preview installation without changes" - @echo "uninstall-linux Remove the service and Codex profile" - @echo "install-macos Install the background server and desktop app" - @echo "install-macos-dry-run Preview installation without changes" - @echo "uninstall-macos Remove the LaunchAgents and Codex profile" - -## Install the Switchyard background server as a systemd user service. -install-linux: - @scripts/linux/install.sh - -## Print what install-linux would do, without changing anything. -install-linux-dry-run: - @scripts/linux/install.sh --dry-run - -## Remove the systemd user service, the sy Codex profile, and the codex alias. -uninstall-linux: - @scripts/linux/uninstall.sh - -## This target installs the Switchyard background server and desktop app for this user. -install-macos: - @scripts/macos/install.sh - -## This target prints the commands that install-macos would run. -install-macos-dry-run: - @scripts/macos/install.sh --dry-run - -## This target removes the app, LaunchAgents, selected Codex profile, and legacy codex alias. -uninstall-macos: - @scripts/macos/uninstall.sh diff --git a/README.md b/README.md index ab16fee2cd..926c879f7d 100644 --- a/README.md +++ b/README.md @@ -93,3 +93,6 @@ releases. Pin the version you integrate. [Report an issue](https://github.com/NVIDIA-NeMo/Switchyard/issues) · [Contribute](CONTRIBUTING.md) · [Code of conduct](CODE_OF_CONDUCT.md) [Apache 2.0](LICENSE). Copyright NVIDIA Corporation. + +The [desktop and terminal quickstart](crates/switchyard-desktop/README.md) covers +local installation, coding-tool connections, sessions, usage, recovery, and uninstall. diff --git a/crates/switchyard-desktop-install/Cargo.toml b/crates/switchyard-desktop-install/Cargo.toml new file mode 100644 index 0000000000..02c27ea034 --- /dev/null +++ b/crates/switchyard-desktop-install/Cargo.toml @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +[package] +name = "switchyard-desktop-install" +version.workspace = true +edition.workspace = true +license.workspace = true +rust-version.workspace = true +publish = false + +[dependencies] +serde.workspace = true +serde_json.workspace = true +toml = "0.9" +toml_edit = "0.25" +tempfile = "3" + +[target.'cfg(windows)'.dependencies] +mslnk = "0.1.8" +self-replace = "1.5" +windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_System_Threading", "Win32_System_Diagnostics_ToolHelp", "Win32_Security_Credentials", "Win32_Security_Authorization", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging", "Win32_System_Console"] } + +[dev-dependencies] +plist = "1" diff --git a/crates/switchyard-desktop-install/prices.toml b/crates/switchyard-desktop-install/prices.toml new file mode 100644 index 0000000000..04af38ec8b --- /dev/null +++ b/crates/switchyard-desktop-install/prices.toml @@ -0,0 +1,31 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +# The baseline model prices caller-facing calls as if routing had not changed models. +# Savings subtract actual calls, including classifier calls, from that estimate. +baseline_model = "gpt-5.6-sol" + +[prices."gpt-5.6-sol"] +input_per_mtok = 1.25 +cached_input_per_mtok = 0.125 +output_per_mtok = 10.0 + +[prices."gpt-5.6-luna"] +input_per_mtok = 0.25 +cached_input_per_mtok = 0.025 +output_per_mtok = 2.0 + +[prices."gpt-5.6-terra"] +input_per_mtok = 0.05 +cached_input_per_mtok = 0.005 +output_per_mtok = 0.4 + +# With a ChatGPT login, Codex sends "Approve for me" reviews to +# codex-auto-review even without Switchyard, so this price copies the +# baseline_model rates. Reviews then add the same amount to the actual cost and +# the baseline. The dollars saved stay the same, but the percentage drops a +# little. Update this price if you change baseline_model. +[prices."codex-auto-review"] +input_per_mtok = 1.25 +cached_input_per_mtok = 0.125 +output_per_mtok = 10.0 diff --git a/crates/switchyard-desktop-install/src/lib.rs b/crates/switchyard-desktop-install/src/lib.rs new file mode 100644 index 0000000000..f52c2eebf0 --- /dev/null +++ b/crates/switchyard-desktop-install/src/lib.rs @@ -0,0 +1,1278 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! The source installer owns app bundles, service definitions, and installation metadata. + +use serde::{Deserialize, Serialize}; +use std::{ + fs, + io::{Read, Write}, + net::{SocketAddr, TcpStream}, + path::{Path, PathBuf}, + process::{Command, Stdio}, + thread, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +#[cfg(windows)] +pub mod windows; + +pub fn executable_name(name: &str) -> String { + format!("{name}{}", std::env::consts::EXE_SUFFIX) +} + +const SERVER: &str = "com.nvidia.switchyard.server"; +const DESKTOP: &str = "com.nvidia.switchyard.desktop"; +// Migration removes this LaunchAgent so the old app cannot restart alongside the desktop app. +const LEGACY_DESKTOP: &str = "com.nvidia.switchyard.menubar"; + +#[derive(Debug, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Settings { + pub home: PathBuf, + pub sy_home: PathBuf, + pub codex_home: PathBuf, + pub service_dir: PathBuf, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub app_dir: Option, + pub source: PathBuf, + pub cargo: PathBuf, + pub port: u16, + pub profile: String, + pub model: String, +} + +impl Settings { + pub fn for_uninstall() -> Result { + let defaults = Self::from_env()?; + let recorded = defaults.home.join(".switchyard-desktop-install.toml"); + let selected = if recorded.try_exists().map_err(|e| e.to_string())? { + Self::load(&recorded)? + } else { + return Ok(defaults); + }; + for (name, value, saved) in [ + ( + "SY_HOME", + defaults.sy_home.as_os_str(), + selected.sy_home.as_os_str(), + ), + ( + "CODEX_HOME", + defaults.codex_home.as_os_str(), + selected.codex_home.as_os_str(), + ), + ( + "SY_PROFILE", + std::ffi::OsStr::new(&defaults.profile), + std::ffi::OsStr::new(&selected.profile), + ), + ] { + if std::env::var_os(name).is_some() && value != saved { + return Err(format!( + "{name} differs from the recorded installation at {}. Use uninstall --settings FILE to choose a different installation.", + recorded.display() + )); + } + } + Ok(selected) + } + pub fn from_env() -> Result { + let home = std::env::var_os("HOME") + .or_else(|| std::env::var_os("USERPROFILE")) + .map(PathBuf::from) + .ok_or("Could not find your home directory.")?; + let path = |name, default| std::env::var_os(name).map(PathBuf::from).unwrap_or(default); + let config_home = path("XDG_CONFIG_HOME", home.join(".config")); + let value = |name: &str, default: &str| { + std::env::var(name).or_else(|error| match error { + std::env::VarError::NotPresent => Ok(default.to_owned()), + std::env::VarError::NotUnicode(_) => Err(format!("{name} must be UTF-8.")), + }) + }; + let port = value("SY_PORT", "4123")?; + if !port.bytes().all(|b| b.is_ascii_digit()) { + return Err("SY_PORT must be a number from 1 to 65535.".into()); + } + let settings = Self { + sy_home: path("SY_HOME", home.join(".switchyard")), + codex_home: path("CODEX_HOME", home.join(".codex")), + service_dir: if cfg!(target_os = "macos") { + home.join("Library/LaunchAgents") + } else if cfg!(windows) { + path("APPDATA", home.join("AppData/Roaming")) + .join("Microsoft/Windows/Start Menu/Programs") + } else { + config_home.join("systemd/user") + }, + app_dir: if cfg!(windows) { + Some(path("LOCALAPPDATA", home.join("AppData/Local")).join("Programs/Switchyard")) + } else { + None + }, + home, + source: Path::new(env!("CARGO_MANIFEST_DIR")) + .parent() + .and_then(Path::parent) + .ok_or("Could not find the source checkout.")? + .to_path_buf(), + cargo: PathBuf::from(env!("CARGO")), + port: port + .parse() + .map_err(|_| "SY_PORT must be a number from 1 to 65535.")?, + profile: value("SY_PROFILE", "sy")?, + model: value("SY_MODEL", "composite-gpt-6-sol-gpt-6-luna")?, + }; + settings.validate()?; + Ok(settings) + } + + pub fn load(file: &Path) -> Result { + let text = fs::read_to_string(file).map_err(|e| format!("Read {}: {e}", file.display()))?; + let settings: Self = + toml::from_str(&text).map_err(|e| format!("Parse {}: {e}", file.display()))?; + settings.validate()?; + Ok(settings) + } + + pub fn validate(&self) -> Result<(), String> { + if self.profile.is_empty() + || self.profile.len() > 128 + || !self.profile.as_bytes()[0].is_ascii_alphanumeric() + || !self + .profile + .bytes() + .all(|b| b.is_ascii_alphanumeric() || b == b'_' || b == b'-') + { + return Err("SY_PROFILE must start with an ASCII letter or digit and contain only ASCII letters, digits, underscores, or hyphens, up to 128 characters.".into()); + } + if self.model.is_empty() || self.model.bytes().any(|b| b.is_ascii_control()) { + return Err( + "SY_MODEL must be a nonempty public route ID without ASCII control characters." + .into(), + ); + } + if self.port == 0 { + return Err("SY_PORT must be a number from 1 to 65535.".into()); + } + for (name, path) in [ + ("HOME", &self.home), + ("SY_HOME", &self.sy_home), + ("CODEX_HOME", &self.codex_home), + ("service directory", &self.service_dir), + ("source checkout", &self.source), + ("Cargo executable", &self.cargo), + ] + .into_iter() + .chain(self.app_dir.as_ref().map(|path| ("LOCALAPPDATA", path))) + { + if !path.is_absolute() + || path + .to_str() + .is_none_or(|s| s.bytes().any(|b| b.is_ascii_control())) + { + return Err(format!( + "{name} must be an absolute UTF-8 path without ASCII control characters." + )); + } + } + Ok(()) + } + + pub fn app(&self) -> PathBuf { + self.home.join("Applications/Switchyard.app") + } + pub fn bin_dir(&self) -> PathBuf { + if cfg!(windows) { + self.app_dir + .clone() + .unwrap_or_else(|| self.home.join("AppData/Local/Programs/Switchyard")) + } else { + self.sy_home.join("bin") + } + } + pub fn binary(&self, name: &str) -> PathBuf { + self.bin_dir().join(executable_name(name)) + } + pub fn desktop_settings(&self) -> PathBuf { + self.sy_home.join("desktop.toml") + } + fn profile_file(&self) -> PathBuf { + self.codex_home + .join(format!("{}.config.toml", self.profile)) + } + fn release(&self, binary: &str) -> PathBuf { + self.source + .join("target/release") + .join(executable_name(binary)) + } +} + +/// The app reads this metadata to retain a custom SY_HOME when Finder or a Windows shortcut starts it. +pub fn bundle_metadata(executable: &Path) -> PathBuf { + if cfg!(windows) { + return executable + .parent() + .unwrap_or(Path::new(".")) + .join("install.toml"); + } + executable + .parent() + .and_then(Path::parent) + .unwrap_or(Path::new(".")) + .join("Resources/install.toml") +} + +/// The updater runs separately because installation restarts the app that requested it. +pub fn start_update(settings_file: &Path) -> Result { + let settings = Settings::load(settings_file)?; + let guard = update_lock(&settings)?; + let status = update_status(settings_file)?; + if update_starting(&status) { + return Err( + "A Switchyard update is already starting. View its progress in Settings.".into(), + ); + } + set_update_state( + &settings, + "starting", + "start", + "Starting the source update.", + )?; + let log_path = settings.sy_home.join("logs/update.log"); + let log = fs::OpenOptions::new() + .create(true) + .append(true) + .open(&log_path) + .map_err(|e| e.to_string())?; + let error_log = log.try_clone().map_err(|e| e.to_string())?; + #[cfg(windows)] + let updater_path = windows::temporary_updater(&settings.binary("switchyard-desktop-install"))?; + #[cfg(not(windows))] + let updater_path = settings.binary("switchyard-desktop-install"); + let mut updater = Command::new(&updater_path); + #[cfg(windows)] + windows::hide_console(&mut updater); + #[cfg(unix)] + { + use std::os::unix::process::CommandExt; + // A separate process group keeps launchd from stopping the updater with the app. + updater.process_group(0); + } + // The child must acquire the update lock, so the parent releases it before spawning. + drop(guard); + let mut child = updater + .args(["update", "--settings"]) + .arg(settings_file) + .stdin(Stdio::null()) + .stdout(log) + .stderr(error_log) + .spawn() + .map_err(|e| { + let message = format!("Could not start the source update: {e}"); + let _ = set_update_state(&settings, "failed", "start", &message); + message + })?; + #[cfg(windows)] + updater_path.keep().map_err(|e| e.to_string())?; + // This thread reaps the updater if it exits before installation stops the app. + thread::spawn(move || { + let _ = child.wait(); + }); + Ok(log_path) +} + +pub fn execute(settings: &Settings, action: &str, dry_run: bool) -> Result<(), String> { + settings.validate()?; + if !matches!(action, "install" | "uninstall" | "update") { + return Err("Choose install, update, or uninstall.".into()); + } + if !cfg!(any(target_os = "macos", target_os = "linux", windows)) { + return Err("Installation supports macOS, Linux, and Windows.".into()); + } + if dry_run { + println!("{}", installation_plan(settings, action)?); + return Ok(()); + } + if action == "uninstall" { + uninstall(settings) + } else { + let _job = update_lock(settings)?; + if action == "update" { + set_update_state(settings, "running", "build", "Building the app and server.")?; + } + let result = install(settings, action == "update"); + match &result { + Ok(ready) => set_update_state( + settings, + if *ready { "completed" } else { "warning" }, + if *ready { "completed" } else { "readiness" }, + if *ready { + "Installed the app and server. Switchyard is ready." + } else { + "Installed the app and server, but Switchyard did not answer /health. Open the server log and retry its restart." + }, + )?, + Err(error) => { + if settings.sy_home.exists() { + let stage = update_status(&settings.sy_home.join("install.toml")) + .ok() + .and_then(|s| s["stage"].as_str().map(str::to_owned)) + .unwrap_or_else(|| "installation".into()); + let _ = set_update_state(settings, "failed", &stage, error); + } + } + } + result.map(|_| ()) + } +} + +fn update_lock(settings: &Settings) -> Result { + let file = fs::OpenOptions::new() + .create(true) + .truncate(false) + .read(true) + .write(true) + .open(settings.home.join(".switchyard-desktop-update.lock")) + .map_err(|e| e.to_string())?; + file.try_lock().map_err(|_| { + "A Switchyard update is already running. Open Settings to view its progress.".to_string() + })?; + Ok(file) +} +fn set_update_state( + settings: &Settings, + state: &str, + stage: &str, + message: &str, +) -> Result<(), String> { + let record = serde_json::json!({"state":state,"stage":stage,"message":message,"source":settings.source,"updated_at":SystemTime::now().duration_since(UNIX_EPOCH).map_err(|e|e.to_string())?.as_secs()}); + write( + &settings.sy_home.join("update-status.toml"), + toml::to_string(&record) + .map_err(|e| e.to_string())? + .as_bytes(), + false, + ) +} +// A marker under 10 seconds old marks the child as starting before it acquires the lock. +fn update_starting(record: &serde_json::Value) -> bool { + record["state"] == "starting" + && record["updated_at"].as_u64().is_some_and(|stamp| { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .is_ok_and(|now| now.as_secs().saturating_sub(stamp) < 10) + }) +} +pub fn update_status(settings_file: &Path) -> Result { + let settings = Settings::load(settings_file)?; + let path = settings.sy_home.join("update-status.toml"); + let text = match fs::read_to_string(&path) { + Ok(text) => text, + Err(error) if error.kind() == std::io::ErrorKind::NotFound => { + return Ok(serde_json::json!({"state":"idle"})); + } + Err(error) => return Err(error.to_string()), + }; + let value: toml::Value = toml::from_str(&text).map_err(|e| e.to_string())?; + let mut record = serde_json::to_value(value).map_err(|e| e.to_string())?; + let starting = update_starting(&record); + if !starting + && matches!(record["state"].as_str(), Some("starting" | "running")) + && let Ok(lock) = fs::OpenOptions::new() + .read(true) + .write(true) + .open(settings.home.join(".switchyard-desktop-update.lock")) + && lock.try_lock().is_ok() + { + record["state"] = serde_json::json!("interrupted"); + record["message"] = serde_json::json!( + "The update stopped before recording completion. Open the update log, then retry." + ); + } + Ok(record) +} +pub fn preview_update(settings_file: &Path) -> Result { + let settings = Settings::load(settings_file)?; + let git = |args: &[&str]| -> String { + let mut command = Command::new("git"); + #[cfg(windows)] + windows::hide_console(&mut command); + command + .arg("-C") + .arg(&settings.source) + .args(args) + .output() + .ok() + .filter(|o| o.status.success()) + .map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string()) + .unwrap_or_else(|| "Unavailable".into()) + }; + Ok( + serde_json::json!({"source":settings.source,"revision":git(&["rev-parse","HEAD"]),"branch":git(&["branch","--show-current"]),"changes":git(&["status","--short"]),"plan":installation_plan(&settings,"update")?,"status":update_status(settings_file)?}), + ) +} +fn installation_plan(s: &Settings, action: &str) -> Result { + let removing = action == "uninstall"; + let mut rows = vec![ + format!( + "{} {} and local server from {}", + if removing { + "Remove" + } else { + "Build and install" + }, + if cfg!(target_os = "macos") { + "macOS desktop app" + } else { + if cfg!(windows) { + "Windows desktop app" + } else { + "Linux terminal app" + } + }, + s.source.display() + ), + format!("Route: {} · Server: http://127.0.0.1:{}", s.model, s.port), + format!( + "{} service definitions in {}. The server {}.", + if removing { "Remove" } else { "Replace" }, + s.service_dir.display(), + if removing { + "will stop" + } else { + "will restart after build and validation" + } + ), + ]; + for (path, label) in [ + (s.desktop_settings(), "app settings"), + (s.sy_home.join("composite.toml"), "server config"), + (s.sy_home.join("routing.jsonl"), "usage history"), + ] { + rows.push(format!( + "{} {label}: {}", + if removing || path.exists() { + "Preserve" + } else { + "Create" + }, + path.display() + )); + } + rows.push(format!( + "{} Codex profile: {}", + if removing { + "Preserve recovery copy, then remove" + } else if action == "update" && s.profile_file().exists() { + "Preserve" + } else if s.profile_file().exists() { + "Back up, then update" + } else { + "Create" + }, + s.profile_file().display() + )); + rows.push(format!( + "{} binaries: {}", + if removing { "Preserve" } else { "Replace" }, + s.bin_dir().display() + )); + rows.push(format!( + "Preserve accounts and logs: {}", + s.sy_home.display() + )); + if cfg!(target_os = "macos") { + rows.push(format!( + "{} app bundle: {}", + if removing { "Remove" } else { "Replace" }, + s.app().display() + )); + } + rows.push("Preview changes no files. Build prerequisites, full server config validation, and readiness are checked during installation.".into()); + if removing { + let mut destinations = vec![ + s.codex_home.join("sy.config.toml"), + s.codex_home.join("config.toml"), + s.home.join(".claude/settings.json"), + s.home.join(".pi/agent/models.json"), + s.home.join(".pi/agent/settings.json"), + ]; + for tool in ["codex", "claude"] { + let root = s.home.join(".switchyard/accounts").join(tool); + if fs::symlink_metadata(&root).is_ok_and(|m| m.is_dir() && !m.file_type().is_symlink()) + && let Ok(accounts) = fs::read_dir(&root) + { + for account in accounts.flatten() { + if account.file_type().is_ok_and(|t| t.is_dir()) { + destinations.push(account.path().join(if tool == "codex" { + "config.toml" + } else { + "settings.json" + })); + } + } + } + } + for destination in destinations { + let backup = PathBuf::from(format!("{}.switchyard-original", destination.display())); + let missing = PathBuf::from(format!( + "{}.switchyard-original-missing", + destination.display() + )); + if backup.exists() || missing.exists() { + rows.push(format!("Preserve coding-tool destination with a Switchyard backup: {}. Restore it in Connect tools before removal.",destination.display())); + } + } + for path in [ + s.codex_home.join("config.sy.toml"), + s.codex_home.join("config.toml.direct"), + s.home.join(".zshrc"), + s.home.join(".bashrc"), + ] { + if path.exists() { + rows.push(format!("Review legacy Switchyard cleanup: {}. Active defaults are copied before restoring config.toml.direct; marked shell/profile blocks are removed.",path.display())); + } + } + rows.push("Custom destinations outside these known locations are not inventoried.".into()); + rows.push("Restore routing from Connect tools before uninstalling. Custom and account tool settings are preserved and may still point at this server.".into()); + } + Ok(rows.join("\n")) +} + +fn wait_for_health(port: u16) -> bool { + let deadline = Instant::now() + Duration::from_secs(10); + let address: SocketAddr = ([127, 0, 0, 1], port).into(); + while Instant::now() < deadline { + if let Ok(mut stream) = TcpStream::connect_timeout(&address, Duration::from_millis(250)) { + let _ = stream.set_read_timeout(Some(Duration::from_millis(300))); + let _ = stream.set_write_timeout(Some(Duration::from_millis(300))); + if write!( + stream, + "GET /health HTTP/1.1\r\nHost: 127.0.0.1:{port}\r\nConnection: close\r\n\r\n" + ) + .is_ok() + { + let mut response = String::new(); + if stream.take(8192).read_to_string(&mut response).is_ok() + && let Some((headers, body)) = response.split_once("\r\n\r\n") + && headers + .lines() + .next() + .and_then(|line| line.split_whitespace().nth(1)) + == Some("200") + && serde_json::from_str::(body) + .is_ok_and(|v| v["status"] == "ok") + { + return true; + } + } + } + thread::sleep(Duration::from_millis(200)); + } + false +} + +fn run(command: &mut Command) -> Result<(), String> { + #[cfg(windows)] + windows::hide_console(command); + let invocation = format!( + "{:?} {:?}", + command.get_program(), + command.get_args().collect::>() + ); + println!("Running {invocation}"); + let status = command + .status() + .map_err(|e| format!("Could not run {invocation}: {e}"))?; + if status.success() { + Ok(()) + } else { + Err(format!("{invocation} exited with {status}")) + } +} + +// Atomic replacement keeps existing executables readable while an update is staged. +fn write(path: &Path, bytes: &[u8], executable: bool) -> Result<(), String> { + let parent = path + .parent() + .ok_or("The destination has no parent directory.")?; + fs::create_dir_all(parent).map_err(|e| e.to_string())?; + let mut temp = tempfile::NamedTempFile::new_in(parent).map_err(|e| e.to_string())?; + temp.write_all(bytes).map_err(|e| e.to_string())?; + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + temp.as_file() + .set_permissions(fs::Permissions::from_mode(if executable { + 0o755 + } else { + 0o600 + })) + .map_err(|e| e.to_string())?; + } + #[cfg(not(unix))] + let _ = executable; + temp.as_file().sync_all().map_err(|e| e.to_string())?; + temp.persist(path) + .map_err(|e| format!("Write {}: {e}", path.display()))?; + Ok(()) +} + +fn write_once(path: &Path, text: &str) -> Result<(), String> { + if path.try_exists().map_err(|e| e.to_string())? { + return Ok(()); + } + write(path, text.as_bytes(), false) +} + +fn backup(path: &Path, label: &str) -> Result<(), String> { + let mut copy = tempfile::Builder::new() + .prefix(&format!( + "{}.{label}.", + path.file_name() + .ok_or("Missing file name.")? + .to_string_lossy() + )) + .tempfile_in(path.parent().ok_or("Missing parent directory.")?) + .map_err(|e| e.to_string())?; + copy.write_all(&fs::read(path).map_err(|e| e.to_string())?) + .map_err(|e| e.to_string())?; + copy.as_file().sync_all().map_err(|e| e.to_string())?; + let (_, saved) = copy.keep().map_err(|e| e.to_string())?; + println!("Preserved {} at {}", path.display(), saved.display()); + Ok(()) +} + +fn remove(path: &Path) -> Result<(), String> { + match fs::remove_file(path) { + Ok(()) => Ok(()), + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(()), + Err(e) => Err(format!("Remove {}: {e}", path.display())), + } +} + +fn install(s: &Settings, preserve_profile: bool) -> Result { + let profile = s.profile_file(); + let profile_text = if profile.exists() && !preserve_profile { + merge_codex_profile(s, &fs::read_to_string(&profile).map_err(|e| e.to_string())?)? + } else { + codex_profile(s) + }; + if cfg!(target_os = "macos") { + run(Command::new("launchctl").arg("help"))?; + run(Command::new("codesign").arg("--version"))?; + } else if cfg!(target_os = "linux") { + run(Command::new("systemctl").args(["--user", "show-environment"]))?; + } + let reconciled = reconcile_desktop_port(s)?; + println!( + "Building the desktop app and server from {}", + s.source.display() + ); + let mut build = Command::new(&s.cargo); + build + .current_dir(&s.source) + .args(["build", "--locked", "--release", "--manifest-path"]) + .arg(s.source.join("Cargo.toml")) + .arg("--target-dir") + .arg(s.source.join("target")) + .args([ + "-p", + "switchyard-server", + "-p", + "switchyard-desktop", + "-p", + "switchyard-desktop-install", + ]); + // Cargo and rustc must come from the same toolchain, including GUI-triggered updates. + let cargo_dir = s.cargo.parent().ok_or("Cargo has no parent directory.")?; + let mut paths = vec![cargo_dir.to_path_buf()]; + if let Some(path) = std::env::var_os("PATH") { + paths.extend(std::env::split_paths(&path)); + } + build.env( + "PATH", + std::env::join_paths(paths).map_err(|e| e.to_string())?, + ); + run(&mut build)?; + let config = s.sy_home.join("composite.toml"); + let existing = config.try_exists().map_err(|e| e.to_string())?; + let staged = tempfile::NamedTempFile::new().map_err(|e| e.to_string())?; + if !existing { + fs::write( + staged.path(), + include_str!("../../../scripts/config/composite.toml"), + ) + .map_err(|e| e.to_string())?; + } + run(Command::new(s.release("switchyard-server")) + .arg("--config") + .arg(if existing { + config.as_path() + } else { + staged.path() + }) + .arg("--dry-run"))?; + if !preserve_profile || !s.profile_file().exists() { + check_public_route(if existing { &config } else { staged.path() }, &s.model)?; + } + let _lock = lock_installation(s)?; + set_update_state( + s, + "running", + "install", + "Build and config validation passed. Replacing the installation.", + )?; + let metadata = toml::to_string(s).map_err(|e| e.to_string())?; + let bundle = if cfg!(target_os = "macos") { + Some(stage_bundle(s, &metadata)?) + } else { + None + }; + set_update_state( + s, + "running", + "services", + "Stopping services and replacing app files. Existing config and history are retained.", + )?; + stop_services(s)?; + fs::create_dir_all(s.sy_home.join("logs")).map_err(|e| e.to_string())?; + #[cfg(windows)] + windows::replace_binaries(s)?; + #[cfg(not(windows))] + for binary in [ + "switchyard-server", + "switchyard-desktop", + "switchyard-desktop-install", + ] { + write( + &s.binary(binary), + &fs::read(s.release(binary)).map_err(|e| e.to_string())?, + true, + )?; + } + write_once( + &config, + include_str!("../../../scripts/config/composite.toml"), + )?; + let legacy = s.sy_home.join("menubar.toml"); + if legacy.try_exists().map_err(|e| e.to_string())? + && !s + .desktop_settings() + .try_exists() + .map_err(|e| e.to_string())? + { + fs::rename(&legacy, s.desktop_settings()).map_err(|e| e.to_string())?; + } + write_once(&s.desktop_settings(), &desktop_config(s))?; + if let Some(text) = reconciled { + write(&s.desktop_settings(), text.as_bytes(), false)?; + } + remove(&s.sy_home.join("bin/switchyard-menubar"))?; + write(&s.sy_home.join("install.toml"), metadata.as_bytes(), false)?; + write( + &s.home.join(".switchyard-desktop-install.toml"), + metadata.as_bytes(), + false, + )?; + if let Some(bundle) = bundle { + install_macos(s, bundle)?; + } else if cfg!(target_os = "linux") { + install_linux(s)?; + } else { + #[cfg(windows)] + windows::install(s)?; + } + if !preserve_profile || !profile.try_exists().map_err(|e| e.to_string())? { + set_update_state( + s, + "running", + "profile", + "Saving the selected Codex profile.", + )?; + if profile.try_exists().map_err(|e| e.to_string())? + && fs::read(&profile).map_err(|e| e.to_string())? != profile_text.as_bytes() + { + backup(&profile, "switchyard-backup")?; + } + write(&profile, profile_text.as_bytes(), false)?; + } + println!( + "Installed. Server: http://127.0.0.1:{}\nSettings: {}\nUse: codex -p {}", + s.port, + s.desktop_settings().display(), + s.profile + ); + set_update_state( + s, + "running", + "readiness", + "Installed. Waiting for the server to answer /health.", + )?; + let ready = wait_for_health(s.port); + if !ready { + println!( + "Warning: installed, but the server did not become ready. Check logs at {} and restart the server.", + s.sy_home.join("logs").display() + ); + } + Ok(ready) +} + +fn check_public_route(config: &Path, model: &str) -> Result<(), String> { + let document: toml::Value = + toml::from_str(&fs::read_to_string(config).map_err(|e| e.to_string())?) + .map_err(|e| e.to_string())?; + let ids = document + .get("routes") + .and_then(toml::Value::as_table) + .map(|routes| { + routes + .values() + .filter_map(|route| route.get("id").and_then(toml::Value::as_str)) + .collect::>() + }) + .unwrap_or_default(); + if ids.contains(&model) { + Ok(()) + } else { + Err(format!( + "Route {model:?} is not in {}. Choose SY_MODEL from: {}. No services or coding-tool settings were changed.", + config.display(), + ids.join(", ") + )) + } +} + +fn reconcile_desktop_port(s: &Settings) -> Result, String> { + let path = if s.desktop_settings().exists() { + s.desktop_settings() + } else { + s.sy_home.join("menubar.toml") + }; + let text = match fs::read_to_string(&path) { + Ok(text) => text, + Err(error) if error.kind() == std::io::ErrorKind::NotFound => return Ok(None), + Err(error) => return Err(format!("Read {}: {error}", path.display())), + }; + let mut document: toml_edit::DocumentMut = text.parse().map_err(|e| { + format!( + "Parse {}: {e}. Fix this file before installing.", + path.display() + ) + })?; + let previous = s.sy_home.join("install.toml"); + let old_port = if previous.exists() { + Settings::load(&previous)?.port + } else { + 4123 + }; + let expected = format!("http://127.0.0.1:{old_port}"); + let current = document + .get("server_url") + .map(|value| { + value + .as_str() + .ok_or_else(|| std::io::Error::from(std::io::ErrorKind::InvalidData)) + }) + .transpose() + .map_err(|e| { + format!( + "The server_url value in {} must be a string: {e}. Fix this file before installing.", + path.display() + ) + })?; + if s.port != old_port && current.is_some_and(|url| url != expected) { + return Err(format!( + "{} uses a custom server_url, but SY_PORT changes from {old_port} to {}. Review the app URL and port together before reinstalling. No services were stopped.", + path.display(), + s.port + )); + } + if current.is_none() || current == Some(expected.as_str()) { + document["server_url"] = toml_edit::value(format!("http://127.0.0.1:{}", s.port)); + } + let updated = document.to_string(); + Ok((updated != text).then_some(updated)) +} + +fn codex_profile(s: &Settings) -> String { + let mut value: toml::Value = toml::from_str( + include_str!("../../../scripts/config/codex.sy.toml") + .replace("@SY_PORT@", &s.port.to_string()) + .as_str(), + ) + .expect("bundled profile is valid TOML"); + value["model"] = s.model.clone().into(); + toml::to_string(&value).expect("profile values serialize") +} +fn merge_codex_profile(s: &Settings, current: &str) -> Result { + let mut document: toml_edit::DocumentMut = current + .parse() + .map_err(|e| format!("Read Codex profile: {e}"))?; + let template: toml_edit::DocumentMut = codex_profile(s) + .parse() + .map_err(|e| format!("Read generated Codex profile: {e}"))?; + for key in ["model", "model_provider"] { + document[key] = template[key].clone(); + } + if document.get("model_providers").is_none() { + document["model_providers"] = toml_edit::Item::Table(toml_edit::Table::new()); + } + if !document["model_providers"].is_table_like() { + return Err( + "Codex model_providers must be a table. No services or profiles were changed.".into(), + ); + } + if document["model_providers"] + .get("sy") + .is_some_and(|item| !item.is_table_like()) + { + return Err( + "Codex model_providers.sy must be a table. No services or profiles were changed." + .into(), + ); + } + if document["model_providers"].get("sy").is_none() { + document["model_providers"]["sy"] = toml_edit::Item::Table(toml_edit::Table::new()); + } + for key in ["name", "base_url", "wire_api", "requires_openai_auth"] { + document["model_providers"]["sy"][key] = template["model_providers"]["sy"][key].clone(); + } + Ok(document.to_string()) +} + +fn desktop_config(s: &Settings) -> String { + format!( + "server_url = {:?}\nrouting_log = {}\nconfig_file = {}\nlaunchd_label = {:?}\nrefresh_seconds = 30\n\n{}", + format!("http://127.0.0.1:{}", s.port), + toml_string(&s.sy_home.join("routing.jsonl").to_string_lossy()), + toml_string(&s.sy_home.join("composite.toml").to_string_lossy()), + SERVER, + include_str!("../prices.toml") + ) +} +fn toml_string(value: &str) -> String { + toml::Value::String(value.into()).to_string() +} +fn xml(value: &str) -> String { + value + .replace('&', "&") + .replace('<', "<") + .replace('>', ">") +} +fn plist(label: &str, args: &[String], log: &Path, app: bool) -> String { + let args: String = args + .iter() + .map(|a| format!("{}", xml(a))) + .collect(); + let keep_alive = if app { + "SuccessfulExitLimitLoadToSessionTypeAqua" + } else { + "EnvironmentVariablesRUST_LOGinfo" + }; + format!( + "Label{label}ProgramArguments{args}RunAtLoadKeepAlive{keep_alive}StandardOutPath{}StandardErrorPath{}", + xml(&log.with_extension("log").to_string_lossy()), + xml(&log.with_extension("err.log").to_string_lossy()) + ) +} + +fn domain() -> Result { + let output = Command::new("id") + .arg("-u") + .output() + .map_err(|e| e.to_string())?; + if !output.status.success() { + return Err("Could not read the current user ID.".into()); + } + Ok(format!( + "gui/{}", + String::from_utf8_lossy(&output.stdout).trim() + )) +} +fn stop_services(s: &Settings) -> Result<(), String> { + #[cfg(windows)] + return windows::stop(s); + #[cfg(not(windows))] + { + if cfg!(target_os = "macos") { + let domain = domain()?; + for label in [SERVER, DESKTOP, LEGACY_DESKTOP] { + let job = format!("{domain}/{label}"); + let status = Command::new("launchctl") + .args(["print", &job]) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .map_err(|e| e.to_string())?; + if !status.success() { + continue; + } + run(Command::new("launchctl").args(["bootout", &job]))?; + let mut stopped = false; + for _ in 0..50 { + if !Command::new("launchctl") + .args(["print", &job]) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .map_err(|e| e.to_string())? + .success() + { + stopped = true; + break; + } + thread::sleep(Duration::from_millis(100)); + } + if !stopped { + return Err(format!( + "{job} did not stop within five seconds. Try again." + )); + } + } + remove(&s.service_dir.join(format!("{LEGACY_DESKTOP}.plist")))?; + } else if s + .service_dir + .join("switchyard.service") + .try_exists() + .map_err(|e| e.to_string())? + { + run(Command::new("systemctl").args(["--user", "stop", "switchyard.service"]))?; + } + Ok(()) + } +} + +fn stage_bundle(s: &Settings, metadata: &str) -> Result { + let parent = s + .app() + .parent() + .ok_or("The app has no parent directory.")? + .to_path_buf(); + fs::create_dir_all(&parent).map_err(|e| e.to_string())?; + let stage = tempfile::tempdir_in(parent).map_err(|e| e.to_string())?; + let app = stage.path().join("Switchyard.app"); + let contents = app.join("Contents"); + for binary in ["switchyard-desktop", "switchyard-server"] { + write( + &contents.join("MacOS").join(binary), + &fs::read(s.release(binary)).map_err(|e| e.to_string())?, + true, + )?; + } + write( + &contents.join("Resources/install.toml"), + metadata.as_bytes(), + false, + )?; + write( + &contents.join("Resources/Switchyard.icns"), + include_bytes!("../../switchyard-desktop/icons/icon.icns"), + false, + )?; + let info = format!( + "CFBundleIdentifiercom.nvidia.switchyardCFBundleNameSwitchyardCFBundleDisplayNameSwitchyardCFBundleExecutableswitchyard-desktopCFBundleIconFileSwitchyard.icnsCFBundlePackageTypeAPPLCFBundleShortVersionString{}LSMinimumSystemVersion12.0NSHighResolutionCapable", + env!("CARGO_PKG_VERSION") + ); + write(&contents.join("Info.plist"), info.as_bytes(), false)?; + run(Command::new("codesign") + .args(["--force", "--deep", "--sign", "-"]) + .arg(&app))?; + Ok(stage) +} + +fn install_macos(s: &Settings, stage: tempfile::TempDir) -> Result<(), String> { + let previous = stage.path().join("Previous.app"); + let existed = s.app().try_exists().map_err(|e| e.to_string())?; + if existed { + fs::rename(s.app(), &previous).map_err(|e| e.to_string())?; + } + if let Err(error) = fs::rename(stage.path().join("Switchyard.app"), s.app()) { + if existed { + fs::rename(&previous, s.app()).map_err(|restore| { + format!("Replace app: {error}. Restore previous app: {restore}") + })?; + } + return Err(format!("Replace app: {error}")); + } + let contents = s.app().join("Contents"); + let args = vec![ + s.sy_home + .join("bin/switchyard-server") + .display() + .to_string(), + "--config".into(), + s.sy_home.join("composite.toml").display().to_string(), + "--host".into(), + "127.0.0.1".into(), + "--port".into(), + s.port.to_string(), + "--routing-log-file".into(), + s.sy_home.join("routing.jsonl").display().to_string(), + ]; + write( + &s.service_dir.join(format!("{SERVER}.plist")), + plist(SERVER, &args, &s.sy_home.join("logs/server"), false).as_bytes(), + false, + )?; + let args = vec![ + contents + .join("MacOS/switchyard-desktop") + .display() + .to_string(), + s.desktop_settings().display().to_string(), + ]; + write( + &s.service_dir.join(format!("{DESKTOP}.plist")), + plist(DESKTOP, &args, &s.sy_home.join("logs/desktop"), true).as_bytes(), + false, + )?; + let domain = domain()?; + for label in [SERVER, DESKTOP] { + run(Command::new("launchctl") + .arg("bootstrap") + .arg(&domain) + .arg(s.service_dir.join(format!("{label}.plist"))))?; + } + Ok(()) +} + +fn systemd_arg(path: &Path) -> String { + // systemd expands percent specifiers and environment variables inside quoted arguments. + format!( + "\"{}\"", + path.to_string_lossy() + .replace('\\', "\\\\") + .replace('"', "\\\"") + .replace('%', "%%") + .replace('$', "$$") + ) +} +fn install_linux(s: &Settings) -> Result<(), String> { + let unit = format!( + "[Unit]\nDescription=Switchyard local server\n\n[Service]\nType=simple\nExecStart={} --config {} --host 127.0.0.1 --port {} --routing-log-file {}\nRestart=on-failure\nEnvironment=RUST_LOG=info\n\n[Install]\nWantedBy=default.target\n", + systemd_arg(&s.sy_home.join("bin/switchyard-server")), + systemd_arg(&s.sy_home.join("composite.toml")), + s.port, + systemd_arg(&s.sy_home.join("routing.jsonl")) + ); + write( + &s.service_dir.join("switchyard.service"), + unit.as_bytes(), + false, + )?; + run(Command::new("systemctl").args(["--user", "daemon-reload"]))?; + run(Command::new("systemctl").args(["--user", "enable", "switchyard.service"]))?; + run(Command::new("systemctl").args(["--user", "restart", "switchyard.service"]))?; + thread::sleep(Duration::from_secs(2)); + run(Command::new("systemctl").args(["--user", "is-active", "--quiet", "switchyard.service"])) + .map_err(|e| format!("{e}. See journalctl --user -u switchyard.")) +} + +fn strip_block(path: &Path, start: &str, end: &str) -> Result<(), String> { + if !path.try_exists().map_err(|e| e.to_string())? { + return Ok(()); + } + let text = fs::read_to_string(path).map_err(|e| e.to_string())?; + let mut output = String::new(); + let mut skipping = false; + for line in text.split_inclusive('\n') { + if line.contains(start) { + skipping = true; + } + if !skipping { + output.push_str(line); + } + if line.contains(end) { + skipping = false; + } + } + if skipping { + return Err(format!( + "{} has an unfinished Switchyard block. No edits were made to this file.", + path.display() + )); + } + if text != output { + write(path, output.as_bytes(), false)?; + } + Ok(()) +} +// The persistent file keeps concurrent commands locking the same inode; exit releases the lock. +fn lock_installation(s: &Settings) -> Result { + let lock = fs::OpenOptions::new() + .create(true) + .truncate(false) + .read(true) + .write(true) + .open(s.home.join(".switchyard-desktop-install.lock")) + .map_err(|e| e.to_string())?; + lock.try_lock() + .map_err(|e| format!("Could not lock the desktop installation: {e}"))?; + Ok(lock) +} + +fn uninstall(s: &Settings) -> Result<(), String> { + let _lock = lock_installation(s)?; + println!("{}", installation_plan(s, "uninstall")?); + if s.profile_file().exists() { + backup(&s.profile_file(), "switchyard-uninstall-recovery")?; + } + stop_services(s)?; + if cfg!(target_os = "macos") { + for label in [SERVER, DESKTOP, LEGACY_DESKTOP] { + remove(&s.service_dir.join(format!("{label}.plist")))?; + } + if s.app().try_exists().map_err(|e| e.to_string())? { + fs::remove_dir_all(s.app()).map_err(|e| e.to_string())?; + } + } else if cfg!(windows) { + #[cfg(windows)] + windows::uninstall(s)?; + } else { + let unit = s.service_dir.join("switchyard.service"); + if unit.try_exists().map_err(|e| e.to_string())? { + run(Command::new("systemctl").args(["--user", "disable", "switchyard.service"]))?; + remove(&unit)?; + } + run(Command::new("systemctl").args(["--user", "daemon-reload"]))?; + } + remove(&s.profile_file())?; + remove(&s.codex_home.join("config.sy.toml"))?; + let config = s.codex_home.join("config.toml"); + strip_block( + &config, + "# >>> switchyard sy profile >>>", + "# <<< switchyard sy profile <<<", + )?; + let direct = s.codex_home.join("config.toml.direct"); + if direct.try_exists().map_err(|e| e.to_string())? { + if config.try_exists().map_err(|e| e.to_string())? { + backup(&config, "switchyard-current")?; + } + write( + &config, + &fs::read(&direct).map_err(|e| e.to_string())?, + false, + )?; + remove(&direct)?; + } + for name in [".zshrc", ".bashrc"] { + strip_block( + &s.home.join(name), + "# >>> switchyard codex alias >>>", + "# <<< switchyard codex alias <<<", + )?; + } + println!( + "Removed services, app, and profile. Kept settings, accounts, binaries, and history at {}.", + s.sy_home.display() + ); + let recorded = s.home.join(".switchyard-desktop-install.toml"); + if recorded.exists() && Settings::load(&recorded)?.sy_home == s.sy_home { + remove(&recorded)?; + } + Ok(()) +} diff --git a/crates/switchyard-desktop-install/src/main.rs b/crates/switchyard-desktop-install/src/main.rs new file mode 100644 index 0000000000..998362ebf6 --- /dev/null +++ b/crates/switchyard-desktop-install/src/main.rs @@ -0,0 +1,214 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#![cfg_attr(windows, windows_subsystem = "windows")] + +use std::{path::Path, process::ExitCode}; +use switchyard_desktop_install::{Settings, execute}; + +const HELP: &str = "Usage: cargo desktop [--dry-run]\n\nBuild and install the local server and macOS or Windows desktop app, or Linux terminal app.\nUninstall uses the recorded installation and preserves settings, history, and recovery copies.\n\nDefaults: SY_HOME=~/.switchyard, SY_PORT=4123, SY_PROFILE=sy,\nSY_MODEL=composite-gpt-6-sol-gpt-6-luna, CODEX_HOME=~/.codex.\nExample: SY_PROFILE=team SY_MODEL=my-route cargo desktop install\n\nPreview the installation or removal plan with --dry-run. Installation requires\na Rust toolchain and LaunchAgents (macOS) or a systemd user session (Linux).\nWindows requires MSVC build tools, WebView2, and a Task Scheduler user session.\nThe Cargo command waits for completion. On Windows, running the installed installer\nstarts a temporary process and returns; read SY_HOME/logs/update.log for progress and errors.\nUse uninstall --settings FILE to select another recorded installation.\nPreview its removal with: cargo desktop uninstall --settings FILE --dry-run"; + +fn run() -> Result<(), String> { + #[cfg(windows)] + if let Some(result) = windows_command()? { + return result; + } + let args: Vec<_> = std::env::args().skip(1).collect(); + if args == ["--help"] + || args == ["-h"] + || (args.len() == 2 + && matches!(args[0].as_str(), "install" | "uninstall") + && matches!(args[1].as_str(), "--help" | "-h")) + { + println!("{HELP}"); + return Ok(()); + } + let (action, dry_run, file) = match args.as_slice() { + [action] if action == "install" || action == "uninstall" => (action.as_str(), false, None), + [action, flag] if (action == "install" || action == "uninstall") && flag == "--dry-run" => { + (action.as_str(), true, None) + } + [action, flag, file] + if (action == "update" || action == "uninstall") && flag == "--settings" => + { + (action.as_str(), false, Some(Path::new(file))) + } + [action, settings, file, dry] + if action == "uninstall" && settings == "--settings" && dry == "--dry-run" => + { + (action.as_str(), true, Some(Path::new(file))) + } + [action, dry, settings, file] + if action == "uninstall" && settings == "--settings" && dry == "--dry-run" => + { + (action.as_str(), true, Some(Path::new(file))) + } + _ => return Err(HELP.into()), + }; + let settings = if let Some(file) = file { + Settings::load(file)? + } else if action == "uninstall" { + Settings::for_uninstall()? + } else { + Settings::from_env()? + }; + #[cfg(windows)] + if !dry_run + && settings + .binary("switchyard-desktop-install") + .try_exists() + .map_err(|e| e.to_string())? + && std::fs::canonicalize(std::env::current_exe().map_err(|e| e.to_string())?) + .map_err(|e| e.to_string())? + == std::fs::canonicalize(settings.binary("switchyard-desktop-install")) + .map_err(|e| e.to_string())? + { + return handoff(&settings, action); + } + execute(&settings, action, dry_run) +} + +fn main() -> ExitCode { + #[cfg(windows)] + if !std::env::args_os() + .nth(1) + .is_some_and(|arg| matches!(arg.to_str(), Some("serve" | "desktop" | "apply" | "update"))) + { + unsafe { + windows_sys::Win32::System::Console::AttachConsole(u32::MAX); + } + } + let result = run(); + #[cfg(windows)] + if std::env::current_exe() + .ok() + .and_then(|p| { + p.file_name() + .map(|n| n.to_string_lossy().starts_with("switchyard-update-")) + }) + .unwrap_or(false) + && let Err(error) = self_replace::self_delete() + { + eprintln!("switchyard-desktop-install: {error}"); + return ExitCode::FAILURE; + } + match result { + Ok(()) => ExitCode::SUCCESS, + Err(error) => { + eprintln!("switchyard-desktop-install: {error}"); + ExitCode::FAILURE + } + } +} + +#[cfg(windows)] +#[derive(serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] +struct Handoff { + settings: T, +} + +#[cfg(windows)] +fn windows_command() -> Result>, String> { + let args: Vec<_> = std::env::args().skip(1).collect(); + match args.as_slice() { + [action, flag, file] + if matches!(action.as_str(), "serve" | "desktop") && flag == "--settings" => + { + let settings = Settings::load(Path::new(file))?; + Ok(Some(switchyard_desktop_install::windows::launch_managed( + &settings, + action == "desktop", + ))) + } + [apply, flag, file, action, operation, wait, pid] + if apply == "apply" + && flag == "--handoff-record" + && action == "--action" + && wait == "--wait" + && matches!(operation.as_str(), "install" | "update" | "uninstall") => + { + let path = Path::new(file); + let metadata = std::fs::symlink_metadata(path).map_err(|e| e.to_string())?; + let parent = path.parent().ok_or("Invalid handoff record.")?; + let name = path + .file_name() + .and_then(|name| name.to_str()) + .ok_or("Invalid handoff record.")?; + if !metadata.file_type().is_file() + || !name.starts_with("switchyard-handoff-") + || !name.ends_with(".toml") + || std::fs::canonicalize(parent).map_err(|e| e.to_string())? + != std::fs::canonicalize(std::env::temp_dir()).map_err(|e| e.to_string())? + { + return Err("Invalid handoff record.".into()); + } + let handoff: Handoff = + toml::from_str(&std::fs::read_to_string(path).map_err(|e| e.to_string())?) + .map_err(|e| e.to_string())?; + handoff.settings.validate()?; + let pid = pid + .parse::() + .map_err(|_| "Invalid parent process ID.")?; + if pid == 0 { + return Err("Invalid parent process ID.".into()); + } + let _record = tempfile::TempPath::try_from_path(path).map_err(|e| e.to_string())?; + let result = switchyard_desktop_install::windows::wait_parent(pid) + .and_then(|()| execute(&handoff.settings, operation, false)); + Ok(Some(result)) + } + _ => Ok(None), + } +} +#[cfg(windows)] +// The installed executable cannot replace itself while Windows holds it open. +fn handoff(settings: &Settings, action: &str) -> Result<(), String> { + use std::io::Write; + use std::process::{Command, Stdio}; + switchyard_desktop_install::windows::record_handoff(settings)?; + let helper = switchyard_desktop_install::windows::temporary_updater( + &std::env::current_exe().map_err(|e| e.to_string())?, + )?; + let mut record = tempfile::Builder::new() + .prefix("switchyard-handoff-") + .suffix(".toml") + .tempfile() + .map_err(|e| e.to_string())?; + record + .write_all( + toml::to_string(&Handoff { settings }) + .map_err(|e| e.to_string())? + .as_bytes(), + ) + .map_err(|e| e.to_string())?; + let file = record.into_temp_path(); + std::fs::create_dir_all(settings.sy_home.join("logs")).map_err(|e| e.to_string())?; + let log = std::fs::OpenOptions::new() + .create(true) + .append(true) + .open(settings.sy_home.join("logs/update.log")) + .map_err(|e| e.to_string())?; + let mut child = Command::new(&helper); + switchyard_desktop_install::windows::hide_console(&mut child); + child + .arg("apply") + .arg("--handoff-record") + .arg(&file) + .arg("--action") + .arg(action) + .arg("--wait") + .arg(std::process::id().to_string()) + .stdin(Stdio::null()) + .stderr(log.try_clone().map_err(|e| e.to_string())?) + .stdout(log) + .spawn() + .map_err(|e| e.to_string())?; + helper.keep().map_err(|e| e.to_string())?; + file.keep().map_err(|e| e.to_string())?; + println!( + "Started {action}. Progress and errors: {}", + settings.sy_home.join("logs/update.log").display() + ); + Ok(()) +} diff --git a/crates/switchyard-desktop-install/src/windows.rs b/crates/switchyard-desktop-install/src/windows.rs new file mode 100644 index 0000000000..94e6a70c52 --- /dev/null +++ b/crates/switchyard-desktop-install/src/windows.rs @@ -0,0 +1,562 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! This module installs per-user Windows tasks and shortcuts and replaces stopped app executables. + +use super::*; +use std::os::windows::{ + ffi::{OsStrExt, OsStringExt}, + process::CommandExt, +}; +use windows_sys::Win32::{ + Foundation::{CloseHandle, ERROR_NOT_FOUND, HANDLE, INVALID_HANDLE_VALUE, WAIT_OBJECT_0}, + Security::Credentials::{ + CRED_PERSIST_LOCAL_MACHINE, CRED_TYPE_GENERIC, CREDENTIALW, CredFree, CredReadW, CredWriteW, + }, + System::{ + Diagnostics::ToolHelp::{ + CreateToolhelp32Snapshot, PROCESSENTRY32W, Process32FirstW, Process32NextW, + TH32CS_SNAPPROCESS, + }, + Threading::{ + CREATE_NO_WINDOW, OpenProcess, PROCESS_QUERY_LIMITED_INFORMATION, PROCESS_SYNCHRONIZE, + PROCESS_TERMINATE, QueryFullProcessImageNameW, TerminateProcess, WaitForSingleObject, + }, + }, +}; + +struct Handle(HANDLE); +impl Drop for Handle { + fn drop(&mut self) { + unsafe { + CloseHandle(self.0); + } + } +} +fn wide(value: &std::ffi::OsStr) -> Vec { + value.encode_wide().chain(Some(0)).collect() +} +fn error() -> String { + std::io::Error::last_os_error().to_string() +} +pub fn hide_console(command: &mut Command) { + command.creation_flags(CREATE_NO_WINDOW); +} + +pub fn task_name(s: &Settings, desktop: bool) -> String { + // The binary directory keeps task names stable when SY_HOME changes or a Rust toolchain changes. + let mut directory = PathBuf::new(); + for component in s.bin_dir().components() { + match component { + std::path::Component::CurDir => {} + std::path::Component::ParentDir => { + directory.pop(); + } + _ => directory.push(component.as_os_str()), + } + } + let key = directory + .to_string_lossy() + .replace('\\', "/") + .to_lowercase(); + let key = if let Some(unc) = key.strip_prefix("//?/unc/") { + format!("//{unc}") + } else { + key.strip_prefix("//?/").unwrap_or(&key).to_owned() + }; + let hash = key.bytes().fold(0xcbf29ce484222325u64, |h, b| { + (h ^ u64::from(b)).wrapping_mul(0x100000001b3) + }); + format!( + "Switchyard-{}-{hash:016x}", + if desktop { "Desktop" } else { "Server" } + ) +} +fn scheduler() -> Command { + let mut c = Command::new("schtasks.exe"); + hide_console(&mut c); + c +} +fn exists(s: &Settings, desktop: bool) -> Result { + scheduler() + .args(["/Query", "/TN", &task_name(s, desktop)]) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .map(|s| s.success()) + .map_err(|e| e.to_string()) +} +fn identity() -> Result { + use windows_sys::Win32::{ + Foundation::LocalFree, + Security::{ + Authorization::ConvertSidToStringSidW, GetTokenInformation, TOKEN_QUERY, TOKEN_USER, + TokenUser, + }, + System::Threading::{GetCurrentProcess, OpenProcessToken}, + }; + unsafe { + let mut token = std::ptr::null_mut(); + if OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &mut token) == 0 { + return Err(error()); + } + let token = Handle(token); + let mut length = 0; + GetTokenInformation(token.0, TokenUser, std::ptr::null_mut(), 0, &mut length); + if length < std::mem::size_of::() as u32 { + return Err(error()); + } + let mut buffer = vec![0usize; (length as usize).div_ceil(std::mem::size_of::())]; + if GetTokenInformation( + token.0, + TokenUser, + buffer.as_mut_ptr().cast(), + length, + &mut length, + ) == 0 + { + return Err(error()); + } + let user = &*buffer.as_ptr().cast::(); + let mut sid = std::ptr::null_mut(); + if ConvertSidToStringSidW(user.User.Sid, &mut sid) == 0 { + return Err(error()); + } + let length = (0..256).find(|&index| *sid.add(index) == 0); + let result = length + .ok_or_else(|| "Invalid Windows account SID.".to_owned()) + .and_then(|length| { + String::from_utf16(std::slice::from_raw_parts(sid, length)) + .map_err(|e| e.to_string()) + }); + LocalFree(sid.cast()); + result + } +} +// Separate tasks let the server continue after the desktop app exits. +fn task_xml(s: &Settings, user: &str, desktop: bool) -> String { + let program = s.binary("switchyard-desktop-install"); + let args = format!( + "{} --settings {}", + if desktop { "desktop" } else { "serve" }, + quote_arg(&s.sy_home.join("install.toml").display().to_string()) + ); + let user = xml(user); + let restart = if desktop { + "" + } else { + "PT1M999" + }; + format!( + "true{user}{user}InteractiveTokenLeastPrivilegeIgnoreNewfalsefalsetruetruePT0S{restart}{}{}{}", + xml(&program.display().to_string()), + xml(&args), + xml(&s.bin_dir().display().to_string()) + ) +} +// Task Scheduler parses a Windows argument string; trailing slashes must not escape its closing quote. +pub fn quote_arg(value: &str) -> String { + let mut out = String::from("\""); + let mut slashes = 0; + for ch in value.chars() { + if ch == '\\' { + slashes += 1; + continue; + } + out.extend(std::iter::repeat_n( + '\\', + if ch == '"' { slashes * 2 + 1 } else { slashes }, + )); + out.push(ch); + slashes = 0; + } + out.extend(std::iter::repeat_n('\\', slashes * 2)); + out.push('"'); + out +} +fn shortcut_paths(s: &Settings) -> [PathBuf; 2] { + [ + s.service_dir.join("Switchyard.lnk"), + s.service_dir.join("Startup/Switchyard.lnk"), + ] +} +pub fn install(s: &Settings) -> Result<(), String> { + write( + &s.bin_dir().join("install.toml"), + toml::to_string(s).map_err(|e| e.to_string())?.as_bytes(), + false, + )?; + let user = identity()?; + for desktop in [false, true] { + let mut file = tempfile::NamedTempFile::new().map_err(|e| e.to_string())?; + let data: Vec = [0xfeffu16] + .into_iter() + .chain(task_xml(s, &user, desktop).encode_utf16()) + .flat_map(u16::to_le_bytes) + .collect(); + file.write_all(&data).map_err(|e| e.to_string())?; + run(scheduler() + .args(["/Create", "/F", "/TN", &task_name(s, desktop), "/XML"]) + .arg(file.path()))?; + } + let mut link = + mslnk::ShellLink::new(s.binary("switchyard-desktop")).map_err(|e| e.to_string())?; + link.set_arguments(Some(quote_arg(&s.desktop_settings().display().to_string()))); + for path in shortcut_paths(s).into_iter().take(1) { + fs::create_dir_all(path.parent().ok_or("Shortcut has no directory.")?) + .map_err(|e| e.to_string())?; + link.create_lnk(path).map_err(|e| e.to_string())?; + } + for desktop in [false, true] { + run(scheduler().args(["/Run", "/TN", &task_name(s, desktop)]))?; + } + Ok(()) +} +fn stop_task(s: &Settings, desktop: bool) -> Result<(), String> { + if exists(s, desktop)? { + // /End reports an error for a task that has already exited. Path-checked handles below verify shutdown. + let _ = scheduler() + .args(["/End", "/TN", &task_name(s, desktop)]) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .status() + .map_err(|e| e.to_string())?; + } + Ok(()) +} +// Full executable paths distinguish this installation from other copies running under the same user. +fn stop_images(images: &[PathBuf]) -> Result<(), String> { + let targets = images + .iter() + .filter(|p| p.exists()) + .map(fs::canonicalize) + .collect::, _>>() + .map_err(|e| e.to_string())?; + unsafe { + let snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if snapshot == INVALID_HANDLE_VALUE { + return Err(error()); + } + let snapshot = Handle(snapshot); + let mut entry: PROCESSENTRY32W = std::mem::zeroed(); + entry.dwSize = std::mem::size_of::() as u32; + let mut found = Process32FirstW(snapshot.0, &mut entry); + while found != 0 { + if entry.th32ProcessID != std::process::id() { + let process = OpenProcess( + PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_TERMINATE | PROCESS_SYNCHRONIZE, + 0, + entry.th32ProcessID, + ); + if !process.is_null() { + let process = Handle(process); + let mut buffer = vec![0u16; 32768]; + let mut length = buffer.len() as u32; + if QueryFullProcessImageNameW(process.0, 0, buffer.as_mut_ptr(), &mut length) + != 0 + { + let path = PathBuf::from(std::ffi::OsString::from_wide( + &buffer[..length as usize], + )); + if fs::canonicalize(path).is_ok_and(|p| targets.iter().any(|t| t == &p)) { + if TerminateProcess(process.0, 0) == 0 + && WaitForSingleObject(process.0, 0) != WAIT_OBJECT_0 + { + return Err(error()); + } + if WaitForSingleObject(process.0, 10000) != WAIT_OBJECT_0 { + return Err( + "A managed Windows process did not stop within ten seconds." + .into(), + ); + } + } + } + } + } + found = Process32NextW(snapshot.0, &mut entry); + } + } + Ok(()) +} +pub fn stop(s: &Settings) -> Result<(), String> { + for desktop in [false, true] { + stop_task(s, desktop)?; + } + stop_images(&[ + s.binary("switchyard-server"), + s.binary("switchyard-desktop"), + s.binary("switchyard-desktop-install"), + ]) +} +pub fn restart(s: &Settings) -> Result<(), String> { + stop_task(s, false)?; + stop_images(&[s.binary("switchyard-server")])?; + run(scheduler().args(["/Run", "/TN", &task_name(s, false)])) +} +pub fn uninstall(s: &Settings) -> Result<(), String> { + for desktop in [false, true] { + if exists(s, desktop)? { + run(scheduler().args(["/Delete", "/F", "/TN", &task_name(s, desktop)]))?; + } + } + for path in shortcut_paths(s) { + remove(&path)?; + } + // Config and history live in SY_HOME. Only the managed application directory is removed. + if s.bin_dir().exists() { + fs::remove_dir_all(s.bin_dir()).map_err(|e| e.to_string())?; + } + Ok(()) +} +/// This function stages all binaries and attempts to restore earlier replacements if one fails. +pub fn replace_binaries(s: &Settings) -> Result<(), String> { + let names = [ + "switchyard-server", + "switchyard-desktop", + "switchyard-desktop-install", + ]; + fs::create_dir_all(s.bin_dir()).map_err(|e| e.to_string())?; + let stage = tempfile::tempdir_in(s.bin_dir()).map_err(|e| e.to_string())?; + for name in names { + fs::copy(s.release(name), stage.path().join(executable_name(name))) + .map_err(|e| e.to_string())?; + } + let mut changed: Vec<(&str, bool)> = Vec::new(); + for name in names { + let dest = s.binary(name); + let previous = stage.path().join(format!("{name}.previous")); + let existed = dest.exists(); + let result = (|| { + if existed { + fs::rename(&dest, &previous).map_err(|e| e.to_string())?; + } + changed.push((name, existed)); + fs::rename(stage.path().join(executable_name(name)), &dest).map_err(|e| e.to_string()) + })(); + if let Err(error) = result { + let mut failures = Vec::new(); + for (name, existed) in changed.into_iter().rev() { + let restored = (|| { + remove(&s.binary(name))?; + if existed { + fs::rename( + stage.path().join(format!("{name}.previous")), + s.binary(name), + ) + .map_err(|e| e.to_string())?; + } + Ok::<(), String>(()) + })(); + if let Err(restore) = restored { + failures.push(format!("{name}: {restore}")); + } + } + if !failures.is_empty() { + // Failed restoration must retain the previous files for manual recovery. + let recovery = stage.keep(); + return Err(format!( + "Could not replace app files: {error}. Restore failures: {}. Previous files remain at {}.", + failures.join("; "), + recovery.display() + )); + } + return Err(format!( + "Could not replace app files; restored the previous binaries: {error}" + )); + } + } + Ok(()) +} +/// The updater runs from a temporary copy because Windows locks running executables against replacement. +pub fn temporary_updater(source: &Path) -> Result { + let file = tempfile::Builder::new() + .prefix("switchyard-update-") + .suffix(".exe") + .tempfile() + .map_err(|e| e.to_string())?; + fs::copy(source, file.path()).map_err(|e| e.to_string())?; + Ok(file.into_temp_path()) +} +pub fn wait_parent(pid: u32) -> Result<(), String> { + use windows_sys::Win32::Foundation::{ERROR_INVALID_PARAMETER, GetLastError}; + if pid == 0 { + return Err("Invalid parent process ID.".into()); + } + unsafe { + let handle = OpenProcess(PROCESS_SYNCHRONIZE, 0, pid); + if handle.is_null() { + return if GetLastError() == ERROR_INVALID_PARAMETER { + Ok(()) + } else { + Err(error()) + }; + } + let handle = Handle(handle); + if WaitForSingleObject(handle.0, 30000) != WAIT_OBJECT_0 { + return Err("The installer parent did not exit within thirty seconds.".into()); + } + } + Ok(()) +} +/// This function waits for its child so Task Scheduler tracks the app or server's lifetime. +pub fn launch_managed(s: &Settings, desktop: bool) -> Result<(), String> { + fs::create_dir_all(s.sy_home.join("logs")).map_err(|e| e.to_string())?; + let log = fs::OpenOptions::new() + .create(true) + .append(true) + .open(s.sy_home.join(if desktop { + "logs/desktop.log" + } else { + "logs/server.log" + })) + .map_err(|e| e.to_string())?; + let mut c = Command::new(s.binary(if desktop { + "switchyard-desktop" + } else { + "switchyard-server" + })); + hide_console(&mut c); + c.env("HOME", &s.home) + .env("USERPROFILE", &s.home) + .env("CODEX_HOME", &s.codex_home) + .env("SY_HOME", &s.sy_home) + .current_dir(s.bin_dir()); + if desktop { + c.arg(s.desktop_settings()); + } else { + c.arg("--config") + .arg(s.sy_home.join("composite.toml")) + .args([ + "--host", + "127.0.0.1", + "--port", + &s.port.to_string(), + "--routing-log-file", + ]) + .arg(s.sy_home.join("routing.jsonl")); + } + let status = c + .stdin(Stdio::null()) + .stderr(log.try_clone().map_err(|e| e.to_string())?) + .stdout(log) + .status() + .map_err(|e| e.to_string())?; + if status.success() { + Ok(()) + } else { + Err(format!("Managed application exited with {status}.")) + } +} +pub fn open(value: &str) -> Result<(), String> { + use windows_sys::Win32::UI::{Shell::ShellExecuteW, WindowsAndMessaging::SW_SHOWNORMAL}; + let value = wide(std::ffi::OsStr::new(value)); + let verb = wide(std::ffi::OsStr::new("open")); + let status = unsafe { + ShellExecuteW( + std::ptr::null_mut(), + verb.as_ptr(), + value.as_ptr(), + std::ptr::null(), + std::ptr::null(), + SW_SHOWNORMAL, + ) + } as isize; + if status > 32 { + Ok(()) + } else { + Err(format!( + "Windows could not open the file or URL (error {status})." + )) + } +} +pub fn saved_key(base_url: &str) -> Result, String> { + let target = wide(std::ffi::OsStr::new(&format!( + "Switchyard:model-list:{base_url}" + ))); + unsafe { + let mut credential: *mut CREDENTIALW = std::ptr::null_mut(); + if CredReadW(target.as_ptr(), CRED_TYPE_GENERIC, 0, &mut credential) == 0 { + if std::io::Error::last_os_error().raw_os_error() == Some(ERROR_NOT_FOUND as i32) { + return Ok(None); + } + return Err(error()); + } + let credential_ref = &*credential; + let bytes = if credential_ref.CredentialBlobSize == 0 { + Vec::new() + } else { + std::slice::from_raw_parts( + credential_ref.CredentialBlob, + credential_ref.CredentialBlobSize as usize, + ) + .to_vec() + }; + CredFree(credential.cast()); + String::from_utf8(bytes) + .map(|s| Some(s).filter(|s| !s.trim().is_empty())) + .map_err(|e| e.to_string()) + } +} +pub fn save_key(base_url: &str, key: &str) -> Result<(), String> { + let mut target = wide(std::ffi::OsStr::new(&format!( + "Switchyard:model-list:{base_url}" + ))); + let mut bytes = key.trim().as_bytes().to_vec(); + let mut credential: CREDENTIALW = unsafe { std::mem::zeroed() }; + credential.Type = CRED_TYPE_GENERIC; + credential.TargetName = target.as_mut_ptr(); + credential.Persist = CRED_PERSIST_LOCAL_MACHINE; + credential.CredentialBlobSize = bytes.len().try_into().map_err(|_| "The key is too long.")?; + credential.CredentialBlob = bytes.as_mut_ptr(); + if unsafe { CredWriteW(&credential, 0) } == 0 { + Err(error()) + } else { + Ok(()) + } +} + +pub fn record_handoff(s: &Settings) -> Result<(), String> { + let _lock = update_lock(s)?; + set_update_state( + s, + "starting", + "start", + "Starting the Windows source installer.", + ) +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn tasks_follow_the_installed_app_directory() { + let mut settings = Settings::from_env().expect("settings"); + settings.app_dir = Some(PathBuf::from(r"C:\Users\Team\Apps\Switchyard")); + let names = [task_name(&settings, false), task_name(&settings, true)]; + assert_ne!(names[0], names[1]); + settings.sy_home = PathBuf::from(r"C:\Users\Team\New settings"); + for path in [ + r"c:/users/team/apps/switchyard/", + r"C:\Users\Team\Apps\.\Other\..\Switchyard", + r"\\?\C:\Users\Team\Apps\Switchyard", + ] { + settings.app_dir = Some(PathBuf::from(path)); + assert_eq!( + [task_name(&settings, false), task_name(&settings, true)], + names + ); + } + settings.app_dir = Some(PathBuf::from(r"C:\Users\Team\Apps\Another")); + assert_ne!(task_name(&settings, false), names[0]); + settings.app_dir = Some(PathBuf::from(r"\\server\share\Apps\Switchyard")); + let unc = task_name(&settings, false); + settings.app_dir = Some(PathBuf::from(r"\\?\UNC\SERVER\SHARE\Apps\Switchyard")); + assert_eq!(task_name(&settings, false), unc); + } + #[test] + fn windows_arguments_escape_quotes_and_trailing_slashes() { + assert_eq!(quote_arg("C:\\équipe space\\"), "\"C:\\équipe space\\\\\""); + assert_eq!(quote_arg("a\"b"), "\"a\\\"b\""); + } +} diff --git a/crates/switchyard-desktop-install/tests/fixture.txt b/crates/switchyard-desktop-install/tests/fixture.txt new file mode 100644 index 0000000000..617db53af9 --- /dev/null +++ b/crates/switchyard-desktop-install/tests/fixture.txt @@ -0,0 +1,35 @@ +use std::{env, fs, path::Path}; +fn main() { + let args: Vec<_> = env::args().collect(); + let exe = env::current_exe().unwrap(); + let name = Path::new(&args[0]).file_name().unwrap().to_str().unwrap(); + if matches!(name, "launchctl" | "systemctl") { + use std::io::Write; + let mut calls = fs::OpenOptions::new().create(true).append(true) + .open(Path::new(&env::var_os("HOME").unwrap()).join("service_calls")).unwrap(); + writeln!(calls, "{args:?}").unwrap(); + } + match name { + "cargo" => { + let target = &args[args.iter().position(|s| s == "--target-dir").unwrap() + 1]; + let release = Path::new(target).join("release"); + fs::create_dir_all(&release).unwrap(); + for bin in ["switchyard-server", "switchyard-desktop"] { fs::copy(&exe, release.join(bin)).unwrap(); } + fs::copy(env::var("INSTALLER_BIN").unwrap(), release.join("switchyard-desktop-install")).unwrap(); + } + "switchyard-desktop-install" => { + let output = std::process::Command::new("ps") + .args(["-o", "pgid=", "-p", &std::process::id().to_string()]) + .output().unwrap(); + assert!(output.status.success()); + print!("{}", String::from_utf8(output.stdout).unwrap()); + } + "systemctl" if args.get(2).is_some_and(|s| s == "disable") + && !Path::new(&env::var_os("HOME").unwrap()).join(".config/systemd/user/switchyard.service").exists() + => std::process::exit(1), + "id" => println!("501"), + "launchctl" if args.get(1).is_some_and(|s| s == "print") => std::process::exit(1), + "switchyard-server" if env::var("FIXTURE_FAIL_VALIDATE").as_deref() == Ok("1") => std::process::exit(1), + _ => {} + } +} diff --git a/crates/switchyard-desktop-install/tests/install.rs b/crates/switchyard-desktop-install/tests/install.rs new file mode 100644 index 0000000000..b5811bf9c1 --- /dev/null +++ b/crates/switchyard-desktop-install/tests/install.rs @@ -0,0 +1,670 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#![cfg(unix)] + +use std::{ + fs, + path::{Path, PathBuf}, + process::Command, +}; +use switchyard_desktop_install::Settings; + +// This child process isolates HOME and PATH so service fixtures cannot reach real jobs. +#[test] +fn fixture_process() { + if let Some(file) = std::env::var_os("INSTALL_FIXTURE_SETTINGS") { + let settings = Settings::load(Path::new(&file)).expect("fixture settings"); + let action = std::env::var("INSTALL_FIXTURE_ACTION").expect("fixture action"); + if action == "start_update" { + switchyard_desktop_install::start_update(Path::new(&file)).expect("start updater"); + assert!(switchyard_desktop_install::start_update(Path::new(&file)).is_err()); + for _ in 0..1500 { + let status = + switchyard_desktop_install::update_status(Path::new(&file)).expect("status"); + if status["state"] == "completed" { + return; + } + assert_ne!(status["state"], "failed", "{status}"); + std::thread::sleep(std::time::Duration::from_millis(20)); + } + panic!( + "updater did not complete: {:?}\n{:?}", + switchyard_desktop_install::update_status(Path::new(&file)), + fs::read_to_string(settings.sy_home.join("logs/update.log")), + ); + } + if let Err(error) = switchyard_desktop_install::execute(&settings, &action, false) { + eprintln!("{error}"); + std::process::exit(1); + } + } +} + +// Native command fixtures replace build and service commands without invoking a shell. +struct Fixture { + _temp: tempfile::TempDir, + settings: Settings, + bin: PathBuf, + metadata: PathBuf, + health: HealthFixture, +} +// The local health server wakes its listener during cleanup so failed assertions cannot hang tests. +struct HealthFixture { + port: u16, + stop: std::sync::Arc, + thread: Option>, +} +impl HealthFixture { + fn new() -> Self { + let listener = std::net::TcpListener::bind("127.0.0.1:0").expect("health socket"); + let port = listener.local_addr().expect("address").port(); + let stop = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)); + let flag = stop.clone(); + let thread = std::thread::spawn(move || { + use std::io::{Read, Write}; + for connection in listener.incoming() { + if flag.load(std::sync::atomic::Ordering::Relaxed) { + break; + } + if let Ok(mut stream) = connection { + stream + .set_read_timeout(Some(std::time::Duration::from_secs(1))) + .expect("timeout"); + let mut request = [0; 1024]; + let _ = stream.read(&mut request); + let body = "{\"status\":\"ok\"}"; + let _ = write!( + stream, + "HTTP/1.1 200 OK\r\nContent-Length: {}\r\nConnection: close\r\n\r\n{}", + body.len(), + body + ); + } + } + }); + Self { + port, + stop, + thread: Some(thread), + } + } +} +impl Drop for HealthFixture { + fn drop(&mut self) { + self.stop.store(true, std::sync::atomic::Ordering::Relaxed); + let _ = std::net::TcpStream::connect(("127.0.0.1", self.port)); + if let Some(thread) = self.thread.take() { + thread.join().expect("health cleanup"); + } + } +} +impl Fixture { + fn new() -> Self { + let temp = tempfile::tempdir().expect("fixture directory"); + let home = temp.path().join("home"); + let bin = temp.path().join("bin"); + fs::create_dir_all(&home).expect("home"); + fs::create_dir_all(&bin).expect("bin"); + // These characters must remain literal in TOML, plist, and systemd arguments. + let source = temp.path().join("checkout with ' $() & "); + fs::create_dir_all(&source).expect("checkout"); + let fixture_src = temp.path().join("fixture.rs"); + fs::write(&fixture_src, include_str!("fixture.txt")).expect("fixture source"); + let status = Command::new("rustc") + .arg(&fixture_src) + .arg("-o") + .arg(bin.join("cargo")) + .status() + .expect("compile fixture"); + assert!(status.success()); + for name in ["id", "launchctl", "codesign", "systemctl"] { + fs::copy(bin.join("cargo"), bin.join(name)).expect("copy native command fixture"); + } + let health = HealthFixture::new(); + let s = Settings { + app_dir: None, + sy_home: home.join("Switchyard ' $(touch unsafe) \\ & % $"), + codex_home: home.join(".codex"), + service_dir: if cfg!(target_os = "macos") { + home.join("Library/LaunchAgents") + } else { + home.join(".config/systemd/user") + }, + home, + source, + cargo: bin.join("cargo"), + port: health.port, + profile: "team-dev".into(), + model: "composite-gpt-6-sol-gpt-6-luna".into(), + }; + let metadata = temp.path().join("install.toml"); + let f = Self { + _temp: temp, + settings: s, + bin, + metadata, + health, + }; + f.save(); + f + } + fn save(&self) { + fs::write( + &self.metadata, + toml::to_string(&self.settings).expect("serialize settings"), + ) + .expect("write metadata"); + } + fn run(&self, action: &str, fail_validation: bool) -> std::process::Output { + let path = std::env::join_paths(std::iter::once(self.bin.clone()).chain( + std::env::split_paths(&std::env::var_os("PATH").expect("PATH")), + )) + .expect("fixture PATH"); + Command::new(std::env::current_exe().expect("test binary")) + .args(["--exact", "fixture_process", "--nocapture"]) + .env("INSTALL_FIXTURE_SETTINGS", &self.metadata) + .env("INSTALL_FIXTURE_ACTION", action) + .env("PATH", path) + .env("HOME", &self.settings.home) + .env( + "INSTALLER_BIN", + env!("CARGO_BIN_EXE_switchyard-desktop-install"), + ) + .env( + "FIXTURE_FAIL_VALIDATE", + if fail_validation { "1" } else { "0" }, + ) + .output() + .expect("run fixture") + } +} + +#[test] +fn reinstall_migrates_settings_preserves_data_and_generates_native_launchers() { + let mut f = Fixture::new(); + let s = &f.settings; + fs::create_dir_all(&s.sy_home).expect("existing settings"); + fs::create_dir_all(&s.codex_home).expect("existing profile"); + fs::write( + s.sy_home.join("menubar.toml"), + "baseline_model = 'custom'\n", + ) + .expect("legacy settings"); + fs::write(s.sy_home.join("routing.jsonl"), "history").expect("history"); + fs::write(s.codex_home.join("config.toml"), "user defaults").expect("user defaults"); + let output = f.run("install", false); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert_eq!( + fs::read_to_string(s.desktop_settings()).expect("settings"), + format!( + "baseline_model = 'custom'\nserver_url = \"http://127.0.0.1:{}\"\n", + s.port + ) + ); + assert!(!s.sy_home.join("menubar.toml").exists()); + let profile = s.codex_home.join("team-dev.config.toml"); + let original = fs::read_to_string(&profile).expect("profile"); + let parsed: toml::Value = toml::from_str(&original).expect("profile TOML"); + assert_eq!(parsed["model"].as_str(), Some(s.model.as_str())); + assert!(parsed.get("approval_policy").is_none()); + assert!(parsed.get("sandbox_mode").is_none()); + fs::write( + s.sy_home.join("composite.toml"), + include_str!("../../../scripts/config/composite.toml"), + ) + .expect("server config"); + f.health = HealthFixture::new(); + f.settings.port = f.health.port; + f.save(); + let output = f.run("install", false); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let s = &f.settings; + assert_eq!( + fs::read_to_string(s.sy_home.join("routing.jsonl")).expect("history"), + "history" + ); + assert_eq!( + fs::read_to_string(s.codex_home.join("config.toml")).expect("user defaults"), + "user defaults" + ); + assert_eq!( + fs::read_to_string(s.sy_home.join("composite.toml")).expect("config"), + include_str!("../../../scripts/config/composite.toml") + ); + let backups: Vec<_> = fs::read_dir(&s.codex_home) + .expect("profiles") + .filter_map(Result::ok) + .filter(|e| { + e.file_name() + .to_string_lossy() + .contains("switchyard-backup") + }) + .collect(); + assert_eq!(backups.len(), 1); + assert_eq!( + fs::read_to_string(backups[0].path()).expect("backup"), + original + ); + let recorded = Settings::load(&s.sy_home.join("install.toml")).expect("saved installation"); + assert_eq!(recorded.port, f.health.port); + assert_eq!(recorded.model, s.model); + assert_eq!(recorded.source, s.source); + if cfg!(target_os = "macos") { + let contents = s.app().join("Contents"); + let info = plist::Value::from_file(contents.join("Info.plist")).expect("Info.plist"); + assert_eq!( + info.as_dictionary().expect("dictionary")["CFBundleExecutable"].as_string(), + Some("switchyard-desktop") + ); + let icon = info.as_dictionary().expect("dictionary")["CFBundleIconFile"] + .as_string() + .expect("bundle icon name"); + let bytes = fs::read(contents.join("Resources").join(icon)).expect("bundle icon"); + assert_eq!( + bytes, + include_bytes!("../../switchyard-desktop/icons/icon.icns") + ); + assert_eq!(&bytes[..4], b"icns"); + assert_eq!( + u32::from_be_bytes(bytes[4..8].try_into().expect("icon size")) as usize, + bytes.len() + ); + assert!(contents.join("MacOS/switchyard-desktop").is_file()); + assert!(!contents.join("MacOS/Switchyard").exists()); + assert!(!contents.join("Resources/Update.command").exists()); + let metadata = + switchyard_desktop_install::bundle_metadata(&contents.join("MacOS/switchyard-desktop")); + assert_eq!( + Settings::load(&metadata).expect("bundle settings").sy_home, + s.sy_home + ); + let job = plist::Value::from_file(s.service_dir.join("com.nvidia.switchyard.server.plist")) + .expect("server plist"); + let args = job.as_dictionary().expect("job")["ProgramArguments"] + .as_array() + .expect("args"); + assert_eq!( + args[0].as_string(), + Some( + s.sy_home + .join("bin/switchyard-server") + .to_str() + .expect("UTF-8") + ) + ); + assert!( + !s.service_dir + .join("com.nvidia.switchyard.menubar.plist") + .exists() + ); + } else { + let unit = fs::read_to_string(s.service_dir.join("switchyard.service")).expect("unit"); + assert!(unit.contains("%% $$")); + } + assert!(!s.home.join("unsafe").exists()); +} + +// A failed server check must prevent the installer from creating app, service, or settings files. +#[test] +fn validator_failure_leaves_installation_and_profile_untouched() { + let f = Fixture::new(); + let output = f.run("install", true); + assert!(!output.status.success()); + assert!(!f.settings.sy_home.exists()); + assert!(!f.settings.codex_home.exists()); + assert!(!f.settings.app().exists()); + assert!(!f.settings.service_dir.exists()); +} + +#[test] +fn uninstall_restores_snapshot_with_a_recovery_copy_and_keeps_history() { + let f = Fixture::new(); + assert!(f.run("install", false).status.success()); + let s = &f.settings; + fs::write(s.codex_home.join("config.toml"), "current settings").expect("current"); + fs::write(s.codex_home.join("config.toml.direct"), "original settings").expect("direct"); + fs::write(s.sy_home.join("routing.jsonl"), "history").expect("history"); + fs::write(s.home.join(".bashrc"), "before\n# >>> switchyard codex alias >>>\nalias codex=old\n# <<< switchyard codex alias <<<\nafter\n").expect("legacy rc"); + let output = f.run("uninstall", false); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert_eq!( + fs::read_to_string(s.codex_home.join("config.toml")).expect("restored"), + "original settings" + ); + let backups: Vec<_> = fs::read_dir(&s.codex_home) + .expect("configs") + .filter_map(Result::ok) + .filter(|e| { + e.file_name() + .to_string_lossy() + .contains("switchyard-current") + }) + .collect(); + assert_eq!(backups.len(), 1); + assert_eq!( + fs::read_to_string(backups[0].path()).expect("recovery"), + "current settings" + ); + assert_eq!( + fs::read_to_string(s.sy_home.join("routing.jsonl")).expect("history"), + "history" + ); + assert_eq!( + fs::read_to_string(s.home.join(".bashrc")).expect("rc"), + "before\nafter\n" + ); + assert!(!s.codex_home.join("team-dev.config.toml").exists()); + assert!(!s.app().exists()); + assert!(f.run("uninstall", false).status.success()); + let unfinished = "before\n# >>> switchyard codex alias >>>\nalias codex=old\nafter\n"; + fs::write(s.home.join(".bashrc"), unfinished).expect("unfinished block"); + assert!(!f.run("uninstall", false).status.success()); + assert_eq!( + fs::read_to_string(s.home.join(".bashrc")).expect("unchanged rc"), + unfinished + ); +} + +#[test] +fn invalid_inputs_and_dry_run_have_no_installation_side_effects() { + let f = Fixture::new(); + // Fixture commands come first on PATH so a validation regression cannot stop real services. + let path = std::env::join_paths(std::iter::once(f.bin.clone()).chain(std::env::split_paths( + &std::env::var_os("PATH").expect("PATH"), + ))) + .expect("fixture PATH"); + let binary = env!("CARGO_BIN_EXE_switchyard-desktop-install"); + for (key, value) in [ + ("SY_PROFILE", "../escape"), + ("SY_PROFILE", "team.dev"), + ("SY_PROFILE", ""), + ("SY_MODEL", ""), + ("SY_MODEL", "model\nname"), + ("SY_MODEL", "model\x7fname"), + ("SY_PORT", "0"), + ("SY_PORT", "65536"), + ("SY_PORT", "+4123"), + ("SY_PORT", "4123\n"), + ] { + let output = Command::new(binary) + .arg("install") + .env("PATH", &path) + .env("HOME", &f.settings.home) + .env(key, value) + .output() + .expect("reject input"); + assert!(!output.status.success(), "{key}={value:?}"); + assert!(String::from_utf8_lossy(&output.stderr).contains(key)); + } + for key in ["SY_PROFILE", "SY_MODEL", "SY_PORT"] { + use std::os::unix::ffi::OsStringExt; + let output = Command::new(binary) + .arg("install") + .env("PATH", &path) + .env("HOME", &f.settings.home) + .env(key, std::ffi::OsString::from_vec(vec![0xff])) + .output() + .expect("reject raw input"); + assert!(!output.status.success(), "{key}"); + assert!(String::from_utf8_lossy(&output.stderr).contains(key)); + } + for args in [ + vec!["install", "--dryrun"], + vec!["uninstall", "extra"], + vec!["install", "--dry-run", "extra"], + ] { + assert!( + !Command::new(binary) + .args(args) + .env("PATH", &path) + .env("HOME", &f.settings.home) + .output() + .expect("reject args") + .status + .success() + ); + } + for action in ["install", "uninstall"] { + assert!( + Command::new(binary) + .args([action, "--dry-run"]) + .env("PATH", &path) + .env("HOME", &f.settings.home) + .output() + .expect("preview") + .status + .success() + ); + } + assert_eq!(fs::read_dir(&f.settings.home).expect("home").count(), 0); + let text = fs::read_to_string(&f.metadata).expect("metadata"); + let selected = f.metadata.to_str().expect("settings path"); + for args in [ + ["uninstall", "--settings", selected, "--dry-run"], + ["uninstall", "--dry-run", "--settings", selected], + ] { + let output = Command::new(binary) + .args(args) + .env("PATH", &path) + .env("HOME", &f.settings.home) + .output() + .expect("preview selected removal"); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert!(String::from_utf8_lossy(&output.stdout).contains("team-dev")); + assert_eq!( + fs::read_to_string(&f.metadata).expect("unchanged metadata"), + text + ); + assert_eq!( + fs::read_dir(&f.settings.home) + .expect("unchanged home") + .count(), + 0 + ); + } + fs::write(&f.metadata, format!("{text}\nunknown_field = true\n")).expect("invalid metadata"); + assert!(Settings::load(&f.metadata).is_err()); +} + +#[test] +fn updater_has_a_separate_process_group() { + let f = Fixture::new(); + fs::create_dir_all(f.settings.sy_home.join("bin")).expect("installed binaries"); + fs::create_dir_all(f.settings.sy_home.join("logs")).expect("installed logs"); + fs::copy( + f.bin.join("cargo"), + f.settings.sy_home.join("bin/switchyard-desktop-install"), + ) + .expect("updater fixture"); + let parent = Command::new("ps") + .args(["-o", "pgid=", "-p", &std::process::id().to_string()]) + .output() + .expect("parent process group"); + assert!(parent.status.success()); + let log = switchyard_desktop_install::start_update(&f.metadata).expect("start updater"); + assert!(switchyard_desktop_install::start_update(&f.metadata).is_err()); + let mut group = String::new(); + for _ in 0..100 { + group = fs::read_to_string(&log).expect("update log"); + if !group.trim().is_empty() { + break; + } + std::thread::sleep(std::time::Duration::from_millis(20)); + } + assert!(!group.trim().is_empty()); + assert_ne!( + group.trim(), + String::from_utf8(parent.stdout) + .expect("parent group") + .trim() + ); +} + +// Install and uninstall must use the same lock before stopping services or replacing files. +#[test] +fn concurrent_install_and_uninstall_reject_before_changing_managed_files() { + let f = Fixture::new(); + let lock = fs::OpenOptions::new() + .create(true) + .truncate(false) + .read(true) + .write(true) + .open(f.settings.home.join(".switchyard-desktop-install.lock")) + .expect("lock file"); + lock.lock().expect("hold installation lock"); + for action in ["install", "uninstall"] { + let output = f.run(action, false); + assert!(!output.status.success()); + assert!( + String::from_utf8_lossy(&output.stderr).contains("Could not lock"), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let calls = fs::read_to_string(f.settings.home.join("service_calls")).unwrap_or_default(); + assert!( + !calls.contains("bootout") + && !calls.contains("bootstrap") + && !calls.contains("stop") + && !calls.contains("disable"), + "{calls}" + ); + assert!(!f.settings.sy_home.exists()); + assert!(!f.settings.codex_home.exists()); + assert!(!f.settings.app().exists()); + assert!(!f.settings.service_dir.exists()); + } +} + +#[test] +fn unknown_route_rejects_before_services_or_profiles_change() { + let mut f = Fixture::new(); + f.settings.model = "missing-public-route".into(); + f.save(); + let output = f.run("install", false); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("missing-public-route")); + assert!(!f.settings.codex_home.exists()); + assert!(!f.settings.app().exists()); + assert!(!f.settings.desktop_settings().exists()); + let calls = fs::read_to_string(f.settings.home.join("service_calls")).unwrap_or_default(); + assert!(!calls.contains("bootout") && !calls.contains("bootstrap") && !calls.contains("stop")); +} +#[test] +fn source_update_preserves_profile_bytes_and_uninstall_keeps_recovery() { + let f = Fixture::new(); + assert!(f.run("install", false).status.success()); + let profile = f.settings.codex_home.join("team-dev.config.toml"); + let current = "# Personal settings\nmodel='custom-selection'\nexperimental='retained'\n"; + fs::write(&profile, current).expect("edited profile"); + let output = f.run("update", false); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert_eq!(fs::read_to_string(&profile).expect("profile"), current); + assert_eq!( + switchyard_desktop_install::update_status(&f.metadata).expect("status")["state"], + "completed" + ); + assert!(f.run("uninstall", false).status.success()); + assert!(!profile.exists()); + let copies: Vec<_> = fs::read_dir(&f.settings.codex_home) + .expect("profiles") + .filter_map(Result::ok) + .filter(|entry| { + entry + .file_name() + .to_string_lossy() + .contains("switchyard-uninstall-recovery") + }) + .collect(); + assert_eq!(copies.len(), 1); + assert_eq!( + fs::read_to_string(copies[0].path()).expect("recovery"), + current + ); +} +#[test] +fn malformed_profile_table_rejects_before_service_changes() { + let f = Fixture::new(); + fs::create_dir_all(&f.settings.codex_home).expect("codex"); + let profile = f.settings.codex_home.join("team-dev.config.toml"); + let original = "model_providers='bad table'\n"; + fs::write(&profile, original).expect("profile"); + let output = f.run("install", false); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("model_providers must be a table")); + assert_eq!( + fs::read_to_string(profile).expect("unchanged profile"), + original + ); + assert!(!f.settings.home.join("service_calls").exists()); +} + +#[test] +// The installed updater must finish after an old running record and refuse a second start. +fn updater_child_completes_through_the_installed_entrypoint() { + let f = Fixture::new(); + fs::create_dir_all(f.settings.sy_home.join("bin")).expect("installed binaries"); + fs::create_dir_all(f.settings.sy_home.join("logs")).expect("installed logs"); + fs::copy( + env!("CARGO_BIN_EXE_switchyard-desktop-install"), + f.settings.sy_home.join("bin/switchyard-desktop-install"), + ) + .expect("installed updater"); + fs::write( + f.settings.sy_home.join("update-status.toml"), + "state='running'\nupdated_at=0\n", + ) + .expect("interrupted update"); + let output = f.run("start_update", false); + assert!( + output.status.success(), + "{}\n{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + assert_eq!( + switchyard_desktop_install::update_status(&f.metadata).expect("final status")["state"], + "completed" + ); +} + +#[test] +// A non-string server_url must not be replaced with a managed URL during installation. +fn malformed_app_address_rejects_without_replacing_settings() { + let f = Fixture::new(); + fs::create_dir_all(&f.settings.sy_home).expect("settings directory"); + let path = f.settings.desktop_settings(); + let original = "server_url=42\n# user settings\n"; + fs::write(&path, original).expect("invalid address"); + let output = f.run("install", false); + assert!(!output.status.success()); + assert_eq!( + fs::read_to_string(path).expect("preserved settings"), + original + ); + assert!(!f.settings.codex_home.join("team-dev.config.toml").exists()); + let calls = fs::read_to_string(f.settings.home.join("service_calls")).expect("preflight"); + assert!( + !calls.contains("bootout") && !calls.contains("disable") && !calls.contains("bootstrap") + ); +} diff --git a/crates/switchyard-desktop-install/tests/windows.rs b/crates/switchyard-desktop-install/tests/windows.rs new file mode 100644 index 0000000000..456c4eb678 --- /dev/null +++ b/crates/switchyard-desktop-install/tests/windows.rs @@ -0,0 +1,406 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#![cfg(windows)] + +use std::{ + fs, + io::{Read, Write}, + net::TcpStream, + path::Path, + process::Command, + time::{Duration, Instant}, +}; +use switchyard_desktop_install::{Settings, execute, start_update, update_status, windows}; + +fn wait(mut condition: impl FnMut() -> bool) { + let deadline = Instant::now() + Duration::from_secs(180); + while !condition() { + assert!( + Instant::now() < deadline, + "Windows operation did not finish within three minutes." + ); + std::thread::sleep(Duration::from_millis(250)); + } +} +fn health(port: u16) -> bool { + let Ok(mut socket) = TcpStream::connect_timeout( + &format!("127.0.0.1:{port}").parse().expect("address"), + Duration::from_secs(1), + ) else { + return false; + }; + socket + .set_read_timeout(Some(Duration::from_secs(1))) + .expect("timeout"); + if socket + .write_all(b"GET /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n") + .is_err() + { + return false; + } + let mut response = String::new(); + socket.read_to_string(&mut response).is_ok() && response.starts_with("HTTP/1.1 200") +} +fn task_xml(s: &Settings, desktop: bool) -> String { + let output = Command::new("schtasks.exe") + .args(["/Query", "/TN", &windows::task_name(s, desktop), "/XML"]) + .output() + .expect("query task"); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + // schtasks emits UTF-16 XML when stdout is redirected. + if output.stdout.starts_with(&[0xff, 0xfe]) || output.stdout.contains(&0) { + let bytes = output + .stdout + .strip_prefix(&[0xff, 0xfe]) + .unwrap_or(&output.stdout); + String::from_utf16( + &bytes + .as_chunks::<2>() + .0 + .iter() + .map(|c| u16::from_le_bytes([c[0], c[1]])) + .collect::>(), + ) + .expect("task XML") + } else { + String::from_utf8(output.stdout).expect("task XML") + } +} +fn desktop_running(binary: &Path) -> bool { + // PowerShell is used only to observe the test process; installation and launch stay in Rust. + let output=Command::new("powershell.exe").args(["-NoProfile","-Command", "[Console]::OutputEncoding=[Text.UTF8Encoding]::new(); Get-Process switchyard-desktop -ErrorAction SilentlyContinue | ForEach-Object { $_.Path }"]).output().expect("query desktop"); + String::from_utf8_lossy(&output.stdout) + .lines() + .any(|p| p.trim().eq_ignore_ascii_case(&binary.display().to_string())) +} +// Cleanup preserves logs and removes test tasks and executables even after an assertion fails. +struct Cleanup<'a>(&'a Settings); +impl Drop for Cleanup<'_> { + fn drop(&mut self) { + if let Some(destination) = std::env::var_os("SWITCHYARD_WINDOWS_LOG_DIR") { + let destination = std::path::PathBuf::from(destination); + let _ = fs::create_dir_all(&destination); + for name in ["update.log", "desktop.log", "server.log"] { + let _ = fs::copy( + self.0.sy_home.join("logs").join(name), + destination.join(name), + ); + } + } + let _ = windows::stop(self.0); + let _ = windows::uninstall(self.0); + } +} + +#[test] +#[ignore = "Registers real per-user tasks and builds the release app; run explicitly on a Windows test machine."] +fn fresh_install_running_update_restart_and_uninstall_preserve_user_data() { + let root = tempfile::Builder::new() + .prefix("Switchyard équipe space ") + .tempdir() + .expect("fixture"); + let home = root.path().join("User équipe space"); + fs::create_dir_all(&home).expect("home"); + let port = std::net::TcpListener::bind("127.0.0.1:0") + .expect("port") + .local_addr() + .expect("address") + .port(); + let defaults = Settings::from_env().expect("defaults"); + let s = Settings { + home: home.clone(), + sy_home: home.join(".switchyard"), + codex_home: home.join(".codex"), + service_dir: home.join("AppData/Roaming/Microsoft/Windows/Start Menu/Programs"), + app_dir: Some(home.join("AppData/Local/Programs/Switchyard")), + port, + ..defaults + }; + let _cleanup = Cleanup(&s); + execute(&s, "install", true).expect("preview"); + assert!(!s.sy_home.exists()); + execute(&s, "install", false).expect("fresh install"); + assert!(health(port), "server failed readiness"); + wait(|| desktop_running(&s.binary("switchyard-desktop"))); + for desktop in [false, true] { + let xml = task_xml(&s, desktop); + assert!(xml.contains("InteractiveToken") && xml.contains("LeastPrivilege")); + assert!(xml.contains("LogonTrigger") && xml.contains("PT0S")); + assert!(!xml.contains("HighestAvailable")); + } + assert!(s.service_dir.join("Switchyard.lnk").is_file()); + let settings = s.desktop_settings(); + let profile = s.codex_home.join("sy.config.toml"); + let original_settings = fs::read(&settings).expect("settings"); + let original_profile = fs::read(&profile).expect("profile"); + let history = s.sy_home.join("routing.jsonl"); + fs::write(&history, b"\n").expect("history"); + let accounts = s.home.join(".switchyard/accounts/codex/team"); + fs::create_dir_all(&accounts).expect("account"); + fs::write(accounts.join("auth.json"), b"preserved-login-fixture").expect("login fixture"); + let metadata = s.sy_home.join("install.toml"); + start_update(&metadata).expect("running update"); + wait(|| { + let status = update_status(&metadata).expect("update status"); + assert_ne!( + status["state"], + "failed", + "{status}\n{}", + fs::read_to_string(s.sy_home.join("logs/update.log")).unwrap_or_default() + ); + status["state"] == "completed" + }); + assert!(health(port)); + wait(|| desktop_running(&s.binary("switchyard-desktop"))); + assert_eq!( + fs::read(&settings).expect("retained settings"), + original_settings + ); + assert_eq!( + fs::read(&profile).expect("retained profile"), + original_profile + ); + assert_eq!(fs::read(&history).expect("history"), b"\n"); + windows::restart(&s).expect("restart"); + wait(|| health(port)); + // The Cargo alias must rebuild and reinstall from its checkout while the release app is running. + let status = Command::new(&s.cargo) + .current_dir(&s.source) + .args(["desktop", "install"]) + .env("HOME", &s.home) + .env("USERPROFILE", &s.home) + .env("SY_HOME", &s.sy_home) + .env("CODEX_HOME", &s.codex_home) + .env("SY_PORT", s.port.to_string()) + .env("APPDATA", s.home.join("AppData/Roaming")) + .env("LOCALAPPDATA", s.home.join("AppData/Local")) + .status() + .expect("cargo desktop install"); + assert!(status.success()); + wait(|| { + let status = update_status(&metadata).expect("reinstall status"); + assert_ne!(status["state"], "failed", "{status}"); + status["state"] == "completed" + }); + wait(|| health(port)); + execute(&s, "uninstall", false).expect("uninstall"); + assert!(!health(port)); + assert!(!desktop_running(&s.binary("switchyard-desktop"))); + assert!(!s.bin_dir().exists()); + for desktop in [false, true] { + assert!( + !Command::new("schtasks.exe") + .args(["/Query", "/TN", &windows::task_name(&s, desktop)]) + .output() + .expect("removed task query") + .status + .success() + ); + } + assert!(!s.service_dir.join("Switchyard.lnk").exists()); + assert_eq!(fs::read(&settings).expect("settings"), original_settings); + assert_eq!(fs::read(&history).expect("history"), b"\n"); + assert_eq!( + fs::read(accounts.join("auth.json")).expect("account"), + b"preserved-login-fixture" + ); + assert!(fs::read_dir(&s.codex_home).expect("recovery").any(|f| { + f.expect("file") + .file_name() + .to_string_lossy() + .contains("switchyard-uninstall-recovery") + })); + execute(&s, "uninstall", false).expect("repeat uninstall"); +} + +#[test] +fn executable_replacement_rolls_back_when_another_process_locks_a_file() { + use std::os::windows::fs::OpenOptionsExt; + let root = tempfile::tempdir().expect("fixture"); + let defaults = Settings::from_env().expect("defaults"); + let s = Settings { + home: root.path().join("home"), + sy_home: root.path().join("settings"), + codex_home: root.path().join("codex"), + service_dir: root.path().join("shortcuts"), + source: root.path().join("source"), + app_dir: Some(root.path().join("home/AppData/Local/Programs/Switchyard")), + ..defaults + }; + fs::create_dir_all(s.source.join("target/release")).expect("release fixtures"); + fs::create_dir_all(s.bin_dir()).expect("binaries"); + for name in [ + "switchyard-server", + "switchyard-desktop", + "switchyard-desktop-install", + ] { + fs::write( + s.source + .join("target/release") + .join(switchyard_desktop_install::executable_name(name)), + b"new", + ) + .expect("new binary"); + fs::write(s.binary(name), b"old").expect("old binary"); + } + // Locking the second executable requires rollback of the first replacement before a retry. + let lock = fs::OpenOptions::new() + .read(true) + .share_mode(0) + .open(s.binary("switchyard-desktop")) + .expect("exclusive lock"); + assert!(windows::replace_binaries(&s).is_err()); + drop(lock); + for name in [ + "switchyard-server", + "switchyard-desktop", + "switchyard-desktop-install", + ] { + assert_eq!( + fs::read(s.binary(name)).expect("previous executable"), + b"old" + ); + } + windows::replace_binaries(&s).expect("retry after releasing lock"); + for name in [ + "switchyard-server", + "switchyard-desktop", + "switchyard-desktop-install", + ] { + assert_eq!(fs::read(s.binary(name)).expect("new executable"), b"new"); + } +} + +#[test] +fn credential_manager_stores_only_the_exact_endpoint_and_survives_a_read() { + use std::os::windows::ffi::OsStrExt; + use windows_sys::Win32::Security::Credentials::{CRED_TYPE_GENERIC, CredDeleteW}; + struct Credential(String); + impl Drop for Credential { + fn drop(&mut self) { + let name: Vec = std::ffi::OsStr::new(&format!("Switchyard:model-list:{}", self.0)) + .encode_wide() + .chain(Some(0)) + .collect(); + unsafe { + CredDeleteW(name.as_ptr(), CRED_TYPE_GENERIC, 0); + } + } + } + let endpoint = Credential(format!( + "http://localhost/windows-key-fixture-{}-{}", + std::process::id(), + fixture_timestamp() + )); + assert_eq!( + windows::saved_key(&endpoint.0).expect("missing credential"), + None + ); + windows::save_key(&endpoint.0, "test-key-only").expect("save credential"); + assert_eq!( + windows::saved_key(&endpoint.0).expect("read credential"), + Some("test-key-only".into()) + ); + assert_eq!( + windows::saved_key(&format!("{}/other", endpoint.0)).expect("different endpoint"), + None + ); +} +fn fixture_timestamp() -> u128 { + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .expect("timestamp") + .as_nanos() +} + +#[test] +fn invalid_windows_install_locations_reject_before_creating_files() { + use std::os::windows::ffi::OsStringExt; + let root = tempfile::tempdir().expect("fixture"); + let home = root.path().join("home"); + fs::create_dir(&home).expect("home"); + for location in [ + std::ffi::OsString::from("relative"), + std::ffi::OsString::from("C:\\invalid\npath"), + std::ffi::OsString::from_wide(&[b'C' as u16, b':' as u16, b'\\' as u16, 0xd800]), + ] { + let output = Command::new(env!("CARGO_BIN_EXE_switchyard-desktop-install")) + .args(["install", "--dry-run"]) + .env("HOME", &home) + .env("USERPROFILE", &home) + .env("LOCALAPPDATA", location) + .output() + .expect("invalid location"); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("absolute UTF-8 path")); + assert_eq!(fs::read_dir(&home).expect("unchanged home").count(), 0); + } +} + +#[test] +fn malformed_private_handoff_records_are_retained_without_dispatch() { + let root = tempfile::tempdir().expect("fixture"); + let defaults = Settings::from_env().expect("defaults"); + let s = Settings { + home: root.path().join("home"), + sy_home: root.path().join("settings"), + codex_home: root.path().join("codex"), + service_dir: root.path().join("shortcuts"), + app_dir: Some(root.path().join("app")), + ..defaults + }; + fs::create_dir(&s.home).expect("home"); + let plain = toml::to_string(&s).expect("settings"); + let wrapped = format!("[settings]\n{plain}"); + for (text, pid, reason) in [ + (plain, "1", "unknown"), + (format!("unknown=true\n{wrapped}"), "1", "unknown"), + (wrapped.clone(), "0", "parent process"), + ] { + let record = tempfile::Builder::new() + .prefix("switchyard-handoff-") + .suffix(".toml") + .tempfile() + .expect("private record"); + fs::write(record.path(), &text).expect("record"); + let output = Command::new(env!("CARGO_BIN_EXE_switchyard-desktop-install")) + .arg("apply") + .arg("--handoff-record") + .arg(record.path()) + .args(["--action", "uninstall", "--wait", pid]) + .output() + .expect("rejected handoff"); + assert!(!output.status.success()); + assert!( + String::from_utf8_lossy(&output.stderr) + .to_lowercase() + .contains(reason), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert_eq!( + fs::read_to_string(record.path()).expect("record retained"), + text + ); + assert_eq!(fs::read_dir(&s.home).expect("home unchanged").count(), 0); + } + let outside = root.path().join("switchyard-handoff-outside.toml"); + fs::write(&outside, &wrapped).expect("outside record"); + let output = Command::new(env!("CARGO_BIN_EXE_switchyard-desktop-install")) + .arg("apply") + .arg("--handoff-record") + .arg(&outside) + .args(["--action", "uninstall", "--wait", "1"]) + .output() + .expect("outside record"); + assert!(!output.status.success()); + assert_eq!( + fs::read_to_string(outside).expect("outside record retained"), + wrapped + ); +} diff --git a/crates/switchyard-menubar/.gitignore b/crates/switchyard-desktop/.gitignore similarity index 100% rename from crates/switchyard-menubar/.gitignore rename to crates/switchyard-desktop/.gitignore diff --git a/crates/switchyard-menubar/Cargo.toml b/crates/switchyard-desktop/Cargo.toml similarity index 74% rename from crates/switchyard-menubar/Cargo.toml rename to crates/switchyard-desktop/Cargo.toml index 0cad528d55..43a879b44d 100644 --- a/crates/switchyard-menubar/Cargo.toml +++ b/crates/switchyard-desktop/Cargo.toml @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 [package] -name = "switchyard-menubar" +name = "switchyard-desktop" version.workspace = true description = "Desktop and terminal app for a local Switchyard server" authors.workspace = true @@ -14,6 +14,7 @@ rust-version.workspace = true publish = false [dependencies] +switchyard-desktop-install = { path = "../switchyard-desktop-install" } chrono = { version = "0.4", default-features = false, features = ["std", "clock", "serde"] } serde.workspace = true serde_json.workspace = true @@ -28,9 +29,14 @@ ratatui = "0.30.2" objc2-app-kit = { version = "0.3.2", default-features = false, features = ["NSWorkspace"] } objc2-foundation = { version = "0.3.2", default-features = false, features = ["NSString", "NSURL"] } security-framework = "3" +[target.'cfg(any(target_os = "macos", windows))'.dependencies] tauri = { version = "2", features = ["tray-icon", "custom-protocol"] } -[target.'cfg(target_os = "macos")'.build-dependencies] +[target.'cfg(windows)'.dependencies] +rfd = { version = "0.17", default-features = false } +windows = { version = "0.62.2", features = ["Management_Deployment", "ApplicationModel"] } + +[target.'cfg(any(target_os = "macos", windows))'.build-dependencies] tauri-build = "2" [dev-dependencies] diff --git a/crates/switchyard-desktop/README.md b/crates/switchyard-desktop/README.md new file mode 100644 index 0000000000..818ad2b798 --- /dev/null +++ b/crates/switchyard-desktop/README.md @@ -0,0 +1,361 @@ +# Switchyard desktop and terminal apps + +The macOS and Windows desktop apps and terminal app show usage, edit routes, install +coding-tool settings, and open sessions in separate Git worktrees. The server +handles routing and continues when the app quits. The desktop app uses Tauri 2; +the terminal app uses Ratatui. + +## Install and update + +Install the app from the repository root with the repository's pinned Rust +toolchain (currently Rust 1.99). Install Rust through rustup and keep Cargo on +`PATH`. Native dependencies also need a C compiler and linker: Xcode Command +Line Tools on macOS, or GCC/Clang and the system development libraries on Linux. +Cargo downloads dependencies on the first build. The default Codex profile +requires Codex CLI 0.134.0 or newer and a ChatGPT login. Sign in with Codex +before using it. + +```sh +cargo desktop install +``` + +Run the same command to replace an existing installation. The command builds +the current checkout; update the checkout first to install newer code. + +On macOS, the Rust installer builds the desktop app and server, installs +`~/Applications/Switchyard.app`, and loads two per-user LaunchAgents. It signs +the app ad hoc for local use. The app has no Developer ID signature or +notarization. Reinstalling keeps existing server settings, prices, accounts, and +log history. The installer moves older `menubar.toml` settings to `desktop.toml` +when the new file is absent and replaces the old app LaunchAgent. + +The installer builds the binaries and validates the server config before +stopping services. On macOS, it also signs the replacement app before stopping +services. Each file replacement is atomic, but the complete installation is not. +If installation fails after services stop, fix the reported error and run `cargo +desktop install` again. Install and uninstall share a lock for your home +directory. If another installation holds it, wait for that command to finish and +retry. + +By default, the source installer writes `~/.codex/sy.config.toml` for +`codex -p sy` and keeps `~/.codex/config.toml` unchanged. Set `SY_PROFILE` to +choose another profile name. The installer writes `$SY_PROFILE.config.toml` in +the Codex config directory. For example: + +```sh +export SY_PROFILE=composite-gpt-6-sol-gpt-6-luna +cargo desktop install +codex -p "$SY_PROFILE" +``` + +Remove the app and recorded profile with `cargo desktop uninstall`. Uninstall +uses the saved installation location and profile. Conflicting shell overrides +require an explicit `uninstall --settings FILE` selection. Uninstall keeps an +exact recovery copy of the selected profile before removal. Restore coding-tool +routing from **Connect tools** first; custom and account settings remain and +may still point at the removed server. Preview removal of a selected installation +without changing files or services: + +```sh +cargo desktop uninstall --settings FILE --dry-run +``` + +Set `SY_MODEL` to choose an existing public route ID. New installs use +`composite-gpt-6-sol-gpt-6-luna`. Existing server configs stay saved, so set +`SY_MODEL` to one of their routes when installing with a custom config. The +profile leaves `approval_policy` and `sandbox_mode` to your existing Codex +settings. Reinstalling backs up the profile before updating its managed keys. It +preserves unrelated profile settings. Updates from Settings preserve the entire +profile. `SY_PROFILE` must start with an ASCII letter or digit, use only ASCII +letters, digits, underscores, or hyphens, and contain at most 128 characters. +For example, the installer rejects `SY_PROFILE=team.dev` before creating app or +config files. + +Open the app from Finder or Spotlight. Closing the window removes the running +app from the Dock and keeps the tray menu. Opening the window from the tray +restores the Dock icon. A shortcut you pinned to the Dock stays there. +The tray includes **Connect tools…**, the three models with the most recorded +tokens, **View model usage…**, and **Settings…**. Model totals cover the +retained log and include classifier calls. A final row combines any remaining +models. Clicking a model row opens Overview filtered to that model. Choose +**Open Switchyard** to return or **Quit Switchyard** to exit. Quit waits for a +queued or running operation to finish. The server continues running after the +app quits. + +**Settings → Review update…** shows the checkout and planned changes. **Build +and reinstall** starts the Rust installer from the checkout used for this +installation. It builds that checkout's current commit and preserves the current +Codex profile. Review the checkout, local changes, and planned actions before +starting. Settings shows the update stage and outcome. The updater keeps running +when installation stops the desktop app. Only one update runs at a time. +Progress and errors go to `~/.switchyard/logs/update.log` (under `SY_HOME` when +customized). Keep the checkout and a Rust toolchain available. Update the +checkout first to choose the code you want to build. + +Preview installation with `cargo desktop install --dry-run`. On Linux, the same +command installs the terminal app and a systemd user service for the server. +Linux installation requires an active systemd user session. Containers, +SSH sessions without a user service manager, and distributions without systemd need +separate service setup. The repository targets x86-64-v3 CPUs on Linux x86_64 +and Neoverse N1 CPUs on Linux aarch64; older CPUs may not run the binaries. +The desktop GUI runs on macOS and Windows. Windows requires the MSVC build tools, WebView2, and a Task Scheduler user session. +On Linux, the terminal app provides usage views and config editing. Login, +session launch, and open-file actions require macOS or Windows. Run coding-tool +login commands and open files yourself on Linux. Model discovery needs `curl`; +session creation on macOS and Windows also needs Git and the selected coding tool. +With a custom Linux `SY_HOME`, pass the settings file explicitly: + +```sh +"$SY_HOME/bin/switchyard-desktop" "$SY_HOME/desktop.toml" --tui +``` + +Run the terminal app with: + +```sh +~/.switchyard/bin/switchyard-desktop --tui +# This command runs the terminal app from a checkout. +cargo run -p switchyard-desktop -- --tui +``` + +Tab changes sections. The footer lists navigation keys. In Routes, `/` searches +and the arrow keys select matching routes; `d` deletes a route only after you +type its name. In Coding tools, `p` previews a diff, `x` selects a custom file, +and `i` shows the preview before a second `i` installs the route. Restore asks +you to type `RESTORE` before changing coding-tool settings. Changing the tool, +account, or route clears the preview. In Routes, press `e` to edit the algorithm +and model roles. Tab changes form fields, Ctrl-U clears a field, arrow keys +choose algorithms and endpoints, Enter reviews the changes, and Escape cancels. +Route Save, session Launch, Restore, and source Update show a review before +typed confirmation. Cursor keys, Home, End, Delete, and paste edit text. Failed +submissions keep the form and values. The terminal restores its screen and input +mode on exit. `--print` prints the usage summary without opening either app. +`--tui` cannot be combined with `--print` or `--validate-toml`. + +## Routes + +The route library searches public model IDs, algorithms, endpoints, and model +choices. Select a route to edit its algorithm and model roles. The app opens one +editor at a time, even when the config contains hundreds of routes. **Refresh +suggestions** loads the endpoint's list; you can also type an unlisted model ID. +ChatGPT's private Codex endpoint uses the saved Codex model list and configured +targets. **Review and save…** shows the changes before **Save and restart** +applies them. The app keeps drafts during the app session until saving or +**Discard unsaved edits…**. Discarding changes only resets the editor. **Delete +route…** removes the selected route after confirmation, preserves its targets +and endpoint settings, and uses the same validation, backup, and restart as +saving. Refresh keeps drafts, focus, and scroll. Drafts belong to their config +file. Selecting another file keeps the drafts for the original file. Switching +algorithms preserves each algorithm's full set of choices. + +**Save and restart** checks the complete edited file with the bundled +server's `--dry-run`. It preserves comments and unrelated tables, saves a backup +beside the config, and restarts the server. A failed check leaves the file +unchanged. A restart failure after saving is reported separately. The app re-reads +the config and rejects concurrent changes detected before replacement. A draft +from a different server config file is rejected before saving. + +Switching algorithms writes the new algorithm's default settings and removes +settings specific to the old algorithm. Targets keep their existing model +settings, such as `extra_body` and `omit_body_fields`; the review names those +settings before saving when a model family changes. Check them if the new +provider rejects requests. Shared targets are copied when an edit would change +another route. + +API keys entered for model lists stay in macOS Keychain or Windows Credential Manager. The app sends keys to +curl through stdin and omits them from frontend snapshots. An endpoint must be +configured to use authentication before it accepts a model-list key. An entered +key applies only to that endpoint's exact `base_url`. On macOS and Windows, submitting a key +always requests a fresh model list; a rejected key is not saved and leaves +the cached list unchanged. Model-list keys do not replace the server's +`api_key_env` credentials. The app and server LaunchAgents do not load shell +startup files. + +On other platforms, the app rejects entered model-list keys; set the environment +variable named by the endpoint's `api_key_env` and make it available to the app +instead. + +## Install coding-tool settings + +**Connect tools** has one coding-tool selector for Codex CLI, Codex app, Claude +Code, and Pi. macOS finds the Codex app by its registered bundle identity, +including copies renamed to `ChatGPT.app`. Windows reads the current user's +`OpenAI.Codex` MSIX registration to find the app. Choose a route and settings location +to compare the current and proposed settings and their exact file paths. +Credential values stay hidden. The preview changes no files. **Apply routing…** +shows a confirmation before saving. Apply compares the reviewed file contents +with the current files and requires a new review if they changed. Progress +appears while the action runs. One dismissible notification shows the result, +with backup paths and diagnostics in **Details**. If the settings already match, +the button reads **Routing already applied**. An optional absolute file path +selects settings in another location. For Pi, choose `models.json`; the app also +uses `settings.json` beside it. A custom file cannot be combined with a saved +account. + +The app's **Connect tools** page defaults to `sy.config.toml` for Codex CLI and +`codex -p sy`. The source installer's `SY_PROFILE` choice does not change this +destination. Select a custom file to update another profile. With the normal +user settings location, the Codex app option changes shared defaults in +`config.toml` for both the app and CLI. A custom file or saved account changes +only that destination; the coding tool must load those settings separately. +Claude Code gets environment settings in `settings.json`. Pi gets a custom +provider in `models.json` and defaults in `settings.json`. Unrelated settings +remain. + +The app backs up each original file as `.switchyard-original`. If a +file did not exist, `.switchyard-original-missing` records its +absence. **Review restore…** lists the files and original backups. **Restore +settings** keeps a copy of each current file, then restores its backup or +removes the file if it was originally absent. The result lists the recovery +copies. A successful restore retires the original backup, so the next +installation backs up your current settings. If backup cleanup fails, retry +Restore before installing another route. + +Install and Restore check every selected file before replacing any file. +Malformed settings and symlink settings files are rejected before writes. Each +replacement is atomic. If a later replacement fails, the app tries to restore +earlier files. A crash can leave Pi's two files out of sync, and rollback can +fail. Another process running as the same user can also change a file after the +app checks it. A failed replacement keeps original backups for manual recovery. +If backup cleanup fails after restoration, the remaining receipts keep the +restored contents available for a retry. Recovery copies remain until you remove +them. + +Caller login routes require a matching coding tool and provider: Codex for +ChatGPT or Claude Code for Anthropic. Pi requires a route whose API credentials +the server owns. Configure those credentials on the server before installing +the route. Claude settings with a user API key or bearer token must be cleared +before installing a subscription route. Switching from an API route installed +by Switchyard removes its placeholder credentials only when the existing model +settings and local endpoint match that installation. If the local endpoint has +changed, restore the original settings first. Restart the coding tool after +changing its defaults. Project settings, shell variables, and command-line +options can override them; check Claude's `/status` for shell overrides. + +For older installs that replaced `config.toml`, `cargo desktop uninstall` restores +`config.toml.direct` and keeps a copy of the active config before replacing it. + +## Start sessions with separate logins and worktrees + +Codex CLI and Claude Code support named accounts. Expand **Sign in to another +subscription account…** and enter a name. **Open login in Terminal…** opens the +tool's own login command. Complete the login, refresh, and select the account. +Switchyard keeps account directories under `~/.switchyard/accounts`; the coding +tool owns their login files. The selected account determines where **Connect +tools** saves settings and which login a new session uses. Existing sessions +keep their login. Switchyard does not read, copy, or rotate OAuth tokens or +combine subscription quotas. + +In **Sessions**, choose a route and login, enter an absolute Git project path, +and click **Review session**, then **Open Terminal…**. Each session starts from +that checkout's HEAD on a new branch in `~/.switchyard/worktrees` and opens in +Terminal. Uncommitted files stay in the original checkout. Each launched session +has its own model settings; launching another session does not change user +defaults. Codex app uses its own workspace controls; choose Codex CLI for +worktree sessions. + +Codex and Claude launches send a session ID for usage correlation. Pi stores its +session under the private agent directory beside the worktree. Its requests +need an integration that sends session and turn IDs to appear as a correlated +session. Otherwise, Usage lists its calls under **All sessions**. + +Use `git worktree list` and `git worktree remove` to manage checkouts after +saving or discarding changes. Successful launches keep their branches and +private settings directories until you remove them. Named account directories +also remain until you remove them. If launch setup fails, the app tries to +remove the worktree, branch, and private settings it created; cleanup can fail. + +The app does not show provider reset windows or manage task dependencies, +session resume, remote workspaces, or review comments. Provider limits still apply. + +## Usage + +**Usage** lists the actual model, public route, timestamp, input, cached, and +output tokens, and recorded session and turn IDs for each completed model call. +Filter by session or search for a turn, model, or route. A user turn may contain +several calls. Classifier calls are marked as routing overhead. Missing IDs +appear as **Session not recorded** or **Turn not recorded** in the desktop app +and **Not recorded** in the terminal app. Switchyard does not infer them from +prompts. + +Recent history reads the last 8 MiB of the log plus one byte to check whether the +first record is complete. It keeps at most 5,000 complete records and excludes +partial records. Usage labels a limited view and counts unreadable records. +Overview starts with model totals. Use **Period** to select today, the past +seven local calendar days, or all retained history. **Compare** switches between +models, routes, and sessions; **Measure** switches between tokens and calls. +The chart shows the ten largest totals, and the table lists every matching +name with exact counts. Click a name to see its recent calls with the same +period filter. The daily chart shows usage by model for the past seven days. + +Model, route, and daily totals use the incremental full-log reader. Session +comparisons and per-turn details use the bounded recent history and label its +limits. Replacing or truncating the log resets full-log totals. The terminal +app's hourly sparkline still uses recent history. + +Charts use Apache ECharts 6.1.0, bundled in `ui/vendor` with its Apache license +and NOTICE. They load locally and require no CDN or frontend build tool. +The minified dependency adds about 1.1 MB before compression. Tooltips render +on the canvas, and tables provide readable counts and keyboard links. +The layout follows free references from [Carbon](https://www.carbondesignsystem.com/building-blocks/data-visualization/dashboards), +[Tabler](https://docs.tabler.io/ui/getting-started), and +[Primer](https://primer.style/product/components/page-layout/). + +Routing history stores no prompt or response text. +Observed tokens do not report provider quotas, reset windows, or authoritative +billing. Both apps refresh usage at the configured `refresh_seconds` interval. + +## Settings + +The app reads `~/.switchyard/desktop.toml` on refresh and before each operation: + +```toml +server_url = "http://127.0.0.1:4123" +routing_log = "~/.switchyard/routing.jsonl" +config_file = "~/.switchyard/composite.toml" +launchd_label = "com.nvidia.switchyard.server" +baseline_model = "gpt-5.6-sol" +refresh_seconds = 30 +``` + +Use **Settings → Open server config** to edit advanced routing options. +Model lists are cached beside the app settings in `model-lists.json`. +Usage remains readable when the route config is missing or malformed. + +## How savings are computed + +The server writes one JSONL record per call, with the model that answered and +its token counts. + +- **Actual** is every call priced at the model that served it, including + Switchyard's own classifier calls. +- **Baseline** is the caller-facing calls only, priced as if each had used + `baseline_model`. Classifier calls have no baseline counterpart, because + without Switchyard they would not happen. + +Savings are the difference, so routing overhead counts against the figure and a +bad day shows a negative number. Each period's cost and savings estimates stay +hidden until every model recorded in that period and the baseline model have +prices. Overview names missing model prices and explains estimates under **How +cost estimates work**. + +Codex's "Approve for me" reviews count too. The server config that the +installer writes sends them to `codex-auto-review` on the ChatGPT backend. With +a ChatGPT login, Codex sends these reviews to `codex-auto-review` even without +Switchyard, so the installer prices that model at the `baseline_model` rates, +including the cached input rate. +Each review then adds the same amount to the actual cost and to the baseline, +so reviews do not change the dollar amount saved. They do lower the percentage +a little, because the baseline grows. If you change `baseline_model`, update +this price to match. + +The app needs a price for the model ID that the routing log records for reviews, +which is the reviewer target's `id`. Without that price, the app hides the +savings estimate for every period that includes a review. The installer does not +overwrite an existing `composite.toml` or `desktop.toml`, so an existing install +needs the route and the price added by hand. + +If a reviewer uses another model ID, add a price for that ID. Any period with +an unpriced review hides its savings and shows the missing-price hint. + +These are list-price estimates. On a ChatGPT login there is no per-token bill, +so read them as "what this traffic would have cost at API rates". diff --git a/crates/switchyard-menubar/build.rs b/crates/switchyard-desktop/build.rs similarity index 79% rename from crates/switchyard-menubar/build.rs rename to crates/switchyard-desktop/build.rs index 403b166158..f6939dd28f 100644 --- a/crates/switchyard-menubar/build.rs +++ b/crates/switchyard-desktop/build.rs @@ -2,6 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 fn main() { - #[cfg(target_os = "macos")] + #[cfg(any(target_os = "macos", windows))] tauri_build::build(); } diff --git a/crates/switchyard-desktop/icons/README.md b/crates/switchyard-desktop/icons/README.md new file mode 100644 index 0000000000..fad7f36588 --- /dev/null +++ b/crates/switchyard-desktop/icons/README.md @@ -0,0 +1,38 @@ +# Desktop app icon + +The app icon uses a connected route junction in ice blue and lavender on a dark +navy tile. The broad strokes remain readable at small Dock sizes. + +`icon.png` contains the 1024 × 1024 RGBA source. `icon.icns` contains macOS icon +sizes from 16 to 1024 pixels. The exterior of the rounded tile is transparent. +The menu bar uses the separate tray assets. + +## Generation + +Gemini 3 Pro Image generated the artwork through Inference Hub using +`gcp/google/gemini-3-pro-image`. + +To generate a replacement, request three distinct route concepts and compare +them at 16, 32, 64, and 128 pixels. Refine the strongest concept into one +connected junction. Each request should ask for one image with `n: 1` and +`size: "1024x1024"`. + +The selected image used this exact prompt: + +```text +Design one original professional macOS desktop application icon for Switchyard. Switchyard is a Rust LLM router between coding agents and inference servers, selecting the best model for each request. The desktop app manages routes, tool settings, sessions, and usage. Deliver a single square 1024x1024 icon artwork, not a presentation or mockup. Rounded square dark midnight navy tile, subtle refined surface lighting, centered simple abstract routing/switch junction symbol, large bold silhouette with generous negative space, precise smoothly rounded edges, recognizable at 16 to 64 pixels. Restrained premium developer tool aesthetic. No text, no letters, no logo of an existing company, no NVIDIA eye, no brains, robots, circuit boards, fine lines, stars, sparkles, or busy details. Flat front view, no perspective. The tile should fill the square canvas edge to edge, so the rounded tile exterior can be exported with real transparency. Concept: a SINGLE CONNECTED Y shaped route junction, with three broad rounded arms. One vertical trunk starts at bottom center and gently forks into upper-left and upper-right arms. All three arms meet in one smooth central junction with NO gaps, no crossings, no disconnected fragments, no arrows. The left arm is ice blue and the right arm is lavender, blending smoothly at the junction. Use a large centered calm confident minimal raised symbol, not a detailed railway map. Keep the entire symbol INSIDE the tile with at least 160 pixels of interior padding. Plain solid white background outside the rounded dark tile, NO checkerboard. The square dark tile spans pixels 64 through 960 of the canvas, with generous smooth rounded corners. +``` + +## Export + +1. Preserve the generated image before export. +2. Isolate the navy tile from its generated white exterior. Fill enclosed mask + regions so the symbol stays opaque, and soften the outer mask by 0.35 pixels. +3. Save the result as a 1024 × 1024 RGBA PNG. +4. Resize the PNG with Lanczos filtering into a macOS `.iconset`: 16, 32, 128, + 256, and 512 pixels, each at 1× and 2×. +5. Run `iconutil --convert icns --output icon.icns Switchyard.iconset`. +6. Inspect the PNG on light, dark, and vivid backgrounds. Check the icon at + small sizes and verify every ICNS representation after conversion. + +Keep the generated artwork inside the tile unchanged during export. diff --git a/crates/switchyard-desktop/icons/icon.icns b/crates/switchyard-desktop/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..4e19320365745f2ab8c7dcb805d27f86949ac193 GIT binary patch literal 1726562 zcmb@NQ*b6u5a7S$%O=^_wr$&Xvay|PY}>YN+t$XmZEIuP{;#g??%^Kqp{EC3H8WL% z?qAJV7}+=iu+$ALj2M{!095gC1vzn8C@d%d001i~A)@q83;ZXL;Q!JJ3;XSV3dB)K zTnJDzjdS*|AY!5}X(}rVp!%1G1b~EE0Kon;`6pQa1ONc$fdGL2G{}E-d7%HhRUi-e zfAaqsiYW@!0RSlFk|KgCZXj1$o>AIM?%$@@T`t4iofm%tk+fR;LsY3+{0Tz&?1Ty` zBr6Ik?(vh6u#R%S6w74+8$klJ6&02M&xStU{=CYJDT^8lsflz?s*oVkLbRli8# zyN!O`ulB%b;aW2s+laup6BQ68=mXz`ce9c?;FUX?ZEeP*-W-# zaxyZWnU@9=+#vwIoUvYgW53;}$W;EetRui(N^O|G=$wiqZ>qiV9K?GE^4i zGIu4(5%j8zX7{zUW1s11{3=dZn?SSLsHS@#q zNS7fH)HKeE<5tAO^0NGMdmB@lyUlvwrMSNu%36tjj^Xog;QN?w$-BwRt=8#o<02;{ zgN%XT(SZ42VMy=lT7&`vpoj`YGc(9h@^)gHvz*QIlc9-dU98zT5}ZlE>~V@4E0QiQ zprJyIiH1w%dl-Pv^;vs0E`Axddoy4+;d?8WZPiOl^Srx%)NbEeWI5vVdl7@K)(?-= zfP_=RIIHKia>D_^!4QD>$Uud|>Gzi?1+o})qP8@)d$~9@@h~%~yu5s!^gJ^y z2kOlincP`U&Pr^!&F~(%Zrk8xWMpV<*|2I#)JCnN6050IRfF5Y)HS??xvE3~-@9Lp z$Y$&27-F*haen~92L1@i^LB&0%O8{c#&FS;360;IPiJM1u6jQ)%Si`EL~XP@OP`Cz zW_L[A~AS$kbSS8be=DXteJys%&ZtyDEwxbq&L7dX`5 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�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ʜbS%fY5$plh4i(ZhY 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
}g0( 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

k~*; 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%0AOz_vU;G7(Cl}O2=9POp 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

#^Kj-4OA< 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�uF5#i0`aDZLBEFR z0E`m=?xZlz^^cMjZKOffp`s&dk5!6CF=lkzuO8Sb%jSI;)$rPWJM58o7dg5YOBJU^ zP$4#=9ytk7UggZyz)!9~-sUJ^&XPcl(ZOdl4UPCTOPRNerKIRak(i7F`x3JgLG?KF zLZ0NIgb-(ysTn2KA5AWrerDp%AT!^Y^|MCB&4%X?!hwl*g8HaFv^3wm>oi^|96F_J$Y3Vt)k}`U}xJXslk|V?}-+%XSfBfUfQ8GWq()4*2Zo7NF zWi=GNaC);*!2?E}W~s6=9U#uwAr=x@fIKp0Z_l^2Pl zJqErp(YkX8XK*K=99c7JGuBWNXv|Ir8MD;!oe&zU!f>;E6m?);kue-^;H%W>on0d` zRF}iVt(y!>d<{kHLtO!nkySD78Q+VGHV|{`;5j^zvgU0Epcuf7MQD-C)rI@h%q<9R zZ(a2ujXlv?+7$7y=^Sjo8REaP2-cIP@nQ_TkaHd%qOU0AJp76YoY3bC*FfoH^(Mn~ zF=lIGj(G5EngTwQ2)9pb-z?L}oTcGd8#G2LJsQd9ktg%G1+ZP4C{A_Uc675~x7uzi zEH=7Tx-6gotRC!3jOtCUV9r5G$V|AC+Oi#94~K7-3~fDJjk_VpH#!=3AD(Se4*s;F z_fZEwi!e|Pf&F%X=RF%m;?zevFj8jkj8Dc3vWb_dSKB)bL2~-b+u52&+P%yo&&fNL zH+T&C&DbUn=GIE@Xf~>iDsi%=Jpvg+iFx+HAKLw!fPd!ga?`@a=0Qk*Fi%+W9INU` z4iyh24hX+^9h=;UX37efZ=WMh0X&nq^% z-0CfyKmFUEoTm>?Eq-!#_Rt`jXJj{Ukg_TZqdRumDqv2T#`G@44uD}U9BLD97rU{L zoX}X*e8G8a>v>sk5`#{xb2Pg&LHXzd@dUCtK9RFZYO}dGH}HwjX0fuk1m1ooZf(0Z zZbEN;Wiv3(A*?!eb**bvyOFILJJobH-5gS%UmCOgbEtsN&8}8o($i6EEcr;(o!1ZZ zzE{RodkwC@h%zz#BC-SPfK8QcfGE^HNie2qkmqpP0S!31F-vFiRB%g^1ACtct;nq> zH`d=unVtC?Nyh`HMb89yWF>ge$!`V?6}lN$TE#G~*U(;4FoB`HSBpWqEt|J27!v-GMP-@1ZIL0g>%bHXXfx|=y?*RAuuBen5< z$d)xwxJ%@Ef>(#Di{9yKlM>>DNjcb?BRB~Z#c?=i) zV@72?G?FQ)ZAt7JmK9XqG~m+4k6Pe(@Qjf>+>k=Qe*dsG-dL292wo8AX}Ly<4SU{; zKPG?~8yVS{SWkIoV>a2uEj@nNJh+nC;CN5mmuQcd@EXK3=foy2FtY!d&gdeaPxE7g zjH25cWL`0mfSUusrJJ)qYjX5)Orp$3IDs9ZRg`B%Us zP@3GBII{H+mLAtraG($~2S?2zCdJTV+~j;4xZ!_sJpSVGt0!JdHXPPLr0uxzzm0*@PE5SHZ*Gcavz;-Wb%N5mR5>;md+3n% z#ag|1SX1iUt8I7-r55PmCgw38gZkvLl!e6gcs_%-&v5l3-TeU?+(UssJl0A{uW4Jf z$p=Wl8K%w%KOR;lAA4pj!A>#GCLK7BJb#j%1eB7Qd~XtJpUG$pCz!6n>1J|p7;<<1 zE9k`jTGco6766-(7xIj8Ha|8yCLoKPDafeKK+^OmQ)dzwS}qhRQ?q-aqgj(wURbo( zd}OiVU1c2V<_#GdD|8qGRXqGW2?CX6jKYq7Zx!(5>D0QQ>oa(-y`9QXI#^|}maAy3 z5tW!0W2nNx3LPYKvKaOL2O zw9XsHTrmwfobAdidiJTLcE1X7<CTPjuq5i9>P(oi5wK zzM_^pH)0qSM{#47LBFWWhkZz`#qQ}>ZM|!w#o-xN1J3rXeGh(LoFL?Lv_(dmOsI$j zh(ddGBc^SXwB1+S;KhgW9bdIjT$O@ME4sEk z)`PTj2(m{=KRMHn&WK0AFdgu5eCAm>8c!aqPhN3QIM%H@Nv*{rjAx)~L54ywBsnpj z4L%uv?dqGk0mz>`F|z(kp_v2ju^C8?EhEn+A8mA=C$JlCz^l&d0$ZFWPS{G|2^>{( zm{Tv>mpGSyaYKLbng2MNe^M*If!k>(fpOcyn&VTyx}3dkCA&nNA5CdO=A2%5rQpn& za-FEh%_j+FuX{m#K^&j6xf?+2^t@PVZ`h72X96JGpA&5erNk3F+1Q^;*vc(7`2g_K z3xd*=UwQG-V(@y9FR^K}yo_P+CKe!4Ic*x^CS)!kQTRBCvFZ481OUO>e`>Ya6|!0D zQYs&hC!gS#pZ{r)HW&Iye!!u%;8Erx4adYtLwL3+qs1XPr1}hi@R|%p?nmiCg#F6P zbaY4@{z4$j%%Ls9tDa8e2I0yrZ--2tg5lw4edg+aM-bF=_&FKgE?f20xGCCr50|b@C-9pb6nM zl)f|evB=oInEVFynCG!$I4u#tjg8@bR@#O0dL^SF>;oTXhh$XvcEiHLkk+ zs0@6y9d)r&XMBQpF4CVIz;s_XJ{dbH0s*{E0IPiiM=-`-KNg|)`EC+g&eMHfee&4J z!NWh)oO8b6Mo$Day_TR-e6K0)n5W~NXWH(YOzjW3xRlFoXpdz8U$6RRZUDG5>R|eW z+mrd3@nKvkFT;AxQvjbhp1A=tgfD!@zm@^2Itx2HMk($|fs@_d9EN6C!hUOf=)170`pVUI3``$BtS`D zxhUEbrG?xe7I7xQHnbxQ)-=O)$wbLXOqd^U^l_yT~Vjajc;7n_drlp;OCM>0n8 z&~G=KbZ8u7(2+|qF!5TD-FG4Qa-lc-T=3^bea1ujd{B|+c>Mi7ZMn)98jp=~kk+!F zfymDn^gnCB^>ha6AKM8~4yAlVkY_A#reEYi_t_Nr@%ItfNBY@23CzC-&ddBVO3pV5 z%0N=^i@X_ToW~~9B>qy@mGSX773+L`kbxwUE9S%H#y*_M6=s-SFAQo*^;zgrxC1tk z`woBBhy%+~XgS8)&gR#l7%SCiT-sZ^exOcV^CY` zqbN@uo;CL4w2kBVp}+E8aj*W$LBCF`bPJbP2L;gFK<&_je|TkTIsXUfS0rc@uQ|um z!np;=X)IjFRK-s>2z0QKKn@q*@PZpKUP!X8LCiZRRG73i=ta--jsJXbb5&J zW}OD>=ta+tGJ0%2p*5(+(O)O0i;f1R8`ck8gp#yy`pE(f_V}o25`Y7i#DsA>(6gYv zeo2_P_)s&alDU}oe*?h6OU|a%!TiFOf4;2G?cPvfB}RCL6df<{LqIHL!^{2rfS_b+ z12?|Wka;{eX&^ka`=Gb1^1%Jy1I3ez~w_g)}l{7F9ZWt^$uY7Ict!? zbYpl&^*7e-?fP#V`VsC7o<>O%o(=FQAK*um2{LpxFAwqqGtIY*_*3lHMpXA>y;p#$ z>ejY*k>!njFw5Hjt97XB@`^Zqcl{f*7Z%_+)Xm5PuU4?5yED7BU~YruQGHj=lcRQ= zwr$Ip)IQK-(}~gxCH}WkkZME`1dNcs`QgoSm{)JIloJ1z&)s9z?4l4y0g%&?! zpzSjoZBXa>qNX(*PQf7xQ{4b+Fb1l)z#?;@=i;9{bt%@UX&2Wxl!9+WFks(%L+|Xkyv&JHOBAHt)htSC{4^QOKP``}Prh^k;}X zm`|{hf)@44?>TR;ISLHk4-RuK6o~3w8NE~YVS{AU?~B@;T+2AmvhLq@WmEl)<(`Fq zG)iYVi8(|)v6ghIW zm(CYl?lfk{;CZ*7jhjC{v=b5~Bb}clryBt!lc+oc$DdYooL_v}zh!Tnz7YV=k6eg0 zEq|EIxk-=ieA)nXC2!wLe_}^^bnQCj@m$oj1? z2i@qeCto|j*URA%Swq*+L+D^tM?G>?CZLfW=9TZEd1>B=YHi@QcRj0QscxF)w|S9w zyS@!0Tg94Aee=6T8p!s%0^Qs|TA_ug`o-2@zDR7o8a`jY^=dEz?#H6@wAs0UWjrE) z9pT>Img8bUoIE>)nxcFz?3;M|nF{y|Ov|NIT!nH`jlRpz_T^{2ad@ z6Q~zTabAI9?^w=&<^4saXn*-RfSBA?x7D^vPuF`Vf5RK{5ItcYHZgZ8Ycf6_>&Eo%H|xV(N)a4&zoVN zr1_f~znKpKrq>!ap4G6CaANZe=$uJvcXTbP(e~RJ4y=46_nAma_k3V z^uOmILXFeu&5YT7=*H?wc~DcFr0TY<Y0A>ln7oY7q3?M&;R`LzTO&;zVZA@ z2It>-8N-3a=$UdXUZ{Z8Nrm0V+z?1DdoJAC^h8XSc66Sx`7DaTR@+B1?_jsevh>Gv zgh9dg)E$Bd2Xcf9kaWhdd14su7&spF!fyS={26INeg?H8ay_|k11kr3ZcR1ZZk#6m z3~2kqsHWHIwE~`AtKC3SmFAYnK!NG8Pm4uz6H8+yjTb)FSCs2)ch1(n^+||&Jp+2B zJMb;~6LxFg8jZ<`qVtdYTwXDwB*z>2t2Mrv8vur;4Jaa%0X`4lt2u{IltywZ54bX8P|diL1Wg|# zsOeV*`n2A;(HNT~ZW7@A$#3KXFaefqn)(!BpP2J;M7V{JPtHGo9zktB6v#k21kR>P zD{lcz5?&ZZsjiRl;lTY~Y@EnL4FEW`4{9oe=aK{|GdyX0<~SU$sAVYc236M_CMVRW zJglSJZl9D_$d7Ro*jUN)L5#=!r^m<~;Ks#uV{F|sSTWU4`%>e4wG5-_#i}!0^4+SI z<30RPqq5B`Zw@eh5@4Sf#O#mfExC#1b%KW+@F_d>X&}42u-5QpwMmDG^KD+La!kGx z;~OcQF5gJWhUXR3jI^4(NN9ULG<;_kC8GOx&Qn8uiYQ^S`5C`rvfyoBy2lxi5M2;n z0TZ>lD+x&@srI3UalX>!hhpu(xs&sUChs$H0p~q=zeQnLr@CJWNQP%B z;8sFZyfr`qRQ%rnwymG%c?&u&^@fO#+$`(xi*6Y5uZg)Sfg`UCFa-XmKL`^?lKp&y zAPxvBX4KIJH5)M|sCm@Il(Ywqc$2MoJ(y#upY3DXyeJotB~PAAYt^m4B!?5@ONB!o z!Ljuok6+RGDBv@H+QWnRG=Dx7oKGT`G`x%nnU5BHeljvAvnEfTH z0&^3Z)kzRZJx8@j_@Q{cj0-44r(`3Czh2?(IR0cdUjRwc_aNa<7KeW4H5rbL zL?O7gjpOtbhJ=^0`SU)y;gt|~EnQla96P+YT^GLi86$C!+7%>mPhgI0ReV<8LHM&e zy-p7g&&0XtW)lI|%~6uC_FS%og&RI$`K*DTdGIuOSg>RCwn!4X6S)4SAR82Pj1BKs zax=kZdj6(gCb+zAJ9Ig6Z!@?%v^K2xdv`PF2| zad@Bbokif{A2rR{dz046>6KZ7TYrQJ!b$vLxhJyxfHUhMQfDws)|1I@zCL zd*0mi#~1F2-yi^weaS%E^jwC~&|?r_l`Ez$!M&J?CF3ruey=TW!giN!4amO+U+j=r z?+pCj{lT3MWSiwkeBT`SnY|PzA1=tr!s`o@+JDwl`n+wRAS&Fza1-JGLob=r?R$M~ zZ_YOPI~OZOjaHXxlnS2VAr4GD!$+f6BjA&i2-@P*=bv=3?_URi_RWe35+Hx7D2|W{ zApx0!IFB?EE8`u=%hA4MkSy-@65qAEb@y64hZnT;wDn-vPmZHA0$Bw+kH5S;ofZ46 zC9%q!4`^oQlGl|VaSsE69;;WF<6>zJ0$hLI3c6*>(hVP0$C!52nN#^l(K%zSoSVdW zh1>)YZ^w`HH&7cpzi}kC%xTeBiYQNRW%=#uosUA#ym5W=IpbXJnBOk;uV?yZZUDSk z&bU-ywr0jy!l>JP>1%!NhBCaj-mz{K=r}s`OhyEtLpH&OukjDvn`Y@R(-%0tI>mh_ z0%mgc1~dUK_BSL_U3MIHYsq!(PVZO~z_OOMYTw~XxGk!U#f5gumZf_%i%MEbXJvHR zDvh&;U;z=iC|%Aw$^xS1u~bnk-;x)D2_Kc&iZun2w3rE*JAN6#*T-1d)W+5B9Q?F< zK=||HW`Syp)ECxV#pR@;UAq_g@%BYNFAc};5A!L3Ge^7!$y}=VS(!MzPkHWiLqK5c zdXNc@{P5B~{q#Qzs;@i1ZHauGclx9kFLFcEw;@bp@bpXM4oVg(F-17CEji$i#KA(; zH+fX2GS54*gLos*WBM|tac6%*?j1QRMHn zy>W03z16h)STx6F1iIvIJq_n<_6j&$P*UjU>8l9#l-fSI7{BwvSQ6x4QQ}tTC#i^P zl4$E{XV5+fcBp2aKY;xzHOt&9B1w3xc0Rv~?6(Ks_UhlB{>vG&h_p$05*`yUIpBy0TY(QMZ<)=Y`p1&IK%>{8CTu1C81Lwc*7ckG{ zrO=-bQhKZB+X9^vV0qhtxF#UJzL+R4e&%}#Nbq~!qfqI1xY2{x(8NMVBKkcAdD=&G zTf`Zl1D(M*ZN`SjxF7u!XTt&EL4iM#kH~GaAC!3O0Ty!!cHf5s*-B(Md8nMOnSYeh zH>?5JjsmYQFINr@@Wzod;j&#B+@aBr^@6JdX?)~&XL;AUJZ~{J6hj~A>(aVd+NAR= z*2VaAxu9`OZ>rs`dIqOOUXb$1dBtaZzLoOL+yJmX{Bnuvobw17rdc~`jN+4{2j)GF zVSjIV5E@jp8an&DKclA!e9PWO9~_@;n&m@Otlo};(I6ZT3D*EyK%~Ez$V@wxYUO=^ z@960lkN4%W49SK|W+OVW4bfr8do)iJFvcC>m?~VctNHTUIT4`r6;-o!QPv24ObqlS zqAd^qd7$?us1q27)F~1iUrKa-_U$X}5Lt;~aCnW3$wdO|-)}8ZJAz??hKJaB#-|IY zF2Y=p@%Qy-LK*7!8{^x(#@Adf;+nwpNiWOhu0Sr_IAGL`f}Xnn%*9;!=e=(3FmfY7 z?|FFBa6FOG{mk<8?i zU!8A)8aoEIW3NMN0gdJG&S^Qy+*T-cWZJ8qvo%J&xE=(oyRCitt@rvqW_&h`EV zypFqsdojHZEF062AZMZ;*m!2lGigF_0rgTeKE3dTRmxw!|4AHr?ym=h59UX!aRRnd)B_$tjq!{ju z-2}|=*X3THoFrUiH_U-li()D3mY4;l_WW;f%^pZKaDMO^QqtnR+D_vGA#>#Q2*Nqu ziH@!2sq<>j>J20EwJrMmcTHiz9}V z7s$Sq@(ukJfToq*N~7fsP-E52E91wJ$DSGFSkHitD#*Kid)}yqf(`l5EgAEfGp}%R zR3-;=tS60InrMwpRsl`W%i|{5ssl9-HdX6xsAx|b334GYY~8fkNX)CYRiH-K_C@lL zm>+u=IeE?CHOE>{01Q@cMCFNroyS8x*4OHWV=Qpjae_ND=T+Cq)wt0OwutNMC=G<3 zXi-WIzZ}phNL{H<7)+GbHbzyo{e~kJfwh>zCwZPdC$zLuagEupkonsL_22)vC_5C3 zk;lvf`XBUt`+w#l3&2;dM04(rPy1TC=E2|3*cCCvsw_-?%F{O%!I9T5y14s8i1-T1 z=15jN{OST!=?tMy%#NvbN&^o{@~{{g(Wc~a8@j-*BMDJ};u9A%?@R3oeaB%o<% zwYY|E!d|^!VU{Sz)ea~3r}s?R><0YdwUvW%CA#3Ve*1+c+; zXCb!9XD}D^lDe-J6Os~4{SvnRt?z()OB}#R!|?V!C?7RAu?1%^8{i>o9O+ichAv;@ zgwgL=uf>TN@7%ddU@mOC1t=P%W#@C^FY`+(Yg=J#Nvb@j7>YvMCm;o#)|M^%-AYLQnj> zHB>8)5_KRnrC+da(BAKQs)wlouGXQVKEt@x+jRs36`5wQQ*}!PP+gVz^PdgL1 zO3mV`xSS0<3;x6l^59EndmE~s0JpFBz@IM5`w|5z?xGxT8%BFO8;0D;W1qN)hO_Z9 z&J#wuin(BbGjIT{4odb*z9jsLrQR0gtN%Asp&NelmI2-y_prC$_PqdHSn6^-u?1F08 ze$k)w`NAY>T*=2Tp*scqcvvX{`l0;P_Ar>hRPrSN9OR$E*#=+!9dK_V^sHB}AS5s0 z9Y=VQa3ZOHXi|r5xWtbO%jnMxsAG&9Wn2N!20v13SXl)%HY| zHet?~9>R%ra_197?@LL{_*8D}_${+91B`aGJk2D{3=wG4=wLt^7nH`>m} z2S6&2ETSdad~7xpECP|X72rolP!pNTJg17_b7AQ=Ro%Bv1D5DFcHw zb6GM-O-^Gs;-Psf02&~3`0#l&1z3TX>sxA+zf0zfQ9Ldh zw7k4YS{db+@$$fSI@B1zoNJl(#0r!gG+B6|^MxRofm z-dvuv%QrZVY^wRe92br}E;dHeclaId1MPK%^Esx#8N_42b{$ zKmbWZK~xLOsLMJDjkeEf>q~w4uXLk-HzvpRM2JRBw#WP2tiH%@k5N6m567WDf;a`v z2j}ADp->?Hj@ci$0y~7EFS|$GdD*9&&7rXBr}i^%Fxd6z?6N`T`j)vPulDy)*%X66 zY}drt%;*GH4*kiWFH*V*@Tc!lJN6uXg^AAmYWstHq{EFkuO#SkZP@X1rX->!HwnM^ zMgT1{gEBYqM*D!4#Dd6cPHrkM0FcQ>eu$F!;n&3+)sBAo1p_#97^ga?MP}vmxW{R} zUqOC~L6`|O6vLshwgkq2K`}8?yl=HBeN0sd;%A7NP&psU&8^XnY61ID;{M680dQh$rjZ#MEqDHchV#Ssz%y2#^m{|~*HnEwZvp7e z+yh3<;OXZYUzU+tQ&BUPG;!)nr5-3Nu>(S*Wl!ycRFW@VaEB;(eefWzicb*Pv$>l6 zq!2Kh88`mL|)VgZV%hUp*72Z{_!xP98*Mb3qq`X|FM04hb!g zW?i@+brjMUXhq>yv6G$j64G5XG~iQBQ!;5XzFgk({R7|)G9=rkvhiIM8Dsx(oS{ng zl0pfuq#z+4E`sRS{&FEMHqTpqooHfl|IzahHuo9o&}BS??--^dA!5|cPe2vM$&zxQ zX4Eo9?T=x@DU9=w&Q9^kIG|8|~-}s;wSUvcbOuMN`ao?n| zRz%rPF<|4sZ`geSmOmkEs$DfB!G7oYMely#H$|dHOY4IhR%c8_05%mv>7SK}iw;ia z0E>80`H78$y!Dl~xn*apOlCfAsO5Kb8CMS&C?yE*>JIPjrqr{Mi}1m60BKe^I?h+Ro%DtKsB{AO%JCfk>5xQxcthq$3mu*LIPD zGj(j3>uWCtYFLrDEn-})^#zT7=;3F{fSU&CF%9;tWAmUEFBrW(ZkSZe zvoqEKDL-udLa^~#kA?i)M5VOQrGE~pJUzeo;pXwB!(ffj0fT?d5qT5_>R`WVcxcFU z2pmIAjX}HA@gb5kBD~;p_Q_KU{qoljF0uj0#fk>(I9Xf=>7>lX93y=dEB%`sK~Q2% z{NT_ql4_Y6i9&~hkCn)C4$I1XxfGrhh6&{;T!R$LQrm4Og?-wg)NuyR7&8xU=h4L#LZIXQ2tvU-Hd&{6n1|$M%>>(mJ!3e1G6(SXXyGl*pQ9Gvw3% zXX7EBaxo5Leo^M(1uPC0LP(DZ!Ov!7$j!E|0P!@|iTlIyWb~7{x$Sc@9EH`98=~gy zy0-}cMATF&(0&v~&`VL~w_KrV11Z%md ztd41vA}o~LzF%>1_tK#**RGwI6wOm8M#)ZgaBtPl7#enn5KiMZjv2SwSf4BCmQgc5 zONZ=-xoL=pU+B&QL1p|{XW2gij(#9kXgYh2)QKK(gWxG>g5qOs1B#S&%L>nWsg&7ClGu40B&*FHabrnIKL`>A`qG1my*f-p}$_ zNa6h6->W98cHBHWNT@6VQO$(o<~wz@z0|Frq!cU95`63TdFV`dS zzInU}r2aDIQK&7Q+YE{m5rRG!zyd&KOjH?@W+C)Ho{UX>(Wo$v^7Zvj>AY^Fa}XJv4Rzv@5P0j8$Y9_bQ~-dcFBWqkmZY;;TMN-^@fa@7+}sHF zgwy7+@*;%;^8g3Lc}M@7t8f3nGOpBmw#-uSc|zrNjsqB1S12o`$4?KBSsrPBek{`ooJ3e@%zRt91qxVTmoBXJ2i(gW!ZsJhYF9{H4{8i6YXjq3*Ekelb^@N}n z75(!tppwycWURfSIUpA)#v|n{)8Vp~d>mK@Y93Tl8#e9ggB3s>b=)7xM9Z4-Lnp7Z z>52q*+TQr54Gw2xWshuk9g;#~gM$E&iUW@5a59b!%K8RZL-5ws-&k)$W26F~XY;=J zjyv%YxdC&(@TILsK6^n!{WM-Zl8~ho0v}BPPIfkW=H}ek$QWmFIx$@v^`G}V!_tTh ztv4dvAP-e)AFUal*x6{hS|ISh;+4)9H}@s|Av9RW(IDo+1P4)N(@mV8Y3r>Re}Z3n z=B*{KoN*(S7t3QwKRn!XQ;t3(uG<9DGggzM6Hp%&$iss>&OE?QpY29;{VAbuus!ME zhG1}{u3wLpvrWTuBee>Ooql*m&*XyEc^n@Jr#}Rc&ro`gBNZvSW|~8iO$^)Y%E1mYAY-RJxFDD!U{anDPy;Cu zFUels3v>HSKQaVZ_yFQ$NnmnO)!fW%Ju$H*#$hKN9=1_atcbXBw${mv>A;RKhObwB zJ2wCt6HZTWE?p>$%Na$iWvX*Ql89`4 z4jH$lun+zSDsD&2k-3PH{4#gLxqK5tM^3C3P1F9}!$Z>s#yA|o0m@neZ_p&p-zLvUs4u)W#id&# zL}>rWRUV;+R}u}CTqqHwIy^D*q&L8>K7Gq_MK+ZV(=B3085%Y=<2bL>v?BrjZ zYmH0iOznu_%~}-Pr^7XVrh(4I#BXF&9S`vlnuE0*$%9fYF{?d->|VJ>c74b5iram{ ztHo+0P#4AoZBm7{oK! z5@%dHH*j=)dt4XRZTx>tVZwwzu^lJ`#HN_i3p#B(jEHRKg<eP4Aw)5X>}_NPt43v-fmuJm#l;{bmLOQPpTdA`tJ zZg=9Ro-vp^`2!>;9>%I4=NV0-42dg%fgYDpbek}}QODrcp}#FCaj8?b9exX87|}Pf z8VkqtJTl%Yq$|E;#r!c}y43Pi9S8#khu>PFn;JV|P;tyd5Zxr?W{$7vg%eky%*}g` zQjQ)^NSzHh+WZ=W&(C^Bq?-4qb!TZcE|Q$JWpYKAG|O)V1`>c2gE&ypZDRJ`%;|CA z;79f!+^-pzM9qamwghuvhv4A;$@eM-lIB$iqT=J0tsMM?AQ_e6R24r1BzJ|xj?H~g z@~j#9*JqMBFXLwt85t7#nfBP;RiQs=7~(`~P(xzkb5VhKa)q8CN{k%HI9@p>9J2KF z37z>eZ!lBF=QJx^4n~A7{*Y1xIiqE}70J^y;qZ95Jw9NE&m?Bu8zbaX@Vnt_nA(Fa zx%{JU6W3El=^JH~1r30vhjrR7fTKrXQD+_dhW*%xDE)1NftmB_5%Bo@?S-C!fBVRf zh-`(PB#n*#o0#pS*F}xu8n{c6nsLVbtIKU!jQ0mjTaC=(uRArmVyXwGhf8g@_OVvG zYB_AP{W(PW+;q@-gDS(0*Ia#)Y*L)+@TSK02|Js4^NDzEL1vQ~_vZE)I=j3ay2;ca z61KW4u`c2EYjT<@`N!t#)bPNNQopuWjme=TkjI4WUbB!##Ko_$2$W4xM+atO)5HHs zuUuKUzE%l;`sDyRAK2Kl<$FV7&iT)Nz6j{XhgdGki&ma_IRg*+NP-k8K5`L0XIu1M z9)4MgT+1oJInf{S>i~bg_aB>n+57mJS1zo>9a@}JeBq`aC8lp<3y^?3rn1|#Lt(>c z4D*F+D-JH^kB{5w0~B1tcWA9sAF7~+O0^lQH)WJ_O|ZtGk3xT>kLMf{fbr+XKSLQu zkN+fg<{!9Sx&oO8=_b|{@{&%cZ*g}cIc!b&4sng0Ytf$w2%5o&w!5k83f`no_N`y zdhVUjcGY3v(Q`4H@`>(ywJvB~TA#%OhvW2Q8w7wAx~bOxvo)Q$<&6g$-~>AayAw+u zcjn54_UP)GoSuBOt{TWHiSkg&el&h%g3n{%BsBG;*8KhFN9Y1dW&B+H(c6bQvOf}d zySfC@5Pn7|EbwPvx#$x+YnqG0jHTmqDd9!}$K>iiZ9>E+D%TQE+gHWu0}N2jv=2%* zENs4Fz7isbNziu@*kFy$uX@z(8jHBc4sv=O(Y_HsK7JAC;ZEKZd@uiMm&zz3F&@Cp z?O-fG_r%^1E9Mf(!%Yqpad>#CtCKn?ZVQ+5&TD+BTzhB;jhq`bslS18_VBNri%;rcNuKmk-C=CjQczI!?t{HTu49{Yq;oNv(CXvo`}BVK&j#Jt?@Zs;H%^C`)Edzjdex!61DREd%I z7kBi1A|s!SolB5j_q=`Jn5-H7Ga+)adCm%CJ#s!K8V*>)Isi;|6%rFZm?Y4)&P^IJ z=;8PC2gChQUcMFx|5bo^)bN8iElUd)v5*(TQvvXErHMR9J)p{8=9xkhv6h{pTK1IN z8L2M`2g~Ph9@NQeDqeBX@TGL(Wjj>hO{d#(pk zHBIEn@u-h5_*PxOZGTA(SNSaaY|8woop~C;_6xsWeKx9x*$YDa?i>7dJAxE4 z^4%s@akxdS!&j-he7;KXXHb^xRXm~^G}WljjsjxgmRR3c6`D)S^k#ahzij1r*5I=# z4V7KcdN+N-)84cV^&UCe?eGL9<0O7%e?v*_^AGdDV{fB%N8^3G3w2{ZjdZ2Hp!Jx_ zpsaKcO`Xg+hYiJEruf$5quL}f@^@|C3afiE4@dJM(1wor*Ts+1&1ZOAy`<1pO|E<0 z3CL#aoK*80h=goj<`c$C-y1U~F1P}l&6PRM`|{$eY?Lk*Kdb-z{G_)J^e+YU*8yqs zW&&}^!IWJ*==9((6ZrA1!R`E;xWIU0SHJYqxhXg_=cRx7`MuWZQ>Owt!q_+G7TyIVI?15NOJGAc^u z$pf?;nC91cn4}l(t$1J+LN=$U#sR$^1kvEw`eEX4Bm7mB-^>lbdH;$LTC?HF(Ezd~ z^2qA$$##v6-LB?C`n2^1-caP-z5&O^if3Yt>mqmp)BcF+u75Wr#CUM3ooF1jtlgg7 zCdrHsj(VIG36Dn-;gqnXiO1)PF$#Ltw;XQ0CuB(w{Ls7|WsR-JQ0%B5&1f5_^$k>> z*EMnyyy0K-ZbqN3L(&vhZ!b|s?A~-FWMf9dg%_=!$@#5<{H;HXmKY?BEf>)r_24rF zxe-Q>Z(cpfhlvsd)?10%7iE6|&;XdPJa`tVF*42>CQp%I;fsWdbG_D&sYsS=z2vg~ z$v6MUBkRJS4d4T-U?;wB4Ac}d0|LzyAc2{Dv|E-+&Fl$dE^(XB+U^`4JO{^kwjqpu z-K;LED5Z-HE(~gom=9&DskX<84^_vC(%yBQxY-XD3t^NQ~7ac_lOx^|5o;-nWQ=HO&3JQ2o|#wSdD_fo(M^QU zF|fDr621!0wmrs@9kOw02LjCFolmO^0LDfMzV7MO0nW3*`@7u5>u2nO_^$($U(XHa zqMW|xdmuPh2|zwRZw{xbhjq8o zgtqEXq%GIs=5T9V7$@Z{Mko1jqq^EgahT$^<%|*;KR@kW?7*f;E{o^}YD4zsp&J3# zP{)D2h(eoXk+mewca-mR_U_?zT(--W>ycW1?uMcRV!dLpE{NOlW1<_Z4Rf`j+96i^ zLs5?8bJAekOeSS>Xbs7ckHu_~++%9H=F8f7v z8_5fQN%6dv@k%G4;c~T%_S?3L@)I%fnp_9JC}qhd`EYY3ur}c1&EPn8HVcLk8yh(s z)COp=q4#^`(&npz@eOZQE*Jj10epOjrhL-GPjUMISbx&KT;nbz3jF^Kh`(Q|k4s zV=Z^lQ(KKky+#`N_G-^>440eIXU;vlA(72y9S+aNZ=$V7-tCQ(T&`Eh!%N_HE3*E(4i%l*}CL!pt)~63;&s zQqN`bH{}`3GeB9t|A~Wr!20?sAa4iok~;x^(56FNUdktWUv|8_Yz&`7(+lexZ06KD z<)#lV`QISx{^}Qf-om$8viX@PbtC9TC)Xz-gyV(<4);w-`^J^v;;$ zWk}Xm8F%^N)n0@n-W*p6T@;eZn;49r$E9|U7mX<%|RR7}cm#4*ORjH*fhwa z&;IpoL6Xts96>^+#l`

|;s2|}hbXVy3YyAA_Yu-=!k)#}gl-X&u|cz+)N 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
U z5DO4qHg=@`QdzGA99lKn>zB)n;pCNhkR9bwyYb-8->|+QJV4zSHwJLp@d7s3M3ZYp z&&Fz;FKfxh56HG6H{9r&3ib82nEw-vVf9TalWmDZts5k6U*j7yi7y$g(-WS#_Szyq z2bmbpTv`cn<|YA>g?wh+`10`zI2GqvdewZUeT8L*dHdW!;4>zzovjIlY-B|enqFCm z@5^8R<=emeH-F?W0{-r|zkB;upP`3B++MG|{$Pf*?o02md>UsCa_q=Kfs#Y!V`mMK zginfrhV7{)3fY{?FUC%>PG5fYrAWVd`}hCvAHV(XH-D+WW~eWb>D>|Zu_Op_YD{^1 zojy_MpPI077-j0NO1w%y?xp{zjLE3!^}ux7N={yJ#C4Vc-_aiHgy|RoUGalp4HZe9 z;xRPZOI&p|>NgihB~c8#Oc9U&g|N&^qe45B-T0!)h%Xt?{H=q65<8~BA9JAU3@(F- z%&}-*ao#V6um`Fbwz06n0S(6#nz2B)6au-Y6Z=UtS^GBCJo(F{%$ExK=BU1@_jDRM zf_%qk){^aouEX&rad;hfBFNfJ+xMo%EMCVmK5LtY#>B{GxK|#SPgy>jzXQM)>ILi> zBI!!77ZnRhNpq4totaVeK$tV1n8-|4{;O3wVlf|@EHT);N>rT-29XfH80J4-VVbEAz)3!pgpaI1PBY};Z0}_1q+tWxg(&6Ny z^RHM94vwMs=g>Hn?ASSQAm9Q#jC3XQ^USn?9Vla*&%tdf40PWA2}5ln=O4x6knh~6 zAnMrpa+?ZqDIdA$(aX{baCK~;<%v@msd%wHU^VOsU`j})eT4Rz)W?5fK+gjYzj`Oh z`9?Z&BXsr%5Lo1ulyGrvp~q~v1pFw5@N*70Y~WQKh(_eO;o(}VX=zkGZ9>etf!fgqYIISP{bPh7o>`YDn&F^vtK;}?REzv>GQ>bpI{6u&v6d4IrWmJ<4gL^hz9v5g3K> zCWh@t@(jRKMrne+nFo;0Tdd`Skt+7yLpuLZjEh8s0b|s76Xq~jhKjz~&KZ32$UyLe zKD0_lii8er>}TRe`Dv@q<^kYjO>2OUlqU6Oy<`HVlY*4Hcs^#K(AKP3#F-iN&6XO{ z&IUM8$W^iCYy_u{Tva2aucl6hxM{(O3*(vuQ)HI!F&wd$g88yiBFqI1xpWd)D$>f$ zgj*|Sya`P4BTP)be=UbyZ!wge?bREeQkWmv-1#p(yv>{1v%n=(2^pJP;uOwdoY^U2 z&~@(arDM+g(1kIRQGaSGkbNPZ4OEUCBPNfrNOH<}RKG3RTA(z{002M$Nkl1?K-oOg~T^ZI05lKuQ=Z-4xM{UZ2Nt zXxW1Xd%`%4#BguWbbW{=c67fQf8_wwh zoV;b-6MxAJd-M_u7+(WuH8Jxhh^06;m+}PDPyA6>xIXon8T~9uo{F6wPXyn1?uPFG zmBhKGUc{T}b(YCA*+=9HhelU&O(m-ymnxZ>{yGc-DXOD(JA$Rc^oJGu6OI6X} z#WI>|aCO&F+y+D2I_h<(8S@Gyc$RKP00X`woV%^7V}W1b*|dV-ya4Jt^qSwjtlsdR z4Nmg}&5qOP#VtTC%tb@9zNp)-eD~MZj`~(iJmBqe2zedT3+AXdciXK^PDf}e9kCjL~!>GLi|zWx98H($Q}?sxjN zzpuW1`_F&+Z}btsAHDtj4}PKX38}kJV`+4_KY`NTWnw#k6?hGU{U5ZY`C|=nJd(kd}KCkM5xl9<7cIGV#dasQ)@d)wT_{@v_6VrD8*~ z`*~?rziW~~UNqnFLtlnja9TtrxhxtBbuq0$J>Ush!pd7CIPHu6)~c@x-5(=Y5;zV4 zT7%v3)OPuDlar6R>W}>b+BQI^NCsJhbFEv*zJ@XHb8F8GuwFlD-Tmy727z-YO}iS& zVQ$DgDa*n;6_QM(8_$VA_>_r7BJz*su9eVEOs2N9^pEVd-aH3W+o@eWdA3gNTM)~k z2Yyo?!>pMLd)ya(6I6K2XIuxg6m4GIm82f7n$k5?4Q~wXuR4Y~zX)X|c#Kr_roU~U z?TI1V)tELeu&eES9lTVuIpt^icbiPiGvFZ^@$~Taaak0``{IAV{g5i4=A5^Q^9B`f zq3UMNt7ZKyfPeK*{=Oane(PVO`&!=v_^EJwM}U7R-cH&0_3a z*hVMfbgZWV$P#hIFje?#jBGv?^1}e{aDAy)|G)XoZ}lAh_1nMx=l}5S%fI}kKEn8g zc*2)AiWzCH@hd$9((ArK;z_a;6~U^`Xc`=y^vwxFz;neQWfHa<#xW8JQ3@3M84UjUo8djj0X ztBt-~8(SGr+T?!Ake@Onogd4G44Zf5DQpk`xzTfD&&{3snnX1ngH9SG?y&r+F=~7U z<@0#}c)Ts*S2)f)7ylzuo~xO#hbrBtf%5-Y5OBWZy>Y=GAFn)3Xfwe#!{4)W`FU?R zo>e9M^zl8K_K;0*1_tkC}i)D43p^r{ygU>DdV1g)e#IMMf#nmiO z_P2}piLi4EYjGjeLikc~L#1<3y-Ga9qoFMTyCa9utVzsrfQ z9TGLz#@*DRCnoR6?E~KwYsd9%*|zRRBbS)OMh5)qu9#8k4+YI755=t(zG^>+H|+*z>n}nT>i`ffOIGB zV{mTNhpUZ&^FVrHw|BpfHZt})alxx``C;8YFxI25j{o`*Koh#^pYe)FdFzJhyv`f} zBjqUwIX)_*TM$o}zXyCs}Vz$ge<-jm7hYH{Spk?1C>L2G4S1dn(`cpJ@8*IWG9T`Q3eimd+-{ z*B+9})NpgzFl*jR!5_LYmV$S__?(!VDqjT5&0BwdNT2!t`al22w}1YR|0mt}ztr#1 z|LW}EG(@|NrI><6mzTB!>8AwE3*m&LEt_@N=?F zAuwzh%8(vB`lsk9w_>*k@IrJNr>tXx21$FD(19+-7 zhug!t$kW8IM~&!bJy+uT3A-sD9mwnJX;&TV{(#0F><=w3v2_Z`Za+!K_yyz=33EE# z+Yr>T;y0uqb*xgqB1fT)U*!6c;2Fp#>vIi$7Ud`YT6f=GY)Hu<33f8wb#_Nk+|@<9 zUleu@%wc70%;HlK$ag!qoU=&x)Y-IYiTlAp_lQoz1i3|(E5L&|u|;0gt`7vE z@9JCos+|?X+VhRxcJ;`{5nsNa>V^SjB)Tl6`^g{t?CqcaZ-4LYmw*26^f5sGI-p-c z2uLiLW7BOqwvZ@4`Ap%=1iFkreteOLAonTQ6i+IevJb08I^BjFN5-&u|5POUB?Z4j z@!KzcqtE|;`}Xx0fByE5{{G*6`^nGrD`MLCoQe4k1n*kdpW|QAJ0DVgXCb0zf#@Mq zpD^#`36hpj)-DL5cCF#4<(478(CHnZ8y{N@`d&fq33+_U8`e(jA;32$ch}(a4mZ|dr&BN=(DHC5i8&J+Id$x&t?l)&IXxsJtxj~;JLoD^%;K6+st&qTd^aX_6KULUC{4%+?VVC0(*Df`rUp2>%O!{?Opry z9*qb3@Sny5|3SEQ4*Eg)uJ0u-&-44j2c{S1(|BVD*L3vg}#KY9DbAN;MiU;XL7d;8!2 z!Qa(A^mlK6{>wjq`>noJ{}r#s*;LFo=B<$FV2^oTKG}w1ge%^X^cTBqtF~41<=e)I z3@(qCn>}`Hc$KRwGXCP<7r*`D?Js`$OZ~yWFW>&@Kl&fv{==XA@!KE#;oou^Z9u>> zv@JB|f@li;TPae)Ho?%=VSDg2s;6H)?OVaV<{keD1VwYZ z98A1fF(WsJPOcBh>zEJK5IG@7cs0y*b*~nRoA*oQR{Wd2E|6nZ&QKWry{Fm~SWXtI z+X7Tp%(JfET-@q z>hEEEHn-jV?0X-|kKOZ^Cp;-+DSzzY_A4~xwi5+pP5zNfkIHHwD$jnTkMq1*f^*wm zsO|ic-dZ=v1Ui**n|RB+MmCxCoVHPV+q5Q;aek#O>aSRT7p23y$CwzNc^r~^rGRo< zvG_wjPX&FBr{CA(yR08K=TRJ%(pr9`i*(Bhjyf978-p&Jl-Kd$1w-e;`_&e2k6Wda zu{!B`__=PN|Kxx9dvE{#PyUsDL*Tb>f2oInuk{%_H(mZ2iYu;}n7HSAyQrXS=@$fJ z#OIOtB*vi7M^{N=@qJq-?z2YX2cYk3$aVAAe_r$}{rTcAzx?gnpZ&-G=j|W-y}zUH zG3Zwp6&L@X!rQmkD<{4*?%AN$D=}3niNVdsDf&X_MdF(>cIrCQ1USVpxARdAd`y<< zN9ek}^bRAj_#Qzs-GhlpW4y_)&K2=7dC|C|!nt8H5Yy_!LYP1-+RzG0=|!^vFWSX6 zSsQ{5&V$+QIvb3tgWY)KEjFn#>wB>jrFz!>K=W>z#lhIuG2e6pzbAdHP*JGN6 zP%E#mtjTd14*dUT?p>aB%d)G!?>_V9s~%94RRRfxWR;MF%E$tRWDu2MV>K{tD#8jk z9l?KK_vz4tHZK3J1jc@3xkwJfCH7RrxBC@30W4BRVr0hW#-M-eR%xFm}Bkr zedpY)f=1o5?%jK>HRqUP&h^}Tf3I^zP))I6s+8QGH}}?E!j}G0u||5Q{P6NKV?4}` zaT=NZALE5IH7O>fwSaAM8D|&!aM;0)p*)9lYbuY_lrCd09Dv>2fZL}#cOIM`J%0c6 z5B}ayoSwY@_UYkQ-_-F{eK0WZv*!nM7zB_5SS&=Q!VzLxv}~=#_}?^r_%^+JH1otr9OnVji-A>^kTVh=898~s2MfpsR0SPV~9>vfLELr;p9V|FH^Zw{G@oJh*6 zieS#m=PuoZTX9EFt}lP8x#Z;Z3I8iInE52Zj2kLv|F-_#uSg;EM`>|MT_IV$3(c|RdO<;=q<+V+2A!Ih^V zIx1EqYux_eqpvE`11W}Lm|dcHWx9wQna2o6PJ?Pyd1LVJ+|%uzCsOcVzu1_1`!aG< zZN+d)aG9|&i+$GlL1|J0puT<6Uta%Ti_e#UTa-cWD_ z?Nzj8b2E=A&`Fc1S~vb@?!u>Nqb!$Aws^K8s`bQg+~sM&ZmW3fca53wE7q-lf%-U{ z&8*xUKz8VtLX#tHK%zCRn+7A9lX{g49eIn3XP@HB|@5x++G#xMNh zFaC|Y4<6`cPVFjml|~{jPp%g(Gmvz?I@LqK!XTZE2b9+&Peye6F*r|#O;tkk;;%Tn zUezc@UkuR8a$OEhvMtVQ^`JJ)ne9}n9)DyNC5G0d*@|cJo$LruK{Dxg z3(9-lekJhUT+R*PJLa?cg*`Tnz4ljf2s)KFvI{$FIIThf5uUZgm~m9t3S?8By`Q(q zja`PSsXSHtk)7L)2DuLAd#;n@JfWvq+#uY4;l5s0|J$cu(uV@?NdEg@`qJquZ+zwS zo_=HBHxZKgV(5@FNJA@$)(~TOnd(=|FiWvpyRb9P&M;-o^`?TD`Lw_OPQjacMdHi9 z|7CaSzxb8^>-3NQ{!i#r|97R==Xqq8cBn9O$Q){9+DrgZ5o12QXp#BS0UO5KMfB^8 z%<)x{UTrOTI1U*GdrI9X?()wCgD7cX^iO*IcuyA@z+s;|c5SSs9^kewOJmik)WJNPIEGM3ubOi^bCY>k&0E1x(v_(%$H zzM^X3I?!%G5XG(zNLScYC)8^=5v~J`4%f9L$X6<d70d3y7jf}gOgSLB$fJ|fF~qUq^9e+clge$w~h!*@yk)C?1<94-u$lOF#ge5*&26LH;A30U-_MDW<)a|v1K9i#A zRon#yRM!3oW7;}ph;%{jI$lwFa?oGxvkhLAnMr9di3mP5DgqOStph8)#GC@ zE!G4+y#nU-Jwdu3RDR)w7hXCy#Q6E78}qjS?%ut7`vd)SX!^4kAhrg2Z#q&X{`NF4 zs7{}Ljb7UaXDjc6wle^UyNN>rCYG`_{;HS>6}EnV$PzO#?vW1{szYr|PKWR)Ree=b zjmf1Zp7s(t`^D@m00ac2!@5){6C=>XwhCE4V6P-FO4UtumoZimXWWiaiy;dDbH98% zJodbESzy-fRDi8VJ_N2wzf{Fa{+ee~5=Pp`cEDw~V!@A#p`p~-JIV?yAkdnXvlMXdkbn0Q5=USN;ot9{&1IH}Y8 z83W~y^!xsAzx`0(NcgJ0p7`eJ!JQ}i#lnAl`stti@AOT84|J1qUv_*;AvYSCkFe^K z0A57mvP1fagCswlz_=tP^7Uj$8I1BRQ3b{a43F`W#GABw(|G!vGV-0kmRKw8<&F_@ zMnrX+jkgs?czK(~H)&@arId|t5<0iAX$)|ac7N0rOGPWJ*kpZ42(9BlqKevO1Vt!F zD!30*JKVZ12df>ZuCMBXI5;jxKz*Ay~IfT&2k?BCqxg4-L*EQ1J( z$oD>K*~;xSo#j`jYKspge3EPZ<)Lll$VhSIEPaImLagbd+=^$~AdA6tz3NG2QoH@t*$^?NR&`@w@tY-#6dZ`~6>e!@u@-Ti;6f#ee*h`fS4AI^EX$61VTYpc@ta zeE=4-FMPB~>rZzU+)(hj2Xo_Jr9?F)KS54;CK42c$T48dlc1jB(PyC+ST~mAN zZ&>)9Q@Q2g2%gk4e?f_(Ms~vqALLEcdtA2%jm!fgXieR>#5jEEoRUhcz1-J1JC>Pn zh7N(-TlgX!KIT$&_*Zhh!p5t*c`hCfH88!VFh368Lm~QLueEi}+`K8yj_TLeR>+jXUmGB#tE?e`B^1J(C|9SG# zD}Ug%4<6lmO?}A6pz@ZMI*_NCT=Zo^-_8w!2aI|LjDjcLEK_5#q0owom*rhm^`#6s z3HcgiOCl^DUCUKpkrC%iA2pPYV6e=+cjzx^AhPk!=~ zrx#v)Sx@Hgp5Dr>K&o12jL z^tHZsbkYBcp7wuVuQqV;fBHn<_y5vwoc`fY{ePNSssa7F+cxbc5l*i6F zr~Mj}QO^Yq?9^@C@@_*J9Gp5$UqpsOWXjQVGzJQAyUt0}8!AWF z^4OuaGxE_@Wgn^#6S`FgzyY7UPz2JL+6D`;la922Q?>1ItIRwNbQuH~a)m)3l+Sk+ zw_ka1{~x{o-WxwHAi?Z|Gq&Hj?8dwTptk_jQTnTAbSjI^B~Enqp44A!&_Ip8{jbi> z%RM9agvGv$$Oo*<8?9LwhfX&1s_(AHB&OvqmFoK6$!l%#f}E%NIG3h2Mr7mS3aavF z@VmLiU|d}D655AOOiqV%2`F$UQ5ig>JA5mzeaJEBw8koSfga1|DiPx_{N}*_hb8cP ziv0?yPabrP=hBe&4u6?ej({=;EEA8*)REU`>&(}_q*)pHByWVYS-5>eao>Z>hLm1W z-Jt~gL>q|TGVv`jSpHUk{0npc!3+9!!2f;vTmR#4oIdlX{^Qf9Kl3A}$HIL{e>dRG zH@|v%`K6b2ym)$`57*wmub1Za^ud$5pJL|aeQHniDuX}WubT$`3MX$jeDJ~h`j)}_ zr-%9l!nfXf==c2j0N>+xzjFH3U->`v5lksD@K3dk9FIArEO|!p1#zw ztvl$IzQ2FW52R`quNZ7=-e#_+U#R;ngyG8;><*J1PrWKrwVrQS*aB*$F-j%p;%!u( z;&{3vMb0R@OuJ?s;NQu>(Yp;1_Z*&_8E4Y6g_nNgVqtkbQWJLi!>`bcyLAC~Ow323 zOK)IhF}d**m)(O+9H@`EOc^l8;8!k@=S!WdPBK({d0dOk{h4?W*pp6fbIlQUU9R;7 z8h}Z+9ImFlTp9VqYiHc}9zE+-ddWin?@R?%9*f9>3DdkIcj5D+ynY2SOI(|v9 zqdMc~5wJk^yftMm7~qqCjj?_m^H~iE{u_9{5jOzz7n{^q-+YvT;VV+Bx5yg_MzRW^SKo5{(O*?}dPiv+Jzbf&cr2@#$7r4Cr!(s?r0-dJ=O$^C|rnPqdd$yCy; z8>y|k?ZcBle8HwoKEpd3nFF;S+-!lk*bNIu2$U3aqL8jZMDyY2F^`cdV_P;0EL%YF zsZ5o)+?N6vqd7qQl$lQ?pwxx+h08il9ay5a(BNF$c;8V~lG`_x!jP*BX7#-)i5cO< zr}>;IOP{cT$g9G8qAM=6_g;Ka7wdOUpa1Fq`Sh=T^%qXx^Cw?B{o!x><7&c3bQAEw z>794q*2Vwc>AwCT&;5J%PxqAbwC+98la}=bpKb#51)N8Ed*OY(&;P!D*ysKCKhWXaC;mi@){H{WHaPb@8X&%o9&_<+*uBDpDPMkdf;H7xuia zCoaW(o+L1a_LvR z;W9ldpmsk~Ad0j)`xeOBtMS8?xhJIC9K9{ASAFJ+M@Qq4_1>1nPj1B2)65J01+?OFEm`VF=7Ce zv(e1^G>n7C6?qdjDB!TY22D8^WU#2bxK(1QF=1c~1%8LfKnxJ*kl!^0I}09XF#`36 zcHm)>h}ltt(*(9(fw&OhEBg(;hZ{Rtk@mHbr%8*YAQbSjTazty_?d@}fq5uiHfrKU z=QgO2ZJhofE(rZ!#qfah`rrzrNWBmMkpv<36oYqv$T87Zj(vD@@vO$1n*9XXC#*DB z49hNY62G0wYx0B~AZ7hL?J|lnaUgQUZixCJJA#CXGkqR=$1k+4Wi(w<0{iudDeheO z;)nU_Auu-%bws6T)k}UdfKWnVGj5q>m^#3T%cBWD1Rg|M!KFYKY-G^f(S`lRr>8Ie zf4_cu{eSycr%!(KcbvZcd;iqwkAC}SPOpCa6N*JID+Y?d?Q#d8jRcl**k`pSi>Q? zWR!`60vOLXOy=U`wP^zY=~t;8SJ$zlVvHO|wBgNpI^BKDIMOu7qq1%AD_i%Y0CopZ zvhuX$(TPJk`ahAlFef2~9||=?94c5CxH(k!{BT7lfisR6K{Xz&(n$fwA3DQzj-2(P z-N5yXscbhp`_~wl);5ktCqU9_ze|5p4=uikodnm4hoU%q4I<{L`6eHn=JeeMdNs~A zV4rWgF*g7Y^yg3M-3*4hO&#P3?<*w>mX1=zcfgdH5OgnttK?l*QWifmE7Ir%u*d^u zwB-6}QjbDjriovPW#{)HrOQ8ivfNWd)R~Cz5LX2Hh36S;oUbdRLt=-RK zx>i}*yZes6gn^T@VHnp-yImxZwXM-lkgE754dN9~+5~LdHUVo{I%2X{LXKl-ukk> z>ZiXzaPI~EvfnLj8T#FS)}ddK;PF2H9iG<&4Ini42mPHE`Ql6egO@%RWBO78_Y3mO zZp-AxH%G>bPfWh?!+u;qc1suFCu&D-h{4DQPKW`Z`Ke5mg6AKytTFt04$96xws}sl z8CzltscC&@Ln$`-{(Jm~UnKD2%k6Tj5{|71QF_J8SRN6IPx=u|Ia*sVXVWn0m`}ZU z9c@mZ(+>wLlupbci_`W7V5O zve&sp)YEsd@w{QqpmS1*Yn1y5x&C=cgP#}^B1 zIdBFH`7!l6QD944hN!|~vs8H!=1e@(ROnn1+C##%i?z)~$NtwQ27q|*!D^+C$dM1v zWM<(sx)Hl(F)C8sp(zNt%P8eTS?==@a)jY16|a2a@|AH7E^?(a1F8sMqibAbD3OXosg4`_Dm~h zoD)a*ax*Kv$1|Hq;ulI6yL@V&@7qf!QC?1F)4_v2?5AH2WCpzd{#Q@G{?C8u^y|O+ zi~94zFPt9egMzQT`q9&iFTSLkh5PzJ68&HglzPkU1HC%%P~RkY`{A4ZaiK^0qeG0@ zZDH;`&<(>=ZW@?-GSKG;GB#4@y!t=z|vatDjV|??JWiHd!w;WH=V#m>7lv}NMiCs7%Z?G9t)zu#U9rnb9 z4U%xguL&e$Jr0l6*iujb*n0!IIGR+YAT5)2>QaN4=XUOL#b{}e+V z=|xhvX6v}nHay^P+e~{deqB>O#q^P+v>)NDY43RxQ%wXilTR(eGak(8_GEtfTMdl8 z+H6x!e!#yj&@!vs>ktIn8H3N zVS~RdomX26$AZ}xI<^)lh>wzTLv@NmGE(D5Xn^u(a08!IMC;2GL6xO5NF#DlU$)m4 zh)ZcVg7=Igb-SxiY*v!6a@!F@2srmb%WNU-uIk4)YvsBVZR#tlk0nsyI@zUOAlI@dUXKq7xbAN zBH>pC`CwqXiu|~|5+Gq|Lv$mFLv^P$3c}C21UI_r5Y^CS&1d|$$+t9|D(4;mOUQ#y zi5em<7Eu#ho+8BQegUAg;!1VNOt9@KUZ;sYy&}^L-Z-oMMre-6BTakLXA_vz=$Nm* zF~ucG_1rAdZX*z)Q7tzGt8tc6JJ#NskS9slSoaZ9!CnPl{>zO&9-cQ$4$IV!JymuCrXHTx%1P}~on_AgXB_IUp zD_{Htj3*b=MCO%yJ5820df`OqE||7vt;dema3h!Xm^OLMcpcq2y`+cTq|YjQeag=# zd;T{7(+4l<2Ef-?#>AaYH>yM3%gQWoCo$0^U{s~2mI)(Sf#AUm7qt&fqDq>{);hba zSFE(`L~s(9Q}d~A*%giB*#OrTW7TsekbrCUN;Ca&#hlLDL%RZq;5@Ep1XXdt?bF4H zqRt9hN-vhxMTdAwERLfG5qdwVbhQ=D!F?GL+FhUeoG%?nT>Hx$i^}TFIj1TB?Wyt_ zScg!D?V|A0KI5eZw$*F+fHOBeZu3+koX6ZcNU>uh39Z+I`iGzO^=DRefm?5p7$rP6 z1~niUeYj7z2$Ji)M}N~s^F%iVsC;4Lq6}Wio3C(uXaBM0y~jm*e_&OZyeFTwnZWy_ zVi(?eK9UYGf%$GRn?PQb$l}+uXcz_K61l0ed&&L0FINBUx8?N z1TUM*1ot6rZ6vBfyT3|9#C>JsoJ+vX#lbnK3UGl(>S|k_*s0SF3rELImg;RkgW{)H z+HF^ICmU7Lv*U-%-2hjUowl-ar1c3)(r&k)&n_6Ai{=?A>MZ(m5F63SEWrgGt#XimSSeB;2}hi2+hs0+pMdB}Wg}VRI~U$ygxDBHMyl zF=4NY%_}5lXF&IFn0A}eEee!95MBX1Lw1m^($;-2CBgS0oV)9qY!(^kO>t4I@8(xL zZ5!Fr+2=DH5C6h$edAcHknLFa}f z@1L*x1%sFPeE1}~7G~kKnw{jrdUt-IT3*0h;4Tbq5%U@dGE}@?sJ#<%4jjgGG6iTr~LYnE^8?_?7TeZ@xn%j zTPXtG0{F;BUU6KX{j9U+dh(Kat`Us$S6}^zK5MB@v8qF}_))00W`X-8KyV&NG*6&;f~-z=}x(bb;3le{+Gz*{L095S7j=px7^A6wLt zMO@{D%|LZI%lKc&e#`JT21MiZ)#^exP;f*B#tLP`sn+9^2QnGKU(DEtx zvsb%E>uNue7?q;5_aggaH~w; za`SM93%JUDRRI9JvLRNu{4!^LPKb&ULfLQwLhcJ{IIWuzvsh@GV1`|qXK5~kE?UQv z7cC=Mr`WOj z+?-j`@pN0J!QOFcU5(@0uBL5h&R=y1X1pv*(;|e^yg@9qi6q-|LnLsAq984cRF}b2 zFSASdhWFbzrhOK7UF`aK`bSjpnjlM%p~v^7|5aZz$uz7fr$v!^;SuZXIiT^;crh+{ zB@9cDjHg$PtMMSYNlL8BtP$tL4sG`W>2eF9x9+s&KKkm%W->Us=X%|5DqPC^xO&~RoaKCp-??yqQ9r6*!_YukAA@{w zVd}BHo1AGlUY@KMG<~ave;1J3`z`0nCXu<=NgB1Ouu$?nCGk!-;nv{8<4biHBPWW;I*5gC$H3N>8#RJv{1Lx;pi~#3F&dXP-0xndRwW#2#A8 z#W4g7h>{0-%8}?yy+dDN2HSBMe%P~&Q;Utu4wO0tB!geP)amwJr>g6XvvuW5Bu=`e zn_%s$CubA8+!&xzY7|Ey@^j@T`_N*YJ_}U6gPJx_UQulAy5zX7UoJ7vsMqb8x;}UR zD$f%((9E*UcokRSjPXikci{oUF306YAKUFBVHXha6ci%A-wlJtb9GrM5vZI?T;`qU z1u{0OG3e_hY+m^>9=&Lgbf3m}wUI#~Um*Du)wG4>%2 zlBzy*qGfO*qF-|X4}9&P#JDQL;@nNgN{Kma+Ysj!KHBP4XkU&AFIy}bM+i)&JoZRZ z&do@*hHaJc9{82>0$Q`0e=e4ePh3no(_LkE8^Bbha*8^ue>#@LnU?Q_HL9~>#8H*= z>9YfNUK&bg;Kz3NvRyxZX_4O1dw1`> z|L~n#_iuj=k{t4L@q9QXhNqwU)Tdth(pT>NKc`y{{-B;#vMRGwrHZId)GT2^WS3(BrlvMf#r)-&?M5;NIq%;x zNtTfb4jO!sXp6FWBFnq1$ct=D*Wh^*jAR$pk3Y9baj}K>;T(`4$MTA#@m*`Zh9<2#IIc&3E$IqIK>C9*gP98y^?5q=hQv5Z^kHfGWM{Q# z7hKqniKHP<1efiSR3ammfi5JPucl_+>3`f96};DkS~BrR&w2A^KJ2-$Tcyoy`oX;F z2j#q-=2r>?$xD}+r@S1>_1JTVi?+-3X1tja099-`F$Z1154Jk9PDW20xaPxF{@eg+ z=4WplTt~;;h2col!bb#r4gnp0&6X zo>tb6AIcO-4B+^1eVyu{z@TW?a}*R`rzHi-+DUzHh&GU z#wtFa#0t9+>BoQk$6tEk!Tnp0HSwRa(dd6Cpa;WIDqP9)vL)qXDH=<6Y9S?2>7aQ8 zQ?;maFr?a0Hi@~{YLSQwYu+1D#j7Zb&1;-ExMLqv7bwHFWT~H>y$c#8ue61@t`3PO zksB`c@cPr^&zxj#tI5@2QwQiERs7!o!mdhp?F3T#jq~Gns+EJl}j`V z`oKQwSaRwl<(&@RTSw?u0hkhFhmJn9nap$1FjzA2kE?QVlU#DX`Nz#ddK%xk=!}Wy zH@AtNTVuwpQa{}11?dK4mO2JpCnyKexY8FBDKW@z`^qs>5!mI`FB1=qkcoe4)${`5 zH~(FBvnED#{s*PwYl|GxoUW5ag(lh^vzIp>#o$gRM)n%#1jg7B1#%ty+&fs3ZBjhW zbMuK>db-1(y?|lsD~#QwOArI(*F??c8gtMlH39sgKg3>wGfo~k$!0LeYLv!WgtL{XjGad> zbt1@uM@M;Z13kNa&EY7G2@K644Z<-=;efX4SRvq0v@ zPIU1AXh4_05g)etSW*c1xl=6Yd=sjmxwJkIC7H)j7QWE~D_ML~iD#nZpWjnOOhN^) zU#DG8gggj9hLiQ~hNo_Vt{r!jVBV#r+2=c4;I5D&gM3dj_PfYslc+QX%WnEG!QjfF>7y@}(C*g1&h zLOrNwXFGoA-J~U7g~eev_Nf!OQcxv`tUB6k{irvC0g?@oB_`i=EndnYj2->!sib*P zro&zPHkwWw^jDLlo?GXdEEnwAV{#(`4>!)ti!h_rEsE~IU(~nVzUxnYcO9RTJ%<|c zKi8C(8&9Vn{m~yief;Aez3m?fy%k*c=z<;ch50;ANw100>9#SQL?G z=I~C;@mHDf`0!?!r>F#ke7GFL)Ein|0V!_a<2v23Dpiv23E$nocDc&%5-j~N{*Jz) zZwBM>nSPZh8#5&2@ok;O!dW(oK!;5JOeVC)110_jB%Qr@aI`<+8w22+*s>t^ zp{jH>HHqimA!rPj3o#t5Sf{~dy|-P%=PWqi9F@y? z9Zb`yBG-|jF8Gii79&%3o`k3wU>&yc3FIooZ1jHnqjsGyMu2C2=pXuZP`KbSewS8X zBLI{qSu70xNX%P`%8zR{dWlM5EaN7zWWFK3F1DdG&}9>cA7N-=S)Z@T+XJ*!%7K&f z2e&@*%F9oF_=kVkbT{FY9=HLKeDtFqefqJFz54K^Un$E=V3{cV3R!xQ1vM8pN!+;; zH)9&iQ4(Ne+X#3xkfRKiT6RVXn~bWH>?N+obDGK=k+Y12^Nob!#pOz~@swc6uLw3X z*<5aT%kGG!CHkWM(Y)|@x$4XMD`Es!gr&MZ-%V6z?a>exRo)AAOE?t*{t2YK}< zT0XQcJwt5Y)hSO=7ZUd@LBTn4l*L+_(=)^yB4#lS-!^c&avb>b8CQfLDOO`CLHp%! zkr;HN(#||oF1Z;7)qgBd_9t;S50VZpgQ9K#uQXYT-kL4r={ix*&604```H2ar?{Xo z#q?`xC1u{XjEB`?Dl3Hxo#wEz@S#?Tdd*Zgbiu_6XhGODo%>FEs=E#^-4bIv_GFev zws?@u)x}7k=r6ZOO475|J~|obe{Pg0a|~Vz-#-9bLD``tLOOLAO(aR>Q4XeUY98^| zcgAKXCB`$sM&tOUS8kN;+862-RDx#|t(-a>ZTH5f;(=Nf1CFMIF;+plOp$d(ECp|B zF#f!NajvAB0bk(2uGBVKz_(wvWV>mn*6mY%(pt%4oxBS^dUX2aC;z}pKm5JlYtugb zZY&5`v zb!7OWA3kJyVz!&MA9k4_e#hHbyvk%XV+g2Uo1Uq-itaSKa=}h8o+}i`_hO#- zNsg93XRr?olxbp)O0xkvae-v$Wc|t7%A9}n?GD=2b%Bmp0meJvP@4K zhFpTkLY>GqeZ|g^H?aah%ZJywJj~LxwN60`wQpvY4`V=_N@ zY{%aHt#avbukwNxPVQ776>g*^VRV+H86MAa_B8KnwE%xg#z`2e|uH(sV{Tc3e-g)PBN%;Vv zzMQiyX0Xp8eaH^`jg5vIfx8dxKI9>q3%}=)`iDOaoF^g0!zM%KLA)-$HIz|$M`G}{ z0R*zAvjLu+$9e&=M>JxyBlc#P3F7x6Q8;yjX?-aab6?^w#%zkL8xi$z(!w0@NapIH zGg2ovPfBw7C8<iYs->|i(il2dShq*GY7?Xri?N+(f|NJ07*naR6CMwOP4G*6Fxcb3njA16HS8f_BJ+0l<;sQ4v*9{)X<5; zYWeK?Lg)82s^O#BB+%+#fKE-ADw zQ;6Q5&9RDlxgRd~i>4S^W9rH$u4SC-6-U+?C3z zH8*2Ttmc)*<3L^MFjYD0%)?jt%7=Nf8k;|rXP&`0$(B%(R8YH)@+|0)oMjG364~S4 zd$u<7#@ReJ2{3(Vbd1gj@!S3=K7jUHI#)QL>+KdQ;CJ7tW9>OGE)yttC2d+&*M8%5`QR^Ytxv?9QGbIgjOcSu z{Yk{{{;u!R-!AE$)D{+>N0<--&9=_(Uka`mrgzMW9O+Ll_v}_YvQ2y?V}Ba;2&iYc9Ca8l*X#DV?nZ+ zt;J!Zu}R;=ynLOk*l%UWK^=b_lWxkut*JntEhd9e&tA=DWA9LemlW28DC#?Mpr*%Ccqwh2?W`4*ZO8cmd`qus4 zI`OEigFmXY`W{oaLxqVkIrA6M*gHrBaA0)sQqHuMjc~rH5Qa4(u>Os zG~Zf~^${C<9GCvHXbiQlX;UYrC%9r~0_r$l=u@M8<9@tZco3@lsx%;3xsh18ca(FlVS$t9}mZQIg_fuE!`HlUIY1%GMxD+cf z@x(d|mzZ5ee4 zT4_E3ngEK_(@PO9gvjhu(ILy+#?Kfd)&Epg$WT_PTstm?B!gyCwg3e}jF=PDM&|ZQ z&?J~?lw;v1MGCI8Ai3+C5p{!9a9LG@TA|K?e-}oe%n96PTdtj>b541FJ~}r0`RbnF z)(rQ|MGu_HaKq()qr->yFV+k5VQ`KS85ihyq%YS+RA1@#yh25C&Iw))mFw5#fh;cK zoH1<3k_0vO#a7RxrmQ3588}|;p0ndmf2~;0_8a0NcGkIypo1+pIZ3|9{%}A%2su=) ziE%ikFhaG%r39Ap%mt6E+c{Ly?(zBsAB;=6(MlRFpKIT^&>mq-BoX#ZT6d^_ryzTW#lh>OqEAWqT11TxY5E=7-WP2x17j_gJgbJDHGySX>(quanlO5r< zv|(GjbN!IL-%gmhNISK;x5`vVbW@#o<2Fn(nWKreJ&~uP#&kLK#s7D5MUP=x6%mN*8DPUr5R4%J- ziD#E8)6~3lstUxkQ3~*2^MN6k#u?t)M_@>akO}IU>xtd+k$0oi--<)1{!_0xRycL2 zKioUA&rORyq^4NIE{HJxhd$MnyV@VnkWHWXVCHQUY~2^_2w~ih7%Js&+fx!VdHrD&n#(vB1f$!Y{1(Pv`E&(An>pxGoEGP9InX%%rY4uBno>EiMn9Fq{ZyLSi~$ zo0g7V8PH6%FmT?(^zEdC#AOv_jf^Wv7`_2yY#0PQP+=mKcO-ndW&7F<>NJeE4B6N3T zkPN`#%egi?j(|a65 zHaycmNSa#qXMN0$EtZ^P>!NC5rXUPmH7NR`d$x5l>s${LfLM2)K#hcYV_;l#9nl^m14=^8SG*fE%h+@O(@S`;b^O!(%8l- zeiuhS+`tkC{^8T5zkQ|p6ougiAY5s`dwTqkalzW~BK8kBIle?sJ4r{oXnS`++DE*} zWUK;urCErX9})Fjc8n^ra>9HPGEU8;;L?!P{vUrv9bG8 z@oU~#>We=_8M`u~bF;BlrL1K%7bgowI-o0<1s*(gaZYbVNPpGdfkkYt*0FQc^fEn= zK6aA;*74#QL>qz)U^xmzqg4BEhrZ+?b5$~1!PpKy$+bRc*H3< z1;+ekekI1l8@{Q}BP(<}pxd&&2XEK>A9sZa{ ztVem5&phC0o#+YV{r4Z;`mTTX4?p~g|LMQ}woiZh(_id0&rYA?=|;Q-pdb99TN(Yg zZ{KM=#t#c6o zJY!Hn8&}^(nT=AVVIF-0KAaI`x?=rgf z517<%>4RBSr#*8cB6Z?r>{VLx5MC)s7&=CZ$kGl}_-d(KC0{7fB z;L^vA-LXm5-0inURLJ$;RqS9N-O7Wp5|!-NSQQ%6L`ZqHyJIbxoVXv**A6Cb-W;2R z=Fv&@S$R=0tdl&1Dw~3n3$p2)F^7e*82MC^ot>Ev*dvS`e}92;V>q0FF_3~0(|J>` zw7uBe>g|+%F%x~|L``M?Pucyv)q%MWS1u(F2+Ev1kZW{CF0SeamM%d!_69hbAX;?4 z2xEJMI>;f%~Y#k=B}ky46i>vKo$<-vO*QI^h=Zsf90Y}o8}sqd0lT*kN~mT0s^gqwv&!b}CUjd#QxwhlVTv>B~JI}^PJGbgJ4uWf$x*jW>%pfm40~S=O2?yh3uMYLvHVC6(Y9C0~dy^)tSR=N4koE)OmQaX47o zg?HhMAIac0IV&u${_UpVE;)N=vg@|>xtmjF5uN!NMlY^QFq~}@y4^=3fzLfRSa27~ z{;=JXX7QQN>YESNYa;t&UWr5w;f$5vA{nf%WcOdVclzQNf18KfdnSGgR4ZE501Y%erZ=REMyDcC|c9A7HAr2z-y}ZFLP=^inO|jK^7g~A2 zN_B}^Xe3j=!ci~R<$!x^{e3o<>W8Paa;Tt+Z>TM+Q!2ADtw769&U`7hT;#=2s{W7# zNj(8D+xOI3gc;U|Jwa@5{UTfg>GPaZ#h>&|Wc^<;HCf6JVI zo#xZy*T+2L5DbG>LE#<9=8|tkP@ZCyc>t$ErlTsb=V^QiK&$JNgmgmx+lwdAU zek*K2W$Uu?{CBLFd3 z9@KjTaei*+Z&Kn&g5>ztM)tnV-zrjQ^s-%h>H=5~=W@4HnbQd|e)lpq31`Maor~T# zDe~iQ>zMS>?N?rY>B)D0_ox2>CO7390K_u8DaGfV@%a>%oKjKgCRC850$g zmLH1BhMR#{(avC5dYocpQ1G!`R!5yP8>PvCzD31;A3_}IAZ#Wb$?INR&oO(_xL((+xsTw?GdQb##tkepzUK7k1pX6=Vs_b!(E`+-t3H6a(s$y`Qzm|SFZ1=YFZ=Sv;=b0;4#Ck;-LH4!X z>t2>CS9|k0u92PbRlW&#npp_Z9*R|;-+S=SR(f$Bf}5To>79va7M%r)_Ky zqB&0yaq)*t^UwDsSr@F%$4@>u>6-SrAN#Q%V=>;KYwnE-M&0-WKj04nK6v5Y=U;sJ zMZN4uSGo&zrtj$Dc60`z#^o6>6sD_O&QSEoY&!Xs?j+UNujY< z?I4!uTzlrjxPmtvMZ}%FHmY8I4YP7760wBg^k_)S5 zVQSMRD!ZEUsE*(xAi_jB05TSH_WzA&^pbqdB!9d_=l)u;oClP}yffMHE>QWf$<2}K zD~v-Iqi59B7EJ6<5XY6;PCtG%HyeiLKJ}_7?W~rW4Pg6T!Xs;i0hhG?EFG_ zQ9XmUvbJ%xnyVrGlv5BhztW=UYYObl1(h?wLP}mm`=+|qllxq#A(9}R!+M;IxGdM^ z@bv0;#(9Yj>zP!d!vudvt-ddZX3b<2n{u<1i~6c`4Z!%To@l@nM_mc^jMGtf$u8p- z|B+pqFFy2V)Vv}V8|FcNu0H;`W<7rN*sSmdhz-A zKll0<{(|qFe&`3k|MRz>K7OcoPwwc47;-DcONxF!KqJ7SXcx|axys2$m7xc+t{3MX zRg-o&FwW+Q0FI^Dc!#?#SSUTft6Y^`K~b9KR`hg+9wET%x9Z`Y}+PAA4BZugJk-ykiH@rP+&K~phm>8u_M*{UD1DZy}k`cMF#uGzV; zu^oCxb8uUyTan@Q3M#&N(SvzLHQX2U#h&K^iOW9A+58+R9P?*L!5GJ_(->?dbsY^g z{G3an_l*~Yl?F?F`B=&b*#nh8^1;1)6K!I!21N^#*i?WnM0 zGEg49bLxpQrOR_YV{=V;iB;HXaU_>y_KD7bE-MuEwF-l|PF`7KXnoJq#*J9Y;U-Jt zRp?9Q1c<#(*0&x}WavrfepB0JD(}@8&3P2|ae=c;u!e9HCZ^~hVvYen-pgjGuz6XD zMoD9Aclij=_V8kzAr5ql3E>P>whfJu>KV8A^wW0zIEXN6a*$b2$=*|smn6HF&MS$H|6g$z?vg44rKH(eAnK7wLwp^{kLHA6LXNqeKhoURn zaRA$(=^Y6yi*i#R&@*30Z0U~JRr)OG(gWa-8E@tqZwi%4HRG1C8_TM}@PPM>Y2#N} zFflQOl2X1V$rmYSVGD1L67fadIIO&w0qrT*q7_0_5)xq%ZrDv2mVH2sR-#gF$0-JVNLF zd|ta~@}`_EI3&oIZiu(cD%Vxg?>g|Sb}T+`?2YBZ71c$VKnLNVuR&vg#T+)42f?!m zYynL%N&$J*q<7S&&xX3>v*BLv^g?R;>DsCs%fuy_-Fwp>uvRl~*ZV?crEY%PFMK$S zHd#K?&}Kdj8;+&5K@@aAE`P8)pp4YNbT>h~f#{f_H zFd~*qX5?Q-g6bHh!(a>3MNXA%<$ZoxT#T6@|9S%(>=8k_i@G@-XtecTU#%NE!X>+g zH!N4r<6`q<%%Y;EaW|tuDr;P_KTF_wCX7QEmKwLC*8D2&XeRX6r`bPdoP!yDS5(e_ z`>rdiJ(w!jwUANN1lq4TP#iAQ4Yx zg$>1lP&uy*(3h)!AzR~OgUyEe7LWNkaY(Md>Qtw`)R-w9I#mLXsey>#o{DpoElPW7 zbJ|Y4FgDfZu&xGsYdIY-tIsG}Im5)r-QhqM>seu$1b(LT^s!?C>6lJCtegM?jIDVZ zkVMQi!;V>=#w^dvr~73yje_}f6jY@xEJ_qolf9}uz?7h3E_w=&L9sN_^>tMpLd9q1p z7hvN`r?Zf!O|?WnVhzna-V>+QH`Crvk;SG$J51aa&&s4${!pWnSA@R#?obL zW6+7G)1Zr+MGXhjC$S`_^M^~Z=ZOt{?PP;*bYo}T#F;<%625%_(#|6e#VEfWWSE_% zJG1G;r~mZw=BIt<7}g@DbrYBRCh;*eG!AZYwcp7lW3;%~fmwKSjNS0Lzo(owGcNRH z+S7i?SAU`lA9_+-hfT^EH|aHYU_D;St@oxiJkzIn9~oQy8(Ct3bJ{0vRxwdZuN3E9^XOMh*y`YqTiF-6Y>qvIdiEq^q)Y6eh7q1;7P{R$v`F>Nn@dD?GlUzxF4`o`^cr=Pk%B%bs= zZRbC|=<#DMU}L}8mpwm;#i-~z*6EvLEWr3Ui@WnUafC;>X>3+RZc6wYHv0J5ojbQ~ zzxUdo{WCu+GNpXRE#;eWCiI(@h)HkvJ$>k& z^yD@xpXrM{n~+MemP`^Rqjk2Nb^=gha_BvK@N8_^+Zfm*g<17;@dB`SC=@?TnN_D= zD_I20p*$QjDTrN%pPVt|XcE{u)hjmP)Lq6lLLgPcz($du7ac#mm*#uTv>(p?{3wfn z-lAXlm!#T|!t4G(F){JV0uJ-XEoQ=_2IJ2?XxV9{12?X;${ljdRlz{XhRUZsF|;Na z>yJ2BJhnv{B8LaJc-$7NEHDH;A}X{Wche+G&rZ@k)!1ZHQ9rU#c&wB=!GvG+9z-2? ziQJ5YBs*}x@W~BW{6^-pAoO<(25si$?@SoV(wln70@E4gh0Ur{z!&e^`o417(L>%D6BuBxp%X5Z?w3ZXiYspWHZknyKG< zvjcDW$xB-=vFce;#${I`qE#L*bQZ(_oJ7dtgLOq3f;NhVEBP;0!oz=wkTyQkSVzB6 z+Y-Ptkb04_5Ie~LOL>|83Y`@qCI30r7ev=_8Cq`6ET|f9#{L{>>L2+&evf`~i{BNTyjtBa{z8R2AdA9lQ>aj4%#jU0yVV8*%)?v7kB-1ZTgn_Zyn2=AHhi{Y07rFHt^T@1F84NckAP!fm5AJ|# zTg`4JAWw&vu^m3lX+|&;)*=E|Z2Xq0{?kh_V9pp#l}(;ZhlNwgs3ATnutDL}W`MfEqi1|@yXS>wvT;dG`Gbz)54B<7tSoVTS6 zkX4Msvr^iNe#6)gOp_gmw5ChTa;XQ8TiyLuG*Ju*DF`1}xC62~md+KupC_<8bLC^z%F8uk%y2^Bj+O3!W z@9QP(mtJ|{Z%X*S4z6joR(@lW=faJNW(D#|t*Kj&|IB~zgMa7V{X6eHe)@=BP4}sD z`DP%AER!XJpHa^{y8%R>#gHNM5X>-m0S&Fm%sYbNHqSa~&^1fOJkrhs@=2Y5M}2%- zP=~5$LSAEDv&l7?Fv02OqaY?NPn6-wS_*9Hya_S_3$6XypETJzzRwfcFFySRRe_D9t!qlC~h?6*w z3vV6$tV)@>z{5ET+4Sa;R$yxejC5!eQXTHL6_mN5;n;k&4NJeUi4Qs4iHl0={-ie~xcYMq-ztQ$eUb4oRZKD#GcVkS*exr20In3K)kZ|(s4uGSd&6Y622Pga zE8sF=F{weqr*f;-`mV(z9xzHBhhL1Ma{JNEVJUbeAcm=}NilM4qr99i#z~j>RoFY! z%8=u)X)mvapx5DPt)e}Pt5}<>;=Uas%Y3ST*-oj5#ps>2Ut z*_bEeVJ@2(5j*hAJLT3>hX;;HpsD9o2elc@$bf*iYze1eBSj}b>_NxYlU-}X?U2lI zb8-Sr3Qy)^I4m|!EtYzUgPk~Sm%%bGMx~_lX>S#ESpfZoo`en`V@nk?C=iXk99s{jdjxY6Z?4PE^AQn5&dr#1;Yj~2)(KuJ&K!jL&2l4x z6J$@GOVY%YGb7Ocuf5{05qy*db!;luZ)BMRW-?Y>UPJiMCq1Od{_0mjo__G&+qb^+ zJO1cz|LPY${~fws-N={!X>O+p<(rh~XTJ^b2mjDV{@UGpw;$^-D)Gw-86e%}Q6y!e zXJRpMK6pQx38#ZW_t1J&J#uSWm_R)1_uCC+l2A~ZLG?tKI$YE(OE`uuEbQ_Nr&)Aj zf+QWhbUn3bh*RZt8ngu2crr|m(<<4jJ-$8*!;@=Fc`q)cxA^9Sg!&;R=k1SSRwkhS zyT2mz+4huVOg})!LQkOL#B9YGgm1{O5y(%`1NVY(46c90UT@7Bfw2=bIczH2Cq7Wj`K>{;8u4`vZ z-*#-^PI9kqc3jN)?msgEww!~-rgliYy?_u9tT$kX5UYh9S>jX0L}~*Dni~+{k(W#@ zs}~a-vEs9w^i`5Up?Bn?35Dg@LG}$AX;^!WKU>64mrz!_J$(kV+AM2 z0&@B(Agm3{jD^G&x0D02E z9bXo4lHa`l1|Gd%<1jw{a6m}*B!1lkVIv;=;;$E6RfBvS->&1A_yxB+A!q}07I&)+ zC=Js|oujkUxUrHLfNex0cP~#F`;hs@jA9S`nz;VqizjkL>d*f=Fqt*2SR`PP5fdj{ zQ7+SxWUh1Iehjdp%O2rLrn;NvbA*p?mNIF0J@Sq z)x60l&__aGthC|;W`WN7-$+{DG>3p@vOQ%`2NR#AH%^aw{NPLC5W-|z98#czYgtp7 zwnaWw0kKDAK97a$;FzdwYNZ_wxAdyA9=r!)&;1Z!b0APz$@~|5VY1fqJo^@gi5b`I zE5vU)_B@n2W!j`}ZV9>H?uUTmkN!#9V5}{Lr&cAK~V z?|k&tmmdDPKlkVVx~^fo{NGRj-l%kA1DjsDt%-E+PyXO*f9vOd?pOZ9TlZdIo6@VE znN+uK-_ZnM<}<{~w$?Cto0#BC7C)71g1CGPrwlcsooE=joJqjS>O}C|qGAqBTiNmQ zDL?plx}DD{uJ?m9?zgcWyr+*U`c~siLS_xzo;`SVawwD>KBt*>=J8SyCtbh?)p%y4 zZSeB7BKWWYj8usUe(nP4waG3nG~OJzd-fGkh|GSkGxxU}h>`qC*KUjsDP!eG&X^nJ znQ*IIjRgxOuVj2tj%@dERRT_((3c==2$2#ra-{t&(u**&S#&0anZ8|Z!xrjgcVOb+ z`ZMqyc~;&l%lxpY8dapT7Bmji9m6gyU_gg?$`Y*rToe#{%Y8lvAXh5gvTa8oKnX+5 zsX8IEGSxmVRwgy;YMHqnydy%fnTG@cimQ{`>*ow#?BN5+Aq}I?^*w#zxY|Z@9#%&w z_C!N6%%xeYE_0$aol6y#Wg4l>C~q{yAdDTM*n*R{g^{!W*+z3gv3pBwK&2t~LG$9)8mrny zL+tcrY@n2cw(Y!Kl(dIFA@eyLW<-v{ausM(t9yRtUbv7AR(-ZVEu8K?e){;mJD>UE z-~RW1?q~nrpVzp2AmG=z1Bdb(d1i=ia#H`@dhd^Y&v*UhmtT2Np9SP1tHJj`C3Ge` zgZNa1To5yH86$?AgJ;XupFY)}8RjCA8K9i8*`|g~AjDpoFC3J3`j-Ex``&mKR2Pn+KIYr7wqK=5#}|4v zFC`>310{KRZDbshS(CN1vZq??MA7B59>tOCW|Md0pb z5-3sU;aR?bM0=%udF*T%L_Yiyfe;?%i4p3{wnt`#;!)gk z<3IkhkazSj_~i8R%P&0s^dI}Szs$8uXo9)1=|%@Py>^F5{w?47$N%@=`kmkZkMz{f zRah&U38m-lJ9qUI&czw@x;IoA!8DJN(tjp_A3$8r9WSH!go!g2yO~5vTyW7cle#?d zBcI%K*e@zBz6xuw-ITFliYFep_Gwk)#0qxT%4kc9e*XL=(KvbW$fxc=J;8YuB4JAX z|F`!pz}jY2edoD-x8~~$P2aica2Z0lsSGzGG?E0837`zOWK_UFv?e-bOzB8jj!-7S zBo(8nWJ<9rF&(0T9zeyEK;+U`CCntwXwT3gg8~f#O?PwYrs@7J=Q97_|G(CLp7)&Z z>uxDY_1FFEbKYm~y)OT?_S$Rj=kmViJ;Ag)>ft9+u^3C?$)<<{vm_i}wRxhU=Nzih zjJ9nD5ah((i;p=W4l97xTOHeE4Z{b-Z2()y=|$xUMi|n}4|VUZST#x#OE2<`-`eUM zRx-v%R>da?)kUkwiNIz<&u`4=h_YU#rjAQ2avT#gqemu3@ySyFs9eAdauHk&_8>yB z^Q!0VArNZdEZI^M)?9zmbE}1m?B!(f0u=wubGQ#@r5oM0-_}<|&eAEX3Aa)X+k-X$ zL-7+inl6?9+BYnQBA*vhMW&OtoM@82%!j~54~_Yw7lV7OHLnX~z|9l5utA64&Zv3D zB70iXwk;=oQxUf%9jCF^tJV@;i82ayB;q+aB9eExfHZnVa`)}pKvR+CfG8-6O&jK13*d#S^eB~bu1Cs zk6V3jTHQ8^-~dSbtVcg$J1aLnwO@$M+L@OoI${Mh^P}e+lF2iNOzS@J=VDU^^dcr8 zhTAgbPWh0Es;Gyp{>ap;T5cDOeYj#>3Zx zWl$w%$>|W`RzIkEkOEi%4&41xXJZUI642Fri_OUD0B4$V766V`2_->?RLd6Yi#F;KLC$JqGp%wfikXsgGFWd5tamtonSj6MLk8T2dH@ z`tD3|ByK_xNdZ*96-Yi^{lB3SDB7W8sWMM$dK|`~aaD zs;%t4??U98?>3-dz>Aa)7{IRjFd3TJutSlKn&M|Hd1$}dxnLTQhdAImZa=rf!H zyn&j=%sms%*eB0Afh3@3rTqxd^E+Y@$a^x06!|%Z!u-=QLE0l9E$Df)`RVah3HLbF zy_>>&tAKk=wAD6V@i*CW02Pz!9!=aUp#fv$#w;`Yx;PNK#Sfv5E9MeK(#i!OUi3@O zxhq$vmnlE_BPF z)FQA{2CsTl$RfsHX^>&IsGrvV&~-HKWWC zVq8~NT#;uyx$?%(0AE0$zwyJu>&Ud@A?LVr z`Nohsl5;U5ir}%9T#K^?I@bnG7gT|U(o{9UXfU@#@MQ2rAU2&gkd+%?4DrzyLc`9W z=b|I@CeDPqX<&?Sl50)s2>2ujea2hGoa>aD^QH|ne}BK}`|7sU;uzDfZ=CFd7{Ygi zYKxyp7Gn+Ie^QH$hGd@{I}N-Jyd8X3?WiBZmfo7uT>^+~_xlwtLL>9J+BL5E-|{ znDc1+f~5r;1V)u1ziJh3SVN#S&R!cr2gB>2W>EW>O%DODh2qCnWDbA>L&Ez9P2RU8 zUM)|34~4}#I}1glBi{OU`W}F=pM{%|NgVaFsoLy*JIH%blPdalBiMm!U?wov%BbbN zL}=lYT9%KJ=w~k-0`J2Xvr!>M+3+FR#UK^IGM2DGhjhhM@m6T<n6j=P9V2Bq~zgrF1m49s(u ziHok<`!g+(V07650$IQ|qjr96GVxH;iw;JwS^PmyrTt6K`nYH~(fGr2F7dK%p<-Wu zdF5~Z34KeS{MRScH?O?>`1}6klYel|-2F4;>}s^`Jc>KuP z?zW~xx9ubYSHe5`!{?gPF?kshlctGpCPZ?9npyQslNbj?X0(=*uoY){<3xhkFEx#6 z_2gISgff#eLBf{bPcQwJN%vkH0TWh@t$L=}O!?_{2y;qwXI6TH;7Xkmm5vv*0-15$ z+<%xGY+fMmNz;5pXX1^J`mBsrY5~r2053Kh6)Xy6#U#u-k_P}|Qm%E9W`$bL&LIMlk^j}5QqeTT5**>GV~0lCK5WWKT+K>SqB!*ib!|L z9w&%eSh@R|Hqis?qfik0S5&q{aCkP0Q$5_CN%)ibdAOjgs{#Zr!r#S5oZ5h&6alLOuikQ%L&TDSHu zvZm89pUnBF*`g4Ze-Ob1UxktSJ`ak%< zU($^d7P&$^C(7zNyYIWKoBj2@SH9u}uRVVLp)c@ZfW5sf&Ah(QkPq)L&w4RwQ*j1V zH^a@u>IiEk0(033!7Z_}!9>Q}l(K<@@Jm9}9GW&V2>KZdjJA0;q2{jwV1p0d+U6=t zLiYicrKj>=E24cWK zn7`B=rRjq(HEcGnO~iX@;n2XOp;8r1`-I5sHSvpxV3*eQfM%f>^cL*er<)a<81tQH z>9i_#{b_X1N$yC)V-8_9=DdbjjEc>O^AJ0zI4Cqq&;RO~e#Z=b_p3%wzbz88^eA1= z+W@P~Sw#w?j%VPH>v8ciH_1oZIN^$eUpn}g_kQ8#h@^{hRuLD2IPz$p-J3S0aMLtp zzq)miv`Xtm6j+S6jQcGjH(-~DS~d7pA^@vJ{E}RuuWVD|kV7kW8`lO)bxxbpVXMEN zG$J<|2ofV+`Vl>sS91^3Hhtud1+)ENq%YXoAhqe>r(`TM8^BtwZM72eqM0n3lfvGG zZZ)FSbBkc!81^`<0#?CSYdj4qGfZQo(x~eU{n=ll;eSe|M<_d|Ppw~c;nCY){?Zr! z4CkhE>F%GQ@6Rh}_vNzpoaa1e^Cy1dC%*EeCq4QX&pWc|H|+B0NbgE3L$`fa%;Y6? zn98&=p|vS9$}z*MLr%)iXp%!Tk7$#s;erdEeku|3Wg~5IhH8$u@t8wPfP~~TkRn*7_G7Jha3U#Zo zTW@!a2A35$5l5@w5JQ6F;6WU{nc#l%epdGd1XkY^FlX(4VCzHyo{IT2r0);!*&hg9 z0M?6NnrABq_!^U9)V8f!`W~wf1!jjQ;JNHX-QV&%;37)8jLab|EmoPdNX?iZ7+TgB zMUl`W++o1Y3QW&Wm?eYC0B$|zkT$QuthQ*7%1i(=-WOEv#4c8bZ%_R1O(+a{Hg$TvY znYcsD4J0GQkykY9B1>b)-K{tklSuV(A6fxW?Ju#k%E8tuC0g-e&MQd?)50gh%Lyj3 znX?07pF4q}2ABWvL(8&A`|9w)*Ac7%9ye1kmWCie~FhG@W}fR zS9~!dI9+C@W=(0P*SknSIi4vOBrALTSuBgqd!p4jv@z;nVtUS@Kb0BB&DLog)(EBi zn285tmEhhmJ?Ta^7*K;AWU!mYjV1qE!{2pa9DRwLu4HyjpIHBMkNt1H@>{?48;^U` zqpr9``;4DZ2lw1Kj{WD{aMxZkLwnD7#xrjJ-WNRU)ekzd_J!S@ZIN^j?)L!rf(Ct* zNB=x9Gulbhb&pgqBK35KTD@t9C=4u$XO&V)7e-!GUG|$Y9b#mCT#+XU;r9!L2+YNN zMkoU5nFX3ngNqW@J$jwulk?DLMRJj{!mx@Dz^a-SilTc>1`&G}OONFZE z$U#xxxdk2h){)@IlPHOK_oYmf(9{Dm5b@s}5!)0YN_tg>!e}OF^EQ2z`4TS5SUwTQ zN-6e0+_m*^=$D9_I(WK@9vaRu>v^>;22?X?5*zLOLwAvzAEhvyKCmz*LHjB!8RuM! zO0Rv-F;1z(Hyvw-A2%t@q-LlFpp&lkMvq1TdVFStG6eA(AQd@JOF^GD|gN=}0YNpqbg)i3pEH>nkjJz8XWT+!vA{MIIK`cCTvWs%^=fv-Gi?Mxy zs+0fe-J?ggZhz)8pZcmtKl;iq0HS$_Q6rukhk5AE4Ugj`Zv|}q{IC4VZQuTkC;#HH zV_W(cO#WUbad|J0mBB@TwnQaoukQl`^mHi=^x+k6Fv;GCF_%u5+EnNLqPI@I0vK^I ze0Bt)^qjKzgt5FNReUy$EOx$Oj*=6X8oYO@*R+^&XXJ0o!hXF`%0G0)`PS+cNt&$_>V9BB~7*}x?={M z`HX$SQzv%dSAk+bu=4_%Ho4DB^Hq=1b(=7|w(SC@Abzy^v0u8^2D{V_j z4jhnKCt!u2@!(5Ey&$p=pr3haeejHg9Cp;BDr&IJLr+w25#)S91rC7RQ*-Jrv76fL##yngYKHOC5OAwi;R7G%jWzJ8R>#Ry~fBT=^zl6*j-EN!~n ztu)v=SJXIT1H!~EiUdV;SM*1Tgk^MK3!v>jGQ&x9#Y+$^kZB=&RvSFFdm9yU`Ax1E2)_-eEh1IVZENVB~RiPabttF zlek2|SbsVkKZ|cY`ighv0$KmM(Y_?o95ZIe$^#IA(R<8oEc)(AMxMA#|GpPrqyv}` z$-&lil;lt6efwg3&xcebj9k{aTE-Cu;h6cvH3mb26kK$%WQDY0iewKQ7y2laqUELH zg5IQ0&vKB!L>6NCkWpbdEK7k~{rD;=lh8Gy`7<+D3PMDFaKKDGJKs~&RQ2j2J27d`f|kG)fjx_Sfu+$x%hbF@XNqz(udC?!Mo^T z2rKSM#?t9X9RGm{CiUtGl|K3i$qgKIJ2hy&i8EUx!C}iy;>MPqu_f>SWx)LCZ6Wi3 zEw$LkcVmb&6#fM?v97J`%aqQ42P)j(oDow1EaSMW2dyI~gwE&S8 zz6xeuJjY}**m;t~-1$ec_{Rvra6C(D-3${dD;!E@-Vw==r z8V{j(YyTLl7>RB0L3GaJmtHOsb}k~Wg1j-MYZCLNM&J-estBEj_=2$G5x+ZbJ-3A0 zG|AyR3aBt~&Lv|(0}Fo3xjBskzr{BmHL@y&mNqoo%XpAy{V>kpib;c_3i0T>Vf+5? zsW3hM5-MT!La$)CPp(LIgFtcilq_ufXP;}I?6}7$OMt-WSHb|PPnJx&A%l~@#g_oO zo`~9Stc!jy$i4h9s>s0eT&Tt-W>KplsKK*Az2rMX@H9iw`~JHpPp(~Y>4Q)FPp|#{ zpVrC$c75udDXcS5SfIRd|zZlo^*psDxt?O ziAB^GRinGEXJ+3Jv$!Ge*J_fK|c#JFg z4KAnIe!7JA+i&-TkGI(R+-sV8)PQc;=# zSBA458r!1u^&j#)Us466=9$QHv%tUd#$T77*OD*dEWYTsu(%14y~z3^Quxof$TP;P zq67YllMXbM>_-#T^E5UgDdDe_xe(dVxV>Ll6Dn~NzT<&kVPMZQPh6#sp5v>2@=5#} zCw@`jZx9##u!tCFDrIWo4}WF6m=YahlV|b1 zu{}!p?>{joF1SI?XH@#aNF8&t`I5241gpyLN3EMxj5jszz`y0`-uzgoau z@F2+&tVsK44ary+hTDbV4q_-3%>XPEi5f514J_A#RbyZ*B~f+*2P(yID8aP}Ny`~1 zcG?C3f)3MT7H2lREP!R_(8ta0E<@K}i=H zwxH%%a`Y{v+P3M7U>w;me@0x?@6j6zQy>}!8^crE0Xp*$GvNonB3wG;5cUMrYYfL2 zuPk5#1mh8PAi%~hV&+4DF?wnu1;4#kN2J_6B8R+QG<^Z1^9K56;ZN!JiIc8r67U5E zW7g>mh|;r;+CKgD{GrpBqHz*8OLUVZFN$M<37{gNTAb`B;sE1|g0K;D;UdG#bmJmO zpq6R-tEgkY0%z;PH+uF$3TUNt^xcD=iNg`$FmK{myu5K7)b=1)2eBWS0tEyg2C?M9 z@AU`U62uatTC19R;;Mr=`R|2$yNA}cH=gyZZ+Yj3Kl~qFa^l1b&-s&ojgIQvE=n}* zQ(D@4dxszU*r&erk3aF*7p)yS!cB~C3Vi3FAu_#wk3b3Gd~$Lyc4t;qns|~Tm!ZXj zz^gY0AvuAh*H?)JA)$RGdK|&9SSP+a9435=acHs{UNFjVtXnc*UKCT}i#QTih|>4k zFyH`luhebAV-mqG*+z`B90DS%UdX*fYf<$=uRHcc7ag0J8IOE6qF{rY4?PMShVX-q zpS*PJ4TRM=l##c%WlFRNV))n5Dn7z#rh$O?q7h4YI-1sUh=;G*%woIET}9>qHDpV~ zLf+d&;UtqXxYeJ?e!`UxJ@5b|cDx-$lMT%+ zFd21hz?Zo1!eF<@-2lcLIP!E{tgRN-DCv8%6eT@tS_PT(s)5QdM5hWuj6Z+LEBBKh zUbiLRbK&tqD{yS)q*#`Sy@cZnxUu0U8c@}bBwm+}McV%WPZx^X=gCj`$AwD%)pyx1 zc;66!W?R^&Ex&+raiD8`ifB28thuogg1p4AOFmdL^BW2{V0#G-k=1Lh163Hdyk zG$pwrk@#YP?vxwR$38zPO)Gcelvwb?%UJQEbpq?SGY6i}%maDGJ~^QV34&=7Z=BY5 zzveL)5(uG?JZ2rcxGrRqiY{b6ob5Py=dU%zTGEA<^$|r?zU41=XzLk`E}RAmKJZQR zr@prFh=*SKn>T*u4_~PmpQ_Qem|Zy+4@}KDUo;_11Xlqk-u&htdd0D0o4>hx;%kt1 za)%_gL|8VwZ=R&+VOR2a$|XmV0oH8#dS$av)0V{4;`PZN$%1HBWFSrqtoC+q@`yZI z$PI$pDv(`OLo(oIA%}xZbEihoyiSY&h!T1x%i`??Yy`r`%VVGUfgBjR^~mQ9=qVBy z^{Q6g7eLS`h@e+k-biK4D#c@{+03k=PBDlxdbm=XoF=h_T(cPrisalz#$&K|v4ug_ zdTBdu=nCI2abgz1@{gv6~8Rf zv2_RVWDY27?)}55ooL_}KM}_XsM`Fr0pcgWT)L2B$pegbHWG8IOumTAG} z=!FM{wrZJMqQeS}oJcGUL_i>RilNFbAZflmBX^CEU|8`L@#!?Bs*yNbkE z2YK7jE!)hTT+Vr`UwTT**_m*51ySePaWA~G^yQzkb?68E`s_V5aI?E zor~dWGhfyzIWEEiYn*Q(*u$^5jfvaTvsOJ(xx-28?W9W~L%hAfhLM)o1bQ*PAZv z(l)u*Pm}GXmF-IWU}3hQ@*A8Y4H;uW)N9z$Dr`B37!?+Khea$-i+PBi_Zl;y>PKxJ zb9#@IBpY&+)u~cT({!(M+w{TqhMaMscXWbp(`7TV7%YM-4%J5h2zP}egTp?&E@J~~ zy{^kIgEVT>Q0_Ld3y3va-6Gg+NioKt9Yy(5%n>VOPz)Z;_^nn}LJe2?T*OxKv`f|h z>evG|NR|fi(Qg-Iaf9Lt(TJNiKQ!4ohz;51v~=6x^p-K(2nNa)M*RQR5j7AsCY;1Twf!JK+C&gOoTy*utRYYPo zg7HB(S{Sxd$C6YfDo@ogXaQ+Z>s6H+wDdL!G@2@@YJ^NH=1dHS`QkpwSTO94YS;$p ze2VE25Xp-PXHbz267PEAq2LVnm*syKK3LvsT!*6+O)I#?AvubCf5vmt<%VSykT0Fg- zvG6UdP0X%1Rv_zDcRj{}L>Q}byhH=vSi-c6(rfR1_sg%lDSFzILQIrc_A4o20?EJcwRI9j9psdqicLLIoYysAc&dx zrE41VY3C8p3rs3{>6UQx;rlE`T_rv?3^*#qx0Fa=kvskrKYZ4lesWPDgtF@aa5ZTd z4!rD*+tw-UT=)uuzVb9rpwK`^bE2{5LuZVMs3c~c)5iAL!B?yuAF%Z5x5)%$e4~R= zqeTomlC^muxL}%mw+~tsyLzgVNf8Ztibt=m@dDGVssW08&@w7u?kEZ$N$tU|D1%CjL_((2#g%Qw!)OL~bQyumj#ho$a1Wvw62|WsSMj^H+AQ)lmF$H96#~m7d`LgZ+`R7ze@(rW_ZPm zbE(szIG23BH@2pTFtLM>mchWsXJ9kV$J!*1WQD)Z99UDv?M^ z#HYMcM+Be9#3Kj2A|k@tgze-vF9hf$Jm;9PF_~Y{jxusN)|J(IW1aw}|H2;})ffqEqOa z*U}QG=lKaA-*+d&?MuFHK4c{fW`N00Ly)aV~b>!_~`)sO;d*k6g@At=dQl ziqnWgy;A8&vO=6?Hn7HqgP;jhc>AP8g0&nfE|#5lW->9lBE}|?C0IT-ApW#Z1?Tm$ z0*$8d!Bxp4UmECAL+zr4>WyqV>6MzsNQ=mo0+1q^TipE@;KI|9I}uOGRQf?CnM=*>}Ezf4hai=10^A7Q*k8=wm=C#tL9hpCcHO@uO8o3Dt;2 zU_H}kdb2((h1>Mq;iwmKHlQx19TXao45oS>gT^5h$H*~2UUI}IpysiL3cW)WB@5XJ zDN?YnDnT_R2N8`|pv^(n3RT4scg%_sLTd4o{aat@qrdg14MQh?39oN%=sRUkZd`Wp z{r}|8uQ}$!`p&AsL_dpvzy(hRKo+NFpBQY8)mNtnv%^*HhhJS6esc6^oD0J#X_7BC*uas zR?3XE>Mwd+n(YNN)8sL=Ykq|-q<__bi}gR@^8!=DlLRed^5JXT>qP2 zB7k5yzO_`jp>DZcIHf9Lt5dg(kqaIhY(k7Jv65s7l*b-VaB5@HZt8dg=$F7Lo{va^ z>R5>E6QD)2#Qg*Yv33Yudx{SedCt!Kim5pH;)O9w%QL1n%fj#VR$dcM%MENdtQ61C z?iV~O#HG4WAs*ncO~)_fRa|L=UW?diQjOS-t8I7zL_x=j9~95G8g^8*xIHfNr{iZD zW3sK_mlwiFj*s<0{D&?XRQrn0ezssc1P$NvGzZ(c;L-cc`l0!X6B0RUO=~CJ+(!!)aou2U$c^}8ZW(HQ z_=sbphr~Ndqaf%pLuswSz57OsyOtpv2~K8^b{Uflt~i%8pLv^8Gq<^=5B%M=am6JM zI`N&~`Lvh6^{w~cJAa}B98uc|43e6Xac*%;L$YajbMuw35R`aOElt}Z9Qp+s#f(vNdZk1@ z?LNj0QdXsJ1=X}{!4C8pfGwyWIeFyG3Ppf|*BJC7506$;cqGke(6>bRYG*;`^zQ}l z*tHBel-d#mM`X-Z%=2eA;xRaHw2A;S>eD6m_7}?o5I1`&SLg-Xv9*hL2#>Nw2C zpP|TMhw6#?Y0Gb*8+dw7QXc2T^}Q0Uq~vC5n76Ex`_|c!C4S!Bkvjk;s*yl zUXZh@EsvO%Fs#l$W0Z!f;OX>l8TF09+`+^il%`h$KsJ8HrpLwjj7JSL z$6V%l?9kAk%?ji3yx4C1-iH(~X^6%pfOCVnrNA0WID^axQqxl0n>} z@h3-~R9OWzz3hzz6R+CgH1D0?%th8XfLNiRccub;2n~UWI<+E(SI}zxNHsCnrI*ND z@NhBar)%P@^Vt97of{8-*u^Ja{NG>w@_+TO->moipR;x2jrYID{v&v5+^;VH7-(Mv z{MxU*Z_K6n0p;#mn&3qc9fn+Q0h(v*Nn#C%nN z63v?!dXWj24oO(Oaq>VWC7gLrlp>avm~(>KY;LVWE!?qivnq?bY9GB|wYKz126yTen-R4( zv7}27-4Gb{ieKsD#^f_S#w|)1>Qk(&8e)wRGJWpI@J+A$$u1s%sQlsX8zB6k*0Vg2 zcv%-XNsjRnFD_)D>JYh#xosd1CbhVhr)>fa4Ke;(SLEasI><|)-uF%{CcU;cuwa43 zoLh`h6%8zn&mZ7)o@D&-T~cK#dP4M=qEBSdo)^nOv;oy>d;C?8PAiI;^)FF$5VlXC zqYgh{X7`yMJn<=xI(YrkcvyE8Z82E?Wzh3jZ2_dEV}rRdI?{s`U)(85=uMf)dl16w zyv1L-d=y--{E4FUY?uql4L$Y$+UBDl^H4tR|MGwGPyd16^S{5J{8!`GalHT5tiIiA zuDRy2zx!i<@0Y*)mF*X8@2;QTJhZl@?|*l?XXq?GB^+yT>tj1UaQmhlHqbbs(k@10qM@gf&|HPFaL0^RXZE&F~vDjmnI z{P6~iI{N1E!~qcS%68)$3+BFp0=`tSTc+U&rRGj8-*Fhvj2tA?r08nyJm#59Hvd}Y!Xc$Sin(#_-S;v;F>(ox>_{DY^CnB=c` z$i%p6#(@pUwLXj?Pi$H``Vb%*{XGED7anqsG4rc#-DCNSubd-}wpeA;cli<(aMlGr zNl$&&3kcpjFwA&~1%~S_ONW%c3d8Z70^njGBIubV(?!HC?K8IBoH~}B}DXC>?rwh032kI z?h6O9OhgiI6xwGAeT&(bEVcqD9SIDX0XWf2Dw}R2%&YBbp~fLqVATm6|DhMQ_bOA^ zbRg@8g;R^MzY)ze@x5W1kFXZH7kFaezTfj^JZz}KV#C1A+5q|YuUVLE5^}=&iDy0m zt#%Kgd@RS}bMx$r4((^qAefUAX|bsye2CJ)v*CvL^9B0GCurSzBvI9L?;(uxd5eYzeKeexe382UBO&5V!vL{?WkULR61%&4VcN+8nI>{LMb z{u9uAGb|hZS0v*C#p{o;1;;t6XXTk=XrQa_E3WbnM9Fh!O|cYxY-xP>3pIVPCLA%X zlkrwNl!Hfns`)+06s6RMSk0sNbLn~P$lwot;qRvYgZ$}Jdxy3*Hy-)O%YXA<{PTbI zy5~Rt+i#W>PG>-B+}{g>eE^kfclfd(CGCm-jLrSnbwf=Z)hFv3Yz%sLsiW~Pt% zi3aXXe`41501cLBY|LMy1UgT)G-qSp&_a(f@uIC4aMW~NA~kZ;@dyoj_{dr*a`foi zc|gDhmhq`!T$I#qvrUe1_lyY+Hblvx8W0#~y+*!^Jp3#y-0;N$F-(FRlVN(OK)TE* zHYg&>wSFgO@yRRPY*hVZqCZ?>N0ErSq2#A+xx*e>mWKmsjJ*fMsTjvywTAq}Uuk)K zEvCrHe@K3>pQo@C19rZx@9duZ+WLde+uHbx&wJK8KK}pxr&nQGB}`6a=|v2Ll+iWpM*r) z^An5m!*ao6e0EI-Q{0ilz|t6@dEo*i2ETgwO5gGjXjo8nmBCZLo;O>Mu3p?R)Z2CH zvsgp38jn1&j1H_O)AW35{-KraW=G2m z3D*4agvEt^Hb}aDB#IyAm5w`Vw{D*)pgWfkE^7zk8+^mXxpEJBPDbYGU^sW=k8N_% zAUSpVj?j;US1w3a6dS6Dbjz>i@OSdwd>KDR+P{{=p4#@cmF!GKiP#`Z%vv8m$v<>? z@vA2STqqj0@VKyZ44Lm(=jgfX_k-<^a66yM5}5YFHrg-hmX%F6@lKvGMn8@ZU%lu% zu#B15L*)cW3j=!j;-}kiq8|yhtuK7ZMmy`DXCnSrxO^y?r)P*t082n54yoCroaZ3$ zmSn|Rgtmy-kf@a;?`Dk? ziFtuXLBEeQIjKW&?8~|h`pJkmn9(awJk)TZ78297b9!fecW3LWD=sCr+$!V|ai1hQAv4Jyyi>0a>&#l|ue-?5!NYPEBR`Fs>6EZM<6{%M4J|fJ*Q7bV)xk}@xYpKCf z!)A3DfhryQj)Dd3;_$;`^>!wK29q43bUkMAOLY?2N8tU)MyO5A{c4MqG6@OO21L&s zHsXpOXdyN+p&TrpPso`MPDlwqn_!KvhBsVj6bsG_ti-S8mo0xL(y9mRyKz=5Lnx;9 zPo2J7>&4@TJ^aN8eH}a()psr^yUY`JKB$(wuWvYk7Y&FsbyV9oEp>4{=>bB? z0Om&~JiB0UdRSn3EE+p;&;JEL(;b)qs*vxR3wN8ZIuBeezM512Z}J z97FqZ0;Vp=KyZw3%y~z=^jH7er#6osKD74Gt1f;2Yk%-HfB*GA_CLR00{T8EpA77w z`VXi=gdX5!`dq+EUi#{v_`vU6_XA(~>Rnf?Zyi$BD0#^ZuXcq=3B}gURW6U$_@^-> zdKNVcoN%&9P)JFVu|o`>Qt~D@g)}xYY`|6J3ONfY7@hnq1|-s-@D0zQNi-~E(1{+i z>KENQYMVZk2b>!-(K9mq6hs^_edmXQV&NwZ(B-py$>%I;OL1Ho_q{3jWd}>R+AQ+3 zxIB%gbny)}beKbTi-w5B5I`h^%!}HPA-Pykt;nwFD_X~0U`en@3*UaSPa}!(KF%!`?QBu2kU8B>0-EN*(E5$h`3Vg2_xG1Hh z)hnSvRL|^^5q_F1Jywu)>}ThP(bMQ+cMR40)OY4_yByrdHNiu^|KCIQ}+P;A5ew52Pm~Q0W^aJWQOm zSUKFbCoKM)n7jS_`{LwSVnQ2iU7Bp4+EJ{wEJ0c)D#)k1hgsO$%PfycT98~$0gRmSMPFP@Y z@<1ZREz?C+Oc4q#b>nftX&kU94A_EdcWnlJ$&{FHmoaRi#-vw&gN_a{m}6u@;i!m_ zE8?_0mIfC|vQcdt=rBgf$S&s!1gJX290=oz#e6gaKOLW<8&YwTjISlZ)7TPE+7j^m zPvepq6|AxB@j*>qqoAXXber6@{qj14rytAZ1n9hSU%HBiXE_3Mul?*(3_adNWdFK-5oyX%Zj4B!+&=ioC%E;zzsl zp3&Nd?3;&(1m(N;J5;O)ZPr#Zae~Ge^5U41wbJcUwrS4Y+9lU^vPj9bn96q9C+0ZGCRinZpRg#nNZ0_W{H+k;dSsZN0 zz7tM5l9vv)4o+}3ALpq~!-WGZIGw}nd)^>Lzz%B+HbTg;=(sd7j@;@e5fxY= zwT%X^mlun^d$_bxW;QWym$gA;jA-Fgw1bYJ^3Qbq%9cM_M~iJOa_)fSUmjx?o*d^? zL0mb#Ss&X7s<0{1%;p0D8up}*FacAWCR5=rmXT1j;W2U{TMxU4OI|jznexvgBwu{T z*Uy*bfoRCvKl`GNk+Fw|I7$1@fIHhy(IZwO1#^Jgwhy%;xi{bZbhN8jp*pxVx+r=g;UPV$ZDlb3!< zVIKQHV%0t-L!8vqF# z1`>rgT#Ln9F>(&kX^h2_qYklqFi?(ih`qQ8KOTYf>Z+Vk^K3U)C-9rE-JY)>KBf%RJtT`D`6+E@ zu1{#>FUh+JQ&-4NRB~27ECX&;NYbq8@ZD#{!KVUORW@?^T8gC-IwY_}tOXXl?n|ey z9*pOMh$&e(I`R4Lf^mS)DK-V^0|h%eTiCvRMFLtXdS13Z>p+VICOT*UJvWV3=~)?64f6ox3De1}B8F(m7Mi>vYDx=Y1_cHqUB z`#9qdAde&J2~xGG+SWdjT=MWuMyBnX(4AK9dPbMcsPXslw5B-(3`u8L`^#03<=}~f z&#KvA$75at>OkD>$Am=J>^g=$Nu9ZmQu1r4sqfF!R6f`n=L-n(iMC6u)j-TLxyDiM zdn}g8L2{*Ufr5euy;&kN`Ys_83krEzf-OJ|bAlN9NIG|{QkOqm4a`cZmU#(^zy(j! zhp55Sqb6>>&Jkcd#MPx%Eqw($Skf#tU@3qI-H}54|K&>vA_Exzx0~dy!<9iao2zCwLI}%N=Kk(p}R{xivX+0tN0)O!=HcN zyZ-%qf9$_}>=Vzw^-FguDG%*!Y;CdPbc$E1Iw_O5Y`FYvC}ExBJO&ex?`56r*<@JD zzPF$OUzOKDZ&FbfqZVDnvLKKxJG3Yqq1jex+V94e zkbN&xr4v8!LE|k~3^6|-Yrkm_6XHjm!WjAHJvQ16(Z>Y=c)g*^x$d^!O6`dqPNArm zG#pPmQ2NmDRW*Q=7FFG(L7WH@RL5rr#UFh>bf^k{E!HtNF(SC1()oa7&!4qq9{q}k z;}U;cbE+dB-zKVCgN0AnnwJ_NB*|qx5KnhRD<@}Sj*0mV+;|d#RJmZP^AZ06z`kn7 zi8v#V9bU9&{)xs_6DEJ3ZZX@BOM~rf+|ByH8J7-Los=>@M*>`%WYEjooH%FKL6r=JxkZgt$uI z8w!%=>9Haij6*5 z3PJKErS1{_h|RcD+Wcyv$%|un;R%Ke&D1g-@+Qbm>{018z{Q zpfKAh`FqCGId!Zf#6+RZ&VT~eJMYLiu};b zr=JEQRcI&^%qWfA5~8O@m=PvWSQ7DNIw1V_#_vG8%0ULx_?skX;Tn1dXUHngM88w4 z(Z?bIdKXQEm)fXp8l&MpvsY(}!xy=@#pk~J|q4>t6O=9&%8<>DSLMksvPqnX2pMVfZJ4oFg3c~z0M6d4e?nrUh* zTwht)oZ4^#B3LaX_;7((5vbGg2D-pom=~`Ni_WGyCf_k*HIhl~jp^nm8>hItO@v7u z??-hM&&lRjccsUYZntrk?t|SjHQXJMbjPBwkfKa7@Z@;&O~%659_F~%>hAaFCKUfi zaetRlrX0^vl#fkokq$?Tv+J5Q$D!m^8YPnD_2q@~O>s4X=Pp%qp3$nAe_BM9yKV^` zIH9~u=|e4*qCXlJVQC=2j!h4x*QQ>L1HyOSTAWs`7}elQMv^kWmP23@h;Zb>j5ZZ_h$ck3O^PUKb{Tr$6Zlwz~XH2XyiK14m zVJ**H^1Xof-=E>O#L%O2{%5d?cTq>HCOaswbZC;mo6s+j$}j!OK%RryEQ@^?zuZ~p z6VGV;RzbEg221-1Fm(Yz)U@$2+b{&@zx$j zdmRgxufZxbiR<#(>hiwOdyE_lpa0vW$obYq>$5=4z4*mPmV3w5!^e*FyXM75O@sM{ zLqAgHYpN3u+OXhyOi$l0a^(v$$Ng0Sx6`E+&@}dw!l!48T?h7l`!@zYX9sp|Pe!X= z6_~)ek@vGb` z^zr+463@vH9}4g)B$|*bS2}q(ENwOklCFr|r8_RZ=b}^@iQL^UXgQJFEu}TSGyVy% zF@k8^u&~eIs&8WeH_0ZyNz%Vb7SWH$6vlUiq}xxH{!{HZMY$Y`BLvd8kJEyKPyq<2 zPUGx9=V}rA)Zhd-dOVa(_FwuP5_i{{w*&XlIGO;x)bw)vsbfS%fD282E*`~ zGJPoD-%n#q_@r&EMa>kbc&JfUOs(-oiHsMZ=wv<5z~CUfse?-To|Vs$btXFNC56*b zc&O~*k_U*pT{4xtI5!E9PPPOb!;4J}Q`w~p*)tMa`ET{j8Ili}f_^d+QjW=x_`5gu zo>vixd~`G+F!SC&g$bWV`ajfvY=vCB8TcO$ZTN0e`p-8HM);d}=4?!NXoO9qcvE%2 zQh~dYZDJ{aU!0#4y~wdVT2H<&NsHXQ3Y-hR{Z(5%(O7?Ks-Yud=wEcD$~FH^$%(nB z=*E=uZxEp+H9s|p#DCAOlv@JPv*~t3$|V4*jwFgB3)S3}%XY3pM)%|lLp?Q+x2P&9 z9yJPs&Q>$RUlag9GnJ9}^34G~7GW81ZGkFlODQfFh#T_5e{+(XDF;$+(uWk61lr8w zc3Bf)L)eQ#QYNh_U}?AofI3R^bv|50Cbn6YG+Glg@r^q5yF80uN`kiKEX#&09=rwf zeaX;9{qgJ{cevOCj^S8@@`aL=TCkl0P(B+TEmHt^W7JAYKx}7h&ZBc3dYCCjl_JyI zt0er?Ox$dF$U%3Ls$631y33ZM!4NUe!1nYD^3>7;USPN zwlc|skHZfB%KQ}zrXVSLYjbw7!l~a{LC@g@Qp$R1h|03Df+3H@8Ql0(QEA0Rx}urr z_KEXon{5XmKgjF2LV`U1{U2V_5w4|p!cbScQ3~~3Lo(djy#+ zpXH6h*yFaXk0k*2T=8OBSlAva+KH9qhkX%) z)M0E}5?#w6Wf1Ci8{FpqgYuQ*p@|%=*&p_ps@l>8M!7~8h?bywDw!>5?^*{}dxtt3 z_mWSLe_ZDeN9pgy`E71Uc&Bm+i?Fx>j2t1ZPX%#1ThYKbiW>%LK*9dhxr4dtjT`^o~(N$Bn;La`L6O_* z9=-J{Xt0GZPq*9Wywu1<{4NKQID{`#SQ>iQ>)qF{2itL9dhxhq>8TsgdI;VuZ!Fu?tx@PyI$(7OATIV4 zNE0rR)x!PSA&~5wPZ2Wxc5jqoa#^7&)B3Tm|r*yeaIgJL+AKnt?&kOE^7GI`6`Cao;GG378 zaIUxEUU$tglNr?(MTKmW1}6!VCblOcPAO?-G@LQGB7ad5e&w7dh}z#8`7GGT76ze< zHBb@FEd(+Yw!R2HY69*=yd+6=glyQSZFFSXTwvr`Omyeg143?gV2N8tZ$a*^g7|V~ zWDy?0yO8qzm@mO*H}I>h@&1N8#8D}qest6oS`J~j`5<%%c*UE%!Om~gi9?OwGcaKt zhVLGQG4%l|YHSX_kPWx{I3GBO+d|6Oe|c`-wSN+!1;(R|YafgJfJ`eY zdR>+>)PrmDTytG~5(8Mg7u9yv9S4%UP3H)HVDR`I`@eSkeV`CKO^2X7WfO?pv{J0D zw&U2_*i>zJZqKcp%k15T3b(Ws;UL)CUo?Ivvd)N1aYM##Ou^a!^siixBz21_Ur9me z3F-gif*d+fOd)OYTLtq-vBWHjX5_>Y87*O=2Comn=sIZ>6r)Fv_2WM@>uu--qc&KY zyBg?=7pJGfe|hOOY&I*%mu~+{C|mfri^|p*m_J=)I~@lI@48fWcaU53)4@`VW|K0> zn8*v3_Ww#x9EpD_HUWk6d_6sAcwE$_16zYziwfV%nr88n3~4n8zy`%O(rA^ar=!7C zfyEsyjFW2$14hgD$ne9?+232z!N42~RRMmkZ0yG`j)uAfaSN=!$_zvY1h)G8TP^Co zH{obEIa~ZgM68E1fw79?Bgb>3YpqDs3F=q7y=(a)1v~O~Q?UHj;@!3C<+A2`uwj!S zwa^yk3NAScy{$ipml>3yRjf7P)kd^hbir$Uv*wY-z6C0@cR(!gF9n32Y4R*TQIOdk zj)=)SFg4ZrS@^0st}eV6FBW%MoDHK9ACV;V+@ERa`5kH4x85ySciolw`(3PNzy8_q z-Kx;P@>cR6Gdch1i>hm8uqob62yf5l_l9DSMQ&)vjG)0U9nekjcb(WO{ z)4hdc&-<1vpy)qD;{O`=-iO5F<>r1O)=NDQEIserWIdE<>Hjx63h1L|R8yzDvX0o~(+V-G z2jMN1lChw>(2-{eaWtWoYC`vwQGf`3sRC(gGZS}N@fY*&9O6>qqL>I)f|q@UItV#xWrOhrA6y;Uk-ph#Gb9NfbD*zzGddGs+X*aHaVuP*o~%Zbrs#9o+hkX=AIg7vq{VWD|_iV%p_(H^v3W#QnH*2IZ_f|=>zP%$Mz zd*2qrPD8Vw@L7FUGGDY)__)Vm`k(ZqbEYJn6~q5s-@|F4Rm%No=<*2wbUZh5;0*tw zrTx%k!~uk`8B_9|dc@GP>Uc3=fb&r5LaIbH<|VcZ7k0bt9vb=D*_$hTIK8FFv9vx; zC8rwr9Vmcq>5lXG&L-1zy`?LOJmt#8eq`jlPLsSHFDwk62?(xbChrxBAPn-9YH@rZ zi5VCkpgB~Y906_}zlfG(qwC(TcE7EL-EP2LbR46_dEQs?fRZWj{JYFi@_F6K;eVP6 z)4Mx08Jc*B)v)vX z3w7~gW1(|#chV%!Eyq7IdHM$Jg-%P?{E0S^YVOMK!!oCa{6=QkhL>4!aimiAU;dD(t>ZIU+sRlPtga@d;N&(f4@eS_FYtXSD5G+m?# zX73BTZ`rXmI5m$MC8s)QH?H0L2#4_YiorQ#6F!ys{c;9lFxEGy)cthadf~|(-lo1v zvnyvRyfM6L|5`EQY4TP-+k5KhncbuDWnw4q`-U=Mc$n2=Y*iccWo~lqP*~=$+4N7n zA@}b*#JG=JC4gZ!I&UP?S7L*$Xvb0%{R8@U9VPXbJx4f_972tKjLdpVuQFGGzFscw zws9MSb{0loMN5+tRxy*;F1v*Q6rj^hzQ};iYyFOwj|$XJF%DqvlpU$wTFcpuoo1^IU1GiV@rHhgZ{*4asy z`Mfjh2u0p=n`->-V&z1hr{m6j9zzKh-fyIZ+pf<2ozEgJo_o8mi1>FzUQ%?rJQh>C zeO8|}?7Dr=+&a%&ZYG*A+_NjI4<&Nb)iM?oZDD+cG3kvqa?|MW~R zj4s5cy^~iw#o&e+q2^6VLb#2_9}U|Geo6YmBF^0x-1+*!QVu0EQI*dMDc?_9?m*d} zrbE+fu}z)fRQgR4(ceC*0G!$$TyxMVfn&6`5>C-I?Z^uDAt6@yk?W#Vr$7bSj(NGC zF9;>q%TUZ`E$doP-vNmwC zTfKPI6vfnW~3CYhlq%*M7Mh(H=+x&q%&!NI=0m^;Vc6;4#^%pah3tPar?zgF5@Vd#XESs$H z8rqk%K$0OJJ{~ z2Z+qV(h9K*_cu)S2%N1+h1NBRr}fc zY19bCMkO_z3z<4_GK5fcgF?n!mQQGc#_ zP>B0N3F1pg>N|P>6*$T;?BlMl!|tTk>{G|z`RbbX^B9Jg5t}$|#cQJS7l%$=z`rn> z1A;AlCA@PaJ0T;+Y40K@dqbRbDsVZ-_X64f`i2XAizLnFaQ9a3|a#LP~ZUC$c~BN8NeKHHgE=NygiZ*01gDz258(Rejwaw z0>D8F-SfxuYup>c>+{D82!{m3eLN?Az&(G&10cZxz3;Ce<@LQ6R1+}u@s{`j{`N5y z005u=pF9uxK(OUc1@7%*84LjUf0+XD`Ky5d@Y(E(8uPE=~|G1Reo7 zTOa_Ooftb12MiZC1P6c{hy#y}P0R}biUP>-umf$8w2kvJrZsZ7CbH@lPW&?rwJeQQ}KXU z7}%&DEropWxR_X2n0T{bq11}I0Ev>Ayga-}>69WfEXlQKgHx>pE z6N=yi0QkTKVqjn)N>&$_mGZ!1<3I}yj}K3)!D9h2pm6_#2VkIK!hEeNDlOuJg%lYA zq2Hmf0{(|$2cn~5LQ7W^6y#Yu_m6@w2rM)pIyBmU+F}Kvp<+Tx7H6jw_4WLjR0qdI zMMDLmL1BG0gD zF%%vO;Xme3I2Z(gOnSNu7(yr<7{UjLkFaoX!LTqO``51sFmPe8paTOP4hsSOp8@~} zQsE+Cz~DfePbCc+fC%CgY%&x8HW&bj00jjN6$J?i1qlU%5CMq!C;|ikz_+5k>US3nU=$(3?N0Iz!od- z1QL>wl9Ew@obf?P3?v~S9avpnkVU5;CMLuDQe9n}LrOwIOicOdL2@7w1_`F#=KS)4 z3@RBZx=3|RMWZ4%F^~v~;y-u*5gG}K(dPWhtSkzeSanThqY64n01*NCCrUy{KtM=9 zf@rugGcy|KRa;%zsEkTX7(f6^`d=8I0Emx7gs8vxx2L1Cx~fqbg%F4jkB5&>@`)4S z;|Jm)5+Y~~*Vfn9HYgzz;s@bD6MaI2c)_@E1n}DR&GoHX2n4~n(4d?%AUi=QNJ3BU zY)-`r!~Ji^!3)NL!^Xx#^yzH%M8XTgfdzG4ywAG0q1Z6E2p(wmUjOgIcoY&G}Jq#80^E*&cQBY6=P~cF}ptM_CbfC~c3KS{|XaR8%1_cHA^NkEdK}AB-(n3S} zRQ_W@K@I>!AVVNQKp;kdL@;FJa3nAklrSW4L?n<7KukpdpalXTk>TOt-~!-5R0XYp z|1FV0q(ehMfJcaegG7KuKt%h05*2hR1Ai3kY^1BC#>Awp<^f|#l*|K zxOhKXbAoy|F$V`Xx$E8O(aqiA(Ty7gH#^7Y!u^SJaImolupw}gJ74bYA0Az~l5+*I z!LoCHVr;A|LCkRMguZ8ohqpi?_CRJh7G@TXPl$y%kO_g2k%@_R@cjHQ9TQU^BODVW z6YD3z5^!$MkkeO*Y(0uq^6KCKLlAq+6g#JQK3xx~yMk&)p)R)!FI7$)MJ^NSo} zCXmSRA1gh52ptR~VfN{1HX$QOq^JL^OG5{w0n)N;u4JHGU zB9VPYtN*-7$;jyf0nn7>pb$w8iitq-017a2@<7mr8pLl}3JNmvC{jpJ?4zLho(eWkqQuczk#O0DvU(RYDa2fCPz<09a6%2lx{)1c3@LXV5hspn8Jv z2&72-(3CM#Pyo<_WLN-LnB{*OfPpl8&)i#NpA0NFJcB^4vyrh6Y%(FtF11lbK)-*iP`pPB66~EVu z?vIP151;p&ouLa75kDWlzsO)IaU>$U{zy>IsISeZ{(i6TU<)Pts*i7zaVUFv?{e2l zBXpSC7dc{5%#j;?PgM9LA~5DI;u+J(!&3~AS#^F9#KNWY1v8?1QYOjDERxe{5aB)c z@;z^ld2c^LQTUX2NqQXQ{W=2Y2xaYfUFMDEo%{Z_^$FRfp|5-B-p*wW#`d9pyx++^ zk3vH%dgsdDa+ykL|I8A0`x)t1m7u;jGWS$ugW`LxqfQqVV$+t}UG(y1lg|78=(~w8 zX-T!BE-bK_M1bQ`W@YEP$3Gu5rxxdl3yk~l?7Y-orX7Gez?*EFzGxQg2KFgcL(K1t zv88Ma_)i zCK{N)7qD{^x5h6xVnkZ7n}=`W3r}hNm92oj08tUelCi!M|7?`(s3}!(0d=Q8`5%Zk zCvVP;f1Z|wg?Os5`3lD>OmH z-D1$QFGcF~xOt8d>aA7ak9{X;+31)5F6_VE#D;ZVUDZ3is9lbe()jz_n99w^uB;0& zply98cvqT`vq6N2Z$S4f6NxLk8y~sLi))2-=#*^&3i(Ue;GM|i#%WrCNA%_g@larO zaoj5(f>cisOl;@(Wc;z(h%l*y6GkI_ieW!xb&hip{GCA{H)tk7;?Y9!8mj73GCpF2 zZz@CF=HlcAjJdqr0#XbXh(5PtzpM=Tq$P?U4C=OtNbgAAw!y1}-*+-k9uQD(pHNA< zm%XL-O>cC@Es2+dY7u`rbZ+vq@(YHw=;@2A{W;F~dPvlNjp@lKZ@$rZ?m#Ov{?kZ8;4xa#v-3K`5q`SiyK; z?7e*4Vk*v-`_5YvPOSx#a310r1=A8uzDJl?a3|HnX161jJ`Mizo`+h=3BUJq&%k z-iU0I9o%nxyls$tyiR_+KHgn)iwJ+jqkt!!!gGDl(VSz%ULP6-D1)YV8iZBp{eE>- zi6C9oKY|!}w>8&OWH`j$! z8u^4-=hkl*wqpynQ=S_GBSg?rU~>q zK=NsZdS{hiM9L72m6ApIWh57T0u;w0n^?HP;%sv0Pl>A~F1Sxxv+rP^rpy!>AK&v- zdOL-C8k1sAng8|RSTR>t;-$XwFVRS4%e6)n9Gd(0vb$uoV|TYJY21W!XaFskK-sON zATVQv+%ThY5HHtIc>e0R!Rmo1kUvf74D`tL5Oe`Ad{nU#orG&R9G5=rve0s5VLARH zq#!=gaXXV2kYle>-t<7lQJ4a_`t4Pb{dK7H>DgSQRR01Fi@VJxYm(ne zHQHV=-!397{)H)ciw?mY28Y0Tw97fCq|WAi*>cgqUR+FdKr@10DUZ};=_KVcUYqgLAR$~Ux>jNwDX zSDbXr1OC;44;GuJL_laeDUA}}pU$qMR1I^l6<9Xi-ND8qnF#Vp3%EUqi}T+d?`%0~ty4*k?2l?g9whHEOMpN z>7yT!^FC@1d5D4Y&p-q#F{el;>?(j2#fmsPdD`?@M(}-BDKi+|x_GKA)PodEwQKh@ zjF9by5%XJ1_hVfFra~N@e6Lbrf?cAh^#QzB6SDkG|9Y%K_IDG-GnrzKv=zYPp_!AJ zWsKLK>uwv9_dll&mmN_9X1RZlkS2E7`aEZH+GurfA0gFAo~K1TkRqQS*&^ews><~O zrCw4^n%Dn+Lo@#d`F5u!I)d4QOrSBkzY4Ya3P5NaD`+k^MXosK+uSMXsa2`iHeahd z_!4h{H9JjW4%ZMM*LAh6KUt(IQF5>`Y3F5A3Wi10F`B00NMPvFaPZP~;}DFd4>$6` z`*67KsYD_*xXlM$UiXTPz_XC%43%nd^Hmv3iLl?I?wAiRD_H+oQXzU7Rm7-%ygGll z&Ll@@uq?T(G~M?NcE3fn(HREDCqyR^{(#N8ywD>KA7z79HXVXDu;=^?K7x$jiGL?9 zK>5bm5^=0Bs4R-Vbe()>^&wJa_Q3d1n*2LgA{B9=;mvV+6Kfv7A-;D!m_2Sx=UB#V zL0IGpkvYLo3C&daarupWUY%L>fhuPUx(oGf*wB)({Me$=KH+VG+=ermB285MF>n&tV(8VPtJLy(L04IdqRPO zJSgNIWU)yi=Bnj&a^Y=GaTKRbd~bGYoRfU%5~Exn!SJ2rTEX*`_{uQ%nn z*ja)}onPx0-8ZiltGqaK-~2tCqz0+$>?#%B@W&&h?S(K8_pAvQhUIM*`~V9ktPXEs zFTD!>_T=YjQ234WENeyQ+(F-wa)fw4aPf%+{rMZ(%ftK#P`@4&L3Wl!JWs3JN>xT_ z_x;(&stYzVW76tjRN*xlkVdK*m^rD-`nq@6V*(l}T6H@**70HU!)I+&5!NGiXnaEG zw!q=k{;x~d?pejVO#m@@@eL&2!s(QG*zxG+y{Jyr;cL!nesuT`Aau~n-*QI(xy zB&Nk36sie>`6OA4wbKrP<6c3YY0M$6<`J;iGOYoVsGM+}>MG4&PDE&2HSUulU1SJt zxaAUvw?3n?ZIk)?-^R!)4~D6>mfedp(ErNy2zV}znBw|Tut{Pov7N_+KQhetW zq8UE2Q3w?Yd)4JgvkPgNZO5;DJ3gIdJgsGh1T2oIG2EblOdWniZ1k_xdY2MgT4>wx za<;n8iRm%nDEKoA1p4=dlBP*wnZ>z+c7->8N_FbywEGkxvaQy5gEmIsLz8sy!wj{e zI=(scUl8}EBSF=-&0`xtf%EBzm`=wK|8zh$9xDotLcIfgxoYubKnW~7!YJq2>R@ME zG2{Imkf-dHXfwxSa+_HkF9s*wcg6~4NhC>o3Ba7?!_XdZhSDlo|)B#~BDTT@R9*Rg_ zyL2oDu4?2jBMa)=PZUN!*5!1gHYvrCbkhC-3(A$Pf;x{-Q;Lq|JQWmrxSNFI_I~Ub zHBD2ct(o&+VMuKkk;yj&#KgWi^)Cx{k?)P>A7w$OU6LJRx~oldHaJ619QG*Tyk@FQ zx?ZLks}Dm8F3gL-CW-h+n8o`gp?+Nj12^{=gW;V+&DZw@&DNau{dkxGl(4R}zJVw+ zJCT$a`H#X+)$uyMj6!2JnkeXcueBaHS#Yl#|8tI-YC)_JKVuP8t+lpc zjYG>a^H>k+VyoVX#0)%>ZzJo!P8nkXSD#1C#-P=wqdBuSZ4Fc1D6D;2uY;5u)MNb6 zuHkg2BA@1L&%AW}O*{z6-mnqDou~9n?;HU$W{znOxx=RcujWwUYFm#cY*QqiT=~*# zeGHZ3m-aZ0F9hG{JGkZ0p1pMOx0Y_bBRAbLuPnaAdRiKEm~mNtB+Uk3DXm3^ zS_8y*byC8G(A|M+?!n{+zwBzk+H%4s>A)6*{wUIA@+v3c|FiRnQ0N_;s2V`^h=8p|>K!`xZ%2tPLD?~Tf| zl(1Y#nm-2|yixEd{Wk2gAZ;8iu6$ObvtA|{z1X^HQ6cKvQ?kUvjAD;W)MO@bKqK;h z{5W!?mOBhCeIPW^!K>Tb|7g@mL@IlbF|kR4AL6kEc(rdEQu=pNm63~&u78Cw^`g7v z1P{MJ!UFaM989}Cja5DWr4}tp8VC{saoIu_Pp)lR* zLDNuINwd3e6esC7W4VjEO89S6!89iB^_E=Gihd#VM@SjvwaoQU%1)Bj#DuF3!soWj zqC9t-+qK|4+V-1Y%dW_^fKiU+Wd~-VLOlA&V>hz<5%Y+&)Pjq)O;C#y?bSHfHuqBZ z=H5L-8H7ewN$5Wyi}(G_H4Y9-4mI85mX*H;v5*jMyf0z4JrE2erx6zdnpK%^~Cyst=( z`mwzF3;Os;ne^T0UxANuPoB7jKaYCdizVF`@YJt640UDM(=QDf{{BB)-ia1m{0oK9 z=Ne7G`a>(4Dy*+U*0!$@ZT{ipA<`~AZaPuSn26d6zqpM>u>4jy8F??Jy@lOs@~kOy z&u$K2hoCDM2`INyhXH-SDEpmBF%TZIk(gEX%2ef28>jse*yZDq+H=G8Cb zA$h2EZ6Sz)XkaW8kD{8hobM`ifhJMKKi^X6XKfM9sTN;Fbjz>gvj8JG(1VO`L=3Q9 z=qYSWM4NV~AJlc$nYwO;IG1cn1%@Hk;!hmPR%r=NZzL<`%K&cERlwx zFjA{9V5D~VI~q?nDa_J)l$43_OxaKjkrPM-*9}BdI1}KQvkAtOiGQ{bT`E-bB{PF? zxwP2Ze-2^!SQ-EE(&pexz8)b`^b8-#L876aj;|hI9Mh_w*)8j$r@pTL4s`=tIuu!> zl`h0d?s(Z36dxWSWmY~3X-`+XOcU26VD+ks@8;NY8<5Fnyv)VsK`Ft$;~+5y6V6zj zyE#fX_j9v?LxQyMCqGocx-VSO%d(fGmXmNzs`&(CvhNKq+d)fLa@vtQ80&YJkvIAAMQdtJnfymNe1 z1AWude$kvqR1*qYmt{E4Im>VPlTbDY0lFLdwr@s0as9O)K6AL8-~31DId8ss-U-^3 zfW}O0a9Y*U4T555_G?qlv^<~jKnBs;U0o{VQ$cqv_G+H3wxGCPKX4osjej-C75ckJ z_Vb|nd;>kdd1-RVt18}kx>BsRyADdi=@V^I?|0A}xI%F_m zy7)8&ww2n<@vCrl);iGBGmy?onB(hR#_rL;p5J~@JMsciqJ=VnLUKGb>YpFPg!sOl zjoBtgC!4c~Zf?}pQoN{>f*#oq5yu4)^AQA|zKiNH5hcv}lLL9OTsTF-=d*dG$aGxu zX$dL^(nm>}v{ zJ#=NqO*j#{5wvX`C1onu+EqO{L^%OFc%m{SP4$}^WAV<18(vnN*aovG4U#|4V*62E zCP5>SRgpnbPiGJh+!@0C0B=s#+)kS7VS;OzV5OBfmuF;>hbAiGh1bG-swj4qa1l@XqcDKLYbzpzM8bB6t_zrVnT8`3E|YUXejOuP*BmN6Z5 zbEC%=QRx9sMXGFA*Iw8>eiD{IJB-~TbGAt8%vhvVZ#65nwLVeW)1dj{G)sWbEj8KfV2s!Xrsw0POpHd%i3>O$5Cln!|g2l@`1=e z*{+npgM)opm#2}T#UttVZ=Z~sAO*|*=2ua))pskm!RaC0Q!R|nY6h(lwD5dIP6nUPiAP;`6@+ME0E9Z7c5XfmnLART0o+ENL06rV`HB=-OFa_>O)-YXP5G7%blYY0ZHG+Y{85=7y{d-MAJj4zg1 zp;#^R@zsBWvTSFgwc1QhC^}(6TpVn5o^GivZK&P5X@CgEL>Fnsz@`1AscQ&rBk}Hj z>URiE?03O?9?XY`EW!I8OJYLVi6@gUR@vy5BNxOOVKQOm_&|sg*>cCh;eDr{@-ygP zLaKCeQ_WI2t*6gWpye#V^0(@6BgnX8-eF0|ejo6B7+#NxS>^fv=%-^L$po-PU3&nK zbJS>Q?y7v8@w^$H&8O!}g&$>BsZPgS_XvmJZs)hY(^1FcM{_$Idcg-xM=UHDo0BCq zCL^Ni?P%-@uONcosaT6=5-F=oz3~bY#4vj0nT)+1+a|65nC9GtTy7qKWRl4?rh5Pk zlIXy`h2Oe><~y5k==qt#kO>7tYH&7{-r;>iqP56^>!Yh84KajvE7ENeSHp{F@G?f~*#6F}V+3 z9$6|*oqraBp;K$MDnQz^U_Rj@vxV(W<7-C0n37lUd*J@qX@t?<8wM6XDK(7a3i${E z)8RbsR4ROX#iX~u34iZ-Ml`N!%{pDgnpNI@yf?4eROFl*O8p{R225FF!Y|A&TcZQ{ z>l@L@XonUnf|>-q51?}rU?525?Fu(2r-w3nM)ffk^R0;QISkL3e+$p@;GWmESo2po zp0B5qrn-P}-IEjARbA#}t80oW>oa0yQa*Reu|<69&PXO2u0y|u)Xi2BzNyI$qv5HR zDGvjZScE=^0D%^Wl^mQwj6cDRX-|e~46aFA`RKEQk^i*H%JfB{GzCh-1*w-MHPYN$ z#9PT0S9z!ek0zGVIW4rl8uYwh5K4+z#tCP6s!7^Ld*A)l)brZgkl_2Fw~F`GD#{*s z*}t%cTzPH&a8GekB<=H_AAZ&4cBm#)P;_PhGtqEbQEE7g;xJ=!fJM>xaylAaA)7Kp zrM@~u&Qa<3$M|3D9n$8B(0!!u9s#tFX2-$<*YBpH&=aFH4LO2QDB_;L?iH46qfjOx zk}j_e*3p`aQHO+ceT}uuM1qM$^Dbvv>HU17^I)`HlM$_LV%dlXCb({hv$11VuE{oM zE+_Y~h)LSx1>P%Tbd%JkTnz(+{6)dIP~*5NK^Y{%mr|vWbVT^{-+zS#%O05!xok>e z2gAMjrN_35>H%tra(o$;YPYfbyAM)lH8DR4$odC|#^2Ss%)Y;@bh!+lb(B zp|3#u{z~FqBwY^4u>g|PtooYypp~ z>6ltp;C?cWq*&R-kLU-%b3gtNI4CCsF3|R;MIH;Y($tMSy6|JYZW^nl z@VG@Fw7OXVE_JXhU@VBJ1^Ixf+jS#u_M0pX5y4qFi8f9%1cn(WB7Mj=w<&u61#`|A zpzEV)W4@Z5rreZ35$?XJRdoZ|5J$;X`#Wg{yd2Wu1a`Yp zGF8nP{va%n_)STysFscD9~9VS!sMld=b%nuRbm}2?Dzh1Gjt%5!~RS;sH02Cku5Kx zz&MUo$Qho@U5n|SOeCyBriz`@Gz!HgWR`SSV}8LO!R&+IdV%0?GcMEESMTqhKLFcf z{2NdOx=$asdYwj;xlSA+rhBHO@pPyp!!eQ9Slc_0LNb1=>^%GDjl-l?=1(LO4|nC7 z+7dR6hm2ZpMcl<{y@b210pB4`HB`>NWu$gZE5RE~U_Yb2SkKv3pJU9WG$C1A?f#QL zXBvhZnsf#i`ENyC@-BW4UImvlZSoQ<8=KU9DZBd`*P<^aPBxI)YM6`P{##-e8GVZ+TuiFO(U!;$1D~Ed^}s9gTCW_S5jjTDHZuFXbHi%st%*xBlrequ;Mjh9sNg5uFPO|)LeK=ocZi4zS<`tSVz7R*|ivD*-cp{E`FVvS)zI`b`I`6 zFypxouSLg#!1%=up{KRPCxnRwO7FR3BB^=wUH5yQO8!)YHN6#i&c#b~!AinxFYUDO zhQ%<%jKK?*SwC)!a>hKKrzf=Qprn+98z1Z24x+<&dFG@`Wp_|)5xdWS^BWkWlQEe2BudiIb%Y49?cvjUB3^Yh=mOyPY z8$@%82|Nu>X2Tt$84Ry@VFYS0L*S0V;a$Z@a(-c2XVEH<^8I;9V@^r9P=-|KlZX#B zu}mNMNG<5?Qj)Y*;N2Jcx_x zZodj(^`m-N8K_!&PX=X~ylkc;NtrJDWX{l!r3l-Swf&GZ0Fy1q&SMT!J@1Ro9%EVH zq1^XkAcWcCdE=dZ0xZ&_RX;gKPn1@=Q+qS<%-=NWxpUrm3%hLMxwm{3W75bn;g&H` zPx}=~Go7FuA{M=PqtZ?CC9hK=CAqXR<3qsj$^as~(b5?0#v_P2him_hUkQp>lo)9B zG~uD@g+O)^w82d|oQ$1fV!%Korrta;YE@Oe9?yZyNKCTbFpP95T&~}!U6@_Lut2J6 z+`%64$0)+p+Ra)WunPVfD!eLBnA8}+JBHk4h2ur8t4+CKFYBh@*3!%+CXEobb&45$ zQ@i(l=NFAQ^+{Dqvfn^M8xJx?+njlF?s3QdX_z5wK60W5^Ou*-V^ap`IcK5i2d-=k z9q*cegf<>)dg-BF13rtpYrcTh{^+tqYD@`={ zFITrHp)nJPIOaQM_Rg%F-MB@?;A?|kdniRCiSv{>GirxvWm_mMmK4GwF6oqv z;|mwUJYq)CZyK>`UcfT~9LQ7v;kI&P#Wal)(15E0b1O?0ZYdo27J2X!`l<_b;sSLpm{%zYtIvvcT4?=eJJWtbYFhpN%Cf8#L!F zGBAF~8FH;g7|*wk)L|~rz%4WwnS;hHX*Q^tlRZ#IKZ&8?xzapZY>@qcE(m}HJXk8d zpA7!}w&SmjBNCqohRYsS!!C0BzE0hh<(ntW;5)p*tj5}Nf^n|acv83Jl>#K79u~ZD zbn2+tbF3i>G)`S87DSIVO%k|<*M5nxNuVj6TBdm$yXV{6d(^-({_r-LzhGw-FCZq@ z;@F%Xj)}QhEfuBUl1a}$7oGzi4`)BIH=T!M9s@nISC3{+K7X^8wfs;wqd9|C&({j` zAyE7Nm}cixA4#%I33Lmv!Hn6lXZPrrCUFW;-ZI=31-U7B-4zzt6+1!l6!D>mIxqz> z+Fp27Cw{bK;CVDeye$M`&zWdh_b`jTEiqR3B9nfcq4hUE$~uEuOe?4UxXN2bnuTwkBhm%g6eQdasSg-7%$6qVop z9Zk^B(mK`uxwJDfYHhbkR&HXAukncM*7tIKBJ)dKA^*35b zT)y^1`Ff*|3&hVY$84TEX#{Iwv72T|Je3wr9r9Vlt<&zcWXxJJd?SGqT`BKh(z1H9 zHuGsC>|#w~PZ88f29!AH?|@2>Wwl%-0`OZ76#d42=4bnc2^y(QxrM~cuhna<5v`r8 z8~fd)^X;iI%DsKeQO`>q58p!YKmht#I-eu zUaYx?7A?absnM&iqTGMhdw#TeI4z1ZD-2m^2-&1uXJUB@?y-?^Zo-nrH3Vw{A^na+15wMj<)4;fY zoV5^`a-~0FF|MkM<000s z2o6jZUN%~lovz6YjzG17WZhC}f6R&IE`}~Gz0ROlvpQEe9k}|j?_{r$X%7xl5{HiQ zWL!i~ou2Bm1x7fJF}xa5?otR$brmMb#5n?SS@kL?AHi0-`UnUaYLwINywZ)UvFVXf zW?awCtkNsx^+y0KcGEZQs;A43!D@8pLl)O#lUxifZ`I%}T=fx@1+MIddcZ>1T+FFT z2Q^@u0H!b;PQt&M>?V52mnLJybLV+pGAMqbW0BD5&H>`r6rJytgOJjwMN}u@SyLK{ z6m!)ZT=D1|a;>%Kp6w)iiETYtcmqpxlG~p=%Ds&s*yrz($Me(mzNngm5EX zxL*g>d93%uC7Q_`v0`zQO)bGGiQ;|Cv%)nqPll&jc9~h<1*qM7f~SBXQwyrO0%Xip zHC3qU|BhWhnxJw3R^yS3d8>eB;#|M!@Mz!LmFhS5?t8w1mVqSAh~266D00D@U?LN2p7H&l8|Y6wcIisPkQ%A$fn(C>{v-l1C^T z{`mO!r~EU3pP%}@1rNe6o8bpO8TkF{m(&nQLH?)!-d@|M6Xpo}@dpUpcC_?-4UF;3 zTa`QHH7~HSt!L%N=Z0hc-@D)T)k3c3Y|OEM3-G-IFK&Ok-!i}%2;=c8r@%^qz`~pB z*POnlUPr$0J5a1N35>Yf4R3v}Weffc>Gsh*JG07_y^v$O?PBb8UwwZ6_{5uhZ1~1D z|AIdu%K!NL0e^hT_SI}xRGw)X^IUD9(1p9e60NP;_Ri-(4J2o#WX7(+mz;+VB^JS;+?PQrWdCoQgh(AEgD{`DJ{;a zHj~0)TU(FCOwHM|5EINPV#3PmG5Mo50ODL>tdE4yz+9b5?=U>L=HqUqinKcJx&-M} z7<{z7d^f|N`?rSnK|uYPzP|a4^Wfk|9^tG0B%yf_^Hc3-|UyM-!s!TF7=@A{!s2ke;8e7T9Iyqd={a> zwwzUizhQ4v^|STpJ58UQp6c)P?CuhOrq6rR71dj#4N=gB&>KW7#!lD;ksRY4e}_Yh z?Qj`y?Y9N9JX=4A&EkH)YqrDhoeOg}_YN=eZThZ$>SmOi?C{L0*=yDoqSBv_malpma zog1sXwBLLUzuLS^yvLHY`Y&W@vD3y#{u zLMcC7+R@3=x{SA*(Dfv6l|l%eM!yW4GQ6O{hFeQ@Oj8b%%Bg1&nxb1J!|T1p+-2YR z)?;WWmrZ#LI|tS;?Lbqjou8FgS0F`$lwYhB3fjH5JsUY=9rmK-5JjyUPI)ZHcrrH8 zOXQ6QVE8^CX(;8CgA)V&Jw_?XJk89= ztn*MgYorQ2vy?H$&?Svj^r;ql0vBrfCBhuO}p}h^%Se(q>ts<9DzN15nn^vB`yrdf2^(--D>)%D?S@I*+bSm=%XKkR1o) zI;kFks&Bbub-h>5!NGQ#!892kRjJ|lBm7w4Agf#n_D=&&6aH?%Z+t-T>!&b@%;Qh4 z$7J|Ud+i)jSI?VVJUTL$qjp^%P}f&y2k=hZT(hjh`aZl6@&gvQbC3YeaGsNiy&S2@ zY=me%j#+=%{~*X`3Pd0iowH;UKW_t8g^(Biv=ZBp@NfiTm^<`Ya3}=6pjlqNOrD6R zzVABgQ|3`G@$%b2>zl!xStrbToHq^BIShiD^iD0RR=pqiZAFbr1?l+WH-lcB4kQj8 z3TP0gExiJh;qelxvY_uDO+nJYy?jgU0jckDrys zo`WawF3BUfX6uN;p}4VA->r;YhnT$R6=Tx59_~bPhUrH3T(c+dYgW%S!}d;6?*sxL zHL*VQna^xvu4C|Oc_9o)*-4|C+PF4F`a6IL1o6G zAtpIZlWUe?KYL|Hp6sI>cdCvNrcR_U#_&1D45R;On_w6 zr;sw+ajMhNe}Bu z8E6cJ-rEhICp#5SQuK)XQFm> ziU+M(TeTCH_=LbW4Ut64iBiCpU@TZwue(U!`7J~d-D1)IDQ16s=a<<2pQ2IDkLWDh zBRlim`_jp{h`Pf(%Er)`b<7L8+jwv^xhx*cLhotTg0qZ>6j>P>L3-`lonBOC_b+F8 zCfM24z~}#3H%@H~J`M+beDTn9ttO*LPW4K8OB#l320`tSOm@YAvj^9sooPVDSMN-e zt8s(9=%gmV@8+?dJVsp8L0M8u$Q|=QxjEa--t=&2e(=T*eyeBx6_p{Jr$K;4;qEc` z_=!(O^c=}g^>OEszxXfyN(4OJDkafo#-!NFY}Vh2dY4x^^bYf(!4Xalo$+G8kG&au zDqblbRmEs>XH+OlT9_qu`ho+%)*tag59iBt|Ka^Q;N?JX2se@rCdT!0s12=gX&@Ev z@Qw3XGtFkSF?u9K-Am*kJC5SJ;;l*Lb@^?NPTOH$@-uO75mCh0*8BCoVhY_ys{kWRr7N>y zkR57K^VFkdbfBp4ifBFLOfKe@Vm~*&(T7!`PZA<69vPYcZq~H`hE0a-%2woF7A70^=;l6#jJ^Pb;%RP1}*s=MXK z9$sX?^$o8@61`%aiTg_CwHd`+The!dU6T%r{ZPmDaNQf}r9C@yb@2jtMT3WOCNq0W zL~&f-H%iKw_&q0rvnO6D&UbM=XWq}IZizNh@Meh-*HD|#Vy!@_m$cV-=R0<1@}Ymr zzg(Xmzkk{s`jLa2GWltL+Ft0QM`k;pgC4v;rdoW}2YPJ% zGwjO!iez1MPd?XBdOP$NB;pW#M;xJj4?ahF#+`??=L|Tjx4OP7(eH7g+m}|3GFGP1 zv%_ND;>tqKt-l^w{mRNNv%{DpjuYcevrIvTZMs^%+f&VT$NL(-n~Ghzeyz*q8fWup zzIj5tJqLwcW3NMObc(nh1YHR-Y<$QYn+V0&girfd6_Fp~U7s7yPCM`mixcHkLx-pO z!*qYQ{PM6b3;yo$9J+;9f(O>c<0q%!=CkE(ljamAC?#8$Z!SDH{rrJ9{=ff~ga1eV zWWU@&@EZVFMf)2sX7tjR-wqH+|3$!ooF>J62+F^;q2IFU2O0C87^6C!9%eG&^l)z7 z6T3~~Nmv_X3F>T_D=E`Sgm*L1v>VX`rYC>@Xd+k9+J8mdXj`%Ze-fi7fZT3YF^q7G zz1Ks~YV@&T<6uz8U^J{el*+TvUdkJ$dpF6v(D^E~8=p{Hn*n;SX-T>rPeUM8iP(Wd z6^n7T`uwG(Sc@@x&DC7lBXXZ&y!9V*VWH&=Rs(G|$cW?D%63F$p7nvZ@5>9i^W5Rn zAa**l$C0Wus@%6=Uuo>_|M?% z82cioAy)ZPXkg7@PjBibB2hF)VVEXPOd@~8tuHl^Pb{oeTXRrp(bNc$;?67#V5Slw znLu}`xJ?a$td_PpHC!_hC@XbcnRVEx&g_xlz0%osk&(_q%{$yUJ0=z9wW`N=N*{lx zw#PoIOAJDUf)U_Nsj!f4nDyejGj03>^cdErS%48fe*gM++#UXr(G}9yF!)CPAund+ z-vp577L4qR|31K{KjX6LRc39@RN>4|WGLVYX^gAYyS3``(59jLSf>#>9b3JjTkYOA zG3BaXk+mz4SGd&pdJrEU;T`(8)TzGHCCAh)G06`W&{ zCSz^6Em(yA<>~GaUd6w1nA&UC@D<}1JUVKJjrJ&E(+@wwx4W$*7Gi8RFYj+G&YVyU zVLQlDUw~HTU`J0_N?aC$%9#0#A|G+B)V%WV^Y3%&dj@|EvBMTFGy^vKpx-bIzU7_S z(M8_J|08Vq`oJ4~`5H6h%|Ese)WU(_jemag&x2L^H|@kz+RxL+Xsp_jSl9B6+U_tK zD^j`YmCJ;Dti-wzV|noO(_reMdC+fc1&$_rR#!1))Y}jdiMnn?a63HewlNzu1}ts0 zqtHlu35gqHmQB1N_0EoFk8oa2cBh&(rqhLbJT#PR@*mkpK(E zSqBB_Q?KbUqcCa?K@r2!W^!o3byi%oYJ0>ircq{1oGti?Hgm2k6BThQ1*YtSl`*}r z8V}u8kH|~0P}5J3Xw0TUCX{rV>?n;>6xJx?Sn)qT?3f^I!ru?a-jwmBKLg6Y3X zSH%9t>S@$4)X?!sRh&P!H@Fn%D9=$NU4L_a&1e_b&Iq5h zwAwJuk}ejJf)_+O2fw2XV4lx>dr_b zvEH=+S!y?Yc$05zK~G~goH$OpG-9ttXHZiJb4QB+r*Oxy^Tazi4A0l(igpAG0mN?gwD%UjYWrH}52^?O7;~dTY zji(#$&k0qx&ld8ruC5qxK6>EDzXE{gwoX12^Pl(w;dxuzJZh2zy}2<4fivDH1poj* z07*naR55E|P5OYRaNb@HPO8wldOk6&0jYc%C>m#?jbIjHPtZKDcS#H)&GD(}d}6hW z-O_`>s(G3*7jrhdbR&Y>;Z!|8DIN@Hv{|k9ZsLIZkb(u6wq7Ri_Bx$BVn42(cdW%& zxeHKGse3b;^IHk?W>rnPvKvwl^%LRL+90TFG>Ezg04!-!QfhtcfLgBr%n&7hO>}?( zpaoYcm5~DZ9GXQiO7tC`NZNbLEQOMqQ8T>qT5^yyy75q^0q2XQPLQa_IA%JMwu*>*P2$pwUQs(Pyko(;UfEJ%A)? zNIayBs~2EypuJj3h1A&+8Z@N_ifnvHk9^x9k{hoDf>G4$jDg3mF##c;$h|x$4Wylv zc5RmV2Jp=97{qKAX4V~8|Jru)nrTd?1#=CY2)Ky_*w62ckr?zBX9cg?)$4*Ao!8i0 z;v*q{384JRf1i@AWLSB`?2iE0gZC*Md{BTt67Z>iPXPX|0Bkrgd@%?1{Tn*iX}$Hf zW67H7f(To#8|M2flC$kJz;L#)(0xJyvY0YbW+Q0Nt^I zAchcQOCt)1SM3QiS~{uPSV&(QVEA4x-`XmfA;A_7I@P5_it@$|bmBo8DX+${ZH(Qg z0UPM`hov*|rk6qSXfJuSaxbG7Eseg4R%G@+)h3J41zRY3TLl%{>H5F0Gn2gETfb-co+{5Yub6H+ zV$eLi*an64aqetB+oQbQNa0$Ez_B%t$xZ_LzP7KNb*LV;v+ZFX@jPi+<61}9;p9El z$=eJ8Ikx8XTj9I+r-nQhu3hg&Z}gLB7%keJhB#N#&um8Bh{PtVivp{@=9_eq-do`l zH+hi1V*M3u90T#&UOXmTuy31;X`)vgs^Wu=e)^%h`bs*$#G_+h|Wp=R6lBq@__soR2dKh@@N$LQH&!_Ws1*5fHWXdAZ9 z(AHY;IPzM2^f(Yu!uE70+E{F0^Tb{V`TNpTAi~zSK37fou%E4rxV%{#`pSE-ZOccG zW3jc1;7e*8BhIM&uhC25*!2+Kc;0Y!EpD~saozcS!;Jzhur1fB_a1@gLS~FLZi~q% zDqnW_2@{q3n7#IlFIWC#i=+3pxGkKIbt~HzlHdH^y?Y=N{Yy!nC}&?XuHtvBhbBvN zR@>-v0$@FLka4Ru;A*?^ehp@qW~C8UY~3JMnR{vs$=PJpsO356L6RwoUEJb`y)3fN zai{OFv&&VLuPU#|*QDoR6C)+1$*CsPS)NgGcstFG%w%o9FR;F8_fX!b68w_Ij-2q6 zq+apNqHttN(SQD0TprV%@eUt`UPgc|KK~4{y%QrC;~nA2IN0wjVjGW1=IVuGu&^T# zJ$X;b`=l%3K^ZrY! zW!#efmke3P-~$ABeP|2$F4g0nyD5q%B*uP=O5oJB(JS26;59I|i}Atbk@iS9m`e$A z?Dfy&Yiv8SE#@T+^#53hdn_(GzwDl7^tuOO_6`f>hwy9alX>IZKqrUqt^G%vfA68Z z;FgaX8Mbld<)W1w<0}CNtiJ4@>LLh~5H3y`Fy=i!t4~>Wex*a;hH&=EATzGu#dxQi z_(Rm2?V3E8b>&@y!9^LH-^eWGUeym4_;7WP$j7* zaYs+bs?rN@2TKb&H3dNYA`NTBTsp>O{pIQ1$htA*8fW;n7(?>w*3<_=;EAjCxMjy@ zT`r7FNh6l)(_8?qey&eJG)RR%lf-r!KhHTO;L2B!Xb3{UmcdW8L7qLPSHcJjcwu)* zS|%;PRVTUZ;$2oO>fpoG-MsEW=xdmBL**uf`dzL0zn~sB%<(z8%1yoZ*jGyTEl~>E zFrT|gpOK!4m|6=xKP$WO{TyMm7zt(fm$avq6BgPmf4zh%4+s5o}oSs$f)`q47o@yg;tQwVeDC5id zv#vh~Lz*nY>)xU%sTw6L`9#~qngjfa2(9=9|1wi-$d z@oP8=9XzUp)N5}V%;O+Z&!1aIZ^SGNVM@tOpm+H5!QbkOLmszUkG0Z5N&(R~29ghmzFfT!4Qm|iYRU5( zjt&80AT#uVPDeT)PRhK04a8=Ch~(y#^?Lr;cxM@e2t#_IC=`gtG0lS{;-w<8RAfu* z0NA}JoUah_ML3KIFZZh8wFaXO1HNoDSqcS+hNTozbt}}8I{UV>3t%+NUe;2m z9!1Ro?dI$4OftAwQt#q1RsI+TD21-{fMpIM`BIzE?=+_n<^P~mGstP7-*+kjEMOgu z+AG^vJYLXt)Qshfhv4S|<(@+77gnC_VX^6>aID36+kHpc;nB$ME`APTNlpf*jw`w9 zjzj|1ll&&}5fOOutQ>t?BER>>;u!F{0}m(&v}MT69Q2`zrJ^cZ#8 z4s)ZXh#|W{U9$#8Z@iq!Ga}5zo0t`rGCb^su)BGHmaV`Ub_tzE3senX;a08YPXn3A ze~1eDouut{9QRl(cI0yP@&b6}o#5!E=R%%8vhGhwaBz|bcO%gv%82R8gmxp3e3r0Q zI;T&3k_MP+G$SV;|3t}qb1g=G4T>Gd(SHR1sR5=Skt^EUb5cGeNKekeR|0nLY|>e5 z;AC#YqfI#WU7yTOhJFI*w7#)sMOI43%2XMegigqjlEf8c##rSmol06@kW`>>i0J`X zHy0A{Hr9}Jl<_$8v3B}Ch|-QVj-x9%#(Dik=`bZuV$F$jWgRPH)Fk#4*7zczD-)2h zA+MMgUf$V}M6b|Xk5|4CM#wurV`_&Ggwga8ASJdSFA76FgpuKg?3b2$Z`oNJGLGbi zq2}QvIrLJ1vBqe+$Zn)wAig|TP|z>g=_M@&4l_i(8TS@}b>(vIM(Uv%Bbt9KJxzxHT31cO%z)bm8#Bw)dSy#6}8D9=0nkB4p ztrXy_F=igQ@y%iwOGD<+F^<~M!r(z#`fS8u!1)%R4Wh|TPwrTqHndo1!DdtBYnTH)-fKf(m+rrAfGFgSmufbh#@V_BLy_w2-a4_$=j{UyCDnb zh8Bk^^T!dq6#LVkMdSmEH1{DN05yms9&_NV?N;!YZ9X%W(ls#d;Oq;X#4o&y$;UYK z+Mb?R8Ec{GsrcB%a~AO!%Z*K+s?j&b+ORiLG;x!0OmZxmB!f``G9B5+Pybf{?C1a1 zT>mD(%%)K@GY(YYrj|_(8T^C3q>b>I(TEh=0^@OU86V^z9orc zn&FE07-N2Av?rw*iQ}^rb*w#M)RK=pYFK}3)uVY!*@~ha<2bj7{5la_W2}Pf(?J7} z0E|@@1wa6fO>2@Qk>J!RY0yEVW*8Vv(ZRf1puk&uDB@sldn*>+)B=YMTO>6Ci+~*MuPc-DgUhloAkt?y60|uFM5J$gQgI;uAX3%*3 zmKWIRMT<9v;a9h8ma_-%NRBaN$g$zLYHfjpz$a!Omn!~`)mo)YV$# zJo%EltUFU7E~NzsZdUuiPxOEN{`KP@`KSH#Pgcm8*1ylc40y6q*FiY*&ei4!!oVX; z7AaY|m&o_Hbn}$~x<Yg5`F0Lf1dQ*spz%bhcDY#h}x+2hp-(52uE3p!&r?TSUuw4pXo>A7VHud8(!2Uyof zb|u6dF}LmuDb+)}oM)By>Y*mTSxOKK9Fr1bZ8^g=Ujk~(G2Sc)-Nk}Fit zEqPe6c^^x=JtbW&WB1Ig3t6>bjuo394+{n_`-NW^QT_^d*u4Jcr1W3XIM6Ki=%)Te zo-&J+e<1<|8?P0{3O2jW@_4_Tf*HX#XA82H8%3B8d~Cdi8okylPeIx3_^jWo!y{Ye z?Da-fe=$gqc!&TS&yQvMJ%wC1OfN_OUA*!5D(o}7VH8JA^3IePR|=Tdm36GF)%aCT zz^2!ZBegX1SsXUV7x2-IHF-zT6 zt(5upDHeCCkDvek`{VPUf0PRnzOdup3t*W1^g^#bWb$_g=o>Qmm;mXA{rP`9gEfUd zL@6Z!E4Jl<*cOa`u}=;mLAbONY=?U*A@~X1ks}^sHyOdHR=JYDL_d+6TKhtD;SB%_ zw(bO4^SSXs?v{;mMx-10&`~sLXjTWw;2l~|``gG^$dX}-4^c~G& zay5OUTA|}O$KvpM;;_zj9YK&o@lZPI+CF#SvE`%18|pixAr@16571GqbX<^%wF=EzV2&D&Gx?&{Gebxdt5v7`Av`JD#!To*b^TvX6x8 zboBFNFJWaz?QmjT>9I5ffg6v16_Fw9rdVO-T!TX!DsNA&73A1BvSqff+*s@4^m>8f zxfra<#heH*kM3x+(|s;HuS>WIi&KxpCMksX6)E z6+d21zXP{^0_Wt6E8}~R$72-&UIbyovhYX!Y0gEbj&JSsehp;HHZ!?W*GHjmPq;$wT_$rzU5j&76*~%WZ1vP6Jcx;R z8a3*7!66ZLcp`l@xor}8F@B{#bl7-4U-A+1pZR3KW_sGcG^?0>=~y?zygEa*sWa93 zL%y`H0R7>^$N0f>DOb;hAOQO`J#OUfjdt`oSo5U5LReguTNfVaUMaHjdw=9ta`E#9^<0 z1i*9oqX7CD4S(fY3wdZAKz2GnnnFN-!Iw4djmw)N82lnjl$Vm#2ne<`GWy0FkWv23 z-beD_#Xj%qW*c*O(I?VJ9HHrc5mCsMkNbu6C5rnGRm~T(o{&+={Q6!D8X&6^0j0R{ zqQo~BT%pJh@+j5#6|Rd{(TX^E1|VVM%$8m5Mf}n^ytD-^4j*G$bQo(->sPey9ZW*# z<-ZZ2FSd*8s~wSgdZ<~qYt@-ZulQ$wFJx}=#MOEvg&1Mn-ny29L9osjV&L3_$tMe9 zDaMIa3MEZcO+diL{bKh*rF_Q7)Ks4Q_lSk?+$Luop$r2T#=*j`{LWy;9-mB(U3RyH;r#NqkThdpu1T` zxO>_C@pHWC|1ImM{5=5pI|1;T4F4=(x8bM$d{)KRZXLI~j#}OeAWj0dembk!9?Z!~ zx?IxVdf4A63OTko#zXh6Jb8B}8OvD`r)2U*B+KsNaN!g=^wMM7>8F!LU*SND4G(wm zDXG%_D|g+X6+~`aE2`f~NBttVv0%HJJCNCmtGPVx6Fnt+ z>6R7?F@{ym_x4NWQ5p#`Rwn@1u1=^?Z}&^DAY@xWr`9JA+MPJ38uepcs1;z&^(zlr z>77$=kl|hSB7J9L_^W2Z$2}2S_c$Ky_Qie0TG{@N<%%2njx%0&Yk9}mp=-Ccf;_P zKOTTT^Z(<=Px+Eh$>c+Vc=Az|zd~?uWZ{Maw(SE&g3)x}K%wd(ELU3*5B;>stfb2& zexBhyavZJzqngydt=~YONsrBh*fHA7hU^v&K`<#y>;&agJZHOKfAh5x;`G#m0 zs~5dD{7a3ero#0Q-D7oiv_}TeBpF1{T3kgukBKi$=QM|TL5ae-n0)w?cge#e+wQ|{h)s#v}t54FSs00xeUE;CEmBsiZU`*PTjW8~a`M<3$N8fkW)ibx}1Pp*}sau(@@m2nV|tE=oN3lt40#j0N* z4)R#|UZqMObNKE0y4VKjX;O=Y7(P{5nQK~aBl>W4 z;-R;55Kt(5NLm>=QCJlZ3L#l}1%V{5&}aZmxjOIN;0s1ykaF7Pa9Q9wdUz`j zK%kl+bBgDxm3>*Q%70BjegN*7f1d#$FU`?4eKgoloeELxI}CTfmUqi#eyNNk9+W( zrqm6iogchdt1B%It4Sz45W5m(TszKJF?w@7`Q30%`lj}lB}CZbHDbv7dk(_2b2`;J z{x@LX(Q@%vfH7#oN0P9^0g=b`K>fB7dSR>2cVKVK@si{f@(q_9tk~)?v2In_FMwB` zf~lO*ljgck%dzT0Y-jRR?{v_}cKXE?W32ljT~2Xg`b-|AvL&b5<`L>7z_9T#-*HeU zH}Vm`veAS69<|*-S#)Fh?2&^0(|~I? z^n=rox`PKn*I}XDhT%7NQ$2dcIFW9WH^e&$aBku8C$wGZNBxbKnw{xWy}8EBDhNZ! zHVwqm^STr7@XoR0c37tccH&A+%QxqL=U?&C4}YP0qyB7tH=>HGPYQ&>Q7lR(` zLfEkj)_?YBt#1bqOHlD8&0Xbz;XY#=a2JatdLqqRFpnPIB(O>48cMs+sCz+bNfUth zq6}+G9D-P5%ym%O1)SIeB%AeggG>153ZocILe80WerBe zxS|&0(3i4hjr>t;phdO=X3LYy_Gd%AZ9G;mXw7>Va^676RVsDf|ixg4EOjskAb4ILqq>|oi0>V&y=3fq94BkyS+t451{DX@x%tIa5 zq4yA+Z!ec-~Y7pV5^z0XmxuLF6;WiZVT61k3?V0F+Gx_J6@G zjdo68&jIY5osXb3N{n*?{W~5U?pDtp)Nv}+k7B7&!iRO8lMJpjjq9l<4`nPPW?p95 z&mbCdp=HdKo?PQ-2rc!f zM^1=AaW3L+1Akbu94rXEv5pT^i&AHjflocO=HCp$a3&6p!ioD*JBS6iuVc|W3 zWgD7M?XhDY39Dr*KY`+OW>i&oo@fVd;Olc79`p`1O5#dd#9XT& z45DFTj#|Z@@_r~i%rX$WyJG|-j;F?@9t;(7>ikUvK>3O{MR4jyEx4#R98i2~>Rx*{ z;0&ozF+(lZ8FK}FGr#Ll2S4(V6O*tze!#l%*wrUCCgHHAo@Z@r!#MWm$cJuyi5F8c zE!5p;QG-}{gB&y-^16$<(kh+zapGILn^uFCT}e5Q68d6g3^qAffpbMIZbRo!Io`9W zkK9d6`#eA)U-`uYu=q;GR)g#=2=En65Icdwu##VRYSHO{Q4?%DWbe8sXs)O&%Ca*Ko5Qa!}D~+5$3KOys;40Gzvr__Zcao9z6x{Z<6FM9uzGFDrC(yZ4vs!`eyJb zY`<6DXnw2NyLlx%8j8_69;RZli*apf-gMT6p1(#0_Yud!8olAzYrf$>lnN1oRN z9OsAMX6L+8i<(gw^yxnZGlGsiJaAz0O62Wu6Mm+*^QD>Hury+d9+5L*hd2Y)7(0PR zV-;L!taB~2oAgndzEQz(H1C9*y*3`Wmy>p&z!2iS6N$jc)!Hy-eWbcXEOG~jHtMGr zp&$UGPPq-};$fDSV=*yvucdLG1-A7oyN&Z@puW?Mqxds|}0SfF>!D#Fo zJhoQDm=f<31PEt+6hfVv5B=%?$SeR}K%u{ue+p1vgz7H`$Y1eis(-}JOzqG7po9he`;yt=L3A)Tv#zs`2F9G$711+H_c~xA9w|)~N+M`-n-b=?kZ) z?c-oHAKu~m)M}= zZE+}7>YvFu0N0x?uW)btoKuWT3R(lXdJP)(fNBLfwsaMeR9B)@%RjohftMQ6FntY9bhS+wGQCGhml02@~>3LuHCC&O+jB#ddvQ98Dk31+g z#JQpz<3i6h5V3_5U$rrhu?fFn&-asIhR*e=H|t#Cff(D)I&yhp6iWs3ko_|n88LQ? zL+~p9V09?53s!D^dRQEVkDv0d0N^k6!@mab@o9gV-!J*OKYo^PBA3$ZVl7>cit&ky zaKcObqvEC*C*XzaI- z)U}EZIi&{*OSjZpp8B51vBsDy#EiLe&{&IDjXRxiHgHf61{T>~dSO`2Yi^cvf2x;S zN@EgZ9awgL9gZRvY``m@P{B3rUSt&>Z2$I#5wLAP&A0L!`_sXBSNApcN#oS72e)nF zm^Yfpi7_WWVqMXM`wESpS9oCa%h}Q|?H}iggl+(0oZ>r&qo=HKi~#3QNhc#JIBfU%Ebxi8?l(kjSq!V?OVr$20p2jBjdGZE7ATJk=uaBIbvwZn*~8g>|mE zTCyur(d^Rf72jbeh0yGu0R)N<0mjGRD!>Ky8-E-?i&7g`-2dn9&6_MslIy;gwf2_P zSY`!gh`}-hDS?o|C`xJ)B4Lt&`T+Wz`csPmMxy|c)*@vBBoH(a+W^pDfWcsfKv(s2 zcXd@(>imwoN5s81?t3q@s(J>Bs=N{5e*CzHN8I(@e3^Z#g)cp*ZCM7g)rX`KyEw?6 zXSzrEw@1Dh=c2PS1~8PIkLcWTdyc)p@?#n6nwbO9|2dD=V#D5U|0_1$!a56E&0N9BI0dA+^SZ?&l@vv>*(<8=b|;zv$tPbc<(0lUfe)iI^l+Y+96$CRhe&9d6M9VFSLqRf_LXg*) zia-Yuk4XbMHKuY`^}^>=*b(-T-BW)0L95$;=B;CE$z$yU?yZb+BUna1RnPoQfoE_n zAwQVj8L>xTCx9o^i@|}VoLpc5yVbVhsrptV=NK&=EPL3eWT9AercP#vnXKriB)1Vx zos2{RY%XX@zcOBRTP_NIPQBq6jE?CB*wN-Gj#GM*p9PAknn7o>qd}K)FdUktoz-W; zW~L`(XD|bywEcc%Gj_8*JKP4zx!aNST$@|s($&R_tNfjRU;Q8a+5a64nqLjLW0{an z0)GxrUjk@<(k=e<-^&C(v7Lxs`rt9+yk+iQxmk-X8?ArFVMy5BW85nb^feMPW{Phn z+;I2Cn<01DuDV;glYp(s8LTs-ACN2uNL8gB)KVZFYskq`6%X|aJS1pno=$Ap|A6W- z*1ZtU!R*=o&?jIw@DmD>LKzmxjwldPo_PRz`4ePB_QSf3PnOl_c}mHENV;?%V9yAdpM`N{(M+d?!+M+<$eTlX9AS&5k#}sb$ePNH)?1-^cNZ}z zMk?BrHsb>>G_PWNQ_>lJCfmjaiqggt-M&4KrsJ!1Tf4IVLDd!a>SB{{PUh-1F_*s^ z+uqu+pNK|^u|39;@;&tky-9nLUYoy^pO-Q|GkWM;V0{HdJw$yI4otJ$(yYusoBA~bc@xS#?7qCdb}|vm>U7SG-(x>*zK;;+ zdMBD45O7Uld1V+p%&7G?tU6HVm2N&THTvKfFbG!N?q^rgA+No)j-mBi<9Go}4F)+U zvMYVqpRely(vSCtotyuJ*nMq~MbKkyVQd002u7R+G3bY;@$}c{(FM`kU{H2dZ#B{Z zH*Jn4V|xO&x^MOnA)j%TY@E+}7&BpOFgIFnf(+3VQ9e~K&UNa8j~71x>2jn9d<9=_ zLg(Jl^jxm{qe*KQX$r8}6bYNp5kCbF)=Ry|GiWzW0HX=*vA;1$!5GpSbIQK-RpXL& z{&evmEFWE2l1*J!YlTfK?#ZW)^IXjwN;VN&G|Fk0zmlJ-3EIh!VPVICARFb?t{P?e ztQz}jH(ZjYywoW@QLRZvIG6AdLtM;PxM9=$j1;u%2dYswb}?Sz3@usK)isp?v{b6C z+Rf^RHn#H7Vl4RrM+d|jHT2b7n1GgSKooP-fb~;0##JX&p-h~C)lQ}Xo)Vdqu1=mfrU>)3RiUxXMpFvzL^YhW-QHYa=bOBaH?^& z{N|;Z^TxPsm>_Lb6*a)I?M}spt`vLK z&65S%EDqWmRKSOL%WR_LzQAQm$O0M-}1% zr69Y_q&2Y0GMKdZ3peTncfKU!vxr(KKnq@!uFG~*mTU@K2wzc0&heQ)c3<((p{+Xp z6lB0cCZTj5qfb=PHxH2&2W<-2tlckeq_xP(rgYUWgV{xsb;mZ4-LQ-%v@4z&4KXg_ z%>F1F?brCiRqaHvdQ`ljL1}<#H-y`5t-%FV!e+89!&)-4l58Tjh)soF82Z&7^@SU2 zw+ozH$m)kiLwWq<>I)@16} zK7bN+gJh@lj&T4KWx42vO)|2D&?MfBphX)Of!KIh;MSd8RuS$V8ZjEjM0+Tn^D&I6 z6B*TFF&F*r6Ol`ZtGB7Q)T84K{M89sfGf&TUTtc|>L1#xWktw|EtA>>;#?@bF-;qI zx=j>~x*V5gTA-nn%RDQD@SJTC)F8^H;uz~%KxtDC9ySXLoBAoftP!(sQnxZaJ;XZL62u)L6=S)oqXx6sBAihMJYy%>QJEv}Up=eA}Ba^u_ zYz|jqb?a2gu=(=THr?GxcVpS8D87_YRWYGDmCw>0lVjWHTVs$dn&oLU8e~6+redyr zsKU>>x|^slk+9`mZTHzwVq%tno}|F+ZB4XRmayuz{@nf;;9zrG+O=KvtHuTGR@AAa ztueLc5<99}>K4LAdR~L$A`>%x+H)Soh-#s<#;8>rIb|5v2AUWzzX`scG&OzYE|@pl z4gUsFf|;|@y{cM1YQKWAf~$J%CgnbTp*xnhwJrS_FEWa`7M(dh(39=Tc7j-oX5p+c zH}3C+F>^M`_S&Zc80}7BQ*V=7*lp;GV_mO-rMH|jV=SCu`Gf^HiWCbIWF@E?S(TJ^ zW)vItMp0%_&j^=@TlYjg?p`AgUKv!&L>q%5A47se$aYvMUDnk#T~Ka^UZAQCo)93S zY*QEVv$hK-XIY#Eb=$0RZ0>0Fu}W=s3^tYS+W&7AAxB%0HTyAlxx6an%d| zt&`g0poTuHQCy4Fk7X&A&9gXf0vg=xnHh2hZVY*k%kmW$UCJ4|K>&B`Z^R++iYB-> z+w)L18=+&nIA^lbRXt+d*2eWY*%^%?T=&b#YpOTyMnSem(K#Wm@jIc9u(7>#vDWO6 zt;M%AThrXWuK+k3Quda?kr?+?XsYZHm;U^E^f$Jb4CQ;}ci-R@Ea!8`k71T0c$K}| zc|Bo;nzBl<4+}H7!8@B1u6C@t_y+cS(7oYwC%0@BG3M)BnQ{`*M0Eb)HjHN!w;X}Y zW^6Or2@hpb^@O=DRSHu5Ei;HJnb)lT%DLu4mpLvAmR37dw5* zUMOpQ+VAHm=+4@%V`)b5NIF8=39M|ZZnmFs<4pfs7?LVA#*)$BTFhm|k@duEAsSuG zOc&r4V9_0jhQ+XJzN=V}-mGKJ8SzYZGwNM5)MKfs8)ZX#jATgDfVfR_!K!63td|q< z;H_J0Ka*{HU~@(&=R1R7gp6d!i*Ud!xYfCMt}JpZf2}VAyrXXfxYmt5uc*{0 z76#xB@uh+OmcUVYquCe@O}Y$rr5-Xo3}w|-#?mu`8DV34H`*0w)wNm4s@~-q6gR;RX4Tx9ZzYA@t#?ciQ+zEv{ireY zZ9C)XBn`IQoyurkclb?P#e`kCr(Mgu^i`w#VJo+f?M%xCi$?2aBG&!anxD~GYpZe2 zn%e}{2sWDkzX`S@-AaBiWA1VE)@L1wJZt@&vxM&4(Fgk6L)^J@_wa((`h9a00mo}K z^@%^jq1@GhB@QR?Trs5ez#w~3mB~U#rw&J{SaqjxxOVwcx5qQuRlDkPrg3*sZf!lQoxS6r*wyn4fkfRjrE!3|)8CRVR1@I2wjQ zNTSWwt>~`O)3h}M-FJPO;G5@;n+Mv>XvOZa8fp1Y=&%b7#scl-VnE%zIp*k;^(xRE z_<1N97qIH$Q-3Wg)qb7hIA&P+GxR3oK5J$(v||D6N59d$BATO#T>Gf}v>k2@s3-xV z(+?*KwZe3buN+rh_Agfl+uB!hj;?^LVbZTfTS3LQL54zN_R$?}8D|Y@463V3dLB>N z9Y+^uq1Uzb1I5tn(3x;8n>m`vxQe(zS-T0-n{gaW}q&Kt06u zFJd-)Yc%XuQmTE;`3R5|_=&Y$Fx*zV_J(OF4HV&w-NKiw>Odafo`Eg;ktk&2wzOvu z7PRUe6T~~JvOHbSNEW2kS=W;8=UmB>ywsu%;d1#cxan6g|& zi9x$4Q>VeIv1H6E_7zEV8_iVvl0t#cMA;_wzu7bbNl+OO%3dY0|Q3w;S-1=`GYgLJK5 z3Ani6-2ff{fC$u8_WLgi3@!+!$OiFiZN7}pleTNXy8p5x+vnTYobq{l%Tvs;K#xpt zx~>SSp7KtWDoJj`G)9r0tk@H1KIP9A-40qiD6Tbr;pg5@r`>fIpnMHqOYY?tKH|FRc0 zi|q_BlVP+cUl5+t;cDvG*R7Q!YRYz$Aun9?j&GOPu{XAlaV&6jD0`uW_DISWY>6JK zsd_2g3t>c!?SXyM+~T&9(df8#M2_v-Sp~z(*!HCxEaSH8#z?C@dL7%P@AXW(lF_B? zt(g@(z^`VzN4=D*m*>0bhn5ayY4NhrE!ncS6rS(mh}~ATm7Kp4mLbiU3UN$V80x(v z;<@%Cm)o~7Jj-S;(oF;_L6KLzQmc!GvfMoazi$;b>n#tXj{dsA0x)O4bIk>yqVYZ< zw)XAszWK*x{;t1TP~6eK>CHb-j|x@r5s`ynt=mTxU^)~oE4-i=nNJzFZMy*D5HUo z@Y56>Jc`D4N8F;dPqeQY-7s=4H$e{;+3b=^=#Z(d90_mL-kY2C%;0i}AVO|&w8nl6 zH4G5rTy9L4g55dY@wBvFgGQ~|ivg{%*&j^`GLw~VtZ&LMe5dZMk&>9vT;#6|jHz7U zHl5<5t~Q{ty)jw}1f8RI208}^Cnh^)OQ*};`6hwfhHySZ1==}oYP%kym^#^VVAVr^ z3RBo)^&(UV7Xn)%DQUQ*SI(Cj8w{I54I(#3&ZVySLc0DCeu-6YgqO3DRev-(SJuWi z8dp1R{%2Hyr~s&=&Gp*y6UMTRx_aedTZ<<_zV;gc<*oFCYSC=Ck|H?acwef|ipf7}Y>})Vtgr3xgW!NDZ(Shdp;@#nN|~MznN68+3tU)Qnp7TXsUYH6?KZ! z$KXnC#fqSW)T5)Z-Po6yG9A^8uL)OvntbUF@s!Wf3MOjfQdF9OHh7ARdH|Jp#P{|@ zn<6fG7g{Kb1(|ZQeotk#sM%`7WSZ+`r0W9v8H_S^adQgq9 zq8?>it1c;gmqcrnuef@*x7v_W6t^in_*Hl#*V@mbUwqWnRUgjSrt_{*r8%#b({YSbBVj7Ww#Yfdq;2W2J;^mXI1N6H z=zQJ>7Y20dXBOHRc=8Bt>4K+x1b%VoL{vY(0PHcvO$=A%Z5R(K-Ww1dW3k+X)NNprBbl18va{$R+pSc7Yk>FV$24=B-TyRP~g6 zr5poWslt3Jv2J$H68;muCD~* zDS!*7#B`=F1@zkhdJ}-Z58$r`bdq>j5M(ADVk>upsE9w48vn)zmImJ8V#K`iilj!qO~hcy5IKmbWZK~&0Np{xdcjQo^tLT4ARXmiZ{tz9H3RTXE% za&1yyc`97b8j_UyuVAR#l|>nKK}%ot64iR%wX)YA+-ZN*dW}AWOOmYwf{bs4t+Dy< z&~^vuG0hhAYaaUiw1Y*rowoRL5flTy@k?Qy1WhKWWvYFVJ}Tge;*0i$(UPK2@vBSf zDSy|z%_QzP@Fnj+kK5>utvU^KS#YNZ^EE>YK}Mt7Y*XEJ2~MLSASYtz7x6@t#*2*f zqqq!4cg2Izz-5jRSENlrqn$P^U7K6TX2rAWuGKbkSlVnjH-hlu@r`FcaBD|EEz_p3 zg+o`|gL)Lxjyx6+NtYG1*O@1Ii3{|&y;28E?GG^U!`jRlD+-hM5Cs|v%3gXeFIv*J zBeIopA7|vpt_JM!Q&9j1xFcudw@1eO4(@2S`|TQ=EnBCbhez_{aJ7=t<)^YZLTRI; zG!G>xzX~X>aq3D(NHER7=EJ6xQ7`fbs?^P5Em-!KzfjqXl8Al;f)!;Q)}B1#n6230 zsjcIm@Qwqih^vkuS}&<)k*qPzYkC}P)MVK#*2id`dKfAPWnHW#ul`=$X$R5*7s*Io zvcgPiGEHO+N|&F#g}LDv9ikLdP^uj|pMjbTOm(V8Hk5@}zpShNh5o7+V!~Re2Q!*8 z9kQ{sv5vxNdtj^Px*qLj2cHoS_6+BneRK4YZD=WH&;{_UZ3SCk^)2di8i+w&&{-Ye zoRjRVa84PrHV|->CWvlsk81&ypQ;z;XLriF>Sk!cM%vUg8ldmU zvKKEno%P|nbK_0$FIZAknsX_am#AUYIB4jM!%4?7)#sIcVB=m8b!oSp$z-&>JJ>K4 zM`tL=R#KWpZ5S-YG-xLxv?rNIyA`-~TVwFIXzl~hj4l>tFVSgppB&AH8?2rqo*gd0 zh`aWg-DCl+i-G27CwNif+c)P860!6pvL)F{FfM7t+33`WlZNzLRfFZBp!IvBjH>P$ zw@N(LghIb$qlsmVIo0%A==(9o9CgCE3#3Wr1THW69Y#`grf9K^Rxul$CgGiqY10M$ zHBZCP*p%*Tq3R?lPQfso!nX@&L6(u$jZGmZ^$>T{&Sb-=#t}A~u~D%PJQkH)*f!T` z$9m@?)oV_6oK0T1Q^e%E06G)tduh4ke06Wg>j#8<=jA|OlSP@AqMpPxCB}A5%$89A3$6?WIQGjAi_e2 zpYYZAtoP!h1)Zz5--g6?*$jYU1Q=rsyBbrnl%-=W4;H%9QDqkfl1IR4pVcCuZqZmO z*@8RQgJMfJfRmp5dlHE@lhf>4Bfw)9H~3qG2Q2+>Jq5?!Hq5Y6D@l_oOi+!aP1zcO zYuynXs)c=u<`pCpdxJ}t4;O$npEI_ZGC1z!#Y1_jdd=cIuZ5HT#?wY1BTwSsshZR? zJbwB`PRERP)y960Lvm;e3T-c8RHjug$@Ba8=OQP z<$kEmVjqHrvUK7LD)URPIMCL*Eeo3smfZMUXzygd#iEBFaat~-3oFE;zwE)oJZ>x? z=MvZt_jCZ^VIDVB9-}VK*rhQ;e*NNk2BUBM$d3;kFAoM?ROdmceA!;uIB^N2w~Mat zf>YZUe`?QzbFMCQK7mkfA9gRG^^PQSb`0b9&E-(LgA?k zFNVmQ9_^&-gd5=4E1`7(9gc*D&vCX&;}aLAnuLg0QP=#TVHwC_tv$Fr4v#OG+m^WK zc+;wKnR!DlAIxvi+aI!6i|O2P3RgKWDPzVzSQ=PGaZK8{mab~@O?z3a%>cy(4>oL6 z;IHL}0x$988sVLnD(x4W}^gz!?Y`K+5joN$BI0BHkI=uP?^${ zBYZgx*>;|^tZ{v37)KmuHO91C@*vMK;&4$sT1iBRZ`Jr50*?8TJ+tF|$T)*yg8?!d zR;OgKzKS(>&;moK{}FWgWmPjkyCDe_Fy$nV^FD?P7l`odB}HD6ljE z&PT&uQu6?-De+4~MO=Z5J`ws@>j!5MT>xY25qKzS$)tVXNr4n&o#TBiOfI}1#8^FK z`L?Y(FKDR5jK!QfHr}MQT^qJglId8>zTvcCr~;?|`j%Y~oTaW2c^~6EDY@hK7~Ku1 z;T0!x14kG32iJ=jfONvxRqWp!0c{3Ih2uB#&_XpO%mEM@xP}Nq(rdk0z`XmHh$Z4Y zDd-F7og4WDf5&(=+KHcb6pu4=)@5oj2kE!uH>n+G8pL=`@nJ#9WVju93fU;P^1Mya zf}T-~fzB9D=@&KuUYb;|>V?6Xoh9##X(QVRMps9bBk;_2^4*s9sNJYMr+sF~d$7^P z1am?i`)AoDc-O`X?H5;hA!}=`QVwwJnD;nni)^-T%g3vz@!$j~%&W z3Ldt_N!zC<3%cE|GYr;+3!K%-YXd>R{v}-8fX9W9Zz#DTN6jWLD%|&pST~%ypfK*B zU&Y~uzs^U%;gf&dQ{Tx8tP7otz;2JW=<%Ep<-$-|7R?&n7;*Vhgie5O0EQG#^Z&>4Ydg;oE!^hw5glh9543CnM~W7CLGP8a{1}v9j`(Sm~o^ zUyX?AUMhzlseVg8Pq2kB57U=wek5OSE8pSz;_x`v*CV?)93Eqm<&kVPBxn9{1Q?py z53rH_rF2iM5o@d;diHMdsZGp(M4*Rq#G+Jq4}2Vfn&DFIC!jQ41f zqnDV-a02Rh)uZVdDLljpr)m4@R~?a7IxJx6X_ zahwG%1L~J48;9EvUWQ(_3lEFVgm~2NwbN`=PngaYEqTUXKOm3NAl^#$9Cjov6`zfw zSzVvtTBgSN?zq;{jW%aTeCW2cQ(@Ub zed5)pV7~F!9rp{JN$<*z^BYgriPqmuJDP%_6r%guS_0P3Sy+txeV_hRFwitda2NPelPsAMr%|*W^n) z*n0kW(nQZP`NdyEEGZeuetn{3Jz+Up5ueGj4;}~LB@Zb+;E9U2PB4iLvhM#5-|=CJ zh#S}d3?0VooB$b|{}%^R#z^$~$9SQ@2SxECcZ^zJhy{5^+52_j{(F65{y*Hgxc*g% zKg3S^iFDV}T}UU)_2C_fpD4fY!Kk12RpInK>A11xrXJa)$e$pWPsxcj+Xh%dC4hV=CudnrRMq>-2e=fnVng9CYJ&F7qcl99vKk}iu=s&WNhr80rL~`{-hhO@PNG-{oknGVW zBiDMcCq$+Wd@5`kJp*MI$6eCJdDB>Zz(Ef9z>$8*Id}Mj3vzA+`B9di>p_CzjMaf> z*qp?+0c z?_4+aRWY6y=LHx0aWLY7TSN3-svU_PQ0>@x8FCzGd~v58EqXY?AwQB(IbIr+^MWt4 zs>7D;Rx+1$i)m{{GX|g1&9qvv97EVvbvjf->Pew9BmaOWv8FI=j zu{FM!;Vp`TJf*L^=+C#a2+BJaV+6*g(otAh==A5EL$T#aruG9q+4qT?3kKQw#$G2{ zu3ETuVjtoJ8m9<*@+Z$au|MKmSg+{m-um$D>e=D>r_XdFesy^I(X+$TPd_<)^zlcB zryqZE_~heH51%|$|C3J+Pe1wi@X<$~9-cmZdin9wkKTXw^wZ0ypFWrV>EYRP{XF|r zH}2PmPoI8z`1DF`?c-OUa+CgCZ9M=`Y<&4AH|WpR=Ej~^bg7A-i#9IITuaY^fyix_ zx#I}n*NUZ(g@z6W9-X8wc)CD7umvX&xk+1J++l+c$@nz^uIu!uK(Lq@E{yQYbskdw z^e8;gBEKU)AYUlIyp|X@)Y6B!FWAh@1x7{~syL>JLDpJL(!*O{mIT(kBI1HO#z6RC z9mhkMHBRQ(S4WI2;)!g4=hBTj)~)?P;fodd)j$}VTniNJ&LK&WC3s(}hFddPZUe?d zY!YYjb+t@is1bhc%wu5QT0yM--8=Up-{ugTAo)zf&^rpQUUw~9g_-ec%{zYPF!JgB zQh>-M^A54eRpB3Fn2@QjD|1?oR%7B)H2fh^UfTl>Y#6V&Wl%QZ7dL2#2aTAGiTJKq z8@6V>*sBbPCH!4^Ek*oB28G7(Tz1O8=ARoChYh)NuNs__QMNJrF`q(9=k+R_j}wZI z@j;ZU3wEt#__g;4M|`R-6w}+DHi`*8d93wd8S|6t*}>3H ze;gwX_IglauV3ix2KnQm%Hcw9G>`-FD-v$VxXC34a--Y}`QrMq#vzxP5&Zj~Rsey7 zLmfw=VH|P}q1+56gc~*XZ9j~Z*m1+k8q&YJati}Fk~_6jRFM*T7SX{!Ns!cXnvM-Q zZEet7t~O1}tr3O@6&!cg3B{_~%}W51?^05_rJIL|i(?P`kgO(%fwbldU zmysAuAejRM;s9Cf*SdS6hgV-8tZ7-elj$cCTfw4Bo2n57$JS!{<=Pu5H zvHt|%uGS(e&etEDU%3v^Klg=?hXp(g&>Mn0C{W{`UKOPO#>0ow-`B&1`-l4v?;RfA ze{gu9_L~piI6Qdp;PCK`2T$I30gL`@?!Gj3-P&iB{g+cjY0@oZhEKXU(LhbpARQS5&LW{lK^h+5Jm^AN<&k0hl zGdE+l?aq@RWjS&H>KYH4tc?Yx;9JVU2%l?XsVnbmyOI~btb)D-y`IWv!nKS(Wf@V( z)>xz=+t-BU%Wjwa>Sf+G;|EBYg&&&S&N!A{7Vxn%z=mc+%w&-#AnU+DQ`Yj39^aOy zs*j_m+A^(LprJW6u`odweELP`UiQNn&{IlOq*aG@wmprQS-le3j%&nZW!UGByNe_B zV6-M4`(t}A`CurO&FG!IUAj2iY%iJ{5S#^_hqsol`#m}|l=b1#LYr-Et!ta{FpseC zRR@qBI%Xj>eLnca`mUaUbF;)c@yXt2DS>@eAPXtD0Ers|b){#i6igSKa6i(+>Wgb_ zKKl6S;bYybfB4}ihrjvo@!^BN`9MF9505{5eEIl;C+~mo!3UR59)Eav^6|%qkH7!@ z!zbME3;Xohv%}T1=en8K0|9-a&IJ=E!n!H<0DQLBQB)VX+#vYZ0My~a5EWzKLLyFR zx_nSuA{}?ZC}#b0(Fv0${}hjlVRC}@$yD|jWg%yEQ4`mzVaJ84`@RZ;my3}+8LN&@ z8aq*3#5kH5iY(mIhPdMbD`Ho#w5oFzr#!0 zX5xmT0uvLVP$F*M_L(3f!jZX{q*&WAhg`@?q%nAov3CH~SB~wx#)zJ_jD&OkeX}D8 z3q~qt3@$DwPYDGgb6py*o_X7xt$R}2DqbY&&tr(eq6>Q;C zv{{0W&K(|v$+q(AqlY@AwQgWMUyc`s$Pb+4=R)z4xiC;)|E_8dxFL`oIf6gp0h>8h zl2GfBLOhEjUI(jaNxg%T$T?EBHGcfzOIs<}f88>_--tlWEf1kGUydl&3peQS*LZBN zdFG8MuOs|flG$xs4N_|^foZNc<}=n0^C@JmN6!xliP=*vBZ~MfE`N78 zpI}P74m@+9n@GCNp8YE9Jxc_^+>=WzbNz%rfZd-ua=;`)7;A|9dM!$dAFpq1(=154rEyBl})2j8}?yXrng9%~EZY7*a7QYS@)qD1u83`2bJL@X**K2tvhJqa@Te zwDn?wOXVoWud(Vx&8P8x=qh8@I&sCEsqKbLsU1KNF^zchxeApYHekn)YRwU;erMOF z@nBIB0eCQnJ!{YYWMV$$2m8o^){!tAVJS=tSaQj=4^lYUtAiur;{m0$BD#}&K2IL* z=z$_1UobYc*gut&J3JUtZn+-efdX$W+hj9hElV{^A7LOUS|0lQK|#*86idmmUh_6ImiSa4q@176z)zw>G4)Xj>S0mP-4-#-R^d1S%}F%8 zZ88`aosEl;YNK2Ww&ZKXtLYyPIepAPa~V4zX<*IH5woet9T#sHr6tor$x1D7R3Y&; zt}u|Q#M*V!&W*MlSv^U9p$k=>BnJRP`I9G44&T=UfKNVodU(p~^IUtur>iGD zwU6H=)y1!$;QOqm*YUWSm9IFN>7<1m|NhZfbb^iXiid=9venuCI&Xln9g<^=_i^6z z@r_uhr&x_0)y0#JVt2&bUBwp5;B@Ai?AXMRSN$I`?V2=Zh+T+GTs<&=2{hB|;?8 zmxw+T)~m}?pA6A>tfa?^K6&;9JKeefQN9R)Ipv?{7q#!I0CJNPwm~C2Y9^aX_7PQG zm~il0mrqTEMW$OWED7?hGT_-ScvA}hstwk#f5e;nkN1DUYkq6KeEh5Nv9H#8_jn12_~9WwVx`YsLB7zak3Bb3E-_!5 zrm&U`cjZ+qLR?+FTjjMxQ#;`jWc50b=EDYlfx&2Ft=p>H}<5-jZio^1du{F2z88YS^D0^r;&}2?UN+96$WWcfc9Hh3+&pvOK zW95qwyp~!#Y0G?TpXW#`%Wx>pIxir??uv&5!h#4SIm`UQkAlsR1NK*+)0i*cEHmdE zXMxf#d(EJ@+5b5F_{Lss{0Qkf<|PtA6m};Y&oN^0>%BvF$;Fj^-H?X|yv0JA+$Mv1 zOGe`%f!<&5@y3B39&qFT)|+o0e)LD)J^aXzzI*um=Rf!4OP~MZdtdtU7oL3Xb3cCg zu^;^r>3;0+)?06C4i1O=I^>AL-#Oygaw8 z?ZnM7_)*=AYbGm_jV=VEcx;y$wbqVHUlY;yRMp^ZoWN;DI(viKc9^52{b8u$R{*?& z5KbL#6uNd)4mcdhd+1%Bd(~tNxkJQWH_^W$QP1;|a3!y9)r-lrWz#Hq=*?6M*`i}O zW;x$(bVRmXMZ0u^2=i%Sac&mo6uA_ZkEQf=^p1N%TV;A+slAWvk-#!gyD_Wbwi67S zR_1`?NM`P|u|Ml2)y)()z}yUTvfw1df$xPrVfXKr`2cQq$uAyBfAPsDSBJm;;IVG* zzkB$zzxeaZZ+`Pz?|<`Ke}4HFfB9|S_u=HZdNC%|)yK$^bWe8n-W!^9G4n4Pihud;viG5rJ=L zh=Cg@Y=Jc;9SsSsYP(FbY2X%_vMd&eh1?XQ?oy#7^J zw#z+HV-xcqql=N)ETamEmo;MeL#_46{L6RV;J`qM`4rUM@Pbh?*`AxCx&dYnprEI) zE+}!KTx{rt1DXNQ#7D%hv3S0Mg?V@1`Y@?a6fx%~;(>)W@nq&%Gm`MDD;iw5Q!@`Q z+7+=02I~0dmE`b3)z<^?xbP2ObrVA`@=pZO4nB3#A6{yHYF!{JbVMG$l0DZ8vXD@D z{$yw*<1&NYhck-uLy^(JO1;)~JC5xCKMNH;j8P0V)5ES zj!%FB#4>YKea(cqx5fdb0iJ7Zto5IV*c6UG{F)x)^+PGzdbq*Gi{E_k;KGOVikS%G z0iJ5L$MaRD(%jzY!I;;%6pkaJHwP(3=Gjp@c;G|9|2R9=N`orU;O-&pZv;Cy!Vqo@ueqU{K6LwpZ~&-AKrQU&BL4b{dm@2)M*zAEmj`E!~-uL z5IT<%jcb+I$HMR^8G3Zsroxq!Ykjw)g_Z}c)ODm%^XyU_;Wm7gtm-w{C?DG$m#b-r zeVjkx(rj+s)Sd7pTQfgR)*9sm0WoN$S+@Zca8f6BWfI+$u&g)Yji8Xr`b^l;NWH1u zRJbwS3c8)%`co%Yt9MYLePGA~xpqz4#|0Wqj43kGPVA@kw38!GnbO~8VVn5$rpLd< z4&hmO47;*EA9@^FAwb{KvhsD4ZtJkd38SW4)kd zy>#h_UAN7Zgq&#NWEDFqnnFdvWpCfBn~oKmYb$ z9=`F7Z(M%kPrv#8H^2F3m*4*L?;O4-`S+iEtS`IcH%{+7y5Ng)^jg~;exFTkUZ3}M zjbEeJ!KZHEc(p5sLybS540Yo5J+$=1;#aUeKrW$$h@+Qvh~o_aG%6aX$Ez*-qh%uZ zMVIzP`_mf&oJf5WW5@Q2wF-fFs|qekaK|a#0@;F-Ua|06HeA>Go$>K3?=Z23M4aQ^ z?oWlSKp%h@Ryb#h>IRD($bm=0R-Qzdu@MG+V$sDSOu7<~GrR>ZD&mw_Jm8JvL5NLt zaV3F2!KLp{IKlNJnmO2D=m!8eiYN2r)_i#b<~Hg@K?-?`D!7c1&SUH%!GbfaLJt-i zCki6@Cx_~LRCb|_KOv_R;}gi^i-{22IAy^NNRv`>{JOLNve6XMVz1&Ge${zB>bEzX zwZa-_XO5E=KU~*QQX`+S(&$r~>*y}(UkoE>%ypL}8Q!>gx1;(5Ixe*Qinw@v zfers+#inP?Q@qijzH@IPk0AEh5F@n@)to*lUSo}4?6T+F=zSAC7xb#*d`UmnU#$1! zOPk`xAU@G1TGoTmR_49{pD>709KVNee-SHsf{Pn8#gjK1;EB$wOC6S7$byWy#>+UL zVC-L{=%7aLxw0RVN|Qy6^5OiYgMxyhO$j#o0`Xsp(xI>8ON%E4W<19!|2h^xZWLq~ z>j#G_*@v&}TRf?!qA)(Jh=*7zhTzMX9K^=Og!{q{)0X2-Ln%B zv_U63)RAyCRKk^Iv483)CMdCa9t82&8)+DLYahfIltop#3cC$VKxC!Iy-UU)9XnE! zkp{R+0@3(DNohW-=qMi;lzr1$Xw-D$$%yRQy5J%+zbAuuwD;jgpz`bUjr~PDjv@68 zll@42+?>bxLNl!W$7I~`+939X9ERs&2uGM6Ck8QI97vvvDq@mMhV2a;zpDgv4xAsA3;+S7fRcs>h`X@qVs-oH+Qx;%nZlRG(jC z;1x?^zZ(Up)?uBzr% za@tA1Le0BN{Ia*UIIg|9?=}A>cpOq{K-u>(Cxcl-fTxP)P`Wf`2UQUdu-)d&(=K?W zC|ksPK6`vCtx3!2gAq`ikNc^xJurne9UYjK}TQ245Aify0iLB>JPr2*+JI-x(Y z?PK1v?Yk#bvF6J8K6&RAM$|r_awuw z7>J9pO2{oi1QCg-lal!}Nw@?PuC%pX<}W#YQL1*`5ZB4qr*K_8`GG|FB%h2OVtybt zCQt4;sPM;0Qy^c!fX#S)n#7)X_#Y=gavPLI42HI0-q5XUyMtc|=H`wfBI*3enBs|7 zGS%nUmcjB$H9q`6!xvGC#~v|{h|SZY$cU1|7dH-vjeZyxX8a&33bmoj(4`0!-Y5kv zczgFc-$)45YMZ$VYZz3D$Z@FSzGAK>n2ZAzrTJ8&-9Xqdl?5!U4N|BW$cR~Rf?eSy zj;1pl=}aA=S1u62P&I8zSgB@xO6loH`(_Z(w)K}3vZU-lOi5N;>?`pQq#g*Q-{M{0 zQgYEM4u9#J;;^l-alsq5IIoy{y9bPKE(2o>%((isPKZY%b-WUT1n-AdTC?nbPK@m7 zv4^+fNi8Edq0S3Oi0FEqX4`^jC#l8*C((r@UeTAQ+&?`>=3*lx$rxgYyhc=B-_nBc zQowiFI94fK7zxEkE4RzP>7}tfnjkV3i=}sFvlnwFz-_69Y^61_n2{QHXFw;*MXVuX zBtcDXIxF!a_uTYk*>gt)Cbme$#qm+W2WLjG=%h^8SoqbqxjT!g$UMbt7E$FHkJ}Ps zB?f5$l$n~wtB;6IsXWK2Y;%?Nk+w2QLt!hYV>D2#xqA?4D}-HXgI_awO}Uu_$W_{$ z7#K1)wMp9`i!L!GyTzUl4JaPQbaVTUuD9Hf`h0@Dl;nV);DQsu%1WZzZ`?!;EGmz! zmR#f)6w34gl5sa$qUU%3M;uS;{H$eVtiQWM2E>zlr||@BiEv~5FLRGa!B0n1%*VD6ZHqk`oecz~h`0qcEp7$dLF~ zkA!gqd;mZKReXHb`JB;~%od6(zS}?#2lSmv`fEpeFmQ2wUk?V}y?p2Jr7wT+@Uvh0 z+LN#U{MX<6nVz}ebBH~CtQr7emM%B1r01c_zUtx`YjiW8Yn$pHsf%`mOl1;gB0{aL*KQM! z46D2?RN0w18F5>E-*-mbti83Jp_a0+xv6Ex_tuj4+#dFn<-7)~*7%jb_=bxg7Q8_E zKkle&!ywB=?T)B4VSOsco2);Rq>N)uXPr_w768+}7x6 zY|KJaP|MJ`4`78fk{*}H${@%U& zkM7@laJbMX`WW&BJ{6x2(x$0HbKgfSW|M(>pYe&P#waeG3^_6S#)i10hlx_>$util zPA)nV+6$j_yGW+E0vGnSts83g-@3vSKlz}-Afn|{5V+V!du-9t)`KKQZkT|Dv76BF ziJ={G1I;&Y$J2MITu>2PoEB3U8Yy6jPhi70{Tf$c%ThX%i4B-+F{fz<)b7xr$vlaR z-}wbg>WE$Dc=RjMY2a5#9gElj&hjI56Mbk%K`TID7z&SdhhyAnXF?+{5iL z*xo^gxwqid@ZfA^Y#(3fD_)y;d=X-dBshhPLQGnu@yaJ6^kfzUO!6a9PMLK;Jib); zTfwE_6Y|Du9(pjauHecC0NINRRk-4Yp9ew^@H?&%h33PKgQra@3(TIFFY>?*eTs<9 zZH?A%%+QH9d|0C~qOup#a}UO=DH_DGIV<;wLlkoo)CR|V4ET@+!pB1!3t)1Mk9FaHh@^B(M1vFJ z8X1D8wxh;tisO(BnT@Wa1)J(+Wmkxp1uF?h#*V|X*m&H;;`kIBP7qSNtosOslh|=| z*OC|3hJ901V6iJ3I>TseFJ*IWyf%?B^Th)OWFd`~yFo6#IDUs6S#H>h1A)Zddti~o zxcbaEKUNdCsRUCa<79rTc%2ofD9gt3#HuP@KP%-_X;UIXX6&3k{gQ-x38q|(-Sy_OwF@q(-jND=>SXBKUu_IA0f z;GsyBl+ot_9d;bA;8r|X*P8G+5cnJ)CeEc+y7Abm1r0Il5B)~X_~7v#L5n>JqQFH? z=vd^9wLva9`3arRuh|LKQi!n*YxXa^*SM-2q~EBJ*f-pgz0l3Q;}r$Ecqo9Mc>UD<)Pt z6+2=@cTum*R1@EGBK2wc;wAfNfVqu@# z5#QUKRKRpxTp0GgvFV`3(N_uzicVY{@YUsOWo*q&uZk~ddHr5GoopU`{PDAkKmL;MO}@`d76m^DY{jn1CqWy@j|4t1p+;pkqKLwc zO!Xo^T_{tSD}U}1zhf7N1WLch!hF)EgPd3*dit_$GJL=l zYmDQMdHn!|n*+rUzx**}@d|dtgB=qJ^M!68vGbR5DImE^e~ee$DE+C4Gp0@!$A^+4 zANprn^@!KbWfJik5?t`7I;?ASVPXTgssK*Bn_S6RAMubA`ei}(D{$~f0stzC8O6M`bl@`UGbkYcKVQ^M9iyt?^XA)t>iT_$} z_y=GTd}E1#zwDqM^J)H^Gp+OBj`JJX$Vw9Cen3X-H+kKcA^Tm$W?J{U*O1A**I(dG zgcm0fd*afUiwf*-dxp@5Djd*>oY2bIl$_i0lBY1{t5Org3ONsDupec65Lj zm9Fp|xB8%nmtuD2-vdx2_y&=EAC4sPcOK}t?YDlcQ{EF39?}sq6>se;a-a_;z0T0Y zKYa5~60Zpy+d#64UYNWy@t0f*8y0CJU)aNmCKl%4U(H(ob%W#lf)AKY+;k3tpPYCY zk~u$Yb6h0IKEcZ?$6Cfi?EdqOYT}c*v>0@YlNc?w--MXEIH|*f>?7D1o4VmRVvKmg zM~xduY9*@3qb5dLBgShiOiaxX@gF#CbFB3+596l8PCehiOA%*uNn~SBA_|>H=6%iF z;&2o?E`)|YdrbCxUXvHqJWvaHMD69_X86FuU7OZi*+D))XnV79SovX`=Q7tAZ-k*` zt|1ebn!&4XG^Eo+`wov>p8V1;{o;H7;1~Y>lb`z9PwB4`=-o_xX`z4JfYn9b#bF<+_1~uij)yoR1JU~e z=YR;nu+^J6dUe_>Pm7fsAP#^W1Y{LEP42`xfOx0Y_#uoJqFFSlXGh4~9CJAMzIk&( zJP~bpx0tO2quOCOnY6(y+8gR7D2u487ixO2`=Fy%UqVZqVXI9?^wtt0`Fh5efJqN7 zN={}ED8$q4+W)$bQSKsEg^$?cDV+Eq?&dPfYnMJ*ur5Ua+;%#s>UZ&V(ADaLSQpbe zZa@0gx4(1ofBn|KyL|uO{2%ZC?!W)t%Wvy<`JX-0_vPPz@aX=1{jS&jds@r-%usyS z{USF?-v96^`);PT#?L4EdUqjwIuY6niHCSGREg|rpQKQQSXFkoVRE3c|Hi!FEB1nT zbgy`I^J|;~3K}jh;A3cYNvvO%z*CkSFH!Iby#~N5+YUkezWET6lYfRqBpzo*6Z0#( z7*5#0n$hJb!cUDIE@FMbO;>&=LySwfe8t{b=O#+OLg1SQ;#2Vh0Jq?v)SSwe94KEA zYj`mvfU=D^+F%@IDEr)rSEgPL0HYzAB=I~Zw~gQ=uB`1aH^jrYnxhYpXvk)iV8I9T z6a2m*py?o}YaN75y7YXa@wye>^C6|zmHKcqDLyyg0#4Obq0JV+)KSA4zJe++Nh_t*5ZD&KG;<9$W$4Wsga{gzhV3L>m!PQi6E|p}IT}%{ zCx;n3ePV3K96*9{eeKL-%vc9QY|B44KOqT#^R7+!OaEXb!zPMGCL{WmDSy7O_qsut z`Bbx>pN4J7$%L~ZVasn2M_=-;4#y81WH`UWxzv-IzQSbQ1)4b9-AFYnLfOZ z#aVNYPaf#`cnd~5_4DU?JK))s{uJ}4{5*c+;hpQB`0|$z|EV4X{8#_QfBxPt{b#@U z@B$Snu>!lj;)n-j@2^|*!&%MN zV3y6mL}&C`Tvcx^PfJGIu{~Pu$w$n~wBe_WV+%=akNGd%%W#aojui;L$zc*No;VS!xRN*gU?9~hLzDQ;m@opM2 z9mOH^p=RlE0jkbe!?PSCTFNT&5Kg^--NMJ$QKE-@wlaF>VUDXo-U|>53P`sk!80o-I^R zLk4oK6MCFLh2!J~f$F=``$VojES#Q*tv|(wy-MXEZjgN`hD)E!aLb88_;!OSHbm|d zQ}kh@=ZNJuKH=tbMU&}OMQPRKOU{S`tOC}FRQB$W56QS5)$=#YgRo!KXfB<`aAX?jz5O z7aoAvOz~)}E@dw)P39@yNJu?F@_<76T8_SW3~R~tUt=K`_KiHp>+g0DU*t=*uErde z;ZwUgG4{%6GPUWn!3Ew23_LmOCPVoN?iKN4>6Dr+h7l$atDP9 z75Q;74>6!uhyUK6h2sJV9sxB}&sX^56Yu;}QTXtGP#8zwS>OU0&Jal}KE)EN5bx2q z1Hr0KY_NI!o;%ivB+jpz1z`OFR4h><-}E{;#4hN^!lw(4p>Y1BQ2y;Ej~Beb6atQyxPn;wzw(8h z&o`Kfk8}q}F(hBi52)}*e!?z}zs?si@Cr47d4GV|LCT^0*$?*055_7SkIW-|N&T)dp0>{oWm4{v4$%C5x0YSG?Kys`++u9GL*!-hWl^%yw-06+jqL_t)(TL>=Z zBd(?D+6xRm;pZfEOiQMC1ePFBg>&>0W&lwK#696jjRMwvoA8PlCFuzon)=+{p6D1RDQw}mNVpD z6y4LhRTfpR^|$KJ$eOG*rqpPwY)6<{SFz(5E8rSiJjkofTrgiR^sTP<^*3PSJRlwb zI!Nl^{OFJV_*)nM;$QyD%is8ofA#(!{o$Wpe)_3i>woi&M-Lu6)QRAJoan^klQ>>E z>1hGPp%{LC@&qb*oF?-E$|!7vabT+DI_znTv8rnjVjXDtWW-}(8-*|N;|$~jKPMTT zP|T$h82@nL6OiLmj9d`ogMo9=X!{F2ebx<~UhCr|i#PoF0wKc&&$t*fwf`I;7p40B z1}+}W$C&sBPV&0(sGAArB~QG*y%tw19vEJ+*Tn!kl-h(yJhbBw!VQFbD6H|5e=a`U z>weM4n+?+G0yf-{AM&Wa;$)=B0$j~JQ??rrE|}z7c(A@9QB3}lBjV!%MgPE1JlBq0 z^DllmvmZ|*U80vuUvx;w{1O4*%1m5-KtmqMsqiscaVUP{Jil>+=jc5aB8XhZdLWXx zAhI*~GZrqW2rs^c9-PL9j^c~_=yL(&r2$^5_`Bsa;&&bctFHZHjDJPs3mRFlCXo=Y za})89pU8TSCub8|8+d~S`GXfO{V*RvYgwuA8f(P6uRX4zZ6uO|cyeK4t`$-d~C^{S>GS~<@$^VlpUI{ZUH=EMq>kX|=x*{5V49pg|u zB%|i5af2tbalI0UNPLXt_~5*+<@~h*Pr8;IS)bYGu9XU5oi20nD{P~ z;FBWli6Hj>IzDl{;FWH^0_R%w#hv>azp|ise2n6O9phm>Wlp9&4tIp{m$E7pj)&IA zTY4NHym|-T$YZ_L`JlzaD2U0n>65l1AiP!_t9q;_k6h!Cj0dv57APKw z7>D-{IQsgs0fYpo`Sp@uf3Zlpme_AW%1WPAJ1%b0@9H6ge!E?L&70X2__USDpg6CY~Wf#x|rK#+_%H-T2S+Fa+5gLspG?@9*Cyog8hzypJ8e=n25mYnEn zxAO5vILD5>#;;i8x=1t0@!Hc*UE_=_)(0?gLoa_$7wc1PxKuk&s=4m)hewjLK3EY6 zS1pO1%f{yv?E&h0f29^le4;N4f>njy_IBi<>N@MWer4d3!>6Bq^7xGh_pX2LXMg(1 zul(1){NAtpvw!mBXMg6a+GQ>t``kg!^hP4%@|Q^yr{+n^lHgPvWUOiRJRZbZJT$kL zEkrg?+^kXtjXH({L0MzEw@h!qj%-JZBQU8ta@#^esdzdf`nNCNlby7!N&~7Eo-K=4Fx9P1J_?T?RvWZ*c z2+3&-2ukb_wAd-K*j&9ejrz8e3M>bE*3lK;-p`2xbDQbN$ll2X&&A=w^>>TAUnq(os^jQ7J7OiC;voK^&+RngQZl>g_Uf)5G1w_X?^7YEXNNk0SN0gskUum zIE}B&NKSZAER|1lOP;RDJkf^JM5kT!LT7XQOUHcMUR-hWhV@{J5)ReA*j8HXAK#K2 z?Hx|~9Bjt&~ zagJT1Fa~L0YVYzCcyRD2KMLBzW#bX4FOa+1IyKq{8LM&Ff>ehwvj#&)<^mD6H7M0y zw>=|)Tjm1ag|iEhkVfAKs3s;J5ZG7dH~cJl1U1(CBYufV|7)+csX->S+k|B9Fu{u} z)jb#F&TFNu7o&vSE8&AEB9Gy&bIS+HR@8A{{#kp`u@Mo~?>{3bGxEaNz&bb15q-R< z&Jd}rw`J%8kjNCl%f3YI*u>{!JU5BS=?66x0NBAt%u|ogH}G~Y8S9NGNQMenO7&?Y z$xt%*kVeX-l`=-EDAncsr$wlG#g*LgWw4Nfz%o48hq=OO=mc}#?Z%PZ)&B4O9)oZZ zap9a2bkT0?b{B95N#<1?L#)IQgngsRpnP19i6%7Be6~>`) zkfZAkb1S>bjW974I<}+Q4Q84jjWHewVn{xy!C;)n zY4U(fH|3~b=*FH#JQSeM_*hFemMUue@O?*sxyHlplj@Pi5a*QgW*QF9Fy4|+5H+;i0vKQ1cf=*E`4k;1+MkHdC5 z`k@U?6Az8BSJnsFya`i8(pz&R(iLXa-M8zSTbMNCt?gFQz^ws>G9RVa)u3aHtjTpL zPgSq=(JyV)bJQv6%z7zX_V)O+hFQcaT8%#7s*a&?^AHEdph~%Sgh+{3FiMa%qLYHv z!U_&Uy{UfHU2}uhuJNwoO!BS$R>DYQ7p>)Bj5a>DI}bNsBr`u}2K@?Q$D=v;Ufh4<%|~xM)F=J-9{Pam!LnvKSc*G7*wReo?}gPP)^>oaKrpl&kt%ZJ z+FmQ7h^_ggAMHQ(^R1OuM==9L07^DsP)>wIHf{8D1tdl>-8}k!{C>$g}qk5fP zAOASH5-&d)NU0g0L^0M;$3q`+^UA1m&qa*#l>Wx`5mY_To;#89&+$1#wdqnApJg!z zG@XCvFTCK!!$p@q(ZqPgY$J7Dq>(>g&olqZ*X;Pc;ewuvcjhyJlKn4O(z() zet7iOKw6A6*1tIVIgO_MJQ1hdM+@3i$sx2qJs2y(D2#P)57qbeM z<3Zd12?{eE8+@#QG7IxvR(_lw+C~E} zM2@K4&G@8)nhO#d`fmnuRWKHX734XZH2i@D=lzBZ1LuckOl}B4F+Yf{3U>CZ*pDRj z+;E&<6$!9mlU5C|^sTvNLfIGO%Wo5@?+;mWAG0Ah)`InOZtyyNoUfQ%7DN{BhumPx zJN{w|0g^aB`#XLx$>4oG(E7@;+C}NLV{Y=P>lsduiq8)T;CG%BJ#Q8$*1J3`P@9^! z8~E~O%lHIcr^kDGQ`B!7=o-Oqd~jWall0GgxapgE9g%#!Nle1A-{|McZ}@3s0QD2c zJ8ERaiGng7&ocYqrD2&6r$3z0HQy&s^=81c?>~O@=<@m>{KDUR^56Zp|IK^zQgl`n^B+#-so7fBv=ifAcs0x65z;#rJexxclhgLw$+g1AU3# z9eypKZZ_iJ9Ij*iaU$>u5NB~@rRBmpjsv-zavz8DRy13RgD-yZje&1C6=7Z|qkGOi zqW{nIY5k}C=-XnS>(9vW_RO`uD25ALF3h-j^+lvVos}W~HMmej?*CjsnGjRO zn`7~%PdLcW*YUzqyq;wC~K}wA$bp=LWroGsAxhr zD@5k8i6r6_h4|t^zQ#BBP7=n0+i<9s#vHkdqiVtuQ5Sk~;29Xb87)cy^( zDY6RRu~tjcDg`hG4l3Ha@2a}jJ^pUTz*|5S3+)tS$&0^?%eM4GaZA<5a>hr|qgTTZ zv|KM5@4`R5th%nZHgUD|GJD=a>>CMpSQe~b)D?%?^fm$R(*rqqVHZ0GSOjJqgJj@;zRQYq*|&qXcKY6q>V z3i-tw1v`!pTNp>5$BkVeM&iDGB7kdck4BvMrh?i!%zI9$liJO`4D{igAeD>KsrM^xfr%xX*&0%Iy7`qj(oV8*nxD- z-6FbVoZ>;UeFgF09@k%f!f!v-#)o@OAiY8g(t~x z@X&xy2~})9UU1?$OExNgQM%t;=~D*d}qMp z$0tu7K0N#7|Ku-w|BJu)i|&8*Z~jfMefXdKyt8Xp^sa!i>+xe`x$GS2QroczhmQYi z=~yfqjcKuBsSn6fUu9eT`I;^6qShya<0AfFXq}JL{V-f2h!@Ypfh7V;&4mNKl}DsU zM5gI40c6(YLLvu#pQr)N38}`Igw5C!zg8^_##C#Jg)g*ehTcySB$N?Qnw#y`>O6}T zl_k)J+lJ|bG*&+=cQ_6u7js_%{|Q0%# z@Px(x>Xp;`?>xNn!$0!lFMt2{|M}N{>Zd+-`sneq(_1gyJ-K=9ru~?eP*{M~@Vf@& zKbL|;!iaGK%@b3g_~Kk)pK3>sMs;XB*Zm~Gz03&;rf0gr*M|pmlmC?8iGBF!;vI zk&(42m|Ml+7$j(m=(J6sZXRsV@#>a?CpL=W#z=Y11IDbkJb)!eewL8qJ{eA%`1Ss) zaxOf;T2KAJ#{GvIdHAROjF=iD;G3R;caD&|h}$FVn6comVlPPB#9+TA2FY~s?T2;Z z;a{T2mcI9eKDlv<@h7$KA!MF;FDl7>BSO9eM4zz)gd>|(NV(aE)6-FW+$8W>X~$CT z36QF{p)gPQ8iYbK-SK74_k%{>vC*pphQ|10CR_c_coiialKK3{vFQ$$58}5Defp7b zh)n;~UvrC!5#RwzemX7OeFFq$5ENk!$0Ela5VLmQEwz3deD&vZLzbl z{P;uqa+u>map<4tm-@~+kz)f~_p9tVUidfGf5^0k&^Kdg6TEho<+_M>FCt{L{jo-0 zM@gj8YeXJ8*P0+XFH&aB$~c;m96>+ENY1y=D=(i&?}Wds3ta5U~3TqxB$z2dxj^d-p`o zC(b_nxu1LX)nENpuYJXrf7$&{d-;xB>-z$fE6%+<&>)~pHP$4^`dR@WcwYlzlMl2B?(sV)x>54!W^QP;1W{@uU#4^IE*@Ba(0|G;1T!I%H<~7=YqydX)TgZ9zW4r z_MhtQS}e}*=@tIRC-3pfJ|`Tw)rWjLE#1Tt&*}rabbR=;%*WC?YciMm!j5==xG%)( zhNw0NsTDr4=jp%n_NSfuQ+mXyPC$2llMJH9X@v?$6)rd&a>*7|yKJbP=VD203dFJ4 zU$U~=P9xRaX*t*bf=~5PBMEDK3{*4z7LI19K0)oGJo;5w8rW$!bOvlU8$G}=9^fSC z*jv6azknHHyaQ<%V{ATjEu<=3k3UURh_chR(MYJnBR$QXtpQRxUo?z~v>T%<M^N008cBsn*6s{v2GF6NVk1@R&n9|Ll zD=-118mWh>X?C_A0(6!$k5oUfEdqgaWD`gmQKxi!F;1tVE`7NX96SZdt~8az+o7)D zIvkrdxb~&PFqf=axwNk31}HZTxv&H0>PNDz3XvkpD}eXT%4F|&qc{e@lms030c zI|Wm%Ze%3I9}jTbgKs(nBw`Bdq1Q$WS~@do5X8g6lCkMj5{hqPw1xxk{&>Ch9X>Mr zv6i1TPM8^3UfyL2?tVo_9cIB9J1oa|z=zezXOS$X%>9O8Zl+ z&U89tpzjSLb$p>M68kn=+^8zeDD8(aBv+KolstUs{^Y!C&$jR5#1?Ee0@EZGJ8O>u z>c9JELp#$(Ia5w7TA*f8n|M%?HqN(!WK7dw?nDX)wag}JzAza%HIMqa9TU^X4xMsA zJP7(6Z4d4vwp{DtpSd4j$&5@o0C`SFPLrHG_m}?aaj3CbW%Anuj2GV#zykoj zJM@O`!f)%Nq_=M0KDnWHm-4X!ZoWO{%8SyYqmZM*5zNKf0s8=zF#00^J^^@9;UuGp=Yy_?NGqL728;s} zQ@@4K^42q9qw53R>fSuJ2j>9J5jzODFPujhQ#kAzI%QUkO%T29Lz_OO;3(R;AI2Z3 z(k$m2brc=*`N+NIJZ|KanXdDY!L8dZvY32!YgEk&&zofKiN3wwCo4gKKH+Wg@4tWg z*M9nMp8nbY{(pS^NB_#}r~2u>)0?+nI=OjWulD)_ zCp)463~M zG3FB!I^p}I!)So75RwPA=q8-V%{M9#%yN!++8Mfd*c*(K<&0snueH5lbk2vWdEkHy zoc`9})kI21MqjEu0tK*yiTY?6m>7)a0B273>UJKdtsPVuLS(XiAP9+n`mBu3}T( zI!tND_=j~csiG+$pb46{+0^d&0k8^Md#E|-Mw>K90IwfV1U=RSU+gPxuR}V362FdN z1p#j#qoG2wCyyr5*d(HgtW2s^;nB+Z)O27}Htd^5^aopE%v;GV^;=57vS_LOBoAyE~3c^7p#=@*r>tcdEj+cdXe!8y5CvFO_gjpZy?XB!r{q- zJ>rTkJ_{%D7{7XDlHh$V;3h#A_RHZjlw)Vw)`CjXxE}MaB7azTrjN*<6g5 zs*Sv9uAHA8axvIPEiRzqXkn&XJ0xebk)Z z@TON&)Yu-=#OZjXvOgcc(;~wqpQ`x5gMw*K^E#?xB2bQT#YogX4!w*j7uZY9uWC3q zH8=5n^Y+b?+c)%gOYauY1A*%|Z#V#0h}a*K#u@_633BZ70dPk=vG{kRXdGnlALBR>E57 zFB-e8<>Em{{Zl>ZV1O@1MT@lmGkapZ>l-^ZH-?KmOXOerDzL z*6q8x=hx@-j7@N1%yyi-JUO*sId~SZoRAVHCk2f~EvR0U5eNnDv0mAKq%Y-rPj9_? z`0$}W!_OD;`P=oiAZOl(BNz7atrLQCrPzJZ>2MMg@|--g@G}WYBcCX!I2Y_*kBS? zt|EY|iw4Ny<~VWH_S+Lqqxbuad-Z6VM`<_fma8CVp(%uw5YvtF<(TeKeAzB0d*#(l#YJwrjdJYs`>ysS;{bec=*e zK&!sZ_nrqGfcB*ho3Gm_oTS7aDETOBuJBY6QC$+k;V~JJ8Es0;RG}W5Vv;;*YTg1t zt`f7-jbNiYe;X_7?Xc{7Ji5t6vHPKZ`IkSK(Em!9_iob5~p#>dhJ#{pZVRnblkd5RFr!y(1IPx=iI2 za$)EpK9=yQ+AYFkeQT{jjNgt!j?6JSTW#^eOzR-C=F(>5(Sky6!YdZG z#|ShDor?ckml`-l;6n#{tQ*w4y^n6p_0d;u@bkh&qJxF;&=y{E*7@Jvl0;O#7J{-$ z$4QeOS0tJX;t^4JqHBGy$)oFvX{6c=NW0K4vFd*;l6m|%-f_(cUOFW$#~0rEIwCKa zr0ZA_6`Y*U6SJ+=fOi%!w1^=)`>>e);j1x)1IBfX;$j`(xS;gf<0RS->xAMXPkc;I z#{?g}7{?IDl3szjp^ppjFyM~fk$U46A0^OtP!W!Oi$gYi?*L)+fzzStjRp#vmfVm- z_8u3>Xd0;REYQzZb0f|*C^2x2syDx$eZjB&@Y&b?_TTo}mwwT&Khswl=nDgN?aRj+ zJgy5jYaE0kXn**kw3}nC$hKR?W#wr5-fz)c)}t7Nl%!!F&^ErK1TjA_Y;o;l+R?8> zYkg;QspduY7wJU)fz*fKL&>EAF2`Uw(o#D87X_tvz9@mRU;*mj-KJ@Vgfz)Qp3`Z@ zc&`iMlH2Za@1JMp;N(&GEH10Tc_dRlYpdP19!w*9zr~DXS=^YOjC<^hx0`t~97^^& zBQApVK-(}QId43hZA;KC_A~kFuNE&BM!pp9sy=rmf#y>d|A)HK|Ir_R{q#@%sqcIJ zV}Jc`o@$bv-nn&GpVQK0^Mr$m#fOqD(~xQ|8pBYS1k%wh;vt-@y-nM zDo4}hKw;6GEG>r&1qF0WDY-)iMupP(NXy$+S#3YciaGm%PtDWf8_ocAkfzU!$}7bX zr~oO~=0v8p&E^K_lDV?A1W+F*>#5Qv*#HN2Q1-&+1!(7S+OVTMrBv|F<-nA^c*5G_ zJgISEYXOX@Hg$5r1qK&A0TI(DUdEgh6@Ki$_Kv}l)K+gRc3Kre!LDQ2^Ck0oak3%A z^WulT+c2_lWL9U5NPfAf>d5^OCZ*?Ded%5Mg_dhDpz#7ZX5pS;w3abibZe3d4EN~I zBsi#7v|`5Lb{Sk{kSdMp<>{ zxcCX1amad)Ppx|%L@OMVDMaI;q#+ft5>p-u6DN4_h?AUg^Oe=n?CF|45s%8T!7WF2 zfe&EzWr;Z=W(_3M-1G}1HNJ8VBf<1Dxv_HLB4%Q9hFdO*+$^R~ICa!aXvLW^q>l_H zQSA%fvDlW4)Jg{$ZrW+4k7_z4P?U~pN;_>2ZHQK~1ALi{T>yI))X12xD&DE6MoDE z(X$}xh4`wQR$`wbB8A3gLp^v6Uq)+d5Q&dl@) z2r|Oe9~!Vjj*h}Yt3};qchd9>Hzg#&W_1sot>3O@Cnf7X_)HVOcG_}m3TkTC@zhcT z_?zv=9j)8ML#T=cRg>1a96R7a1LQ%g|ltruMI0s`mS{N0=2>+3<_(D z`{af;)@#$psGXv`L>Yk*&~f~hj%f1=aAIg}`R^uF)JK^|eEZ=Z8ke1K-}G64VP~c0 zmEvqYe)Hf!GUDfwZaA`Er7kR~N386*&(~^W8?u+cM5hockJhZXqdTd1w152YUHyWr5)X&^8?9&U`H_~WaJHJPdVngF+m*P zZZMn1ia%E|Cip-P=%@@;#+5@VSKT7^vad%`bPhk#Hcv{4K=@NBX2BtoLISFk|usDQ*zQ5nE1;pIYQXi z`+n%~?gM>(>fQHr^PgAxalt~%@5MgjZBsf)hgWjF&5_>)b_j%_Vo&s=T=vr8i&=M) zg*f@J0ob;)pf{3=W8ByQQZcr;+cLQX3pGZVN~&r@$%E~U>Cvz#aSS$AL(NKp+= z6ynkUlBMS6*nmae`=vQB`^v&o{UBH7S=SSZ@=780?c)g7=z}nw48wc&m5pWiX*Trq zQCYPA(eucS48ASq-pYeb^ZN(UH`$=oNjWx22Z@k#T8|ga-i{Z5Denk?F z0!q}Wwg;s@mJN>b*yt<1CVv+c#V#U`O3i;i8J;RJ&j4_Ic9zv9Mv< zSG$QEXQ|7FMXGlbn`B{1sHLoLlMdS(_L^>5cVm#o7(tBwv%F< z+@MZpR8d1l_AmULZ_TK^{c!<2<1ec0LJ^k^09$e!MbH1-z{SK_w9_Elo5PaXEY%>F z5^{d)@$^*?a@?TQU-zr1i>5%daKK;4khpHKj1c>#UG;e#7GjSFVo#s@n6^TR$u)4%Z`gTTe(^R)x50A+*K5ZMY@i|7FbAb<3wWyrTB zn&f_qBDm60Z8H+~E$g zZ+M7hdg(@-NI>2=u=)ntq1YeSGro@M2S##;8LKXZaAoH4i33JRy&*RC($D!IY|KzD zjTUN8hX!boOSqZ`+?NwB8h0+)_ zlyd8u^Nwv{4H)Q(3d3n+2w(O`-cW>BZ8+R7GS6{>fI8m+1xj;;2jZ+bsjn}>G+5NHO)_kKi9gFSkBzzORR}Sco5DhJN z&+Rl(AoV^QgGakHTj@}L3Mw!-5A z4rIn+zehHGEF4j}FCQpGeC`ac@KYQV&zYp>5M{)ta#N8V32=J7P+73_<)D|7W5fQZ{B!G4^dfcauUhZQkHwc_g-=H zAOJ6daUntm9X^Yu>ssKh>xBF8nP2ID`@w^gciw*6@%fcG9wLbATECUu_b*xy@$HjM zGvdo5#ZEdcp6X+IC!K1@R}jLZA9v%=@XpNnFa+`Qs)*La3F?Fv6#ASds-CqpLXvQ$dta%fJ5ITt# ze2EJWm4{Sq7QXfsJx0uz^fpWzKH#N|@1dQcbj?_K#^CMh`i7T2uUSmD&I$rumD71+coL{L;QzCiim=VIqrU3q2 zw~52*nW8qZ+z`~<_JJcIyn>oHj_6cMwVfsEs~n?5R$z9=WKp{xQV&E`9N!>DNU`Ho zmu+ho(U=4MfTY9hPyKjZ+B{Z?RhvUps@9e{1rrvq5L_skExe6ic% z`$jzeC)z))rE&5r#;idVa~@!5RM3fUgytJNU94&W_L}K7*QAU;E08z@){mpAR+)eU zy#AR-Z7yO(AUX4^`d8r#27wCkBv!Z7h#z=h(jUPw@!*k!`Pc8j=m!Du3OY8##qCu% zLz70;rSi9}gW@9I^WSI#=tq2OM^zi=h+HT}i=cNUetRk~j`Ic&+t|o-&a*aM-M~kY zEaJsM%LhjBK-hWF9R&}$$&3BKVRKbHE=hN8>?@wmkDY1*UVr&nHtaN`)M@4m{qchl z2D0otpCnJLh~bUaV`@I~Cb`szN*Y^;+WVCg-7y)jSL#o*wWF&DJmC=|wlKpkoZisU4J2z|Ve z&-e*EfR2M)+7xG$%CjtJ`2WlWQhT%3O1HsDj*7n+7bd$F+phyDoXw)mngYH@Hnd?t zjGP@t9ZS!pa5$e*rKK&ts&vZHftZ@A*=YI(H8IT@+wfOBh*$#zwzVDPU8xR4T3#%o zXttP>8+Zz93?s<5^!ukG^^pVCTD=@4K4~?1_}+lqcki6MbXN}p^ea_-cK~?Co-ZM! z_*bPkZe^M8LvRrB<%3!Ngnh=brgsnI0hg{;^+MOv$B)iF|HGem_K}Z#-D|($wO@Cp z?{hh0-d@!;Gz56ynp<0QWcV^~I=w`k>)yf>lx-8ol){q|jb~tsUVIPPq`rVBz&$*% z>?k~8+-p&Xe8p`zdUDBg%NLPl*~~aE748K+IZrkGPgfIK%EpXfC*s1|uxr%X$(CvF z2LSG%0A7G390&gb>}nJDKJsm=v15NkeMIyD`?zP=w}P0$(4gp6c7S5?Zo(3~de1RZ<7Ms8S=Ku4`fBD^i;*B5t!5=<-^yGbit3Pjvdin&t z9P*S?JI)2zu@H?{89e8*u(Hmg_dJyyHy2z}zW3-o-SF!({rZxWCy%v!^@&ff^i#a9 zij#L(QCO(Gz_Ae8aWClT3U4Gz6+JjeVS!V@j96>$lSM&;t5ZE4!hvVH}oLpcA*ZpRqJ%bx@8(ZvLVi91dAJk@#X#fmtLRmadNq z0yQ9_sP0z_(#jT9;faef_(o;Qf=FIly~Y*}Vrnh>B98IVZ7g=UiYxIoPh&h{!^uiFU8;+E+<6qDw0v-*k@^}9MrL~aa|4b^h7@ZbRc8o99%{%W9fuc z_*-*s){-i^>9?-B!rIE(sdZF~r{nDIOOf+C{^W&zc)jJ-C&qcXF&2mQvSkhC=J}Z} zWVvy6)byEvm`AD$?l$~+K#T-oId25HVD3olHHGs*kV1sh+ad&m>9}E+EoT#K_#2rM zp|MS7&X7P6ET<#YXlNeiyDxax8UP8^QTNVV5J+C<5Zf0F0v>*-XOwe^)cP!*P z4*(Jmq4#miI|CTDXO2wSrCw_Jw6fax67Q^t7zksB=cWHhIeW^AmC z)5ge(!)o9PK0eU~!#*BTYmLVvjRjE`YCspOaj^I#fQ}gDX%gF6BGgv@=iC`iFmyp; zTjqKB2~{1tg<^GIvLVurk6E7xyU+25Jva2|HC}qhoMY1Qhfl2eSiqfIcTVozyL)oy z&TTzlXUgRv>*yDA(3Y87S+9MhNzSik$wr2n3Gv6TWNFMFKh%p~PamCq$(MZ5+3)?` zzw5Qn{nekPpAO_ffaZ-jecXwcnZdcheNM-nuBf>J7Y@jE6-Ex+CI8%Tdh8-w~B@3T!k>5X)nJ%0kM+u)+sGX);`mT>A|~? zPrv7T|IF$4ec%7^##{H_e&x=cmwjU81j<51VQ$$|h2$rtQeDw|n4U<-8VGOR?!*aD zA7#|S%1`sX^UmA;LX<}j_4a+OWPY0y_=8Rj{`=yFi?j00x5FCm z$h7GOxvHkD94|2+Epb?!g<8P);=5?Vo&1Fd(0bZLy4qu;c0w^WV+clnKG~oz9AZi} z(_o8Ykofq;WFvKBG2AF8Q)fJPX_y@Wk2FN`fPj+0Ky zVLm2RYD>Qn$TsiPs765EdOlI3Gn#Wp)$QT0muYfiUqSK&VDu1!TVq@ zl%TfKhF4I+u-GGLO!4y8UoKMC!fb=q`LTf-?ndUNU3zkGK*pzE(f6?n5Kb6%?CD=F zOvAZZgGXqPR175>5&2kW{8fN?w*ys^e2m-|-WCd`=Q84ukt4UNNrV1v^A>5@w4a!H zn>e+tF(sAGowQtpOUOJ0YZ%K~_DzBf) zao;$2pt&H#p4b3sZ`LC4%~|%3szb@K?Z7IdCx zl{aG?m{9D!5j+2hz3>(cB8@KrsIY533)q-P`@*z5^wn1h{h+#ToH>TpFuaZv12{Ux zapCc8^7Or(&38mh9ved-duP%PBxpwjhQ5ob*|?(ps;nk+M{`mGCR*_-rjc({($jVn z<%jq)e{)mdZWx2B@Q_bO*>h8EaBy+Xea3ZO^MEY>geqtU=Ne2SbYj>QTx7i}We6s! z+Z_vh{sU4{?RTA8Fj5~*Llfii_hN?y`$8G8IXf94UM zd=3BR)5bgzXYCZGN}@}{wnIVIDLoE&cGGk?8ppM6_)7~ycExG~i;i!k2U6WrExl{M z8tLK{qp$Ozkyigb?RBlCmkLV;lVVZ_9ZN_s5C+*Sc>vTB@@Y$NO|F_*YTa$wV6dsI zcqP2cQnhH`j*~`fzvR<>!eB2eiBz6)?gzKf5}03jc=gA%Er(yOLkq7KbBMV?d8Sw8 z=`F9|^QD1z^{#-sFWo!2rH>0>i#2q7jD+Lhnrt~n^^sa)_U`+*&IZ}{TK}4Ut zJECt~?+Z_JR7YizHdWg#F58k3APd<8TtQ8+%9`vK*M8IeeQ2%hee0L@Qf;mG$K=Ok z8>4Dm76<%_pM?92pvj1(76Z-29w${e(V_6n)dUTF-F}r`yV6tJl#WJwALmwn8d|zWD^=m1(bwz26)o`<~kso3-o@pkwiDWnLO3>I1ZH;YG?q#qTwr zoc{2Syngx}-}T+E|DS*B@1EYdb9#E?hJMn7l}!`Kiy-zokuaakr@+T62dXoZeECF0 z7#2G4l+NAuJ>Pg41%0j8}_%zhFM zm&mGQLC&m1$^~5(cQp{$_sowMd#g}Rxf(9HutLtCFg-_sS3%|4@$S2t{MxMsuz~zud^uV450i==kd`V zT|r#I9i`;%PuCHaT?SCN!Y4}U8@r7E;A`$dPmGIj1S%Sd9h-^0vG1fPPTI0v+Ru3# z6QW$uR7Fy|1C<5R+q>-P5>t(KhdtUbD>!sMzO2ZFdQy>`b0LheU&-is%K<2PE;;b3 ze>tGq4FH$C)mUEmuRo5h5g0v;VNIvuTvTHVSxZ~-WR;V8Q7sx-%c#7i+1!s^HN%!dx*lxrmbwcAF33$4KR4CbpgHe zh5-#5loez({?NIK2sUkOLc>b+pPLE&^Q*$>bs!;Oedul_tYIV$53ci=hxWk+hZ`~4 zUJ{Rek5%}|rvq}Vgc5%xbUr$6sUoHVo>DvOXg9`uH29+c|xdB9ObMOWOkFj@l%mi~{vRhZxiDOAl=zO{2HF*~4L$bSn=;kZ?+ zb(#kQ<}D+lz#wrCVfnVobu|2ewht`C%?&9xipf`Q8FRHJpl6ftc2V5aDG{b_R#gk) zrkyFS8uuQ48%T$F!^xkowV;*ISOXf-`*scsJ+3^vHTi;uC<F3DEliisE(L*y_Ov2LnNZ~8s2{3G@Jki9+1tL#M8HjZ-=v<;*e7inhasrpWcvPQfx^nUle)jB@|Lni`&NqJG2Y%@E+SOa9H}2?j{`xr+7Xf|p zt%b%R>y_&(dT%~&3*|HSnJAoCSTMQJk{aHcP#`LZ8HzL=gO#gMwSK3>`7r$r6H% z;*DyBK4L-SQUL`*L$$&;rRQjg35MCEQ>qFZ9Z!;ZZnBri{+wuo)XscNeo8X^QzVT zG0C1!?Jguy))`;og=v|uim%J`7fF0}wj{%ScJWGs!uqd&KHh0_-zdLav-#a6{fb86 zGnVn@o)H7wHBY)r%u6faq*$-MRG`g}pgNe2FecVf6&PRm_BvZFql&LAw3{5H hD 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%0DUQW+hV03ff$mc?UAu7q7pUwXY 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 AM>BqC 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 z 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 *<-alcj)_;z?*8^eG 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

uHw?Ov`2p&VjcK(WdDi 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 XP8#i_6 zP57?kPzvHe-f6@MA)KviBz2STt}F4)38zO}-S(Iy8_dx^)>~8JQ%Bz~T@d3m_0jo* zt@@=sqjd{HR3<>ZECD>UgPA(;yIkw%MQwxrYzsg@1>Kc=orsRk&7_svSSH?DK5b|Qtjh%o4snF}IxO#f@e}0j@ zxj}^M7>5I{dV1ubYJiIuLoUfy%+w?@5JvjzURgbJAYhEzeepdqdO@zz@SwsU;xcv& zxPJ2Of>o{W0>tAB1wN5s`jemjMxg}`q9P>jA_e9Q{zSyO9Moy2vi1cp_--R7hvY0yQm+MsX?0Q&# ze0(%-WTyz3`7|#;=UU|^8$G^hyN`F?hez^w2kwF1=h@v~ZU&PG2duZ_Wbi))MY)dN8=@SOlu`S{?YDS$qTI)Ep7co7IB`(=f&DS&-53uvB$@} zX59z`{XE~l*kj{cnV!?i%wg9%^E1)OAsh^Qz1TVJJTSDD?{Ahgc+9(p;eiGh?nMxk zQ6kRsb(4+;G!JmW&wZ^v(bD9rnB%i%Pb0CejaqY0x!11NJ0UX3UMa##NV;IT))MKg z-6Llb*sXByr-F{s7yI$t*nR$im;EE9`6D_L*R^8j7;<87{WOsnstIfYhc3BnLIGvU z-=@y~G4}ZKCIH_6xL@;UzG-`&X7Dx7DL!vgiL8gV#$%Pq)z<*t!{xk59zXlp-+uV% zPxC?UaD#$Z?%3^#6M;Q~4|UyYV;XdNBHV`WtLEDNkEB0G`V#m#Sh@Y{=<^xz`s}nv zIikazRvK|RcrmCUmRFBazjU&2Sh`QGFPhI*^s~OWeaUcVwfP=oOe?dEY#09F>#utu z`@s)>_~9Ra`;XbBoS^aXMS2(9d9%sWJW-LeY5W#}8@Xc;!ouGZRTr_IXEDwf24Lz# zT0I9$v`2zw4?kx5vFSHD;w-a6fU82ZMgl%ta65a9F4E-d!jl_O4kOmZ-gb04)$yz?c zZe8u+orbUe9D0+wx$z|HTy|0ii%+u56UD(6D85+-OgcpvZ1@Ep*M_L;S?(R6>%3gCi2_F~*7A5gY$I;Rny+lXbzbf$O)IEO z4$&dl2uGg1BAN0NcqwqBKJIs%p&cGe5t)3(a({BAvtJ3`6qSFHVH5lChCLk^vD(3{JF?ka|1b*CqOnN&?}yAtt>(wiBA z=i0%wtiO9`HeS$#^4v~dNP=zb4Pd?_${G4a_y$LgINO<9q>lJSZ1aRhtJL5e1YY-hn;y)H- zFpW()%>4B^P!!mC)NMG(X}!Bfoj^f*>^ey#3tYR;#hVBD71LO^63%_%dZIjG_&#!4 zzTJ0{hRQcl1P06x4{E`qsu1~8_Q}OOqjCR@PJ(E5Xx=;6-0VY4O9105Z#D3TwcMB* zy?Rg9RfW4aLCTdj-?f$x+g>i}xOv17E>ay$29c`>05u)%?)J&4W=6)!S} zz5GSb(MXknIlOsmm~#c=zASED)9Z=LANt{9shr*4s+E+}2UE7nO{ze`^6H{;U$qVz-iClb;b1oic zv6*l&87jLB;FqoHvp}*rmb%imT6X+M!=t%q9g8V;*iQAGgT=t)2YWl+EMSifAGQQ5*RCPZ*G^M*vf z*T`bvi?jnq#BjWXOB>~?3UEl3Z0lou26?Ef8JVdr#rDT}72zK5ag1Sk&I=zf)U8)7 zj^>R=u-uQ^6r@{_+&gB=e4%lBC~ zp7Yj^w5dV;>6fV%MyuHn|B+tbKTC2WT2 z%)Ap7pc}rixa9oP@BSeUeK(F9A^!3IK-_~pm(%JxyY)%~6{NzcE3qipYKn0D~;|wB4%N0aNfO*UnWvi~2@r+QH8N&%9 zZhavQpBfZx42SdNuB9_AzEHDb1hUc_%Plx-ynlexj?M8frS&2sIj#N}b&Bi>);xOIKL7h7EJ__g&iuN5veo zp3X}!zF3-#b1@(M8;A=aFN(!YT^coZ(>%=KmQ?*nqYDOw%0!nF{;t7GjT}TTZMnG; zsL1|rdfo56c*hibXR>d;tY6)9vS?u6TawC;HF>(3D_D)SJ7gSS@^ssp=;{i`XGb3UOm&hD!COsuU> zS)z;p%A5|Sx*3{EYebw$jh=yXf;Aj0cdkq5`+_vOj7y)rcL;F=Gy8V+CZPeM@W^V2 zFy(Rx7ZMM|1SB!8yW3*2WJ03fnuE{77dzC}0ZzNdU^zdkqmElEF~J=dX+b(+_4iPQ z9^nd)gLtPuR_Br15RJLcX$IgK+B4a23dC?HWELVIiW4Ql-WX*kD%pD7G(I;inVa7r z!zVMFx-iE+hv78W+xYBkg@t_J=8rW`b{tnqo8G z!I0m$nQ9Lw^1i_i+Bvy~#~h(GZ#@k@Q;r8t+U*!j!%&Z>MmeUYTuj*)1!b)AN^!(K z53+959u6i|rk>x$_W~Dr>n|h@t{2?((H*WG&bNEqo=c`qIsl65cAu>#2w6+Lz}85z9SQ^}2?ayYWbi3vXH=a%zLMnXZC!+ArC@kBxD z^-zIf8rPn-MuK=X(>uw*ZQ*0u>IJq(01}Ssrzib3-UnAL& z}|ND>R&xGcG@=0QU;<+^cBKd>6b(?z?;J0p_2~oCv zs#!~VeIMh9;FGTXs|CYoD3FcHR(_>gJ0SA^0^f;J{O6c(_J0Aeh?_uqpQxR^nf&>K zzBs-?-^V9+rnb`?A8gtW=<>buY#^%nT@AlHtf|mfqJByPCR=9TkqVBD^6fW&{P4Tq z{q7IBn+br6LyqoF0-_tP>HIXt7xMUbZoNVDy{VZRPxkKA?87)Fj&B%12_GkfEekuM zc22r9rcl3LPzy3)?M2Md`5v!uMbk^yk@=1mmPY1C%?S+_rhx10nKkbdOx*$YfB z2s7t!Z_V*~8_cwZK>NncTIf(0Imt84Zs)_m{mR9OU?3*N^ryBedtxJE=x)NNPJ8Ci z6T8~XgZVS4B0bi-mok`ux3;~(kAst#ndp{-{(9v=-kb+{@nG?1yyn>YHN7Y{{?HxB zBXDQQ1sHxL89`>v69wc9= zlB4x_*lY2)ht4G*t>84rM;TqpgWNKgnjj_w? z`7kfUrQ|h;V}m7y@@3RGH?1>{s_lu5M(*hJ^*n9tXUuioe8|_;O<32z&bj_F&+Z9d z$QUc2XZ_I4*qVeK_nke1W&@7-bRYG`FA9`)9JVzkBe>e?XMW7jT$(RmYormA>%qqM zO%SkStw2KP_{aGbqpCb_jJ|IehbQBG__t^BTvD!yM%b%>HmyFl@ADDQO+4T$suk#S zR=#eT*Xbe?14tjtq+=8-_s#PGg^aE9Rj%!FJC}(e3D*sLAG%%m*~D(Wm>IG@KDWke z%<8(vWS)jUafZ`@g=h@0w=C!w(~tf1ql)_ASD@cV#FeXB9@NdkK$**GQt;54Ay!$#qVL` zfI&C>@g)_>BNR2*bax$eisHsubS(iNx4||{_0I31$9C2o$6;e0Y5OJuqdga^VxWe$O7AVm>;S(s&tHlnXwoSd6)z+315fl6{9)abFI=jw3(OCaqs=u_@kS9SIZJ)EYTGV#mftR^qPtj8;`#E z(7e3v!y!`<$}2X)@PLC8(g6^($)rbK$LWP~V88Hh&ja4*rG{w-y1w9_E#vUcjvK>b z-h7O|x-fzlnO{4tB zf69lr!eUJCR*>F7N8y|uh?(a5_$`Br zywVE<|1k~Yn4kPF9&dxWaD}5Z%!v)ndqjNY@hd)$j}E>(x;tWt?%QvF|GVG*)4zZC z>g)fOHwS*k4GkoGy3w1u40$m`MCz24*xzw%DIOU|ab^B#`|cTm%}E{jjzRRv zM2&N=YyHvkLX;%!X351lk;Xze6$~mGCE<6A`NdB4s__n^S2Qm7?3;&FqJYxNI z8IID=yt|!=5U;82jM_C=R}DGd)YqgkFF~x+%9xOg^^E{{1(G8|tm#^w%?~elBrKfc ziGv^WLN_3x8EcB|=v&R2!I!gUa$iOD5FB6XhD+)!ZN@x@^h{a&lP|J4tqm_)c#L!7 zOBjoMso}{IsBWnXG8lcQZjsTo)oXF+nmZMz1|gahI_|LkT@}pWtot$5;$tflVvB`m^vjs*h{L`5RZHsOVb>J zu+C3ied{%;gEF?)E753V)Murxu7u&ed%1Rw z(WN7ey=iuD%Hqn0HQA6n{H#NY%Zuqoj2vD6A~LwB%_Cpdi{JjGWIo;KjT14`wyxP% z-Y~~;&ux~7o2kYOG%jX7lb0b$llNXXKYqiWg4hH+it~mZDf&9rwuK}P|M=TFnaBPC zr|whudE{9aTXIzYhy&Sc-DVY-kJqCRSlrV}`ywJ|HqWu(oii@{ z?*Zxd1&hdZb?NY- zAu#@{1cR;-eLe6N(`5M6FM@kRkvk$nSnLSw6hrlZ5!!S;V5Ay@(s@m-Rmee?H@(Qg z?L2{ao;0|4y?3qO_=!0Y#qRnte^c~;3F36$ESfhamRMA2_iPGA85{1tE{A-z2zM(8Jn(u7iVTA1Mx(Nb_GVXyHyvw>-wKN>gJ+ zE0!EpXWU=iJsHIAy`a~t!8j-6^@rx(dv)SrATRh_-`Ith*?1_*GT~bjd8ygd4GiDh z>UFn1<-{U-{0R`n&gBZD9;0^ZJI`H^L!%kr(FTTw zcQonhg`b8Tre0XE(_vF6Mj!5Xk_fVmys{4gFVr>X*XQKU!5`LQd>$S1ZC&{=Fg5ma zE`yxD8In5u?sxz2hi||Aqt6`>@^^gt$7p}x6!;dv*N<<+nL23^%fuV>Ay)A?hB5f& ztNJtG)+APm*ZB^xf5xrw3mbxqd|lh+z5OEFzYrPlD?a%?$#bVb8f3!{3p7nj4lR1; z0o~qY+=(@ai-yxR4Abq3{1l_x!Y*hvU+h^3+Y)3R>&{8d$QRg|CtI;!L+#B`9r<*F z$A=Gp%Nu;m9^+6agYl5snAO|Bwx;T$=S zw_Rxwr^d%MKENbT@0w0bc&U4I&RM$PXU-?bo#=*z2KfcIxlnnn_IG{j3<_)Yr4?k(%L9b2G`Me-;4%Z(| zUzFA7e4>1aj{tP)!|b>AXm30b;{t-R_S5CTWvn@e-t^R6SsLb>{E%njin=qijABQ} zY88i(akMC?T^@=xiErQ{CkwfH3c&c8X0p+T4F23}*y#Kw81taE#KVFpBIAPk+<*)w zN^6{hl7~;gIx*QSmK>ci! z+KY`mY!C3buO;SipSi%B0g3>pQ+@%>#LN#IEauoePqs5j>;pndOJ)sWe_m9_!g&Xl zJhqMSr%-;OcB z-YKK~LhH%qJVcmc@#G?L)2^9Z9(8OKGAXFX)MI=%a=$g8vWWm3OlMK1-dh3*K<6CB z%^_~8SpPn(19JYc(%{TPI}Z8DJUQ<{Vdr6EKD2SV_jxE|bFQpQJQq67J9haS5GT1d zikJaA+yBnFYpNE!yzRAZlz|w!N5%HzH4Ug?h`T@L} zzZ4DdMPBJdsgQM}t$q6%@A3N|@|6pV20q2#lkGZ8QLsn3ljR-hi@Ag=?IszwRsTi( zckzA~!RGe)#LC(YojJ3A+=O9dUcB(1TOVS4%)3TE`}@DkUy=OjhyV9~{(t$dL@{2_ zaS7gQrssUf{QrmflqMS`CzszC2>-rV@g2(flJ+0)dg+fX6=OnVji*g;sWLYUP9Ew9MeTi1+v+0mYZ!+ zok85=jJ)kit7+toQEgDt<*<3i&Gc0*#h?A3}rxl~<{$fm?G(1}u zy$*D&<`T>5mr~!?1J^pQmvXW{QU{to5Y%}o+E>5yK)6xpb+faQ<0Np9Rm&OOEVwz0 zrOXq}JphdHa$7l|YA26{~8st@K}4M9=6 zZ!qUc!<#bpr~1^D7v}zLnb>FECMw-ruh@^1do$@^*IJtfohF}gsLFWIQzbsvJT1xf z@7WaZ(R+bl;^5d9|F!FP^nqB2vC+->&`E>doah6{Po-uL;uI+BSv1OWF4k)p&`%Ix z$%8{4mjLy!DCQ6&MF2D6;-7AwpP5JZ7u*o@cwL7m(x@L8WPHFCjimYrn$#VX^;?hG zIbP54WSoDgzm_`XvYY)!K!2iSeIjp|&9}dn#k~sWZUE`()=y0L8xPH@5bHD7#m>nL z>IergI>K%(BiEvOuw*l1`oVNZl>o&0f!(&XWW4J=m03vpakk_e;1FhAb}w$A^qqg> zzeit+!k-w{;6XxkhCJvtrsK{~y@mmS%fsi;N?DJw;h)E~>#f3C?`2>DKJ&cSyh$RP zaqWi_y0lZn`Q}HTzhiK20)W*&f&E5AY%qJCd#&nu+sxTlv@)Olphqp86n1!KzMW_T zrABH^zuep}7t$-$o#SxsbJ5&0Fb_FA6w`AO&&CEICv^^fw+3iyywvs&BF9!>2wbXg z!Q9;U2=wMU97{zI&O^tMrHp4cq)}cD!EN^V0K=8%4_&!83SFP0@g$pI#*PMuooB1? zP+)gGhgbgY-OE}31`nV=cq$t(;%=W|T6HjF94&8jE2i%(YTLPcpV-+Ba8UK@>osKV z6NB4rmqbYJa)V@YoB)6Gw?Fytn_vGrPoDhu z6xg>eh~aS~W#jNpQDi=WkR`j7{|3P zZrI}NT1e6>2O>Pyi$Oqk9P^W~_ULY|DBHO3s?U(#gqfGl!xaPhl?)Ks+@UCaOVT<< z(VrrDBAj|f(Kr$UqE1N!Qo`7C0Sxo7cZH}XeL%g^riK*8Y(jiB=W^VBK z2Si8T(D=jK_^yqct+6n5KOphqGf!sJS$+-x8jG^++Cthjj~{x@lf-a+@k#TX(V;U0 z!_@pQP2sN%0pPpIq=pkM3-Cvzk=UkaN)2Ig= zTLbX@mx!_TO{?K=`i_$Uym8G`Yy?EKDp0rV&TfehDqJ>nZ? z=05W$?|$--{U2S|qPn1Lt>@T{3`egaOjatu%#kF9d(SV1<;u}1fNMVHh@6LYe@K5*3KJwvH9zD)DAvt z7d05qSNuVBPa@IeH^1mnHK_U%W%6hy-Iy*tSz3s&rZ?x|J$izK7ixWw8SL29&8nd2 z%>&F4^e%Hm;s~x#nRzM&kQ($27O<_a)>C`@)40yCFa5R#ijwz@-f(Or-w5EERNbyW z@mvo*u@Nu-5NO0pHzh?XXV$0ZU#wg2_#FSToHa<4YJ_J-`Uf9}u8C3VAHMF%$#%z^ z(@6$g{4;@m3p3{(*g5CS+<5FI_}jW)cbpi*&oa&g%+=%)vzf0i(`7vv=V1QLw|j$} zja&y%@aG@N_=9IGKlK<7xf?+6=GRzeImk!13zl{6bA2KbV`822m2qm}IC9d8 zOg_7=sG>+RO=0rheB|5v&k~q->|7UU9nU#t2m(wM!C8xg)Q|LcKXoe2Vc6`fSIMm% zfzXLhY)q|b)_?)Ia;Tupy!9b`JWTmOAnY7^PXc0^>Kw-0zSdnIOkM>t$F6Cjv+pu? zZn67@bQ0J+M=(hD$3!HR6CC2^jgHEO(q=W04Ko5W-E)B0Aal?PE;iP~ok!0w2cHFF zH)Yhy>~*3{ALYmVn%9&6%paUs@CNEwU1Jm*uJEiM=WZYqqj{XUn|J2mw(rN!%qQ^H z2S*fh4gS+NA3yx!7r*%MpMI0qZ{gLHgD>zI<%jzt#{3EZ-#W0tLu;VQf9Y{tfitI< zHuNvL&kefiKWF)@?k}Ugs4JDOA6Z+TC{l!v`EM|K1JQR@{@5C&lvCa6Xr>BlrMsa@pnTKI^6s-20I}y%y}LEz5QQ6a-x0z```cY zPyhT6AO8FQ^WOsdk-KePi-aNXxSJm@(3s=BaL15;(IqBf8Fy! zbl&g_LK|#G_{JIi#yI;$Y&bN=$^|pvz9?Y^`IiLy&L#ijL4Xz~`^Zn1;bkv&zcEMm z7?Fat2AliLlN!*u#hT6iIY-5AnHsq$YT6_aYWa}qZUTRjinMPnyP|K(r z2hGe+?v6g@oQ^t}RQMzr*T~!ic&;ut1%|d6*f%N!(Z_CX@F$VoUuc^j>zkRzynb-e z@GEHcp*{p#->iez8_?t&{v{%Be~L9f{GcRZGG%Q30P{%W%}w_w7*wp2MEIl)2k+Js ztLGANG4>6UkIohM&1Z33D@)rsLhdY$L0->wAuKrc3?do7hRCt#fNh@h$b+GW_?j0% zQ|CGV*jL(fqswHtu7eZZYl@JV$ZNm7V;a`R;4s7*IXWjrt)Ql% zvxR|x?#Zb`#;?ym16_}?GjC$DpWx+r=(KrG;|&b1E#wKOp#W`-@Mph3gb#TQXRl#{ zC4eolCU@sYJ=ersiIojWG`OrG;sM2<4G=pRa{_DQMbD&$YT{^K|Lw(7yLz_Ex$0Us z$DA4YN0dBxLnGjmyNg9$jjf*|^Xd5rcegPNk=^~Y=tu}yyL4bLfJ zZ;So3BZo6S=X&G0KiP>HnMukWzWnTeMC060v1X4@72`7;*Nv2}ohbsINh zW<1^J6lc@vj>7H2YSD)eN< z9-%eM&Y_xnLXkss=MBs8vF2bij-BhAu*7#w4UA^k`R`@Y_*->eOA@_n^zp-g&i?@L zlOO*$f6)DZ=Vb`BA_n=9Ik-yfrSs`OWY0#ZGf@nUed_$gVvTuAC3Jm1;dyt=c(HG$ z4nIe*x-U7d{j-EBPx%>92p5{-%tYCiw1#NGwg{etULgndr95PKJG^6G#)(N4w|#CN z5A(ua`{s?#IXPs}yJ5WM#m0;9T__gMCxOJ~D&6H!G?j_lbD<{C?hj!8 zqaU4KBsD<=N(AVHY$YJb2;_w4l$gX+;w6uGY`1(Am_EoAFa*W;pD8G zD}1};txN5m$MQFq)|2ZFb0YrC!}Gm91l?<|#bP3u=<;wrxS~9LeLF->+r6W*s_HAF zZaG?mGK?>foe*+zx^+x`I)kBRWK!>^PnoiYf+3*^u0KO;aHYB0Bg2P(*z02OqK-p` z*BvC-+$Km_-tM62Yl2{KK%=w~lsq|lK$sliDUSW2a@_{Yi#b%rLg=Px9QRRGy5(JC zd#Lg+9S-^F{$uQm!<@ejt0uVY8NsYWZ0sBSM(6(HJjl0r`bV(JP1$;FV4vm3F)?Wj zCI|Io#(KhCJSbqEV}=7b=id^#H}GK|Q~}@S>#}V<=$#b%zi)zU1&l#>1kNw&LEQYl z9d+{SoW>{0#>Wnqjtq1+hQ4EY$os-uEN&*)y>o`ni&3*Hd$X`!@fk`3BA>?^?D0nk zgEcBsoukJjj_wWyb&Om`DVt?XfA_`p3D_!-B{kXmht@E-eM4t>K=Ii57#^_7S<3`s z=(UzLfrfg`ZIbRBXe1RA1btIF(&%{OTw2Tl&315f4e{&5f`F*CN0c^4IWEx}j(+PS zahy7LMscG4`gX0+5~qD95XEDtJhjfyu{G&{O#8eA z@J7VSWCUYwEoC=DcJi0pMLY(yMFSs+VcaO#ZVY^3_Zz5l zonJkKa>q_@?Giov!#b-&&%yx7K94V-+WQ8IcuhIr_q`9_bH@ymgK#K0sGR1;1hj7(H%7$XK)D`Gsg+OIUMYp&m+rAa-=u# z(XW90L|ElZ?>7K|0PPJZ7m?eZOWJVPer{M3ET^ZlOOKm zq;c6U5_``D>Jqzoliv_zd~#p+`1nacAmY*&jUu&)4^Ifd@x5F|Q}4ALugQJ)7Cc3j zvxBl9!vc=K79IBbcw#mQ5=|@5od#ppGChtP=Gp6Y>ye!k_*Nu?64&2hxuAfMSUrar zI#Op{fMO?yZUV>piH#MPb5V?pV&3559z=WmfpL%zJPMU#pd0pF1|2=)UYn*I!jZT2 zyQ{WF*LJpwDzLQKE0b?E-3KINIwV*_RGmErZYp2)O5)d=V}f-*t#ce!WGx`xIm68! zoQ8>cb|qGcmY8ufhv3801j)1ZAr6uouA_B)6MzZ#?h(@>{;mzYY3zZ$5$?QIM~6M} z2svv`B|N{>N1oKAG~cF+(+r)T8BRP{o72o?!c5f0bO8Ba7?US#tHW=b!LZYYFgoJy zn*q%m^KuTs^2M|kgt8pX)B{kB;~fQ!S`^F8DsKp|Z_sqwo10LK4G_d5LX0z(y!&i` zv2DXQUNb+n#2TV@97%$oT{AS32mC;CzIyW;ncAN7H%ZH|`*mxHAC?*ubM~{7R0$w+ z?%(tPXeiIS>=KiV##-^Bp`Wnm#NklntcqOUa=7*aF~mMKs2h&k#-8Czy5I@z-yz}6 z4hE$3@I9XZ#d-8=ZQtt?wyx`*&x;}=GW}+pF+*EVzWPQ%{T420c$|E&bG_3m1TUf-;i~E zpn;k3v`micL+#PN#3|AjqY*Xf2yTG(C^e*G|8sqao%xSid}QKRwJ`@b=?rUQq1!O2 zKZCV9#~q~aH5A1vnb8J^2)Wm-U9z&>`}TJ@9?PigdcxJVHCr4#t-Q0p7`-G5>UwOp zjWo4kO=RLJG0%}1y9ZsTF&xB3O*UsO@E-l@BwT%aDoSges=GDQA=b?ms*Kw+vc}M<7E)N8A+dm-00&oZm#1DqEb(X0IlmY*C}9a;nj9V zF+sTY^efW~9%sf29Til05;qd?0fBo0|{y$&o{+K^?_d_Poc=6{px!=H! z4|?CE@7`j4&#wf;^p`bANc_9eHDAz`KJPbY%IA%voycFnyhnINf91O#aecm9bx+GL zaDJjr5O_~}4;sU$K4W?HJ%9*s=5bO!wpW)E_On8qvY`739VaF2`(JaxA+5ah|0*{l z*%a(opCrU*vwic&-~Zdc{L8<8|F3@Vd%wn>4apynIBBqX#}6hqR6mMpkQ{rVnMus( z7)Rg)_9T89CP+Jyp2Wp$4kwebFQ$6tN4wtSSlvTe#TMpaR*VDD>J~zA^jKrzgu^O; z8paS=Gj>sf6|=ct3|1QELLk7CQDdvmh^BlLjaSR_*bIQVu1}L$#bPm*=;Af^5KQ&! zVsu=lxXfRM9GWTkJmU9yV;?|&%w#Lm7cGo#{HCA2__(7BPaf#%41R(|h zT&**J@*veZ7`pFjBr;HfHD2<8&h{iYz_?V;(e;{f$;S239To(hIL)^JZOqAeg<-%v z5y_pg@$BO>V{o$#%VyHuOHKcI4EVHJpO-q;SnoNf559uW5z>*Jmf2!3Z&*Y#<>&9mpA-sWq}Eo{^?8v$J+co_~` z^0{!6izWU4&)d6g>5?SJdAqv@#0Z3lvw*=t7z*Uf0E2@hg1~BsTzX&WQg0w#>2Z4X zg$Q)_ZrNw%<`MZKZjYw!SG+%<|!5zwD}<#V}lb z(V53I!P0a#r%7c^_O)y*UV3E8I z7_K=pq=5*Z0UqTPMCJyh9#|`@uPCCam~~Z$YtF-wn4@C?D6rM3y%h|Sg-d9h*2ox6 zI_w`l=U|ue+I^@2%ELsxQcPruScz5s)<@XDsxXh8BF!03TA13o$3W6!0_DB23IoR8 z+&sJJmNK|Tg2zEqkoC7-CuU=%Ca|o|1AW@g4J>hdjkpShpv-aHq&XOt5!#>>$@$KX zsE_*rInYcB9&8;p>dTnn4IB2N$Cz2}Wp1B(sW+#pg6ayGJ;9rde!$E1YE0>I#Kyfv zjR5@jAfZuYO#xhOV+|Obb>XWw9@b-9pYl-awj+6c$>pd7q6WljJp2HpVzaz6mOjbY z=b&DE2U8|<+jVe~Ejbs($pCmlYus8j7sox}cM8cpt|*`8oL=Z^tS;Nj~C{=NtwSuA=ngvHv#x0 z-^_Y*;ET^c`|79v?$5r|?jakUs z|ChjD-G9;eUq~(`h%~3Dv#jT#Lq>&& zwU~?(`4H{cuwb$Jy23aYSRc^t%hoaGCV&q&2fHBp7(OYNd9OAcXw3lM)GJudx1)wq z6@7$qtYv~v#G%P2YsH*(yci)$bB^P`x(dV5d3es{Wd==B66!NF0iU?>j-=V|5W+Gn zQ=T1ll-dkIdzy!*=K7P_(GynfEtU$5deN|P_{a(L`9(&EL0Z@1uLb)=ni z<7&SAhF4%}#iS0oUhqGSYw0{dG}qYW4RpGY)w3J{biYo-?TT*SEJ+)AykquUq=|B@ zm{M^(Fr_U>!&_hbfe|P7l8GKg5|AyN+CS32Vag&IYn(CR9<~WY5I9bTVb=Io0n@^0K#P?1dKR@H=&636>>}=^>OgIe|ELj@V-HnF2tj<8ZOY z+GlaKA$1DY>OIMf42RkgiKG#VoZOK~{@HMB;~z47rdeOCbi-G;Q8iO99%7_?*bN%3 zu;=mM;Gp1Qo9|hMUipN@@urmG`$84C=xr)H4!CBUZxa14vVVy8a-Po2R4S`Mx; zoZ{FIkU$keA2~Q9QJ8;_QhLAongwyZ5cdUcD5MA`yu*Q))G}k0yi+i7~q=s)MrQcvIur zU6=zSR^HsvJ=(7k&;1hbw%ijytNGJ;aM%5tgc$n`>g*H$Xf}ZrpBTI*V_|qrmS4zj zGEQDEzBtAK6)$Q3+h6~0KK%Gk|Kw}_9AK{*-X!?KF@%9vc%o%3CSyWIYi^%9nf5ak z+bXx0(&9B(3A7sjbyE35>4SWs9g(?<(V`w@yhwJSz~)|{-2!O zg#D!blZHuj?Y}rGPj&LCqBfB>1L))r4^KHXW9B1+-(k{bI+nk%!#9G?!rG<;t#ztAgi%?v0D4#*Q|4y9UvjT>h^COd! z)tk@{_Ln?nxDZvK4@A~AV0+=oPeaT=y-vhLq2};`L~*p1408;mIQdCFOv7BZvP;YTSl94!2=aWwf z+Xi=tlE)Ti>>d{@XOpQ%WwlQFk21>~0e34%k#>*DkQ&H1#oIZL+tc?-yLJcT^lsEa!T)g30EK)=ptiGs zW^*;?TD14d@~K>37)NK7(?Lpo8_qnOb`gZJLtZRXn>E>6MsxXO_tXq^ZC1O4XV-&= z8}jg z*E`vasHHKC0WnZrUJHX-2WuJ6a|Rl(V36Gm2@a>M2Nn+u33f0>pwaOlIUG1$D{d<2 z+|1~%7+4c@C0gLzpz3=GE_p3YqmM6A;-GI+E)7#N`5E%WnUF!^Ax z*)i8xGQ<{VpKZ?=aGu9l=@_xZKe3A)>LhTb;{-M<&qu1`_4GT23$YZ@-RF1@p$vw) zen>@T9$mrelWH(P^CrPeK%IYSq6vMn+p;Q#!|3GeiP*X}e2qXRV8*JlUwgtU?C`O_ zzx}6gKK$-)|MrL9{k`ATk8$&(s(L-AZ+rtv9CDLHEOEf+>ykGI&;xpHw+{EaVY_q| zJHGvHpOFjm@PT~{-gssvZ`8k3@ye>#yj{K)K`A{@c~apCQZWC!GcX5fvc&-ZU@fAo(E{QLib-va>A z;HjC!%r!bbVMb+2@$jtx{k zuO;3N5Ro&}bT@+It=hI^lZaLr&$v1=!GH3;LOk=R_uZH0(#?D(mE0J{%tLj4*$eUJ zvS^S_K^Ef%;Tw_`CpijK{BWjwPkCK-!_6l}aC^AA5{0AhYGclC+LnIk>5|7>XP$$R z;S|8r_s{kVqawtW^A#}42DXWJIWL4GrH0bp24c)V2-eFRxRfXALsK3oEmu*La^_RT z+3RKjVx2m}{B&z-BH3@{#%3t+p_?70Q72r>06;nxV_^)_Ny%ki$aS~T5T?rLeu89% z*6@?HVBPZRnTegw27qE4{8*CSV2lTn1i-kBK+dbH?e698Zyk+pSTnkEo=Zsj33$hC z1O>`I5X^FEl0)du3e0QG<0GL+!{oEd~!8P>$Nq|*w)f< zPOvldEU%$NxXn+_cinE7_1O7O9&_-K10pAS6S1dtgcPG%2eTJDM6Wq?{+*Y5o8V!j ze}L+D-w+dEFv<=L*hy)9lBjGXI@jgM{2m9M}vPfbVKgcF}GzJ!-aD4nyxT@`})~6Xu}O`N4Rjb;8P$|7hJ7(=jZ&AW_0<&JxFS&yK27)(Wr(FloS^ zt)s@nUCoxsY&l`WljhQ*7)~qa6pW0sM&_)e`hBdLJ$>>sGAv_bu-XyAw^0V4E?S)t zGFbn!+r{AAAfM~A;O#eRh=$8isMS3NVK^u4D|1E}7<-MX=S&`DcRzI3l-EwY#U{v6 z*q8|3F9PP%Z^eOAd1hJ5fP-3GUU;N$G6oE&*qZSl0^snww|-96ae5o~MPr98=f)b; zjOo@?>4h5)?@49T7}j0Ba6H@$K&ub%=6OgWu})=?+4782P?VQe92eZ86GqY@9}hW4 zSpU+Yw&^$@tk*qPEqq%q`y__l%vz%3ZZ#Vs1=4W18hn!%W)cZ&f24!_@$Wo%40v0i zxd?0{rhiUfk26s6mlpOK5RcQr;Q5Gmew>>9%P099{^q2=;;(qzuE!yMJDvm_6n$;J-~RnV~ntXCJ@%i=Y4O zOZ|%fuYi8xO*5N`7y97D%ht*hkV#lzvXB|TNFGHYJHEYyLA+`9Lwi=D3`1(_d;+ap zjMwP|wQm@XC*vI@2~ssVfI#@Uk=rKC#AY?@KT<_uV%{+0abZhVR z9Mbh;B5q?as}#4oh%1Ns6jryT8lPuZbbG8%nHAul=SI;wmx*okokup2!x(zm{N%)J z$pTXkG#500p6`@E0c>FR0o>=fCU4g~#yZ-Z{A6{_1z1eIpS?$#Us+>)o_9W19d=^7 zw(?P|Oe6DYY3~%mMP9RG0^NYSXI}JoCG%~Ln|0mAo0-6G1P{29M(e(w?Qd=~k)+z@ z;-Xsd2Fip7K7e}0+p{zvz`afcqjYOOBoL^b>@o%kC_Lz9BuUt79o|p@2C|$&K#$MV zt4nLOLk!ET(_YsAmPg{i(oK~;=={MC2(jxTm8tZEwKc$-Qw>IJT~++%Gnjg zhWf(D)wV;xu-Ah`j~=;iJh0qKi8zKWc7?dzi9|DJvseyffYa@LkZ~y`XD$P(H+3^z z^t}$Al{yfkmLlZY6Su{*ab<^{8Z|Yn55yRD?_~qqHKzi|D>CQN9^4SrmJBhU zSuU78u=_yTO*lLB)#Q7)m0};Px8Njk=W@^O=r=&!HM1k1h)3240{Q^WB zg}Yt_lcn$VL+W)3PtNo6{Qf4jUYPTNs-QmfDXqUnP=$Q`I#x0Co7?>D>!1GYCm(+0 zSNLl(Y3v*S{x&A4!`IimA@GIXAfP2X<>n&PGyXoCUlMcie9~Kd2W}ru*k0}RHwYt& z^rxCO<|NZA#bv$32l473zSlsn{`0O!kaE_$E1exUl7Z4|rFUfV)%GjMCB~1hzCV;2 zPrCwFwbOFZrN#9<-0EJqSAQ5G2;BaeiVsk^=!tZ6}Sl-P}~x$MKRYQDNxF z&MyNGb$X~@qV&cGCV0-N9vaWlbGy_ady&LxSmlS_x>1>H6qtwF?u-j_KgNxpao#md zR@QK;V{0<5`O{frECz1NoO+~sc>#20T*)^wP7gnZt%(g%B=EA1I?rebtTwsPS6trK zOV=H5N_9`=w@*VBkG%7V+_)t!iEgoM6ys6w5-m@=^VU4nm*;`U-4&F1$w=|B! zeqs)n@-zJ@JcGPW!~m(2Kb0b0RAu5@NN&z0)do{3s|`Xq`LWN08n?%PIDn~<&XtmN zZ%%TD!S}7LAw2o*%l%pU!z1Yoglj&tZ`h*{3PbnUloaUtod%d~m)<$VBkCwDN1?O1 z$Dj@`Mu~*fpjPG-faI*_UdPfzo;*RXy975ykbm}O);?+}nTiJ9pN?T5q~l39JgVzR z+atK#MxPV7VviPyT*mSW*s%m-svxIB=)G1BQ=$RTT^RTy0nD;f2TP@9K)Ckk4U$GO zLti%t8hNFL0}X9V8Q3WRYD#TdHMB{)1hQ1b<}4gBT*{;Q4!Kc|xCXPvTr#Pg6WWW; zWNVl?8*nAz2p0&Bn~yPy{P!sNj7V4a?GJb_&E`KCAwJmxDM#0O;EmzhNq07~a>NI~ zf=&zqPBL6k{`Ok;)Fk7sc^=P^#A%KJuQsvRDM+PktkT3PMAr=bHT1V7OqJ_B!4&H; zzhQF<0yh=)h>1}(yKAG`esaM<2l4EftLfNdve6hoX_odBJ!c}FXkgKLLL(<1ENd#bygpN& z^t^5(<^Jiuysi_T$29L5Y4oPS&;R0Q`uTr7PD;n?zP!d$?oL{KPB=Mo-g~q+L&q|B z-RS}8ptZNGyh3A>aUHkEa?AF6RgqH+ROFYpSHklBb9@iGUeg{2-*9I<%cZ9TXW_g6 zd`Es}lUk98j?D+Y9h^x2T&d}lf*@|~1Nd|l@_nb_U{^K~o0x@@LaX<2p7`(rpBMf7 zegGQt{r1~$Km6&B|MbJZ{`FtiYkvLWK#|nmIN5tFoBpAMR$Tl`EsC7nswRjU!@IHR z-Q;%mX*g1jLr`Yp?e@YZz`=}-ZbW}IO>!_5#+WRUiU8KKKf2?i2nv~_>t$O^yCTv# z4yOd1@dd_ZZ1$ctirmlw7!yClg%O_|ZMWAaP67Cdw-C6bA(%14;jvku-VbcFQypId zPL1LxbYWpV`O7V)?3S9-%R)fS$(V9BC;Cl@0Vo~QnPae?5_3&Ox?q59(T!V_ z7p!8@kMK^#ry#KRWqU1qPl^4uHBc+v3B~(6-kBzJUfx@iH?o7~ zr4Djl;Eb~T?kP+a2s4nH2)*-xSQrD3lEWi!&EG7XFvDYoJSy8gz7~BN&{3m3P5Rv9 z!KppF=ybL_wwvcuve(Lw9>KFA{GU^uCJ+&-vq}0wu-S1QYZy))5ND%VWMlR2&=;U& z@SxiKCw4pfkwZ4;OBeA{T)^7SdJ*-C?7z`nhdiz}vqcWv`tGyQ?eh=mUCL4`uuDe| zee3vMngFEt{RF!=4L;GQ0L-A|u>rj_5R6Z?s``izU-{8aO)^fLoU^Jti3L|a_4zNY z6OLm*lCL*lsMG2p8Ao*WWdfgQhTS$}i7DlD^rai=_K3_IE~-neN1WT_IrXv)^_b21 zP)gH4-pj*5d>zo(7YxVn7=?_x=HF`oePzF3Gmw*jgLhw<+L;q_4i9i}%le?xQ3#eN z?AWnAfL2I#?TDc>$J>yab7w%`Ku5xbR!c_G))0lxQ9RUjn$5d5uh-x$*L!FN=+ zLUUDia)i@yhp-%V@`ec)zi zdWLD(#!~Jg@IWVm1JqChsk{Sk{m5Pp}_9Cos3)sQa53Il20;_350?t4}X%Lk?o z1DS&IS_@msl{NF50RHg+#?it4IeSTeC-7hW>aTwF=Rf($m*0K+PhXjv6ioo1`1z3A z6Pi1&-YDq&g3C;N-h40JE$*60dCm1q0) zI~#?KrkLVjRwmFK_%ncP3|{avJ$zx|4T0~!`{u*%|IY7z_~SqP{e1g@scDm82bT>C z>pXa)l!&HVllafMQtW7J$#BkH6b-Y#xLD*8^X)pkQ^%oAX3vNx8ZHo5qfGHLd6ic% zV5o5cu!mZ?1EZy<&+w{{G5wfV4ZaPF`@ zNaD+RXhs3=dc=4Q4eGdwqqL6GTnCm8mCe`0S6soKFlpXGD-HWtbDfHxB{hZ_t+B!dAKT)~uO&d4N+^pISQ|ot{swzjVuXQ!EQ_Yg{5&&u1^wesWffvM8q zB9)LwnY|{Q3~0h9kOV{5ftZOKPYvCu709$moJXhbW!i;i$;?04-L$Dc+DLr6@oJwx zGdPxA#Ze7!M_zM$=fFJ0$-PeV+hQd~s*=Y9z7Z4OA^cPtHp}P<=)}AnGHl2RT>@PR zojZp53%JA8iGwxO*waC%ue7ssr7Jgfv}+M6|B7(mKn&(^47(3fo$npe?VFVKlP+zr zcGhWzwLW{ofYW8aYM!=XmxK2ZvYP!72C(r*Fn4^`G;VmM$=B`|qWc1X zZNXR^uZ^wbE>BsB7m(|QTmW)y#<9M^7V^Nxv_5_MTeUaE-X22iv&hWr!3K12;zT1! zLdMbfjDp61YcD1NFHG&ILU4NPq%05EVz8OUCl5ORn8uF*J~c9^i_~rRF2~-j;VZ^# z$Td9IF~-fKeCYDXWKQg~Zn(md3X_)Pv2b~%T|ezN;s5E5e}&UyBh zKT#JIoF}&7&L{fVR$ERGmN|i>QK6|Ge_22;&iyzq$alyfOsbP~*~k2406k~Y?{4G8 z{qO$nZ-4mFAO6AD-{`|zzh(d^I3MovxWtbW@XFS&0#$pi<$OZ`_Nz6eOJ&jVM@j0m z8;kCtzXlcU^#19e0hs_nHnjV9o!?bDxc&-&-1tAeH-jsT{T;_wRd=@Oax&x4?-NGh^`yjK4e^sFVb}!2%@)MoH$;B;!(aXI)1UnG zJmH*RAN586H#&YSp!G|Pj89Il6FioaCsc#Od_yE>7RmFlDb9@>GV(7$pTr-{i^Guh z0rljQh#5d{Ft_E&x<;2WQMt75CawQRJD2@9g5~1Oa6Oj*!)Uv10{h;INv%*1 zOBB;(T}4ag>g_;gZftOs?`eyFZS8ZHiqo!k~9(|?upevW&oKo%>MdJYWQH7r1ZXu*I8P{U% z4ZxT+F+eiy!gzRW#yO5o@UO|r2@`+JJg99N=GJNIyTggD_Y5(P8s`~7*OXp-SAPUy zhTG%vsYrf$~l6;(l=pP9qO{rEd zdTsHam@t=CH zTFPmWWU(-#%6DE(Up;)iDxq0kZ2l(#Z^$u*b|SU|6JLCqzM&;#U`66ZE~gD4SRC98 zl7;1gN#&OHtunfh*e!}sjB&6tw|cmrePnn~_ueY_(sgPxu^?<;@CYD#pdvu7sE#@( zE+if^wuZRPen~mx+qIko%;uZ}g)802X@|6#|kG88ojicYw7TZ#j=WE$0d3X`dg*FdvG=#DS=to>lGZmvehHikLp z|1gk0T;bzAME~}MW2vWq z8}kM5G93Kd$^1)+Zr<6FOj0|>OnkyZ5PFN~^V=f*H4%;c^%K>H&G*-T{a0Uq|2;p~ z$WL2_vPR#gT= zZokl(|IM6YBR|qK@%UV>2IZPK+U9HH1V1@QJAic8<-4H6Ma~}Gs)>5$YDIW?SCk!S zJcQ#&FwX@W?}S!AzONmwJ;s(g6o~(D6qumn2yQ2|BCFKK(z}VKVr}Mb2!~;9tC;(c z^{S71dD={b;%XRH4-+ZkL^XkAdc`1&Er2wzd6R{Ht}8$$Iz6iUz}~S;FY~-D7&S&U zq`WEVVZ9m)NDLbu)oJyjuMF#P3e}8-${ZJNs@Zv~1aqg5!Lr(CPXKi!!VK2ScOB6>glJYn%JO ze4#s=Zb!CS>?)1z|LXzP3*(x8n8CGAIwdx8B9MO!j>_HYvjklxoQnRS#TXF z+8mnlWp@FbyUfx9jXe?a?EwBl3U=mbDP`-vPpC`?*++LqjlliOa_ydM$ScsHUrS-Fa@U`PBu9} zR=a->4&U}5GbkoSjIkQ#a8p!romucv0Joye2 z`++!1>lguYjyYRe04e@;w$xWS;x2Mux{E3{L)*h?xio@3z!WCPJvQ%OK5r zE0!xt?-l7zm@5%DRE$^m7mXvui}ja;!_Y+3d6EnlRcM^S0~t44Gzj9tIZ|-p0TVl8 z=E`V)+-7WX6QWLyWLGkoRoUDj!f3V!OLTT5Qm6|Zb=I=M64(2vZgA&+Vl-}D!n)_Y z@va=Pm&4X^a3=!*^X9cg?m72rVTSjV7TwsbZffySw-N+DPSP58Y?nGr6z(b#7kMC67~OuBUR5 z)1x(~hf;%?%1k;|bR6~Rcol)|xg1v1X{{@q>-cTh_q-fdr_vw)x9EHW0KL$BlAX;P zp!dttV9NHqRM}IbXu!=Jp)qT0KOj-&8hSXrH+Urq=7sJ($I)?dQwsf?dH7*mI)1?) zpWOSUJzo>i8wLDkNal~vxB6L<|M74B`b+%SNl?YRc;b34+MBik?KxDYh?Aig)fuBSW`K+r7@cn@7muB< z)2Yc(&ihQmJ)GtcIR&LLc43EHolQFR27TwYso5vkbJLP@6EXe72!X@p#C{lCA?*z~ zxlDp8$LO$E#7Bp1N&1v+L4b*u)Fy3M?CYLfe0VhcI24rRJWuO_i#gmy+9&WKJNsx9 zkIv<~IGYr6@?o1!?CY)>b0+1Dpd7sKqpAJ`LQ`$~v3khO9bx9#wW;cI>GA@1$jOQ8 zJ8wb_7^($pCgf|ri|plEwV5nBPsud&n&I?bZOQ2kuqBeujxEVGV^&f$PxDA~#qM;= zfV-oTv*l>2jo}a6=kCXG1m=)<8Z8aY$|f4s!`uK- zI=Ixo-;K*Q)^Wo86?G9=YFq_zO)N>7t%t_&zM zW?oKg`qs`4*9lr3<2D8qc2++CA&}hQeza@6AOY~5(z@y0ZvH^JOTEb!sVTKMsgxKb1~4- z2{POkC!fdv_>Rn{pAUrnPc_skJr0WvuO`V2|N>(?zaCzq8iWCs%am~lh9Aj9F*B$BY%ClA(G>uYdPj-4w|zrE;99OLcaU&iJwI zoXRIK_?nLp{e$bmp|{^UYREsv9B~YUb%?ri%cB5oK$5?dbf{&ky>~j`kH#LAqWbo$ zkYJ8F&7O4WC}eJy2M%sY>h$b)1_+)AJo>Mru4HxAsruPlrUO}Y`KzOcco2vWlLm}O zxuy!Hc@*iN8g|+N4PQ%ojqxI0Ix$?wpLzC7ey$N8mM_}w9ABg z=5^O4e)Vs>;Fq>)QSx5&Hp)zG-056g*KvUoYC|VESKu9Y0GhvdCBY|FEDbz9g+q7A zj>DLv90inc%t@qiLeeM+UYi_f69=(4`pEMej|HmDf(Bj_^`zr=_0eJE@vZ>?XuSIm zFF%P2#Cs(0lv;jTbG&w+&z#SGnxHsX)XCp6fCqo62ZE3P-TNrvr1zpbo>bnia#cIe zH!`+TCy~NC+>a?vj%&MID$@H2pg&2fHqQ-QA5wSzd}>GJiSEgCJUS0YE){sIjvmRJ zWptiX6a1Jh?K^rZg$$s7!S7-(8HaB ziz80iUm%WFoNWWRIrFBAG!9N*7VZtmGrktp+QJ+~FkBDXIfgT0V&=TAF&zLLPM8V} zN;*$*=2^94LD$0~gR7Zh09T~PrNR}29XWxH&{W3cZX7p{8C%%Gcf~>Sci+_jRtn#_%O#|Fcjc2PEmH<(fEJ?2w@cl0+s zW~Ze|y4TLJpvV&=|iO$_lNOr6>j5<9kbl0Edv*0G?l zQvK|Ymkq}%w-xFBuIELAntil6NHHtm7;tH;O#?iv5@$tXgTROEz+59tjQs_v=x#k` z@xh3z8-nNbV83QPxOS5cL&SMHUTd_ik+}zG#72#?XMS=CHJIYs<9z8Q&T5!7HJX}w z{!#B9GEMEVaW13lF$0%Na<_fZiiS=Do>WvGjUn9!$qTZB%e?Fzy4UkvFJ~oeoWc#= zw1|_;Lw7k?FO2sN^OkM)5&pX+ic^m_ZvuuN!}wG&J#*i}jfhvPd#_7fVM`+lyd7ug z;Fz`raL$ne(V71wVs&gDG`X2;_VtoVScXRm$qAkw2bnirGrx0<&A8NdJ1ZZxlv8Ld zK-#$Xcgd|&T1h!bvWy2DW2DF67DN=4Wq_A1pkI6*5Gh&|e^jGreH|YvW*`Jzk=Wem zy8|SxkJYxccF=Or;*kMoazO`M4ip-5;IKvW2#>|$(HQ`ZgQfV9)8%jUjLT*>2BUD7 z^rReN?Bp6%1jp`;+bW$DGxJRkf3C4QYqr94gxy83Frtj+mX6+N93(ZRJf2{gv| zvST~$sDk~Q#H&5WQRZowTk_)GDx?(K1?>$1e7oMJOVrQf=adhNg5a*2KP_pxUA82_p z&!mZtB-E>8L{4b#7EfvHv?Dug-ZIzH-W;AUjI6cKRy)eXe8gj5+<|$X#O7L2w|EN~ zagRL)d{r4tI-JjNrjE*5^{_oqodpno*wR;C5{TfdftsT00oO3_M*rNNwS=t_(Rs$H z=eN@N=kwu{22Nh+=hOai<_!ViK7RYnhyVVM|M@T>*Xppuof?56?r1YmxJH ze|+@1O)vQT*X_jKI@o~$0q+LSKdTW}z#D(bm-t|79d2b)aKDb#-pEhL1GVeJEi3GA zX1h-KFX}wq$ESYW9<&@%sBoK1182efQh|5Th1r)4B`Hx|?*0wmZOr1l=bmZY*k3IB zMoKJApifqE^B@KWc6WYLq<;w@D*pVRR_E{j_CI|6nPm19e;t9{2wxZObN^Og<{iBR zH`B^z^M42oqG$=I@?Jd>iP!c(65n%?)p@EjNtwoOr;DUygQbRj!4rP~A#6M@O~X4` zbD&|a9-NbtI?7&y0E9j`D;UFJ_QXIVHM!8c9@3EmZJ=f{-xlcN7Stm+IB@i7^s%CS z(*nymjN>>2#N=PKOK>SHUg>~Iol-~F+zjx%0znJGRvJ_Dp!b_fDuQL8CLSPc3Le|h z8FS^wJ~t1#haN(;hc0ssn+&BjNQ3;h&v6^+D27+_x+$z(LXVhP+mW?^{WagXZdtcZ^on8S-2 z3Eopvf`cJb{+(#4Qn10qR!pB9!5Ru#^ohpz`Yru#%gg9_|92iiU1xmB$Bxp&8^6b# zYIe3T(eR6O&Q%0cWb8BASYU(qS^9qa;^cFfH(o=?1Y>F7d<$u2Jc z%(@;W^S7M!SUD{b;7Bs~p>w@PSM2N1dgJ5kaR}pLIm|gHXXm}7BM5sQ>pa~t`088+o)8xTGVVNzbJl05eYkhJm0pl99Zt}son)<@qmpfsn0&K#uh{n0Ve>97ud<-*VI z%jVy`MnH|3Uv81=^^e~YkiR?konG_*JnyZTA((sYeZ@5HFn)k;fWdCfNz`2}zunelLC z5snuRH%lya-cbW1xbS`gm*Mm5icd7?dVnh7OEOP_dz5@~zV-i=G7B$PFT1L~o1mLR zd12>L^q&aSFOvB7+i$=6`~UbKzx=@$pMCW~e{Mn(kDswzULWVrR7jTjruU;CD%JpHexedqt zH^;$x{ubgp#jx9`59Xv`uMz68>T`w0?cnrD;fsgaef>Ld-wG8*{AlR#cEXu5j#y%ohkF``V6A>m;jA97*UIz|+KM zjjG?Z`x*wXmBC(zxV?v@bN;5%Ndu3apNA7Adc&+4Vs$%T^1}IrBXMH#x^FBT)STod z>WWNqu^R*K4Dn&uS$DM1Bx=lvg9m{oT5?13Rkr+5x(;1u+-OqfMf|XsW-4GAy)gR7 z%THn_4nOOX#{;+l(%(};*M@D5s_q&&Pw}hYl!f!xqo;lK+MsX`q>vjJ~_gG zjB0!dex*3p@beS~>^!~?%}g67jOzTcp!zyr{gz0&uF>+ueR(=`ue89sHpma-3{Y|q zM8L&J!0&Dz8gt=}$H`&*Tps4(^&6%tJ1MILGVVlU*p@emwP&bNk0dR(_!`g20)18r z4u`t>J7w%?aZKtuBe-y}?z+zf>}km4&%Xlk*={o~<}wG<90_6>ueAE-xq|8p$uWCg zC_1MhNas3_jrqf^lmA&Jh6H5I%_{B7#0tO^h-%X%yarzN$)zbdMqg2(^r6$}81nd$ zXt1gkL+=K&1`W8{i8&ZLyHFEh9sBC*pLn4QUXBKvDB&GX&YnNn5gf8$+Iz^!L_i7{ z+@q6?>qGhFI_17}&D~~*hRmX{*N`8--q^lR5>k#n65rPWiR%}%>&?fnzSL_py%zh5 zp!yB>{`~-b&6>JucFa?Y5-NQ8F#`2{Eiy6qW`N_%?$&;WpVZY39*X+S+-iQ`zu*T- zgRIKd>(#6=^lwAF@Vx-MH8u4#JsV?*plOZ$?n%wI;Q~%5;ayzYqd#frQ=!KvLqkH> zOs`~K(!9X`--^ze?1`-f_9F8vl+CJtY`V|&f}h_W`GtN-1pjyw;M;G$(VqhRcVGYB z@BH?M&-6nl`)Qb{_$`#5X|DVZg**^K$A!eZ{WRZpA`zO{_DhfK)*dzT;9@_;!bV=U z#}f}9L18l@R+KSh?DGVZ-hA9hXmpiVVId>zzVVMgaT!~GaFI0cffa4N_&v7qvLMdT z@5Jphe^TlvAO3-#lj3qX@yV@ugbd5J$6&Obui%~<>I*m7S{F6vtG+uzH!)}8(Wnk` zu_b16<;4VsDyN@(a1f@9~|k6|Zwsgj6UhJSd$Tp=*}!Ld4T z;tV)@I5gYYEWb6P=r@Q+Xzx6UjTtq~lgQ0Eic{OzOfDQ4c;skRK4FUwXKcJtDI?sA zmpl|xu!L5wPCfkFoJj@j;#aVPzc%_=F#!_ZjlBA#QMFk)v*bfJpC7XQ!lrJ&W-uNm*69T#M%&v+sGn@~QTmlu`D5 zgJ*u38)rs|{06wF$@V?KF)<+%=_I*%pD8wqXa1I}>Q~3|)}5Ry)9bKnam!rL$txwg z^u;#zkS#xU!Ji(phGWA@%8S``nA*w~`azg{l`*PFTc;(O+ zh4RGiMByBJy4Rp<9_MR*s~MeK;b7X!VqHdF&NWQjiCvGF?|pd%@%-e_dCr*Y+kQ2@ zaE4)(PIA*g&47Lvd#uuB<-*W&uajjIeC2}BNWWJU+(R4A@fe-wglb@iuYhrfr~3wQ z!fe!{U2C+)pT4EDgM1nH=p=lWf*@RV;PrsmA;5Q~IFav0i!lO*=yzg@S5+ z{_4eRu%vOc*Z2}su?gDP^bgEosZ?mkZ~I?D@W$cBM}FL(QR(0U=tlE9PUTTT-ZZ=m zq(k2T`0$&*{aYXY{AWMmuLAIr!c+PvQa0$h5#gBW@+4E@AhUoT6EiRglZe?e1cO~? zbDJbXRA?E!H03}Z%n2@N+ZsaS;|YV?=;7I3$O$SmwUK9${r`Hf-|i}qF=flIjhSL6tzG z1HIhV86Ve2nz~?I?8Lux-7^aU;*XsHP3^^bJR>=!DixOyej$yU8@WV^cR3~*Y;*Jt zJHyB4nX`QB=3em@S0OWCWy!6PHwcQ=BlfD1ADqK)zr|I6wE*=Nv3aF-=p0=u*lE7VV zL_;{~@PFi92NDUVuFa99a9x4kMusA;3UgcJW7}(oL|Bl5z0rvx7XCw)6N3LI(ec4P z?GjfrtBU6|`FZlgMMrD^7Sit>b>IQW=CEDc@xz(C*I)Xb(0o-C)#`?Q=5>b-Wcch8 zH#N<5L{VL0|Rgyxi8E$LuEFtq_u) zJFE6d^91U?nm~df`AC{um@?qee>U16P1k??6GMAp>f#9OjX7d}o`cc3v4`t1H-pB2 zJL5eh=s!tFRmN5fvfELFS7-Q0KmpJ#m(`cXg&VxNI8md~iNf;Opml@dy=DOGfuo(> zIiL6N)oJ2cnX^8w*qeX^)-`SF%*wB;G*3QYO$&#u-5A1u)CaQvq@Vx)@sI!X!;k*x zM}DnFa{e%v4|M&Zu7FHkdLJ5mp^L;X{4pudy?!-LbtbOIRyjZC(v$)BN<`ck#8wSD#P_7F~G_~9S^)8Bv1&$(se=reydn*AofO%r^4{DjuzN`r7ZoVhO!oHLJjXv`2E0ljyI zQyP^0zrzS~zObcPyKIRxnpwxEHUy-E`QS&w?4&fi<%>@e8`*H=jQzw|;@-f!XCU#M zRC9i`LN(6M1*z9s1jZ`yT@+OsyuYy_s9UOxh-5DH8y<~FlKtobyMb4mE(4uss^wb! zB{co02KS-8L@DJhU$cD7SFo&fu3U5EglksP z_^}x$Tkc7)=96deezGH+|7t8IH`)FBI&k8fInnY{V|+60d3ydD;$y#c-u&(5#l9!2 zIrti|b+|n%$;C0x%HW3EFv;@IESU%Ea*w&EX07ma08YgN}Qrg%qAKQaSJD@qHnc;5%OV9Lc@UfcM3bTF`3eEPhD~5nm)B7Nz6W*ICUAmk#`}srSw^p6g@m7|mUn2C6yt8vbRUTmWg@jFC<~7U%AbWJAX2)m#GBK!UMAXc*}B8H)2xSSWei@bw8GAy4m^_i0GLU3?54LtLzgwl;b%5%y`ddBq#QM)llh@yT9I z9A8Vu)SH3XPmd2eIOjO@vr@I;?j{9=glY?oociANDa_S#EaBP@7c^E*V2``k7(DPi z|KPbS_b0A*S{QC=s5TYDJQ8-ellojk!{K``I0#ZqS@6*qzcCp;k9+8Wnh%`Y2y|DC z8f`!rkNA+ECZn9sh3DgE{m&_D&SUv^x`*#?`}bo2Q&Fvi&y>RP{dc;H>+z7^z4rZg z-+cJnzx~^Q6|ZsOFa3rZ==&ZoMh!pbZ`LzWOnq|RMdn3ri0LD-O#G+> zBmDYj7GClRADkFC;ot#^sa3?$hrg=Veq9$<(kF6pPqjvxfqWl}YRudu2G1z-O2YmP zk<>x2GQRo8|MJzBfA@D^{;Oa8{Hu>2^;;&H5WfV=P*sNDJkU#@dZ7a&0G(r07k#29 zH|%?j1Z)r2j@+%ok5#wkNxCVgADMOI>q~U`LN7__He%{ezh@S=%)UgtA+#GPYVh#3{y>Ub}u+=or zo#e@?xzR_fv;8?m!+vp@>_6mmI=n2xfl1u4Ls+r>l~|sL#?ab@1KqQpu9wv%g8a3S z>t(;h2NKv!al|zv3ZkV4^ei;5Jf8xIF9H|D={N^NWaU2UI5zwTGmKC!?rPH_>K*OITNIAhol4# zdz9qk1Q@mr?p6V^+Vhg7y?la;9Zdc5qcDu5B|#l?2^eHPp{XNuMvilCEgD!KWv?mY z9mgK_$JtNp%_8IWiGs#{kZclY(-HwMNw}b}Yc0V&%Z2Sef>~E=`d_+OIfH1E)wOgm z%bBM{!?K6{*nYdo-FwG%9Y#3r|-|1LagNZa?eCyC}%UbOaU=x1h6q3XbX=ea5Rxts%j%=$ak}I+x?z9JH0yEt3 z_7EvJ+txy)>>bzLWbfc)jGy5rKWp)io^IPZtmf2jCny^W$as$16i+JCtW%}eN^kCy z8D+r3buq7UY(5+7iXjAvJ%j-aFr+LKbslKNa@T>h$yyN^ZuK%f0?T}V`1+d7e zx?<`#z0|f8cAGKW#w?5}KmT4u^3y8E&}oYn20k&%r)Fi$XR#+C`SfZr#E~43IFBc} zpGxkHemKZ_#5a&n6r{K^kdkE^VrB7_Y z_53~9FqDs6bZoAYc@QI(e$R&uJ{QnnQmUN{PaI1FJBVX1=OK{IcrdRA??{u&j*#D$dHru1hhgOGL%QP`AB8?wxLUdKh=hlN~g@^A%t@#t_OOM87~d{boAH)ro};Hcq0V*gb>$5uwb0*OttVCrdLQAAX5-l477K2({kWuB$m|F`*7CXerRZ42Lk9x=>WgJG$sIT`!l)EJVs0HY_4{`c`G6CB^u$)4Q&CYJ*< z#u4}QrjqDJKgWi|;GD+B*dU$J+ZavWfI7N?2^UiKE&H54a%#!kKle2yHbIj$JXh0X z9d1a$c?@-13eu4QJmxbO-ycFSj@LdehbNu=wVSRsvF@9Nofv#NPT0v2{k5;0(9L7T z%c;3t>aKyyM;vVB(EzbSyJ;}ld)O28%xrUg?)AsLM%THoSDs^QT{3T2dwn*Fuq2?Q zSTCmMSWZeZ{T$X$^2BzI#v!#v>B}yIZT216-QzUDMwdA;aD<#AF2YIqxfJ*9K|W~) zOE(5__<9`6!gtffnsp~&(G8v+zpkN^LtV&I)JP474JM%em)Z6qdDaL*P~+^*j&T{v zS%t*M?1RU1)kU{(ey-nd+9+XPrK%aP$@;-`BY^uI{do3Y{`@b#{`Q;y;;4Kp;B!5W zeeTz@qEXM|{pY+sQ{(IZ)FHnQ09kf%^UqDTtqUr~W11-&wkPb{9)s21LaA=u3GmcD zNAG)rxh*R@?~_j?tdS_s&J&W;mg1;JI&@Mz1_0uB-+;#LrNdE2!z>TmqDu7@U%b!o zEdZ)p`}W0Lmsyci0XD}Mycl3}@ih@0_#k6vv*fEI-+%bEU;niafA{zQ;lp?OrGS27 zLnH-cQ+h+sl=7lh8f{L|xMhmqXdQXr*u?iu%R4jrppfH7ZSta#8DcHsk}uJfU<`bV z62YDl-+$sc)b=ZZbi|X+4*-X7q}VVnClk_qf|sA>Nb?E|9A_egm;spJD8-6_QlNHUd(pnh%EH3tU^?wS`jljM36#D}`n8-63)Q!@!;BrlK* zIVaDIt(4v&RiM&vq12G9lLWpD=CmvL3*yG?Oo6$rBFy_MpdPiO}jrq;Q@R&;8 z0$9Xf=zX*4F1#=d!$sxlfkFRe^c>q8DGV^W5v?|Fn94YzCy@aIkw{nc5sp%j7f=L=O1vm1myF{kP0fYVHzB_f)O~q#0+L?7aMH->u@3O6 zfPG?YoMTNux(Oes{CfeFG{oM!i18f%xNrQa{AfXk#92?QxhOHJVV9LoNA498h0U9T zVGOQ#fXMGO)eNc-3iN{O&^=G63<%EmVmlL!nx*EgxO*iQez~$fj5cP%q6KBM?NV$T zAG1_mql9=j&$ZkNt07z#mJ5L}Zm}+A^zK%9FufL!Ye7?Y8PNE!i8^L% zPA{y+6lY?sgGr+_oBZNqgGqedn4BO0GRv*V#OmA|B&;}2P{e7Y>ClkZ+2ooyT2IOz zcuSwf4#(brwSRc?$Zswo%iI(sJMQF>x>^&y(KFvitr9^x0S5k96X~+6U8$2#{p`dO zusDO_-jJDvlUg>DNyFZi=?Q<7O$1FnBX(Vuk=oF1m{h4B%F6)GaO#VN(_q|LIW8y$ z{t&DVO~fO|#ahDLTXLY=IrgMJ0c|sd^frxsXP@u?|z5A?oVv-5P|5QHaw(cJO|c@etu$<6ollh7k>@|%Fa zj9M_>4)FwrZ%Q?~@~9Rn+(49Dq_OV&?`z2WK#Jq@-fS=HORfyFnp27)cg)wK4ulT7 z_kx5{=DtG>qx2kk9VUQ}ZVLB`D*Z?O(!am_%b$Pvz2EyCeFmV{TZ-S;aK!10el`?8 zvdy*URf13i#C9%#8PHI0&ey8e zCE((Q34K$tO-~Y1z`Uxxpo1(LyJR*)$wN73DS_73UWyeT_<#Pu{x|pKin=%HMB;B1 z^I*k0zLck*5Hlh@Z57@%0-^`D@AL}*|MP$Thp+$l|Ly=9V zzFhra_yccJznjJ8)0120=fayd-yG1p&HF$^QAI-OG7Scz++xF!8%^gzM6|w1NO1Mz zY)jU4K*>P4$eV+_WO58&yy7MnIjUhz{y>J57{W3h7$|dD7slkwp7Fm(m!B4e9-YUKzF4JXwv;oQDsTc}Sn= zq)dVBjIP$~GDfL`(H;ds=4v8H+Jl-JV>(dVqfoP6XXkKfGUx7gaQa7#I4BNJ z+nbvNO<+vcV#}x6^b-uppLnBFGao!eS1Y&1nVxJ4h}sN-QK#Hb7|1ZL=~8>B7_V6a z-?d$ox&&d~K}If92pBQvtY>^+V4u@CTe7L~)$7yVX705$ZSCV@hFo8vyJ)R_pFA<#|XYgB$fjJEZ8;GsFJe^+wyd&lVic7~jh^#LU5oOiojE!~;j?VzXl>W7~P&L9zWG|FCez*Kpezt2qRc z4hTkd%_25Wz~J~9DR;-?ev<1QhEPr{p&ePuWWx1u_NUiJHfqFmi?6c)G6O$X@t%-w zl*zA*;*=B9a+@S(r;kqgl&>>z!4zn}4VIu~-Tl=~J!{*U@fcF7#?51B0%gq;p0r(F z^;kJ*-T$6*(`ZM+v2M^Bv)pxKpi|;GNMBL|_Oho#|C{Jb_8@}Xw>X13)`WjF6p1B>^G;s93=Jj@*pqvl9 z&PF-4KI*Z#zGI`bn5~xwh~uB?9ZljJ&3$R+m)8Z%KS*D8hLVpMy$)RqJ#IPI$wR^U zCF5{XKSZvNFHjAR-HN?ync7%s%s%ho&*%|SOw7r1@fdFrN|`l^8z!dU`gks9zTp9& z1FpDhfC>fPyq>{^U!G^BxN!iHxI^P_1WNAp#N)i;`Wc7#_{H@3kd@bK{Nwqe@C4E5 zKmF(b^mU#i%0qwtkLJBYAUEbsy|Z7KEw21X06)e)G<>1(ZCj4FriaFB^$D!)h^1_2O^S~gf@aC{<8^O*(83RsuZI2t5W z;5J>BKwYqizx4dZ`ImTHaf^f^c^_jgz`0;GY4$D`#}BlLJU7jcZvZg0utdT{>XhmcjKcvM$rJ?88 z+?2aNwE<@%H*WUq$>;HaE0FgbShd}M&MS9|m`pYpbyj9CSn1Q`t6Wl(iKzs$h6mX= zo>z0*9Hf<;dC7;mXu#MnwCHWT`J`jW$$MP=@Qu$DhC2GuU<6@?fsZYjOZ7064 z)rRFdKPKBG2k#jKI{M=Iwhvc4A)S2}-8-0q8tk#dQc`S#7k^&rTe4Myd zhS+>`P>@kHCak+T{RWw=>?bf#_YxwhN&^>&Tn1x8(huNea7j2r+&+`~;F%c8HGivq|H8;GKK{ zO^(IW`?lqOT{8 zan;$vSj1gQ8yL9W7R+oWy;0>o0ynO98c*jyeDoUV7}dos-R0+b*j-8+rW=rBfFC06 zYreNl2)`iry)6oVa4}!yw+}Bc^5kPkc>E*n1f zn22ku^};zOlK>kn7B!63OpP>-w)P;-3zXn;{eqcx#cBH26m|(IXYOfrRF7`_oxW71 z0|n2`g)WNOD_)$a>}Rl~k_@TQ$TG|<2H27A~Xo`LHSMeQw}%3Z$PpIjfVJ4Bc~JI65=Q43$gnwRKXQ5#4F%$TeTD8rfrA z9zTX_40a@e)*68`2T$6 z*J=930N>s=oZMU_3Fh&g6VY!J^m>BdKQ3Uef95Ha0ehX8*)#&Ywo7MZPxR}0K$cd2 zlSNrm`y26)-vEx{2VD-URD{=-GFB^lSCbNYkw}vRUk*Gj9HI~BDWFDi)yGwe(&qmR2k7QGPr$77mnSNuW_s+Mv%L~r~D_{Np!{7h! zzW$rP{`rUh^Z)w4KYaEpzoLz(O{J@s&71P@AOXLKm_G?|QeZYMO#I8cSoF;dze%fW zVUr1JFxoFM=VE|+5V=q^;Bm>WIw9u?g9MNUW0gQ>5v8*7gJbxZyQUUE*AW-+6VZ=< zLj@1EK${ai20X@D0Otok`W_mCYhzfK&Ic@zeAQfYbAI3?m`6w)DZT!E#?PB$=7C=T zs%@OLfsW`d>vt0Aw3!$$i`&S-*s5GC#b8ZjV1|n!YS+rjI8m4UhH6!7j8!sZqLKqc?^%9DVr=6x{VO$OFCchj(PUv;r7K_7fT< zod?(i_F1RqkvR#E4mZ`ve=s8|F@*~pAV$_mvHK2%>_C`*7J)?NA}m^hl8Z4M$YCFSLCxX9W62?I7y+|`RKwdt-L zjPuFfP8B8{_Bio-?JyCdlaJKXA)41TTz?*G$6LV_q81nX`Py~T0OJdUT$362xes7a za}3*&AwKu~)Kw~}oqyxvgxubu22O0E$=O2|7ch@WlKk_u68y7{!hG}vYYSGb`^a>- z(usrnhlhGG)w%c%$TpB+q8Lvg{VwLjGe3ZLSa0$`PCRVrK9|xqnKCoZ4wB)_x%&W=uOIcfDgw(Mmr_92 z)oYmz9jK|af6eyy`qYMP5%MNujp7|%gakg*YNQe$5<|+HZ0eLjm=lurxni z(zyFOTIq|gVtOxoZQjeC#pHfKt_nC8Vf2hxX65>^_bb17qdb*B9vf4?&vid?8@qR* z3gpnPr=(e^nNsl7K>>^u#Crvu;r1qrF-!h%0Bds!J{j?p;& zLIB_J&?mF{YXSfC;U_=+$%jAr(?8Z`ZD(Ek zyxe$0)EE;)jX))UNEs3mVv=L71QJj}i~;ebq(XsEWtHE02xLw+-Q12Nv$gJ@OLAHWdXX7 zx`_74)bIV?@4Wl){;T{C${%DAZo=wtU!0Mk9w5l!?g@)XTy*9zUW@^b{&Mod)b!B6b{S3}Y;d%JLx|J2*<2{h=+v#vnYqQ6Ez!fr|F5 zut+rZx5o@8VeAiQI`SnUYUu0)La06sZlVS1MQ1__nR8RvJ)Y3?bc^@y|_!h4a4KrK?H;+Z<0qiO-?7*9)%!36i?>J8H3wyKE6Jj3F*js(;&TLa2$;UR+#+ljlzu6 z0X4p|fHV5+x7{eo4TU}29ZzK{W>@*>8F%E&Z0*Cv-9pO2k+*ah{R0~S1S=c^cxalN zsJo6fx(Fy^I?akkcBTm_PT4V@wAkFa7FDhkjYaTQrct-h1UeNAi?28Zjw0R-pQ>Ke~RE=}(rY822cG_&}uKb!m=u(^#+KaWzCTivcxjGy-p) z2jJYsk!PwK*_EA!*NEB{cCa+2bF1deH=1=;=*D(99|nr_MwG7S3uXcF8gFw*y1q_l zwO8K~FDxT@?gwiD;VPCbSbI3wC?n%4S&s&ZxQvU%=?CnqQ6Y4*5Ai6SL69!_}M zUi|K1+kulkB4gOP0n$A_YW)ZV(s19cjSe*OSQ#yOhI&wz{y&P zM6+Z9AH>{XCsdWB69cTXcO=D)xaWDaTe=?CMg_`j$9|#mrW5*IkE(E&Vzsu!9GQOP zT15T1ZU%#9%i`&?UiKbok4JFPfEVI>9p~@#na?vn;qE7Pu2^`zwdYZEjF~4IJOp@? z|HSs;n=jw|&A;)zci;VqpNJcB$7?sv!Pqq|a3J%MG_j=L*9ZU#GE32=*8=WzZbHYh z{nYl$aqx*@JV$TD#UZ}gzo5U-zGx13nIH5=_@fvDT%M`(sRx8iGLj@VT_3h7uFSI% zD`4zvn;QgVByh{Ei74=gvg-O86(E6&Uetr>kJq`G+FZ&fYh5}?Gfi2<{yRft+4e;~ zi$s`YIWyi&ugWsH7elG&SuoU)h zF3yE8Sn|PR7@rdBVFI4DF6$zi9Z`Et7nZ0*+KAx-$$L1GZFERp3KhM zOJfarHk8xs*$puBMxE_mz)`k-Y#urw%%&yP(ip$Wamt{DU0CBa5y*(0W07|$7MrH) zuk@X~j*%%{x4L1>diPnX90x)Oy9sU#h7?~;W8{k$S_o((>nUx8sRL@fK1ORFvE!i& zi^emYv2~83n?IRYMxZeD@89T!BUs1TZr2~d5-Id|Pii@u)RLz3hu$)%#N&My|@l@V(;HmVviISGSxAgq_pw5 zTRky$uVK-Jt>0L044RwIehP~SuK01``GRakL5nt=me;!w8v0`^}ZL5Y#l!x76hM`Ns~PbL?>oA*!1Uo zDLp96#D^yXgKK4Y?d)V9xp@m_$BQ0>i@u%5J;XS2*XZfNRXGh}Yr#L~QltYYHV84t zZna|<`NpwRdjnBk8Xy0$3%@O8{=tR)`nFn>DZL8 z2GEsn+Zh*24*v;SpL8kdi%%1|=YeqezQFJ{hK+swFL!;xK~D8s1LM^PZpPf#ItBn} zORhaL4@mrEVFK=m*JDkWq|BS%%xts5N_V#yv=fC*k%dfxx)^mVybgl7` z{yuO($iR3IkT-T6d>qWf3tsPa4O}tnf5Y7xA#t%G+xCw7;G#o@KJ`NB-OB^~u6V6| z1K*nCBL)f|G?(u1C7^-qddMe_5zbOen+f$mf|J#LN)}Oc{9GlIFJxpl_#>(ot9Ciz z_tml}lpn)9Yk~thrrUgBeHR4F`0fWk1oZdsN9sNg2l)H{&p$g43BJjn0sQ$t`yagf zrC<6hc@o9PPUhw(3u`|O&}olq#<_BqIDWiYWQbEf%ZzXUlF#c{>A?ksUml2(ZOb;N zc6jba5Ue*!_(Zfi>&`jNRWUEBl#Bx9(4}R&7<;$8M>=CQrvvKAp#+Xu08&7$zrH9_ z?@gT0^|3XP$d?tTO?@BrxWC8d3xDL|U1fv9L;8^~m5Pc{wWOAR&s+zT#$pz_N6^Hm z-C^G&Xlbulj(_;#hjoIx(ho~Gi_2co*4ShdTqC**86){34lJ6)xod!sPuL^_T^+}! ze6mILoGXv}$f2aFovmUeM{!?61BPr%nsVV6k__HBb=afE^rwGW368uP%ydwz~LNPCXFF(isfg6bGQD-Gg?vl?h`9(cPRr{5o(qAjD=a z{gxdkW4We}Z00AX&^}XR>3u=!+L(RB8O9C0u3;FWnJJLs5Bb5KM)mH;czKY;@#QIP z&BjmEt1|~P5MOXc*FUW&!aeJRMmWq)l7fk`QV$t9LAIW+PifV5y*|gXp#`s@?cKms2IRb%Vme>lqeVvR*hS!yBkxk=Yvv6q!&HhWspT% zxgu}2#;a9rJA!GCS{Y>P*qXUro6E{MG4{qg&|`|UBP-n%*>Fful!Hl=kCrN-Lf>u; z)Lgq&ZPK>C)4DlTzf_DfKq?BD3V8I{m6aQWOi2;F7S(_k2bA?=XK>DM1ms-U2Jwj2 zM3E%P4)yR>9^Yr&Q4UY%w!ZHsH4Xv44~wUyYlq`;dEE7&3T_pRuIm&oejT6WaS(wU z{eoE)D@MjSsq13M=wHp+4Gx92H$B4@PfaIS_?(Z_Dv62qZfj5fR-9Y;CJSR$NR5w4 zyErl?{oc6RXMJ47vCEkjb#51=$qwAM)xis9bW22J#Z`}-{zJjepW3TWZqB`D60~}G z8MEt#Mwr-A%)+!^@lsIq_cha4FnWrLW8^NSf$a$XmU2b3ap$xO$ zvN-x8Pf_M2aX2n8de&P#RT7`Irh10$5Oc%J?)-o%%%)T=YM@`P+Z{ zci(;Z@V<+2Za@MLzKooBSp3*4O~qpNp-U#CC)<0>|HJw~;-d2jD+(?!LQYV zV#-Np>8P*d-~88+7T>%Z!Y3GDIaOM-1~xd2vpg|nTWolw!Wf$<`S#oOuUJ)l z#f}a8Q;=6uv3Y92+7p5{!Q#TLEMS#s`W5JG?DO(#%McSdzo^%}$%{pS7 zZew%D&?XG+qu;qSU*H+T@NaHdFESf{FzO>4Ib*2jncI;ggX1KH_5`#3RU=j|phg;x zbi~32T3*bU|M8w`Um$iya(+#Y97mwm^mFcFxfyq2^`m@)V?Dc;<5RqKc&Ni+El1j8 zgU{!8F3KGnLyK{KUle3)F1Bh58*r-H*Efir0&~Be9Y0j1v2I=@Vn-+2xJoB&0zf|Tqdd7q z%!W-i=Vsc<)MY%WiyR!+E^*mSDNnM3h%JKJEuuB+W_|TMR-7_lna3*j3|fE`Al%|K1b%5Q6m>tTOGm2_D(>oijeo;=5YWIltq>i6hUCqbVmjD;NETZH8Uh zW$TP#6UH+S8TYYe9fZp*m1`hYksBjV=KdCqONb0>q?Vq^7J|#_ZGDA@)es}7sRTM;fR}CARWjZ|$f=r+IYs0>+ zTF@SYB>!-vWlEy%dIGg}7X^6qXja>`UY`gXM>88(OUTV>^tBF-IMHUloI@810yA3O zc){1Mhp}SG9WKb=+X8-Hf8futp&twnNWk1nV~He+r4r+ACDomCE8@ZHLu_S-8(Fqh zUGfo*g0zMjlhnnJfBmbfgvz9jeD8GL4-D~**3SMKv!fPZS7SMO_@KZRF;x7aL zHV*)P_jiBi-FLtH-D1$?1(@G`5IeYd9oIe&26E={HEv|lokEk1V7E;ZSGRIZZkU^T znjcecChit1d$w8m9sB>IEnRlFc`81S>$}ou0$Sf&KN-B}f_uQS7#;*KOb|4ddqmjW z`>&e4F5HvDn!kvtX2Ncv3Af+H;*0H><=i5=0#Nf`09Z(@!!%qNUw!q}+u!}Yzxl<_ z{Pe&5)=vTCV$OPDL2nq`x5yJiOnrKlAUG-Vla>c{RNCk|#wRWU#vgixknmeR+G9zh zg&;87erk`ONcb@ao(a}c64ACCB(2%3w!d6Aa<~j|W$h!X6$fwwg1S%9%t{dxC=l=t zl);YtG)jA1$pt_$pfSZ}*&v?Q1YaCHYrlS+^X0$_UxD`q_9$!^*b!Os3iqsn-Xyl!g!hMW9F2+zHe~o}=T% zY&-hRj&9?(HSOWKVUL%kPR>kQFx)`sJ?-Ll9Sry(zmbhAtY$`)6$WRd#3XM87u(riebk7)}OWDX+Ck(+%4VdxToWX(2 zy3VjBbN%2gMr`=XcnYC&D;W0%@l3z?39-gOz*9x9b&;G&lw$lu9#~l`C!UQR2G>#m zTaWe7C;suja_2gvJLlNJ?><4(zQ(qmbztXHDOOGRhSQsy#j} z&=b*cSY?beqCgs*M@yOvzom_}GguS?1{A-04I3kz3zgqkhvxvE8c{zYup~-|64f*( zOpV9;hVJm!#+-m!J1w%CfpDzu8230@2tLZ485k$fP~h#0uH$yWx}w7mHS1bC_}J2U z4o9fWXbRkGGzKso%otbJ4r{~~!jq)59h6AN&}&^F5ec02Y>hXzxX;I|K~rneU>k6-|ucCrceFXo{ew+6u=oGhIQ&7 z2w;lxw2Adzb}Y~GJLb7vCnJ3}Tu0AF^q;ZFei$D8V|hT|=v+!SD0$91Yb@I-eu>xh zqz3s;3_6D}2GEZF!~3t_{JH<==imMHU;7om2#|yE!<&4(YvwP0>G*@dR$j$cg%hCR}yfKDJFy&9sM+LOxs8hMx02+=nA_+vcw}>>a~~@VORYq6<^ zVT^BDgy2%FX=96`|KFRjbY8UTWNEcy=(&oOTfSjG>m6E1k@GIuI(2z0N$Tsn6hJoS zOLpl`2zBfMdB#3`n-zf_3HpcEFUtA(c3>EbN%RvKUAA)_9Q!@I z;oHrnH4+%X%oL zd}$*luUmjeh^SlqN^#>$PBFU}+cwwBgVI4mH@1$O?^J#$oN45yCoSy))2){{={_0=-rF{JVFXU6$Kj4jj z{fPCg`$mV={%OH}x0`*{$!#aG`9=28@>pdt*lI6-v|h(N@)+)A_N07d0Opv| z*tSna;^{ki@$W}Ss&K)6ho?+=vg9WMlCb~!zxn-lpSTgjeZDimgCmR717o7w8z;J&Oqkf01Gcu?YTWozE)W?QeCrUWk)_80qP!l!Rk>{R zQ;@R-zcbHAXm%Vx;MWnI6ua?592C9dPX+>DL(}>kpZeNWL#GTUHcYhRW~Dl!rR_;^ z^k|6Hr-kIBZgdL)i(DFN2NG-qJEqzfWcvst4mX00?rJeCU$CmhM+D&|esh!#em&uh zy#4ag-l8Ns>W%AeCvVw;sHIrPt9AT1>rvBBG>U^wy%*rSt-gaD>(=em2X5$V-zK^5 zjT_3wv9QitahDcYdd4(-^;Gdr&KL*<9wfsn0F^!28i28m`P1n+! z&JvnxxIkMk3Rz0U?MQg(+lr81g7F3;(vUh<@RUN@c7$!t>yD!*A_}o{9_~+N#s}YU zE_JoDA3bx6e{aB0g&02g%^Bx$eX`h~c#iuRv)}r9M+4iNnG3aJ-%`skT2EV6A6(RHr(K_ z{^-+Vr#E6SkjN55uis+>KVt~;jAh0Ng+(>`^s?cRwL|Tg04+uy^w~TR#}3Rx!2n$K z?G<2KC++Jz*4I2ea+hsJ5o;M8hGgs#Nat>JRN07+ zt@D}o3erF(dfF)YX`vO5gU8N?OJLj}1sTPd>^R0G@(BPQu~!_msjx4Qb1oc=#1q`! zkE9E?5J+=3=e9&x`+W^B>s$;P?N_cf1}0=C}Ow@qfmb#QBbY`u&q_ z9Ke%3Z|s7j?M@ZymaV7z<5V-8mrxWRRensh2CcVucwWSJ5D)%ez|bOmf^+&grHh1w zA}+GBg}}hZM9^eM0lODEY}txkLT?SQw!)$Kb-$QE$J<(oD7L) z#=d#ru`5sGa^U4~nb?bgnu1q7r{7SCF$(#j2`A94Iq`JdhGTq;NfzwzXN=9iIZynD zLq0ensWRiu|JlWVcE$+@K2!GuzMo7%N@$mD!bIY)RaE-l0iv!MEsN2tEL?E3D_MND zX5TnD`6M!OLQKi)`Cr(RaG3>kHY?ImU7_FW5xOZ-j2}W^Q>m;xmoNQ?MAZ z86~q6TMU+%u{vI7VZls=CSL535==I!=tGT+5+VQQ&+n@Uuj0`;2l!e;{Y#}GW9@hc z5Uin1_ll~#8wZ4kGEDC?CJ^#XV6GxT(WG|m(NApl8)^3CMuu~5Qdc&)nJEz)R5_;R zP+_<;WTaDwK82nBThsOhMz}`>>Y*6QO~T9>XM)tmU|Hjhcavtm!s|Pn*aQroA}4m_ zSZOugXZ?6*5uMy-FL?^1@e*^mAb~4wH(7hE?Yb>u_sxCCvus(nDcGhODr++lLS-y~ zY?UpKr-x&61_e*x#KrOR5SJY5FFMFO*x=SEUS^I_xka@Z;&@r3-ux#|q9B_Xy#YBe z<=N>E6s0lNxjx#=amJX-I3n4(A7@?Z9+HhQ?Zv^{gp7nLTYa{{Sy7S+#CP<(2Gp2$ zRk~rv+)sZf>y2wT1l_tm(vuTleBjO);hka#om1w8hlHN*(#~(%>}hlEN)DL+a7tT+ z+Ji$86RI9RfLg|j-v^>3AlNzP`LSfqd%lSV9)e1tQXb*Pk;V{2nc>NBWaZPmY8)98 z5YP3=1$yI*kIsV)yyT}dkAJk^a%@NlHyaqriM}mW9c|adW(S4v?8Y*cEYwjer3M;b z{-o|XdNJi={kcr$O%13inzm^VPI;BxdisHcJm91Le3vj5@W>X(ENvzJhZ|Q)d0D-( zV!%65Dee)bIKGPQ_nMz3es7WC#5Zj~9fBc=h2ze5$)f{6{pqtH(yYNSdFL&+E{IU+CE@}0wQTfZz zwc0j-J%8i=T6LG67RT^oX;kb_nU20YJRdBn$2@xOQ;5%V2(q3`W*CVjGB6y!T|0nM zj=6QTWq<9q+S4?+dZeZ$UDnN>Z@ov$x7areXlK1;B3(*YB{}`nZrbqO z>`#DBnC97SjlXc>J24d!Nd|Shj1;prU}M6R63xb6rYQLx1+koVj_=-YX3m{_4n(fE z-S>3}c#h?aCmde8rOfyv|LLFknYX|9d%yd|S3mgjZD0K7+!O3)882Vj&elUNvYd1G zyWC6)jwsd!*#5ufe(8>RC}-Fe-CWQFzZ_`E33 z=??e2u+LAr)_}Q~u&5Xwf3Nas{u=-<@>z8JH-JC=Gym?p-}&D6-lY>rc=%}jLoSlD zJREQ$@j+-C`_?#0LA?ip2h8%M)&_hwV)Tmyfn$U+n{#tGcV0cMdGH+-c2o9UV-L<< z2+{Rm4So1MSk>VUhmEusvBeM<*KWp3PK(-`FSSXHe+mIh+I|5@jPyY~$A(5mnaY^m z&B}AF1&a*ZfE1a7$T)eS(l`VZ1O=hEc;`j~0FVN0WEWfFg(6(gQyN9aH~mVpPakME zvV;x2%2v52zK1a<8RtMJ&h>>o`D_Ja*&-kwZ?e!W`Pd0do14*IJkn_>jdOFwxC9&K znhD+Us(~x^m#k||*)DhVo8vGM^PBuh#$LSYp^=`s2%eDH9A`ldHTLIFG67&_OQTKd z{G?-_x{3lfp2!*-;selT!!JX}h*>=pE=^49gvJyDZ~U+d7}+LEd3Lz%IDw5o!b?s* z5$*A246Z@Om_M)zKvQ8o#+u6r${u}J61a^F9_*!upFvv$O>^5_x5U~lbCii^Eu9?J zLO@?U3`J1hc;O>XF2?HNTbbP9Wd-gF%?3E20iJQB&-!a0Wj16sn-_C2Dv#a4AlFWO zu;%m%23;QB0OeB#ObveG)p}qB~=cEfIQbGY-h$%O=S!4;^PPV`Hq~=-<{2CSKFjp(Lkl zi{0=Lw47rx-Ac(xS_Eob;E1$cMd@(G7DAm3Kp$Swi3D>}n*m+6fT{*nLmoe1zCRHM zMhtuH#-wwJf}R3|0K1I{8DjUNGN+zUs(hco_tOP>U7Nu}aK@7MGS=Vp7$2&w2gTet zKh=UT2cpG7&Tn=UWV0wnQsGTcqU8mUjq_Y56@ruv1TN2kkVX4KAHT zX0D-?BC+3M){js0ASo}*O&h-Ig?n)AgF?^7z9sF+b9F1H_AWp{kNY5Sl|pSMLez|4 z-D6-Nh6I+^PF+i^%LuY{d}vc9nEvOqELOk(1t++?*7~jA{LOcN_Rsx%KK}pV&FA0w zJg?0@%fAN918nA#<1{w?mw%;{6khz1hqN8%Izu;pwYawx+;%@y7iE0l#zJG0MYGb| zUO?o;{aSflYOGJHr|t`~=dkI2&I0n=7I~}|NkOGzQuakmFH7YFb2-a|*x{`5plJWa zo`GK0^+^9NdtvlaFtK(aJ*&etL0UZqTrjePPQ`-s;Gh#BecsV`ArBR@_dQcjzPgCN z{QjT3{cr#NAAa$F{O|wgzsODRPxDoPo-j;i2zh7#2P>`(U-*WuvgDsn6u7>_@1dAM z@eU4)n7Qe{!;qx8OOyAzQ*pU!?DXMb&fv&=CthV$&}zM2{Ul zAmXHvHYWm0o{}aueMMeKYt-;G{?09WO!wr(-$Q~SE)LZ5@B+K{3gzs%vA+8WhvgtE z!NtjX*poKIaLXC)4j|Z!FMGSxY#l#LliTEmj|74AqnZI}!`|N!P=#+xx)y78QSC>R z$a^}tH_!X;#*7~z@3brdENORbK*M}HQ|ZKlk2-m^F0OW~EIOMFI z<{PUP^jW1Y9(_A`Xz_<>*9+qqkhK{tfUu`ztOplSuJByc$TgUas~6XhD`>uT71YeQ zJmmS#tsQF^ut}xPMiEG!Hs1(iAN`INcN}(VqL}bC#gqKecXh{ZILnjs0=`oWVf`xU z4nK0z7V;ZAE9YA_!Jp z_IxVJd_`aus))@xmZEb79)5Ny_{NrbbnP&%Ia95#8NI$eZUW&?Cv>xMXosJikE8I# z)yxm0q!9795L{t7zk6QUx$s;eA93l$^>dARDTtx^_256wzy&d|={dV;Fzm^eqKdiY zDW+*LBjt#I^DuwAPb{P#^vsOBdM~TdHmOP!yUDH5% zJoo-X!Z`E%6eHM}Ti1_)bbjh7=d-bQT}H3V?6gVGxSi99DR}b2{G~eMsa@o8q}K=> z3jqkkP=lL%au=+}4Ehw0;c2s$eDE7p?qK522@VR)#Jja|6JI!_N=~>jvh27o8#(GS z2%_#8#<+=}u|#hUZtK!Hj2?TA9rbCYt3(e7WBl#=Y^j+)AA(LUYJTOAPa=cmfeD-x zKB2=XonN@{k%`6Da}pql1g9N6C2>2S!4n1$HFBgAfqiYuJC;2!l_DV4hoIskrx=Hl zt}|rbKct>R-1}AJ&CSG+9FmLPA2c>-CRJrj$5}Aw_=nJ6fJ4arIZYh69QJ%uPS&8h z_(ER?fRou=D9p*^if@|t9?N&qV--2M(>{~dYZxRc+K^jT3Wc#0??M3*Th=oF6%1Vi zjScs07)3D<$X6TY68Ag?E0 zFEkMLP_XK@UKtu+cdS+XY84zUfnz*oL6WN7oS^;7zCD)jzG*<(HJ!lb^ADAzkRf_gT3?thf_?joQW z%8zgZ`wIwylwC9c5OLD>KUKI;lBfv$xOEl~PnvdN`J^cZJQVoy%m4Syul&j{zxz-A z%3pr-fBnn<`^_i$gn$>V@oL7%=M0mJ-KY5?#rHW#cyUJA3tmCVu!6pDBh6qrkUY_3 zzV=}B9rPIsJRU$EBwMhX2 zqa8XL$#tW=&en|r0+Aa=z|)6pOG68mUw46}C0&&heyq#9rl*EB1ub*TI&)FX`hd2j z{x3heJz+WC9rJQ}f`(l7#5K8wG&dkl+|qlep1_?wvtyq!hX6l2J9@KmJ}e46 zjT59d@uOB549CM-(p)q6;Hj21bx?yB(cB0OV1jQv^vkDQKLd%phQ%1~!LHBpH$Hr0 zq~Qi4N6+wS(n!2Kc<3RS5lfHFRRVF2PORx8Tk7VZc^Pj5094pEw4>vTf0VIE0`)P* z#%&1fvdvuSFOrAVmw;#4uDbXTGJnTk>@4BR%$Q0~Ee8-k*rf7x*5VQ3K&G)xn>j}& zSN4<(we2C_%CQ2R@oJSF`WV+fd)F9!gi-cl&~c{Q>r;6QSb~epbV0WM(lp*Wpx1u5 zxCY`$0nLe`HQnawW;*A|=(wQZ1OLp!#*yxpb6tc7B!T3&Jx~Rgrqae=UbWZG=&(AW z+OF@rY!Drdu>q_v$I7_VWomsP+inDd34G7{X`WOPzfl6iA+-n8kkQ3od^vyVQ=rvO zKj_+bE)AqqCF^yq4n|Ib@RdT<9EHaYx`|6fcZ|(=Q-gDU#HSxwB}UaY2K}uaHZ`1S zj&ky&xmebcy*f3ZHYFokahr_^U?FA&*-Z|e-EEXflZ{bTK*L>K_Q*519hGwXgq~Ov z-?A3k7t*%%31=pBZ-BiwX*fO$XwXFp?M=D?WI`EWNc} zB$i;d_$B0=A|mKL-nvzy{BBdr>|^8FT_S6=+4#+7`tC_Nz_mB&-=oxq3z8K;DehNA?7pkolwUjXm4@qf_-Cq5#a@R(OPfR zlpkfg_-E)%E>Ct59kx{?pq;{k*^^DNU9>FZb7~9b(|o*ymx`aC7x=sBEO=ptp>Hq7za~NE%*gop@gNyL zK`O(j>m_<)j-2?w1;e;pY^m|fBg{|pbk3)*QE=iV_rz2Gv5*sBq>0~yIo$l{HFo|v z1^V~FN8A@QS1i7>mofQ7HUPg10XqWYER}yI58H>l`1O+)JYtQ+IE-A{$S8~?#l=8- z`Y_OBfFtsx20voe$zK;yWjx(ye3@rYYPs{>@hzQsnrFQ}tr`vMmMzpZ-w4<}UXF6v0l2JB*T{f4Z)E<6i)n0tX*kf^TuD1N8J_0=ZLpp7 zmGeu_safOj5(ZQzMS=|tjYZ7R>OKgMDUirHm`0DmQq?%|oj8?TyOPE9ZVVN?*aeX0 zi48oimM>i?FdvGkRQSTBNfJ<OUNW;>8J@9`~ioKBgY0)_7{s|BM^+r1h{@+!@6od~7`rCZ zK<4?Yl*UOP4u1`7lrco3B74%Xnk#k^aM$qPAv3vFf3`Rj=N&_s=6*@82cDR ztrwl#Iwg4`hNTwnX_DsY$4@$oR|)LJ(M~wUx6J9 z?UZ!lF^z0g5m(a&S{~F;xK!6R9U9^tZTdBqYeBOv@W(aGQa6|2*>u0mmAzi#+DmZ|de4_UfCb(8MqKFuvu{6xKsbrRQ;U{k5J2?W!ZDMm*)U?$ z*9v12Ia%}k0JnAljRX9nn;~TGlDW(~+dPef zX%K5m?MVm7nIR37l!h5D6%bx{d!rs(?3b&)a?*P88H8L71Fo4X!v)WYZhnT(13c?v zf8_2NY1k9Q;4@QH-C*W!l*%b!p%8>Pyre;x^TQtrzc`gB9Uc> zKgSB3KRMuIMd*x?R@&nmG9>DiqfNor6f;n>0QxxF6;A2Z#*eSTnBV-b`q)8VE7yqNN(O$$YHf97o zX{Q{6Z6aW7`SD7X5&2Y}V<(slmJ@f6JFo~7XXeC<2Ot7Rj66N}G#(BTAV(|8i$z;% zs)u)ZhFkvH+SF$HV}Gx(x|i4bM;2!%D*Q%4|FEa;iywlby~KAwq@#{uzKf)jSnM%~ zA?<5$SXH=O=?Zs(5t5Oj(rJlKE8=F&(bH%FS1s;AzvrQx*6B~hTo7@^ui|seclmk6&IsxU7zGeadvCf ze^a(xVm98;%V*~{uhTzt>7QI5IPqee* z9q-x>mg;wI4{ivIjJW@8uIvY&v7dSag{n?s-dMuaR6wxgJDAz>YNx-d6}uJI5h$ zrn^hqtQr(q)@ig8?}-Bg#Y@{dLLZbx$DHOFy7DugdaAR;2&~$Sy)UnpAKCv8s0Zp7hh6>BX1Kk-4te6>Tzs4a#8LM z^9Zqu;s97r5{-CbMSo4YHoCxY@sXA%b!3~m>cQzG-CFVyZ+?6u=OHiH^4Mw!11DeH zFY@KbzIfXk$#IGP!#*e|{qfVAjtL(-yuu@Hz>W=hGT0ksF-91ZilQ4k)_LzW(FG8> zgwTZ;Ztro3f_otKu%WI`^xU9Yqd*G{P3#LxOb9yY~&mi)8 z>QDdNzw`Ew{_yX8@zqz~f9s3>y#C^K8S4ogFa8;Zwf;krzWFyu#yceqVmTv2p>ia) z7yPlh*fl*|FW?vMh3dx?$Ph<&A3sirow^zKHBl0Io4u#jD-K++*yci$7LFw1ooYVP zt7mWzS*KX~(VKl?N9{^;-h!Miv4cYvO(8NntyDdD6+#;MI(cCzp&`_u5B zD>Vlor@45_;>I6^{n==ks&aBt(?&I$d5zmXya zN=3o9>weqg3cqs>uK_2f%s1b@DcCg@ zb(@STMQpQm_WX{J%8Qf890>{0liBon5$x057?Fby$rCfz2M9fGe0L|YeaO>l|764Y zVV*$ZARFs8n+GuQj(^=4cym)llsCOiZ7!iErHx<8N@#EHX>VEE);@t|P6&lv0&7l8 zcI3U7Gk;iE3&4P!%^HZ#xn+Dj9rlwl^~r;?jmjHG3?ai_&eYOnrvNASxGwx z8+X<1tNX|fM6oXc&D40nJpr*{lm2z=JVa5wpkPsv%T&I3k;Vtt1B6whV{3^JVvdK= z+qeJ=tWmJ20zI1zP~?5(+7CB6K#^gMtw=GCHv5SoiHM6|4>}$eX^=W|nfc{d=-&gP zf^`b*^?&9tIv{RYSFyJZaB^I0Y!_I3=^D2f)R<9a%)Pm4UeGJ2u{6}Ta_@pIa0w?Y zq!IZh)zlCpTYGf<7~NJTM-jU@H(A1G_k z+^<3BxyB=l-t#5G+Z^x)7GuMQkf6>NRiG{+pr8OKU={muenz%K8Qas6dfE<`YtM3LWnN*zl4 z0Nd1Yjs0vs@z@t+u|I2|5%#!`T>j6z)^R1KhzS15Y31y>uC2bU%Z9k1^J=&`I)pUF z_EsNZ?2ebUjezlazubdg+xRQ}-2z(#(^vfJ0PW;TRd^5MpSJnpx zdEsusj~Tpo<@BC21M0mU{NOq^UIg+w?nCY)Kg)dqYt-R|mQQ`K;bF&A+r0RLgBZD& zP`j^F>fZYbnqb&y=DOOG0iBM>`^w0Bzm@yRtTeHhAj~`0&JlL zTgzr~0yfB5r%CSU%S5ohsy!hdIroiF~A1KNG~**W^@3(R}jYC!L4o6VX$~E*Bo4YQJo7aZ4OUloILzE3GLuN z%bx=D-%E4>e*aItpD(8PhhO~UPyOUuPTs8JEJyA71s}xHg$kd`oFKB{YcB|qL{y*X zEW~$8gdBMH^4ur?4>kk7n@yYJvp0FcMAnZPVNUFk!6Wt}wCk=a#?u$=T~O&(k@5OJ zJBPh>dM^16_PC7HczOfGRjmjXi<~yW(HdUkun_l2NiOg(>a}yGyjTD>0`KrR+4ChXEQoV-S!X4F`tcD&BlA!EtgLcVNRM z*7bX7r&R^9HFXzup)fzN0~vvN$*#vBZp>;f-mM=DnP=>R#}~E~sqBm-f}vMmU(t=w zJdWjfv3GXZFTtA8-=Ndn^DiEkZ%s~ML-_2&D360!?Ocotc$&*q9p*BgZamwLha7h{>Zp(l+ z{-J7^?W}4oI@sN>bWjV1*7oges;lhsODyIWjAinD&(Cc<(RQ?h$M%@UUh0u?v|hS< z8{d~kD-9=}iG+&thM|mpszJchCcZqE`YMY1vg>xP*RDWAWV}8l$5*bYy!f|-$dD4J z6O^k4H_Qn0+i>G!14vxJ$%YuO%~e(dDgAE6AxkmogC)0&aef*EI)lkR8X(xEVU0b% ziQhjXE*n1pAMbCKR45Uw%bvFQO3bK(NAm~6ZZK*ml|(hX`8Mjojte$~Dzk%!N$s%1P_2BW#74Kc?e?B(3|;^bM1k%#LMVWIREchixVCA|d#EEglgQ*Ga~^EN9mwUI$%&k#&byNr zY90_g;Dx{3h42>7OZ|_KT=6^sZ;H7-H29md)1(o6KXSE(Jn`cU9c6w$&EKVblFipI z+3~_(JT>1snT7iG559c!7k=Rv-u%Y7Mh@G0X7-Z{*e_o0zfkAaDsfMDlSIKBrGo&M6LY1b7L z!BvhV6kSEp1-r$#)6w4wsg2p)175|0eQqobfJIb%XQpI8y#eUr2?iXpM8-TPa379@ zgZLb7AoSd)V!gQp!qF2xs^+r~FN?)j*9zA3kl)J2jTl}@@fw8`X|XO(F`|OAZ%kG8 zJehW4eJC;ag*ieN#8uh0kH2xlyls@$^wBZCV?k?CSIdwmSGMK7td9Bdw;WH|iMUpy zr^+_HbfUef{j_M%+-i7k`NvD*R<$NIioIpV2K41wzfALmAn z92K!_nvvA|h=2^B)nUzgTLp8S!j46FL2T14s{oKK1MSl9oVkXP1GO~Y5FHV6ZFdAk z77$MWcf;|Ubj?gI(Kp zqpY}l!m&{AHck4gE{OetHr^{fF{qz39US99NRRVNnQz@R|Anf2cJl=VpjX2WH_+rUcmER zFgXUjwsOtQvACZQ@cPEF8IGQ-d%ovi{&}Y)$6UWWw}+FOf)5u38BAc1%qJ2)t)}&NYJTBiBXZcc}18c`@9`$9s5gKs?ZQ;UULod>b=u?vcil5GL-l zqT>e}N0GI_+-;s>8+_0Ck@~?dIW1iRRWNtWtlN;`<$v^kglpXH* zo+6dRL3PI!%#ItTo3|L4E;?l1iSV?dn0<-hcfhXKfY-ikh70!aI_ z&(rpk$caCFhSx|NSC6F#87cGQ9MRtri<6Tb^wfm7u%{aNZkGxPdHh%zN5|jbK57sJ zx+ndk`IA!0N5pe9d=T0(yXaoCf3mpf7EC?uqilZ>PZU>@KMHtZ@g!)>*U5F%$NvRC zE>7dpb>Qh|E$}3YB8BrOHaNHuBkBP*yo@zXX)~Zh9~{LT(qJ4LAEqbJw0SXx z-lQ-N@cB(FoCti89(DgsBPR*s=-7dJ@`5`}KK{dt>+(awMmN0c6W|o=@5cdIN7fSH z>72$<=`a9X_~JeMJ6@vc`bjH#T|zf;t_PKoA@?WPq*Q~xGl1X3G%oeVp^hsHkq9D~&)u_NFEOM!ObeJw|QJ9E@%udq53l=#B^a zm1Qh9(=`Wpx6$ynTinI7Yvb7}{WxHC_u(i0Vm<56Y%JN0-*bX}loR7pV}5KZ?2%rA zsuqlYe~IAoFilX%4`1Y6;{eLh{c@+L?MnBExTuvlzMGRveQPbph|)!Jmm1g5)G^w| zCUy+WEqTq>HAlYF&d+tut?3>|l{YJxTA)aSf0KpA8|%@rq}a5J4A+z#!Rg?qv#`go z=bIRK6As&)e~7AH_Bg}OT=(IK&1RMHW8XJK@Y!paeuodP`mB%IVn{rV68(K!c}xc( zBTS7gX1>WWgKW&@C)N?qx`}-Lw2@fQ5hqM%nZru*jwOBWgUSTna^sd^33y1#7~sLz z27n|NHt%;34$YkO(_i4$1<+eb9nb!8!37kQz?qSWr;*g=f#>*J)(t5Ar5Y8Q+M>9# zG>5_vXWY%t$fX?o#J6i68`R!ak1Yc4A<`$jE*st$DTix({>`(-d9?$M7wr5QGxJSx zXu0p~m1<kH@c3ZbMNGvLMnT+lYGm&eoS!HXLX{O&v} z((jNA=5k?Rc2!|Y1GuC##`e@B(i9N*i9u-bJRCpkc<6c@41Z*pK8|-Rk}z9BbyV+p zpvP-2KN&H9x9`0_Tq$>d{Au&2pM3N7pZ?>2^hGfF*MFIp94q_@wqp$5`wYgLU(Q$O zzJq(kit9HWxf7Rp(pxCN+j zZDZ>j)igi-oD+jjd{R5n^F$Y7?MTM@`ZO!wJE6Y`L+`LgVDmLgY^ZzRr`W zU;gF)^xYS~`RniAeDhV7X-D7%!4t&z38}8LW1-UVffT~bL0{B07;yl=oH{y-!f9p@ zj3rygkdvKH){teE_^b!|Da`+DX`FT?dl+ls?g=0)iV*|Z?^fvF@N=AG z4x;e82$&Dx;BB}Bqil|RL5nJSo`+EOhJu0Fjvcihaf{=^vX7jTDw)$RyUvu2N|~d1 z`bo1$;b|ktwq^86j`%c;Q96U}1s2m=M0BPwJ`MyXZn7F(^Uyem#qlvttk~_gMD(NY z1u~*Rn2Q6YXaUIiX$ULT(?omJv z9{pa(s}%$;5iB@{eEPw0Faq?>e-5&MSY8eRn~#*nmvM+?mtwp2C$B2fi*8V9&sr8g zzF7;Ab3C(s%il9nW{}?W=XhY%H*U4^HVCkl?J(Elt`)Rq{s5STbnG8tNeYeu$Kh2R z?>KTij%x-oFgaCTb~?%V=Xkm49pZ#Re9nia!+XOvSUre1d@5Ns1u?ViK9to{i3j=v5=_ATXxDRFff|P6BixSsDrC7U;o_LQ>LUe**0DQ%a zq(zdWY7gAV7iJClBVNPTXu&Ig;#vEnm-t8Q9ywm5&Jo{(pzUhTo}VciMu$2Znl=Zu zxdM_nyLqKCjf4*5!GDfTS>_E7JeAXnsTZ6%k_-Y}$)=unsXcc2Ms=eCl4FZFz~k3J z^mr>DN8U9$?wkBOcP#&7$J$C^G0=$rbteRJ-_VvgE8XYa|wgRH^M1?yn5nU zlKsR_U$g}ny>7>bYnnwKI#(ozI@dApjd3|iHs>(aL_4^9uLxrlA#b0cGGgG_xL?7H z`zUS;(LENlTUNI<^61k=a!0PksR7JJyy6o-HRZW}l(zTaVGTxg^0Q309ByE)4}-kU zJx0(3CWt7#XAOB|K+l+r6}!kk$r{YHhJqV$t^w8q*QRWKYh`m=J?QY_;}$zQOj)&l z4?wv2?hNl)^f5MGMS?bYtVMWOyF4I>-y8_s_p(9X`{-N)y?>px3!W{e{SrKm-^TAC z^v8F1rNGIWryrAt*t*5bE(a0c?_TC7F zQ6D+2=~&6Z7>Szys7Bm5e)!a%DdA0nyr2&byyG3i4?p<&&9DFZUwikT{l>4p`$0Zw z-539{5BPH)1o&DY{Twsg=bNAK_@~61)Qr(L%5N>!3=Xnl^9%06+jqL_t(%OxPUQHmI4MmnHvZn}wL5gYggv%5zV! z$)&^DXqQ0ebJ7L z+)#^Q$@a#NHNipm8BZ8#e?}hjN!Slxzx|*8*+2avA4z)4$5!~5HYwuyBELf~FA5IU zZ@$UN!s9!@Aoio~J?JqCPH)J3otN_xyWCkhJjr;B9z z2(q=C3bw{v()3~kA15)sw2nUU!{rG`1{gyUp?~s}yipp5P4&L0*GFYWlEjo}g1{f@ z9Q^$K7Jom4Z*w&e?L4d02V(!8YfpM%m=x`DQ20KWS)U6j3elQ9dQ5-?;JO}+(bBem8tD^T$9r5L8mR9K4F*<+La3B8_;$5t+Sy85#lfcw z@z^oERS9HHUn%|Q?E^BX8`eBUpWh36)8EmLVrgJ@oDyX1!}naE=S!`OJ^Au{78y`< zvu+&F-8@|U;G-*n*3GWn%1#@C*=pF7#dlNZiqd8TV;}I1qc031m~+)VWi#Up{BASLc;XPN#jAfMLFQf^bb9WDV zApKO{8bmVZ1MaRi?&g|N6<6x6Gv48&uZss@5nQ#{?vCpynN zf%lxe`qVogh;FuxNSAlP|? zM&bSv0R>6)lN0#$5gVG6U9atdZLcwl>Fb^4kla$m8;O2a{Mb=kMS1J!#~RxD)93U`)(3 zmtEfZ=ifr+jo7#U{Gb1mFLGO*cmI>m9RK@{zxF{I-^Am?HLu$dFc$K#7=XBB?q@w= zb|0bLhaCt#JV>|mti6zJjmw3lo4%UjWrMHg(P&}5Inw#)pBsclLdh?9uM^QfOpZmBDnHR;Q>!>*h zKjouCj5}@n^s*ZFV<c=MgqKlu8qH^2ECzxM90|Jq-B_s!Seug$z5WTBJ2 zegwPOhA+QKVI80Oh_H*B*e2&`igL&3Cj$~7Y~Ou$=6)bis^#S8xrsWu-t_0>$1C%} z5|af0!rRI@O(5A^JwWnwlLNEY!5mzpmxqgg4E-+!JlR~@C_h!sLlO)|ff1b9`E)Ne znwE?TXbxU|ql?mmd4dxQD2;xaA`NYZ;-QMdUjWQ9d8f%Pn^k>WF+wneRA7k5r?%}Y zvdJvu#|K3FFlb|sX`G4W=`cQ1`;G&F zK-+*@gQI(J+J$*)d~|FBS}?V3ej8S`ok3PKz zZe`h#OV4|>W3ht^i8s26vK}~o&Q`k#aG7w?dBO3$Z2w`>0sya$2L09@_8c$rMAAXo z)5cwdaB_@jUkX9c(HOg_Mg@K(0ks7hdF`|vbcrsmB_^NuD3K4VA#M8zmv03Ch@I_T zCX}7voj2=;z_8D;bj&ZMvf(90G`rRP_}$#y!&tthGsbjQZmj9A{?4uLdDjtO?)J=s ze7U+HZvAp`Mq)c<@d#YEt9c+_;jO;um*bv80~~nd=Q@ulx??>JC{FBSW@TOj3cz<9 z=LP$9{f;VzzKDQh@wuNNTYlrVwkoqrEKI7`G0wkf$A&PxPGKLJpBh9sc}(k}^!$y8 z$g_5Q!Hz*qcBVK(`?^>kxsuE)z9Jb@esa&m-*X#8=wPJu`vvHM&gR(Aq##=0bXQE> zD??l6&FfHSpZ=Y|7ZVw$Ka5x2lGihj>(h#8UrZu5hVC-{So<;OIYuULXFkq3kLzLL zAn&RD1SjK~a>YILt1zhG7OG8SY`g%gAL$J{5^Rt15FbiZOK)R3mkI0mvJ=x2L|v~E zgBzLe(ECZT+%xPaQSlYLX$pt$lw$@z^3=TB?!8jhO!KnG(PYUy_Gs>(q{Vddz5y5# z_x2nQIdLjdwS0o$ylc#L%ufi18y}}M6K9TydvrY>)5D=TqGolc!cXF& z*H5?#h$eSPd>;p&UYPZ;{`UAL59IHIpMsdROb%)BVSMC4l(~>?N@*Gm)?Ev zw|?v0*I#|x_BFOialq?!8MnT8?k%60F<=)i*q!`4 zYTAdYt3)ZoSozj>)7NCxZ=iSdYqGokYQLV;OaCKV1a@=hN5muR!8M9xr!8Lmml6G^ zEV?XS79A%Q{~u*e3jSw+d?Mh(hi~5gum8(G`y%V{E$>i!S3%CQF^PzJf@|M{X1;k8 zFT`S*x$wkSLFL%DHU0Dijos?vOx*0M-4kR?g7Y9rW8b+$`>k)&M|jpk+HkPpM>*E? zXFIEa7ypclmxigM_Jqn4x5$9|Zf-PUNXV4t9ss|M-ERnmXV0}I6eM3xaz#e5A*Gfz zbw#lcno8}nq$?nt>!Fz*Wwaz#bIcXt>meuo6Xo=uVED8 zOTAGxUc|PN~g!kr18v>TI42_@TDL3#?CoV%v(l^ zKk}=(`6o7T!|6H&n4mmfR9p^SGB>=OI{}U}Q378+Ygek!2Rd)qDt_EwYxI)ibT^tC z(}ggMjb+eiZ&unduJg_xG1qXAJmh+%fDsE@3jS}t>g5bOfanKmTDEg)S&Eyy9RujA z5#$Xy!;!+U1zlq$x)=4@e!K&IwS+II!@Ihl5ZA(vpA4PByiE% z*#y8g^q1mlo$Fpj!Nx%1sn?d;xfa5rX|ieRja78*+iW0OI3V9i@{;fwpoYMDL2IjQhw5OVJg%b;HF$a%2g zrz^$}b5T#ZSBz|J+cFZ^jDfl7T27p?>!(=MPAqNj9M*bCm#cJABGO@Y)Rq%i$&ejg z5tELhfsaYG-4iEf9@nEk$4we*V$CEkCKm(WsKFSSa&p8^-&`1|stwKSd?v5=lh}1l zb*;yic_SWzhk*Q9Wfdb@8Iw>o!P6>Ns{DqBdskLI_ML}xEa-h9iAikb)C;jhmd*9L z35-BafY`8hqVtUuz=|cyv6eSeh{r8DlysL%CgfXS-g39othRqNj<@GF}U9(u;4lPSei~@6X@TCdl^W- z!zeYf=WSC_L};#J`z}EB;|KpEkx)O=BYM>@zU!Uiyrvx^3G$mdv)FjrL_x+0t92d* zaFO#*0eBej`I`^AOz+Sp7Cy=pgrWu7iGTX!DZjSU7vfDw{?@Duv!U$d(i@(0a>H)sM-?YE zK&iR0MP{0J4h2c;&hE-mlhad9yMWV`_3D8aF(N<8wNI%d>oLRelc&-%E^oHZ80U#P z>xZ?^dFJ-ST6P>XjHw?wQNC8OBGvXoNLI_Cl|h>}ohKtKYh;UfhcpcIP) zQ-uh`@Hcp;H(nV324lP?CPpJ(dCS%d5_D%3=j@NQ*Y^4Sp4R#p@0@d;a|+66pL2}f zduva7TI;R%G2Su8`_6av;)P?6IZs(X#}S6jQFf}!6fBh|{5%6f$$ z?rnW&wjrEYJUvEbK4Md|D?6-Ng;Sj%Zu}kH8s}JB-P7P)TnLw}O(I(p19YJvr7-@Z ztq3Wi&^$m_iwpEkCa2?c5vEKzzJ4C;a5gluhslPh+?7u|~%>^3BJb zsgblu6eM*5#75Dmx7s+bi0bs*gmBLFp*R-fc>@Ua*o(=#o*9g4bZj1n86&SBquYG- zHE779CPJ2;@7~Qxx90-5I9j;zoudYBB8maWygAf9$G%sX*aT4pFxTr-LTu#CQWSCbh_(bWpvDkb60QhhLB)3Hx`O8U;*_Kj#dj*E7ED8*0me9q~r?|M-$`jO{w;&`wnKHcjf^)`2wku8Di@8o(e;KDn8}r|LDva_}If>;9l1Lk)$^Tok~A452mc%J@$JUQh0E zJvBFstP9?8?ti0dOk4~0^Uxdv<#Q|#gXp~KwmTf=un2x=xXJJTV&mQMy>Kb4#~W=v zcisO~al-bv*mYC9d;Bn_EvK2rhOVv(_A}HpdOXiel>r+-scTX3!``*K@FTR5x z0bjt*ki8d6gL?s=3m^$KHKF*x0eH>VG%@51~X1(pf?&L z!0|LE3?$mxV8_bYLa20~oSdrO`Ae@uny6wh{o;l~p=8O&*rZ`IK9TK#r4&WsC~9C$ zb9^8U$P=j|1qd$;94S+!al=&AJpfNg+pWdks2%&e&9+0CO#5@Jaih`j3>Ft=jxncg zH0*2?gnSZ{2B0W!dQj~m&n7-QpgV@GBfP(`Vq1K&jOm!4=u2}rjTM{VEYxyW&^1>0 zJ%58vr2$5Y*l)-@40Eg#E9Zo6y)f!WJ2lI)X03-Mba3Fe4^FCQ->Hopms4%~S+aGE z)qt_5OEJjoF4ZU_IH0J}Q>a(&SoQ_^QmlIM=U-hZxOR>KvuwUIfMExA)jEsfke|Iv-1>FfL9XzzC`CZTg$z42)yh5{#|E_Pmsi{T}fmMi1C^DPVDh_kjnj zfMt3f+wv@onz(kMp(h{*H8G~E*~nDGKU`=07rY$mvx~eo^ektmoM}t!!6~EE$ymzMX7eT?s{?4yj)84avgb9lS2mrZ&|IwsYC&8Qfxn>zc*@vc7xB z{RDqPwXbpB$bj_%25h(H1v{)$Gw;d4aysvk?d#0uu~^NV>aIoBOl;kv<3S#*(kE*T zuSTc|!IJ0_7k#j9kptIHLE3K|ginl(llFDPUARu`GsL<&{(`u-hkvW`*1xb)jnV0} zZ?`gX194+Qmevb?c6^{IVhY!3#~j1bUUlIQoQ?IuYJ$%Pzl}(~0K_DSzT+A!0{i2D z3K<-N5u`kDR@6zEHh?F1skOZ;A|MHX_3=o&NHW>>=o0r6iG|}?Of=>gJZ+_GI)1Tc zTk>KYYi!VL@!m0NK9$k?DeC-0)_fr4ev12^ydji73(5DYfBK!j_-FFB|L=dw8>PO{ zn)@u?`DY^!c!A^EV2PBIq6JJNMDCmeL57i9yY7&T`UoHUi+Ge4e935S1c&HF*=2Lb zown+01S|gmRtszWQXtVF?iKFvyWr9;ITMj&=cfx1E;MX4>(iADW#y0cbKk{3l|S?Y z5vA~PArZw7EK3H-wvUlZz!Ty#6$j%uW^J&B_?wdAxN#wtU|cw_vOv2SKgdF4LGq^n zU7YW|dXsOf{9XU*&%FM-wlBV~pJK$_;27rlQ5B zsRk>tvs2Sf^5uDSz~s9*ulmGCci+JQi-*)U?RAa%umpFMRkqjeoge+?^o})v6{H@% zSyE+NANCedX!8>HNfMt!=tTyXqH}=;VZQqS-+cifp9a%Z6BfMLJ!JhB5`)piSCzqU zfD=whO0*)3q}k&`w`dQ-`4M&Zx9ZJJ>X+2gtOD0h3N)yReP8S=i7@%tA!xQ>e10EJ zVh74zm^&m>=s%MwsKQ{t#zwQ~s8iJp`N)8++~&xwMv=-QmuIc3TLNRD>tO7!j?O@Z+L7 zowkGEY>SA1X3A9U9MVW#cVy{gs+fD8kifkpsXL07?4n!T%>;_8+;R{h)LS})?E9O# z+No|aRQ_O%O@Ie03An*-bra!t#2BaD-fajQ+J!rkZNvsMj8b2=$xrE2oSPz`V{*V6 ztq?$uImPVQhHIv*ePr2`(V+i;M=&Mw6OXvjE#ziL6S7qeL*_Pf=l9ESeNn>u1J{lx zm=cUx@(_Xa{N43K5cpWIh+yNDcl76-cvqRe64Cq(b^lH|?`Foq_h;S>i}{1_SY9dM%@9NHbz zB6pFWxP#d?W(Sw{`fa??u2NzEEq*dxk^(%Zt#Svsw#e^ooX)YwF<4(0$Rq2HH*a0z znnp*xdo96}<0=rP)aJoAfK3pJ#oztizCg1=HD~^Nl~L;RQEp=j!6pY^$aX`; z&Htg@Rk(5UX5D@QaRPOWiwgl|kCPpX4(K%QVQX(E9y|Sx^Sdo`f$oAOYLcdvo; zIOZO!{C?K~oXeZ>cpZfZf@KoUeOvF(=pL22^c9Xc?Tvfu)o(rU8eW}aM_S&Wn{CuL zNP4%D*m+avJ^$vV-Z*z@su9O>?td~M#{X6RquRgrvp@6tTi^cK*I#`3-QHgXzc>FM z@Mf#`RC_;_)e^hjTk)yv{+U38k@Xv=&YHP})l4*t&trd=WaXXv?Lm8QKe(}ToAc+& zB8K43b6Jhi3z&D%mGid0;}~`3uWZ*7lMG@Hau?i&LcIqmG)Xn1Gdlji{Wc>f0Ei`M>i*4Wi{JK3Scco!c)#^ z+P^RAuDu2U+LQUC7em@nj+=&=6Od)sEFEH^JOnzTCo)%8WQd&)VfGX<6#E$^W@mlTz?d@5r>d-b@NA7CZF5|f za2Go{2KcMuFXc|xkG zbFv)NP2Sd!r(K10nUGP4mrc-AVVy3Bmd@Pe`aaHE``)~@;lTD1T`in8ck8LONvAnE zA?~}?qCJ<4rg4LsQ8Es<$Wos_n^L$avRFNw9s0EzDv4C*t?zlL^V~Y@3Dj3U34n$prOuiRLn63`%2^r{Yw#KK}aY}oOv2TYuI%cmqu!BJNg@uH>qmW$rrys4`kl#hf zExW3M@wb_`6a7s)_*6qj^{|ngIX0I5$`{DY2h}ObRDhl5>JK59C87Obhu~HiH(j}? zYe?n#LV>8_Y2G^-{s$0p2#6&F1otUQ1*_@C)!(>_+X8tunq- z_eT?BIM>Y>WHSnC18<-F^V4~Vj9BHQibiZQ?P=xBtB*hU>eIjQ7k>WRALc&*bexGI zANS{LOZdbo4}>_+eVF?(K6U+mz7Q}sUJ$z;(fOwn4uTk1ry)n2GU9e-U)57h`XeI# z=J7J)ynx-YnlXVGR~PtZ{aja=VL!2bh8+P_vwCy!LbIIDSVX?hmrQcCyBAwM3q{6J z?5H?8c(S{Lyj(g~KdLgrmrLlwZnO`w|KD^rxJ|0rN~hUPm^4^a2jBwpraudhf{rIn z9X>ZXJUsZ|)mQm0fS>*yzy0;U`E&oq>$h+C6ab4b1{}SdP)I9v_{nlsv40=)b^b*L z)MZCO?(6@gc*7a5McwxJ5R+Yu244Tmw_}Cl>)P&q$8q$> zV#u-F<8no*Ph3Yf4CDwC0W;UZRLlO##g1+)4-n zE5?yrCEuN{ScYzvuyDA@T_YU^PQU)|^PF#0geT565;*rlyuyIIIA#r|4Id(GbI#^s zo0*#+T%$Xa5du=?-1#uUFqL`j2nXNu(yN>*wIf~zv~^<4dBneko?u(yV@um!F%dK6 zt|s=eMYYtl85c#pVb^dmj&b!j4nrItcd=ym-BZl;nJ}AUO#Ua7%lg;?>bN!@K$_m1 zbH3QJZnkDM&<5eUalw$=v2l*+!!WW*B@%3x3-zAw(6K1SBAvE26m2A3%!Smp=F`0E zhG#*>n+{?Ja-vCh?EH9ynbZn7qh3~e6#9g8>3Hp#PmYW()sz4yN3K`yMq}x*68T19 z%MLp|RJVYoQ(EEXXjNKzfUN{7xT4`#Gsc6AqQ&$!7C}|d{$!+KX@8BqY)@k;_wGZK z{Nur&v_1dFh&6W)8ShNPR}IYwX@YTy8B^nD?fK9UU64xC=F`u6y!+aRpU=Pd>i7M= z-;?i9`&V9no^SsDC|~;b;rqGKe~)+dW65#PC$sZ3fDwJoHD;!@o)T|5{THTu$B98S zru9pV72oz)v)wh#gCgf2-N>{omT8+2jUJ_uiE3On4|`>IO>K(Wv81<|oRbQV%HT6`Ws(Lkm&Y&ybgYFCmi1Q6}Y^~Sl z+AXi7SRH2Ctbq=Kn$b^XU$o zd4f%$O|IJRXqlUq%GK#QyC=HS1@zDm}{})@0j2o)ofGt15d)H0p(Jlv~em zR&7_^0W?%IG08fr16)Z^4+(`9-RKv#-V8HB>)Tw<*!rTKj=v*3jP!Xtc9n~vx*_&> zT?uI4!O-c&d155i6atpKAQBXAp1J3n8vBZolaRlVUP{3~NT5wlnm0%yo4{pa-uIdMM zg&JJ*gky(MQ}*AdECDs!#I_-Bz4E6_t51EOp3S~ddeAiX^2g77=|IQ3q>w=b*R=JU zHsZ*Lkb-s#ZRa4;W@@|#f8GHH!v;5Xjxk*9w_9@_S*=AI zq7{*yIokuha~QdQ`mvVddych^1}Ye=*msQCdu>i{a&Gg2iSxa6k~BE&9Z-FZ264({ zeivAU^}QjE>{OAP6Z8{gq21$l#5a@bm?rKma=&|(iFK?40K}^4%IQ1ZA?3Ucc}nZ) zRa8FPFr^`HVv(y>Xgbv4+B^n-{FmwMIo`|H%F*TI)bqeNr^ERQh^}+f{w7}tnommq z*suH1Pk-Sr{rPXd`SQz8`N%)l4e#gP3iQsWZ?dM}H(QALckN(lTod7bA$Pj4Oi1vDfcs*8KTNt+dV7uk6bycpioq`V0FA%rjTMCd{!3^qCdcUxX2jB#(c zG~Gtl*;U_#m1gj}@c51Z+WY?~Kg!f)j&#~%x&-jq@-2+ea+Mt0DuP5edQ}snP3Y0z_AA|<(fO$Zf8+|E4*oJw! zVOO0zQ7%mtryrLreY`U^TNBEj*%>k~Vm*jiYGbWY+Tyd*9v+*w8i5Wfqlpxp zvT;Fme_=9?$mTjmEji%e)nx2|Y$=B>i(#*D!BcN6WBAZLNAxZ30i1D=7iEcu`t;MW zUt9AydQUo|!)@($J`i+kmA${&#g!rL{72Cy$PVw?cYI`t;`Gsk13}ej(w=X%MTQ;` zKhx%^dQX(cDE;z6W!Wxu2IRXQwqrw$shI4PqCsd=()#5>W=dzZ7?L$1?@%5l-Q zG`4Ma%=8%R_yCfadp;_jA>=o^@kl3|57?*$uoeNOSa1H)rN5g4z*n;+9@^W$ZZo8~ z=kS2Wz3_C_-`+SquoML9#@(X}+zDu6KDnTumza(rwLIBHE|k6lsw}-3-vCkpDU2Kp znZ}E4ZEVQh*l`s>9@8cutJYDrq$@i*uz;rE^PxNwpap-k35GbXwX;TB-x+mUYnnr~ z=b*B7e|NLTH7@co8f}gANyd}{{SYe6>kk{+4>FPTpZ^ku~c92#zW4%`IOE3 zU-Ql3wc;Y$Q0Bb*RsNfkmu+6lTx@W|PM&&M)F4VTaSf*2)t4cAE?IIB-jCmQJ-CFz z*JDb0ub~)kr$2Ty+;VjDzt_hV)#Bs{Wn;-|a3X6b+-Bq%sHP8m4ee8m#eectO1|RAc zFKF@+e%uSpt`=BbWka*h?$k79V{L5N)>Wr- z=rkKhJ4jphKQ-6`I0b6{Y?orH5~v>^&-Dve<@(ltcGR==Y(!qiZxn@H6BKWvyycVDT+^c)d)H~Y3e|D!490bK9Y^cCYj8}$1zqj4HUHtw_pGB zzx}tp{_4#a=7NU+-lOH->b<-{`d&T_pe(_0s=4QjxSa_CxA3{6&JBLk=?8aB{^hR}jcRH3oqiXOwsU~+!kH6C|NbN|wmb-M zfu>FE;!Haa0Y3Zed!PQPKmG50>!10pzvYv!^W_%r@d8H>vq(E>>E|Hfdjxo(;5(;P zENllfCnZiATiWUn6ZzP!cJs1hDnUai39%gX#5J5N4(G97+0z=6<*^>Y%8t4x02v{D z8m}Z{`_#wj59#C(v62bW%ClV!Jh@G9#o_%nBAVekvZ2@d23r%a~Th?z=xp-R=Rd_1(cy;^CMc>2UPoY3+~J2Hw?Zeqk`Bx1U~_(|CPE zaZMwrXpzZy-yz{6rO_KpS-mM+*vd;YQoNlADifDxYM^wBsG|EqyMH3z^-&{j#R+?| zK2SWwQ^xzA@f=89**}=uG2~b#K?5BJ2i?Kg4XX>7`qH;KbG5jK`ohxM*s#0N3^$S> z{H=B~4)~he!3|bY$SLcfz1d^THu_Gw$G{zi+A%J@{R@G3i|r9;H{_}XcblQgyB>vcLZUggB01kF1d+j%hiyESoOE8o-5u`;;)z0oU-4)hgMzjd+4dD=6 z{+jDTJMUvg2N)Z6r9QEssGp0=2l5*%CQ*6xQ;+Z3M0rXi_!>RpSta#dLH0M26BNpn z=cJLr8!mN)&55$IyCUtqR-<-{2{mVh{+)gX-rXY1d{7TYfk>{wiVci$TVwTZ3( zN-xS&;|Dv;kUxG2;W#($CEhyVv7@!+Fk!meDABnlppYg2#t!re_OeAm*}6UV8_MB> zC!PErw7l_~y721l3=Vm9S4}|5+{KvR;jXR3H%I5JVrXcuKtfW1(sH$V-){_+(Ho+yp zj04E1V>8EGx1zQI%yv6G#s&gx$N$)A2%$QoL^IrX zeErp@5r`5owjK;Ko<+dqpWAq#NZnlkcP>LfGlSCpBB}V+mp6Uq`Y`SMF0g$lk+69_ zAYMKNig7;8DVy_Y``;KK3kTlCrZyV-E@kvnE&hr+jJ@-$zk50eOjaz)*4obH8r)e;m;B0CFwaU3?sXd->%^rJp8nhokbpsk^UH^F#46L1Wc1sOjSMBw z+;O1C_FlBV3+^7rfDo8ac$agSSXZWJ7FgRCpZ(L_RZ~Hu90Y-FaBz+vr!#$3x0=K2 zgc7Z7Kmw1$s~h>e@%oT50c&Ty1gU4tvaOhoxEZ&7#;_Z)PZubio2``CP-wB5f~^u)iPIHi=(V?h@#{7(LgAH?tIkQjP+ng zUv&AlZQZ!opQG+9paS8a=p#79Rl2{lV==nO4Gw*?(Q`3_31`L8UG|4PcDBLM^0&3* zX||pmPnXK+9q0?p0-Cc+tKHZd4#{@WtdKaa4Ln5#VqqJ=BkKhMG8VOC&p0t~H)_Q3 z-*Kmop>scegkzG;k_IxlsD`WO7wiMbMT|Te2(26z6c9*KKqQujV`F3o7(BSnY|bNN zUm1!67|Q}Wv*Q!ZI-?Eb)|bmZifp9-X|Wr9vy~n%4L=wf(2<^oi-*FdY!mc{L(Y@ZS@59~e;4yGyN8`qRLk=FWBGnz@T2^+JPM z&%-kg9AIK9yyIO?>I0iGLqrkNMq_9!h>s_16{I1TyJ-iN^DKX_e9FEM7)<}}{yqPW zzkkaQuf8@Y4SO!`Cu1hqLzo64_>9AyqVsy0{8t)W$omP$#KmjCuH6k^UeL90zk?r{ z`PS}9z6j%PC(B46!pB()1YI9iG~Gs)ZU<(=@f-=JDLs$h@FTDGlHbMm_VRaKRMT|C zwv%uRar8?|9gNkIQY%PB`_?~lg1d9j4^Gk8yrAAtL0iB8XW!aRg%1K^iGVebs@w(8 zW&|=gFSN$H6?XN(el%$fQ3*zI%`>Uvy7+zm0Nu`5YF67#uT&9H&TA%~kg=@~04a>2 z;#DHUH~mX*J7A?w@QqXC4WA~yjk4l60UuU%IZnDr@Zga8#n=)V)44~`O^nPZ@ZjOd zYUM`PakKM#cvKXlbDA_FUq7W7Il9K#R*?}6uWGsnXVY$dHB&*5vjoP!YwSG-V{N|t zi;l1`gue0fCYOXcKYjJttM7d0&%OT5zvZ8P{r2lGbMKT9`4oWbNM<14jg~i8{Zngn zk?@A8_hE?v9WPwvrHv0>xO#q^8Bk998fir7wUC>8S@~V||55v$p=2Zz_N+)}m?$;5 zb}Kmp;4SCVVbNW^O$kY?)Y>+Tar%yc9$5~(jdz#~==*DDIUd3jD~;Vod+EY?I>+?Z zz~}e(%R$4~Sum|*LLQ(_%_8OFkKFL{AmD?1OyvW<4K@jL?`C^Md@N>Wa^|!zE zFTege{}#|MsW6ufg$E4&834hCm)!DX>A%gv)pRr`WOFx8A1IHLy66dI+&TIU^&zVAM#MQku+$vDGdFduyu+Kg zBL{=b+@wKv9z0JM3T;QfC`mO~Cu6=9bHp!!T}II^zIs$_l}<062NO7NX4`R;0*h{( zfUg3^6TV7&QO;;%rWk)|n?tnF(dQ?MuAj*O&wMCdX?)p2*qVq|^!c%5KAqC-62WZ{rwK(2=!0hmC9-2O zZRC~#$T9wQd^BK|JYA%_9iiS9PbAycQ)yR(Zrjw;UgX9} ztt`8RKlHa_!tDse_w?#F9r~Wj(>ha)Hj3rGq8LwQo9~@|e_LMY<$2j#+rfdE{KjPOG0#2aRRAW14VpNvgd$3tSGhm>UBCNxe)32Doqy|F-~C6g{o8+T^!d|j?75fv;De97pJD($9Pks@ zdGj?70l4Qt-Z!r&qS)-iCMjtq-V(K3nZz$yBxU&EQMuAv(IH{yjY~YX)a4zPqjDT zKX!8izdSus)#p34d3T>h<&8dnD-@vr>W}ef0s6NneBqz}qJjqjS&&(@{Etd-$VpS4 z3%q*s=8I2%>6iZMw?F>))u->jdgFHn`2`gmu>pML!JPvp0rsLHtr+v5v&F+@JN?d~ zqodKzqPAY!L}L7&91qLYK!356>(Y{;tcO&`e!wn+3utT3M*-KSCnXs&q$DFodI%q5 zg_Yc`taM#}ys3eAclZy;{uN2#*$>0%w*hOjQ69Ybu~wqkCeT zZYA9lfkSl+GXh_Ahdm9IU<@B=N^+BfTkPQ; zs~wp2f&w?t^<1v8xRKFZ40D|J@s$Sc5n-!p;DymiD+%ejVY>xwPPH97Nf4yrO-EXb z-j?cj?4G`w9$3b)E{+Um2Fk9@^)Ge|gs6YQka5*Awy4q(aSU=op=5paZ~~AGeSixS z6M<~Q0{}e>a}LGAMrIX2r$nzuuU&c%QaTETceQ{gro|8Jn)*gE{L!uh20d+#6OR>8 zn->E|9#DRrfvpi_V~%%xND3WUuCCtC0R2x(&=M!5rm1%Y<+_0%HnC-KM#8yK~|(%2Ppt-c@xR5!~4i+YW^90%kz@z=R7Kis9)X1VCxkG~_w zh(f)KFYP^UcEx!-4z_dGj_KG1G$BE!eU!e=j2&_uo#PDSqZ{MX2fJCLJq4K1>|9W_ zGfv|O!NFit!bNT0IzrYl_>OnsjS)-i9J@SMaL6g@X^e_jiOvKf9)xh81ba08?LX~4 z2-t@zc*DmBJW9yB^xyc#d!PQbzxp43E4M+PG_LF?PQDnO4ZnWUns@rWFUx%wKB6$* z>^M)pHAj&dAK&HB`&B~jql+i&vWkcOHR=^t!k##umq)4bJO{lj8D~^&K5~uvW!ra3 zU$$y)FC*@)Qb-&V^5~e}PAn+$`mlZxzEE_X-93bR8cq%)hkw zso(M2UjO@l;*Y(4`^B$B_Qnvf-@lX5X;v-|9azj?<>{Em$ON-7bqV8tB~ne$J>B55 zxQ@;_j>LRnMzJ3KbPu!I_V^jezmEyE`Es zFeBTsUHte01g`b^z$>NLB^5pLt9|&@)J6-8OK@zI58bMaeQb}N{Q*ve$mXrT@uOM3 zq0)EHMOPU6rv|Ru1)ey=A@}`E6%Ua;^}AzMGmblsTX4&t8pzRXps9~+8gfkg=*C{U zyYSwAGE-vLK!4-(=3DjlvEO!TKOwS!v$i>pAOx7kwr^|aP}t~8czGjWa06J=qf6ta z7Pk+?3}fA%&SOJ9I95!9jo9wRV`gNjuzP|S^b;@T(p`v9GQ^}UXPK7eX#+Fp^}ULI=O88da1 zJKi&o!N@y+|z*~yr>NL)*P=dVHi+9tkm51;49QWmN1NhZTb zY)xO|8rosJ_qM%3Y@Mia8#No!w&;{|^L2u)SR^|h-sgMyRAYaZwxmyD9@~C7?sS?U z{nh`CL&A`PnRxIiHR3c*e97G~o*`T|!)$d>#Xrm;?1QDQ1B8}cL))j8&DhrN;ui*U~Y1~DXyQ)Qf!GBei`002M$NkljcEgd%>rgPGJ~0Oa(|QZU(xFI%aS=0FSa2Wn z)t7I4=bv}@MTW#bX~;nGnShCdKYtGH>ug_q_thW$!+-Ggzw|Tz!s{=;_*@&_81)J3`M$M}jA6e3&|?Puh7UzvTB3y~JBz@jc=g!-csw@3ShbUw!rJO*Rey+FyM6 zW%^m*Zz9XL?!Jkf)%xb````RSfAEk0-T&kN{J+2X{)gX)jwe*)lfT)!{C! zHAiFxycReA$Z}Fsv%WAd8cK`ZI_WX1i(xBgf!kjDt)oqop_XOqJp+Kta?7@Q`g>YE z!opBp<+!NtwHL~c)J>$lkl8+UJsQOX=UO^`maXG$MA)SS1I+W1t@WaIcCqit&clE( z4)sCE(q(X0R*Z*ibXM7zPHu+hRLAZ}+F1GRLg@*@ZoSpV#!d|9<}0dQy`CrJi|NQc z{_^ntzoaN3pS>y0;7MKJs0|cd>14#;^eo1Q}(8)VJ=7&am0PYo?uzYE09b zvI3M(%Hj<;Gjk|n<8N*DRSPC^XDOulLJ{ZY3jJWNG@i^?b>oohVW*dOjHSRLLb3tp z-4V}Cen(7>ia0iwp?aX-4l$g7S4iDhdoCF{d_?Xzi#cxutdG%cS4$GWZ<4mTc#;YI z)l2xrPrXTeAiTkA^gK^b@r#phm8l(nD@16-lZ@T+r{P^)gR@6f&$QZmqMUB$)OlIA+Q#abZDZ>j@WlS;1>_b- zI|t0+oCZv?CICh0Z^p=Fd4hT*JWE6$^93x0 zJ#i9wNr=63sOJm5oT(?{4-!r&Qcn^t4h5x&%C}75bUnSNx-?T z*aVbJ;%D)Vjm$c}yw}Z@C^T2^iluXUvr|>%+U%(I2)erk-g}6VTCF92`kMB9Hx^i5 zzclL3e5UDx21LoFH~XnA+PB$6jyM$%)XgFFEe1k(C{G2;AJ8Vf1(RFvvbxc(|I=i;)%Y7<2l zNC+`mMmQ+_F8|cgzst8>+s+non4#{xF}o=D`E!1NtqEz42|7 zhNT+GMz-4R1Gvi;yD|yfVR4skf9nhRgIhnm&G$z>)jsVL$tCj>0G>#l(kzYWxcPSi z{TqtM(0jl@kfC=b9|5=CIbd%xnw!uk;upI0^Md00i|%vs{gI=+`=QP9zQ#yS+AXmf zJ_(TVn}Z1UI{?UC|K5eg*sXuZ!r!y-?=arJ`tcw6_>;f=H-GtOzkd7OPx!x=d_0B& z#k`+*>$EveG<*+0L>x~Xz}2!(OwI#sihznL08u$D4qyZoj(lwwN53-mLbXXRzBV@l z*{b!B?}GrW!E2tKYTTsgg{LSP6mrJ6di#aBzn=ijfyPTR_25yp;57vU%hc;+q{hf3 zyR9&`PCWhS_>~S0HaczBOWK&MO@)CBHpcwG;fn)f4nqe%F#0K*;lry?w0c@v3utDr zLE25&>`oxY_n=QOWi5vN=J{rICkuXT3fAHQ@T^md!-qrj98VF>%DAk|-;Bwefr*im z4s4k^lIEeK0LG!TW6)JZqs2JN#2-O9>EHE5GQtT%lViVjktz$3*omoQ(L_C%;?lUn zE`YsCbZv-V+{l16Pqb199*n|?bBT~g&DelZ$c0UHLyjOD6kV_B2-4)(w)bQYMYe^v zZcZzObZuxfM?HAPDiyw4=xlrI!P%|SbUcHiduCjcLos?MJwoM?t$6ahENf0-NJ4%^Qb&LLv_^88{^|RPye359cxF<<+T*qov}y8x)gyN#*7uc>y&xM zh|ReU|F}D=LNW|f(8XpB3q>UzT{t#EC@sTBo14IA^3`9-0jcSuqrHJ>7?}A0$?=s$ zD|Tycb2>0CAaKW-J`wfiskp{ZJ0NIx%ST2`MR%ibF833E+LGV=Y>qJRbp=%Prc875 zr4+XfqkbQRF;G`S_PYt2UCq&yY%%Nm(xVwvg%A7>_Ygt>b!-~4BNzOt&rY7~=(`r0 z2XFqx_nML>SpGEfUR-m~3=fsm2xus$o`&~9v{xazU7E8g6_VXTqo&gkm<1GU!+{#< ziq$DRyV_hiX^y+bAKWAttdWa3nA|jojBv3Xe*`3S4@A6axF`fy8`X95kFJG#9esw& zPciE+I!x2%KPq@`$bFCBF_%96b0-uzZ=!zw>KFgYfAsn%e&W}?{yLuq;7_M{2teJR z-qiaAe@W8b;QRe*x!EVLj*#yGfEj-bB>vl)F*vry-2LWH^ifH;4A(|D%4b3IcYGa4dqkav#&&`Z3REUC^UNl!BSPP9g@NC-&rbp(;*#~am0y;Kjo zTckJn6~ayUtXb5{3;{n?Jnh5xlI-|d|K)OY8bH~%bvMVak` zd@lfB1nBn#_#hxz%Od4(SibkYUwM@;1N`Jq{_#Kjt*^fP-lu%KCGU92ZEU-QGCQ-N z`S8Kpe2Rd7r9l*6i%Kmjv3SN zU*le93QG(?+STE=s#f%q3o)tVqw|4)e&L%d`a+GR>j1XOXcS<-45-ItJu0~EJW(Ij zHmI4SDIx5I1lgb*O#$eGU%!r_n(Rkvbs-K1V}{P%q8Ep^uraQ2Y5JAcgo{c1-6+yd zZ-K$`2^j%n_b@gLaVNjKjP*A5H4LQ9#x_W#itiM(Hyg!O0@inSXi!Qu?OO+<8jf!I zJ0|H8V{*m=N4Anx=9&tD*^`zhAUq8xs{X)F-uSN!$Md0~!PaWs!pqM?N!RsDO&t9d zVp#Hwjk>h^YdnW5xb#%z=)eky{a zuML<#%ftAVUwsfJA&QyQ+TjcHj*#P#xxHe9s7Pvll&sm*xIn&ZsQF%DZI-jh)up!F z*WcxDwGXxNU-@2M{I^`KjcPU2W0`u2aI=2Kw+vtwcW-yFK_LX3+Vy3fHgXCzGVAP? zxCTNBY7^LL0cX=@G!IpBM*q%9clt+s0iqp(EUnEO{uWD|AUe~W*!jSaHo6i0vT8 zzk(4SoxajLf;1p8S8aDV+2_}}Lg1DRCho3_jIIzF*#Y4=J@YG_Qr%TQIIt-v43zf` z-CY@-vnj?`63h?pN>EpNjE}^|*)cndsnv5JP8TyZ;~TraqV;<0eex&G6#;z4Y$Ngv zNESH<*UF)HXB1k}@>+v>nRe1oIMX=EO1~3?^QK~a94F3ogljqtx zkzN^DX>C2K!oK?QG*25|Fqu4MdHw3O!=o==%h(!NtMyZ4BWG={Ct4KtU(F3aYvk*E z;a^{)cpXYXNJ)nnd>9y+Z}jDU=k1r@%@?Epflq$lzy5o__1*8j{**8De=lE{(vSWp zF7BK1?myqPw%@4+2lrQfJ%Wtunx_?PuOlkrK-VPo zS!*l18?0>VV^8CTyEWJS6U*(!@PJQam93AHN2;RN<_6O0-Y+I8M!0DRnX6@e-3?au ztEsX7C*^=)2lT|ZCyblyC0CvhZkUJWWw0Jv?_$5=CoiHoc+>Dk+{G4o`XBN|fXSx+ z1z^7%kf&IDi)9`X@b15DWLfE-=lcNu+F$#{*FW<+f9mzCJO%SuftLVs68S0zlTXZa zhVLp_?EOEbJ69Ntez20vfV6YWj42%1!$Dg1#l!|mPsbP|qn(tWC;Cv`%Y@4V zw@p$-uu{skwYd$zo0(|6ms+TCYIN-&I~*f+(X`#HFTvJWOnVl$4^qbbq3Q%H(iN>V zcD|3R&^c%5N7xm6tTY^Va>$b%dG+{%H$3KGcy>MRIgRlwV@_fE?1Pv&KClBZ!xP=f z8#@#ihrsBS&U)O7ErWTaOK*sgpHj|U@r&3vzs`B|j0yWy(3p1fGJQIU<%~H=X=tOL z{`zU~2?nksJk+%{)&T0LyVmOo*-wK(QjTHZItJMBh5RY|Km=Z1 zWFF|<;+nBYO@_$qxOj>zbBK7B-sHQy)fdm%vAmJ)kWe9%m%xh{A=;~qY7rf0)MuQp^~O^>~zOWHOPt*l_MjpWQVJ>jlNIK8WIn z{>($q9azI8Tj$}y1|pnPpI!^189O?(@Q8W>UG6mnDG*$?UR+n}beMxEMz3bNbx=Fy zJ02(pPZTFyWJET#4Y_8JCS>_$M5y3nM+tsJ?Xw@%*4}vB*3umU2KR=50s*p4h7>)M z4G?61MbnPvv>l%W#ou4U^ugMo;Z|mhm*qE?=`;m9;s7J4$>go(D6%E-CaPWDscuZ^Qx-d~eRLZwb<`15 zw%9R1x!W{TwJliQ`)iybMYlJ*yecF|eo8-0Ug(VxoO|B#aJoeU(dj+sk z_9)Cf2{iP5gOYYwX=_3R$uS?(Pt$vt&)>ZI$=~{upZxV-`l~LhSQnenP9pDCvtU|X zoW&Q71%0qnmUjCO^`*R80JgUa?ZGIWJ-nXEZ>BxMUjSU}w3@Q|>;8EXS$r%^^dElo z5vPMLO0(F-$wyUq5b&Wl{rrteFga0-skJ%E!SUe-?|u58|E*vC_K*MAN1wiZ^?7dW zzjA?dgI_$pIO+6bHjbB%$@^Ua(PeD>t3cxCr)`G1v2!`u(IDLsA8l03@8Zcq(cSy; z9%a*qAqO4*+p~py(C>kb%>Vt%cqfLhdDoFYGznCz=)TVXB{qhUu~NSFf4Xw{l%E;D zK4P?EAlCYiy+$Btu)#?Dg~8)tB`%v^lsdKey-i}9k* zPxyMn7deoeTRTViLc-W4!|A?tei8!(wPT^*87*J+&25i#pv(YcyXT9sh+|Hp=3%qz zf%wUp`0%Bp-q`7v(Df6H#~%E7LX1bgD65`{C19N|A9I2L2f^i&GqlMFxpV!wMzP(k zaQn2qb8?kfzrt4_X z<(+Z-rIjs_BC{QtbJ{)}Z+UlHGO+lDMR56L9RdFzIQBdLv|axWnvjfOjO(lZqSIy9 zH=Y>7S#Pm01^DNfo}MFejQ9r;vsP_yyl_X}Z|?4RTw&qTzrK6^?VNVRZyisM1-U(+ z2o7J6+D|_8NPG48BVO#w=lC~&k(o>T&Vp;j^&%H~au8jPKZliztEJaJYXSjEUhBw3 zVitYYfMlqn?bJW`aP$<+O_Qqc6_6EjWkMcqK0pe>0J+g zJa+gR!&xp!B&%7E_#_KUp{#M^s0GY0wOLtzQ<{AW! zJ>Ht_#E<}pG2dq77~wX?jK9avoLcty(4d%&k1=@uC7yIRM>H4L_`r6(2IE{O9?zeR z`Tbn)aE99g-u1~?iOBqn9?|ffo8tIp4Eje;ylka!pEXGtJ(!m8<4>DNoG^5WKUm<6 zpV(``dUK697R1CGyvN_`60n_~!jT#>8bEs-!+uD6^q3>h6;?7%pe^l^q{_2@2rxifO| zZO#cNHmA?n#sst2%8yUBl+Nj#=O$hw89OnIHHS)#qDX%F`V@O`^ucJ)*t6afbLY9S zJD)gBeB@7iy2P~c65Qy)1J~{Hr%x$9qo*%E#~c1Sy4JV#>18ue2vcw))?~n!9_J_t z(RKdCWyctG1%v&Ltz>8tYZ7_on(NI-!Dd&#j3i?Zi0=UC+%+a12mq$S5j?Je_uqc{ zpZ@YMf9p5=#IOH^cm6-%zoq4v@FqVsU!cx>zZdzw<8MD-svg%5*mJI8jLsF#T4J3B zPASyeR*)TRZ1>Vp-6g+v?e(>FnIEIN>26JtOwzAmaSfKQrx_-%F4!~i`}Gc>n3SU3 z_XxWQwz&zsfp5)4UG=5BT4*187ygH6t*Q0%q#@}@@4Cj_CEW4j>5g!Ls>&|OsIE)i zzx`*?de_fl=AHj+zU$woSbUKMp9En0-e;e^`fdN*Kl}PSfBw(rzXE)grJ9q=+b=>J zzS~nT(-2;tj0MGz__&Q9rHPz_kwDV4(K^l3sGR*n(FP;tl>?2K)6d4oZa5=wedqxe zF(;O)TjR4Y;yppYE?V86h;|P`u4~jX7v9$ul z4Pkh>;IVN2iHzcUNzHhA%(3#eq}9c190r%2YcBCP=7A7*OV_Jy;{g{CG0a$)gNdY+ zfG3_Al;a>-$X55Mih2SUxvA#FjYibObps;pjr5scqxEz4Iq2K7nJMWOx7!CpKq zW$m)hamde{5U|dc^^(`6#USwqV~%moL237#R7UjV-X3`{+3C%R($}cSz^QX#L6aX$ zvm?je45#i~?J;YG#p-QXN<~dW8r90gKUpUP(_SskO9W;4^AVy;y|ilB= z{v;=8tU$EZF0dLzMg*g!kxieuz-AumGZ*3t|dymMb*ardK~W za9k6EuWyX1rFFPhKyc(JzvuNYopke^aQSp34cfaq{B`4aW?~nkdu-Am?|N4W@BGlO z+hI?<88gMTgi;$N5k_y`$M5LsI-EGohIr3^SR&ZhuXf?7TngMcruwDLk43WV1lp+_ zbN$tpX5$<6Kr2UwJi^rEo$lr3cyoNk7FWkXuZ^!k(NX&u?wR8NhzEIJm*%`}zBpEU zF7bFJHsWC0u;7n9*2h;P7R>U;6a1~y4!+|n(awX!zBbb~S{hYUY=0{0P zte4i}(_W2wozjwwMqLJ6OGWPVG&v|5&nXTl61k`&V>7b0x9d%IaL#vBo=0X3E5k3j zBPYf`#$8sMr|9PTOlM-)+30xz0|rf8ik;1d#rUFTZF@bD*3Mx(q#bO|C%g`G93gv^ zzw>|f=CfCS@{j+!uYb?)`PS>t@=0hgALQDcFY~jV{)hP@KwfWLC-A7N9!!2yxV8xI zTq_~rOCy_6gTglK&Erg*_MXhQh&@!olSeuJoBJ4vxw?XUKQ~ zN4OVM+*G@~E(!A;Shq^CNU9){_)F6ElT>x zeWFQ&n=Fjx#tkb;MSF3Gwms?=WNeg#YH8kypYe7aSnQZIHg`#{gC{>RW?f}X_v8y% zy*anx@`5L_9gi=_%pYaP!}yqk{E&YybfP|ghsMJKTwyY?fgOP|zE{IOIaWHl-4A&>b#yIPY9-@@4kG2Vo!dT##ZX$~y z9oIX`6t$5}S3+{pkIMD<1f|S4W({B*3a0-ar$np^ZE%)m21=awe4=0;k@J3y@yp-1 zApRO2>`WwcnHxdWyZ$^L2?B-`=d<%)!R&)~e0(AxYsmA9c*)Y@-9>KjW*rcRgKI4N zV$Od};m@WF+SMJ?VEJ+0h&2P@Sav>s;;m4ZQ28F)ttM6UjMmG+FgWU?}x*^B>V! zudH7Q7)#`w7%X!fCMP{FFs}eIHVpvvwVwaV)3r^0G#0~5F4S}6(Ur;bD{%9<$075` zI!Kv$XXXYS!c_IOOP(B&tOz*nyl)Dq*Set6nSkhVtdd85>`Px9 z-0h|xE~MDHHqvx{8OG`g);Dgj=UhVJwV<}-8bM?1I%C}MCzq^S76onc82he!=0S1e zXfylzVHS+gwXO&4$vpQt6wX!iAxmQ{YVw_bb&l7LDec_+|I|ZjbD8Fmo7hY%+p-grpEOd*# zY2PXau>7ns+x%6=XB4r4^WFvxNgNB0 zgNl=qPqT6X%L^<|ulzzl7Bu=SWEL@Xo}K03dGpEN`8$8}XMf{w{LxRo{_3+VbbRDO zi<1KH^y{W42o7S7ef`foc>u>h>mIZx2Qe{(g9AS`Pc>`L2_YOY>=z4`+XFfF=cI@k zO976wx9kf=V~9FGE*#U@6V750Ve82srve+l@Wezh<_Pi+6}=&%g}(MZ%$xjR8BdL8 zY#CRa>)7X10Q?ht1TLm(AcmiPW)m|-=QOl%ojG`*^JDwkn>)|4=QvaoC$%B zb=rp>J07H-Qp3|yiJ^>!*ixW!2g%xV@{XKMSQ?om=FWM6j4gJKBe?>`csM`S1mg?G z9GgF0EM~26kpd6vsk|jt?4sxx${hmi${sv?*;rqx;h+#t=b&?=aKQKnhA$f-Hg{tS zA-28wZyS4Z@HL-Fn@%rY^5-=i46$+E!h!DzPiS$;t_1L89>Zln2*leagWg1GIqM^B zDB&yxF|nd@ypJPtg&*T!H8}=J%Aa!p1o-Yer%T-Qu}krjCOoB>{PIwvbE!q_IJR6 zMsCD){{HQ-x3AQn5jK;Z=_{|ToA@Q6| z{>W8+IA_!D3K&1~bmxtGa1`>oYmi*Yko;&*`er@BtM^uc;yV&!AUEp`hUx@7+3`iU z%{gpWAxHM*kG+#S2xW~8>Kz$5Vy#fNUf;Zq5(OLn*5_UTV>9gf+I4^&4dcPOwj3YL zDRJQoJvrHRseMd%9Y;>y^j(x(^vfL%VoHzbX?gBLJyu9vN9ZRP<~StGJ=YA19ezjB zkQ=iXyAyxcYcpdTd*Wv-Z2Y7)&HBSA@?)i`arhxw{Ye^oC162X0 zZVt%_cAHZa7-!XIy*m5R?GN#HeRDh{ws3~c!Z_i{lE31<`4Ow1t_|%tJ}w4=a*U0^ zZgwF1dRpIr#L_C3!7(-_;f~vL2eOt~KTOt~Q}E$AFk~Kc8wrc?=Cq9A6jnfcAuM4B^u^HRQ za6$aWrw{OgAnJKKyy}}?<@JHX<^&V38Jvs8Ipo0;WJbjN;w>huIR?}AjGyyw_Q<~#ytI09k}#KSpq$7DVx79uP#YicId_;U{U`puWGzVVF@KmE`C`hW7RZ+!I8 zCp^sM&!hY2()|>Gw^HHa+`u`uH~VwbkIWp@2QmBFmb&6d9C!8Xw=}Nqk)1dfFm*h< zQ+J2r`(nFmzE2yY7t1>pFQOIV+(B;?;dqhe1>sGUYqc);tdJ%*M>Kl4ne2WX4wvhw zdL*25_}E=b7uaSTv zljF)06({dKp!gg7o-~5co(rO!#372ML$n$HE<6>HKn~IL)5cDY$U2im!bxL4p#V_| zXUj3gx*65mp%d1l8-^JJd?^V^emUy@?O=KN@#H%1@Q^1nH>N%)rJY>3qI=a79}`I` zxVZpE)|(oUF;YVW9eQfGTV}-On23Xh5?^pmjcAKuC{>GWfFXcZb^Fa z9K(M?$!{o{`{6=k!Ueq>>{VB_ECnuF$A|BNHL{DxSj8enWUV?s|`eZlKPvj)1$NG!fPF_Kz!j19Zq&0m_XC9uSs$`uk0?ARCwn4Yg1I}BOQ3|rLUi1q%R z_kI%M{Up|NWY{{V9WwS;*^6iV$M5*-`8`);#F=-HdPCh+8&A%gH(b~lPvYEnxO2RE zan1!7$5RIAk|K`$7{3GDalnzx1M0w11rV99x3R<0^UaApGRKGCK+zLNL(~F&B;A<1 z(J_w!G$-2Pmb`PLo09k&FP$yXI6e$K!zGzqP^RmN72G=KT_Swr1Q~dcv@d&JljeFc z(!`h7KJ(1qyC!dZ=_C2r`6nNn#}JttWR}qG>(4$YK+fxP?b87x98O|KkSO6rO}kQr znCk;AKYnM1d5UG!9H++ZyhV^cLqukgFI32fH&+N5hOD&&V6krvMLi3W8Bi0 zInEQwukkd7Yo5V2?(AosBodwVc&g(F_?-o|9)N+umftPfle6Fz6ITZ5%M>;-gvw8n zrG`f)QWd6-bY!jK=N!WxGq7WgqtqsH&WrKsvI~SiUF7I!o(qjp`bM6q>?n`{ z+H*?r!E_?EH};$Zyr~cCo)3__&GAfD_IngIHS!HkSDs7qK&x4bC{bqoegY%*jLZ>c z$FzF`-yo}6Myk^yq-6{2@(J4_uPUHh!UWaoQ{DL)x@C37j~S}XJMSz1CB*3 z!{?ia&}D7or15dSPClE=i1T_GEH-bx`0lH}@i%_y@Bh(1_6L9Zv+w@Or@Zt3alT9K z1HSk#4^}_QJN+M~{ozObBEY^$`o41i1R%*FcYZR^>)aiS?z6)WbI?dSaHNfIN4VPU z|KR%3etTR0VEaM5%ivw|7l?l_^d$r`%JY$b@VEZ<-!x&KaGc0YaIQ+EIf=x$N9H}5 zp1eh_p86`!-Cequ!t7Mliv6*F=)iFo?83XaUuwOag7VZ)_YZMRr&V)uyi1q`=L>iu zcai6WlX~-#W*1``=-oKcgoN`k9;HeBz3=^_SO4Nq|MYwR;2-|OpZ{O~=l|t5@b^?c zWo?MKoqW`SPaSmR%m`o1k&it4?gTHl(c}Ph9)X90ig@nD8x7`MIS1{4ocEE(7C%C0 z5s#&f9&!i(76;Z=M4m2OS0chwCV~M&&n*~F?&;Khbn=bB;Ag)Wn7V{1_fF;g>Qu0GyWvb5WgEZ%T+88x~~%;ot{O z;O1e>sH!KA#6)~`B)1M@g*fu2srpJZ@2)QNnZHFs4O4c+5OGCFjKOG-O^hnorEl&Q zPt6#}OSr5DTnO{($n-Ni5ssTyfFgDW7h-rL>xD@A2~v%|gt#mF=-P1(%2JQ}piBe# z(Pj%?Khvenc}2F38zZOd8hhcF{l-vANHNOl;J`@RC-)nh{_~tCa*mI#&2;h$q$TqF zoExSnJkMAM0SDalofFz{)Q%M=*W7jMl4Mc>v%)?o$4~3#A0)8J>eztAVoKU(D!i_r zF(QJN)-KNo4B0EF#wbRcNm7`5K97*!R)Iy2Ursy`B5&cmLuY~Hiz71f_}OEAu|&f= zQ{L#+N-mEpNOJ&@BJv?Ec*g=KV~-q?9&nC_-ZsihJjH2C6A@(^rO#N>=xf>m0MeIu zcZ>!-5lkUgeQYn)hu@$_@BunZ+S zePthU<7If^rO>TG>Y zVFVYBX*6D?ksEgS@d3^_Cm}=U@jI`}FrBeJ=+PMYaHN|8=Z4I+%=Hik7

Z+D5`;JoOlc-dBP_LM75EVyZrLqQ)1J;KTJqh>r^L(p*R|2%S}AT8O*MSw6sl!>%@I` zA09vR%=iVyYiiH4Iq&!SAfI#2&HvB+-0%P7KmNtP{HeEbnN{JGIjov-!C zp8;^!*&_9g99sWW-2 zc|_lP_x7Ss{lF3FyTI>~AEK-AgP|Z^a{RL8dtc_=X-+VFyXwsJ1bP`frMtpmdG5F_ z{H4FOF5pf0t80EgilaM?AH)rivI%RCz7&VY!}S5_(@JnT`1_NT=LV}Mr@pJtMcrFI z9gw`f;kyCS=kNaC=S3utQk38*sLg33cU*wYkUxqIn?|uBuKl5k5^LPKZzxTg? z^SvAt=c86RAba7{OAP;}$=LHwJr|Z-c4qDO;){5$c1M)-JiK>g!^;y!UYK7Bib z5Ak`?F!`w#E9STU`Y?9hfn`28zO8uiO(H<^4lL(vZl-nGdF~Bg1jGPeu)welno#DkvoBp>?p7)$zaaYVTuv);U6ii*CvoJ>IS zf1kMk!mbBI5pOw1``e>D)KTL zS~Y?PnvfPKwWL}gVz5y{OH*homTqHdA%&_T9(iCq)c?YuM2Ls}2lj~vCX&7PT6?dz zIhWth=X+h_zMp5#xz^ql636r0_ZZ`P`Ciw!#>@Ts`~5=n(bvRRlf;8MskWmaE;Lt* z$jN6{!P9@IKZZeHfk%IylfdY>z6H1IFZSrq0C#b0|A|jL^KXA5G3$kIAf%pn>u=(# zzI;@SP{vQV_-p?oG4a`y^LUECjkoJzq-dS~(Z8te_@Pd) zUf%F^Bz5Kn{-%$5yaIyp7;@GRqTzgs{JS~cc|J4allkKK9{*{-bKUr)zwmG4g+1bt zjQBIY>p%E2CU!mD_=p!Z+Y_(Ei)LW3gWLG&c#hb!FY?8vN!RhJ@o~Mu9(dzVvQQXb z$Y(r+fWL;tg%n4l!+c_Xhwpl7Jct*Tz$CL0TGtQPf7l(N$s?bn{p8L^@WRKwZxq1y z{19m5+aKh%kA}J)h4N0m7Ycd$CpaCC$R{vmG`Aif?H_!^zu+(j(@_36Xz+(0UZkZ& zZxDwbpW_XI4(++^qqO6r@dVElCHnPM)*mj;@CRJ<@zdisChbq!ds}ZqS3d2;pLo#r z(7wd?S|8!SuYC65cYUtC*5N-Ff1{6Nwy|HwHePK%5uoAz>WKQScYVO0#;oy(z>FXJ z6M6Zu$M~_qX&?Ukjr`FKUoVJoE1o(RM`6EiZLAM}P&>dG-H zf|27v>oa~*(F|kolW#x!-T&h6diWpy`~U96`|rPe;5)v!_<#R{@9~SdefrOv0C|)7 z{oB)jZvYUh+!Wv@0A|QNzGMvIEK%Wj$nmo4K8Ep;dSgb@XkEzW6eyD%i!Fk5=;d8< zBcjIZ)I0hj-?1;+h4c0jXr!aH@FoA_*$-wO0(YQ!A}KUxkLkA?)5`{oz`ZeTOJKf5 zYc|DXhnAo;a(G#!ncY%n4T4P3i7WL_y^L9lR zVowIpM~GekbwG;0wDB6VzFz=V4EiZL`Nw7#c68D=U}J;$MVOhz(#^q^e#5rk7s0_A zKK<{)9Hiv7B?z@s$6LPQ3>Dfq5DZR?MwbpwIi6_0lJP0_8}Dd);7L6J>Wt6u=?~j6_~H5S6at8p z{AnMg@$W}&mPydnu8EoRCbau86aNF5j zUyxN7thQGVIPs*vlEjOTwi^s}Xm9vwmlv(+Ut-SKV$7fMl@dQWY8%nBt-(&Y^8(@2 zqt`GfBo?x+Q#tA9=I_?IsM|U%+@Ip1v5aHellF6{_k=N!G@|X9ev99n%%g+9`m9{E za4EZ2-2H5EVnlq1Hv+V&^9K>oi7_17p)K+8oBEZI?THjrjYWo7qMtt^Uni_pGkY2t9v3TI zu)DTLP#@&ob+MJUiiweITzH?<^=RAJaaTU;i0cMxSnQ-3SczsfaDq#}GCp|qlYD(> zJkqaRyCg>a*-dh|BL*qIf*)x4_-OlyYl!(bg$8-6&PDW~D~}(5Kx3>2 zo3UE$_9wh3C~yDbLqS>Fg#iO4v5OCcYXvNL#sPe`iaTB%vyx&DTi6%XIy8dt4ZT91A3ks{vkCtzMkPoIESto4>LjS+k%Mc=VSk=e_d(e_aGQaJKGE~%ir z>w$jIOyYyics%-a6jnXo(8l->zHJt+ZF7F(78|}rUTvDE9qM6=S$oGKc*IZL(N{YN z(6pB^p0fQ@pi4fw_>U|$+kW~30uIz4`~btg#y{$`8GbPC{wNz3@uR=LaE;MGi1e5L zfYo-e>`rWgHwk-Pzad~Byh%I0g0EXjL@F{J8)zgs7ND_FU;Nc-TaZT2SfDqF8^fj* zKXeGunfh4k({>GoLAyra$kFy`M18shxKZ#bA9?=mzvFwq{%e2pZ~VY-`(8fxpD+F6 zHGf|B&-n}IFnk1na~7|Ql2hh8d^oR!zqqcCxPhncYTF00ICh*$aU5+w3=2LRy6dxq zD&Ev1(6pi>9^#v%mbQ6y8%=1Jb~#_ZN8=IFf%xulzSPPX$c_Gj&hU@n4$5@^F88z; zHk7%8M8`PrR!B>7Q{veWN~-eq8y^q^6aRRd2P|QCv1M z3CQy|PyJDOnKL57%QyCN(#!V&@bsV0{PR`-PyJu!y8$@y{_N9l`<(!ve)j6w_k8a^ z^*jHUzxTiWA3yywKljhRdiH)InF|1}C#Dx{M6hkz|?xJV$JwwaBd zt)NZD8qP4{Ycy>mtj4-n0Km}}C%UXW%A-*qC{QL{PYR;JU1Q^m$zCY=bOH$fkgpzg z00ExPg-L$9Dv!{>HjsYpiX*8tt ztL?y-(1)z8ij7Vn@=99lO{8%6NyO#r7K0fe8_q2oC58_}arU%$urNx^m^hkX^W zjJs4KW8VxfEaJ2=b{rBrbR)g=JM4{{LVY?r<|u5 z1c!|*JLj3zl*OwKHRgQ;lGAzV_pFJ<#z&OUSYN2N=7`wwyYm;k#2dAa@0{f2y6b|Oc^^HFTTM(TH0tH8DdI2({KCq3NKto;t%7~HU%46tZ7s8^u?e#4|D9pAM9bJ zZNra@3vX(WZ#=l*PSr7!0^B;Mi(3N<~4GWSo?PH7ee;v|gEeKh^Nq zqU{hO*0Ck@!No_I!nRTyDN`*SWeCBNQ0ys&my$8L17NivQ0d;2C_`jhRVvD?V6+o6 zjsqT3zLESYkUlr7aq71g|-4?P4$3sm@^LQ zOgV!XmJTXL=qOLCBBT~jL!))=Is`hQOIh} z(_ZIXF3}^P$AM++C>u)kXm#fSyiw66@Oa{oPr-|v%vo-H^E8vb;utSKIkJF?6F)uf zh1&S!EtA}sdi2pW6yl6)M{?s}HsM!9|w#=NyVLDm^sL)1JSVIinIj1j#W> z+X7V2l7~e-I&e7fSl1TuqJU7aQY2=ih&PX8&i~LwKz>tXTB}wqT$CLb^=FU))=of@ z_u>#u>h;hIzf=z%?VWaxTWfeh)Td9L^FDTbtj*fmw&0{*J85kzLDevo&JxrkWE){NTXf$pI_}$W5o1f~Jw) zem$}ymHDL!?N{#J<&G9bYm}nZrKQ$|W;o#C$ShdPwds&`mcqD%tO^uJm2A9QKPRp@ z2K&gzyD9Ie_CSRiqR6_iLb!18*S@382W$A$QB*fO)MYd1UcR?r_n z^cA2mQ0Y%%#YL31G)4)2b57E6X#E&X?J9xrN!4k!WydsFgDp@0)^-u`v$BDXP~|xp zY#pcU*YOKF{d8-Rf_t)5k7E~GY&Su9(kWphITs@ui}mpEetpvCg1EPi%xRO7vB3!| zwvfm!Hn-}@JI7dg(GA0~4{30yuR{GssInkw4?xoZr3`6Zmqmp|BUxisKD=$a_yckI zK_5g&n>bq^$HCYig~;fu1{BK<#Uw-dI3^-VKkG#7qar^A$whKK9{pxuu%*rEKz*KIi@{AaF~d(>k?nAbcK+cO*#e~6 zBafgiDLUg}fYmeGt*jROS zEi6(a96?P?o}f`(TvpEjlG>3%Rx{^0b|5}+A;E=6EbCu!)YqB8thL&JnSUEZPSJi~U532&!3uN7 zPKq206+%Z$^3d$h5D&HGMx$%>HUrw8r!_ z>WP)&XxV=HUP>IQPstHT+P*-$%wqLsJ@LTz$|-{#3bAQDIAY#uu%#nAhALgzQw}z4 zckvNh=&DZ)LkoD12O*NipD?t6ZvEhTB;z9T{2Au};YW?8pr9xa^H1B_jy?bY9}L!= ziT6=MzPebX2=u@#>$EQ(TukH+4&+o+zB7WTvoOlU2g*{iGfb+0UKwTSe{^+p-pZn(mpC|nHn*h@CCNwvoxG4aij|8v=aARP{hHnPM zs&1soSA5!*`~EcbPW&#*VC?o*Rr_PO6H}E|K}Q<5uk`7Twfb+#zY;5YEAu9|fW5r| zzPjN2lxz_N#8{q&LG6(ccr(+zBGRm;zhekUkdW2%-#Wvh$nbyLnb3n zq-IS^nYRG)$+*0x#~T5D2f#e_=S_gm=6e9Ri}_jJ5cu@dd>=qw{bw=%-tYUJ-~X5X z(qH`tfA4?(U%&tP2fr;?nFx7x#)ZkXo_^wh&muN`M$W33lTco%fqzcArzLc;H~Xoh zW*}C7g>F1a2qn!41ST}Oy0Y12!+`a|qjsKDk3MV=+r zM2Y(ZV|pOiSV|(3U%3+I4Ixi9!xsiW#_U-~dQzY-Cy=p_JI#UAW)DJLcf4b-JxyZW zIp|5`b{0ejexedg=Eb8Yh_o{;Y$6D0x&CvaU{DNEPq4ucJyLDI_wqgP*-JW!erg7r zHg1H3PCXX57-X>^;XjD^M~75KksJZPqh{i*J=(6DLvn z5C5zov?nt9vDx?^H6hmL5sHf~9p57#!JcTo$Y1} z$B={QlG_qFTI@-bDASfGmVm>K9a*!hWGdA}R2?XrAhJFs(O)%Tl|H0uKdal3Z`(8; z)wGRuXcPFI-zn6=3v=9QKa5WN$I4kR0wl%t0i)sO*v6V>yx!h`RFE6#5+3L z(J|hN35WP(Q$FTIGGd?HJUSb&X)zDd*)>y>m!Z%Q!?e`8aR z@Uv|(o}y!caUGBfCGWiRV_ZwdzW=V2THHQi4XBF|m@G=(HAT z{f-&V_o0+rUNuv06>bt1NRJv}UnA!Qx%R8)nyobR1gO}C6?Ku6mF3g_vn-U9{rH7m zHALz98E)n$?I9|}2;3e=yRPec4Z-MvC-dM=Hy+9$QakXK4}I;zTNm~%v99MKW1I6$ z)UwfTAlX|_zeCvb4c8Y3%xa)S*_|N83CUnF7A7qt{`gLI>eYggc}Qi?C01w0KkFHM zjvwf;M%XTNlXAR*?PbjA$Fw4E9>4Mp-uf|3Ri)1IF~aEiv9R<y!U}&YzEJ@zmd&09@?nEda`_ZQKmNzxVPh0pi6o$A4(N zNk{)g#qkuz`0`I8BR0jqO8+G6yajW*W?XoS&_%v{yh<1M&85!H@H!c0vO0*y`a1Du z{ZhYF=1ZB4@ATn!(v@#SllUgin-DMBmM%?7SB=KqYxi;+j{99EnrBjRk)A)kR0n*% zD2W3CW0wOXKiS7mTKHuanJlFd_mpxRa*IMmqW zKi=Vo7m703-K0(t&$Dd0DHjzVdl4K!Xfi?@zNS+qKXE&@2-|m_RB|G!*cC6-#(y$oi%|3* zqP=PQ3d}g(3#=ae(Pzw)A6yM{5G(!IKqmUi(kYr?7un-2HnA7k$RI{awTUAk|6$+@ zM?t?7E&3e9=!2@H9G%8)Olf6+B1G){1DvHG$)8shyJG}t{ZGz`4*sZDBRvU;K9_gl z`d4f9XDn!ki+`M7JpB(Kc!xf?>vwMq2T}iE)_<>)bS|`6kHT!^j2rN~ynsg$2ecwwZ9OI5q`N=J;46C3)^O7v1Hwr4x^f9ui% z%D7{sh{)Jt^AD_S^!*$|R|kg337BDuGVxHCxdn!}=#PD{>Y%P6L!wW#4TcsWW;+2* zIXq-gr(bCUvR9rKI1FeB$_OMUBX;QW2goMM<0J81pLhJAfry)iI&T<_q76Q9$3hD4 zM+Q%^$GjbLJ%Fy4hDrP9!?7Ig}{RHpQ4y!k9C8afgRgmVmsLg z*$zi&7;)MgZ7>a<1GEYw-&lv#;EId=VGCdXkr^E9otBIX_=O<(w#yhmqYXs_8v=dw z=(ITO9ee%EdS$#|5gYs2lHe$tTpD&$xIehrcn||@QAcVNnh{5-=BzK zj;{zwB8H^O@nCWzs!D=;;uJw*lWvMMG=@?U=K#k=pm^T4$X z4)#1{kTNmsC>AMC z(2LGz)flXNc7~_=d=CJVieCWmdjXPvp1WtSKFu2d{7S&fPnG$Mw*ylDAW#1P&)@vN zzW*ox%wPBiAAa=7_dkE{11FqMZg9<2m)>gpnXDdIK2P6qn+%aOXs0!I4n2MJXeJwp zEhN81MeOh-4LvJqOYE8Uv72IRiJ~hl^hsqz0AHw(@Wy4V)gvRTw2`5*Sj5+Ic35bi zt@5hj4>UH?=HpXzWtTboS}4-WKN6TqB`ywn<3&I{A;umjC&cbRjjwbBasqTe73pnV zlwhIDkqjMDvL*BMrU#p)RAlX;x@yCDEyIgJPM$VkHUwN}clA&i#e~MxSEFEAR*G?U(Z`g5c5BMJBIcM{vM|-;qUTkuqi%E7~JSF#F z)<#Z@)>$RRsx1^_a{xw)Gw>eqrgdohNHp<>GJGAB0bL0;e{@(E@LR0Nslj<{JG1Cb|&<)4os^jOw0o07Xci zwBL`Z8q?0=^>~CZ{{)d(m3v*Rgl1bA40w?T4EhyMSX_}0-*R%kRo_v<_X+qkE;8sF zJ8nSsdylwS;&Gx`sC*HtV?N`~w(zJ?T-qBStYQ-%lXxN-Oy9Vm!5yr!+(p+pi|vyl z=eM$lz_><@6da27K?#SYI_-4+QClSi&(40Kjq$|@Myzo{16oxt1O%{~{!N=WU+edi zWZgxG^CA4g_F(PUDOgRPeox;pE*kp)B(QjT+5`qFPNbIMqtBZeTxhxGN2p_uJhr3N zn+7POK@!Ot`hK(^`Eo0hn(?Ttx(IAlnE0$x<6pgN54PtMWa%&8-Vie|+$gOFLUvuv z8i)Vd2)FJVm)e1FZ$<4Y9~)iw>!PNE43sXK_gL#%JJ!LghP~cCPwe#r5DS$WriyVed_q5CpD~j^ST+`Ng!MJVE1F6mHEmc!7hRnOXM`ThAPGeg9RiFv zCcg2DvGbBI?G5eTmL4w($@zq+Ij4B%)o0JX@3+7A^}qYy{QB?xSAO5W^qYBznT!4B z&)(02PabUY3o_gYK!;cSq4_-ky#5~=-vJ;mZyq2^tGQ`Fo0%*04M#f8efWEvZ0%#x zlUgMj-KW|WwI#LpME6UpUv2sg>g!G8_y&Ra5ngt7&2P!ZqP|)Axd)vD6E<6?-8I-& zeTGS72tSe}LYQqbNnf>FKNjN1F9`YLbWtdw_(b_pwUs4pUc}YEYKyhQ>9SRsr~Aiv z(RT78g=XUBfh6U`)D!*`xATZC3$X(|1Khh`nFPEo0Id_C6T+X#$mIAmKcVr@|E}Nl z@OS?9-+b}@yDuNU`23R${`5fXco64c9Utg1E+X{7gFq$?6PODN>MO&~fJDkg#2Gy; zo-8c6j=Cw@G%e7sXu8ex0}L{4Obk*WmKQ%V=!Br&s*J>A3uUsuN-Ow;qQT0!AZeg7Q0e!^nOgl@ZXJn29P)`9 z!X}mK(vm_y#i-cV$X-FHJTwG_I2zVH*bb=&Ui49z*{sgc(k}f@)kU{rjw4SNJOFZ6 zcVmn|074(*%^@do$Cp2SOa0iFo49bm8Q&z)F8&#}NeolMbM!*s&n}LvPhDbLoQWfI z4MqCJlTiTEE-*AlS#S(o1?Hqy=U9yI3Xs!2n1xQ>0w+?jB6gALH)Ry4m6E+G^$T^< zJ|UxDdr}r6F;2!D_C!B6_Q|tv8iZL)5F(Cm;6b0fV~cjqA0qNtJ6Lb1BqbBeUG0_; z-($aig+f^j@TQ*3xJ$u!>999R+Dh`uLwL*yyy;AZ@Ub)2%G9t#{jTG%@HKn*gHtEr zCE4&W!?QiovKynquHMK{-DuQo^-(=3q}4s+GtBBDUr>9X#n9R!j-^c*51C7T<1zit zx`MwWf5$~$EDAQZa>R6-C<}Hr4hcpvek_jpaV-T~z&LLVS1tsT7dpzULm}fMS=8%K z{C2*AS9Xy(dCOmTj^!wDF~oe?1d_7ZU437!R11!xMT7pCJ|MpSf$M*EF=<5b0WR3t zlyxmg3z@Ik_(P^ci*nMel@Ny_nV1Wi9VhdilhEP}jGi|{EDGv`FQ)czsb_nZ#Hr4X zTd=vH*?ItjlX&3g7{%V{8);>=*fBtCys3@S$gIt_HD-vFZ&!{!7fdAk2Jf?xsh`~` zBa{>y5{YU45VNgPYqT8ba>I!ReFb!$Vv^{VT{k_p$Q)x4aayR(ZpRjVl_*5ki%{Ad z?sWr)S`vL|aq1E=xHw_c{~T}P2ySAYwxXeJ2~&oVEz-%kXqq+Oan;Yjhtc+gXN&=& zktA>naT}Y^>;GXQ7~}lalTmg&gf$pY7gI^kl_e=-zu1uKFpQva&mCOK&MS|FrL2GO zq@Zu9J5|xeiTw8_1CsfhcJ2i~v~z4qaJMxM2lPYeu|C$OqkFujf09l^YgL=jPXb^n z$$=1iiRY%rh+z^R$%8Gth9I@YVXd~nu-#T}^eYtN&?$6nfS`e7!{izv8|#H@x?_Vm z8WH>ujCC*LY1^EOe{OWWdin9QpZ~d^`Q{(^ga7h3Kl%1Yo+Ivc4&$900mPU$0+>gf zr|-A__ag#*8{qo(f8@DY#`x@dSq__PYX%cL6OS7-Y z700a?_@X~j`mzevuCyL3MP7EBFa0~p*S82`r6c;L89qO6IYA)6eOiI22Hg|%Y<4uI zT~HPX$#%?A9_2SDq_4dixI|Zue9MQs1acIgC|g~{@>XK=LaqJ*4$>O}GwelN>D4CR zw3FPEHopjiIF1iYmK0gYm@MyR+Y5abj(!w?8v%Ul<-Q8T>;KfbS&(lv&rN_2zx9o0 zFaFT)d-&_W^ou|6#mi5>{zZO4fSUl!S0)#!2jeJkXWhH&Oz=c1cG`Ee6Ca3P4&*9D zkAfA%wq+2aw+Gon26Kc%I|FL@`8*-*9f{^tkUiK|vqLEx^6FQM{uqg1^=1>4(igjW zJy3^93Z7#b-2CrT(=xN)CkuzLh014Ne}~+8vA)oc>mLHCqfk{fPAn=W&yzUC5GLKN zR1ivAslcNh{iRbehTNhMWIbD3Xr(+Z4#ts|dHI)d5SFSm0#w|3>8AOpjs6^Exc6K^r=8*&^V@x?Zc&qb=P{)a%m8<->y zu4ywaLhAfQ>IfhfMQ$WwGj@i}*mkaRfR=|?*D*v$^%yNq{L1SE+Qp^+8X2VPO9wXP z_z^wn+0%iV$Gyu)Z!jWT*zl&TP<3Rf+}5>Uj)JONQ-ZO8ybV5VeOOZ$27GK16XLYa zg}ScT%El1sCYaf1qjqlmSt~B2o6e0WLX4c7zVzpadZLecntBbYw|>r3B<#8&qBFEUIQXA>yW%j$&(24GH~u{Rk8CiESMvK4Z4mcH z-}+Kx>sNE#1Z4Yv$YzNSR+Vd8_J4hc<3SX~V zJpESFVbP+kfQ6AKvV7-(^QR1AwSA1VZe^@)d*w~6dgdF6X{7RJw+$aR2P@h5gdT&E zxPjjdm2?Tr)TV%bNu2_X}{g7Mhr5Nx$;fi2KzXga5T+Tow!x%7L32FR=n97oZa zxKXr!)yYn`&_yn3{B1ZAc?$^D?h&!NxU>gOll_~q!m3mTV^KpH&UoDK(4x)gak1`L zOGCn3pJ}`=nu`}AAS{^DQyj~{;IPyD+-@XjIr}T!YxnXc@ut!h zw<~_4Yh%N9#jzL;O%&G9=4;|{V51a127qsuS^RQ9g6Mmn^uUK z1AS6mfnz38Z?d#fH;}hT9tl)PH@GF0G5aOHW&*`!BD+9O^T&!$xz&6V&J~!|sq73k zDwEJ=^4?Kkp|=MN78P+^RVd{IJOiH#dN2MnqP*DW20%6zn!Q8Dt1!H_&j}Y3;{6Z! zX^eNDeUMjZKK$?>J^SGw`D5Sw*`NLCZ}Jwv%g;ZHA2~$ll^YyduRLhrREUAd#O=cV zG6(7|tP!43O*_~&>2fM!IXDle)HFxc;W2h>D`G5sHWwiY?3$RkQAD?KLdIoK{+fD> z7n%I~na4QhVy(j=x(so`U+>LtXe(AM5+ zVB&1_Tg24|@009~Zv67#=#v;Ow?ij(`Nd!Gg+&rU~_+!po zeaS5nsj4sz7Mqh@>}8Y;GGUm80GmH?ZU!l$!%!jij5&T*5brr52OD2Db=(yfdkZf= zYIT1AgF`D1FIYX84;rp5fcXFnjdn7ZHIJ@XU>B1UHDeJwUVIuRV!+AO^i7phvqiS0 zzmpstploaMamg5h7bbD{DFpF1MJm1-ZwJh1;Tu@t)yttv1beLy3>hR+@}66QO*=}) z{)!mql4Jf*L%}GvY8R2#G6uLvVH^%hwQ8esg9Dx?fL#ToiWw>U4{2iA7#JS`u*66k z7lg)VV%9zY%Po^7?wE9+xFmt)3707KeV;VKS9jW5EM5UeFL6R(((x^_^Z}lB%ti`d zra!spbo_=tVXILr-TTv~#zyqgnn;6N(S{~ z@?~NxH2+hA&5r+OYUrml`~!|%Hn|u4cCpywpRq}~Z5tKac&CLs@?1NC40p#RtYec( z^t(QVUS|78wMasQo>Voe_QPG}=-sQQ4Urds-lwEeyPD@s`O-}8)b`~%OEZ4_eH zAzdSxgT=>~Z847=_Lad7o@C2-hQu)5cH=Yar5B0~P-IEy?B1faBVvJb8dj_XRKFPH z4)kf|v=w`Tv7e2xYX6cUmp?ISd1TNTKB|x!E4i>cwxi=Zl!l?-cA<|Qq>?C-@X^hp zGWO%jCHFX94~iEx)!pGGD>u%EfRBT%KVwcCnefVyBbUD!5yjiJ87BYurH=zhIYnz; zNHQiO6T-EQBh++`8$}7RH^Uib*kz;N(HCLT^12<|N^IO3d`o-B6;15*ho*Q%-`S97l{}Vs@@KZnaXJ35lqpv^kT=Ko_-s5$Du4nw5 ze=hu^%Qek=Jn&=-hI#m23*{P!si1YiV`IiOG&*G08C`~!q`dpqOWE=W+^Q5;fAhm8 z_8~r^YkX*r7)R^P1!U2EO(%pyJB2r62r)8WEjk7V>W#K9Gg%pPzlWd>ZSi}TuTw6E z4EY3}S3?+d_f#Ed_pNe^dzb&}@@hTx9!u-t(|mP`{*((9+Ddg;LtV;+eDAS~i)>^% z`z$Z-EM6K7)yYdGTYkru5zU=47mo~T?!a?$=R_cXFN*?q$Gq@|hYFL0Ny1wI`QtzEXaD?9K0JH*Nzkvm`uKov95`9j@XZs=&`rrbu*NrJIUj!It@yZ$ zo9sLYjeKz0*Hw>KQ&_x-5+@Y&`v!wHTRw#7#a_?s!^&@mbHy03BC+pw^~q4u4rORV z;8+h#+a`%&(Iz&L>M6@C?B2x;?J=+$!Vau|nlSv#+^G z;>0iGPt+6J0MWNetDeB8GGhk@b?o^hrY98C-jt@qxILr_H>ca0y)g>EHFkGVp z6xq(d(6I>)Y;9-MF{vhXeWQNSRDlvbhKLsz$SV@=iYCVg`76iCd<|W4r~tHdu##r_ zz)U&({5RDu;`B_(?6XNsK1QI@e+PQ_#^w+g8flV3mOQ3LpEmU5II^_Cg=gX~&XjQ> z^&Xe7&G8x?;U4dtQ)4cC<8(|gI)y>p0l zKK`b>5pZtp_fdpet@giFG1w((ca0BzIql~aIkHiSPffL3kVd!;4m+74+3KjFjKS0F&gc371zhLT_;7?b>e;e$CEP?e9bfH>&sL z(wE<_$w3&RST{FT3$_cfF=W!9(*f;(-${_%lT+%J^Hn+XicG&KgF9$^B%l+Dr;#6h z`x_5G{TF}g#lQDsfAWE!+TbMg9TrQzY>*hmm@dY)e@@&?tT5?QUiE?WLqwlXPC+7fU=LcimrTA2_VAO#c&Ltg0Q#w$6gv4e_a{NPF~Rp*sBl!#~3 zJs+=!Ll(KhWcVa*0iUX4ij&^X*Hz)5T*NLC8jfr&lCO0y{sO)=g*np0L|l@G6sAV*gm z^wiBR1W)V*4;=x$Kz>V{T&%7FVFZEklWgPAlLq7x7v{}i+4lGg9*7>WG)z4Szr~ws z=C~>H_#-RIwshq1e-mGl)3j8g7-{<$S}!~fPSywGk3XJ3jr^dHL1C|b30Qx8abSDI zh&6H(jhRXewv0y|V3Zxkvc z4HsZh!9U8LTt_DIHlMRgbkHB)InF^9II7OSiB&I9X-6d#bCEqAsH} z>C0S&XQdg%!V5F8tD{h|MXY1`h^voiU=B+4GuDK~7dH4Igt+r!*n%mGP*O8M ziDtIAjx2h}DHTl1f~Yq5;TJ}oa-eY`0thY?R{$-r%M#XbZ6{ zO0sQ0gIyWO_+io-lx|Blw^ss*kFe{Z8nJ`#o$oM1m6js4Jyx|ke$gNaNj@%fb1 zuGVQwETs&-a-7SU+G>2m7u%4G--0JbV%Kr~N4M>U6S%~cSz%fIl%^@<785tnT-zYr zlGi)o8x`X`xY(qKd^UX34Rm2uEVL9TXQN1Jgj+s)c`FEL6D9iQaT>WXa@ZjYbGJah zhFaeiX9Q8)4Lf%uixs|OBkR^newv*1n_~~cfG%XTArXI=#mdk6MgQfeA3gh{|JEOV z_}bV0+6#WQY`^iJhnvXzbU()-A8sb!Z~v!1d>bQuEu!Nmm;UKfWSf%fLul}8cz9%b zm3$ptfu)Zq>=hZ3*^1w3TmCX0GVt%XE5G^TJjst6Um=IukriX(ZWlb_eg{xbump5x zq%pJy&I=3{Q>Q2K7oC!7$u6o9@ea~zFoEyS4LiFiEoIewQ}_9OxVb1k1$8A2dcZ-@EYq-M;GY?_cJm|J~=Q=am?5 z2E6-0CJ}tT7a(}S_|}KteE2Ir_tP)_#E<-NejYGi3dl)A@VXf0gd#F5YZ%04U95dR z-@})BmfF6`WkeRRV7MUQU;Ed^>9mg%+2B#%&yG?aezU2xp%^j6g{1IWux5S4agunM z$Zn!8`cs#MTyX9uL(0QM)q_joI<~eyv<>av!U zS02p}5ka+hDV(&2l2P=+v-T80>83>$?un!9qIyCeS!-iZbv2mAts&5h2*!edwE?{) zP?J&%zuwm_UCu#%Pgwb!r6)_g?Q*avFjlj%R%CPBg~ow{WPgQ^q;mvZ{_N1oIHofY z!R^UNJYnqSwKVh48M}V2tSTTAZrcjBet5=;Kq=kB)2JsH)KrYJU)r>>iVS0O#}_&0 z|GiOz68$&E0iJDp)hQA-dd{iAMPpCy$hS|4D}L~25fe#$k`uWGL)V!C_`2;`o618? zZ0vJ8t>Xeen(FhmOF-ihl*nKPNyPER6SX)*TR9=}f|RkE#K}ZLa{9c|Q_b{UQ?ZZ%CK_&hJAQxOizkXJ ztAKbdVVV}!i7$Ba$lB~Y z++f4THXt&+382QcMnoBP_FTlDm_`*d?3>#Q5o{lI{eoZZ#uIjskWsa=6ctOx{4E~D zt0W4$rB0bTL%zQE=n2O2ym`fqc0R}N*cby z7o&EqXP{ILe>U|(ioqJc7_{jaF8(_Vh$v$z?5LWyFQ^Z(D{n|ke8eBF*fil`u3Gx)>9>;j}(wQ zH!yW>f>O@rI7rM^v+i(Hg!otAF&Y_d8&jn7$JoX1teZX+jywhtu_*K21-)sLNKBTVypZ@jps@p+Ym@UaO{eKjSaFb1A|O9{LNo} zi!4w6KYaFsKlu9}e)ZRW`Ne0Se*3{Gl#>r${rAE@o#+$)T)XgHX7A>8f&F;%b6)x9 zdM4`+-+AVn0)cnTCz8?lJZJs$4ZI-!wY8TPN!M_^o^+IN?|4Rq;XKTYsm4!)~Sf+I3rKbln&iE@MTm@uK zvzJhrUU<(%qIjk2@(o4=21Jq;C=Q?YK4*1-#&$o(rrNY%H+By2u0PS?NvQoDVb`UA zGoBoyQRQ5bWZN*Zi_1`1+xCW#q||!?7v=Z|ju-J^>Lw7D1Qi#H#{xf{7ge{Axpafu zloGKB<~h-d4fPR%jqYd+DfP&}(D$~)6BQ(PZmNuKXaoo41!T&D0X~1}>pt073qk9z@PmPAhhPMQ?%u0@Rwx9+tX8nL*u{qsBnwhD$Yj z6*Og3@}-&83@y4H)5YCB_M&7FrjPJ*hPc)RiP3#ZOkFF)X3Eq}(&+m`86V(=I`R}) zE2{%5?KryBi5D7?88KvWkuWl!cnicai=5^v$T~s^xHD6x{R>rj>>$`pUUtOBehv9@ zxMGkxb~Jdk5@p+y!nCV%_+D4LIyff;21|!TB6@a(^~&|BbouOSf+(ZkXfyuz?V$r7 zT2E?&iXCk+KRRz9x;DiiHnm&FDk^Oh;|f#6*bGUJW^zIz;Wlj;nBvSH9zRWtpIV;9 zbnS{k2Tu$agf(-^(`x&FZP?Gz(e{d_Qa_+hxdr81J{SlS_@j#~bpK<`*Te(53qKeL zn`#sE30`=i3622#@U}f*%0#@!8ILPzA8~Cvi;N0px`FS12`QiTz7|w!--LNfV0v?I zkoZ|Z5^=0N9>)IQpHQDRZsCrbGGt>{53LtibfkAfm`G?fI&HJn(%4VT9nYG|E-`9M z;vwVghDcE{5vF8D%d~Xn^7H~m!jYNyaZF==u%OV-_*fn}F(F6Aaw_^lU!^?K6il^A zkD=Je<9svi@;6V`&nIza|D|az#x?=?$=SupChmG&%hV$p2e)#MU z|G@9huao`Si+7%X{=mHF3;+7WzsEwaY4{01J_?Y&rOt%p;Y2^)968oM&J*w_Jp6G@ zG?F_n;4zlqrs%%DPw^jnR!fc7Yv3@~iPxAzcoW|?JXUZ-yh--4*mqQWGt9Ik%xzP_ zD$V`dOirG_L3a5*jq8Nx6l70BoJObSYlRsQ<4*66sK+9J%zmcnEF65!iM#3G5s2(gw?Notvr3SReT(cnX%pG!`8HSXT5e*| zXF(aT;~)HmVw{98FFP+b!qZRc>xcr>Q?NX_I2p6?$wlng9*opSwWVWs1P>F&Fkx-= z@I#}_Ha;DZ6tcdB)wV1>lA{8JR8AqY_h3+7FQO=iu8q6=;9^&iA|QeAp5)lu!nv!T z2Bq<(A9{EqR@g6{7*7vq8q`6s&eKbuV$Ph~?k`qG{kV+Yrn6u+ZgB7v`1qKJN5r{-sOj>`leR?)U%$yC*NdjP zsBq3=kyeyfHGIo|HsN8i?Ho2L7RE_CPVYE$L`gFN%ZW|)7G6#-U z#~&0(lbKUSo-vsqttzKF?PiV*y>LbqS8F#pV*qMEmA_}xw!s4ig2;gp%YbrG#M=rf zR;zs=wy_(_5w4r@WiI-*Z&0M%oBtXR+kT`U;OWoo&5*C2C+-2+@#>U|M%y%P!MKOQ z%C%RE0d(hGL^vUwcviDEr*SsYc{Jn=ELG*vwUV7O^}R(TES=1@XGdF19G95C*}LgW zNA&hvF7GR=BqN|FuK2}8-QLt$p+|iyagE^{<;lnOAypmw*=(~6#tiEVI$g(bl#$p! z7qBrMy=fR$@ZW9yMayv!1_H`Z0EyO9#;J~}-h@rhRm6-Z{yuO}KC+xh#$SgmzH5UM zfB%c;1!Riw$Y5p+pBw2=G6%||Lj0Rr3LdE)a*8x{4-`?Y1xJXW$j$NYc}90g_6da_GndR$+L z#=A8XQ`aXbhniBYfp$2EE7CX-bz@Ax@;|IVPCJZSj&bVAZEU6At*wm#k&jZ_GMX_l z$G!0VexLD-@vaP=m;X(99G0$Q{liPJhbi>Nu{72r{_y?SOQFZ+AVNgnb95{~Ko?r; zicrLlNr98!KDg-UsKy>LKCXYh5yQGtc`*u8)NLoeu%?sNPKx5_YxQdfnU0|&d_2H* zsJ1<^%|*NGMfRMbbiL2C%XcdEEwZkA#v+(TGP*WflP`0NI~VymcY2wR9{c9TA7ti1Q`~gJ1$IPetd~7)5daqsfSIXYamjS+;x0#_o=WXTyb5+E-Evd2O5Rtku zBkwvqAwx>pr@M^>?R`xG<_f5o%A@*IwAR5Qy@prvmt&xW{#%t7BqFzQCH3apt#~PX ziSuukpLz5acUYlZ=ytup=f^%>u(Je2qO?aRDmNET@vQ+^#^y)kD+t%1ABi_;SKm*5;3;q1DVD$tDIX(}= z-Lt$-Gam=wEr9p)763O3D036w<4?Zz@Sp!@eh1rnQN27hV^W$gRyXA?!i~$c`>zRtL2g zjwhC(?THor1pH4z3iLRB4k3ba=Aav0(S23wcq-HWw8+Y%5ZkYO-3!~uL(67{LUCjy2CH7dX3W6BuWZDOi+ueE09w#bnsWQ1_B5q}(vH>4;!(M<0i_>zE&_GD zS|iE9?)Y!q?aU@z*NYN(+;rUFn$oBeH5^qveW@EQ@MN<*o{0?aM%9= z6?d#=L}pCx#p}UJA^+RfF_(Hu22bSL*=rYs&{t$_QYnobRWE|A42D_SNISRRwSl#1 zFAx(C#cdP)6^YQXnSbTizt%&<{-i@ooez8Ur_h3tHMtkU%+ET?$F8bMy=0AaCnDsy zQri@goM$THy9Md}a@Mqo&V)P{OVt7-(hZREyKBr_yU-$Tw{bGo6TcIw4wl-8A^vc% zjSEj0`dm-c&)h%$++v6gagk?BrFF(&^n*)UYvpB+t=mT5mF8)_j=%8}!h!8>mj4}4Jp~iBU|4C5TnsGluoRH2`gFOmI zZ)r=2aM7!;-3@MX%>xs8wl!Jxwt*&B(n{% zu}#Hx4S8%KbIeE^V>dK4fZR0jRc!n3Z0&-zz^k`8HXoJKVr4@V`*1^;Mub6oslz?} z0xh(uV zJhWup>udgbkeTa~()#eS*FGE@QjgqoJ`Rwa#9ITHW!3Q-MUS!DwLzgb?AFE2Y1$?u zvSER~WrQBpSK}X3zIN7^t#AHSW>zn9x8i64@;Y@P-^O_x9lht*Lo)_Ix?rU8Nj)q8oYNV+=! zQ0fe7pCplIePhzHczSXg5l_4_Ay_E;a~Qe1nRs%6|NaNx<97hOmx=NozY-9-a(N5j z{r5g_a=puEX9E0Tes<#*f8l5I#ehHZ@WrR!&X;rKmjkln_ez;i`^KCnWZq#+f5jJ; z2v0g_NAOt+SSeg65s9b$`K;1uQ=i%f_uwFyF~aAEpdkZXGB?K2)KZ+2LL&xP+7&J* zJj%dNpkQZXeZU(}7*U?V32ucZJH{fiP`l!V=MqTcRjfDK5GJ_TOB#6lsj|Z$qccfl zL$*G<*GMamc$htKCBn2fb+&VWj7*nlgxO5mKN$c3KmbWZK~yl3jXp9Q5JOo9LtK67 z+4bNJD3sK5vV**~ximuuhC2#P_DPDhzs%$gSWfClI%SD65u{&8+{xX3@5m_@NMGcH z-?j{_7c9}^LeaK_?G3L&*(QrCZw1-dEA(hlAOSG#^DTqWJ8#x?1iZIjIXf2pRB>|BfpbwPU4Kx=H}hb_N`*M;7xqH* zqXV$ujEugCpEZO4NLRfWVk(eb^u&!2^dz$>OF-XkW3_^tS4okK3;Q5Dxe#H~ko?mx z+H<`MLq6W8V4D~}j0e#aP?uP8QNtS}>nOO{OcvNBCKuH@d~XU2BodgT|2hXKr{n4K z3???ro8yz~aO&dh+R+Ovo0VN{+6v`pQQe3(xXj=D;)=|a$~@jnVMpH*KOzk(Ym#ZQ z>LU>TO}&5gn?g2% zBW-h?4oTvTA92>d+|+MBSFZCC*)ICqbs@BE6Ze_`bqMf1UQhfH*gi?oCxXbbMh3L) zTbsBXg~W+-050^qmWRgq1{r}9vhi|F2!5$yYyrC}l+<;CfqG*Q3#{>TNuX^3L<>JJD?A$jxud&8Qw6RBDWRDT%9b?kx%$a`?a2;ja6 zX6?&-I5(YO#y8u7>~2$F7@wp)+D8n!+-!U{0zN>UmY2Wv)uRq?x22nhxq3^dzB)^LEq{}d*MvfN3Vyl!Ch0fPo?1%$ znSe8S?ivJsr0+_&@VXnL7{Rykz_{bwO;LWV_qg^*_7TwA5f|YuLHQ~D&cC=w-8id+ zBU=ueVawXJB-pBrY8SVVobi!`of+vsPnmDT>4$j};OAca=^y{&51)Vfjo8WLWKHE_hY7|>Ve0tc z0V+mW95}eU#-_r_eGm3+fc{3_h1erOD%RZ>>>^NVIsr*xCa`VP`-r&USICROkeK`W zmVz;go+fcFymMlTg_0=A>p?6;S38%IGT7G)5GP@03HBj?`NtH=Y|5o%zW`6^M_>yq zz!B1y(L*~X z?W;`d2n=k5i(y@KK=3VF4rqUstj0;f(9zdUjSnSRlB5X<^~MM1s6a^yA3Cjb z{FX}i?I-c+d%#vM%I)F-cP+p#QgJE}ia-OZm6X9@k^r7Wtfoi}LhBF(y}0m}w&Mp3 z6<8U75C72LP&&Ic>aR1BrG|tdi3-`x3LMPAbu!7tmk$CemN zeDEe77q|x$QwQP&Q2zDV^+y*kBFr$3Cl+Wo#O=eBQ>S-m199orIo)y7*x9Y&lM^$(g@$X1Pe1wkvp@1j z|ILTL^XtFz;`#HJ^V&bxC;f~+Uk2*6O!|up{=G(l)-N;f8v=Y$^WG%w4WTy0wZ~>- z8&5kg8*><&;BC4}OL=R)qMIW~nJsNSiSk|MtLi8o`5Vxo4f50akel7~UUTS?;A@q; z=4;G15T43E=ftC*;iDaR*^N$TVWAt?*M9~BccI%kui=Xh?{z+`r^d(BYcLn#Y1D#n zCfQ1@O#OaLWl&#f%j9fmEbWro(%U&ogv}&*O^UUIZ5YaA_iDbOd;%HW+?`A8nS882 zPBtb_DtvB+&(!n_HMoP;yJ$=#Hg6ViM=duH_}mR&42b?m-}?H)FZ|V?dGQlJ@uwbM zefCj8#p^l2W+6yp`>obYF#3^`4({>=Z(dOagTz|IQ~h|;gGml@#)^ZTdI9B5C7)|b z>P3J>gKC?$p$e3z+}0;Xp8Di~z=C92T}p*!7Rf|XDo_~M!?eV^F$vj8d(2Q5QZ~zX!zu591fH$1kRAVfQYEcp0#jN@oLmH5 z6c-!8(9>Uxo!;D`oXGq6c22qoaDDV3tP0MtF`w~?4gG8YTBg^76EXGt>{@XK4#^~> zlA@dygi`BKq!m;@=rW0ThSrEGXh<= zk<&O{(cgL(pQ**ah>VxUfIuT55q9vwqW+xqGl26C>?o33Kd;4O@Nc9(uO?2hLQ)mfa71=l6}H&gwx& zR9pgMypqK>y-1^cbv1O3n~2byJtv}E+uV5nTpo4CE~Bk)6tq8yu(6{Pf*z5iylTtZ zmsBk9u%C5nY|?3KS2=zOA_V^eQu+1`d=b(p<4)t;VuRRw>}PCb4e|*r4FI7&fnpVy zlv$cI;5ykg3<18)d)qLh9R>YVzPn-pe^LN3*~UkK0U3W*o>*vW6w(j&RdjSECpgY& z)*Nuyh2i-?3cb06pN#wJobigRn@HtHh#F6RpZhd)&UdFXSRZ@~$~P#8TMz)A0d&SK z&?Ld?6LZHg6q}H3GrA-oHqZvSWZa`oBUK`{RyLIO_?SWhowbi{#68}q#~V$F2M`DX ztPiw1f77qP7`xE+ys77CjNOd4`1r(4u~<8>?R*a|Zfp}TPl-bN3p*sovn9OBUkF`m z>KBv4j~=Xl%!RBU#t?%Z$0N&lVO>iDjlql`e886;%M%kS`oLHND;cpc22)Pm7!a&7 zFUGA-?+B-uAd!2TZghpgE=@HZKnJvuU6shIGI~^uk@cA`(xRTK8$B@Jbp$l=WCioy z3nwe7Z@`G?Pb_>cYD4}a@#{TDA@e*Wo0K07dPAhTv= z%k>H$N8WGpw@iO!yfdafzX*8WOv^fve&ZO-@#gtEd8nB(O~takoeE`$9*dI0CqdWG zl!^M%;XSQGJ86|Rhe7#ied*+z?lRE6s=hMo+*3P?`&y1d!B_P)k>3*G4QNA3d=tb} z9CSB1I;U0kj4E8~L^)x<4PXVn)1CGN{8Ej3hhDziRGh{4-q>=bUkm1v2jZ#poqaFg zEdCaX9kSSRacmTw7<A@@qHE#s)x(s*Id=sD(#+v|n`rn@goSg3lfR?`e zcD@tf=YRfZUi|t0@FyQW&(Cx`f5}NmdY9L?+*r8VgYGPyWMYlD|u&eWwt7;$v$LUJmh*9Yh~rTBKK;3vF}NtM#>UUa0kK%tT9 zb3BB;n1ePFHy>y*N{4gPfpJU9D1C^Rj~WYoA~$%rq)hxkV%tiky4@F*zCma>69aUh zH|CAC^4ayIr?J@cse-JF0%}apPy{eTg9Ij?L0(_C&+A2{kTgvub=p)$^mQO(jWK6K zPo|%Ag?2_kJBvqt4-T@aONMpV2LqwC+SW_5NltJk6vs;OM=u3P^4<9C%U04 zf#0!k0v|bSjU6&I-9_$<<$g8m_t zO8=>p9?-Ea34PZ9eMwOWDoN9(t{O;&UWMaM-)up+jH;|q=|r&?&p=$fEg}W>a89Xp zMhBIGL z0y}&{2iw!fp3pfY!ojy-&u}sH%1daQSOZ+2N1s-ZdT~a3sext0sfgRwu9KUWjm?1x z0f0eGQMeVuw^LS2+4?(@5ulYLcUSRDL#Q=C#d^lF8xt&^R8T2yX=fl(ZMrvx_` z_Hmi=3m#7Xz+I3wT#zM|SAULZnDA?B%p^NFQ>+J-(w!7-sW}QM;G6#g3OU7%h|NaK ziB%N^C`N9}>VTU~OtFby;vM3&Ko;j~sN&OeQHbw%KprF%(yjt$4rc*0mLCNXR8g2 z)gE(xy2pI^s8~*6&+OJN?O8dz*cs!;`2d^tVfWIBVCv__Vk)UB+fw$KT+nE>4;Spb zw9UI1BVQGzj-Aw=rgfq8#iiEXxa9R>yjiX0^{=BxP5d$G;VBO(Su_e~8LPF7UQ4bT z4lF42*+`Mo{;b1F+9?Io0}t4-n}DM3$6IpU@Wr!FpM9P${QJ{C{wE)Pju{)d#&<8-c;u8W^MqGBX2!ldeIvOr`K9QtN54h4R>7_(!0O>wXaQpOX=jBh3Yn- z8QSP_6TlNMY7RCIiVUkA{NQA>vB~JnDo!s|Pg*2RsI1J8Ab_~Kw|gXLdp0{9tm^8k zw&P^TT_li>1nnSEVIhzIuA`SaBn72>3u^SGoqfjG-cUOF zI)^Rfadfr>+KU&-7%6^DAd`ggdD?lYPrJp5lA?gr*O{F|7bUycpLlztfUz$t%09&$ zxm33o5O3_@A)kSvQY7LG!>K4>gcVw{-$!gTlxR>EZ;8`NR2>iN<>-d5$odjp+s_n37W%Y@VlOtKVM9X7$&*g|i;%`D z5YD!lToiR_R#hAE?$_Vc)~@Ro7Q$2Kl3ab~(kvomNTAP}%YDtRZAcftZO-`+Hh9wr zr4)NIjuB*;GxMh!(M1RvBG?#A^AIN~hb&OyY}?fo9$ozcNBr6=L=Zw`F2U-YLYH!R zC>e9jl(+U&GXBsbfK1w`9qdUJSzh&mo4|C<#}a%pjv3XJGUPtJMPO_%oqEbXp_VuN z9S2mGMA805C+n{Uva!|Z-pFL{6C@cJErr0ga>twXz#B37?bZG(<>_d0KF z<(lK;N>mo5yUcPiLfa!HJ3HDFe|fX_mF)=uKHn-ykzF2)_^~qTZrN#3k(R}aA54MF zN9Sm0u5tNAu~+#%vH$3&{>;N){+Yk{;^U7$d|>V1t>ixO?`Qv63;mhDJb>gO5wk*nQH zQ*QJ|@+P0+Ye0{rE?G)z_!zy(KBaBDBJ#wmn^KFYei<}UPvNVX{UdNj!x>>mWR>||^^WjRRIoLu!lkO4-F@_)Mz#O;9V3H#<fiX~-+brUr{8$zZ*d^v4Ioa^qGF9?#)4|T9^`Y zB>Dsc2$Dl$N8XKLWFOt=|1Wj#9<%GZopsGQ*J zsRyKz2sH(vV!#8UL`5(rpeY9{wE;W?DG)G$7!(8*@EE$)__sieQrOcd#KNBKUV9zp zoXhL?yT*9l=Y8k*&9(M!#cVDFB@ zMH{5tc&SX1pAe{n#UuIn-abd2))hBxbN)_j+DA@b)TTV_3Db&@iYi8Vce@K|`<(iC z!qkN6i~W`LRNOa)WBHF*vDa1khGKZiY@di37aD*^XfI^D&u1DBDou90oeL9$PKL0k z0dI8D&IW!Gz0Zkzpe0ti=ACfDQl$4uvCXTyoKTn|Y>TGOq>1bZCu7b(+DpPu-&z^G z_Q=~;BL!)(TWXZn6YQ%2Htj*gjvv}R)iF;!@oo&E5Vm>Arav&O@v&bAJaknJr1O!=v}r)jCmqyhN3oFr z@z{iweKGOxyh@d^v&9pamM4*J7Efdd9P{KREmA^Jw#w5ERBPh8MPH@&Q%2=Fvz-$O zMG|A8DS{N3!>HV+T#&4Y_acpI{?S%BQ`Zo=q!R=_MrD7FLuFVPFmZ%!{M23|V>;r( zBlcsw$3y%g2De-1Avldy9Gk`w8lEm1505B@lnkzX_F|;#IYjvc-!LgdnT`LOqvs$0 zv4CiLwsI`&u<85YHfcvChT2kI{mcjVd17993S5K`uU&ajNQ9ikT$BRhd@63gUrZuJ zXP=BAO8!rkKIa%nRhf9qkPLAG5jQqfr5~au5vP5ko>qfD?b9P?ed#!kzaWhbH%DV+ zl-Esc8e>ee3`?b7O8A-!`{0Ow$6XHumX9}xv}vCa27Yy!vh|Bc8k7I!Ry_C%1YX@k z6niR@rr5b(oW~E;;=&vZZE8r&*{=HsZn<=l3c&Seh3IVIfh>UP%4HwDqm%L}&f#fe zgI)N!Ez(V#F%@E;E{}geQCcMcT%NLFpP2n0n$AITYT;T6o1VT7mfzCJXy>NF2lLM z`diWQ-5GupfID*eK|x-#$qx94*KERx?DJ3m%9Ee-bAHyR{@vgD?VtMOCtrW^p*I2e z<#rbCjCpo?#-E!4E?vfvm{~md?_|&4S5F6g7()8N4@-SGX8iydo7uVPFXmK4ZsLP` z*w`^8d`gIIVtg@k1gIBfow+#+n&0K+J6`+)tU<~&SRcqMW}&eX7Gp`3 zoPS43(Rr?J3>6Gw^_b)XOj^~{09e_~wt}>I=qQY>P|S{$xap&52SCO`+$oOZphjQX zrzPM3+n_R%29~i&|Ip8US|StC2$Ps_ycsk>h04AvRN^D{)DUxFy-!~Z6}H4DPK(Qi zd1DI#@dN?}=8!~X!#w{Zqy5tcaMFUo=P3a`JF^~4`T}0LoyQn5GsDTpy95AIO=2Dz z4)ZH-%Q&CYAiFN`en+=${V?C*MY0D_#|THnn9mNw_Ej$o()WHxSy)0L7UnBV<2+?K z$Rj0q`^gy79@pc_nG40LEFPI$t-=bf-Lq{u`HHUXM0TBu8hJANQCBm6!`xS%!;!YI zm-|m=@v134JHHUqmW_`#I~Rz#0UiO2Y4!RqU z>z=t_3h6dd6l2Czq0bRHhKw!WT}6H}>-q;OZQ&QH)neEE3+Ndy;Yu*uvg-oKqR-oP z+FnST4UT=6r(?0uZ2KZ|z9Sw-%Q2crCU^&Y@sU|)P3agqCmry%t52H)GhX&I#*KvY zWX3~|jB11_OOZm?5Z10lAPKS2KQ$o$;a^UVQ~2F@8zM{yc8Z)mW~CjI&#wDPZh+U+{Qo|is2)(j}<|Kx$UPq52e zimYRj>HxMMw*eqE1TlSPY}s)9<#6n8R3Nk+I0<+5QFqh2Dm&l?U|qWC8AsYAZ?=VC zxSnTU8OM!rwPRIy=R{P7=ayAOc{yxzetV4LCuMM?TO10`1FyzJ-(%rhcl2%63C<64e$gq#ynv8R z6785aZEWhcedIv+Y}++Dq!bR01|5G9jVVeHmvmI8Z~m{B~I{_?1&epLxy=0_?JBT#@mQf$^9dKGw6n ziJ1UjnQT`O7`uc)3DiXgfOu>-Ef{k+bF(_NRIekvOV$M1b*1u$X{Kp)t6_x zoqV$1coA*;31I5C^WhjJ6ySsNm8g_m>~nTOU-v*YG`X1PbsNq+_PaLw8V!H`kEi}` zyZ*gTf6dqYh$qk9`+@Aj zS!8oC;Np=#`NP4f7aa+R*b<9jW^%MGIgLoUCm4<23!7lU@o8dFqAjVpZ_hZ|F_AIZ zj?dUiK-=q6t|4>*W6@y7vkEnsWMCsp0!qKRfTJH zG@ksyna_cfXKY7ja*kA7Jq5$!G&=`;NIDq5hW> z?8K?Odi#&M2M374&Dr=Q4<5{s%z^3Il#2m%`9PBYG_1uc6Jr|-(%tQ3qbN8G^1)Q! z#g5i&=bzm+3J%EPg*Q5#QpYVg^7-f(n_1zHb_yuoabf(!!2$Ig$t6sr=~u=fT%O!b z|1l=lMj{pAcAD9^h|hTFUs8Az065nS%8_>5I8h{JsW1ZU4bFsk5zV%opzw|u)F+k)NFZJW~a&_2NM^+9ZX`7MwnT)b=228Fc z9h3h@J@QKuF~{11oI?TFzr(lv(74+-#uHLwA~#O>%GrGCjC+b_ZDUv=8Y0ZLnPBD& zRi?ZBo3cpSWSKk|jvXl-rmEY|=dfypWl|crb)OE!m^O%ydfP12dSrA8X&qgaA&6B- zm$%q67zx_Q{7($DaV;i?N+%TZp&XURzR?`>E%M{lX8L*7C9E*AO)yAZe%5aKS=qFC z+s^p&8ZL3+)*FgoN*GEsZKub>%=@mdoXG3an0GA_pO_B!7SdumI(YN(Rb~LwBinW) zVpU~BJ^=+TM{@Q}r4uYn6x&Yn^4hlw8wWU2V@dA6=*C5rZd+Vp@`(dF;2pOx;CGm6 znM+FEVibfj2H3M9&xbzSiw|gbUW2kez>QP9x``Dk`V}YmNs`*7sB5BH{LC=~*v^>_ z$rwhj&hZ}J2s{T{ash7QcbwUflo99Cz6{q44)HYxI0JD*9(+AcTU&EK92?YK^8=lE zjtuIu!a>4H%Wm;gakzUPNgT-hiy6CiZw$o5C&^*Le~xp;dZ?KAIq#(o&IW2xTXC@) zJ^L#jjU$tz4@!{bAHsZ&eHxl1c-fG<7HaG!vgR6sBdxPlAxi_Oo<-+M=NrH~(gtv) z3X^0i6FcXEnOpQvaLh^Ox##A@ljNL?lJfvVj2Mmg)gt$o`?=|ohaDe0d-uUtef3v7 z{Y}5|H+=5z|2aSV(@($uFF)adA{X_(Wter)i<__xpRv>AINnusI4bgyt@0aV|MVIaVM^Y9k}I1femSG zTRTLpVz9t1Qa{Ot^GsdaS8M@)gaOYA$4#6C?2dNg?CpRH3p>r8b~>TFNMMIN8Ex^9 zVRf7Cl3g$_;fG5(<%9cTbAPF9hwc5qyEXbcMMRw{pN(Vd%dqg<9J5*AF=b~l1=m+= zxbSC(s^RO|0oi#U<-?!#1KwZR>=S?fG~nyL6%hNplEZh7U&|W;aB%mWKOdN{13dUK zZ~u)?zWYD=ZJ++kPyO4UeDL1)hbtFM+41>4Prs*}U*crNO;GNn#FiL(;=_*1MK%Xf zmVC;|0^frYPeb?nNGY0Zf+yp91d55Pad-A{7c7et^Kd&eIPTtNfpgJ_*b6}Px{rta zKkPdZublqLQ-sWazspH1qtXal+f0qNl~-S>(_bE(@fSP0HTa1>ri~LC^vZdfLLAr_ zXL$DvCH>$$)*u_(s;Lt8A;X&>N3CA~4L#CPkRj#CJYGqdQj&szlO_u?u~UI4jZ`~I z%Q5m`n+o%RlY=86bEm^R6*`HOjIrweiNVNI>Un2*b^{tn+P%(eU09y z)y@ZER+C&}Ys{)$V^=K=PwN8j2^_pTuVPViz1Agy6_W4%nKDmX8S7b3HImqcwAIub z8Me%QT;tzDk3~@6Ohh+T6C3#aL!C0|vbVIXDf)cKx}mUX3}?-#zAUR*?zO11L#x=g zpN<&l^Rs@UO5hw{x}KmnqS6XaeayNJ1d+zs-pIW$kG&kV%9eeNSFsckxW%L zJz3@rxBeaZvvuTQ;nj!-FJn?Zz;Op zFkdcD4VinhZ`3;5pbeFnwhhFOoLrN17PiELy#}=<1VCx${$mdHhDLOQZU4vKdZg1C z#+nW7w5tybY;jRmimB+|V(gE;iU4f;Jbju_^+Vq;2uC&sU7GVeTR1>!Y*h?AVAwc5 zG%w}09XSSZLZ472=CL8#^+}uM(E-$%D>30*(eG);wretu{9kc;xG;^d_wC#iXaR=|3DOt+^SG=aAqa zDg04CZV0^gX3B4R0|7nqH}WUUU(dry=P5S|n0TCnB{Qx#2S?(@18L`c2EjVvno>V* zu2xWrQNJ>yzwEO?QQoxtE8F_!iz63yCze;% zSCtzZs%QN~&rJb#w0zv*Qtyu0 z@8$4!H{ak!K)!qPdhp&v$j%7QTW`Jj;NADX@Zgi5c=O43{kGro>3`x|e!e#W9(?%z zgAbqa%2iTuM`n>l;?z)XS_H_#&ezUguy7z?N5*y*yX~khd|7n1<1)oulq3PgoP)4K zvQ1C50`emfi<;;-80DXK@f-JRD*K}_ z4;7W5wE;y$$yif3?kZD;n++fOQNhR+kKZCANs=}mX7NX)x%Mg%b&ST&KKJ51NdD6} z`qL`b$UKTzu7Ch%6ruIA{g7CpV2(O2D3hSd#{J_|T{LhL*DwIFXZ*JEn=h z_9);XKY`F%U0KwV3^8Rd(#c2OoW4#1#D8-neCpF12nAP6`%M?&N=9+`P@cegBXZUx z>QU@^MElyuJ!r$aI`|l8`(Vi@KQI%eaUGpDVQ*5=&a z8G9ABfj+8dx1Qv!CF6SGu((|KJDgGhTX(y49|ndX5cJ(swxy?_2Sc{)Eo)=2f3Y4P ztXsAbP~xzEQzqZmoO(dk@&H<|b~u$f0mbQ|)}(HlV-shvdNt z-Mo+kMW_$+kfnWZ1RX<+=nLBeZN@ocNs~zaWrpO89m6x7Hm}F?7G^A?+Z(|?!L4C9 zqjTBKUXsoRWAb>bTf9Q5xcb(a3!QTuSH~`Bu@l_(hAwDdV(+*mpLM;xRC}MsJ4Z%cO~u`p*4@i5)$%{j{z2T=}4hR(-CL zYeJ0>E;la*pD~13hlMc8E~%ro1%n~`1+e%-BBEj-o0L+cfx#aQ3y3se3Gaqt&(>5_*I@c9M z$hh(`MB=A}quZoznsTc<)u*W^$*FitOQ0*$aIjk@4#zk7;!bog6&FLk^QGAQM71LFhfJXESlvC@nMp75bhsz=z2H*H&VtfTDelt9%s>+n z1Z9>D3pVw80;o;4i@ysvln3?|g)8V)WsL5Up}J4LzRvnBZ+^y5{;0MtesXEDVaId< zk3BiR^69H<3GM}dmLp^JEOLJM?RmlT_>yuyk_85?^kH7HF^T!YK#z4GRqHfMW42g3=Z0OL$SWr!>y}BzCJhKu(o~z8p_Ds zB~$h;wxP1$^^mrvhUE!kaKSLg_9Rm`62^x9)Tmoxx66hR9sp{2QeXukiSe$ol8%jY z!~j@tdeVbFhX}10XXXlTw`k8(*BnqPPn;>cRt43A#jH2_mttb<0nR5FhQTIW$@)qe zclsGC>}e+ltJIISPt?P^Pc}LQf+IXFy9w>2O6}7XsmwTNoV#ZCrU30502tvUAA&yR zj*Fa8;jT#GHKRTBV?eg27|NUoBF`_6M9A7fUk{l?l*ey;e#m|;&v2+CoSOim9?Jz@ z<@R;>Hdh$~)~?Pyqcye~(l9>b$67JfcV1UZdp3<7@u56Xh@Co5U3Y$B`SAEYIrCmY z^Z|R^0?{~`2P}{5UqrJPA0Wz~SS(Oy3`#@4lc<|KnFPap;MhugCINE(7j0F2I8yP= zo3$Tb<30NDM2EQ6*rb%qo69uYI%{_PX8KD}a4Lz~aY`{cbFEC<$7wT^cEZK>FbBOR zDIfC>8|w8oTk0#th}xM+k`~3Y5LN><-6Uc@ZmqPc3!@ooZnBFMEqH!@J3%bHYxhM z48(Wh*Y$4Pf7u+$ zC}W`i^+DjlSRseQZA9z`0p;V|rMNnC1YomC2UNwmY<`@TNv(=jRgWJYD4qA0rHOES z#fZ5zbEWHDsc>#Q&b{#B+hAo;hu`ORM1IUJZ{*;wfelAu=~%NR@@}Of&I5eR2vOpI zG9Pe!hDOwS0IO4f1ESgvEDk$3$s+H#M3C}`Jr)UIxWes)y=`vf`pu@EBFi}YgVEXl zIt1CzKgcyj9s+*rFaFjizwDR(;!i*OAb;lXwdehI5l{2^q48X}``!N-aU*~WfB)oo z>W}zsvW(Bled{>m?So6?IHKuu@$XzQ=*WoG|J$PJs?j&Q>8C5*R6YvwQTpWsw`oIK zne~rLv?MqAnExPIZb(nn`-nfnZ`KJAbUrgF-dcT8 z2ed2TNqAG7058&)1Q*pSOLy4aAu{|8`OJ40_N+gb7rXgccP^jx=kf`&{g23l3JV4C zv8ef!onhhPK4X!^{Y4Hi?8saUJx8B|$Ol~bXJ29tXtOM>ooYs0X~6Rn8|CFcx&M{4bB*k&!%xOmHi!hR!;;5nUD? z7^1tyuiZ;IzVIL_ceiT$`nr2{kbgFY_bwyYnAF;r-Z`lC)cjv5DT z#UGf;!0rAfFdN2yk7>>~1BInYeA)*`28_*U$cB86|F#o7;7cNsL$U>6XK2c_jnr1O z+{ni(dTf%mXqDjX|LVGpEb~?0{s1Ztu*+C|m?!I&K*B)Z^FXhb?t3&f82h(HeOA`- z?mW!cW^V9xhZi5b|KNvz)#InX=GXj7Pk-j$^V2``?iauKgqw4`q3`$l^ZQ|3*uRmn z<)WX@<@^7<>fbk!{arG3!6ZC>q@1zqjh@Vr%sb}EaU+p(B4F!)+l=iYD}VJjx9)H2 zA3LHo-27trvgD%sp(uU1{Q1p4Ogpu9r@js7Zt~jI@@#RR{EV6ML3|Xdn4RQhiyPd_ zfO{m@cGtC-ARxKZC3^`_^-J5uZGHyaB|GaaUqCN%A>CD;ot#9Totgtpc3PhD(=D9C z?Zv-;_A4jV+$iv(pC|t>asz<30CK_49amoQVc~xkL+V_xdt)F6xHsN-GcF#z{hNOC zZ~Y(tz#sf0Z$EsaZvwb`vPjKASjSu#5f7myT^8rrkrN|3yF2$B5Nty_la_ce<6xL_ zcYju`@Nsrx!>~JkP{G%{^17tFu}UztWT_HPdzLNZq9E<< zIQ5AP40qwwjFZ5Vq>mt&BJS zP$R8wz=uTTpxV9%IS_h+;R#yo=wni{_QkSAL}wl;W#{00#U>{JJZW&>E%M8koR zY+~Yf3m8YHA8eK5Z2PwkdV>Rf5`l~!yshKFF0X+2$N|~8%)ExV-0cagmyP~+{znWC z3&2%^V`PMfvx`LE7#7vOr=gxCA`jlaq>s|rmP5dgdX!3zj&k_^Bz6xp6iU@c>+7J`TGFu)675TA#;oiOaPU$uXMjmKKu-) zM@$>Z{M{P~v%WJvIwjam@Wg+nioOsB*KQ=ZB=;YDH$dn3go4k#0dO2oiLsMsOaZ42 zte??2Gi_VsA?OA6tZ5R0OJd9{%pB+V4>c+%H80{}ezE*`O@89EQQFV=SWbH}#T|1z zYkcP~gp(LYP|m^fqhVhl68;@7JVtbUFrjV7n-AFJALD}@d(MaKXU1>-;m5Ux@tp}s zG@UE>57sq45Ty>I8V!};mrUo8V_V7`@_Qc zBa7Flor9iV5WB4x@A!;)IbuWGbH2$1B2g0~5U?J9qic#>0yqJ%$%ptea7OPYB5xow zPo@vSI2wWm*KUdT@z^kl}e-f(Px?G4L|JSvmHm2XAKnIpz~FFyF& zKJ^oy{OiB&*L>#3eeK&%-+AZzpYl}y_4%`Yetmc@__@$$Ecx#K!^r%LWT_uNOrF0) z)|&wB(>@I3>Hqu|08tYtB@GH;%7;f8o76UHuDOhjbpuB|5ebxHM3z~DAJ1+=1@{G$;! z22?-N=nlXgqJ#OQJBk!Yx6Qnj-`26A^W6ieB!Ri%aeQ)D4pk5Q853VqLehncgBLYl z(~pQJ1YFSjgr8UZv!Ju6f4~iZJo$eX8H>dS&))aM?Ss5Q5ODbW6#?F+WFppx)SgucYAg&D zqGds7n~)sJmRlV%;=?Fa>ADnGK<97=7eLxmzK+|rZx`%<>SnlZ0*O5iplW-h#Afj4 zJ`e_>L9PGxZ~Ko!BE1ha^njWQ5P2Vs#FpjhXZ@P-U!(qY&W5!&E5#%@f# z&=WfX$`siI&Ox6xZhK{|Y*n-fgbB<7DPI*QZY6`5-< zA&!IT*tx~gwo5P^`5Zn+I6I;9EgU|z$$D^5Q`j`FwrZ{)N(CB*eLwvju`Sa!k=X~b z56uR3P&95Sqg(aWzC5P4*%j^f-+<`fLl1A}KXv5zNSdrIvF{RZgtX}@Z7d_Fr5}1C z8NrU*(JyOBFC-l{>0=xk*9tcRfQf(oP&IX~bWrMZf9>R$q6cRRPNFl;Ro9=S~&785aqML;pK}W`4xjSeFxW=lQy6%RB!GhYP@95~Quid6Zu4 zMdzC}1~~lLOT2J0gn+$(ns}0VgOuYkqR{5tTD%vago4}-VJ=RvqI+yMl*qk+lw{gB z^VU%#Tx`{|$p=I7?QF!#+J7DG@MeATt5XJ&&Fo)XqY~>?l7mfPGjFO74;O0bS8w>E zM*)<1M1OmNAVK8hC-PLqW8)2E3OkNy@;S!4=TS(@=3cD-lEm&H1LWCnVvBs-TX24t zT6v1f$A2mCyJYc`W5nL5V zs@H;gTFNqF1gib(E~I4ItgZ;g5>$P!Bf)iJEXzJ?TaMXqChLAU@D5=(pvlK>J@$#z zb%HW$Vr*HrKFq_w2QS`z@Q?nyf9%Px{OA9fPv_>qljpfX@ESk%7XrS=@5OvB`nk~O z{JnWD`13t~-T;8uuK@6!|Iok2ZvQ9j#&c8XRFbpmN!EzG-Id(ji@yUMbd`;lRaRVS1|M|{8za8+5 zSB7H4ZvgOQ4vke@V)3Bl+yR$_6Z?)$5~LiMIS7oZ zviKgz%00Mf6os4^Cpj-$o;9cPW2=*+MuC>?3GU^9h3831I7vyhP; zmDH2YRXMZSc{za2N-NhJh_&BfP!~*4YfMdqwGl0gc`%B1nq@uC@|@K1pXEL$YKi?NN+Q ztK@sBAzRiUr+>7}|9z!hu3f)&UPDl$*wEfdTZn#(6v`Wnc3l-Z<7WRrG4qk(^}FI= zQIj){LUu*rNpZ^PaO4FlfRw4`pC|q3{7ew)vvCfMX$`a*a2c?hED=lM#6V3f(hwia@<_ZW&%=*;;TTh;TN3b*NZ> zj1{A#ng8AInOhj0+uyi6_W|!bo>4@lx){`lpA|8U>HB0Av0Wwbaz$uTV+@2rtg9iv z*j0K_QsUzcLCWz7dM*c|NSiq4&xv>2$l{T5`opga1?+S?42UdxE*j8%@ZN*3{_4k1 z|Al|?pL_bVf7Z|Z%)9S>@d*zD{q_D_*z*^}xRB?ye=qv8IPt{a@ApUU&4J|n2)SPg z7%bzD)BN#b7 zna_48y89ATd_E!#;}vR6Khpe&;~wOpANt$+i0`qkmNsLzwty+Gk@;3m@)XY)DZ&M^ z%M1WgYRo`$>e(Uf=YDUDF`~|0x&09i?w0zhPITP8mzR2Cd+$~55iNlL~79|eh)QOGgx*_Ma zX+mV7;tn`(8*)R5HE0(!PiVr&1<9OQ#4=?%qGuYHJR%*aqY_TaN%elo6&^SM1%k61 z1?ZzX`h2Y|EOTdDe>R~%$gijB-K=R>$Ulo0LPSm2ilExUj6KrUwi?BKI zP_0NKilo{vOZ#qyEy^)i+nTJ=)>6k090BJ4vMr!r1wnVw*jrYy#X32Dwq`k1J4P`| zIi!iLUXyFrO)=*nh)t}{j1?awBxg4Q0V7QA*95{VW`XL^Uklt1XFgR^JAAaQi${<$ zCnZdPO$Kwq;8kN}eC(m3g&oYxaFeG`1EFVSIPv?0MaFDwC(6u4UimcDr*5#OPsj_q z3cL6!im!xiJr4qZM?w_mon~10=s0|UVj}V zq8k?s^^NFSFv?EBkW*jBdg#VCa)!$|2BtZ2ZGvKAJaFLyvY&BzsArZg!%c2LH?q@w zLel}LgN+?$sPIkPQ}2aN1kU5k8`ttf8GJ{;eT4mIRmdrC-A1_451V7RqAU)53P*YB zfHx`1W{vH!5M>qHO)3c}Aok-;R4sQ)ZFliLRgAJbW%-E{ zKVEQfAfzloH}J)wBA^t&qr4^S76LB-$UsEpwPW@9-ZO}Rfx`o;u z)fFedjBzm3fs%-O3ma_3N(IE9=Pdy`YT8=~#)=l0J6goIF~UOJd=7pJ?VFeP8a*_o zn2^laScvUeE`m*B#O+b1$6(KeYdY7ii=Dl?ogp5JT~|{cZgPr^vZQSWTnh?DVe~74 zZfuvK@Q!C~0oTA%0AdtX*W(odVwZm@(vGIhQzK-2lIjRiQxx_9V?mjIP?Iu+h*2F= zbM5sx6pJUv5q6SfW1imgNfPpSi!7)lu;<=W7-w@6V{Av-O!}P>8+%nmUS8?~<7;C; z6FlMt!M~qrPh0=8<7+vbgQ1AKtCTiH*zB)EhuK(au-}tkB=BIw(3xD~^!<^f{!7u&u z>Oa>2;e9Qy`5!;{m+J$r6^`qL=zH(D0(;WG{4*HOX#!jgMc}4v46-fV{-X%>5UnrF@A~TRzskXXZM19M*`C>O;{np8m-IwC-FI5F5-q ziBG)9X-|I(AQ$93`OoUbUjg8a0RI9&a`4Fb&i^yNBESy<=BaH zHwlt+L*b22e8t=U&42x;KKt#z@wYtwi~slcJ$@~}4ZzKwjfWE#LgUPX>C{y%kYG4a z_+3#V21gb!au24qJ$5Yc$amG{0$Ck57)Y6i2+k*AD0n)B_?We|ib!emZp%{|NNX3} z*#zj;k99BwMC^DynfIB<>^>htDmj7}kRwu$3c}Q=!G^ zAwA^ashm^l>IW<58eDSB67|7X6SkMMu2$mkX*Uu8q%o7DlG)x$Zt6ZsjVuSS-XxlS zocXbDR2=ie6Kwo3Cz(&UnR%HKc=jpqjdcQqkEZ6Ng5lh0i1k&vZSa+n$}Iq25GH>3 z&-#Iaph!AT1{Z@zRmwbOVS9P)NlU<%5 z*l&>-3o#5Q-br3$wWQPbr;6z}$PHFh1JmKf|L8Za0>=*1=d=Ga9wmtIhPOr|=Qvd# zWcI~c7)mypQ(>P@ru<@-Qq$nw!+lj5!D*d|t-n4mde(t6-_Wd&V@%gya^Y;oj%*XK ztuu2E&>@Ye9aod#Sgs1kjLP~w6a)~XLrxtfvQv3@4-r&j+I_18YfvYK;MRNAl(^@fjK@t*sHw-!o9={` zPM8SKByov+9biW7Qa7@#UI>B;Wj^Ms7d%2V1VCDFEGTX|YO7Cf@nnXVR@tusbRF|M z_Po_W;_bn#TgN<8IHU@%2-O~&Q8`BrVG4&y3OPsFrko*`qwc;y;jA715w+*rjvWPS z_;B8&!1$a(W*_olo5Cpa-(wuOl(>LWe;XSY&cSj~)vqrQdu3WqS=<;;b$@`JH{_Ct8=v{lc^>NnbuI>*$6sPDd%%+(Wt>^@xnO*rzhu?8 zP&O{6IP*Ou`p~a)0|jgwPq?847Lb0}C>wuUk61amNEGlXP6?7=&oQ)v+IOrH^aEdPeD?mk z58iz1ji8?(*tCPy3PY zR|9$u&-lLnh#&jQx)eQQ=7$UaeCQQE?YfkxOxn3-GpPRMWrW=G$jj37LI;j5_lKE<}7S1gdw4SSeUIL1)GJA81{lN zT&cyMPE!JdMHBr(oy96fRZ`b#FsW_5ULp^_hTTZm_UwVM`;2FXi;?c)y<-=gqHOrT zf#LsvQXq|TtIAR_ZgeT5(@yIgA=#IXBLBqQvJl}h>bKl84bK!eTs!I)sXqpjEY z#$Lixp5lJzcAoM$#ZPUt9Tf(g1jU&O0eWPU-183+>qaWT7O=TCW9YmH;z0Kx>1a;qQc|;2prC0TN>Sp&7I+Li#*ws z@3QR;#%<|bP|~-IJ0I4x_`aMMU>iAp*cd0}NjO9|xv;6OYLMD?df`9SlU>_eYuCcG zftg`9Ea^Iem@@wZU~GUWMzv`KbO#S&dXpO@3FDSrLv;j>@ki~ZkR^_&#ccau0-=`B z8guuMrB5Wp5w?7=VGVem*l0iJ>YN{EvIozNlX|8j=nFZ}J6Pb5aZE#%I+cCe$r2T@~{1?zxp#@`{RGy(=WdB15Y`o<)MEr_;c}|^YPcY*w2^uU*lLWjz zd`M0ONN$an82MfLllgtcE1&mq+$TSiieW>#4YblPZ%a=z)?Y5|#qgnbn2y-0V1jZ& z&>fe7ZTOwI9KhI7nWz?T+Q7vd;mtyRqa6>!c%%G5S2xldBE(7VNXgsWd$0lrw2*U- z{^&0%Nvq$o!fY0Yp0xGW?%fJ!<4h!5f|gl4d_@R(8s%RIpx0A>k*EFK6!0lO7yjG` z$di5k6d*Ew9ME!Z1aQI6y5XM*+_wkv*8}+VRu(3H4fOTb-+KIq|L`Au{2jmfyFUB$ z3txQuwKqSRb*GC`PfA$8Ge>ffVFTv^gjfB0lEVcvI_6F0OcHT+0Wthcr_|CE)XW_* zF$3eT9-sS7HQ@0#gKD2(=!rXhfv?O%>Og}lGawSWY*!e3-2|^XZ3&MgBR$u$Wd+;0gW+q2-ywK45U7D2*!w8u&% z^)lr>aA7bO)z8*OplK|&2UQ1AtL@+`b}GQG+FY4YMeoxsM2wj~`V%3|oB1P-Dws+3 z#|Sv!_hR+znTA824`SA@6!s)q)98Sprrr=U4&2}gQ<{-zmQmo6uma_b6 zi>w~iU>Q@9iysTey7nSVsHge^zop@b4cIc*plsbDIc{``O6M9!^ldbhNg%VHYryl0 zBWjdteJvBc7tR;`g{Iyb3;LG)eUA|LuOdub#$Ei56JarABv4EPs>YH+Ez@p6VQ1{e z2RQAMlfVv@^==|{fJeEYb51$QsRO~x6Z|mV`hzB)##$Nmfyc-aG^UNixo)LSSl8)0 zW=ZGLT2!x-Wk9sFONh?SA3-qNyld?6@gq^T0DqTM>WgI2{wN~Iy+LxAfL+veQ4MeQ z*s!ishnY6(XE`>%=7GQGAQ$W2y$hZ(K}@lOa2VSb?rM{W!GR*D$Y#XoQ%-GKav1?Q z`0(JBB#k)&xS5eL4>xO@$83$#zmYx4{;_jZAFgHam#`i?pJ>Y?ZZH^PxPb)U{jhUf zXZ9y2{6J^?EQ8;EuAERH;)bYYkB=!;Q5X6V*v+XB=hJ{s$j{X?}(NWnd9A1bdpS@Aa@f@arR9zQ(*XQ&Jg{=~R{SX_ z4P0U`v?>OJ4m8R5Qz>0q6-SiiOPl(hQQK3EW-%xO?UW-v)eo0^yD=A#(d|6sc&s>d zsxiHYip}UB$?ft?o)Zy!7|k9C#@s9ZoTpJHzD}U9+tukCGbch5LQ_g^u8V za?6LuVAGc4x@>4Xu&{1T2htA^aDGJo&^IS@j-T)PeT;QKx|3^=~fBNro@z2G*Zv;e7fA_Wjc%bjYO|Loo zsOLkhd!9$Mw}~bMb$_z0@DIc`PZ`-Q!L1(XfjJ5%*>G)kf+)JJ--lcI+2}soD{L!; zehCIKy9<5DjspCxT#4$|ZLSMY@yX=mP9y)k`_zRQ2?=@A$mc*e!c(>jI{39YslUYH zb>P>vkEA-o&*j4~LUt$a5i%B!{)K=(>Gvjp7ytQ+K=54n^9BGPj=$ar$OVqF)V*QA4FO}wuYSJq zi3fk_FMa>p-|=t%*3bS|f8vine(>5`k00jGe|XZ7Kv)cURnNKOeIFJ$mVziLN-NzHI|AV<7vd{Jh~xjzvQCj@hHXFpD? zUEqTSf|)iD*dlYG_>eSl)AxCjs-H?x#s%#y0etwuc1al%Xuuf1^_+wn7n*8QXi8OF zYVJPS@PyR)fFGI6+UNL#LS3_svE2CYsg7X@DZ*1E=MeU!z5;sm&v8Z`rVTR%+qeE| zm~H!^TUr~x?T8B^ZoBVAA3owDWu}_13vJN{Z!9^WmQUD>TO<=Zx~5AXFQF|>9KAqD z9%x&Se-g2>V^2NUi@w5@fTvC9ZCc_+<^^}89qHv)lSb=wQ~hd()N`R38?&Pdw@FD_I(;_J8>~w z$Eun59bPx%GdQ3&4|zV;Bio~ar$pg`jt_d1ucsGHn|GW=q>`g;=TrQG@&ZseeF;-N z^npq6L%{K`W6=|Qe~fP%vwa~?`WPD5&v;E)AB;^HUeF#&$vU%kOgLBsjG_>$f_EeD zWo&#>nV5+Tl{b|!w=diOnhqaX*A(!Qsn+%=&A1svaBFM87b~l-^*Hpu@q$?9Mg=h> z7cYmaRVnCZLO)3$uf6LVnt=E>4#n2z#>>dZEW#re2PJw1)wgXRizR2QoHuKE=>R2< zmJ}l6qLmz*HP-$xm5_CV*^u#%t>MqS$FJkNafJScG10l!{^t@>mqzjaZ8Hx>$;*pN4N%uNlVV$DXM zxQr}SyY>Pe!)tTrc|>D1$`JY=&W=ro3P(EA!ikU*v=4b$762;)=jr_O<{;Qo)NTUO z7c_dATCA3bs&01_6zCC1qBmH_93%n3f=J64g!(S``d6v3rm zD|+=72HM!{POMH|p+6g)dA59;pYgZl#oo$OSH*^uknc>du)h<3CHyjsUukkuo{HW8 zuj__HVaR{?_i-~%rFb83<@ zPy2Z*050^&yb>2 zLA1c45%z+bAmEHV|F;_zrm}AKj=wh?Yykc0AxS@bf#{P(c$B)ANVOYmsyfGx)=|oW z-5f0kEibOC)~v=f2%dZ*b!|_*mVle!kS94vYWmjD>W#d=55Px&SuA!xh|*SAwKqQ!R~i2uSGpZ7Od4k8I3J7}daX|EE3h$R`3-IIZQQ9!>=GcP{?0Yskpx zKlbO1c=`u39TIshdXW(WXyAr3CAQ??G4Tn1bi5b@_uA9n7-|L{OJY-=ZH%ey-e~_I zR$3OI;PpRtyu3!nWR8|PQ#M6-H&r7t?AG<`)N?IJAj&GC>Z z%ByvJ(FZXZwm>2yge#ezs-uYRVnKNmTqx^fr7!2iBS~XiIC;gLU#YU5!{`1Hy%!A0 zg=MqzmHk(m;n@9=@m6HpiKKixACNRPrglHkoyH4)F>6o4Ks+Q$#9)yyBWk6YQG&=P z>4>-7h(=T8)Q;Fk4+}EKla1uk)uJwgy6|0lZhHj80`IJ!5bkbS-NjzL0Y@`rxZy*h z{bfoX9{Oi>=rQ5b^{4H%K4k5m_G$YXZ8*q6)Y^r!^JT_3kk-*x=EaA`S=X`GK_eut z-M@_|HrV60k%6e=)~R*gV2Q?f0(1Wh_u(JYBwWiNRk^KK9bJJ~3du%2b_yLOcUd$wc0Z#y{dfa{FzsMa(8*fm8GDQ{^QYQNi+y%>uJWGj8$JYC(V~u zylU%JWq8iAbNNei^ZzaS9M`$LUPpFT9g7sZbQX+VnCN(VJlFC`EMi$$xcJYfiwr;Z z*RuKC4Cs#q@^ygyLBQa0Q{Xw@L&`rc{5eyh{_Oet;mFN^ye&X_^UY5@_~6-xZ~w=? z|3CTc@A~fF^Z5Ipe&KQM3}okL$7f++{v;|_u|!IpMZg7+RxwLDPuRvR9_NIUdQKo& zbRu%`*aJgNve=gb^(CdU%cyo;ix2&Qr9de8w>)to?s5TIbo~ z5kGRw!mk&`2itm7kBza@f2^(~GVHcUCvkA#j%$^j2SAL!F-K|gWV@vtXkuZoql}yq zB24%2S#Q;y_19K}b!j^`+wW_STWlBta`1%DO`bZYN4FK|1?9jJQ2*Qh?O!+$c)>A! zg^A5hj=uaUB$Yk$DOlSF;0VrZUX{t|F=KZKRF-L^0z*7Wt9NN;fj2so`(Ah@x|M;?(m*#|3st_dtd#bwI`y$ z6JwzN;QGpb+-ZbGKK5JN)LuEliG9cWg>Qz8cE%4M{P+`I+yC_+0jx=F4KWmT?q786 zFObF8V&g}S$LTGq*2vof$!U`U3gb1|`p1@pe`0K3rIG@5_QXrF*OdEb;^-G%;ZAZ* zNWR_H{gFD};VO?c1KJoc=6|>j=ao^%su$rg8jgsdYzknSm9{oM6*q8XnDBwdeIhkH z95VEh)vvxI+eF>@O|*_HzPJ6zst32Wat{G*to=ogYU2UBpXJb0GB)UouolDZGS}PG ziG~(2+d-0OQs+Ufkr4~2n4Z43)r!?_EJ)lx#JA6!FR9}X9Bh~NF`w6aV|M%_B9@M4 z3IX*{M=pVPMr(^BJ}kwX}=YO{3! z(%yA2nldeGb1;`z*2`zSQQN=a(x(Gtkp3g?Bn$>CTe(OwxAt;&Z+yNEf+eyFjnytlCE!%4$qLd-Z2*O z?|dF&<~4S_iPQ74o=5Wz2FZ5Cj(LnD;v@p9crZ_cl%>L{u_=EJ^hI9nf9uT;pZ?r` zOz)Y_HmNY48Q`*IJ1Nk=hL@jNrE6 zf-W28+V^)oi0Y59%$JI_W+iD#wTwYJvCSPnb+9P8<&#xST+Y zN5&~Djz16-F3Jqzv%Ffb2^amj3E=Mn_&xvLAmAduzX9;#!3X(00RECdzXH&|B;a2M z2!^kPfaA4%%KV@p-vj-`TVL_`|M|YZ^7!}s?%(%4f9MbYXOF+|{qH}1VI(P@-HPrJFvf4Fno{WB(xe1W z8KI$Fx@zgsnfF;Te|o$XNJIP*QTG;QOJgC^R) z&^@Kk07n^V2lzlxzIUy*4r&5c;m`8?egTy{18V=+%Y`4tB;CTE|tD5 zT{g%zEyv=L)5NU`8yVevtmzqlFtkgGY=$aw4Ccswv|DhddbD6OpTr%HZuH~^UiJE8 zgXEk-aB9E!v)Xc{#I)ANmr92a@9?Z)kzx=H*jc_VzR?zEOi)RlpjkC;mfYtk0% zQ2^#jqMaKKm;Dl1KJdwz{%~o``Y=9-r^RJS+h&~5UD%5{LU*pVt(8>|8@;nQ`mZ-% zlFwIO>{Pig@nPLq+cLLcVt-*?5bQ{`LZ~UDuirIDy(gHA#iC~HQtv*4ymlA1%7$$! z*ZvNjyq8Gq*ELVx_6MB+HY{U`opT`=D2B$u%C(h?bqB;SoY$X-+BUS+v)#13wpHM2 zJF;io#(MEp?u}>VMj|mip0x2y<1aVmIwBs61g4Ii-`P&I;xis`?5MbYp7`blqURyl zM{kU*uiI$k+a$_Kt#-e;NU%YJzaIYyrhQfv^|b~`4Vy~Yj-DXSPA3+n(^*Au;S0(3 z)5QvyD%4v@UccGu10^z~3+ujBNzp2^IoF^RGu-+k7=>=utT{URpRveCd)JekElhv$ zKmo-Li%rFBJ+sW_0ZuRYLklpxoOAL}jX#minF$x$oJV8EzHn*Zj>{Zpf#5RdGZcLF zK79TdZ63-!eE96?&-m#-?diAuQ@{8dzV2`Su}|N7|GlUDg)c^|ukPn*zfbvNJ5Tie zQ-75Cet*L2ZvpTFfV}QM7x|G>fBm&Q)Z<@bc$7B>9^@;(#J)G`xY9?@ZvxOSe0IIj zh@M3r(@i(kicdm{q?1VnY#Ado`M)NcUqIkawL6JcKh}4V+$CGHn|z_0->84^)etlF zUfGnx3sI0h9$F+%dHai#^l=Fo$V-1SZJi2IQv>DY0)^}#bvF~?5@sJa)k##XkWo(Z6y{#{_OD{x+p`^PY z;D>{Y7tZXZarj}zl0}So(e*b1Qp#)m`(}W@_#Z7f3(;{SAeg=xz;6SjoOK7CZw2Jy zpRXA3wE@;HZKLBN|E*7c#pCb&bDw+so!|M}Kl|VP_y5D&4f$Ox#q;D@Tl` ztw>-l5`-HE&a>&$&bcmjzLpy-KUBivN%ABjbTIh}5`W*+cB^hT#mU@Ps7Dr04nTxr z0IA~JRDm2bz()C^cRu-Zf0q=am+VK29L_m1NS{sp_3*zCEjYm^o%qImgj%aqeejF{ z`{fB$lI|(=vGyFWmK(E8PEs&@9fbHe;Dv7vaQnpaIH3tfn&HCorF06WMU2KEV0W)n z)j?nk)EliKU*OWOjg`}&wU36(1`Kb3ZrS*wkrp^um0Z^cV#k$nhHtcFrY&Hb@~G== zAPUpZLW}3Zo^)Ba>ie)uRVwDJs^p2UJ&|o>h{1@1?7nmc$OUkO?h`Y|kRd*&10Ug8 zcbwU*?Ty|OB4nLE?YHp>(X{_^JUCijBKT>fW3sJ|%CvQOMs%VcNEOKShs)X>Hbsh!3y!H5^w5lL zty~W;#L=aH@wDrf3n45SPcIsB!sfooybaFrz$Eoh@@wAor*-n}m}6Y)x8OS7U48o# zXf@&8gh11=Cli%1(a)$ua^~A|X*7yi$fj61R1w6nH#AdaJ*&%%xT>8a=^t(9D`eq1 zV%-?EFXb^waCGbQB|!*=!w_%qRQH1KyuLzh8oXm}P;7<}fU#yi&?)K_vf1W0uVhTY z27KL-A`E}&C-1&g@(CxdQlbJ6j#nYeWqy|QcB|nbyfTfny7>a_pj2*Wc{H6+CGb#UyHzDWbkQHL#DQa))gpfwzB7 zW^C%MNr$UE;kK50wFdtDoc)QnMDn~&E+QuX{Ir_AxrcmCnb ze{KK}uwkWTr&u^m2A>%isDFp8WEE`rAJ94L|Lt zJbm`;+0*ym`(jVE@so>mU+Yf}BR2v3KELuj=_k*{K0gY`#rvbVu;(JbHvwYfUj@i- z1SFuqLYjDe?VochZXnZcWX$2}0aNZnyvXiILT}|~A^l^U1EPO6fgvH=@)XZ7Af^bR z0^eia88r%kBVMM1XTLF86fT#Z~X#SqS@fHC$5#YGqG~F(G$C@DtpJ2i&q!L92B#3F==ftec{;w z{onypYI?yN7SveB=okLuy6X%EER-&3A{Z}HPuKwFvuXOi9Q$OV{pu4^ush(`P#s%o zbx)6vvXBXhF-6dMqTAH@;|fOz>VqLC>iEJtb=oJdIx5uGfI9t&C>sfT!I2(vE)^d= zkbHpJ7Zg%s6g3|m(oM?6#d0q|rpFgEzff4;6Wj6?vtCmpzI|fG3DFJ;5oiQot)b&}(S<>kHhHs;209n8r`2v|#cQf_c=48?g6ETM!Nm!>th9rz?RSAYRb zHaN4xCc0BuyVQ+5PEi#=j`RdZL=v35;G@21`*$%K4E9#0F2a{wM3DbGhR5;K{Wo%s zCoDqF6S#+XZ#eAngg~d$db0rBIcS{Vi}73RsUPF7%;>ReErpiX|E?bnII8+s3*KPz zV%0gLaWGvME)iWyBG!1|WU__>B;(d_PVuhI=GrbVd6QvClKr5ht4TgM&02PTf;h`8 z?~TRkcsJ9gM`wIFpKkXPbN)GgDbwE!F0ahzU;q4W0`X0`$Wc#R{q3su6(YYThrQ?I z??3pOulbQrf6=%6<4^yAZ~Dg1y!rZTPu|Zj{?jAADeKz@Im_mvJP+Q8g|`O$Du5UI zulZWPukrI1Kt8@mHyF6ifUEr#XS9(P+LjdW zONHI1t$Z=b>6?Rc>*z@+;@4TRpw%6E3X{aA%szA`p4eAJRl4Cn8U^?IS(HV2973yG_3&ZyUS4)Cce-WOn2|9R@Gy9(9#h+v`ZKYgfQlUIloS z^R+t%Ke9u#_UqO~`M#FS1hr@B-#zfGG5I=uRr!q1x)GCl%ng93xTB0rE_TdZ%=2~t zBFiapAJqyC46#@BQiko0pt`)35Z&zBQ`3zfi``6;Un zhhn_5B4nYq7e|PTy-=z_{MjBZsL`H?j&j94Ic9&8QTTDOC_kIdk3=rj3l9{GXEYqc z;>+H%lLAkop01#W+65KD5d3WDfBPr`!eozModsk`(}Y%LyS~J0T-ycFnQ+rza4iQp z9|B{b)wTVekUJPk z{GZ7Qh6~_idxEaX$jecigNhS00tS;b+1OuVEe366_CoB$E6&{ZBmx8&J}5XLp-(7Z z<}m$8TTdRMPudG`cbqW9%oDY0<(lFpSOiP77pG(I#EQ;+7FhUtQBFJvnz8k5lM!|Q z1q@)YQ>qE17kN}?*f?6-ZENty{L`WvXb!4ip+qmxc`otAQ$NFfpC*rh=gdYo68$|L%+4&NIIHb|R=?Q2mULZtyIG7t; z&Y5AVnYL^mvgR2_=5*{?qvQ*Y^>qDfaC9b0jAc0D7CZcBwb+5mGZ;w@&RFk0yyS=T z7)YqYl*y;e96fLp!E%9vFuHSEv%~*Md6x{eZbrHNx;$%sWg8_p+QNkJLp|W#FVPF* zhD#yffTUV1h4qJwq^w23h$3?hQ?SRS!Egg4|G0o@l6{rQ=^wme2R(BE%;M3fP5^2^ zmA@M{xSiZrR8-pI#}HoWqrOUzkpemu^@Hr_rzl;6hHSAOC(H0sA4NRfD|bzZ4UXZ# z)bSb7@+xPObb=mrFT|q&zxs23EDyTn$M`&s>YzwWdqKbLl^BwaN86q%dJ_0EuQ6n^ zem5@G19bG=A)^kq$2JuFGl`ipg7L??MbZt0b33qgZWqJWK5iBCb%Laz=4d6xig~wn z6q8O|Yp#aMAxJ+au1jb!^7yqRms}UqfBKtl-RZr^zBvIWT&#zUF=x!FN0!X5QBTlP z=7f#&h5oivAFMve8>ao?yg6^=q%Nsn!47A}Bj3w5_D2u$`&)V4|8MwFf8En>{^p`r$w9>AUa0^E7|IogUK83-(;Zdz?xrJi+h9KYU!=_x1fZkmrKlAM-Qk zEr6WmaDyP{=u8D3^!ruQ%!${jq+zs_Hvlfj!P9VY{jm2?}Cl&B^3e^ z4o^wk>X7d|IOCS=$Wx%fn-2Ndul$r3(mmwm_MU(rtGEt77WjV9OEk`k>n?f;6S|Q- zFDnH1#4M$_XB-#tj zN1MG0t8M|CpDB@%=!d)XD(~EUBwD~;fN}$%zMKLnZk>yG?$|MYUesr&=Ia9d6#(Mm z!k?P}j6L7?=f?rX9vAxa1A$YQkFN~ywSb&Z_*()w5WaYpxs=7`&9^@B_}Tj(KK`SB z^pAbd@Ay*wK5Eg-=ef$-zOv6Lst9I|S4{2&Ml*goiGU>Njuu~%ULku3%&G2Ig^`!aPK-qPh~MRcFR~r#;5h*O(&bwYcc)r@na35v~2^D zUxFG@Us*}&3>#9iK2=Sb?h~8Fp6vW?W`H%JuP);T#hzFn^fRtAD{B|Noj+URYlB9YJB1h=^k^0C2GVKme)NXFW)n&3PU!oi_?% z+nK|B>+xW*%piQhv@VYQix_W0XFuKjxHtGT#`z^FBF^%vKsK1OPlU!e)<70Y%-ZaQ zpN$@W;0IU5-1hF)0C`M)Xx#iJ#m1ppUVywpR z7_Lx1JHc1jT$RPc$&l_FoybqR)H?2sBdv?J?L)F(sjv+1nlcdzXpWAAzEo8!>}JF# z$p!0i4-4$q2gng2>~Ws`weu6cg?3z9>;Aaw3l}e^bObSbH2Y@MZFh1j%X+d?6yswD z(8%~eA>O%FAqLBX(}@<5F|c!R&-vr{_pc^lwvC_TlA>&&z%Or&`nD#N7dO-{iG8UA0_<}m_f5n3#uysg9b7b1j5LiQ=X{jSiNhAe+CzL$T@^_e&XA$9KiCB?L~gs|401D z$4~#kf9M;Z{(_(X&EN1N|N5_f`tG~$JoTK}V?gjZho-MMN8ly^F6r|}IS1$BJ?eaT z+Rrcl!(SYJtYe=i`}-Av5NSgP@WdZB-^5LO{e6RN4t6Qq%GlhU(B7xJvA6>|!*K)r znAJP@KBnb8uq7lXeavbP?Y1uw8hPbBl`-HCdyniIq z=#-e?Nh}=La>14=Ct#ftD7R7MTSopvmu}ker4zqIfPnNd{EE23*tVN7z$2cRzsuiJs{*SS?p2KP``YHRJ|K!{p@OJ}(d6vHpfR2mk5Ayba zHxg2RmWzEb_$SXz%jo#4R&XOI8LANw!A=lB1h8*%iNpzTDDyGdAG;ceD8IW;+ROHNRy%@N0AW( zlH!g4Ig%X&F&rpPWCZyOgBXZ|Oo-zE8Eh#XMRF`fh(pm*q-Y>1io@e=zNyE2-*2r| zd!KX9?c4qM#H6~Hfuz1kyRlI#^VIbr8!0B>beI zNmUO+97@92)Kl}ShppliiX1m3ZwW?#IgCu0Rq+Aka13=MLw}fhtVQ2_Q@cLA7l0}7h0+j%XxvY@hbvl1T+3Jl7nR1 z1SpD;I5v~$Y^F?Aa*$hkji-iP3$sP%CWVS?J*VYZ#lM}e~wpm@mn9Q zq}hs)s=pAhpt?z(<<3*IyyzB;3ml6IXMLVP_M`5}dB`L3L zm=$xubb<3vp4ib(E4O}(V(}s;uyUPW^D7)_yZv9qs0e9_pUo&rktM|^@}@gH_z%4c z#HhxF0`vz8ks;r1e4;&ADw{IS8r2(EqQv1aBeL3JKd3i1*itFo<%agCIJP3Je8UGU z^&yNCCA#Eb2QTxTu|h6$V)t`^w!?xneyMoyV+x^)>j(`S!X~gz;t(cg<=yzWlqjGO zor-ie5K{G5vB9&Plv$zeEK&MgfuqE{R4!K`y0nHX#t)dk9&kjgq7n9|2^&~8<|&ssn;l%K*#xOx-p zdbd_1@hmb*<_18Q*`paTWixmeg0#EZNbR{BrD|XSSk5Kc*|MQXBr{fj_8})6zYYE)Icce7}bo z$NLSjLoN#yz-vx&;&1`rO@MlJ->(38SI=Mnuipf4@^SNCHw65P0AlzRk-0gLI(pCe zJjq`TU@|0FZup%S{aS$W%S{4(0Lvd4;jaVSd-vV<`D(!b_~1YJ`~TU!fARbO&%Lv2 zx0wd-#3y}p+qQ+s3A269Bx#SpA2|xwoRA^sjx+!*0fr8kp-+1Ro!9ChC&^<9q%01;-2HReXW`oWqTHte#&j$0fO^I&mEe<4OO{i~E@ zGi68>TH|QHZt;Wz7kqv9Q>x2Ol+!*-(|+&xQ$==*yJJDDP8yyarh3C_f9e-4?RyEd zdu}p}{`k?0wU86z!BuZS<*J~6WEl@B)?sYMe@N+Dba0obo1pDQ`AM|W3@*Z;|DXk#g}@J z;z0LRU^xV@qz*^rj-ipG>caJW#_oJ2EOcr5Pp;Z*&{F0QJB-87Bd3rb=PGT97o=uH za|oU9Xd`QIc4R?QOyqq_#E5irFhfexnyluO@_|X2#a-+`r!8jQGdaB-Wxz5I( zU+;g;6aOFn(NCZM%CG$G^Z)SQ|M%{H=F^|xiT}Ij?#X;Ok{G%{XJa2te6k1KujT3d zZ1$nwyvgR>ykGs-ULNYIL%D7ephrCBtpG9W4O`pce|a4JNH7^cW0dyLYU)>~?tlpH z%X`hHpJbmTZpy=+T+Wmy-=r@ooe(@hit^COGo4(5c%>7AbE*C?E(%_xl0&e6AGFx59Uil z6;K}!wcNnxqJ^1o$Yo0|bnhb-s)Q-Ew%oxkcA|E1NN0l7hd ztbbMD8Ix7fd0}+k91xqb@$t_MYRk>{eD%N^2sio50Jm=3zW3$mUZ#sf1@bbS4&CSxZfZYt1*d8?sX2-$|(ZbUMH=K_T72{o*m zpcJ%hj4ZGyV4Pp`M-A*3{yUM@-Az@BrljJD9n-cG_*`5HN4~}iAJ0>&nwOD4b2OD? zl{jjmXAjNUHc!1=oNTNj5YlGKi6{Aub&3gKNlz$JhmbWEEur^ zNotI14FNNjz}M~nU=6Njw2W=WeeHTDZEulBQi?RpK;W-#|7=H55I08 zDZhCW161=WI&trAYMJ)MxUJOwH*Uy_Uq%PL?A7?J1sKxle+^nzI|uTz;doxI%O1J0 z5q;@MMRkv*0^=&<$97IaFnx>f$2S-di9Ps%f=OA5RPCH6!&d17!mRW`hIpy5vTCuC+$52aptCiR$l~7?PUCXuYf~4)9n}DNc zYj!anPm;sRDQd+=k4^*ctFn`9=ga}Y_WV}TIJBuHyg`=kp(}$Q-W-P5eOUehsNMKD z<7YPSrO=};DC;JwYP3E5Ad@hxH%93B;V=!cP0N8yR!#EAIRinH*%04$qaM z8H2seqN){G@_l)9HYw%AJ;vVK-D`=uN8HO%w(oLcNiW`Lh%&$7;SE~3WmQq6#^H5- zNsm$_yF%GCsN^Ffi6_~C0b{KnMijyFNbN|WOaHL`DU8j9c|$M5QP~#B{a`z$)wg+| zkY{X62&Qk67Yw?NWg;#{a2gDV`fj~+H^{PW4+R&-CfrS^gpi&a00Q?smh02jmyvP9 zoO86t3GFRAt`#1i{rFFO{`^1wkN)2I-};-sc>mtV-Z+0hulkog*MYvqpQruU(x+|H z?#%@3`h;KCb{qa1{(L_+Z}PqW+z9YS0Wx~F-XKs<-vBK?4U0DmsAXl3Iy3xW*6aigZR&HVu%{;6CU)23DR&9w`$8i5~V{xVIu(w{?+!`h~N z5Rn6+sSsz25u~3ud9#oJROIjjNjomxuJJ%6!0;x{^v#j8)fyp z3Gmd{{`2(!7okO0Mm_W32V0CYz9!)0DW-;;G4;%VdDTi^UHKN!f51+w{n#@7R$IVr_=T4Xbr%+j82Q#K$$gQIJV4K43O(9h$pDY1+(c0x z|7sG}8&cXrF5PxZE2A;xwWNq08{4S}|CHTtrfS;f=0RU%{YGBlDOh^erwQRvHwAVH zH;sC3GK@kNOjN`Q4FMHtcf!sU+vY|R~0VDGy<8#in`b#mqaa=QOMJ#;s??GS0^_N zbXs|1G3Q|QO#Ui>a%rR1D;^;PNZyPcVTzwfWlV@micAM5=9+HSR-=*g})Y}p@OeoL&VzV+ooOTY&hCl4QyHM zw&`IHN|W^fEvZoA=SUQ3b7B{JM6v;&F(F7&p%%H$3HF-EU;n?kuH@Bu|v`ErHpl90#%V4w-aN1N+JpX<|fhvt#j=}N<}LMQ~xCD zujJs!>=Xscj(gMiF<|OPXFETg*9&2Xqbi?6ih%nxpnKY`9A6q`0kwl!gmGh%^Y z2TC{V{1mgtL2tnQPIQZHPA(gWhq))H@3}iPN1uJFWmApD;b+`Jy`c}}&KgFk;ypU* zO_Bz-@H=)@n|N9z02vdp(Rh*dCWN{|R^Hr|HS)399`bOF!ztDAv3cGgt_W=7Yw7j* zoYS;#L{wJR!}dBOLdI8xprAQA29qdfKDIIrq@jzQvDo&uV3r+)4olR_sfAWRU=Bv} zYs~8lJTh@SmKPP>>fwb@g_exqI%mfVfp+IvAlFEtrXSmRR)BMTX?pa*iJy8Sp7_Kp z_M}mt>v&&(DyDi2pTU}QCFhRwza-nnhxLuToNFLueo{xFm}uSF*%w~8<==KwU!P3s z>MnI+>9~Eo z`;g9aJWuTL$=CH=JJv>BXnE4>2mNNl?(6<}mH(FC>Gy_!8~OU^pAV0!4u(zj)qnY^ zET@Zxeznaol)VH`Sqe2Lq>)ALqs{&QZQ6I;2Xb;oPqq6L#Ac#OqoM3Xt2h~98I*K@hVtxyN!fYny0+{71ayjkNs-A$-oNA`{ zhlUSpJNrMl;*krsHRJifgCn8gT|yrAtKa6d?sII zosgYO%=3gE2Yj;chF+`E>WP0%R@wY}10WlGXxsqsSO4>b--!Ca>Pip`IOX>8K%a z>8BFAmXs*IHB#EcMF{<;w6m-gYZr_X9dhTv8QLroB&HLzPJFXC(5e^ho)7FF*}eEG zn-Gkr9{Ar)L~oGevGT>DV6o$)vMKgcfC*7J$&yHu`(tML!O7;AP+!#c9l5ly)Y$ng zg1r+1tgrm5uak^beW+MJ_er)5wmq`5pdr^@0^xYHZu=qa`H`6?GGdI5f-1GHMf6Xm z#5ux?ozbQ-QcP4aknur!8L*HTw0KLJ)o4nerA&K`RRpo;4|~R}C#v*b1m%W^`qhgY zZk7DbqiSv^1rcA4n7$4I0jS%=ap&5ajbSz~|vjri!0cc0abD(kdMb_{#q6T3C0^8|PC zwR%O$d0(wql8d%$D@#Az(iJlfp`;?Y3(BOu0_iXG*+8bQvO=T)RB;#R z9Yg)g$!pwEi!vE`AUrfJxxS4v(vzkDBfP5HhsCb?+(503H?;H*(W4V1LA~ND4zvUs z&oT~`Al_!d9dIo~yBU`G@V|z$b9T-DO0ML<39dNmXtRsSnkHvQr@Ey@x6mj{jlwFI z%ACtnJ2=lE&W5@866!o#^=#k;g^tM?Pr3d{_S}rk;ujtSacqR+-_*E<;9$HnkEbQX zJuv84&-hl|b(V8~ao5o|6iub;YEgS=_4y{H_>M#{>jaups{6V0<>zhJpqG2qk=yy! z9g9S~j6TcK8ngK9xXI0nwv#q+s4;Fq|4@iqU5D%U>g%n6`a_z&5v$yD-mo=&`ZFIt z|K-2=OXq*@KlqjVU;NVN9`aS(=kLGw_PNMz(yy^5_7#2Y$2T|oV7kHA=e3E?FZw$w zXJcQvZv!anj{th(A~z1AFJDC3CMI9a6^labgj1nlxm|6uyW>aN*l|j{EbDRgVk&=` z2Mw9pzg14*#fQD>izTn-zNo#I@rFM6)mA=;#0N*`tJI#1E*5f$q3k051xZ_`8Us~6 zbv*LvsQQB&JomnxL<9%5hKL+m9jo38Tl6jtt7?i8(Ovd&q} zB#?=k>7O}FQa1EdoW9+lE9`gub2EU=ymvRfus+S#0DR&v&54aS2q^pK0R_qp0&WVd z8wY}uoRH<^E~z$R)9JJps;}R9DC2PZR!IaP-0>*n6Qn6KlY-YH$MtmdFVcIO54Ta zgLEZYD4q?~|5>2+1w%=b>m!sJ7cS!{E+rTQ=YU@b+!Y>`c0+-kIhPH~KK z1vG7-mT-*-d2PT2DtVDt3jWMX#oxT`k{4v!zPh88%N=B9Lz)HSAh)h#fdxp_z>jm< zqjiQEh9cqb7C@OZ69Z+CN2oAb*Z?nk0x1Wt0#<+v&qk)95o@5xY_Sq==IOGehNW^e z1rEwthHMd=<-ZkT6bAl4j2MK_A{$C{J>+i@15$5}D35(b5*YH$ImJ(;Zg;LPDh_@u z9?44^KDn`4@c~D+^{9%gZ2L3)m)Oz|wA13K^XoR{b}1Lbu4Y^w-V_9KlJGTvhSIjF z8c>txIsevp9eQ!YZ^I=wn8ObS2k9$ONr#d99Z`LlCwblfxp`Kd+e1o#_Gt_*JPXY~ z76}=m`GFHfOOz>Q)Frl#AIDS8+qw|F9{*erBrJ1v7L{i`+F**!2W4s9WlN`|0ro#) zraJ4XYfsw5M`qG6re1kQAM)Pb4&IWb5bQQ0aL&!4m;N*2?F=|idY3~p{;LHMj$5ja z(}OQ}=kLfxN%<6d48;$9YHsEaB2IjZ)R7qb@@1qWjOXwn4~9_6r#_Kv{B+sTBwcY0r+=IL>#9Rr}#{Lg!}w zw7=(r{MDPN^V>%1!cV_-JQ7_Q?R4JYP=Y>RUnPn^2+esl4TMy2fR&Mio^caTow8UJ zX{64AUFQqL;Ol}m%@tfTM=3c5mo`PyvQyPMDz}qu8Eq+_H-Hpex?PwFvEwH-A)+8! znI0wc9xv5_0xPwWzri%8jl{WmI_tWO$GB;%#Y$z1c_RtCN6xTML(qwDGk?2gr8nD; z@ia1tU1qGHx^6Pi%0|ZxucXN73SQZKl9Vi|IXk3cOU-ZFa5&(dmp`f{^-3&=TD!>cT*2mZ`}2H z+wfxspKrP$XFZtxI)^;b_qPC$b=9c6Hx8nQPs!oypym25KQi*bqNSA0N!}>1A+)m| zH1T8F3TC~gK*c0FrBTH1^Jrhk{wfsULG_>_9|HZ9bEm`)k0U?%o;x&i(q$MWW}n;Q z4W_0D4SMTeJ_y9{IW$(Q>> z8=XCGXs7aHJ!LM?E)Y&3U7+o?4u@HBHvU$+0CFWkT@qPJ=1ydEy8WIp;D+7uTu7O) zd>vhRH}7ujoxJl#Kpw;MR{;20fD@%R3w-6@NuxIQb&-C|pARfuZve{)Y$u$3Oqdy?5V! zpSJ@1aTA^PP?K=((mGj*+3lmkL|h}>_V`IkK_Lrug8TPP^`oR}np^Vm6Uj`7v^y6t zCRR;*A%*USJu!_BgM&XsEL`L^Z|e}D34o%<4eV(*fkM)EIGrPi{%hXEKFOugK9has<4V?ZV;@e zLNVUQ=XBs&pp=wyv1xo!saLR@XW*oX=9sYH%0cLTGL&u*m93RUL=yLr%R*QIK4#i0 z_>zT|)CRF zp~u%IRUoR^UfVr4aEeoAo3CGPkYmw<^6{3l#A0f-6^)97iQ|f!7}ERGdVz*EXRxZ( zPaOwe{ls2u%ZtCt3|#kT3k0^YQzeanR#J%%lbY-%`F-)f@?WFykxawh>|F z`7}cE#4Lg;2QjrFRi)nP5nKJ}=(L~2Z4l+wZ#kU#Yt^QPti|LyONuw09~lk}WHcfcW=kY?B`jqJvxq~heQfp9dU{w=+i`>gPn)T`;q!QX-GJH7_p%5k@^wy0 zDc{znQm=|cMggC5LvBeHTRqK3G=9{G^BP=K&m$N!Zr8@W{fV}UHQxk+TFB;}zcH`8 z+!_J3k*&I73%}2c>$&EMihbjqc$7!WMid24L6D*3tuwEm@e*=dts$Oq&=JGlk$M~H z`7<4egyUbq*??28;beSFo*(v!^OduBB3kyT*Be}TvF4NFm##;_%M&^Co%wtx9mDz` zkB!f$D!wmMos?5~cp)BCpj7+I;?fGeYRKE*V>Mc&C#5&q%65eHZ$}Q6^%*~XJ(XVP z9LyQWlgs0?Hp~(BU{L8N>9A06qbq#Pi^VA$V8O`w8JqglzV_IL0Ho)Kg4!VAK)KlCPe?cQ4l^^D zSr3NJ90AR1{WI6Ht_g46KL6que(d=#{ab(I;lJ~5|I+<0{FTo?e9Yg*e*E~o^C$3y zsbAw~6Tkb#etpgl`;q6n|8C&(sSQ3w#xOKC^73!uw|rmezsAL`HvH1i&rJgTt$1JO zjeu+1NU&WsFI%q$IbT(XEAZZ0SiPwNsg5arh=&e%P849Ro;1{q9e>8g1!qQvd|)rg zTtZOQR4xoq(GF|UE>cSJ`#+vUK1uw5wi=7yLZide!BR+Rxr5v9x;g|rvAh5l+Y3?+ znv=amOvF>RPRN|}OZ3BR!T8hW+CObOFibJ);gs1^v}j!-AKs?aCd$S}ZiEYjLB2A- zOmpay7tkfOkc*eeu20}>&hgk@&E&N^JMxA=CPKbx>Lf;T18?x2_!k3!^R@nb6~IZ| zI&!&zL}mR3fKUJ7*H;DVCP3W)D4X6G@FMM)QpO}{y@BA(2kK6Ouf6uVUmLjh$6x*G zy?^pg{?`Zp^Z)c~cfb74fB)Kh{6zs~IA_pcDTx%zT0;3O}0xtv)s6`piZ5~mUFoTzJACIb{0tLGzNM(-xE{$`Xp#AsPcpb z6ko}cHOsYm+7%f6n6_IEM&qO|n|iLu1uwVk#M{);9T6)$ZL9^gh7j;3huq_ocE*Pt zH|=jr-L9%(xlGuyg3`E=%P?wcSS46T2|0_(b>$(+t0Q_1H>Bc~o-wKt7y+b~|F&s3 zX=c|bLoN(W*vbttMb-Rx$d%m6(tuhz5ec~>rAFzc#9`AZMtLN;I3Nhp@bMpx?Kjy^ z+FI9(_NB%LHmku%YVCz3Mb7~+0D z3}F0-G)!<68i%?QYyq{jl1?S&fZ_-_42}G`ZY>OCd6? z7mKYlx>`+&TT;uf%p0lod7iS;*o~pqjLPV3Sn3zG^h+hJ2vU!ZlvisH20u4Q;MNm6 zOMF&4u#^5O@_5`}$*Mmrwog42YLrQZUJfpieg9=%CVr(oqYmvjbzre=G$RV-Yx;4u z35LAb6lXB?krbXX2&8Qib}qKzqB^?=2(`i~*npr^QhP6ReF~s`pfs9@Mbavt#Jb0D z@OHjeAKCZH2~;*B*FJ<)gk@vlt3nDJ;%Z_D92Dded}&eK;x8e7&zKfWv~KG}v#yOu z2UnbyY5b@~6*Ooua}ckR2yaIpPewoE!-@d0MS;1$D`ZyMi5THv<0RozU6&|kT?4P< z-mMg9CDrZkE$)d#@!9ywf9|>l{Jv$PbbL!3;zlk^NY+Ca8(;k`OpS$!z4V;5=!spO zV!@<`X60#pE!5RMb=F{BLkh<>*44he6$zUH+y1OUG?1W)SnU(MghI=C0${Byl_|UN zt2|M`03^$09=h?ZSimy~b0aAJ5uI$x#S#-;*Oa}6Q9gETh(5WXFaPo{-T%p-_~OIY zZr^_XmanBmRk7sylUmN(LkmEIR#WUJ zt9lYM%0}7m@(Uv0uLAfrlKLG1%G8zjhXtLR{f&UU2|!-9OD{K`^dflRIBo`$ z8xC;=o$L8EQ+_Mp&g=IcKY4cTtAF~9yT9?j{qGNc{n!7OyI=mjubjR0t#2@tuHSQl zWEKRG$&LxE7W|GfHV`*^K)4xkSd;3)KtU&+@JtR?tJZVz3Q-1f;#x1C9sAkagutPB zR!xB-7Gh;>K-;44MQkO@qqw6-Mw{5;O${#)Yas%TD)o1}Ddbf(FK9w-cv-lkUyB2K z*NcFv^p9%&1jW9Vx;Fecxz0}D=0=FGObXy;%y#501Kmm+A>;;vahoQoTu8aF)FCc* z5j)021w>VgZD`$$*a%1Fl8R69XUMWhs!h`JKD8N0Erk>D4zW-&{$SHzXvYk;Z} zS~QF~nhpa0C)UDKG0Q($qIZ1LzK91nJ`%Dd#o`Ej0#N-qSn}d+@Ukc>*il&!+RLI8 zezeK;r7C7Ri?|;#7Rw6S`$i+9A8CX1D0J@Fgcfl%ZMS|$nsY-qQuTEKshROuh=DtX z?eImn4h0nN!mNPRn-!tzV7a!cX>rsmY7|Fi-v)_`u6O~IPt}%ytV0`El8cdc3KfVt z*jPSzfZwB;epL)Y#=iZESm@@7VboNmV0%TjGFg|EhZKKX#`a3x*4{I~JkL#NDB}4{ zDjzI4fX7PnBr|_%BlD@`VoBjsX|+Y#>Ojj@Yu>S45;8s`BT#!wF*QXmZpY7%9N*CTmVo^y~{NiFf3SXHkDstH3v-okAhwy&9z;DXj^1bkmWNYy8z% zFFB6~30Qr~9HM{im&CSM{jZV)g~2x)=OxEd+l@&093ohGuDcK<4)Ha;$79T?`R=^|%tI675kiAl(9))fRIq z7@r&6zJ4B0m$QwvFd7_wNOJXAR>_pQUX(}LHiZ5a4M99B zQ%~dJO7_Fr+y08bTwAhsh=y#j=6oIn=shl~pAl9LcI}m`L20`NVTh7uC|T~NVA-?P zYq~N?jqSRx>KyHJp(N1Iz`D*tDc4dNqyjdwL^2bo_fD{pF^NrTmot8l@0 zvubJ&$ZK6CieXnj?Zpu{xXNWM!KOPpVu?Xp;%nz3=Bpt3As8w1ltSv5^CZbU>oA1! z1}kKqesRE$o43yY%I7}+{Qh76*@u7Q7k}aYPyW;wAKrTH*7K)N9-sS0tWh!92A}xX zMx8iQwb<`ma3inzQ>QUL$nxz}mwvY8CU3v`MBhl{2LPevF91NuQ-5TY%TiGp z-w2>?yS-M5Wt{RKdugA1|5Y{eL)T}^%D*^`(Bvj~?LvQisc^{qLv z6d+IaeM1j@SgKtZ*+JeT9?QOReFvWSO#K+>MRa9#>H|5r0dJ*a0hH4x%$q3Z{E2;%vS@P-rVGi=U)kMa?TI`A@ej7 zr@s+UcR%x%fx3({?d0ZxlXUQM$p}u}G?3o*K+P-O_;>xefIs=;uU&imK5qx;I1?bVAPu7I4ClwxIa4Z_51$_bLl%baVQ|RN0$&1{RY1T%2NDMdcdYi>cm}YLUAfdJZE# zdgN1trIHJRyrM>2T`;(bccS-N6mya51DL{^3dS27mK1MJuCmbRH=Qf)rZ*1Hq9AcY z)pnX{@xSQ>Hqc1+bdwEaq&Y+lfjH}&q%8&8BQKDxXxtq+*QwW@rZ8!891H~dSvaAW z8yXP9hn~MSfqoW>`V97F^7;-j{>3@@Dv+pW z#CH|Z*a@!&ri5T;ksSenCF(EQ*sY!gOBVF3SIO(oC}A%kEiYW`l{IY{KU*dx)bQh3 zQK(B7&tzFkb;Bsd;!B2UJab}^rG?P4sZd{K98FA9E>WGzlN?R>Q70LG*uPd%=MV1)N$LxgFv*wP zZPj3lt@v11URbil4;sulANF|4XmJ)bW5X$I;;V=_-?5VGO?K^Crdhi{8@?aF7 z9L(6GRQ+u|9z{pK+R~=~Lz6i13A}QpCm)T~o}30y@=Y4Cy&lnTV~p4qtpmYrjB^Ji+_|V9u^f8rNF4y#FY60nsr%zrApu$FW@US`p{!v z+rhIQ*wl@1yb#a$!>V{xUBbjCYGP1G79dLYzvRT5LQteLH`1nrA( z0|BLNKw@e!1*u5Io~5!-r9J|&=OY3tlKLt0<%8V)S=R?`P7jq{+K-^|i3aj;sHmvFGDoXu+oYmgjo0-C zV}J@<7-tT(gMnz(%D3sIWjls*P<2a=JIQ3`*+YZ|L7L>|<$R^Sw@|9YQ5_R;tp39T z6hlSGAI?p$TZUMA-XKsH9(jJ#j66Xuv@S#A|8@SXMy3w2T)&A9m^P{>t@_lT>w_$B zQ1Gk$&+;RFNU5A9?=hJ)iU=%fB0p z3)^rr8+ooZ#m1EWhqZrB@Dq2%Bzew40Uq;|i{sP_+A=M*V zA)F+>x&tRP93{qQj@qNA%w8espXpWgO6#gfAGCg*B-lDO*MjQ?fKP56km{sa2MXhK z@#4ggBDWWAhNRyw|D(VYm zWSV;RovN;SUVDPqKPx4gAEfJnQ=3;=Oq#x0g;;I;T|E1CRBh7p)c|#N8+&!@?Er5G zxHuVkZw7$Ze097b@Z@pf>r>>tX%I*!?6!lB#N5PS!t;jJt=qSmY;WCr^yuleKl`&k zzxzAC{W}kS<2QfPuL_*~`8U7GE#xQnDzG^3O#x%UG;m#i@W2}~_C1Q}wq5`k<^ab203&aJI;902t93I(JMu>i z`LrQBlOkt9(igz`4zPaI__G7@H__3rZs8&u-)Web`j>*^NqhQER z?LoACB8y!08)ZQP(U?-=qv66=*cm_26*Eb)a-Ff3&0HD|Uj}shD)y+0I*jre9o-}K zFhaf*0~7h;YaH#8N5rx;rH#*Q7_wlN=ulB8q1PXkY$3U2#|V5yJ;oo7tFDN2`a7yN zL_8eR$2xyYS4P|xsmF(+ruMq*O9;RGi5u;B>0_%EbH2w`5oUqE_yxY?t&R_t(+~+Z zQV8OawneDy+veIpm;biD>S8H9@hJJg;=gb?Uy#?IgeLO~^4WPBpYB*1B9aSwQ}8L) ze75t+{xZd1_2rdLm9(pW8bnM`QsSW)!0|Ty<$1~V$eZ$0XIn52Y-+p@&jG^u8z46T z<%p2Eo->b{ZqTmifn$q2ziME>WbD^?u>Iw``UoIfrHYyq`8EJLjj$OOEjUla4fxf* zv`C=vqdl_HEc;Qp$9vsSfgIrCf!1~LG{k>90>kB@_9#PA&35^#=gw<$CqcaM(rzJQ zxco(>#!CtaYOmT>bHeb;hDeF`vR5`UhYE|08edd8Mv1jUD)!46eXzPYQAMwN`kQk% zflyb1x##Ds9v$5*XNEH`kxJH#;(Nhse2h}f-jFl<2^TmtI zhL>pp+Uk=ASIps)hYs@XH^(n_q*tOa*VD!=`&6cV@~w(to{8Ox2;@@CaK!ay36jYd z9%E&*p6ow=$}9bzZ^ZbGH(uw}{?9)DYd`a^p8Xp?|8oz&^beIZ-wKmR_%uO58aEgA#@s)&6V_gnWoU8bIRAncM23C@AFzoL<#| zQ}RQr*4u!s!>2hTGxf@)nl8#0{j#H7;5mJepw$F;Ks{N>qz6a&S`0V_dRh=%Uf1&q znAnVwY|x?StpGP=b|7`>`6_^43Fvxm1fb)O0s7j1enUVxK4Mp0`C8xvLmT-nd*Rlf z4^)OR1gWs&bcT-Px;WnC`%^dXF*#m)=k0gT{`613diQsK_je!s(|`6mcfazL-#hz@ zzxejGCy%)y;26vs0{xm46Xx9f!ff?}HwkQij-GrIX#1BK<$M`#gwh^0GSRB5VZ)Vg`Y4rU(xiV$Pq1&IzP0n1sEArMzz}Kn=OtP z>z>h4sVY!PsYtahQQvx@hDOFb24iyUO4kWDE$Xi}N)lf|5GiZ5`Ztu&<6^5N?Ak;! zK4?k(#;kTBkW{ro_gI)UUK=01%s=AfqaP71+!Tvei~r`w=a$oU;LB1|$pk99MVqp8 zaj5S}3Z?F$+SlC^deB@&Xw2>qwL{FumjpK-M)AMy{ZG+f-COj zZ)*-fS}+=I2wqcaaCTh-6oqZ*5ra~+0U}?`3DdDQN+UWpJf{^J@S;mPq>Nt2Jnh;` zH2x@Fa1Ov3m@zkklS|yEp_5Nh%oP)5%hzrInSw1o=UZHaPF`oC5T#e=kod*dKR2hM zgy$wC`i-id_5qr&<>g$i%Sz5&6>7A3tR$W(Wn z_~m-R^7y}3C>!Os>unQ!$gynBom(~Bz?s%2H8rK$e>c3-w;8Vp#FREtXcz1QXd}}& zUQa72Z<@Snsm6spy?iQ(rkjP_HmlMidTT_DZ_81z-by7$b!o%TP%KU#RceU8iV#@E`AbACDYvhmN@w#+AVqC$C| z=2z~o{MY(ZFSCiy>-^NvsZBjM2*C1YfI;#`fPd<*#&zFFpqaKXHv@8gCieEf_Gp)7 z!)2<|9jv5^o4O+GQ$l!wx|ewMvX~j-ho%ZB%!`-@HnLoTK7`6(}ZqE1!t)RWgQ@UmhnHNC3Re{K_q*kv=dG7SpS&6 z>I#}p0bK@?i$hJ+(Pe>AuL0^fzR5RrZYIr-7fUw)DQ83PBwFHb*xkrWke|N<;N~Cs zd_4eKHu}-?FAG>_q^0i7g1SigW`R5x1EYkh6N%UjvZD^QHm z+jm~O$7@yB-hTVNvp@a%*YAG$|N6=Uzc%odul&K;SHJr8v-9tsa}(_OJphvDdZ*={hW{{B;CLe+;}ok^u`9OiM_1&jAJuFOQRO~IIOI%pg~%%gs+7|cOiH9 z#i?J-S5^HY!0G`=d6!VW)R z2-ty!4L?KLj6f8xQp}b_2zz>!%igBpSdasF;$d0G_&7=R0w6L0mmX+x3JwrcHK587 znD)-R)vROz+7a63iji<)D^d$LZ^R^~>*@x7%JCIZzB@}zMmzj>-nFN||6A9l0H&WrKBNl}t!vchL#5*ml4 z!uaX9X}iXuXHPAFXLF(2Y%ugY3!KR_OtArubCioSWt?A>6C>vq_;p&9Z22_~k?ZQX zy*aqiaKhLMHgeK4P8~w#Bir!z^Zv^HxzV zzxTv%>eSeWFfQ#(<~&0`tl$c;OJQ)xb+75tg3&&tzV|0eEwnQ>4(!i`v>BPnM`q_j zjI9`qoyiXb$1(EV2EE-$$P{nYnr&(vEwl2HP>Nm=_AVEHt|Jcq5^c$1s~mkdnkkeV zYK}$UFtJ~p`^=rQ)(r^-($nbWjTEW{-gKeBO-uxnuRj!&OWoW${;h^Xs}a;f3U;ya zXI>4^U?~Px!4&u!QwIh$?R;D7j(U4i)!IF%(`HI$jj6g0RV1;6&|su3aS_brW5q7} zm|ffQ7D#;N8W35o(Qfv=j-z~y--degjgOrF@W1q_=U@237tem`r@r*?r~c|s-v2DG z^ndb)KE}GqH&Y)yfAs#NbAJTTH&+c|w<-^f?58}@@6fqP&y#xHhUP|n-5kiqTpBU) zX?@H3wBJ|%ZK&<^hyBcRg8-Res;eF{)_o&#aE*y?7@!S}icZqrx|Y}Vui~am2Mq#J z%ci<=ZCj#aXTRzGd$BE$7 z2P8vq)Rm1H4w=)Gt`y9v?D9kUi)uR{i_7LtXII>rSVevWkf&N|t|$4FXM$?LD=-$= zUtZzmJs8R3{MCF@+q5E@+I0G0hxmd+$&K{n4xU5grGkHLBBGl(h;B1^NyScBYeDd9}_a~e9!YSHQzB(Yb8>ZSc)ms3yKu@`! z{wtri4Elyb4a>HTt1f7~A&{vHXX|SU>QsZ>(|dmFZ@oUn8v?g(-s4X0HGib=?S~J~ zzW%ju-2J0J{*wn^`4?Zg`-gw{M`wTbr(Zk!=C{wUy~m#&e3th+nQWP?Z}^piY@~?} z6R_B}J1=VC7}Kncq!X!MnJr}i zmSbbnoR5nbi;CEGQ|b~l+%$`RI)&4$B2{18PZ5lOeRLqy+I!kDs3P#wFD0ISX-%92 z9-UE};SfUiLEx1er7na%G;?tvrk&PKdmD{F)c6XF=ahwvjU(U-bO=4pjM8qT#D(DR zV;#crp>2>=Jaj0A4h3yebHbJ@ZByR~9I95W$D89TKrZM^PC{f^kdx0zu;Pb-*x-dHws4G4M0F}Y8!lk`J5aN=OS!C1Uz>CbutVEjfW z>jSacb?pSd^%h7KL{TJOZHJb^ey%lc@*|mW_y%LW)er@u@1~u#k~cIGCyfI^mYd{N zY@cMf{vgXfg^jM^O2P_F32Myo!_je}9!S+qhi7MZ?%X=Rckj*TpZWAB&v>2x>`OoK zrL!-6@e2<>`(r3VyylvfXH8Gf-+%O&E<)cM#@ge2^%}36uKf&+>mfJd zc|atcdOrB##=CAtNb8M0Ye?fEJ+JuW^Gz0z7AO3~FEUX?ex^_NKtaTN}= zE+HQZy+Tbqy|z79r(^5;dLgC7P2N$ihTg^UC4{dK+55E@y^Ow>p}Z5j_MAWEmX78w zl-n2wjT?pO*az%>V#E07*naRMy~Q zh7O&g9XWbXeX;zDxd%WWYGv$Z?maQq59kV;_HqLt9pSqBya_r6+>pC=aU#j42bvH* zsrSycn{`2-@(ZbMrHYrr=JWWYUp`j{V6p&T7Cy6jlh zzT-5K%J*)ZqMFOU`aYR7#xTD4V}$yo-Q0!7ubVet^G~aAQ{cumZ%n-R{-d*RfBUVw zU;o;lKlsBx`s2HQ^ap=*_9tKa+S#9f{hMdse(O7D@4WN&HQJIN8q5#Rh{er;+!V0& z#KcsQ^U4&bQqSxB);Yhj29TOpx$w{+5sT3eh&YfFRZ%0@6OlGi5E5PP-M7 zdN5#l;UVQpY600853*oI+ba*rynrl`x*}Fg&w`@q20F#|JBvTm#s``H?{>IAT5rJ& zwr0{{jhRJMw?W>dY4W%ty;X>AxtER@1$tK5i9_p0P(ACWp;v7?qL=YJGJ8Sn#B|3c zHpCe$;vExN{8jtg!{u`cbOXkhLM)l9kApD|4Dl%6v-jnQVJR5h$7L8! zJ7S4;ZS9C~8Hh;7I~qGVLG71=RK{(ODH$S4CF+cqp_PD(GI^y?*H6p%YUV1{%-O9( zpbJPP{ICxWt8W{#jknBz=uxGTANnz9(<8p=ENDn`$_`$glY=Lf@_zj8VB}hjv|=f9 zOu>l3^MFLMDMcY%nU!X2S~F||YN0@Oe#k_BIx0{`!mCK9x%t=C>G{3YDmPZ-_S~ho z%*-qI)j(tk-ljpR{%=0)O4?T-VbjWwud(Q?SOpJLfLn+ za|9o+hs)pa3HqGRD3&W78-eyI%qF%UGo)iw*;du(_`zZNAco~1^z+_8m16<@`VAK$ z+veDx7>ugtTlYy>8yup}(_Aim}{tqIFP=Rf}ok&vbDCGXV zS6$a~x6k<#de85@`TE%>KlRD8&wlnt&OZNRpFR7+7e4>+^Pl_N{ZD`TlMmng=<5sf z$&<(I^PiscN?95%y_4Ws+P(g_bvkS@c% zAbNptnI`nT>?*GUZwzMhM#K1DCvY{=J7*472Z~cuZVxzss13c$)`X~B!EW_&tAb~( zu!sJE^7g&5tsx6b5}u^H+T5YkVQuM6fi^~BPNJcQYNe*vIWBezg?)vELzPQwqL@B} zmsdoXKp|Gk##yllc;omM8zoxm(TfaKoOP z34(y}#6SDTA}v2A*f$8g9>~+a_Z9LrfMAHvCe42`w5JZ^&zlI={WwNrm)bgU1B!jd zeDt~@W=^=a!|!=HVcxvKR|nYPX5vQrop;_jd+V)-+#LA!-LL<}Hy?cMtKYc$wXc7T zHweCd_RVj8=j=P*dh6`F-+OrW_B-z~G@jja{KXY?(}!FvDul3|kg4Q6g6^cQ*XtS` z9b*qwB{TkIWU2?VhKK8vzm1SG`P!A#S^fxfe8(7i)i@Mq%F5P%(6I=U28}SWDGZl_)^4UD@2_2>`u~ zqw@0`3W!u4Id1ZNY#fJcy#N$Lnr$=Bq9_I9Yu)z9?*$(1)4zOY zG_LCd62w`$$#GSS6K~QKecD@3jI^&kc=UnIq2Pgk&ihq|Q}Kdt`%Gg+p49S}X!Unk zCmzNxerBwwNc?u%>ISXjCqI;~`=g6-YkuSjuKxzV{F(lwM(j(!e5~*7Q-)}J@*`nd zRLDBu89x-14W98RcH*gGMt%D)92-m$0ip@dcuC87uLu<7@lir9a?j zyz8L;#5jNUlUUTB`IKyb7&-Ja5Y>0gQHMTh`Ns{tv?Bc}Ze7Q1VGJO+#s|tqEjRMi za(=`==c9~o#}x6;cwhyPSTNTn*qfONf0e@qt@G736+WioyYjZIFsd#2 zp*yiw+qB1G8hg%%wE>RTX=naC7xRnrVd9;5=@hhW`Q<%=l?RJ~x>2L^0g**ZBA^^8rc|Z^uWa_H)I%;*nvb z4WT25eCtb5KkgtX-!UYi&L8=OF0tKar=N z{)g{Z-Y`)=s;G@f(Wl7I9He%UkuL{p>`6o?=#;3I{jELaWaFbc`0+;t{nbAH>*e+Q zrcUeQ3q2739RFH&K5+b0GLjYF>z?>Y%#9J$Hwu~0jZN#=-x+^mmp|3y>Ob)!iaqsn z&TG&41%Hcd{L>@)xJr_O%lM}FktXFl_(`=9*84?X|pWjE`NH`k25 z9S}|Ud6l19ezo5^JfHT*o~Eehra*MKb<=gnpmTBLS}*5{Wxdirt;Aog30CdUOV5d{ zvk;W$c)Xs0C0GBxzZBcY5GRSpLe!O;6lc3FLt8i$Xoo|h#Ue56$wzHaF4AAb*|blW zPN5CnX^roTdSuS3X|=!k7w9E+;dm(5$}Pouw@-QqIXO7i@T!HY)47Iw`lf_@Q*v^w z0X6Q)H!;ALt#Lv6$XV{RR=qjk(DNeajR&tvgwl)~};wxoYB%|i^z7SnxF1+c#YA_MViYC`_#H^D&0I4P}vPSylm*BS~FNyR`{K_5aLc<2tg?Pj17w76C6fK`D}Y5 zTH`Gh^_lhZP0sCJFj)$qfkAavr(HLuv1o3v^R9ASl|7DB@4#;AgDZp0JF+$#YS~;)}0F zHZ*0JMTdNqjJuUe(NFua=gL3-E55bBRn5A1;PcOTX)gYpp>;kd1teg zrAB0J6h>YKT>IYSarxXbvv`dF61La=40gu4f?aofh(-Hqtm7~BjIWM~Mlya?>l+@K zk2CrPGuw$E2UrxB~U4#dRRc=dOlt@Ceg7^T0gUJYmI;CU5C_3t0d2_64W{B_Mb^i+feNdMGWVI@VkGF zC$Y&{=@{LgzrmH?{zb3x!3w6v`P6&{CE!5|znr9~yzWU5k9bu7noD=imN(-AD($KM z7OLzaq;T0YUYmiSr2YDo4pC2W>V2GfH{&IND?Iz(cGUTRwQgVPh-5<&H2g~%f4WMB zJ0AITJla>O=^6_T%82L{g^cGgT9a~cz}M}_Lx?{TM!&}=`c6T)5e#?YWiKnC|9Z+V zzk4jcUFcYZxAhd>V8ipl^DC!J{GjbNtnDi=*$tWA%=}ETu^hu)L!cn+C-@x1)h}CL zT?8RFo9eG4si{_N4te8&@!;CVc_D3J{)pa;1F@Wo=f*ZRd^<1}?cX>6UL3G3`b|vA zN#cVf%&HP8b)NN`7DkR3>2U!y9@+I<*UoRKB8fI@O-imXW4c0et9v-7;RsF6|9T0Lzz4wITePz$tAS34!BnMLl!o+I==?`CR3dKz}R?~ zmo!#s!Z@`T;+^pE1Zl>5L0%aE#7=^g`gR60_cYgQXci(^T&iB4|*Bb-=^@8ttgW!AboW1+rd&s=a*Am`8dzT+E zd>_5{AHR3TkJ9jKw2$kM{)XM{A@u) zS|@#g&fs>tx>*sAq=zL_C|Z(MNL~n~BuM3wAnNdcRI6RasdP)nTF}Vrq(~%NSJo6& zJ4~%-7SJ53(v673jJ2hVTo|L6VFovrlNYDu(jQO;esF@Zt0=Avhlr{-aZoIN$hV>x za`F>*V_5TCJ>^9=>tyI1fa+Of3{&i=f`0f7s!2D{vUWEdf~jm+ASq6{Tq=1qiyxn$ zHDqTcA7l=TC;>d%5}u&LM`+}V8HpT1_t1>RZ{=j_FGir!?#=NH|G>^fN=u$Y&O~i$ z#S%`;S1fX_Ad+*lPjA8fCx-o$n-)|n_8=}F5y{ZsIgw(^z)rwboY)4pup3CJN|6CD zIi!J=t4&k4;}Fj=)aPJ?PSoSWfXKHz^_?Ndr1l$P$63-bA!DiU7S*xiT-N^JuM2pE zEAG+WbW?@DZf2a|k1gAt^4_aJx6+o?M!v?T&Dp1QQz{J@aItL=^*Gw}#M}0jZCg`n zmZ0T->nQ84!x&6s)0fmuT@Eq_b5nD-O7o=G4YQe_Bq%nT6eDClDDs+^_D~)95s@Tq zZJ;ef8Z5gm?QXi_%^Wc)DSL>#=LzN9WQ5q`N1?<_{lO=%Ya#N|f)un3blHzU$xUn{ zk0@hI?DT_2bpqpok2egaFViRT`3R{9Ym#gHXk0zjmaY!D>z?!#88>Be1IwrC-Wci| z^5K^;fJniuaqhh1zB6!VXXi5KDYbvwo}W=-n7Bqjj{2?JH`tKhJiC3HjX4|nJ9qA! z-TBC!v)Avup8U;^ym9vW8y`9Q$m`~BoW1$_N6zlvee>a+H(tO0#v6AYzVVSa+5F!| zmrXqzX1R*r^< zgR#DujXQkjS!2es&DhRn-4MqS#^D{K9b3JqIhI;-r!bhOy({k6AC$}U z9dLw>>wC?sd6!9Cd*aDrK$#rsf>Z9RFo6zbwdyjcacIxqmxsU0kJv}m%ZJ%Z3AWIZ zwP2ctEJl$pw|2lE6i=N&DuKgVEA3D>dt2$E)KDfL*~y3gQaMUJfnOnh0=;!dF(*PU zKv0-TEG99Drp!31IyNyXyI$usQe2PR__={bxGq*rgXdQOY7<_Y@yLMZU1q_RpBn^z zH6=F;G|I=#zq+M^tpB7hTJ^a4PRzLxL074+$I5x*z&8zZZ2>~9r^hU2m92rHx8u(a`u>5iIcb+2LmMEOSgeG zj^tA|heA))II16VwC!HpxL~_`%)k|=>GX|=lKX%xW$F0jopHb0>ECw~G|U#_0Y z_4x{bqf@U|Y8T@tMD1iDp;Y{~pJJ?3Sm@`8HAt?de9jQ>6p5I67JOpcPh#@~5lQHY z3mPfKpHkDSdU9m{<0TN=tK~XL>hrB+L+JKboQ#K?=$wP}g`Vl5@kv~WXP&AX7yGLH zswZ}iTNWbvoqj-%q%FPGgG5hU7bL`84!zG2d~%aro*QCOr$Rf%58IUS5lKCR9}y0s z@8V2TV^jSUlH)gv;(B7{nA4+fpE;h`e|77v;$2VV@H5vq+sBisv`C!XqJvg(vfp!) zjP}oyU;k9p@YTzcHuS`G9B9w>#gE2`9CTl0Uv%Q;cy?|{e-N*X9O>wl-}X!S2NT*P zB-4J{E8TIKf9Ua~trnz8W6v?te%Md8CwAN{<;k@61oOtJcm}%jrKcaz9f#)9C+^~O z-LF>UDKEb%lE0i9e9zyCpZ$Q9jBEXlAM<3e?E;RCu}{VJnR)P&WSlc&z^1JGlW3pq zt*^TvHToJP;d!tEWm}A0^WAb-Y;Py+YEct;>PW?F zmHt+8JhU$v7Yg$~O064dh$d_&1_%{JKc+uQNn7bZJg@PCUWChP#Z0WG+YWk!6D@iA zQTzlgV9jV6=Pbe$tbtLDwegT-jE03*gY~3*1pUScs z&juZNe{Ak1G;a_n5A*ESjay{?(tPo6anj1?$C0zvxDEX}GPit6ef!qg&D%E~V&gu4 zUislI>aVHKM*j{^?2Vs(`9z!V-q($Q*Svmnc3^8ZyVh-s*F6K3bpu8Ilpd_>=dN3n z$s3={6Of`a(?CY{9E1`pVdUHMWXhPwb8SH7pM@+ut4 zo~m6cdVz6)&~TU0Pg$Et9O@j_F6v#yFO8Rzx`+nkFc1IS6( zjuG}MFXGvwF0ULPEc~39)9=z* z210(;U3|xD-yDz+sW$cMU{x9M%A4el?;<;nt6jC3 zR7VT#a}PUxb$kTN2{{+BYKzVG0_LgWj~Uv|N~Ih-(7bSzA7xK5ZRJ9hwu7fg7@#Qc z|73-l3y1_5q37VAk|{a)*#LmeU4?s!)lCNqwhO^rSfkf&Dl4MxB6;K*%bWCI;e7s< ztP;p=NjykVDMrO+lZXI%wx_;_otBk={&L|Hv=(w=cyTm-E~LoCk91>{X5ym1Nwi4~ zJH0N<)Qy33+h~6Ts5PWzEOfohVjB4}CR#qJX47nanB>(-b*#$QsWu^_!H8VqiiM1swd; z)%2C|LoNPCr|ekQ*K~Wv3l&*u7X<;5$Z<%PNiPxtY_k2p*;5kRJ z%(DO+Y{zrjp|(*oCiIBB09t2;P5d+hx52`O?(`=~ocOPzb^hslF45&|{0$quS~!xY zN%%#(0O2`TovbS2X}wugE~Lz;}` zbW|z>Tk`l97m=?%qfTe(#@Zl??th%GvjL{5yZX`2C@HsIRt4_IvCw`g)J-;)6UT$+j^xvG_u1Eg6YWh#V>9jH|kcJHtZ<}NZ{z>Tz#0!KIb`PvvS#gq0WHL}ny!;|+Sx_=^T1Kv8t2XZF*@k=^b8eV>vk#yf zNGCFXumu48>;(Xes%-S7__SN&%6c;ane{{(a`2+7k+Nl9)}J5r5+e<^i*YX1w6!EloaWL*r!FIVsGdE6kP@yF4MKQhj+1~i!Lc0A~wwH#wr;;FI>c3cR zuUD3Nt3(bmwTM#A556U@IF^e!!b8ITq3Yr%)KOcj7xj>nNkWWr^=%ZDCkH`7W-Nw@QDnV0cd`No=sdzFa>RJ!L*^s#y z3tb#j*Ud~b9;(Js`yHFaRsRvnInYWO>)vT@uvvU77vIN*F6nf)6)y2LHf2qh^)DhJ zSwROzHW*YoY%OE-N@3c!{1;RE83yW?d&+B9o~q;DJOGxQI2&W+Y*iMbs7Nsh6~HRQ zx3ZH6$t9Imj<{KCQp%N1v8sB-2f)Nz1mk6@K1=)|PybhZ@vr@@H+2vvehIB7HgLS} zhOKS9h^PGuMA=K##^BGoL6Y`s5c`T}{uAH!fk52D=<)2$K)uWF3W*c8_$4<#ifFT> z)BWoA-{2`-pUnv4;@=Wh$FYq$1W z&}Cake%@e+CF7+NpvlXcnmlt_ay_9IF)f-zD*TpgdYJ1Fj025gmG%;QwZf|^pOoMG zKdsr^*i^RCY0s;Lqgk<;+Hro2bxgWh+Ao|WO>iomtQ1TyqPG2 za-_OH@h%`CYmASR!?U|M9lh0*+@GGunn(3R#bSnbigBcSW%V>hHl^rRv%2+WUhf<} zOm>?L7dC@On_Qga;$ofuPS3e95PnU7^*T9hWb3Vfx*&?+Q+?%KP~=Akg9D0ieDd9X z7Xe%hViRIE&G?puQMriUWmg%0omp(Jnj>S&^uPQr+${Q)E9v-BcF`+!j=5~c7bQ(z z80>%FP$)~*#jm*K7zez_(k{yN`Y{|XU{3xaHgzIds_f$Rd_LS9`~cyKM7vS?uWsRP}vY%KjQpKLa=iFtgo49%FyRwZLq zNs`R?M8U9Ir$3aFXuC*DDbvgB3H{cZ^6xmcUY` z26HwEQrr-l+!#{@nxFV?*7nqwYy&}B{S#TKkd&RFrZ0jRGmB}K0*s?9S_Lb> z*joMPAohRj8yf*8KC^%=CkrD!Mn0mOKD0dj15mHykKG*3(-;eqoZ`NS*D)T?`n|~9J zyn)fY!H)vxQ_c_PEHScgQopQqFSTj?ZJy^B|DI7##O$9=_POIZbDifatc((zqqfp$ zNQ-R**ZHGPpNl$^X^YrRd&L(u;N;=sd&1zRs{#>!B|6@6)2+4iP1l@(?APOXPu;eN z=?ww9&bl^Nd?fDb3c)RVa>90gGnM}-f|u0%h1c{9Yl~>Rca0F;@Q|f%}YR=&dE)5D~Bl%yOAnQY}*j7!ElGnExKSdQJ zEhj6_(>2QLS!EPUZi_`TAX|#vF4(_mQ_Fr->cmo3Sxn5AH^P}ekfORKdmyDhY1zQ`|@(lVv+l_-8G)4-=x_%XB;Uj zo>4@oT39ssZuC7r_%lzXPC&)?$DR%9Z2mPcHq?m^V)Ha#pX$xZ8V99=44CCB^!TBZ z>S(_`v0aoyhi5juL|t~KF!`|yL!bNzr>h%xEA1sOQV%JIwY}!6ls_Dl zm$i5;3wES4rtG==ci`5EF$3o~q$dshAbtOV*xHOtDRW()J#!MBip9vw+m}ztUZlN> z#tUR$z`AJjMU)*-7yn=G-b7839mmn_Q#J4Z!ndpH;s*$s%-qb~BQwu*f1}KhC=vvz z#a55S7b>~X<#f`YYweq5_RaFrL~#=3TjTNYC)1pQ^xrp~gXNR`+I=BVFDE{o#^tNi zr&|5VK=fQ`bT#0GfaB|AZh9V+5a4t}9$fTPTPG!PIr+07QWWX=uaTvQ(Rw!#Kp14g)Kiikc&)lo*y~G>nt3A z3j#N(JaFd|Es=@a2|AWPF&M1pK~^8*isP1wq4=L%0L61!@EJF_Is@~C(37n(JBD=3 zmvWE>@NkG0kuU6M=Lw4OLW`X*ZrITnFQl=ybIY&3fqd!{IzJ%bYlSX;ez}4l35F9! zcPCJ|WiGkV!5Z8&ZbDZBvz=fD`4X<6O6b&wk%%7vromu|OpA9zK=E;*oeIR7Y zRL(baiErb}?FhAHm7O9C!fe$?o>>V4Z*a6CJe{}NZM8;arz&u`H*&f5;)y|p_!+c?cn0Q_< zwR@j9x#6AoN{E~Qu|9}%+KZ!^lLNW(MILsa6g;H_0EK+&y!AirWh5hC6$OF=9xb=E9BjP)qTRGUs*W=}#BA z5g#MxJlpH&^^{Tn!6Zh;5=h3J{iU4d1zPx;OMHoqk3(_(^07dkl2LlT1fbAIbXOQA zo8q8~BN2a}2i2@}2WBW0{+=ik8Q6#CuuK>a4x-`KxGDLL6vu|~iH53%&)wfcW{ahK7pbpz-vO;3{z*aze_Oxb#KM~AnSA1ow_@=S?^fp%WrQ0q05TWJ zl|k_GgYPEr9O@p&pXSR0oO1$0ZsN)>gI2!kBnEoUTl$5AnnP#K3kZ)OTv-|7;iG>N zh~@h!lSD6*{haj7$*gKrj0MnEGKlaUvZ9^h&=M~QHsEw7rh$M?O@OwWi|_OaYy zJGzb-3}qkDogbJdeJocN`jls{*k9|Pdt5p8S-9H1>FYW*CyYUB->IlVuT9T{9YJ(p z@-0*B)ZD4q8dn}bQuZlE^ZUab;=OrG`qsF!oaB42YL8hsoN9ZgIcz_XUYXx{U(xg_ ze{v2bpYuS8GmY!LLPMmMi7NFzCLA5_3dc=4tJ@A;nmW)52Z=;CQ8|2W zP-Vhqw&9GIYOk`fxXrzStyH-@PGAF&8$jZ82eDadP&;#EBLO_%#7f>K_8xOTfi))R z6U+P((V^;2N&@2`-aNc55QbwFq&6EBU&80u3M#RBLqN|_Gp9J%d2%Aw(BN&G6ic^r zXCTIKE8E;@orc`wr`R3?gp7qIL7k^S{m!(mr*C|PWffDBKiLHv?jeJ~u*M}YvXAp+ zk)S-ll2loRwVe#;wrOI99laV1B5c#;B7u|2QYKtxxsub4m#^6#z2@C z8S;O0I5r|q?d_x^+wYh|Ce6&{Gpy@fPE&?Ai!wRLKKmmtca;`)am_Twr|#yqSsL=p zm^{bMzhmqS$FfMo?Tnl=6wNbS;0T|!w^#5I?Kd%Pu}c#oVH8t5M#YMgZLCqQ*P5>h zVh@3G?=6_*x;Rw%)N)PsI-`@Lk4wOIfJuV>M~^TzH57Lp%g(}TSJP(>%n{I<5j(`T zh6YX#z-#s8ujCI7nK>_oP#uc7`Lvy920CDFuIcHft~v(w|GkLPu;o3 z%)JprgzJNT1}UBHy?96`97jb9(S~V`%DeaZ<<#Qfbr3V5Rj$; zUe4K`67o_`vE}y^_(5U_Js!!7$N4cHeDuX@3@#KcSmY&@JG&=!U}~MrK{%2QwmbSF zCs_2U(Z`R8bxvM0I4Q$znF{S?_c;#n#Kpup=5k?|>j?Z?rF!@a9nK`505zm-L1*RBMi8Km)MFXuc^tG?K7bYW4&PN(?pS~*rj4V)f*q%p|Te45OvWv{uXGbRY zWMLgLYny<_m;%WO5ZQ?-o|930IF*OzL1upkA_F-lHBiR{S;9$TCem@ChYfDQEc0MD z_XzZvkd7HPP=26|#0 z!kfk5p;LV1r@}FSpMS|6TIS<2C*Z&^d%mx5d_Cl<&5vHbvxe=%MJ_6e<#RSFe8ks%Lj>o*VaPf;YGl6v@LVzv z4i>D}0F1uvUwZ!~64uv0>kp3g%$y~6Sou;G9*bg5pxlcz=fGAD$_*gv>p7$U!xFAC z{?K`Y-!ts&ljj01!6S$2bM}W%LSOq$2tDOjXQjI(EdOJ5hu8MUi5&BA?|M(H9|7PK zeGUzsJh-UwmQ6ht=x&h`Cfo2&PF-W(C;tbu3gB~=slJbv@n$a0UgzGo8Gh$=M$x16 zM3LTBpW)|ak?k1w=5s6d1aoVARQiJCv*{V)3!LKT1g<>Dg?|!!&X*65#=a29=5K+Y zO_z(f`0Ov6e>@=k{&O*MBBab*rFD_&j{=0>CsS--z)Iv73(^t~oxejtB=}m#g-(h2 z#ejW4D@VoV5FsZnJjqiw{rB$|FqR9YN9-8+*8E&#{RVu-ozu6o7I*T%3q48rmUqn7 zlY)!#INXAl-Vu|E<0c;&G%hYMxfpA{rQ%`7b2dbg#bJL{9RCxqHis6#^9gS3)?X{~ z!#)?qm|0`gNj~nWqX8vJ#QDT0HzgoQ)AIr(E)mLq5P%2-o{5Fo$BeBvRR`lZ@}f`B zam<>87?q1{K%AjfPR+@#BnNzMItOUW7Z%m}kFGz<&zkHQcdDBls*^h4b%H2hI7~Eq z46J$ZN(B3t!p8a^_Mz~E)(VmLC_XO1dqbI(A5mV!jc~nS(P9m|`gy=lUM_kaI%JLCTdjd{Wr-Cai<`@eYxb2S@ zrTlh?Dr(hWhIl1Wzr)5T^P*{VHLX0WfLQXx_cXyjn?C7HybcIg=P`}-R$@@eY9u|4 z*h1z6>k;|921$X;O_BBYTuyvhk^=c9GegIGWDpzE+)_^3ej@HntN^t=uo98-7L)oMM}kn>{WaHm;+=Og(Fm{U|TR8M+{6FRCNb%gu08jKNm>)v; z*+p&tEMo4U&||Mpu0smqI3`q5|J0v6G>5sujvo=?FAm9maUmr-6nS3a9#*@-eOJc9 zy?lqOFBpt9$`OFB`EkdQ@$ZicNZYu{DzKA0s@1@aTXL`Zh*-_hzOx;uLo)u+X*Wn- z`(JbPuIz5_aLa~6%LnelF6|yN`xd}?-YzbGu)9b9Gqk_Lm=^##t?}E3t8y1hC8S?2^*&7W=)-^blAQ?HZM3&ZCrETXNCP#@GGJM=H)&xh?hr&pR=9w;bl z%^o-()N!6Vm!HM7+0Ncq++jVW&Dr8^$vW^LE=dO7(Q*POGACJn8DI+!*PL&;sO1w? zW?ujNc3QUvJlu-|doLQyhA#*r^q=?B-sB;k9MC(aZ2qN#!sbPQ6eOVHH{b5)a^xQ| zz)*iUlk0!;faSmL=vc?a0Awy%;q${^tEyk1liwZgHNc!2h@syBIleL0_n$Y4!k;F*3-9A zxF{A5g9v?du6^$poz4qRK8Xw7^WS`XK+BYujTTl81Y7H6ckEzQ;p_j>`Ty)i<$$#2 zoM%+WA#W9*f+3T$QC>AH5L=54M2q*CI`y(1cQpJ@D)IF=ZS3~)dXe(NPd?-m8%8@-s z8oK;VEM+Twa)3kk0bON!0@PRE!Skp z&Bx(vQ_cjG(Fl)KohD%|5fX>vjQyFhO3q+pWS)B5u}X<&R&kn6I=@`tVP070;#`G= zM<8_mvwQ0Lm?m$phnSR>VdC*|kFW0+k}sTIcXhMAL`TNXwAf&xf9iwIQ5$2V%>G&b z<)d8KTPo!LPd@qAK6V_5IQsVisO8?r`-t4shu`^obpSJ0dC-636K;8GrBZ_kkNG&gr?{IXCqm5<7xBy1U55Kii5p7+*Dq zZI`;YpYTumjl+;HaCHGn>Ed~fe&8SP+xoBn*3RaA8=pKeH2>XTL32D3Bo8-<9t=!u zQ6Io-*K|Y9i8!Y@py!?UMe_U5b~$9fQvVs2V<5kh!}-Ab3B!-F-@u!=!l9!)ALrfR z!5#IT=Q%=pcet=z(T$XwH=QH9k)H)Kyj0lhilq7Mg^!pbKkkhl|at;PhR9J zDkp)DzcrGs)nk~(Kql1vrSzCd3V#O2KgahuglHMJl6D+46yqTyM-;;=7L5e}5=9qZ z)yB|0Cdpc_voQHTvB05_7i08#S|_dJ&`G9=8~)_P{4fSXHiwmgbji)Ns@_0L!pkWl z`5q@K$93O`$y1b$IdjF(47YQ0ni;K5tub3VDB6upJrvF}v9cyfE*NPP7g&5}%q24j zjs-BV%Mu@{X0Gz^E$mk8dQ5l%c@nh1CMwGW+hSn>;`y01FS_$+_$ZrK!pkC`;u!;2 zmlAuj-AP_Dn%A)$HTdxbX_pe2T-6?U_Bcasjv=9r<64cGdt(P=go8xEoH`8N2&oVT zK>YNQwmO5GUE`#WwI5eul3&NEwKqZB8Pk?VV%as>M=`k(Z)Hh7dCf^yUIA1Ym>KMg z4lj=fjR8`O;dI1HxBA7wIqN%fGU=P^SQ24MnTc^OFs@=p@xsG@Ia?eR5y2-~=Szx7 z1z}u=GUx?32*!>tm>N(ovgA;WA;B>wQf1xHxRgiA_K88|09jD{Fl9D~IV)xN4*}~Y7RRW6hU#si*lSZ}EH z_;@^0U5ojzO83u}a}UO$zV(eA6B&O6&d?TV_5sf4@+q#-1+_g>{HXUzfrjFdMSQH| z{S%Kx^%_{FTjg?jYkqNkQ5-yv(zDOi^4EXs+n@brjFsfSj{!}ZWZw|$0ASCv`6)Sv zYxAy&g_1G{PtWqJAL~(r5C5V#jFxf&MC7197t%zz>qm74u3q!oJs2K`8s*T3r)+1x zqgT79=*4@5UBZE1sviii-qp0dlI5b29UkhU4c z#m8aH5Dtzna+u>WgM<9gIS=1lb8*+jjtglhf+MCJe9<%+m^YO zY*bb#A<12RpjN~eBv^Dle<1UZi)^_e*MH-{#oBw$4b;qY=r=3pV|ZWp(4cr&1Fw@hIU9U30)>eL?D32N{+E zXekL5nJy69R25?!Kz;RB?xXYZ9v|n58Mh(99nr;Hs@j**^R0Gv#W)8}Z5P|8s$y(2 zGWW8AA@^EJyB92eP-k!)kV>?v*tUb0MHm@9A8~O`*=6G}0|Wz)A9#ICvY&J`C{D)7 z9-T1(ROxW0YkyL+#aN9*#6A~D8ywM*)w6;MO|*0xXBzO7`B$t8y{V* zwv=$j5rmX0n3F7-TJ@R32AGYIbwrsvGW-KkmKd!@!`gKmGlDn=Zztis2I~0#F$RXL z|KgBNg40&t9a{T?837#yCkkr(kkz7I$R%J@NB~Mbm94j5MQjKP<<(T+He2#Jl_gK8%O-0vZJf%BOiaGyUaH3cXvkb9I3Ezz&l(dNwT^JVWZ~ z`MT}maHMb!GIZzWBjh8%d{3w+{W=;yP89U-Szf041n-=khy8m!0<^qDuR-mfjr|;T zk8=$EkghWreAgf&I6kTOMUI`uiImO9NOVT!&8mCsPo2!U*iiiGYo|e~eDV*wF#Hoo zFJ5`Dm0tLqz-c2R_+m*E9R`j)IA3@OmNUDZ!hKvD^5+Z7B}eC!_;m8u5Xg_b=hz`J zXw&#d4157&?6D*dE+$eqXUjxa0mpo(?RP7f*?EVUG(29l`%S=vghc zF}R{-jdI-rBfH;TXN(>$6#Ak{h8ZV(a#x(#jggFQg2fnb>B8mk##;{?)=N8M4B^y( zu^)6ZJyI~=GT}xm$(_2yhz>P*D8JcX=wh$02`-gDo`_N7Lz#FUzKA+v+b%ASK_&3Y z6O6$4CohO$Vg9ya(AKY*z(YbZc+rjumb4tK@j zuw$c3J`S+yvQHW5VXAC;=9^qlI)gY9Yn5@RU)u)EScGO?M8rdp$41{o@;IEL0y+V@ zPAgaYz!!k07TpoZhRh$hGw_(vMkr@N51H*PcnTD1nZ*$`tqlxvJ*Y9I~56rC)2I3@GvNXZL3sFKr5K3i@MBf@GjBdsMtkh? zWY4-xD$R!cJd4b+zPQd(Tub(~5`SwMPjn2}_cjBDpNxFnlg{@xYBR6ntwrEoC~KUt zI2~_12+SZaCpB{-4)WsS4UN8Nl3#qHY_76#pP@M9ko<+vy#}A2W210B_lpKz)Rde2 zptRjE$4W5iouBSSq-YMbd{NeevtseE&74HPeQ1!0@~8KB>apDO*y~>AKkUt`bLuuG zrpjZ49~C*-jsf0|N%wvJ4h5<6-Ic=OB#iIBz~R#$aq$i0a2uF8bOb{u0dxGMI{UT9 z&LX4sUm1zd*fLJ1^a^_8fA2>;$`fC#e?$E^&}&A_O!Fhlqqk>uuiX*I-=VHv?f;&4 zS$^6+MLp~FX8@Tf9dOjT*Y{4L0jJIFH+ub673Y9~a<}v)pH@vypz-*%I$UMGay;n| z90kbR>oGIPi?eB;hn(>A0BolyS%VPDh;2xqXMak8}1t_g=TX z?Nsa)C6*J4y`OcRvaQ1Kk$5q44ll$o-_Uw z8TiwgD?jT&r(_P5m;Uu<=*aY|JAH z|4dtBIv^Gw`1LVVei;ilEKWu>^OH}7NGQ0yCO^Be2A5(RgSsiEVjkt}R0Kl@`UrDq z7$?P3U&^>!e^l{F9X9f_-vL@uBLpdR6(@07mtTbqUe&3!oytWs!g$-0Fw3C0duO37 zbbr*dF^_i3Ps;GCHh@Y6<${f{Pt3BNrXWtX4G&zaV4#f6@v4(rPXv7_62xZP{Vb>Q zenT|Z@U9t?TB`1sbflX(wad6daYWO+dw$VwdO6tV0FD*yO#$~}GJ|4ew-c27&aiPb zw16V8O?glmVc*GD@adl7kORf_WxQn9vi4C)WLOWBE1l$-^*iDr#chBK-@ruKiMQ^N z0w9&dSny>hL*hhnuqD{))1|W%aHgQ5`1%CfY#PptcDedE6-D$h;mqt`Soo%=P3TNi zMQXnI1yethoT?_hE5kCZyFq-JiIei1&Prejw_aEoOwL2@c?6t~@^Gy&O3k&w>oE>Y z6D1yzQ+E^t08J0wDz_u5n`u=xjkBP z3ee*f!0y9gi;@FlxyIqP9^LfI?D-fS&Cq#FJP`Xk6z86t2UZttTqM@Pw?Aslql%Wb z!dAXK4315{@NiW(meySKd6~h(bsom0wrnPmd5+dxAdBrgE0hUp!;GvFJ>S%0;-pLJC^F+LH2*?alh0MBjT0i;9 zL+hVH&xt#quxp?CWNC=kiVGse2e&)qE1$WrVV1l64sQM|Cj999hFchT`6YvX zyX=G~Yd|U-4%m-366m?0sWntl9b|IE!AX&e{!ET=Im#4^!-=F+@UbWw5Ycf#;RKd( z=PDo@Asv=j#FmC8}a)>ppg>)z=wYLF>(OWuG}W< zaw&GxXD~*1?MyljL$}<2LCBmOj?8n$LoO=Qq@#Kbwl*nzVI2hco(dPZnVZO zV<`@<$h|P3p?ErIJ&(n8XEI~(+Ui2&oQ1Q z+4mPH4dd{QF-p@T+Zg2${*Vf3Xd{U|=Y{H_S$8GoR7DWVIv}Rsazx_Tc@dzS1*{A9kXr>rn4XOW)M*~J<$S`eOC*dhlQx_Vm3ZZLE7dV< z_`%Sq?S84+oAluD^(*MqO%G0K(ruj`Vk%YHUhdhqA9kz(qkS0*DQSlGjdf5gS7N8^ z>mZHi7YpY~94Xzo7H7!PL82=6HsTSUd#GH$4aRRb+{-)*r&r=QGm_5g` zkEeVRjlS_<^)MuQVnfZ#8RpjCWdX=};A00gH)WmS zWFxazFd7QhmS%QEU;7JhL#$bWsmFnavd4(#wf+hA)q6A_NG7ereH7JuojhIAs9oor zg+u6g44j^KmRvduhHX^{;vMxjbFvX^OE}4#jL)4TvuDh&Svs2Mk?5}gun~`vlN$$U zegnH6zijN`l<9-GpEP1lpEes5UHp)~DyKO+b-r-_DgFz}w~%YRYyWV5vAie_tfz5X zs}uCp!6!4l!8fAVdl(#s7m~yDR{E*mclhs6_lfml+8c~^6X<~G$gqw#vPSs91{qiiL%Rifam1zV@d9Pr{)~VLs;_UqJ~UMzA!d1 zzlrD15u))6isod6$CaZCk4Zu%E{Kzg;u8ZMhNHwjM+KdRLcW} zM>`yhgs)^i)bI%0?@5#$wBl-7o`a}5iH z*wpERiR`!AwiYRvY(cwOKD*Kn!yc!!9vIdchk>KVC~9YKkvQZXEYKA>VNs?WFz30_zvSe|s#ip|CI-l4{)mj(sVS+d^6Qgsf9th)iBU9$mRMJr@ zC%a@>zUG^L(0(B@F~V#bRrscEyZqP-C@IaMV>Z|su3V1IRwwzfb{>28gV_=S{lxIG zXp?mQ-%$`_RsoSxKLNepl7{Ci05Arsk}(v+dvwt|wYIn@AI}J>sk`{GO<_HtXHPju5V>)bD6&};^D= z#7Z0pSd&KdbsUe)L@v`sz#UE285w|n@tzERhz$UPN_T8}sVAm+fY49)s9Gxqq9?-; zMID{G#EV(^N)C(kyi{ObNUOPwk^7X~XW1B1)x)&#%TG4XhRBG8Kc#kBKBQ?(K<3ig z`M%OG4(y^|2$&CqhC#|B2Y9>>CSTGGF21kz4Cn!M_#e_MM>L-hpX_(MPd-_b@puHu zejWT1_AdAz(d_|u`IS7@H<&l3SGGfwxw<=kHjKnIRlgYLVB4jVwUuoXcjRCE{Brg= z2+DrZn*%6@BU$$!7?%xU4bR%6YOEaiC)8<|?H(M&C*)y#8r_EYd&Ofse=5$)>`GzX z(-iE1nM3Bv*cYZ9c_Y8W@3vjOq4{Oi4eyN#der;Uceq?^edy_T(e%@9u>YAq*B8gQ zdX79_Ty)Hs3zEcq`xf(PW^;kbvts#t$7IpnjD;_xrLuTSP(q| zouh31(Fd&IrtSPl#>d3+?%WPIoTf!%c4G6_NK7V;ogtQ(PaC|j!DE)K(I$*-zJVT2 z)9AwA`3V8fGSoiA6HpEjBSHtf)hdh1paYY^a4;t~g?MeAi0nfy^N_j(937gtVE4?zRajj2Yo;-u5gD43gcbQZk8SkW8#=)+(6j z88Mj{D|hmrNTQe=?d#}XBl}D!kAs29ZyIxf!K1}vQm5$=$n0=ODV+(6;;yphz_xr^N6;M_Ib&!JlerqeL>i~0rMbgP zoy(XLcCgL>*f@EfqV!9a$-?tO4B`AT&XDkDM#D;m{BJ3O(I8VYd&R4_^256M+d-97 zdklz@Th=Fx;ll+f?NP^Hda1HEoT+ok^nr~pbvd$LwS^D6;|~b`ctD^I|FP-I9#rl~ zu#T211$N0%1Cnm8AL8*jQlQ|DHmvGy@ z^dY36;d26#A*jwY$|;}Z+utyu#P8qoKYho6m;wcQRle4!^-yD4e{PdF$68B%DIzlH z#qg-mXyxIg9x?wThP$Cu*Y+u~+S@+i{+H_?)32c|aXs07pQ{XQS0ofFKAGy|%>%F>n5~;_Hkh7kz5lUGe_Z_J z$;C%^0=dY-noYW5s>?;kzX*_v7+75pCFn~n|5;p!@kY%B2_NooqPE^xKyh;&IGw($F_qu#fhUK=86Eyvw8Zg&G(&#Y1USls3)oMQsZ2x zn!xZ4>m&{^06*|Bm>oZKCs#Vfc<|~>e}`Lz0^wq?+PbVflskk8HU@)(L9qu3MXpG2!H3zzz=&*OddrA~6gd>o(3}&6&KCm3(Y-8lDp~j?wU#JkB-U9;{PR zx{70tpzGtdLF^6D=Y zv1i=XH&AW3xGPF*S-{W{&&qdHc6TKO?Z`r}g384L7M+h~4zp%mE5#-T;N?VoX6sNe z-yYuNWNufP7mQ(v4|Vc^B@r9IYbQYXi8B@njN5)zs!GracjRfwz{VL4`TIee+~F$E z)|c9`hYgEK97_1)5R?NSi|llKods-eBNDs>qdGOF>xdn3#q?T_ZzxNw)_QV^5Bm`- z#d)eTrYNVLaLH>~hIhtuyhst+4zykO$<_Qen#C_?1oj#ZZ}UOvwbp$@#>AsDKYGZI zS86DVn-2zZH^4x8e06*sRQ1PTlVYDA8q>3(jvt^E#P>wX%l1}kJt~sY7ccplf{yAs zf9U;f_7cb=59bWlH$(_79xL}^^q_W}eCK6+Y{^_f8kk#n@$9$s7e6o~x0O~uTuvH> z=^~yB43EY$bj`p;{fph7M1Bl$C29ZKUJ1s|TC%qP&z8=^Wq=Rrg?h2SC>B)0v+>!o z`@hQi9RPgWaW*|>6AhaW!1 zc6*;oPtudcYIwk2zqm#FHV@{|=3;}N_mYAThL>LG7`wN*{ONfrmVg2ZDU?<(Z0NX{ z;;?_BV7I7ovQIBC_$0EO=pJQM9yuh$(#@j2S%K_RvgHt?W1oExhXybzV~7|A;F93xt7Btir@6tn zNjJ-4C6xFmE)#ETZ*cUGhUJ@R4paCBEy=!hXWvN1!Lc_^i>98^pdj|%K$~^z*Dds z#~%P-zFJ;3CiPL*^Xt5YwI1*| z7DrbE$vLnw31R1&J2?als$ICv}1?Ws_}B3I8P|ql7q1Y z&A3)-^oPt3fOL#eg`UatZ73aa*G$h4^pwG;IL%5JCE#` zq_uOLG&U&m?5QK2dUTy+Y3dSf9SCEj^ghQ!8)aFrFZapQbK|(O%mD(1c}>^fPqqb% zJ|pDAi+t-m?OwQt;$?z4HUs^l$|h+^9C|Co$f? z%JHjyr?I?{prCjHBes6Q*08t7xn$Qq$)POqxyPc;E*tmavh+6@8h2%Riha`KM7fe4 zA!EPPAI!gqzK;7sGhO`|Kz_c*9VdZ%o}XjsQB`s zt@b!*o(A|%FM`k_xCq@778b{>?Y@2DKMwADzb7pxjX6)e4gVN-BmM@n!O!AvIqy_Y zMA1K49}k^phZS@|DzpWGO!>67yH7km*YdGjxi^lAocwd~PZAtL6#rP7E^3@eqEU)< zG6Fx+4#utehH%*Eknn{G1;vJltF!6)X9Z#8rGmFT+`>40AE4!F)STuVVuJZM>qapz zDrWHV&yOk4=WAYc4AvK0(o^45#1_tc)8(RWR)>$t}pD8MFZ)KOtFK{5?FSQ&;t zLYVAWr~#XPMhj*^?2rmNpO4jg#>bWLXqdT^BPnbu4^6t2niN?Z{5$X0$kQi=9O)&9 zg&CTSQ79n20IN@%_^i3?2F0cIkqeqcngE52oANM6iHcQg)fTr9d$vQXJk{jW-O!_@ z?5R!W!Yby;p!u@GD9hxJH|M1(&7xZM`lKjoE@)2Vw1zEGc?URmhf)L^en2!2= zfdFbnEpB`~53+M-IYV|tM_4()aIEO+**@djd5z6rI!AfQ!&p+14{|kQ*c+L!I@L+k zjV6bs$Kd@iwycBnwoP7i^xyG|^WFtC+?LXh?#L5u_IU5XyV^3?7!N+~>yKJ=TL&<9 zFKFWV^rZBBU*rJIeVeP7$8 zJ5IQp&pVN!wcLh00xl@Rypw7UY+%Qh$=_nng=;P}(68?pprhh33?Y{$#%&JOy-?9d zZrrx`Q;3c3l(rPPz$!saif=>)QM@mb>hwaKc*o4=jte3{y2R_p1^%tSZ(9HZHjS*1+D3a5tbrU6;%OI%~(8rW*BxFCsCy_?yj>N}9Qm zNve@oLMAZUIJ%4ltY_L>(@PT@m|W$B+zl|$pS*>cG<-u~7wnhw-7w$;vAy9jQ@fC& z;XipTToMAv=x!b1{W{J6{Vq@wyJnzGAKn<)WN~&%Rs? zOIR)w$A+a;o|Xxyvh;KqYv#}C48$bTS$W!4sa_T}LjDY(hEMv+>hcwRx}Lg-Z{ z4aXya&9+4JyePKOgmE8$h9=v%j_$ZdWc({;CU$dx3IaLme|R84YTbED1~$yP7%$(T zn|@gE-p_Hys7fxA=qZYfU8^Q+s=<=`u?WcyT(M*U{%twpS`r^FId6<}A?jvi8oy*x z+hzbSM+(Et(c}l#=HXgAc+6g0=gY~T7?koMHahN^WBu;CJZQwd>S(f)lR@RaC6%w*yPwe zjo{Of@R9%VU6>&=6#glQ@b$W06W7_Sq2`QFY)tBi$A0wK@M!LVsXnRP|IO+W<%R9A zAJPj*iW$Ml^xnfGH+~ys{5Qu`L255SPBW2yKu8}mi?Ype+2+Xe*RyL&ptYM%7IRHe~Zn%|BH6TTf*eE zBWoibfxjqqxw0MlCz8*IaN_@6E_C^`?(}!M&E+coV5$z+ml!B0*9&^I_w|+J z+Q;jxJNGu$N5fz~*f96JVi*v<^*VMPmi>2ijP@~(X=!a@9I%4L6!?Dws2e9~9 z(gQQcPh#s^?Db0sxxo3C_4v3-JRN?=ib&O)i(dYdVJ`*g`4bayk-@M`o)GY#V_J4! z72%IQU}S;R7=ygLg_QnZBn1yJjUzP5K?-vTb1rafN<^^afQc`P^qCQ4ctI$zGz43QG!hl+I#+4&B2cPI+CO2{fZ115?v=tvM#NYrkAoqhqZE0-C=+MUI z48x5!M$f5H(=T9_ETp!DrHq}8i7IsoK+t0@H(fcLWO5FYT$Gzs8`^2a9;~w$!0Tv3 z^z<`#4q8fo6Ik_G)tx<9`;MD2Yd)2|;C`5#OwQi3mL$zcJDCeR`pL#Uau;@7)9@Z0CLH!cA~sSCTMm6CdOcghdhTO?OtQr#^5|19DRUc+v1RzY!1J3RTf_; zhd{`~+pB40{hdO67whby0cBRg6a3-TwLB)Q(I9Q?=&~QIUemG!Cp~ygr@z9t3?cbVM+&KqIWcE&7Uh?hq`~L<*|o^*%w+pG$lk#oR^N{}ci6~h zKA^y?64W6BC6XCDCi!SQ`JDwAcwS+=lRsk>iN~~)h4Ng#v%lD06yd7cZ8}w*gLQ0J zk=L%f!hWIu8u3-*py6hU1ju))F>jyCiSN{@@2#@NAGGCRA0BfQZEZiG6ZBiJ?p1HN zJ;X+^iHrE8!|z40likTzhim_y6cpv{3f@u0Ex!NOj{x*0-B`165{aG*&%gDLPdxo| zKkOWT63AONO8#8nfBhHVIgs)pW?`@GoLt@w=ri{jk=|Li0!wYnB_KM=p?>fe=GkJ3 zbM+(e8`rOR&Y*X_bEIGEg?|p(bFde}oP4C-aGUso|0Tr=@=M+qC$b~moRCUQOY!wp zo#W@>j?vhI3zqD@Ho473+P-E;#eNIrvGcfaT6a)h!M0Ckw&iEm>JWclfE^&*{&qKc z=54uj%FA&wm~4LDau^;TlY?7b*;l9WlHRqJTjpsDpeazrlQ{vyEXSHU!7}&KtSh_S z?F`Oom#w6RoI2yAMot|nO2;a6Z=H`6gs!)8K(;^j+6Hjggu!M$YbO$l6gceW>Sp9M z3g|f~m-M}11aiJqM&k)(P8`mT#`%+3LEy_k27=CT))*T+EkuysDuZO$>{bbZiZ9Pg zaO|usoB9}O0vZZWR*xwi!N=2(v0TShU*+p{8YZVH z_vSE3XAa0tV8(@>DD+6A<1n5Fj^VF=@bPpgb1@cTse()e#E5Hu8DphL|29)O@8-P*53S~u=oVr0JmOQ0L`R7?T6`Qz)ymv)6W*?}#8xi(c~B6j zpr(Y-{UEIfkwj?yaH>|{!LGhyO8NTi8}E>Y7+({M2XW=PWkv!S84`tBxo>pG3>jdq z;xcpS#ZH_ADw*0NYW9(!&PRIht6`F^FCcc#td)LjOXOtcde#i?rb$Zy<9vm;P8GZ< zOdtRuh7S(Pf=tJ81dl$Lyud{!S%5;RHKqja#||XtpM3_=s*tDnK}O9fD~EEp`j%u|7+Z!t1Zql^bz2dV#86pl;LL&K zJdg;+c|qgw`OaSClaX;N?t2Ra_KrWy%dxGewS z84f2%)tM-DbWF3Q>B6yMjTfdA1$3F1?Fq2hCnra#st8Ri>yt?`M2 z6M{>AZ@^#csyip0v99K0o&YGEypl*x0$uP}UCYeL>c+BxBEE+GMzhnr;&am;@zjB%q*QSr;ad3|B&qL>P~l9ckf+$kxfF?vaMd#cc~WM_ER#&O?wZ& z*Irz|>V|3OtE~3ANykK!Sz~psyS)C#yhd~Avs_oL`V((GtN@{GuI~6CS8N?;9BPFH z3_e-qXZ2W=AYO1Xp<@K=9z(Ld2Yj7^6=MlyojAFZ_e~Cvbv{aN4=V;aWH zCbILEggq1V7*YDy8ZX~Rsr5au9EiyOjmGoD&5cd6Ia<0iukyl&A|klJFkj@Jq8>ij z;Q&*i5bV~+%e6499}t;b(QhXme@w{o zG$)Ao_~8ea>4RaGLK%!lDn;fHY)BX{u6%XOST}atp!Rp+9AIJa$h;*OaUIzV=1zF` z!#VkQaYRNJP8C~Lg78RZ8@TZ1p-!XWvOUSKn3~9V$%c!2jGU6(5=33cu|bxZFB^l# zmx<2H0b;sG7dSpz(Pqp zdcbC)93{Cz6+XBVomhe50tG3I*d<-xI%c z$r!R;q(iK0ake%9@WJnaTMt-{%zOTNQM_~PhRVz?ELN&VR=wgiz{DP>P=KG$Ew zjLCaXv1vVaTJ-Ap825;V)0R|Tzf(%hXan7ep--$k`!DGl`)Iw&?Jmw2#j<=Sy!xY| zoTkE>SFF{)Q|*+yTu$jY1YUC~;7_(b`d?#_7iE$-rFrVG#}>>k*XqUoS#hO!?!!gd zC+mejkl(5uM-?Xrm**hAtP69B;vw4e>KyJ3~);KXi3gSD)2if?=l$6Xjt_-gw6ErhYiAHsry2 zNSk>RmwgGF@k#s@>>Hn3)2;F;pZgQFLJAX0+E8M_P|FMjwfq57t>4QV67)gBTo8>tU)bpz%J1uI?D#$4R3 zb3Pal%om4sbE*Io`xZm`WF(6K*OgmDvM=I^-K z#|wR$04I`lRNKpG1DHwaJqEQ3=vz4{VLO zQSri$c^t%&I>brI_Tb}_Sc!k=BQ@WQOTCo~b~=1D-$cgZqHbe@Db`#EBv63D#5?7|EDC0`e4CFErnxp&Q=mjyd`qS zt%Nnl(jF@SkqE#J;o>E4`JJ)kO~EG;QSfos!pt8E%{x=?(w2^5PFQseG-O}TsuMqE zW1XNYclmyRyi|j?xXgzLF?ke&6Xy>>Po zE*sk$Nbv6f?`)@N)A=d>g#!Z0W!6r-r%vDx^*2I^G z>((CmY|2fn9o1cO9Yx#2^;oiUWTg(K`W*IVUCY6?&)lw!9EQ}ralYdK9aMys(RRJ$ z12=cQZ|=ri7Hl_B7&v9)jDmVa2e8!l+GRe65%~JhQsg;wStm}r0hA@vgh%9r_64~I0R~z{}OiWH}d9)NP*WI>qr!7LmF1a1!^@F`>Z~t zw&U2ap0DpmyaZ@n@7pX2+FE9hVLb6|&>xE7jZ@{eUsK^g>2T6ZzjE6h`%YKej6D12 zI{rJd!G3tk+FcU{SCX|b(oD8%enW8zSDg0`CvXVf~8!S zKiX5hXqRwIF~Fr>!pZ&8`3$;6+$jA`KF(ji{Xf?*E+H8aCyoE`o5ZETmoFDxCET|I zXWwO!OkZD8q5WcRgxX6z9AP)Sk@xt8m8bpJ_KZ09UeRdYVBVN+-I{X!Xe&4P-Y*`T zz+4k;vd%s>^+Z@6It&$7W$e(`}=qR)2|I4bnPP-k8Vq;Vm{>`+wO<&R^FISyqn8| z*o4}Kx%uo)=sYil?#8Qpx$8EcsqdIcS-T&5zXUscN{;5$KN%PEuEiJhD~DA%@!s3V zQ_UuY$MyF~gksfoyvb=I-CGvH2pg)DSIFwW18h8HUMhsu*(88h&hsPCP`L@i6~8lZ zD|?Q!&`UTnc|h_Fb(7VB*z<^t4brwdLb}U7KCIyRx-a(@#o@`WW03sB;;<)@t+R{e zx=-V?7XLnN-i)WA+I}WvRt|Kfx6{aktO4H-XlaFeIX5!|eHr6`i3(+;yR5Mc;0fe; zx!=cEm*zLDlhM&j2AfyKfvm2QwmgdJpGMHQclJ)om4kkD*Y=j@Rw++{?_VVzlieEN zmSdE{c+_sMK$IEfX{;~2C+n4D%k$zmU0-+QMVBwwE=Xxce`E0WofK9kTu=1>uxXV1 zxQ{pHnPgph9Amd3FGf$vxKneZP|c+NDg7rT_6sy$BgSnbE43waV=+;kuCum9%HeQCog zDnGO65edk*o%v^hkB>9_^G&Qcx#@=n%&ngyni%~Z0Q5oRmjWUY*L&(E0U6$w@h-_* z?AiF<Py`Ew7rWMH3z$Yp?L&z6 z2lep$h-4+YgdYSvL*Fr+ZRg&xht7Q8_pW^MysGF^ertk5anzR}m+pc4iSz}@jD`I| zc^y(Y)D|S1_g78!M0rb4YwYx1gB+M|r8lvTW9lHg!jJwT6@ArQ`^DY11=CV~b*$xq z<0_+T`HFuhz;XIlbval29quE|;*0PRe+9JP78>6jUj~2ac9@s&FWsFs##haY(@F7D z{K@(I4q+&laayg)5Bdh=-aJ1tGWb2kT{iwwE&CD%u=O`FMihIwB)OaZgxvUT-*H|s zO?6MvI#tIczB1Mi%kKM%{7nskel5W6xyz3UeFD9+*Vbe4i zP*VAoe%zE&czAzh;Uz(S_Ube=d#nmK%H=IKyvt<3hw3%_$>D?fgl*@De@L}m+grrD zpzmx~@|(GRfouv>|Bd`xsEhccpcmhCSMGH8O;B_;TzhHn!rtk2uebI$`*m@=C0MBU z!kHtzv(ElfU2mkXsB8bUWnPSztZHw&o2#RxoaTQwo(#eM4Rs@)sBe`g#L>CK?z&w* zyw1`U^QnLK-g;NZyR+!M4w6^zjrz{|-XR`f_Oc&?*Cj627zfS+HekmUky0fFBbT1-5;kw5bKEN~l+yiTg`!1mc zY6yYRUG>-gz)k&*zqG6U5qNq1lF*#nZX_=%6r|Sl+Tydo+H1G^9dnU!-hJRZm2bYA z<1N9)wi4ZRh|%{5q94YMcXM4QmSHifcD2|38sCO-Nczcj8Q zo#9XVppNtD@~T5qlVL@XU~@5T0aRW@n@}5fmOT&`>BaX+565mRJ^FbuT-E!w$=su^ zA?Q2Az~im@3f$;=BfTIEX)<-%#|L=L2T1ee1IL}M z6p!O=@H^+)_Vzm*sD?gypsa$nGWt45JjwJa#g2S(sqY12o;}W$hyL3FaY-dtw9ue$ z3BEF3Q+&%@Fl~V=uP?$4cD*>k<(5av>R)Id4KK*1dlWdjq8CgRZ-V|^~CU>0nDfRsQJC1ocfj2fBxl9`}K}M zI(|_gf1-)o+<*PoKlwXM^CJNHnSXryBLEGTgy$EsMQQCM$sl_6PObxL2QR|E=?8{Mv5^?()WU6$|rZU|bV%MlRe91Y1kpi)X`F zt|7qP{1md3ztgTbCOP-6ymwY~lymmco$5MI+wKWNr-rsW;7(WjJ6kbt+fM{%`?>d) zcn#?ZRj#%R_o7&q*Lm8p$dso=x!RZS65_A=RkKX5ws+ve?L}JWnHP%`Pn^3RnesH= zSf9CSziZ!e?@5gFjp~jzx*vfbr{bCa3(LC{YHM4%_E#&xFI7hIX&uV*p)LIfn9V!Z z@~!~Ue%qb&PWR4U{N93R+|}*=U(3Jaj4$PG@;~z$p{no27RwXuXUe4WEiULE)laFt zBYE=K)7<67RmUp6S?gOO5$yVl%>1vpZ!Fp!x9fjdz7o=>oTFb+!Q5#tx=S~Hsvq=A zjX*i45#0i%>w4Giav?8#Q3RR?6zb!Hzsh%HCEeQ{SKr+}a>Cw^t8imf`CKaHJ_mc4 z;@`D*`08k{Wsh~Wt$qoX;t-Z;35V@>q@51Ag?z95+S=B>kL^jfW8V4K_C-smrn%^= zwEwB|1>-T~@V)WBn$&-LZXx3cRJS+ zaF?lc@Y*w^Zg z=8AdO|0Vy;X%pXtIcy&sF6MUk7OpPARc@d5T*`3P{&w$MT5y!RLnf9>y%X>91-7or zUlWVq9p9CI>;IzL#_;FF$>sP_vNJVi%6V3D!}zKX{|1WfUu}P?hYI!YREt-o_~CoAw)m#=YC?yX_Ls)a7q`!km@o-U+yN1KMLpoOh@_ zc9LzbclFMUzUAPp=6_Fn|*JNz8%do-^Py9c%pT>IGPs4Rh`P%;(A0sNrOSYWuOc6GS+&r!GDGq9Gl?H#VKn#1-<`X%416Mf2c zE~0&1_p3j+JC2XIJ3xc}e*0tgyD?nTC~4c;>r4M>9*f=EE6;BGM&A54@f%NJnsgF= z>wkuZ|Hi?p8~xjab|+-Y-5mauH%zDc4^W)=-gfSSRoC_{fsEi5Hui?(tbMF;>ui4(QeV-1YDC~<}wsNaZ zw#jdr4Ha=u1kH}y|nd`4d(@BS0(W6_nO_g-|52pef`2w zMcY!*r}S9b_sSI;!a|EAr;yn%f*J*D)~@d2P8?AN#S`=MVW=Rco%{+sU!&^M<@ z?>`M_j9_|6Kmr|%Ul#b!0QScMhyvfAdlIF*SjG zjDSj9`|fzf-r3~mc`H}>7WR&K88_j@akD*(Z`toCuMRtAmkC)c`m60uhfi^B(ZRF# z>ucR^0DM!LhfJHe0Y7mZUY6d$0n|?0KJw@n+op3eTYrfs;ow+!3sZp|a-ZesQ`QDc z_fx&{djXd4#Sp~@^Mlt}U5;y86#Cu9*!JIgqpr=*g9rgW0N2;_8|QCmn-U>Yq}kU- z-43OQHC7ZjLedr;rG&KlYMireKyB0_x{JIzD07WG@hUN6O-e;?k2LZbw9q^9?6)Ap zx%Wq&+{`ij$fr=Na{-(Khj3xHaW9;VT=X`~DI@C__*g#ld>y9Etz@^x4Y!GZ0@|FE zSTk7pUHOY`ODc6*4`gH9G4RY6_geO;-%z-Vt(zNsF>R$nc}>get$MXX@T%QhPU02m zzBm8CP&6mnepO!^@Y)b6?{+YI*=@UAZj+2d`F8)!6mdD;pk7r_;<1-&f441p&lP2f zcIRTIbwky!A&Xh{?u*20E#<80ry3wlkUe7G&p_rjHK_q?;cjiH2{^X^!OOY1IGzv^?r zt$eCSQCWNGG)LvIQ$fRU>9R0^*Xac?j_0jhWxd+}m3DDlLc2RU8XqzQ*l?$D?;T+_ z*pJd8pOuq6H>OSeM0)1f(B!swBCPHPyNZAP>tFxhfBoaH|C7BUhJVbrJ^K@X{fPj6 z>7W0usDJTaeoY`lIex;QFnm?hhyV6tb>hHg1e2x?=Z!eVUM0Z93KMeE);;o;GP*`=``Au0i-_B|qH+ruQyh1miZ(ZOo$Z^h;*Y@h6lkHLG%w^k>Rnf#JHP5S{1WTuSWAn?ZCMEWshVT`7W^la zE8s?U(m4?sx5=vg+HMpt^SRUP^2vuAd49jirhLK*((pmQ0d91EyLe9ONV599B^kzg z)m48o?2`gOPWBspIWX;|dRjUBN0XbQ{>ryI{kq(6cMOlVtHHT$44orXO?&sLytg}c zqw16v+P+(=)8^Y9Kg)~r7FuiD4RoX0tP#ObJbrc7Lu=IMaTGT;n&p4-tsYG0d9Dqp zP6ce||77^R&Li!U;hHnyxkh*G>Q`KIu6|E<$JD;JU|;+T7@~6Q*fD+ITsW8GlYRl- z2u&;x3Z9;wuJTh`=7Xl1Y3q3IdMQw?c`HsWNj&n!6u0{9x{31#nw3Js>}_+e?kV0P z5nz{lFxLNM+pyO-#b4t+>94ro>0e`9b6(s7tQ|cIrv6wKviir?zBhc<56wopL(U9=bNEJR5fjjkulBaGZKCB;)1Iswa1#Ro z+8D@FPPi)nP`kL75aK>!UDH{o_2Q>(_cRfAIWC}#$dm@zZLu75w%q^*_p8m$xXbr^ zb3gp=fA@i%%=yj#|GdXbThg{m@!$cD(m6>_^&(iB5iTBAocmYhm4m)8Jpk^^e?r$Z z+D_Ql!6uzN1)pcauDk!oyxxFsOi^78*Z!O3cwVU2Om|x3mh+IK-Lb_zwRhM%-PQja z%+=?mUy`<&D`2N#VcyHhxEnTk_bL9WJHjfkI_s>x@gVNF&GeuS;;nHb`C1&pEAO>m zK8+_2j8#lq{N7^f93k(vUBBBZ(-u=dbU!W27lBgJ^gh)mce(zIWqCh`DP)L!`l}AF zU4CY{wfxvs4&R=B;ikOK=3#04w(&?E-Cplj$#+f{$Yb{#Uoe!{0YtCbG&|QWFVw5B zU`u$#oHS3kCw-mY*|AaHjL-IR+?}UtGw`AM2J_&0tG?s=q^q5_WscP~{9 zF(>R87vW}vfKuC)=h_eYxnB4sJY#=sfs^v#mESj^52{e^_0_-qy-gasm*fCkQ&CQz zL`3x`>!$S8IcI?{8C>-1a6({Xus1Fk`fKk&XZsaY{Q~R?lrDHtx&_m_*Ty#Wib?Kg~B`nht?o8oiUdA2w;73%g@c|x2zhJW>vUhDQiu!7QoQJQinwl?2XROqxn#JWLLZpEP+y{4x{Clk zqxOPrAd6dnIb4NrFq;o>%D$ZIBoWhXeG|qiUI5r%KliU+01#hqeEk*xeFwl^#%k5y zaV|Z6&%i`Foz)Z;^*N@P<>HcE%Ou+r_aL2s&J&8KQVBi8oD{cQTN!?=I)yVx&XlicZQ=>9IIZIi$D ztN*sW^RKS$w_IQ0Hd2Wl-pRF)JNsr^`=`#>DD10UwsNZ7AJyF+-0_m_QooDszWWp$ zbZy8Djy!R8;Tp59C%1ysE>VCTv-=g}h@Yz;!bA8Yr!)A}+dI4bIqf%y5dAT_yGTDJ z-|@&Snouy=X954I(G<@yz}mt>FVNqhTcp)c`nr|}^8 zJET2_UA~Kz0o?Bg*?K?niRO;_kLlh9ud(gJVS<^`eSg3&3$z>J@?3AEAKl&nHkv)w z8;>0pd4ZQOYTvFnS&J=fAAwA{{WjlbDC;EEcuOZU47XQ%Yey3ag2ewQzvZ%jsB?er>n9xetfWfR*2X_jZF~}64(QE%3WmOAAJY@Q*gw?fg!G5VcA9Jc*Zz)u zCwG4Kxhei9oLB6%59hbK#{byf5q@-19`c(L`Tt+tw5dm3U-D*87Z)~+3dJQMja`6}=m@a+bf0Wp-H0C6OlHhAOMu~c zJ(LLI1uz+Ap9Guv|FJW+fGrPuj?oeD0FMQ(tYMw7Tz?s>&EPda#qp_L$UPBpJeu!Z~ZqnD+San@|dWf92)6*ax-Z-~fa=N|rCz^x@!vkEkFS0j2Z#cJB z-_b*hW4cei>r2n`Qlz7$?$D} z|Hv2k`WdkNH~;u@pF+swL%u=q{(9m&H|~##|F;ht#;0Jy^~G?Y%5mL)w#%_e{};|a z#A%kmBiLu0N*P0pgSQIe4Rb-(9iI{~cySc3ng4<^3mwh+98(ln1Xg+f$(>G@wRtP^ zEk@gk&)Uc9#q3h*ZDy*YbFo{z&%0mG=``XaNX0+5vMtv)oiZ0Oj{Lkdq@Kw;an^CsTV7VZ(L8aU>e5eNE7AAqJ_Seo z`sZJ?06u*Ik5WAj1JUK{0bgY3Rkm{^&^heII5YMCA^-%T2;-;;&g9%_9xBE0W2M=?o=eN`o z?}W1p>s*Orou46@vB%=WH&1)-iJg(}wuk6ZLM| z^Xo)g@gwzHGI?CLt{(#M!SVLN{*-U-!+G97K}#}NyoH{8raCYjhwCy)Oc0+6;s)4&Fg)z-I`C%a02Und+;~%J#p-}-?{-mo$Ja!6%TlVQ)n~ib1SygnJ-YG#P9LreG0yH{^yT;;jjN2Kl@{V z`Mc?$;6slH2wc{Y+a3ksbeiS%+XGfi419H#(h^@r(Nb%@=-F_gTa@)#lH<%N28Tk{ zUN)m@TDYc2OD{=I#eV&=j{b_lz)Zpl^)g5nAL8P9-~c}HPB@2RoojBPH?a`)CQk)w z6O_aFI~U*uH-b!kA5Zg5>Z#31+xIp3Wegj0FSN<6R-Vx;UW|+@2|Yl1O&Jp=REuxQ=$xPO@My=YM@6+NrxJG82+b7VTFWMO_%IeseB5I*5W za1aq1`P98z%}R{u88ZBrqjCVp$2J#=>DctChVZH0IqVDkVW0D8Vt{+h{)J0D;6ELX z&z?;n+>u9b7LhAPAo&35F!hPHh2V4@f$W)i-M8mxLQh#yo+ukgP3BL+#6zp`c*E(! zPc)bde16c29%b&F`167Mhjl4woCE>+f2*BJ76##i%0|5d7!V)lR!(@}tc?osd`vXM zrpn+0TBdStV!b|Cd>LYo&EQz5*EMK1bfm?P8(N_9c6bq{2%^+L!<0{w5j*uI&K2UD zKWmu}0dZ}fiW?3ffe1mDm7!Wpr(}zAOI_h+Mcp%VVera*ELq5O{>sc#C=PG^*L&6tL0 z+*Gkp#d1>d%r#$FCC&2i8$9Amo=;(UVqr**kw}DUw6m@7`LCv;M(h7&YujQ>e9GSO5#)DjWfR) zG+c$#?32~V1rf)7ferWbYrm{|6g5Iiv(*-V!VU3R6cq$K9ybL^#ssi%&_6n$BBw0}@%nhjJy84H1ttCd;~_o@?ai_164W%N~qB z;orEZ;pnqxjmH@>Q956XiHDF}uC4sfrq4~uz=|U-4GREsjC?veXERKq&P}BfX5J~L zVCt7O#E;3F+OulL0{wz!w~?DC#>t9#zmNO5p~ zh#Lh^9KF`_AWG1^CvN9tJ>yBo8rO+4Vb{&k?8TbBdklHLp2*4J3XBIatT?*X(B*N; ziN9LeG?OO`^%I`876&te#TlSgMD$3g^w$}Dah$HJRabw`!By%hB-_@pVBjjPsEWUq z$$!WXLkuPV@TV8DJ42i42xbnhN+s1Sb5ne|m|DU&BqZQe=INrT0Wf}~Hjm-t)kSz= zCeKGuiem~%tSNa|GZzA2`6GTL)`=kFIN*S{QU^GQ8ttc6#wh9;_-az1-D&OVRLgjn zC6J?YO{Hu2#BcT0x)rWXq}b^6Y4Gd<5(Sw-v93-aMt)v%4LED`>^TVXFJycU8I?q- zs3(nSBr7Qnk%85JH)oL>mj%G~($WZ8a2Ab`W}LaxbZIu^s|B^$kJ`W(bR!b$w#i;q zi%gw7Ks=Et7Wzb4E)uPTs#&zE-q?llI_?C({3sev?gLE<@e|QBr?A5g0Y7FJMb$=M zbPgmpjBP~&_os{m&c&5=u5WO1*b6H#;`AEU{N8;li_fy4xwBS5fmQXw0ybL!b6K>_ z*Tl}o!VmJW0^@1|2O_DyZWmQ(`FQkNkXFFfiUhx)i=3n2X3$2{$D!A|Wv`2kQgGtO zz=>|z4{_(_x{5YnHB2Rju}WYu5uYyxLC~91vq)rMWvtblIe>DWqxePkeyZ z+Z-D>8nxan#RmVz=RV?U=}CM|;KqRQ!M0ebA#hOVrQw<&Qe&ki00btq zb2cobkCHt0uRrn|0RQ=opXcKn0Mf=f`SADyf$}|q7z2I46Po@c&HC25Ve5RaF5bK7 zjoY2GS9he%5(Ei&jez0c^|Gv-Lsn2pUTC{y%=Ljl;rx7E-fmQ)3vQFdx z$s=|CiASf-SKL5KvwbSlVP5HLH?VLB%=8~YrGSmgxvnnSHYsFksmp7x z(LebpMPJkeO!(b+?`y5(oSzTH&jvGI9`X{uCG+tEKOIG$XDNjw=;0Gj>-e?@e_yH@ zywW$#Cn^28b}eyTal(-=gdut+_XI^fg2a^Y0FxBu2v~W!PCCI9p0vG69>s$z0lI2|3vVKH@NwT@A_s?V)abM)Sa$#mXiz2uQ8qY6jnOHtR3Um z#H!w82|&n0W{gV1Nr^Rxj^sSYDEFKg)^hJPB2%n5Zd_xGXWER#k3n~%DOdO)=D}Gr zhT4P!Q=e=`45D_pCqMPH>M?EZ8}F&U2>`qnIkEGR;Y;NBX9#*+`m<@P0ZrE=QPS} z_0;lIKjBlC$01Ile1Q^&y}6|_nxnKu*a@xYMNtJ?mQZR7$8zwola1*!sCDk^l z_q~0?^V05pY3e^=-4Prd*w2ZtoK)<4SA%s*O!q9vBEF2ir4Dff*0rVED7{|tlC0|n zn8)cF#eJGQQmAtJoIKd0uidBD-{jrnFiUwJWX*xUwHDs~sVW<7iZ1{cze{OsbmOyj zTBj!#xxHD(dk#J^uJk~Thgn$*nf^n5A^uBEBxNt0|NBo}_-HQB9=hw5ho&hW++ zTpaVDRy&=0AI%pS5re$up2UIWxc6nPuZ_oYzyNT3Wsj!Z=h~W(_|^4b$k}0==O+%# zrMhH1k8;DaZ`K@QZ^yO|tV6lM^i;ScPMomjaUAHR?Rb1n>&Bcx1o4xa1Lq5HA7ixW zB;+{qV@D2GWBjw{X^z~n%yK6eYWDa>{Pd7!>+#1o(@+zpMqW78Pk0{UlQ{e$Na_h& z@NW*#u>0KqS587KUj#&0&~rG zbtAk=+1SZL?`@v9Ey<%Na&1SzbF>y{f4!gq2*Z)fjMbWnYxDsTtihV|3)jK^1jY0W zxQYNF+Vob%>sovg7pHUb)WemSca0BGMWO*q?u#eI+N6NMy%rh|mVd9T>lGCt7weR4 z_Wg#*jZQHe33?J4H3Y z>83;NTz^vEv}-bPkrr|7buOs`SjIr0!Q)_irqm^nz z-2@9iBs84fM!pig>U8zJ69fS$y7X#Kx&g@yd42GK@-5EHqMXyEv zK-kJ`wiU!N*QR=9#0Xn3Yn7Hu66aLwv1iVb%%dh4Vp6y|Rnu(T>bbPs6A1)TQ? ze`_pN#|mFX!>RpL;ISnoO3va%>a>bG#W)=OiqNpF$F2#j`&S_YM103XWWr4hMgc zBC55n6j~*O?o|LS^;ie{S3X%szbtZtOOn(W?pOpY*`EH^dVM zPA42S9wSH0>nAR<(`o~h5#vQbOh;dgT@=M{-GMG1JOc7yP2nwru&jUm&!0c~7yWfl z_`&}A9|KAv78IG=Qc8r<0ADM`U`x7V&rL9*`rNNw4UMXS$={s2?kRuc`I>`fI8OVt>d&0}#?G!k!K4S*+HFR! zoFu^;KmFvDu%Zpz0zJzK_pg3l#N`eSmElT2SA9K1G-&9%J$xwOxIL_?e+o_amGhIy zQ$6=|E*2cyHjV`$k2N#2vs(V>Y4)`*57wLS&RY43esrv4mO7*`5!U^9s)LLgj_m<4 zc)zC|zb?0iSK**SEYP8$=F8C4waEoK#{M z@9`w~Ti%H4?bN(lO6g~7m_*R@C%n;Kq{XQuFT|Y!J&yi7JNX74f$4e11*e&Kri_dq zTE%&~haVe05?Se6c%Iyr)rv-O2S22D`IcwD9AAmG zs9$FBlhncE09T{e+0VMI8~ODBM&uY+apc>DHLJWnFPTKVrdKr;T(9Ks7107m-lrk; zoJUFV3Rje`eL}^rX1ziABsWq=u-g2a8OPyTdXHc*?p2{Z65Q&>V~uNcKl@MACA(LH zccP8>2#()>pPAOR*LohaeHOLczO{tRy~XM z)oXH9MOOAu5~F-)v}ke**pqAH9^lHlk#4o>f^1`Nz^?h{5H!cp?u!F#!~c^5)0?YJ z_kZ(zx=8nF-|fs%N`V-oLNtHC#q5o#RHsN z@8LGa#V~V~R(~nSq1rENSRp3s<8QH0Gp+F9xLnC&4-g_|@vwG}BaOsvOdLYgdVLv! zsrR`l>GEQnhJq2 zSik6&e-L9;Z7g9jrtGKIwXJuKZOd6?R`*%QDz^zUCww|qo&ZVt51`h z6}V(nIcp+=f{&?&-mD`&9_(`@SmD&;K^En#A6rgf!l>`7G$4zm=$YWeh@%E2xxY7*cbd0rO70=A>n;8^egx)*j8^h;g zD9Q$G4<6(VosAwU(&x=9ueyvcUl0C6dDz;CMI=-&A`#Te z)rdj_=H^mcoCX-N_rRaJ*5$x&p6X>x!)^MGKk6{s{ZniZe);u1%#kGw3&gU9+SsGLO_m zO1*mQBQkuBiBB&z>nQ(30Q*n8%ciQZl#a7ijnW{b*vskbzv2{X@=J9k@i{C6 zRvSO1G>$SSY}tPnJu`+gPYtY4CN7T*CW|% zq25P^LN(fDoO{}go&f(EM_zpWY5n0Vh3|=P9?|YJ?9(WZbzVPdF!W$`vl&0J7%Sc# z4SwM>8Ycnjg_CMw;=!fVso%-9O_>R9Kn2921U)TGB0Vkif@N&IO1oPSj zQN#b~@4vrgZUlJP5&kHE{H?%vRfvao-7x%w6~_0#u7z}s9?R;aJl}6( zGWaB@)Zxz>R(#|+aviZALMr`njkJJ3irqk5;j2d$Du`25o#abg;|iBd8(VkcmK{7v zI;|m#z?hQi=(Uwj9?S?tl4ErcVbY#v++^FFV3<1DDa*9!egqniMQ5u-PX1()@>B17 zeK#NHeYcRj+(+-{weWybgt)L2|h|F;WDP6qi?cZbd;@ z)}ov5U`OgWt;!SXVti4NF(_j*Ve^$BTp7s9aPreyCggY$Jk2Tk z`WCmF_!m@q4ffd{+lw8q6u3KoNAd(wrAaP!zaS?Pu&hNs@si{@bOZOTb^v+JQY$4b zrb_Xe2FQJUN$po*d@W5(H32T6a2i3lv?JqH!NpY}`-uG*p`iWE4?`4vU(7haI4o3y0{>UHtTNDvzRph%p! zkEE_~@FFleG?`2j#ZiNStV?FOKz4XjU2@DiSFcGrMG2%Jt==4qhG`fHG5+#|3|U2h zZb!1|H$f?F!U4Dl^iTfrHqh%S6W0f2FvJG12O492v8U=JBG+fD%30a4xE;vlssOy`mpWx|EEjG|qCvx7q_29Vds|x_`suB;)f~w90C7}(`k~J2!~v-% zPC;JDRg3~8R=``OLdn_|XEhxjwK}()DCSD7p0C2tL*h1;k7L`q+#U;2%MQKdB`Q!Pofg1+YPGXf&J+RH2P$dK!C16Ir_mO z_$ai4a|CRjk*2_2@zp({??bfe?dY~}B0^3fy5xPv-F!2J2nRUuT1{&1xGh2im%XWB z-fSct4kO1MoU{YELhM&i8gNZp;q0rFlv12DL8J9ViWe@ap&lI9Ow0BL z%>2^3ib=I$wgo$HMF3ukX&K1MP<773q9INoa8&S_xRX-VY0`8jIcKjE z&iae>jfHUVMaY_fz(ss1O%I{capED(ZWg5JtKaGIdu0$#=YVsq3$SyAQ?F5?^f^4= zZj+k_?YbB7?P`ID<2E$vM?)0f9kk&3PSsi`F+$A6$2FDAT7bCNTk&o8;K2dM)0Jui zZ>hN$T>MTW>J3nsM^E)GJ|)@93DN!O$@h5M=x(b{pWPixsyPS~k&M13$_hzZ$nc`&MR0kH14>c-NE}G)$CZBn=<3bB*z+js zg`T$?Wh?hRgMfpV?I5Ud&CI~hhtdHq(pSj`M&r|K(gVZ6Yhc;uXZ4;MWUGf}Px5Sq zn0&6i{&DU`lV8U4;@Y=4^s=FrkMCZ~?Da3l+zPgkw|p8y`Eug>1Mq%_5ElvwK3*S- zj4#m?9M{=QXKB$C;B5$--+A2LanlY{z+ZJ{OVJ}AaBxiHx|fe??4 z6URgE^OEf%u+xBD9Qnf>w7|-{CbVpo0CG?QOubSQkGb&m8%L!y+()IZVmB`h9AiDN zhaBU)Vxlb8Lo4Z1$R|F%6+zC1B&5L zOEb0VN`(`9Smu$*^D_b>VZv1*G(M3icL-=rUln-K{{8~ zZ{y|X+~zAlU=h&uqZK2;;hjrjQ8;v?pT5iYR%KAn7vf~D!*w?&2OL3ags|bq9(DGhA;1T1n8W%XK4J#x!}iZD-!qpNG}diJ ztNJ?Pz+4}Njo8vh`AB$Yva|Yis|;pj>B>asAj5}>8t_)@bN4c|{0Od-!Z!*v=w4n0 zd?LWle;Wl4@f@wtwl_D9nSa%+99tdx0hd?Wnz7z^j5 zKjGQ-HdpYTj8Hd@{cty#B7BlZpA;mEgg%C&j5q8wN5&*Bw2yw;HV;*B>!? z=+b-iT;%|9r0Zb7IwxHUSAC1#{$zU-z5_Ufu1u12fKqi1Uuj;EW`9LRpPtM|w`1XA z{Zl3M#!+quf?oK}d?#(kOTLoy6xA{F$yhk!C>t;c=Vi698BFzmDjbJ7H&Z$_TpRrW z8w*7ohijuXax{71k|XQZcLN4a(lZQM1e-2ZsIoQR9EJ1`zaG^o#th@&h$~;_v)VeR zVhUINr=o4DFByM*#H<`<$z@E|^MvJxJ~naT2j?e(vAG!!yDA;05ep$Fo0+RWGRcOY z$M#HuF7D(9ldlZ-QqyQHjk!*E5Pl+%Civ9;_Nt)eIM)Vlz{k^W4jb^XbYnu%FQZTv&{Qa z-0gb)%G9p|v^d^89lq4Z?Ek+wm;IIGIR5Yd{*tf!@hvESr7mCmLzaFVf@{p{-5uXv z|E_~ycpglmp2ZY$^%`DWuLn0l-q;hM{Wl{=ucV{pk*kH_C)-WHkt#f+l_MGF(UnPJ z4N$6TcG|#ueX>9}K8A^N@+}=bDcDJP!(o8lTYrLH(B?CJ5)G`BX4Vleq)VH^J0;Tm)c+#cOW8zUr!uh9f!s&uBam3nmJgn3jwi1- zb&ke0>>=(38!6ZkbcuQxNOj!vA!0=Ugv}#WP2oVJtp_6tAa3ddX4YRhpSncrm?yj2 zTzR@2XXe{@(`TT}Aor!#GQqn9RKJc0n8Or5f*Y$plq4S3(e%Kb;Jtrg!Tv(oN&xs~ z0ooXEW2QDz3tob!@M3c*O-^6O9vcavbISgZbizK)ufOmc0R9ty{RIHwK)U|w|1PSC zH~I8iz18F~Lzl9@gJR?np%P&k)PD;x+dBYs{zMx z+O1XNe6kV3R@#7Y`7HP;pP?(>Pv2g5qICp=NkEB|!YDrkA&CG2OA7Sh^Q!zqhOoi$ z^6uI15tF|^|HRyr$An#`y6;=6>W8cHp>gVY?~#Z(qzKsKgYq=nQ$06+7jwMF(O~E8 z>l8J6)%74bz@w#d) z({uHU9ez~S&05~l=RN%d<0qTKOOEmcGsw{gE#@>_zvuEb^`^QGlZ!dtT{{j4w54;hy?*+gF9}kC8{6&6yt(W5Vqs|Av7v*uP z1eX5>h&X0LoM&{RQpkJJ|3t~wmD3y7s%64)gZ;a(6F=ywm^YDQQVg3aWSsXvhOeW^ z2sU9#osOmUr4QG2CoaT%nD2iPqB<^z)W3vua^I99jI`Sp4QUb`qUIfCA%tXvi3ekc!$1}%eW+(y2n`CZ!bya?{4 zX_&B0#duFT+bPrOAs4DaKr-qc17wxCFr)5;PTs$_B24DKJ~N;}fBhcApTGY|uV3t(sr= z&~oEgmvnxrC+Z6A6PL}pCZ-kF#m^C|Tyu@_sznq5IcYuCj)f%tB>bx1S9Nu^&t331 z)n7wbC&aay5ASCx;ax^^u9Ir3ZNRP~MSoQf<@Nxw&i6^kaVRZ{ zhJAGYj`nS%AM7Dk@hM7e2k#8&^=#L27#k8Cm6?sKKAtbM;(Ot#?^Atj{to=DS4|pl zgEknmcP2B-J(87q+vi=zRXd}!z{-!pltl9aR_9}uH0)C*WL?+ASbiidBu7wmM$dWm zfluF@QaqdHxQtYtQ7UEV5+#MpQ3M&s5B}gmO#PZEYhguQbyQqIuiwSpp;)1~QyiA! zQrvB^qKo^oxJz-0ySpw0in}|M;-xqgZHr5>N8k6(_i|1qnVa04JAdV#nM{7)j)F}P z{WQ?choW+j?%_u}$mkp=ggUrFybi zNk5ZVp{?DwY8PF1hb~3cyyVtcAaO-|AaC8g4+5w1&w-N}D5bM=JgAjSU_(iOm!% z1r2jVnreJk1^ExO_W)KQ?@;GQ3eqxp_y_2#KnOPGM*y zJ(h2!nlv7sX^x0c(U0C0BE5sPFgu1jkk)W7m-HE=>NyQ`9^->QnDrp{li4mB&x}ZF z25%iS@pJSh%N$>-DM}e>DGbC8gi_~vPTBUuXq}s|mvstE-`w@pJXz^bbFz!{O2wgk z4zuAftdS74t;6say|^|J@T#m!r{!_1u0tZ*t`if(LRLs4^Ot*{jahrkxZb*;z42GQ z7e+_w!a5-cD51x`oOp|gOM))eh74hJp$6}(Sy_h7;$?W6DHeGHtF?8~g_rH^XwEUw z?OJsW$Ku0H#dse;0WP6WaU*PL6lQg6$@gztnUG_0^@B!|4AOj5AEy4k_suT9Y|ZGp zRv$pjeyUaW%0>Emv>bplnySAKa6qa zs^A~QE$)2N$*o|~K(nOng9hT&jYAhX5M!kled&mrxf@@%#B|L#$HeqwamX$_&8NpE z+da6AKDGJPYjyQMFD+q{^@4Uq#o93p zW0y+oDkmG8mgy5{eR6>HY2*A~zHy?$AC&nsbBpJZ`54!sn_60Zi(iN)$p50%2z3gm zG{2FyJ^D!_#P@p5Wagc;jN9a6uPg*E)grtugiFQTnCg?YBvOf2;t;!F40)@1%~>qG zRFgeuJYw;&_BqxECiPS<4pz(Mc7vM0sn!BAP8rWb-)SFwH`&CFySs`Amf0`>Tt&w*nB`xYw5JC{4V=f1Lm{QE%-@8(G+ zsV!yoHT}M8u|5s=HI~`BZ#;$QZ#0`PTX7DAWCPn%oQNAGoeBF+OBo&82Jo4R2dNt_ zYHZ@LY7nM=XqQ@GhF*ZZOVzI@Si63@4!IhiDf4+Tx&6m)^!!!A_g9;+LiDM`KRE9i zF16y|_urT0aqn5`b_Cj8$XcN#_$6t6acPX#&L^+wS;$IGznay2(nd@|nVChhSeN%r|d%5}r_$Jb_!R2JQlIo-_a}3t_ zeMRY5bC^Nwufs6r=pUZEOSLPP++lwLY3X>l@(y*XK zsBNN*~7w|0CchSZ(ynb&Wz z+_e?_l(xTkpM-rR=2m*lI#-S1p|gq=-p+&XpWepsAwS^pQSRx%Brx%akjDBgoUq)2 za(6br%&2iTtgF%_?_x*coxpDWXq>5%o%`Ml<6m#M@zznldp>1%N;ifYjfm;7I?ogg z;-}ARdf%4D$g`dT0J!7-dI7k3zg~GaJ$k-=>;N-R!`KvR&IIPkRQS7h^1YmpH3?wm zT+np*?mT`>cH9`eoYzsEv!?@%IR|N8ZJ_sv4CsZ|!J;zy>pl?s-KFl3HtbXZqHbYnEdekpjM;%)>h$YQKNsB`XXi! zDL*Hjj1E2lk<zRMO_Sb z=YhZkRQyD0@^KbP-98I!7r#lt>u(hWi}on2Ds2XAJ1Q9~<&0#fTZM+-6>n7qd=Z8^ zp~ORN{q}tejD+w9%vkD=JwlD2(Dvg`O~a4-(jmq}cmth6JaHrm`ZOejNzgRhI!>~7s-{zS zbrdQ;OEIT^NB&NIU}?JiE#p-;Wn~1-MClS+houb-b#e%y3jdW5iDHDblxKw%+WM}kXe89rdU@=i>U)@ zn?M-FU#r@tW#zmh;gKK}@ktug^0oDHrRtsfZ63RW>`-T4$1&5WsepvLh)D#4!EBAW zs4spoLYvvcBcbj&#(R%L+iD1lqK4`k;>50R&b*Y&d&^Aj?X1^VsIw`%QeKc53Qn2W z1=EfBrh;b>4mD#Q0Kdp6tk`d@w2K0WPG?Bg$S0 zMn$ic=DlUG|0wwhK>YOm%5O|{=Nr_ZP3}u@herbbibsALnqI3xCtsUx2Rs^Pg6Xb<2`9uW8@PpX%(4?@opsTo_t=0R zb&3AcVq98>)^cQhuP=%v{cfKYqtE7WZNAVmi5ejSKWSa;`ewkvN=t+p+)I&9tK97u zr=Rfj7?dg|b1uvB{STecC@s2?*#!Bvhou3VZI$81%@?|4Aq%*=cpt>L&LK&BDzTQz zBBMTWa9w!f(!UN+_Z=lllD|ann%ZJq{B3+ReoZk5Iqu@VPopyDk<(c3<%Ys>gw6$U z7(}jAH*!_PE-BM-7LVkOS(D97U(uek=hcW;F!L}NA-71{Bldil==~KP&aebf{6Im0 zE8k9oKQ0JRR%Q_oPGKq_x3;&?D@``n*9rg2H*H^|US3afO;m^~hN2b7*4Vv*j&q0G zU2u+iTtd~nQ@aGXR!}&n2kW$7B@%jT;Ap_4KmO4`A@5_~he_&GPLBu%-6}v-pxlP^ z!rlW$V9$jimP;la7r)-j-^0dFnn`z$!Y6ey%+({c5lQ2RgPbL)L3w#Dx|@SBWr;5O z-bd%!&eIICpC;0Igk^e`KpP&j$&FKRibb4*evl)C5#q#m2+hdA`7?TXu+r7p%EsgI zd)6Xe`({=jii3T1d^BxTkfCH<%#7=krU5gHoV^OLpo62br9FCwas%;kbO6ox=N`1g zG@mhtAEC(DuDfw+6!1!AdEW>sn?Met#0Nv>{_izJy-~_FBsYRmUftTF{IsCgh^0R4 zW_eN?z+0}lk8H=_mi;rUk`oUerkpeH-Sq5Jf5{CN0i4xCW?mM_1Va6zgBC(ggtumy z;4^8g)mT-o{A&eQfA2ULJ4Ug_B9cvL316dWy<%m9L=VDY9%RFoIA*s&e7(>XyFngQ zDfZLM9c{65fyLTzZZ|y3KVe~M*`}FDN2OA65v06JOlv?kAkk$RljAsfDMUCL$G&K5 zl#j>sGi0g@&ztcfsb?lPBX*+Z!#=|FHUl^MhYhc6`A7jxO#x>c_v2jVy7(vWVwQQf zJguQN-(GTXAa0^8Pj7Rgk@ygIE5YR+b^^6Q>LN;M$YSP%5dlx};$nOHRlB~vc;*xo z>-8n_*(5yKvrClro$xxVRI(UX3Cs6$b3ER(oa4mtrrwj*aO0K4Vxo0}lqDYhYEJ9O zGgnxM;VsQ1&gjyt|D?%tfP4ZY|3@ODr^nSgd%tc>W9;T01=^5}TiX?%tTsS5mx?E7 zc(T|j>kSuP7qv`{mIn=8?H#c>I^h<9Re&>HTR@hb-Wa{DAi`ktTIdXg+61g3YRXC^ zrxLtmp1&@Xx+Of`hz9PfZm{Y{R=*unb`hzK`50Aa*ilTj8fktkSA#1pG8N{kS{4Ae*h$(ZRgQ#HAE#J2-zjUPHDl>&AB=f zDI#`#JZX;X)bRzFN28Rz3UM8O>j6#v%L@(8f?#6nwvYyJNv5Z4)IkWlB4IFrT>sGQ zZ%a_jC)I?L5dBLoH_g6K(R3OpMrI{(l^c#R>&jW>7Gy}nXB?fPTFG0rc^EQ+9gRW&ZR4<@?-ns zWEemOgJF{bB?3$zZlAK18J`-`Rv+5N>YDyuCG-vZi1KH*1Wl&XDCpGq3%FHfS@*&x zBlr+Vi_BALTR})dV_`%K?F%>D5-m#|(pKti_3k}8)U45f z`+|&T);lbvZ;C+qSir}{+F5?5Dc7QPBkMIXrC5D8SV1u)kfT;%%OKqI?f z0C6N)I&ZO*450ijbzq;l{tdm@Xp|(f{X4=Y9Z@hup)Eh>&4apM;c89OvvPjMSAIW| zC6v+kdB%mcB^*eOwebSJE#bWu_Uhcqv$&>|bm^G9@7ZlylKhs@^b^J-IMoE^Gw2~W ztxF#O<{dv6qxRi&7A9i@AFpmqqNOiP{Fd;8g^sdq?+}9(cdVuTn*sH|F2=%uw=%N5 zE!*SCwE1;WVM$ci0SnDR7aM^SE%aZ)m4gHeXq*2Sk(xkHccqWP8V&VN7dO=CmMC)> z>!UFx;tN47&&4=!R3%*QRPlrYtb<=LX^AeB`kM6~7)G{Y4j1q>wfU} zSUhl->WRa5_P11D?DJz>3}Z(!*sxk~Hz}%Ty1Hxc?>*MKPUgWS#fJk^f~d|qo?Rq~ zcyYIx$FzX)3-K!3B@`sB!V35N2vKhPJT=e(lVYx%Rm|VF-ZdgGhxlqrd+cKB2iK`+CF8lla61K2` zPqX{v*Fm)az4$@liY<9RnFUitBkK;5ujn&R3p%Am>f&36TcQM#zK46#6os}m>u&uy z0k#F!xY>A-!iQvfg!lE{U#gE_Hv5vFgsXa7b9dKgmsrPAnWi)vWxSG(4>6CA zH|yR;v4Rl~j^F*%YW6PbS+ky=TX#u_m-@0#P!_Tr*gHlVs5tww)#cAjM*na`Qc=FTquch7hq+l(CTk& z(~{U)B3~~Q3<6*Ij3aPhxs199bR$Kx(IdNlMO80PpVu|QwYfagbM`X*w65g0WxX_I z?*9aOC4v<+!IW57m5v0uJczlINDXw*?gN@~LbfeI`+|A4IuUq8;+JQq%OYXn0X~vp z2S&ewy!bU!ujH70RVaFofurBG_TR%Zf1_e}8KUzKPEbyI8A%e0cTGwGr#QP@=0k-| zkVENsVE8~?N@0>4l%NlqOZQ9Re%%LMw3L?-%D5uBck^?a&-a z?Bj{Lwn86A6)|*EAdSnxW2f>qKRJ6fBI2RI^Ba4E#2c#ZVv~7{wclE#_Yv$_1^L(4 zBPtpRfSt#ftNM{K*TX1zlUjye0aKuO({@u*7HjX)BdaWz>@Q)Al13Ii)pqLn(hi$j z&)!+YPq?iDG3sF!H#tK-brmg#!FFMH5AVONBOJk9;&Q8!Ba{)=@bYrT=Z&bu z?_#+><`l@P-1aW|qHPLI8m-Z53r|-G_HspTp<>B`+|R1+QL(D%gLEQL*O0Pk=Mbr+ zG}%_ZtV0pb460Bg$LmFDOJC7C{#u$f1c*^xXV}Z_9XwVry6inRAKgBDlCDcM3Wc{E zP&7ZFQZ+Xo~dJWcVPZKvAiw1~B>mI+(_kaGB;=F(8oM;j6GvaZ}O!0sH zWQMSDwP`~eu9|Z;E+)7Ho^5keV?JcJ2t`i3^Q$*f7yNeAW?Z)vU zY2+{-j-!@;a-j+viGNMVL+{!?)TVsR0yikaz~zM5@V}+4(pIn31*tjyu@eubE?E0j zK;g+{@VbefV{bNFOgeig_eAwfsinr9hi&YKWg2LPrnnRoM6ZhXo~C)j7gr2A_r8Wd zTQs<+{*zUjg^o<)!r-vlMx<}cS}1cY9#fP%G2iKdnOb{E@>JzIRIQA2d>4~tiPJxk zk(=uFknr}WXHVS4voH0G=o$UG_XUTtvINH#>`zzRywr25k^vS=~ z--C^OVnPHFp_<^F*0h^bFs&Xor}z1$u&W}X80;wEa=hOYt4K<#BRghMGDRwdBEXkB z?+8GWQiK-y)qJxxF&gN>h|5@xdQxUrUla{&sgiUcR#0!5`4IJthdl(LRPznivgYUUYExyY?ppk%%@p zi~s)K{Q6bej76m@l}XQq{qoHLP)3_d%ez*0q%q=W{q2(MynV4tCV`$C=8&uq673Ao zG4o!*H2Z{XlU;#(+Uxml5BXwR&10%~DjIJ!^uqUS(Y~(uyT|SHNedoN?)H}$0~po} zRnADi2?-Z(eek*|oXDqCUHWJH$Hl(@FI8{|TF`Z^P-diSbkrf)!(pmk#w)Ub%f>Y% zSM)XAXvbBLO~zqyN50uH^Lc#_U!32={Ti&)8@(8jEYbMomTJgO@|1fuh!Xv^7-6$$ zSk;Bf1S6CAeY4@nt;<^xpTxo~n+CA#%v0MmcQSbiwCnd@sqN^n=BMq&Zxx~OMr*q5 zDCZcdW1&bFoTOht(0u6cf+EtxcMi7FNsl#tJU@#;|(bTy_XO z3@c?&=1VDNi3EUVh%Js>$|5WsL;+Y>R~lRG)GR7_I5^a9UK%%BB*LgQr3TcZYRY> zy^4tNrmW}+aF8|SW%)ChwdMZGt`|*8&o4l4)aTooQmXiQ!L(0Y-O5AfIA#`A&;uu4 zV@aBd#cKwGsioR-p8T=$mXNI9NIQaf41pRR@40WK^MD;b0QwE^1mNmcX@RJp9}{RR zCgMp_Y>{lx8}TRqS46?vin^v0h-e_nv=w4+x|(k8t$Df{i*%vZ+*dRW5U0<=seEes zynPRUDXoy}uBRWzLgp*sNepC$I@3{&?UpuMRb~3Izm) zoEyA;7{zoi7soK?3;$R}iEf8fdB3UJ@S|Y*F?#E>x3K7&wqG*PQyOK!(N)@19p6^D zJ!iiP_1j#pZ$6(1ObAw6{?XPQqbC+w#rteU`e(5L8teB~(r0Ny;y1C5z?(k0Z zv$*_*NqJ&f^+frPX{9)=Iwep~a7-JxLM`y{+KFjpY>K0^rHt$>y8lce%PpMK+Rc~k zA=`xqD^%LPy8KC1zs!ioc1-=)(MHFE+b(?$i`&RqYN+Z*pFoL)OEG0~!Ocyl(S4vV z3kRE%{G#0W=_5n$V8`!&S@OU6+R4iKC8>&;yExcF-MP5tfe465$S9~7V0sUT8`Rd> zNuS=#&BDg^Wu{HYr8o+y9WWw zF|l5el95yC&^y5#9OkfbaPbI9^i;Jt?IGS!gBSUKfpqCD9L%85B7A}%gdoHsBH|#V zAmktvZ6`BFhzTCaiwWXxVdie;;B3v|2C;&;L7Xfg+O`(XPXA(3P?8iB1fhJRenUfR z@SjNkUIhO~g+Pr|wPb89++P-A=H^{QLkCvXQv2Tppy89#v+xKiC~IgLn%TJchJ;5% k#l|NjrGIYf?CS0v`nvK`_Wi#E{P!2~kLdp+{yU!k4YHZ95y=wr%GLH@0otw(VrYC$?>T`+ilY&R;k))iph+x@)GU z=kC6)ngIa;{g?kspdf@Gr&Ayx82|Ke1v&AbusE>))Sr?Pzm@*${ZF7F{}nn;WoG}? zoR!3dL2733PXASYn`%g!$;yII|I?vCKtnA-!2cWaPjLPT2nbjnC!^gI3X28rxb%G zq*PhH>|D&f|LXnLaRyjlH$Gcl@ulwInrAomHvhHxa;|C5sNL>7cU!arcO$984FE!4 zh#7GF=tN$P?)yK}bmNK|5MGNb?=~0DbJb@2wBq-*zZ+jD0QTx-0y zmX_9iJ`o2Daxl=>;^pM>^tRO1EmhMqxJ%Q}0ME{>S{tY-)CS_0sZ`a-E7gNHWmTn+ z(esPhE|g^8`&1#JFESDk^T*OwQYsmt!OBIgu*a%v$^(=)hy47Qi=ou$od+RknY zF)%S^Xlq?3l@n1}Mq{%-26{fs%fTMbK&N=xFiT{RmD(O#~KAST}l`J?nWs#*b$4x*pxXKV9)TU0t+8rKqQ1 zcFMIiMQYgLQS#blDi|fxAw*q3ftQ9HR3j-$wV@&gSrNR3mg7ntHzO3=IwSl$W1E(J|CkRa+fc zF}krVvf!NHz%Q+whz1K9y97pvIp@1rlQE+f*O9}7IH6ODKIGTt*Yx(AfHB&@QSSeY zgwQrhkRJp=?*_dMkb->#!;c(s+#ewE83b+ZCp$y$u}`(2!flDN)Pzf(P!mdPE3aR$oU)*( zBc6O)R7lIn(9+e?`G^c34^KW#KXsmrjP!Fl*$GgdoRogP0J6M~ipSu6+_4aN4P)xx zO{nWZYx}*nG<`D2Dvip0Jz{#gQ?t|2%=RervSuhWmL+gAacOna zn{TX~A7}ECQs(;+XGApD3#mf@-H|&)2}*Nb0}1@GPH1$h*9j7Vmxdu!wS#`66`Z)9 zvP^#d#PxcIJtVpNloo6$yo|y`x(b& zLuWmI!*RYG1LAdAzycq+D>I^0OliutHeH2)qLD%eE6OMa#R)p&7RcU?)1*M-%aZfk z0E)T%S7-&kF>xM8t>Ketbb-8_yu7c$cR%3TdxdAqr4|EK?VuNpO6$Y*qJsQ$X!{fD z`#7=3Y5TUfqps;~Wf_x0UPf+OEp?fP8~m~|<9FTQ+*nBomBw(x@ z&P3M7D{Wl0gLfn_?WRzviU|dhTyQ}-#t@&fA2c7azPgSP8#i(5-QTq4I7UFmGqWN);pQYpJ>sk2P_&8?($tri%HHNEFFJtd29W8xXSJimW zLUlXK$z2*&jPK=zjXArw&bEa^QJ9KXIpyITjGWA?81MKnRu(=HRP*N|66x`_5>*8+ zMKeVa^$fC$Fr#83#-Bb(#NA-pyLjO(?MCnPqGp_tM5BcZ`|5B#tiQwlu+4aoxTiar z3J-fpWy=zgl%WdiGBJhZ$yJyvkk^>`bC2v1qB7_VXx(c11Bm?7RnZme<-Xj``*5%opQP9??jhb_S!T7qpf7JFI?mw1A!BhKxXyJO`-WqE`x?&Otwf=sDXcp zw~H2ff10{DRyuV*xv?&kU%HB0wJWXz4^1urt3{+BqY`G(#nB=v>`x=6yPT;mG%Yt{wi0Sh7!g-GKqaj+5HSj@JUVQ_lzr3+Yzm*G;9=ZBY0 z3Fsg(ff~P?uH6$|L6;-@db-~`0PjyO-mZ#{Rv{3^Vg%VSa@Cv7e%lwbpG!2pH?6sM zNu@rzbl?D*P~&@n{4ZUGxA)c@UbbiDNa@P$mV$BF9d-58PB_e?$Mkay%+ziV77fln z&iZV+>^luSRNj}?^D>BupqL}-Sc1C(iN$i8!j1SOYj&|We3E^C>ROP3myOa^?2QT} z5Xj`W=IZHvvGP+(w|FSne5?{7=IDbTO3cepX^g0iO|pVX?c*1@nu zyP)Ly#+*4HdQuqsh4)pI|0Fgv^#b?fQ-)W_D+@ z_*Sxc9XmQ5d}od|`Ry02Hsro;zf5P_y-8DCS=Z+m7DfwgXV$o5=&jKRP+S#KC6N~E zJ#^K>;$m;L))mOHpbIJdTF`adr+M{nWJk z@vQ!imSL;-3Vhr==*8e{R;KrSVU6F%*7u`#&pnCzHsJaDp)g=!BL6SoXC=d%_xI?u zK9}2@EL+97+x-8Z3Q-Af`T?M=y#z7nZ7`s}yrler#hq87SoFIylkgJ%NTNPu3o2a(D z#9!`llLt>^OA4tAL(zcJBvf`@>F+@E??|2ev0um!u?Ha5zlhi%of#-n*b>t6$5NQn zf+FKAoLWkQ@isVRSH~P^QBzDC51Ww90#}u}DmURMn4;B+eqTH9k@ZIFEGSu1GMLF! z9}eLrBs1{y&E@yy@GWNN{F-C?0c=juPh12BcYBxk?f`n9XSUeO1(-o|!>8O%~Aowo`B&CJZf&jLj}A#qjT}4A>X!1owVA2 zBiD5FxA@A0aid45q+>0FeM(w{RNvTtM$tO3iIg%88T|B5I4mpEL!TC-Kn}^{g`w32 z(M8Z-ya$mMwW7u(;O(blJW)QEycP{&qBV%h$(_fsXr;3@q%@-a6U2`*1lad}I#rKj z>nF886vi4mAZtrs2s^h_NQO@wDTov;l|Z{>_k~$K2?^x`8@0-~skW#PM<94W22CL^ zC0DQEY`Av)z6IKUGffAnq#^eZ-ptCSA(!qh<>Zgqvg(h)9N&yv?L>2z3v;CYb*b%MewuLEF<+O^!eL*sS zV{$S2Ag6E~V({XPblU0Lx|*nrIYH=ex;XdkKbW|5?>XM?A#q ziXi_E9!^Du=W|=j<^`y!Kc{w3ZHrt2cZuML)r{DYo+Di`9)@s-#$aIFKL=R!?2(FV z0~T9Nw!mGsC(Erg-eec8Py6&;3^OrS~4 zT#J_rvL5+cF)K0>66I}~|D1h7L$h4|oy zFV%=#Oi9drjnhgXVThQ}urYg{b`!7d5O#;X$+p&|Y4yA5zV;2y3~2m1r&(gf;qHAv<5z5MFin>N%k4ljGJGGW6SsNkrbIzD;O?@OKkXK+srrM#bpj-T!!**QdsS4+chNpP6;CAW3W-dI z86vRpd>wAUKy)eJ$xFl0Y0v#HqYJ2T!8l84gl-m^o$-zily~7 z$!3oFr?O!h9BKx?2{ey-{>7^-Di>;rr@5(KY~$?J+P>Sr(8_nCTE6!Z@%vyg_eEzy zx29`tS`Q!f`-Px)??fMu=TX{=#GL`?{&w+d=O~o8T_`e7B=K1IBXOuPWei#1?xU`h z7@~GINXt=bIRS!)4d*ZSV-7{J+1|d$M=&_x^y{HyB?1LfQlx!@2FD~-d~C_BpM*_M zTfS&&SJ6$Fo<@~WLq;$8Z(qivW zq>xzOv&C91Ev@bVny=$o2Df{!lw5T!V+(k;h!buuFKVt$(;G1^1ocLpq1HIl3ug&c zWfE67j^KrCGwA%0?4X`S5(Q){oe%av`3Zy5M|>)v|#O48V92onZ)UN}N$ z5Od>sPfJU>@=T*hd~y$fJV95SLRbb(i{D&S`RjJm<(Y1>wyu<;c?edMk+%o7u3VQb zDJo`UlaN@#nYIF5aj>5(y{}v$>u|G(ugwaJxvx8? zWX>;zb@8+{(>(?{zaE@(UkJWGm2A>ESunp2C(hPck2%fR zUejNEgJ7kbyljXiqCrH}n~^+%f9;Sr<^}6rG29_d;}}7>3pS~&SK;NBft?Qh#+$48 zTxF08=(Ch!QhD|jvJz|fEqEC(((2!!g-m0xu7i1ARYEkqB-O=<2Nn79Td&@gsZu6@ znxG}5^;G&`xEZNI8#y!y=Whvqmj&3@nz(9yAI(^V<=joBoD+!fGAdDoC?k6O8Yz01 z6Gk}VFukMX5jj?7!|3kntV>GI&ifCE>K{ojFZ1rs4!wE7WGv&*jJ3Z9r2ou9qRpUHb3j_-m z>dp%TEzqp%fArqYC+5$-Q870sh8}OsoUnozd^=u~Y9_irAktbTXv!tnPo1`^l}b#0 zbP&>oKFwU9sb+Y9V1Xr2zd55qKg0;MVEq8q7A0L9hN-XvustXh4HUe?^81 z0>?F}FqJdS!deNaH~y5hXlKzGHo*=r7Kl4*O6eA7TmFWa7z$y)+UWAK~)fpr4b>UYyRd^4T>qy?MW+n-)bKX?Tu^)@#dYEemS`_M;Q zS|d+UxiY9f?gG>hc+`} zJ}eXT0?It&VWfNw<^HnAX;`XUt~|$nd#5O>-W;{hXystmo$KBXI zGZLUvXn%23`ke+*ylUY1?wOR=d`KS#{=6)Q)6#u0-CT5VNX(USlb*8J#w=bocX32e&*dM`x4&SW@0d70tkbcO)p;sv=6ck3oZlW*hO z{gIFI%Z|UNJ2d1$QkGW8MLi7tvoc0KAmm-1YXxpEi#H1q?m&&wbs~X|zmH)-NS@tOG9VEQ(vn=U zAHO&^A~@8>m(p#iCG2l%~vMDxf5(4 z6;0D9Jj*wnXjvs96zLA~Vgy02cL-5+;EV&>;ABiT6Q=XAC3jb!kY*|W%2{Rj=Ft6; z)l)kgS^EU;-2_+Lz;_P#J>f*>X56|$2szdOV`W!8OGHuSRFUKakfVIp$iw9|UG8nk z`q;%w7t%5s9zbNcNaJ6^aG_H_(TfX5&JE;=)2?}>xp+rIRsMTA3f1vifVqn8of;`i zkYm2~Hg-BY9ntWKw`1D*)-&Wqz(Z5Xp9Ggg#LJ7YGM--=95{ALGyV$ORX7^!cS@4` zndtq+qvl4v`x#U69-I4S_oJfr;)!LZ=Y|6be9BazzyvDH?G!w86Ra(@G9hInaPreh zE4aVAi1mlFNEeYlkat~GNnZ-~)x&C*ip;PXmCOZhHl5wJnT;gm6FU$6y*XP+tzEDx z5gt=wnea|~hyR%Fybnma5Mpx6u}K-AVyKu|Xy@z{5(?B}h0R!A6X!P5cK^)k$`)mzv0 zkj?whSVV#SVpSwz#axXKt>&c^W-|D(>s6s6)$?oWaxCT!<`bikE;gaI=_h!o_-viU zUlxWmk>xxD)W)rK1+MYsZrUi*qQ11QVR_^__92?7XcP9m;_U3HdX5UZ!Z3aa$$gUK z1g^OAdV{AgZmhZChv8w&u7gm&mlOX!GBr0B(3b@;=j{SapPEt4o_>yX8DsSFOYlnD zC5KWaf|BOD4JtTu7j>I{!MA#d`O7x6hG=zJM`=!~Tu*96d99=INgq7E*K~VT`oqwB zM<#1WZR}LIMBR5eQUmrNt50lG)GrBm$ z*1(#eyF`Q9N~Ob3!PW&=qPUgd_MSR!rdRdK0R%KR8&HqZ9L=7(x(Au>G4kH}lH|OS zN4mg}(eW?|NNMjHTHnwU|Ha5~yY8c5R{0n?AXr|sRGM)Zl5LcE zR84P6F1Em~Y6otkJyE`K046>kJuzlfs9sNM0l%SOx_R&m5-&j25ye`=T%~(w$Q1&n z$ZoH8F+OO0!;yMg4n1^MC#_epH@w~W-fh(Xs%`&DZV+ocsR6ykmAZlqSSiu&k-JGmV?G6K8LWcWK5yq2CK)g?c^`^*)&1B!vGio{-Fib z)zyIec4y%7#+@J7?k{bSo}1%m0VQ!NM6*5T-GNrMGnAE9S1^5cGvwe%$?BX5Z09^J zHMs5=gaEQ_Pc-dUx>Ptu@tv(88%@V3gKMQ1b}<{;_9luAQ?B`Stmx%mW=&q+gq2eV+%; z`O5`&8_>DPp6#ldOe4^p&aaQpoM;YhM76>tjL|0-8di-Ksmjv3;kVsoT#p;ADWOE% zl`3`KHjOAn4F4`H-qQoU@_`69MWzAYx49IW8w}XuUp>F$HMA8rB!(CwH1%@fe}gFWnep@%TU=)iIzze8R#Kz8!(nw z9B6_`NmZ=#jTx}oEN6flhovu*&l-(AHA9v$wAiFJOA=`5)hbH;R2E%XWj#98LO3(dL(Y?&+6QRI`Y*7B&GP5wie?cun z$i&q{lhT7$sdyEh0Y)v$V>Ocp6t(M=yZ-49XemQ}1Bp0@7Ix_a$Q&|W%+o?vt!ERH zhULVjcz$sLT97W9!n;BK&r|v9H3{F!u3wrUTemT}Kpqx0Pd@1s#KgB^XATO-dsy^r zf?Iu&%ua9HTsV@S*NZH6?xbyZOJA}W%{Fp_YIMBW<>^ZYG40|g6@!BRE}qBz-~k|x z;a}LO&SzydJ0PwZYv2T)?bEm0(m7n;Q&hc?OoG+BxF*8guyOfg1PEXKh`KKi)-fB>TZY1u#yn((J zi@L}+(;l57fJP6+Yc;1qavaMxYB68-0hUKkT<`FFkihAsqY}TFtvb5c%>?~*^SFnx zIMn|G!oo2QrIy#|&B!eYABdfK>9(ZcT}@B>4tnHv8)xrhS&43qo2Ex_3negm_ESU1 z>32fZBdX1xF*OMY@(iqv3bPNbjk>t=FQh;paFbunrLhL0og*iHyXTS1#9J%G^3)q2jDHNT$$C|ax>L5$lP zNJ>G}fAM*#D2qgD>VR+B4TfYpFlRWCIZ?QHzOH0Hb_O`1TI^F7!7`eL|CBC4HopY zOHjKU63KwY>2Ru{etRZzpTScQtuEq)5wapGWTsgLT7`Owh?c!X(ho?<0-Mpw7NAb1! ze6yxy$3u9W5B{3GWpXnrXBHjFNmW)@u)yFXH|EgI6lrablOL{f)*rgT>u{zNH*=`1 zd?hbu%mm`Y%%B8S{)=vZ0KZ2(;3^d@i$-=d^5?_6{G(L*>rG7bl0#r`3WxpI0~s&_OT>9Ayyw_fT)fTAJ0Sq?59-&wweO3w zel_oR`aY6?);#?!VBw(Yle3kKB_g((^ZDKlIe19<`MI&N%KGwN)8V5;rjm~eHN2a| z@dH>VPrTa!w7>n=GOR*iMVO7Hi*C_7SU&^qUW@J#XS^};H;!XI4)oUu;%0ACS~LsM;5t;kw9Yb8UQ{V)AcvKi7P3ewKD_Z)9@< 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�^ zj2yr#cH~xTh&pm`E>QE)#!p$~_6q?DaqL522iP%Hn$HV$&3uko`+zvUwQ zW6ikBCO&A>Vuv2~_5*n^YqfQnD&>|#V~?LFz*~T~-16-Ae9!lM<-7>^n%Dg4XRls) z!zZyjy@>%TP*k34CZ!&%Ag>A?mh5Yhx=%Tote2S&MI{v+=$49Dfjfuv;-(BNj0b)G zFE%z%IDsy*9^)%cGsKF3lBgQBV|!qQ*tU$l|#ELd2!cxMh}EB9K}u;m3Z_uKo1l`$qJ<^ciNFBEU%NnA;vZ_ z^ukg+X$C7?VMLB-s_Tk#6b=!o7dBtm(8GVvCa}!U_3L+k$9KH{qAhOhxR-YU7~YHS zc=P8U|MCSyg8;8#3Gs6Qld)B2TD9mWP|aMH9U)26h++4eNo=W3tdzKH92)5OpbI@)$<%(Q~Xu=cbO>$hw8|)Hl8O zGf$4hlZQCAZExE;86b`C46MyT)5UK`LWNRt8-QrwoIwMzT|WvIY}M%oHEtLVHtUFp zpb<-&Fa3PS8O_1iwXZ+@%!OaqXUp+@G_N}jYAo#Mu}NNf4K3Kzv|*cNtfMd4VCySjupDaI zBB?{{*&W;H4k_-Iy;TH56?+;E#^KeZ2Sc-gYf%?0Yw~eKqm1owTw|L$meh%7lYO{0 zEs5BLbL`J$gHCSKPfa|_*iZX_dXlHZV(rz(ZMI`!#5YyMeqmeY6#;I5kG4YB{ z1>55TT@~nb$xTh+?5Y_v8%W=pOAX@bGrUWfgJcYuCAE7#ihmRw&|czLGbz$V?hvFN zjD?>W&ALV}3ZWY1Xsc^kG`O+8cH8+|J}`K_q2}H;fdAm%`fn;l)R7PM7L`z&?iWMR^dOqM4`#8BC2r!4&nAe(4)iRewV2#*PsV_DJ(3%l@+_+8twB?k=n7|W(uMvU5JIJaNJ4T3f9 z7_(k#$2Nw*q#2cJ3S&P}EOdayy49cG!%u;qTwS~O)vtc--3!1YiT1VuyyY#cr_P@{ z_kIq`?@i-s!*RC9t^=-dG`oRgIh$p$P|Z06p^zm?_m+=^kqHj!vQE2bny~=YtMO8l zxTBV=#7nZt;s`*QE$(jXT$?bo0r@Ri_C}6qS(7ty0;6&DXP!cin`Xu#1rPB!)}2Ru z%{TGoi_OJSJgmkCJ1vey!)2jvyTe6}f~8)zT9*>92M(=0$Qp4>GfsksGTJtq876Rz zH}iuz!O4I9>J|K!!|MG%^D{5r!xw?=Xm1<9i4$+V_R^Q!{;t#bQVE}@Y8mm>U5%k? z`P?vI>G)Ps6*SZahrfqT4%*_Ow_=D3SL(>BA2M<&7H}!C)XyKZO^J?uzm#Sww(C)R zJ>b~d#y#*P=JLmjnH~jCzu|-r2jdvqiHp1*Q!b7LtSb6Q!;_}~;bFe}n1qJ^j5YoB z6FK%{ZEo>p%;ZX&Pe0mQXrmpyq)*SlB?j3m3XRvTU@2m(9z&r}QSXYrlix|6G{C|c z-H#r8?~_mQI4&gzeZ93e#y42FnK)RxE$TJ?HA4#&ux+y!@OvA#-+s%xc&=@*I<$CC z?*iEG>tFlI-}vn3zI5rC3#+r7NWLi87Pb;O#^+4%sPyo_#HwRlJ`QYAZ4O9G+gwJl zW~S^LDJaqAGBF2^N^JR(4Hu^UK`A8hDySHeC!3P+u*C&YIDrL33$>cmnaLL~aEpxK z@N*<|Vl!&2A^}S&NT7j49vy2r0}@I{qOi-^67zs!` z8i-Aw0{|><6K39u&Y_dI>?mi^bSsDSgi;XogykW^p)GK&gK7(xD?Xq~7i?{%NFi$@ zmzAgiDDNesF(tID7*RVX;iJY@$rU9m-5>P)&v(NH4_aZOHdl=NW3S;9N-E3IgzEI^ z6PLdFl`sE|dp;@EUJf4RUZ@b`_4l25`K$i&yB>V#iErlHfc)iBt({u<9v+;@D-INt zP90{mB68ZQ!}xL%lzHP?=$n@|jSd}jLpPI4S%-#+upGsd@r}L%Q%ywyb*F(<=#$^5 z#!6KL0OR92eyib*+t0n{;RinP?_i_tKfhJ{ zN3Hhu6o3JoIPvDox8HjHXHV9rr>^0x3tk;KHjIG)44YZygIz9A$n}uMADTj6QyLug zl`z`^TXw89d8paehcwDZe36R}eaMS;C{>}(zmic=ehDIne8{Q{dGV)C*pdl5$Y7_N zgu;nKc+R$M)_4cLjEON=j4`lbQ#aIReB`X04jk<}6Vlr-c~w3%wu*;pQ=r9V(K?kF z+Y{a5kU_Vnjronm(Pb8Qa-mSk!Nq}2co~RHdO+qSn~Z|@++?2iY8yhlqn9{xN2f2z6$Tyee9yd zIBMsZ(siQ-_SmT)4@*GvzID>p7=n};?56#J3yKV#peYW$k#B4l&{encVz<90)dC)n znnOo69*NM2iCS|ce|F0CBE59o%B(%^^d+GU%~jYi*V;IVlQwxRTt3UhaY|Fuku%D^h-0%i-rbV6V%j1P6{r6*M4rv9`w9>(C(3wYqXI;KM>BVSh<-k z%Z^)Y`9)0o1QAveKfCQH;xl!{7DtPGy9miw!KRLj@~kstBh_fX5wu0I-F~}v3+;mH z#Pw6irx|tHmf_QXZ;G)Yo73(%b&t*)yjene!c|G#G&?jh{y^s(95-}&uuc4?Lfyi>tilcM|A2`JHvZ|N1vv0LclobRSH?MJm^@&@h36VRQqObf%<1co{h^oN{`dBM^3%`W zHvp2}b=P}8`@-9A`{|STMOuzlpJHSpJT^k6?Q#6o7L!pf#}vINzWSPc4WE%KnUCgo{y@g_cu8xK}3I%xIkuim6p?VK>Qo;~?&` z=&;`M$wT*)@qxQ5#-fd$wPk2kv8~4DW)y?I6tgkKa(fPEbhB=9YX4-!qpHpuPYj?b z%{0VhR2*30yV}^GuIDa&<2bRp{g#`4`mXo<=4WHM&-yvp0Ju~AiEn(v|8oA^$@{M3 zmXABx+KNkJlohAOM?#?-O|(MRDU^ueL~Qm__@I2sR~&Zbx}@tkk(qo+6OZb2M*Jb# z#lfqbZWGyOQSHvex3vpLSd%06CRo625z$sB9c$twU}ILAlbPJzp65~nzBw+;6!gw; zKkDRZv0x({LJ`;Y5GHX=*FqV_KJ~=nfKF^!w}GJ(ImJ__kVJqnLaE+>w=Fs9QDj`w zdI24Oui@r%ryu)Mf8rbdE+8R0Akf39$8Zj3xdZxjU-M1hcklgA{cl%s3vhCE1+NGA zIndNJEj=+ax5UKF7W`%vCy*RZUOC#%TA&%d$6cdehRiJ7UCdYPd9o^BIxN~306H2~ z6*$eSEh@AN)o5|v19J_p{GV98?p1gG(8oXi?w{aOYm@Ew_?+AUB*ee--@WdqZaIJQ z7r1%xv&`HGmPe5kI9Ws~NlZ>usYOnfWhSXBSMfH7VO1w7J+6 zL*%LHf&}Dr9F(*YKTR-ikf%VZ%_(wKf@VZC%XOC-}ml? z(i;TLih~t>u;PTupZkSCha6A{+oeYFXaZg2WpBK0`E%uulWtUIA|0i5v(U%fOq*-$ z<93OV$~S6`N$wk4bPyoZ>&51$a!1i-uJ&W#>S63c}*lq5_-9%_+8u3nSV2Ev?yw9|@?oVCCS z!20l0$G|ofsmfj$#DQ)zXDfmRV*~QZ2GEo?Rx%(PeP;}^mIrajQn)#X-6$-oXwqWg z3ycs-Ht5h)fm|6c|AA3gYh78>reKRkDhk=WhB4`Gilov7AS0WWb7`ur zN(V?wMlX}L1U`tK1jLS|$y%dpOXQS|P5^0LW(k`N=Z2-KX_5%Wqvc*mNDPjNIK_4X zCqFE3^*@W(&R_THm;GlS``EkxFPM|)IV&xW=gb3$aV0+eRj>M^fBXIip7@*iO=Bd5 ze~^NU08I@qjY^t=snC+-79cSPgdKHD-8LJ7c>-%ni@OIR1mYdeDU)i`LFMM>8(GC6U35IGmHRW#Cx%u#A+;gUR^Tn7ve`=*gi(Jf*$U_oQ99Ocj5 z@=ir%%YJ*DXbF#H8;%+uF``s$J4ZPjB`%%8_M`TE6pR56BqLLu+6=_A<+0crN8a)) zHqyb9PC24iVR0EM-CIt|KuRMZCOczG_7!LLDR;BvP8wKOWWh;Mf!R-P8 z*GauSP+yyHjg2S2KI@N~PmRCoWiNWifBz$Y?T4R_lb<7bUN!(a!W>@z-tYNy-+$*z zZhr?SfXUITolFu15;B}hA|YxUt!^DAl1XPovAsnpH}TbLO%!ICmOjx-r>k^uP+|gk zD{KiDc*$g!18Nq4cw+G%OX>`jCx=z?s-}^GmlZt`S0_}p#Rq%g^P#CmjQF@>rDUvJ zeB_~=mQdNywL6r`q#%VGdlic`b)Xs#RTU50JTZuN=`F{>cyuLzopqf#WPnITHe;0o z$#9TEK&o#jKU=^tSgHIvfZ-S&L^WG;2q!nXa3#4h+q7DdbE8m+qfTp{>pFt)^A<>Z~vPg{KdOJ`sr_Y`og8J zxt(T>G#ep1K}CQ=j638fvf@G}4a3@=GUK~%sS08bt* zBI^9V^kr6Y^JMa3<3@nRl63*J=*qU(DD~Qbd@S)k%F;G}{Lql3iI4Fcna#v;lQDZd z0g0doNL;OX$7E(kiL;o_@o72b}Efy^hM4- z9*>vS=24%$(1%zxcp$g6+k}Z-lc}uOqWp`;P~)JrCpKs)Yuju(5&|pw)po4C!dLz~ zUvmB(-}@ck{1<=pr~cO`Hkm&c^5=B}-~itF&UZfhWBK6UYr>eh*8 z3?InyIAKmOk4)QGyDi1GL*_(v>_>xIKy3o4BQ6W8{K%dMs!9(VqAaTxx{1>Y4hh06 zA_>ce?U=JE`ts3LM5)ATjUOb8#3gZ5{4g?}dSk*P=P?_iwg^WyI(TRf!UnQT$DApR zJMZ`e!x|CmM8%!?BNL1t$CXk-bL7ggXGtTErsQUe$T<=@A`6S$*W<{sVL3ZQa%GN3 ztSGDGC^M`axrxGLY|J&W%rR_xeE*8?=f}^_pC8^oyg#oOP4;Osam3n|_uDQx5z8}m zJ(~8?4^F0lBp8`?` zl+gmdGXV(B2%62|&7)bs)>U&f>%I|NHqg3@-d!r!zqt}(#NLJNL%3TBh*(C5JK-P6 zwUhn^qllXMwRBdm%C^cm!}1Tcf>&yurys63<1=CmQZP8=Y&0n>G=h_Q?tV|V+BLz3 z*qEq)s6KS*Fz1^(AHOSvNOG-h!FyRDSEL*=D*pOREk}ek;U%o`po@ilL36XlK>Eb> z`14nC#|2^UZ1jSXy>luhFzm$RRHrZR)yqR~%&JC(RoiGIDJsY3Coo}^Qkh%xS5L7t z)WnvW71L{|7|F!-t`lZP*s1AP1rsM^)V)(Ollqq}z-FeFn4kG^-EHekDDP7p*csBi zVFqLJ_U9<IgcQib@A$lmaf|j*yFXE#3>D&gSioG?iwZiD;0gAa zkyR9eYkj6xTv6sM57c#M?t)LxS%NQO`&bdsYxdwWyKh>2M`q69JC8!KF;Aak zpZ^+An)Nf`r8qoetJVtOpbE+7jdKbuC&$5*%Qp<~KGGgOX{r9CPwr&E(09yL9W(;%yT$ER7G;lo)%Do&pAgBW3zD zWJ^S51Z0bfX~jYxRnF*u&HL%5mzM4wJtVP<4Dzb_t2ZzZU~`&(x6-My00Uh4@M7nV z@Ygb%&Jz>kI$n+5oo8*=yAcmE%&p{KzA3tt_rYE+w&?G?Y&FA&ZNF3fjm^m-+TxIP z|KB}6|N4NHgNjMxGe>CeMqj~A6lOGu!QwgP+Ue)^`!H~O+C29=uJ&zk>uOarVQHoH zcN&VL0ON_>))DAkXfB*Jq@aH8GgaGHJhlh9BT89D>^$5B_gGGSz>Wtricg@sRGLO) z-~>x#uv5k7_wyTU&x)i!t57I;TyCnJp60`^uWAVweWU&m`DDEwb9wl3&-CKuoY!RJ z$6l>8_#dwB7c#p?4pZ~FLxq>PUPO0ypSsftB=Y$ zHw(_I>{=lzfifqwGF!3@R!1c&{ZcF5_K$Wj)qp+Ck&o-H;?#?OS!tbo6LG9vCgzVp zFtG>i70I2-utRUEA@*S$?i%k`DHZPv&){ydWM-Wm*-5~iq@&LiZobny`RAIUXK-XzerkQE_;cD?wY#t+Ex6>Y{RwkyE zg~4ZCdo8s}SEb^NZMEgahb8{sh7yFrgrSj?+@=xMuHen|O?{N`G2qH@+}=UPp zEgWF{7a*?@#RBqZr6`Mk5TG=+O6wUCi5*RiYu!HPu{}-MTSucP2>>*ha*6OSKx7?b zZ6@&*EF+^*cK{Cd}D7X_ zU#wH4M)uR8>8K8gXqK#Z(}a1THzVoyjg1E;Px|%0%0fS@u10DGr zfIK%fh--V?8iND08hX_Y7{@4FLv4*z!XlW|6f*vg>DeNmt@JYP3BAEL^RAax?Y>4&VU#P)l9PuR@Fj61v>DF4;Y?jhJ zQ=%14df(M}r4H3DXBsu*7o|zi%{wsj`P!aK!gxFM9hAqgGN2p&1>Z^cGy{h+Yc@R# zwvag|ews)XE{MU6)qDaLpVYKR>Pc(F{z~o2Z*Y~lWZ0$kHQL<6Vwq=_#0ySY3WQ%C8zE+u!S*Gh8VZ*{1R za#t_mbmI=V7C~5=`UaT_-}uz*5z3u1@L+z(=k(ywJoF#71bP-?xKK(%0M}=gEth81 zd0Myb7!~g3hSyvU$@=O6R+}Q>>CG1IJmrp zhSTx9%~I$_8%>%wbQKY^s0`d4O2ZSj0zCF6HNkc*%hmvB{OUJciTi<)pmHT2f`Bqp zbqL%QJFITxUZr(D9`PysekA+P&3GlDEVY=K6!Vrc%!WR$A>xaobZ6{vII}1_C&aTS z58>Yq0WmiPxrDiwkLKEX3GOpE38$Y{ZIFz2i$ae6Hw2Sd`i^NTc{h3#$nG0P$u_YA z&4=%4nL5v1PeMyIlq!+&_dAB*)do)245ScA!#^yw|Ltt(ni+KBo8-T0C>w$8y~v*$ zcOIr*@c!aTA4QOBq7{m>#ooe_y4GAup$V~(TMXAxTy6Yr$smE(Gv6ych&76)Hjsl| zTUZ?sy|9h`h0_0>1al9uSC7|YFFRA%>)2@GdOL9MJ+S!*z*%(AP%VQBa5Spg1USy< zoMvn`5;y0T)%knL)ttP>dx9cGGYZP)00961Nkl;Lp#pWEH{bI#r?HOGI< zIp$n*t-a6fRno+U4K7G|zLIk2Cz^K=b|Taht~@;Z5hZY)COu;|As~SDkqDL%nK?Fn`$nssS)bQnkgJ4d7({rc9%8 zL8Nj!pA0Ylz~79a+!mLNp@K1+@-X-On`os`6Y0yqGtWotDc7Hg_VQwEVPrP+IPvAlKJ0vJANhaBj0->j;=iP|x_{)cJK(r>{doGRN3L)1ot;1byEk`2KZJ1j z8xa8FA@hU$t;<0PC>SqIpw2n+^KkH1_Q>B%|GPzAi>N~S-5L0Se^QtI@#CZl{_=SF zH;<=PAG@JH^PC%bn12=Y8!S6BejOvMB?bUw&ynV)UIQ62TVLeIl)n@>?<@p6M&KWl zsck1WXiV0-DUR@S%ha~PfdeI=KjdFD{>Al!y})Xl4g7|lv@HXtgW2VgCiZGmVAUgRkyqllw$nl^6g5;AKl&WyLy5aH>}$08Um|C}cfY z`RBN~ncD(qe*Bhy5dDR9$_7}!#p1J>Kjr|g{|4?+MZ4 zM^u+@!Js@gnzD)ySZ)_o|1o#)$y`8 zKbf4#`UCtaPjB>@c^1uIHZhqdkRECNEnhHC=Gm5hpp?jizWQ3z66s&C21g8ulK=3W z?}QyRr=i6Y8Y)k#2^cRoXXm0JFUoa9=C*tX8~$*cF7_Ar>-Od*?Jq9U@%A?D_WN)m z4)YOh=v_AZv6+37W?H%3@!mbh2FYgyuRk+Ah}wYy@>DRT-R6;RpuFZE;-#Od@WiJs21dlTI@|dcd0)q?-liylq#`+eB3MUBQ=K@ zV5ETrM#U0^ta(OT=t&tZK;wx&x=jfGZBThF`j7Bo%v1VrEc2sr46WqNC=Yt=v{mXQ zu6F3CSqH(n=twmiT@|jika3K1;-$W$7J59T-=BaOE#IDT&}e8`FB#EW&-JwR-jUfr zV^`R3x9u@lu(uKiBdy5Ft__YAeS1MTqO+{&A*_9FGb5Bx%PP^_dCMChBLYGCYWs}C zenY*ZU$qGX0ub@Txv;@n@YMRsCKyHwnt#$p+An1mJI=_Nk$)c2wBO;b&Royh9(GJ= z=Y2-w9~zox@X+AS40;RMOAG$Wy!$_A!yh|49uM$tVy6H(gcZPA3DWiua1bD@A9!G8 zcH z`e$kl&>sOH-qwtJOTo77ng`5r|3{sVn0~aqn#u{EQ;&ZXZ;JjZ`YSrkJ52ndT))h} zv_8L&u*eOT28+&5$$lzIfb~<-Pg=mAQSivqZ~3JF1oP=V_fT&xXR+iz7N58~9?l}; z#txEpl;kIU^CpE=GHBP-?1o18Z$Av1;aAFg~jS$h}uYgYM)Nt77SFriG`wb#T(lIuL`^_{zE&NaE41y z`4@I+_)!BDmVC0jcly{O{pp;6FV*ND(tiQ4bcaDF1uVL6+y%O*qpfHCLD$c6eb!gV ztta%WhETJGInqC|f0T)q79#qQ0l4+w)-=7DLyas${RwQ#!C<_Jjj>cg5Bld0oBStXTT>`h|hsiu82i4(9F(>eOK{UZP zW5oYvTe7t0+5|XN|JZ&8{4LFL5;c?2aJapJ5XtNlfXOx?oo1<;zpYBhJ!L|o9e(+A zpdY(-L_iP95;1`nWZkgSs#>J$Ad)(j!c7W?xwtRvuL1AMVffzKeJ|HtS3jl?{moCf zK$=Kp!DE(Ww`}X1cA~$EN$U<(S><%5IkJBkyU7=t){JotoeLLU?6*00XMiM(Z85kk z_vC7HY+K_swenNGvvBnoz(`juWEcIcZr%#XMmxn22d4czPtd4L+tdKA*H){DbG{f& zsR*gJ3g?E^vJSM(2=yFl8tSYpf;G2ve-=7u%zJ9AI{SX4X{~dP_0xhw6KG4;tr}^ppOOyO1#51+n%1a*PGQ5pN|*JhhSV#2qI8bd)8fWF!X#3I=igLn zjZ%Da)wiPZLOW}QG$wP~>rlQ7vZ&=*8(oh|H~Eh~4C6ZbNsn3Uc$k5F0{J|Pb>>(? z*S_@(m3m>Q83*8AxxMprUwavvyM+^4g{ojIBmMN&>T1ho%&=Il zA9Ej9tiwCcB~N;d0zEl>w&W5E@Q05RQs(cee$|i%J+?72AElCDUv}rD(P@*~2L-=G z84UJZHm_W!59gv4H3-0(;(oOTTZ=27_R6=MuPqt-rI^awGAkT&Z%F;gai8pbu36xt zN_w9s_bEtZQ`rb1(yz{z0k?&5P4T={5o{}oc%&W-rJSKo6Xg#9c6rcC`=KsiA?Ux& zZVP8bvwzoI_4l|o-YOrpu*8teZ&tpH>KN+%B~u5|){0`#ts=zU`iR>ZrowUuep<68 zR6($0W|vy2mfGXYjxSuEVL>ToQDrz%`j z+PYR+MMG+Wms^k?&6(mNn%|yubp~U1MvCO98)QJQkEQxAgV#iTou}W`5^}gayBp%U zITzMi?Sxw0Sf5*E`5**ofXkdu7Z~j&QX-a>p)InfYW5`y>+|W%r(}s)XDy7ue;R$S z8%;~rt>X`#Gvud580%*3G?I#it{2H|Y>jh=I;&cro6W%oD&5jUmh_kt*WUT~Pu=o# zIAmkgW@8-X8g+>OU8~I_i*gA!n_U92zF8G233e?bSz=(F!mU@!Ev@`$msMa+biwt; z!1&X%14cN+sG?g5fhHqgGjcA&&va&QNe{LYY7I2BTx7!nJgL9a8t%<`2*Vaj=zTP3 z#$Y(7*|WtQ*(NxLm4ciRy&=;b2fs7BZAh4$(!qAZ94z1FqcrQ93$v?KuYzim;m`l)wgt@M-g|AKHzX4m= zB2VE6vJ3n!hCByw)Dj{5xaN~7vAphA={5zOmN*||nZC`zzHNEE@uhCat8FC?RN{>Q zC93B_QQ;=`Z0|y?h@WqpsYZvT-XMReq>MOOfZ3qbc|bgC&29p-UbAfjY!t3m3s#F@9Tp9DZu6b~-r=cq%%rFB`uTHN+3ZE&pggRPhP zq+--vt9sdx+7ww__A(#`yM}OBspEQqa|(t+%5#&$hR=DP(70Llc9_~$;qznJGL$vu z-l#KRw5ReoSF?@KR;RO6yB0)V(vO}~N&l=VrD3<+!NU*} zWmrc+fq=+K(NH#*pQSnl|5)Ap;63V#?NI;Lc$fb!2+FojZL>EmA=%ejmO0B$Urh*J zcE@SP6%uW18lGy%c0bEa8isck)p@PPnf@anPc>@K^vql8Y_RU^M0NZ0R2lcM7HD$= zOLtNnvQZ|%0$td~vw4^$dC{jlv!-8!(&-A8+^^cZ4`@sGiUxO^F$ecQ7I zGS4N_3jR}2d9&;oR4*N?FQG%P3!E;|sutF0sxJ}2te3P;Xxt?*YvjpxUa+li``wrA zLBr-;#6Rx}lPw8V)8Z+)IMzTiqR*Te8>8yjDvR-sW{egcwtkBK+fs^q-lBfhv+2eI zN4~-p*6IFzmFBMVS}!(-%2&|)l05EfNb7Mi)4$WE#!klnnsE;4GwVCwc{D7Edi48P zkIxo|3HB8w^KE#Gf_pIC&+gc#;tIGD;w^})AlTGm-NFi3N;|awdNV}Z09rQ`OI539 zhYCb>@ngRQDX|p#RY4Q084JCvrniw$woOdPG;4bhC}V_%y@{Y&=tp0)wzquYmR{!J z-LQU}D2?~;?6riaKLLl8pRKVh)3I&6)r5XKA@aplTHA^*dn!J?O1%a@#aispVsHKR zbmuK&n@3*`DkmenV{T$d&9_r%uUT_^%FeIlcF?lSrLBtI$M3vapV)v9=_EF=^*>9{ znBDp&-;e1b=9&6$nV_&&uigLnin23=|03-5+;Vi%02m#au?EiW47YUL`Hs}F)pkRP z+4eI6vM1e@k~}ON)0sqg^?1bSFG!wM@x~WBJ!^2W@>6o%Y4+d z+m*-lr}2@turn2WEdp)X&fBa@MZT)mvK+8+mEYHG)-UKn^tw8}BbC_GSDjS6vsnbA!H4_doyB*#5Wc zH;v$BxueRI{2)AiSlV9&FIAC|35~g;d%KWcI)ZHJ-OIrH`ab$Nen04BUB6qP9O5+F zo<@@)nVvgWT7&dI80)i6+^X&}_tN|ut~R<%1+e&;*T zt)~;XjW@#;(hcH!2fGAtrlUO9VV|k?5<4N)ay!ubUX!iwVL|(L)aSyO(lOMnwioo+ z8L6HRC~~2l;x=kGe+rE*gK|!QTXVXy8TMqA0$ zzNfSrzec+XAdOe{+@43B}(Tv45& z4o_EeJ=ZTvn`G=+V5C9+qBJe`5^`MkZaeQSfCIg%)#5yqn`P-~4*9GCqz%ugXi+J> zpwSNLlBW(%xnfuEt>EmBbbL)u4Y{#mr8L2%4|bQ@^${_rWvY**lf|Ru&4U!NFicKl zUU4!L;c2f$Zpwuw+oZ}PGP_nYgR)!bvR9|4gRO0=RjQGF^GwV!rW^m&QPPH6vie^p zV>ix0qbU*0o9&_f))ZqE1zs#+f;6om4i25?y-5id{U zV_S!Y^)lcbz4mH35?R`*cOTEhNVfoehfg#^eI2JPy{@lCUG$_pAKe*08OF8J&5AHy zZ+e^embvaLr7I;GA0yi8sB zW!5~kpHi2LauGypyMtjP;@$g~CV4kvbI{D(W#eD-W@`4#x#81baEy<{m5}m{o@-wY z|7|%}tA-g|(EyZkK$S{t&pWfuMaAh#;%`eW>K)Ym?rRLAe5)@t7)B}(nT zl)+7yn_hu6(3A$;s>+>bgDluAK1M6D-agJt+h6Oo*~5IznSACNtJ}q^cdB|<4n6mm zRhvy05G{=(dIF`Y(N6QK+ri`ca*tnq^|Nh=6f}FAo)~K0i0aMdsnhE`6nsT6@RhbJr`BRxCF`-t5Y4jfDz?Q(xP>|Fp);=P zQ{Gf4WT7e6<*3$aP(f{Pfe7jja-8u;0hcR1D_{o_x^28|1B}tp$U5M04mFNww^nhVCzCA3gzo&R;GO9OrA;@AhoOuMtOOVcT;H$X9xopIq|61yJNr!KaJTMGe z6V&Mr*I4|-?6LUSIVQIZO}pL*)hN?#-@vVWrC^TKiQYcI%*?tPYbCxKkA!kIRMURq z=jLNs(>4-P4%`ZY#t|MA992${()Ds{L{P-B;+!x(nEs2{em^ zuAqu)cO6n*8ZSfHB)syyWdgB`YCyEA%-kKNS1N{m7iO~ja3ckAg#o#0%@&#)@D)CD zY};mCr+i;@=H>zkh{q67o5^uS7 z(DcA4Yhd(Kqv6nv9D|J%WJAIxErAB z%F;LWyY|>eac-CL(8W(9ZM8lcWJYS~SgQ@`Z3fa5-6P6Mvq+#@Zhq`4X(6R;6otcZ z1GH3QTL`$5+z8P|OhK{5@%V*j1=@O3vp8+gu*GScr}c6e?51hw2v(x?2(fPPfV*;W zk1V}bLacV(dPfPNkwn^wzYHIvs`$E<)64Q*m1g(Q1mVHFf7tsiZ^!IBi*N z887S)uY|c)%vr%KuwoP{_fqmhEcDW0+Cgt-9h5M{rK6Th)w5=6&8p$kGFir;i61G` z!5=V2;5i~Thx=HGt;O(!(Rz!t+gDdzv9&T@bhR~g zRmS&^$+fFh%mS7TOKd?;()Bd1rnj_Z}47X>OZHc|Qk*L&KD7$S8G`w_W#QJAj z<@1TC<+(iRD#|oGy)XS4R<##lEef=VtkVvBYBUpdwH|%_)#Kl;U1=lzp10^rYUu8| zY?WVHBfWmki0Zq*;9bqi*gAe`95X0;df!7W4Dg$1osYD=%`Nf%;QXu|by(qQHD?nr z>3tNGLkiLR0^WKFbqb(unaPiQ?a+y1?dF=i_gM`(?U4bT%O*GxjQ6ASm+&lcg7c2> z9DL^#hIz^}qS>SqlTrslqGKfO97@UKQSZF9;N~*RgR0vYOq|qnz65H7fs%(?z&!9K7(mEq?pW0)dJ8zeXchrr=bI|&{L_@rw2D^&> zUiB>XH157zT2(zl^1YNUKl^VK8dEgFA+m)FcFFi3A87?t1;Vs#rG;&|-_6*l0QyBd zk3M~6t^Jq@IibtZ+98)HX{IbtOnkvgf*#_YD;6DraR<+Q&PHT;j_hY!;k~iHqNVZ5 zr(<)dh4$@{AtY6{_mJjT-fWq=7)+axxPg56_@dnJM$9~T|*8VD4 zfbD&MYFlG&9P4bs9&2?)D_>b@tAh-M_x>LRUmpNl=(^)LEmNP!4l_mxU6fd?Liu8=cPD`*7Pfi z!PGBXy?ogtdA~5X9=!T8k@HgQX)T=_j|1&>ij=sq4gmk=L>Nwj_Y5<5$K<=^GQv9o z#5r=JZ@qe3`Z~|E)YwbrKSs=0vHby<;YB%kTAK||S)iA+TQL6}MBdBd&Q)aO9XzW< zb+hn!FtTFm7MRD~K0{rug{vqZS6{DvzH}bYS(a%Oo<+bv;QHOtW0ws-XHi?u!)NQR z#@fBRSs81&TWT|K=NQ!)l$rIn0FUv{kn67LrPsb~XHL6pSN$^L>ai(25LSjJn zOt4DdI@3P_A_|Bl54H2`E(|GDRQZqjOdce;dawmge&5E+U>EUwi?6VdSg!IbJXh!X zDI{A5j`KJrml@TXXA#qbpXUI)DGW3?9~;H_IS*DxpZ1(~G=l-YgP(dTv3I1z5KSvq ze?;A7k+LVO)8jddv(b|kLr=S4i`{SNWZP3t#nJ^UQS~j$V;dV@z+|tpn66rX^NTIm zx5v$Sn5S@%7=}%dbr$xR)b(>PpfOhrwQR5CM*3f&t*GgFge%0HFOubzTr9?l>y&{x zfgwj zZ7k!Z^DHgSsMFy6DouD=GqN6VOQT+o6`|%evYm=o`k!6i9aVo>=2;%Q((BZitC~{| zSz94gt>5rYK+zw`9G)Y9F|;MO^KU!F~%Q6*D1YG(7= zKAkCO-L!EH53K!m(`TOVB^&u{U2TwWC$&3X@4S$;Yqh0QSt

uMg`f5T90aq3+qq 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�jYmYw701iBZ|;iym2;e5z$5fwdBH7TTc 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