From c11e183084a8006e1948e2bd3fddc897a5f2df37 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Sun, 5 Nov 2023 13:06:28 -0500 Subject: [PATCH 01/48] Made changes to project launch Now require main board to start new project. On new project start, template is auto generated. --- src/app/mod.rs | 23 ++++++++++++++++++++++- src/project/display.rs | 35 +++++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 49506e0..3d8f69c 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -70,6 +70,9 @@ pub struct IronCoderApp { #[serde(skip)] boards: Vec, options: IronCoderOptions, + + // Warning Flags + display_mainboard_warning: bool, } impl Default for IronCoderApp { @@ -87,6 +90,8 @@ impl Default for IronCoderApp { boards: boards, colorscheme: colorscheme::INDUSTRIAL_DARK, options: IronCoderOptions::default(), + // Warning Flags + display_mainboard_warning: false, } } } @@ -281,7 +286,7 @@ impl IronCoderApp { pub fn display_project_editor(&mut self, ctx: &egui::Context) { egui::CentralPanel::default().show(ctx, |ui| { - if let Some(mode) = self.project.display_system_editor_hud(ctx, ui) { + if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.display_mainboard_warning) { self.mode = mode; } self.project.display_system_editor_boards(ctx, ui); @@ -404,6 +409,21 @@ impl IronCoderApp { }); }); } + + // Displays the waring message that no main board has been selected for the project + pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context, state: bool) { + self.display_mainboard_warning = state; + + egui::Window::new("Warning") + .open(&mut self.display_mainboard_warning) + .collapsible(false) + .resizable(false) + .movable(false) + .anchor(Align2::CENTER_CENTER, [0.0, 0.0]) + .show(ctx, |ui| { + ui.label("please select a main board to proceed."); + }); + } } impl eframe::App for IronCoderApp { @@ -436,6 +456,7 @@ impl eframe::App for IronCoderApp { // optionally render these popup windows self.display_settings_window(ctx); self.display_about_window(ctx); + self.unselected_mainboard_warning(ctx, self.display_mainboard_warning); } } diff --git a/src/project/display.rs b/src/project/display.rs index dff32d6..53a5c26 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -12,7 +12,8 @@ use egui::widgets::Button; use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; -use crate::app::Mode; +use crate::app::{Mode, self}; +use crate::IronCoderApp; use serde::{Serialize, Deserialize}; @@ -504,7 +505,7 @@ impl Project { /// Show the project HUD with information about the current system. Return a "Mode" so that /// the calling module (app) can update the GUI accordingly. - pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui) -> Option { + pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, main_board_warning: &mut bool) -> Option { // prepare the return value let mut ret: Option = None; @@ -560,13 +561,28 @@ impl Project { .frame(false); let mut cui = ui.child_ui(top_hud_rect, egui::Layout::right_to_left(egui::Align::Center)); if cui.add(start_dev_button).clicked() { - match self.save() { - Ok(()) => { - ret = Some(Mode::DevelopProject); - }, - Err(e) => { - warn!("couldn't save project: {:?}", e); - }, + if self.has_main_board() { + match self.save() { + Ok(()) => { + ret = Some(Mode::DevelopProject); + }, + Err(e) => { + warn!("couldn't save project: {:?}", e); + }, + } + // generate template code on initialization of project + info!("generating project template"); + match self.generate_cargo_template(ctx) { + Ok(()) => { + info!("generate_cargo_template returned Ok(())."); + }, + Err(e) => { + warn!("generate_cargo_template returned error: {:?}", e); + }, + } + } + else { + *main_board_warning = true; } } @@ -579,7 +595,6 @@ impl Project { // let painter = ui.painter(); // let rect = ui.min_rect(); // painter.rect(rect, egui::Rounding::none(), egui::Color32::TRANSPARENT, egui::Stroke::new(2.0, egui::Color32::GOLD)); - return ret; } From a67b8fb4d69c4e0b9d2af9425335a2fcc1454f56 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Sun, 5 Nov 2023 14:39:07 -0500 Subject: [PATCH 02/48] Changed settings menu Made small graphical and text changes to make the settings menu look better. Added todos to the settings code in comments to plan what changes need to be made. --- src/app/mod.rs | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 3d8f69c..738665d 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -307,11 +307,11 @@ impl IronCoderApp { .open(display_settings) .collapsible(false) .resizable(false) - .movable(false) - .anchor(Align2::CENTER_CENTER, [0.0, 0.0]) + .movable(true) .show(ctx, |ui| { // Store the text edit string representing the ui scale + ui.heading("Font Size:"); let id = egui::Id::new("ui_scale_string"); let current_scale = ctx.pixels_per_point(); let mut ui_scale_string: String = ctx.data_mut(|data| { @@ -328,6 +328,8 @@ impl IronCoderApp { } // Create radio buttons for colorscheme selection + ui.separator(); + ui.heading("Color Scheme:"); for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { // ui.radio_value(&mut colorscheme, colorscheme::SOLARIZED_DARK, cs.name); let rb = egui::RadioButton::new(*colorscheme == cs.clone(), cs.name.clone()); @@ -338,6 +340,21 @@ impl IronCoderApp { } // create a font selector: + ui.separator(); + ui.heading("Font Selector:"); + // Tried working on selecotr box for fonts + // Need to figure out how fonts are configured before continuing + // Used example here: https://github.com/emilk/egui/blob/master/examples/user_attention/src/main.rs + // + // eframe::egui::ComboBox::new("","") + // .show_ui(ui, |ui| { + // for font in [ + + // ] { + // ui.selectable_value(&mut colorscheme, font, font); + // } + // }); + for (text_style, font_id) in ctx.style().text_styles.iter() { match text_style { egui::TextStyle::Name(name) => { @@ -362,7 +379,17 @@ impl IronCoderApp { _ => (), } } + + ui.separator(); + ui.heading("Account Settings:"); + ui.label("Add github account here."); // ctx.set_visuals(visuals); + + + if ui.button("Apply").clicked() { + // TODO -- Read all the settings to the settings file so they take place on next startup + // TODO -- Make a settings file + } }); // unwrap ok here because window must be open for us to get here. // ctx.move_to_top(window_response.unwrap().response.layer_id); @@ -383,14 +410,16 @@ impl IronCoderApp { .open(display_about) .collapsible(false) .resizable(false) - .movable(false) - .anchor(Align2::CENTER_CENTER, [0.0, 0.0]) + .movable(true) .show(ctx, |ui| { + ui.label("Iron Coder Version: 0.2.0"); + ui.separator(); ui.label( "Iron Coder is an app for practicing embedded Rust development.\n\ With inspirations from Arduino and CircuitPython, Iron Coder aims\n\ to provide a fun environment for embedded development." ); + ui.separator(); ui.label("Developed by Shulltronics"); ui.hyperlink_to("Iron Coder on Github", "https://github.com/shulltronics/iron-coder"); ui.horizontal(|ui| { @@ -418,8 +447,7 @@ impl IronCoderApp { .open(&mut self.display_mainboard_warning) .collapsible(false) .resizable(false) - .movable(false) - .anchor(Align2::CENTER_CENTER, [0.0, 0.0]) + .movable(true) .show(ctx, |ui| { ui.label("please select a main board to proceed."); }); From fbb8b241691da5cba3dcdde1548b20a86b4144ea Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Sun, 5 Nov 2023 15:32:31 -0500 Subject: [PATCH 03/48] Added Unamed project warning Made it so that when a new project is being created there won't be an error in creation of the project because of a lack of a name. --- src/app/mod.rs | 24 ++++++++++++++++++------ src/project/display.rs | 11 ++++++++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 738665d..72e3d9b 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -73,6 +73,7 @@ pub struct IronCoderApp { // Warning Flags display_mainboard_warning: bool, + display_unnamed_project_warning: bool, } impl Default for IronCoderApp { @@ -92,6 +93,7 @@ impl Default for IronCoderApp { options: IronCoderOptions::default(), // Warning Flags display_mainboard_warning: false, + display_unnamed_project_warning: false, } } } @@ -286,7 +288,7 @@ impl IronCoderApp { pub fn display_project_editor(&mut self, ctx: &egui::Context) { egui::CentralPanel::default().show(ctx, |ui| { - if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.display_mainboard_warning) { + if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.display_mainboard_warning, &mut self.display_unnamed_project_warning) { self.mode = mode; } self.project.display_system_editor_boards(ctx, ui); @@ -440,10 +442,8 @@ impl IronCoderApp { } // Displays the waring message that no main board has been selected for the project - pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context, state: bool) { - self.display_mainboard_warning = state; - - egui::Window::new("Warning") + pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context) { + egui::Window::new("Board Warning") .open(&mut self.display_mainboard_warning) .collapsible(false) .resizable(false) @@ -452,6 +452,17 @@ impl IronCoderApp { ui.label("please select a main board to proceed."); }); } + // Displays the waring message that the project has not been named + pub fn display_unnamed_project_warning(&mut self, ctx: &egui::Context) { + egui::Window::new("Name Warning") + .open(&mut self.display_unnamed_project_warning) + .collapsible(false) + .resizable(false) + .movable(true) + .show(ctx, |ui| { + ui.label("please name the project to proceed."); + }); + } } impl eframe::App for IronCoderApp { @@ -484,7 +495,8 @@ impl eframe::App for IronCoderApp { // optionally render these popup windows self.display_settings_window(ctx); self.display_about_window(ctx); - self.unselected_mainboard_warning(ctx, self.display_mainboard_warning); + self.unselected_mainboard_warning(ctx); + self.display_unnamed_project_warning(ctx); } } diff --git a/src/project/display.rs b/src/project/display.rs index 53a5c26..65fa70f 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -505,7 +505,7 @@ impl Project { /// Show the project HUD with information about the current system. Return a "Mode" so that /// the calling module (app) can update the GUI accordingly. - pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, main_board_warning: &mut bool) -> Option { + pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, main_board_warning: &mut bool, no_name_warning: &mut bool) -> Option { // prepare the return value let mut ret: Option = None; @@ -561,7 +561,7 @@ impl Project { .frame(false); let mut cui = ui.child_ui(top_hud_rect, egui::Layout::right_to_left(egui::Align::Center)); if cui.add(start_dev_button).clicked() { - if self.has_main_board() { + if self.has_main_board() && self.name != "" { match self.save() { Ok(()) => { ret = Some(Mode::DevelopProject); @@ -582,7 +582,12 @@ impl Project { } } else { - *main_board_warning = true; + if !self.has_main_board() { + *main_board_warning = true; + } + if self.name == "" { + *no_name_warning = true; + } } } From 18a022e41efc288a6d79b628597134066f2cd428 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Sun, 5 Nov 2023 17:32:14 -0500 Subject: [PATCH 04/48] Added settings file and added a function to it Settings are now saved between launches. Saved settings are text size and colorscheme. --- settings.toml | 2 ++ src/app/mod.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 settings.toml diff --git a/settings.toml b/settings.toml new file mode 100644 index 0000000..98e0528 --- /dev/null +++ b/settings.toml @@ -0,0 +1,2 @@ +ui_scale = 1.25 +colorscheme = "Industrial Dark" diff --git a/src/app/mod.rs b/src/app/mod.rs index 72e3d9b..e319e38 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -4,6 +4,10 @@ use log::{error, warn, info}; use std::path::{Path, PathBuf}; use std::sync::Arc; +use std::fs::File; +use std::io::Write; +use std::io::Read; +use std::string::String; use clap::Parser; @@ -101,6 +105,7 @@ impl Default for IronCoderApp { impl IronCoderApp { /// Called once before the first frame. pub fn with_options(cc: &eframe::CreationContext<'_>, options: IronCoderOptions) -> Self { + info!("welcome to Iron Coder! setting up initial app state..."); // we mutate cc.egui_ctx (the context) to set the overall app style setup_fonts_and_style(&cc.egui_ctx); @@ -112,6 +117,38 @@ impl IronCoderApp { app = eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default(); } } + + // Load settings from settings.toml if it exists + info!("reading settings and applying to app state..."); + let mut settings_file = match File::open("settings.toml") { + Err(why) => panic!("couldn't open settings.toml: {}", why), + Ok(file) => file, + }; + + let mut settings_string = String::new(); + match settings_file.read_to_string(&mut settings_string) { + Err(why) => panic!("couldn't read settings.toml: {}", why), + Ok(_) => print!("settings.toml contains:\n{}", settings_string), + } + + // Sets the scale for the app from settings.toml + let scale = settings_string.lines().nth(0).unwrap().split("=").nth(1).unwrap().trim().parse::().unwrap(); + info!("setting ui scale to {}", scale); + cc.egui_ctx.set_pixels_per_point(scale); + + // Supposed to set color scheme for the app from settings.toml + let mut colorscheme_name = settings_string.lines().nth(1).unwrap().split("=").nth(1).unwrap().trim().to_string(); + info!("setting colorscheme to {}", colorscheme_name); + colorscheme_name = colorscheme_name.trim_matches('"').to_string(); + let mut colorscheme = colorscheme::INDUSTRIAL_DARK; + for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { + if cs.name == colorscheme_name { + colorscheme = cs.clone(); + } + } + app.colorscheme = colorscheme.clone(); + colorscheme::set_colorscheme(&cc.egui_ctx, colorscheme.clone()); + app.options = options; info!("Reloading current project and assets..."); app.set_colorscheme(&cc.egui_ctx); @@ -391,6 +428,24 @@ impl IronCoderApp { if ui.button("Apply").clicked() { // TODO -- Read all the settings to the settings file so they take place on next startup // TODO -- Make a settings file + let mut settings_file = match File::create("settings.toml") { + Err(why) => panic!("couldn't create settings.toml: {}", why), + Ok(file) => file, + }; + + let mut settings_string = String::new(); + settings_string.push_str("ui_scale = "); + settings_string.push_str(&ui_scale_string); + settings_string.push_str("\n"); + settings_string.push_str("colorscheme = \""); + settings_string.push_str(&colorscheme.name); + settings_string.push_str("\"\n"); + + match settings_file.write_all(settings_string.as_bytes()) { + Err(why) => panic!("couldn't write to settings.toml: {}", why), + Ok(_) => println!("successfully wrote to settings.toml"), + } + } }); // unwrap ok here because window must be open for us to get here. From 6b980eb0121a26a5faabb7f8644cc2a86dd33bed Mon Sep 17 00:00:00 2001 From: fredward36 Date: Sun, 5 Nov 2023 19:12:31 -0500 Subject: [PATCH 05/48] Added nRF52832 board --- Cargo.toml | 2 +- .../Adafruit/Feather_nRF52832/bsp/Cargo.toml | 11 ++ .../Adafruit/Feather_nRF52832/bsp/src/lib.rs | 52 ++++++++ .../Feather_nRF52832/feather_nRF52832.png | Bin 0 -> 327351 bytes .../Feather_nRF52832/feather_nRF52832.svg | 118 ++++++++++++++++++ .../Feather_nRF52832/feather_nRF52832.toml | 25 ++++ .../Feather_nRF52832/template/.cargo/config | 42 +++++++ .../Feather_nRF52832/template/Cargo.toml | 10 ++ .../Feather_nRF52832/template/memory.x | 15 +++ .../Feather_nRF52832/template/src/main.rs | 22 ++++ src/app/mod.rs | 2 +- 11 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/bsp/Cargo.toml create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/bsp/src/lib.rs create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.png create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.toml create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/template/.cargo/config create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/template/Cargo.toml create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/template/memory.x create mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs diff --git a/Cargo.toml b/Cargo.toml index ecc9459..7228767 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,4 +34,4 @@ proc-macro2 = "1.0.64" prettyplease = "0.2.10" slotmap = "1.0.6" clap = { version = "4.3.19", features = ["derive"] } -usvg = "0.35.0" +usvg = "0.35.0" \ No newline at end of file diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/bsp/Cargo.toml b/iron-coder-boards/Adafruit/Feather_nRF52832/bsp/Cargo.toml new file mode 100644 index 0000000..8dbe755 --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/bsp/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "iron-coder-nRF52832-bsp" +version = "0.1.0" +edition = "2023" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +embedded-hal = "0.2.7" +# sh1106 = "0.4.0" +sh1107 = { git = "https://github.com/shulltronics/sh1107.git", branch = "embedded-graphics-fix" } diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/bsp/src/lib.rs b/iron-coder-boards/Adafruit/Feather_nRF52832/bsp/src/lib.rs new file mode 100644 index 0000000..bf7b8ae --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/bsp/src/lib.rs @@ -0,0 +1,52 @@ +//! Iron Coder BSP for nRF52832 microcontroller + +#![no_std] + +use embedded_hal::blocking::i2c::Write; +use sh1107::{self, prelude::*}; + +// use embedded_graphics::{ +// mono_font::{ascii::FONT_6X10, MonoTextStyle}, +// pixelcolor::Rgb565, +// prelude::*, +// text::Text, +// }; + +pub struct Board + where I2C: Write +{ + pub display: Option>> +} + +impl Board + where I2C: Write, E: core::fmt::Debug +{ + pub fn new() -> Self { + Self { + display: None, + } + } + + pub fn init_display(&mut self, i2c: I2C) { + + let disp_size = DisplaySize::Display64x128; + let mut rotation = DisplayRotation::Rotate270; + + let mut d: GraphicsMode<_> = sh1107::Builder::new() + .with_size(disp_size) + .with_rotation(rotation) + .connect_i2c(i2c) + .into(); + + d.init().unwrap(); + d.flush().unwrap(); + + // // Create a new character style + // let style = MonoTextStyle::new(&FONT_6X10, Rgb565::WHITE); + // // Create a text at position (20, 30) and draw it using the previously defined style + // Text::new("Hello Rust!", Point::new(20, 30), style).draw(d).unwrap(); + // d.flush().unwrap(); + + self.display = Some(d); + } +} \ No newline at end of file diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.png b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f03a30ce6497b4725608ff2bba017d24c6ed36 GIT binary patch literal 327351 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%0DAD@-Bkke44Tn%-grR| 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

Fz+|H~jSJMn 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̡mjX?3oR?#aOcr{Oj++3Hf6>Ycx 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

jT@%==KBU!lU>9vq!%EjZc62slRZJ>fqj6 z=UzTIH}T(Y-?^iD@=RI3c)C3L?Ah}CnY#ac=~Q{H1~3LFQLqb0v%NhpC3kmAEOFz_uRbj zhE{GUYh3Q1HUhrV&9K(5<5kn6S$PCU{j+3AEGA_pJ`eHcTZ ziZ(JTAkGakE}%`n&HSiO*$m-PF_weFYvN;<1d6eA1i}jlt(LYT(Xj!&nc(095;UAZ zKlF@CfTBV7KpTKtB2d_ip6C!RI$~R6^n)k1bRB-2gPijVeCdZz{PH_?Q7<_rK>~Qu zjqJvS-{69S-;&wWR`H5AHr6lvIA(n0&b5LL-Fv0R_D;OO6JKs|;V1WS@xZtJxt;67 z2WHEbn!E;n`ER~&e%JQlvevh~j7;q<7oU3I7e4%tKi7L%gChrk*7|VXU|?KuU))SZd3+1xTkxb%(($9$gNQ9sVxC9*&2>8Q7(bBE0jiX z+b=h>-*)%g-ndbiKdWFYOJZ~=%od6QC`VsgNB5YlY8Vq(5m^mMgp|qn5*i*km}H7B zXOOJ4aaes%pFUF_e6aUJpcKy_W+J#bD<{;?xq=V<$VNth-~2%*UD;N`!vPfI=q6iZ zeT;{ju3~(6B}8NJ%kk(2&|{!=T<41OI9r^kt&2|R03Qi1ZD_Hnb9`D&;en16ctCLG z91lq*DIj<^gL;s@!RMR~=$X83C6FC{WAI8ZO(%~ zEl#rNXM$4%9N(ia6Ac~!{QONaz%N|nAcOPp6I}u4Wa9heqi_Cfa*zeSNF~ z)$=DjrofM1ICF0bKPEwZXlHW;PJp-Ym%8)?c(4fYngd_v7vhZmB99lmeUt!*FMY(k z1;fh9QoSB6M-J}oevo0{mwx8G^E;$OUKy`5#ee^X(q9%KslMXqiWG>kWJod2i!V{-aXRLO8U2Es~c+BdI9Qx5WTNqF7 zBn0E=mp<7q^o&6VPWYUY0e|q)6L6jqUG^OP&EyohTsxAR^OGB1I-w7?bse8FHaHYu zJU;YG@)SVqsSUqmB^z+expq8~k$mLlLwtt(+68O2VkR-TGtq#SA9!0CU6adCLw)Fj zAL?$GxUJzRNs-q8>p&F0#B4DjK}cp|&OKFQGXcXDeB`l;C$r>ag24|R(i0uDe2_1` ztWH~O<(#}9|M;5OU>P5+JAwcFr|zrU zy@|5EyirD{kC*k+CokW%@$!Se`^cGIy8jEp|L|Y`#G&KIZ~Cuh_P8%JRIWbzz4EQc z&y|<1ESGC5)$vx}d`F4U9M}vcFaYH-mNrJ@=vkW&3oU3_khM+vfM}o+ul2iPgXDa2f7fKXmQPD}8+@ zPki&?i#})YpN1c}_qM+8d(VOY&!NKy@7S_^ccs2jPCfKMx&PU#WqoX_?AkM1wpB$@ z4kl$vs}PBa6H^4{DA74Z3mmJ2^aq(K7+uyC$XPBMCqO8OGSqQ)G${d2ir^%c$&~Gf zHm!oJRs=5k49)=Pa%TL&#VI8=!6x9Xn%qa@^qd?pp1|{gen-xSM@DDFI0pWK>(;ml zV6^b=NvPFI93qYk)WO@$b_0XmA2kmS4Zbl;!l%D;g?z>;=+lX}-6a<~Lz9jq7(pNa zC20DlH%D!bf`D^7!oyA+QlT?r^;2(5wj=42I>(%=m*{hE67OvwL=JUi1JOl}+Ck)` zJNWS_Sm=hn$jiR)7(#bat&AxaDo-z3;W$Jl+LLGBZUG#FCUywoQZ(C}vbaZiePi zf?ct-lc5EaYqOiNf=ECyI=q703`J;tI2(teH2Co#x!D>r4(Bxve~$WdB0+- zKiK4O6I=CgEk26 z;KVN-T)VbV&Q@8f<;#}pPseZR{Ta=`eQ!HDfAqj~Rd!!lTdGUOy7C#@Ha)y$sPE1# zm#=>A8z;~GxsUnYciZ8%F<5T8 z{cYWh{f>9My>kwV$&4*=NG_D<#<`hKo&JtiJjPJ2t(onK?Uu0|oRdgof?JZHeEVLr z1|@MM24-|y4~C%(hV(iFnv#K8Kwrv(15HNefM|0F$w%Tum*T(lr7v|xkQhCYlbGPn zs(^7hhUCjQjKZM6G3P*=5}C=x@sgw%GDcN0J~;5txzWS}Kr{X0K%7ut*Min6ikx&H zpablXz;H~WL@&wCH5!WR)WMC0e%jzg7iiCnOV@ZJr`4>#-}6omyQvT8A6X*{pbwC~ z(FI6<^w?7}Ag{iX4Lv1L0`2(VYy(t+vN~jQs{?*PM!4y`O-lN=_5!ZSlDgCzFD8tq zXGu_!PQt)v^cmd+=(fdajQ%D%e#s^#QY5x$UTDw*ULrfbqnps#to!!b zx$$(*kHo;4v%Pz~Ksz4bH?iSGq84*kuU;uQGQ4%V%-sIYxkJ-qADZ0gJ25sia`L$|=X)Hz4j+Hl@!=1?egDsW z{I4ARpKrNs^0uLYp)xYPzpO5I;j z%abgiU0=>b7=lVr5|28LB9J8~iAQp9B%~*JJ|^!->2Xvvk`OtYb~6m)BnZ$_v`Z3> zk{O4D15dVM98#SbUw_HV6Gr?c&0!=(24g(Q))Jm0>XY$t zj24V1FDK<7bmSc0@TQ=vPLXW!OCFA778W38WHU6!mN3+jLA~qD+W69sE*z~c1({$l z);RU>W=m{5duAmC$mqpf+W})iWQ~pj&Lanza}A=?7Sy4skG?*MEjY4*)85rr`vgzu z!LJXT^rc=hF@_Gv1h+nH#^(B_KL}lQ#_@^ZN*{Vbi@)K+q{d&>1NhbRefW%Pnr{y2G##7D%=?nOj`@cIwLNg zFa2xh%gmvzbGN_a_|L!dUAO$hkKT8D{{1)an*YG)kicGgD)Pp(w>Y7Y6yvr$1A^@y%~^ zh9R5))rTTDy?wMUzLgW_Bh+!*I(ZnJj!F#vi=jPOz{ zp0zob@fn^Ia7YQowZtXZIT_=^p^#C4N;b}8-sj0{f#BzmS#`n6*75q@7Ju(~8S`$!;GoSsA_X*zOlc>QURnOcIO zclJ~-fy4K;uYIklcVFA_Llr z@hupWz5s2vW_;~)@4mg=Ljp1;4#=*LU6CJG<*Rt;O_rys|J|svY%PcO&GwSi+@5{& zH?A$0;icuWXU-FW;j+HERF-dCstL=-@UEBXiRH3)rmq}6Fi~zky0zSNc&hB#S!cts zIvZ7n2gaw$ct!T|qtBIZeD#U)^=Ge^Gpm)El{#xzp(si4DIAY6G{}Hn zR%P1g(|E}be`rb;_(Ka$`qMZ1iA>Qw9no|2=$LZ=S0H_Xb~FWwx|?shxlC>Ez2BC0 zMVsP0Ny)Wid;kq4D=~6ryaYif@RGOXE&Sjkb&h1G<0L5O{6O-E&GZ3i0^|6e&!AYX zSdH9r{FZXZoxN|7d1`9M!0uwlB!Yi_6nb_@$yo5bo6D~hHC3#k#nyxlFaA0@uKI`nXRrwK6tb zXNvKGGB#SXcab$K(XvtoOHE>fz7sQ0woHzcv6{#Rhihe|FUccV^F$Jp!a*@Z12wxJYK#g-M zAm^My0C_bOD$-ODtW9O2Uq`}eX5I!ZiT1UYrJ?PJ|$x7zPBl+cKExtK4JxW*{ zmt4kKA;K%!s1K0cN<@+)BmCh-TUK!Fk*yZ};SIRPBm4qG(T+zvw0aN3mMI|e0(`1> z?Hs@f+CFr5^w`l(k8RNB2#0=naAY6ncjCltr=Q- zoI`sIs~E=-l(t`#soi<5Dc(4c8C@R=GERGVaUEQ)bHoEDk351`aC0y?lOQ=48QsT` zw8EPLTAZBC?B^FcEYr=3lG5DV-kPv`kB2#)gkzg&W^xS|85q6gS0M+Q90ae~mZYEL zkxxM@5V_RDle+dgfCou5TXqn9ZHcUshHE^71Twvl761Cuo#0cSt)zDJ0`O_i zIl3TQLPA^!s4IvU z&Xoth{zCabKl@C%|I|`>d1av7=n_;-3PTc|ZGlfdOm)iO@CoW91_~Dx0#@*IV2X~j z016;zl%$P9q8QgvdXyGO-zX5E&9IK)17s{-W3=G*0-o8yO>zOo5zI(tDfa-}jFe=o zOa!T$^Be*Me*ivm8{dj#B|v_(%$|%b0hna7}i&=!;I^q6fAzA>p5F zSwTeJjOS}P2lR$VbjWN%v4S=R9<(G7{q<812fMuR{0rr&r=RL>G4MsJcEw+BxaaC# zAAa$OSN6zm!!>=kMPIhyV^)MF57+d>R~*$lMla-Zj=$(0z~OyDi4;Bj;-B92b4^y` z;1pMU(mk{jbw~2-GbhTnx{{ik-B~8LPL+Xs-u{mH*}b#n%GE1nwQldOulAK!F0Ga) zpSw~{y>OvidihFCU_LQASrb!VdG*POoPzTBo)XRK2?{_7ivCfCb9ADV7(K_oZ zKyU!{`URghC5bE7%H40jySou6>t|N;#7|JV#yjA&W)R93!~&Hp`on`Z{Q5DD8Ha;# zEX#BE>NuKn4yfLd{y2zFSint}k_=;m;CFMpfrO5Z6@rP$Dw^&EsQ$qP_hvmfk8E^r4!e)0)O~LH!CU0+QP)WXWLKuatlL!bR&k`=HPE<&YbRi{n-=G7JmaQN%4(= zx>udIR~;Izf#>JbE0LAD8d_M~C^yyz$}=x5l;>W(QJ#7JTzTk`=gYSqIb9yA3GA73 ztL2sJedWq(e_5^xYIS|ZPlI+h(%tOZzTJyzyE;ZVI$;<)$%jA!f-xzKqI3U4AAOUc z^o?O#h++aUJkZu&w_`Ws0dWG*p6g3dlOAe7c^+uz6wfxBuzLo z+08L4*-QkH2~B;hRwNSsrkzgpVbiwIrDNoPn?C~nDpCB%kNik? zpU}N4aVDze#j>St_YNJ}TgL0+rT=nWLA~~xed3Mo=ch);$I8g~L|GpiF6VEQ^1{Wn z^4O`X<$)7t%bz}TwtVl^>*d+YD>Xr_mdkb9w^mn4qoW+S=NuG3NVDW>-S!DE%u%8e zLDJ6?2Ym!4MkzCiEI{!T5+gYes7rky{nIaFQ}DrHZJ*R_9vjH41N0G40v2#4NyBVL z2Dr2-k(YC{I60ni-WG>IKFZqCIUe&ki|!m3m(wZ&JQF3D|@#Ke67|W+eio@vC-yj3`|}+S+6IS4YVmY$c6J^!i;GL$j}ZF_b-x%gognxYF2XLg`_OSPds_jG(Fh+kR zDnC1mS^R%#5zjp6ew!kigh%JG@zql1m?StPX8$bI&63 zw4kn)H+WN*YmmNZI^u&r3Lr_Ly)PC>KV!*ataCcj7T;kDM?iK!&sIO#{=-eL(Vr3s zjkd6rz5-WVxcP13(^t_ZLHNUPlNj8R3mr-hwss~p2@^gxLX&*P!k=qE1~!l|=mR~8 z#Hxlrn>g6R`&QnW!;=Ka2gsQB=E5Ic(OG26J92!1Opf%2zT<^@{qoDN)P9e5_t?aX zSC_^oYT`e3xJ*?24b08$oyUC5KV`Kdk*t=MmTQt)E6ZzjE3i>#l9Eu{ASdoFcR?}znyty|KuuQO!)!JP2|QCKns3BfSc);O*}_o)EiUKj zn|^7}7}pB@xF#E$I;vL}o*m(d-SDVS{Fra(1B{~^x+XW@m+a|B9ovS7_+{(o>J+$h zghznW1>5V3rrpPV@42r#PeMn-I0@1{C0jw)CNn&?1rGr+OaJbVl1Y-XisEPPMbQm8 z+#A&fBs7z@ge(c632$U!fA?ek&7Q;)Kftds?q!;c;Ctx72g}RV-d^Roa`{R*d**ES z*1*J;iE_LqDQ}(+?AtpxZ>!d!ue^J&39Qs?<|!RPyWgb(8`e;aERY#Sr6kr@CM(jN zGdsI`QvR6m-1&2LmDFpmuJeYI5{^R6^!BrY6pc87euRl439jg)F4s{?l%D>s+dAi< zy@uadG=mScc+)>)%w}c`MSG{03Ra$@qrHTsjZBur_TY?Xe4wQT63h}cM+6)fEH3u$ z&2d0ZVn)=@A4N-0>fnxELnktTBtmuWA!M}*)EPq;>hu#(IcFb`VAPk)g2j_gNs5!{ zs|`N9n|;x-+~<%W!5H2`+j+Notg9I-GqfdD+fcy=w?2^#1P5MnP6y6`YY_a}+PWN# z$0xm_$0sErZHjRUo)q}C8|NCpt3HLUtZGau>?2VLP(=bKTkIPi6m~Kph=t&Cp8Jlm zg}%n`+_kg2iEWJJLC;o0?8oQWTJq0i3BR%Mk_isic)%0=OGuS+H}SYHYD_-2VluR9 zhnt;J&o|ZE%0(BEiH^KLiw6IpJ7XPP>%+cmuzkAs<=bw8th%yG+cG)c{etn(P_;u9 zt|qCT({wLyR$`D)`1nMf-Kt$9oHqTuq*)KIpZAsRQ`zM)4ZCH>f? zbEwLze$Jy8{Ss8b`0=scA75{)HqS~*z5WuIEr`1K0lIMDvrQPmFQD8@u~O6*&>cBB zurUCQ$Q0gF;B2o!aJBkLopa!t%q9v)Tix&xew`>@d!>)IHJ-BUK#5(JQFBqa&O%E;>6%7oustE&`#1}FUC znQT^n5{?H$+RvTs{hXX+qK>V}ig!A&QuZ`Xy+kYtk}Y}$&Z9#sNKeH5jb6TP;#yLK z$NBBI-%<8fnec?pmCIMlWVOZIuDXh<38+g_)nz*5gM+<0|08u};0YapBp%H7KKEHm z?bkO@|NnZDlIgtG?uPDVnXnd$-KbkU?G!RGKG8AD2^feH2+T1s7RA9I*nAD(105f= zFdU$awr_i#G3_yJXoKKOo50OB2yd+cj7bn$El{c>Sp=M!iEIqWY1*;jL0!&45*25T zBTIaF>z)(9#{oHV_y)n>;tT#1dcrdvBdb1+0DXP*RTtem>K7X5j*g9XGap;#6@=J< z-ULgMd3$4C2|aais?*>7HpxLdT#}zv8a=jS6o4-!*Wu4~+dq5-@ZaiAAJ_P$S278{ zY^@|3IQT5TwtCdxwf@?}b9ix$H+~?{>6Y!XvSLgAua8}Y{^7$p9g@e9e$cU{ijDAQ zL0~ll_#r;ji95x)#elz6bOZm!^*{UR7Z843;e3FcNQgk3e z*&6a)_!Kl0=izvaV$$JIl2r7_k?995@^fUk)x)Vz=sIU7j_YPS{i0)RcfaD96Xp7i-sfZVZ6W-j z3zu=h3(`OSk!$@k2B?QiLgAZqp^iPRhS-tL*ikYNQ~+Ky@efz<8XI2Vkns4nm5>Q0 zwpH|Z9}^8cDEdZM&H)|zG?20ACP`W4=%Ws=XrYa6V$F)&tpPh4JcYj&!aKTbIz7|- zjXhgd`jA+)sbecKpubOByQN_w4IVV27qs|-Cy){<9n%4M$S<++5eb{k)%WgIo#=jd zb8B6-9y%~rhDJuqz@fv3=VeY`&IC(toZnb1D|O&XRe&4bl2rX)wW@9tF78FMZ+CUpw7%K7}KPCTQuTKG(q5vC%hgoRcpBhbCthKmv;MWrk(r zIBxL4rN32_cg5(<(_v%WY_;u$2N**J5L(77V6*%n{XW1bKA>!ZC}5!)UBGTt8{;8 z?2i00gVluQM;H9vo+o`%+qPDtFO}1;^;S>`42mKgU>F4uR9g(?+A#)n4%+@L7^uroXACm_)x z3%+f!`Kj$YzS&S9kPX^kik?o=g&%dL?*s1SU#6;WK)( z(jkXB1@HV8pAv$1nj{f&!4=*V_Q*NVhBw=61+S8m*A7fXlBA>Uo!4r-?<5I|5564y z0kPpXExp5qPdI(Q4Nq26cyv_gn;pm`5udKxVXq*}%xo_Q_U-B(z75=R>n-zFuU+l_ z0(o`CPauufW!A3pzI%_9kG%hAdH+4T%Ds0?mAh}9DtFzoquh1#bh+*5_HyjNblJ6S zq72oXuzaoe7u;@G5!-Ljd5mtBxK`URLWvAdu?(ocqw5$Yf>NIIR*6wYTW4H*o%Y}Z z!Ie7K3Ve>}a~gr?-4aW4OI*&yX|w~^nQ1Mf-COW}#|tk!-(8*dk%7LOk08n2qXytKC5A} z;a8vtY(7g42}Uph$+YwH3UF{NA z;EOLx=6ucyM9G5|PyDj_B3F0=XtjKUw4oo{S^Z`8hAusLpdndmR~MaTJWywnmVm{R zkKR4^{BzwCZ!v?0J|5Ef0;g*eKi{FF*D75;z{d{k+f#Y1yNUw`_s@6Eu(nb5?3yX} z+_|@W@ZP=UzB{MOtp~@--sz1pGr3;2ZP_SWC;G~^@lvLz2Fvc9V`Xm7WSQNywQL{v zv(LNAo|!FWbZE3}3{G^PUa)m!Z1<}OAB9m8<3*?#CCX#4oNEXAXH1lmK2cPwEayFC z^qgF2aXL>Q0cV?HscU&mSy}M`eFY=KaTrO+@zSNo7;h7ivzsXb^5oUu9ZFGa=jUMt3P&;qy#u85(r7=aB8#q$U^{54j;P(hY}iA zC4$w>Sij~2hc@~(bJMx&KpfoI$PjQIU4!6i$G1QRlPHilGP`F|;jhjGrh-#8zqVK|T&ydS*O#ai ziz&)wFbD0xdtAc?`br4_aC+ zM92Iv_ixDIo)f;w!dLO;oP79@Xw3NhR()hP9?qQOLlJ1`z{P*~n2FFW1->Q`=pP90 z@MMdI2Y@dtr#vmSg|eNpYV~vsUV3B`t29Z_xun7l;j5*gF4trt8=UST!3F4q9NNiX zjO)l4T`I1DBi)$1^(S|35AY9q$3H#n+qbuCx0+V(g-)Lk_9uFiTm5X;kJ4wj?-X@Txuz zre6vO4*~rnYxo5@H_o|n`r*wHsG~3PstcW*Yj5#He<1XX4SvVaOI;v+IjjI+JBc|n zw{~qDTynA+O_D-a3BJf1J4pn#*|si@$hY+@}k{8?92DUM!gjYZo_&pTz6$A;-!y|=F$Sqza8oaOzFdm-xn(J2A z>TM4tH~iww_D>w)@1A?!(Y+P#O?N9e{JMAj(u*g{g-T=V*2$VH_Lq^-s;irCJ~n^H z&3nsF|LE~Dv!y!wS|v8TtBlUnSz~x;VPj$7@#PCk_n&+2wI@$JbYk(P=gw@o^3qGg zYuCN&Q3W0xsL5)jtPjJpVCrA~i9U$$>_VY|n{jivkOKaeqIdfR2eWCdlbrw-^J{CLTD=h3gW z&HM(pK4}NW<3~Su@yBM8tG;-2RMbgQfKByfcN3JAv}8dKS&fChb96G%r7d(@-t>bz zZR+@8^p!q%r5DMRZmqPkwX?c%go7{oERr_;>C^jmaD&ix9bGz_XuWJ{vZW8QkxQbY z1IbI=iW4{0@zcr$T*DuGi4Qu<_D!PWALN5m^5RSA zd&}gOx`O+mk9=_c2j73J+;X5QWurRMmP2J=WV|e%`fhph_dfq0zV+pY{`R~7&j0)` z{`qhI@o!#v^}@gW#`j+RpB{MX>_2(xxy%2{l?%%YlOuzNwrtxn*0x(n*qXj4p$#Ju1S3ELHKyp@uD}@QEiUxJZ+MX?tZ4W;yv8JX zpk*awA{Mh=A0T(+!<+Ni!g=T^5*2;n)nw$=1I46-Z}@BtwLkjk_sWyCZsDpQ^xaYR z&F-p3s<{8=U;oJb2j4kc#`|v6t=*Bjt(z(fr=BWLeD+fdU-;vv|JwiMx4-v%N4>)1 zuU+1F>eb6@kDgjsx&OrFg^~5Xul8^BotfJ^{gI);wc(*L`|R#O%g#7>v@@ zaX5Y2G0xTNBhkQ*Hiv;9$nNSH1%Ae|Qjk>LdtzYAV+M3Di*eBj4egE~b#V?y?Ep>Z zoBO9d=LraqzT`mDb#S|Oo@)?#(Lvf=gWyZa_|yYOdH@o#k|d?C8Pb-XzLKPZ%dzDd zI8Om@MGu5$&>r;#n*#-;J^g`mCHT@Fe{xO7EuJKh;73ca@)avKk;nhl-Tr#BPIT#kV&j~IaHh(Lm%Qs zUo@JiH_Qz1CPIYbz`i5 z_{jsalkeFvGj!9?*hG=2hDRpK$wwb6mo~=A!DF}7J?Aaexre%!x4e5H`wMac*rQ4m zjEzakmOLoTUe&(aQxz*N34!1of}>EdYlf95^wVF`u}_y!+yj$b^kvwLGfN04^wEJE zAL{i{;AR|&%5v3yAI>B$csKCc6f=?S~bQDMel%oQAiqlJAbjm4{qyRj@1<=nJI9r}tK7e|Vwzq0e zK_l&(`?mO z(bu`czpX;VNA#YtfKBis5%7Hzztz2ZuO;wH0GDy`7c}6Ogxr3SnAlUD1wrugZxaw1 z{en{xB^*ktPY~T{Ba3#j@f&)9Q!F~dg+AVTpUpm3Zd_k1+h?|yLkIShK~MMo-Y)~B!FP|J_RLEur`X2aQwZGm%$umdCA0$H_D4a zD1dMhg+E^OjUD@E{gT`iujQk~nanyI$+jf@B_4(~#?5hf1({id!~M_?{ZPlJag>S& zV;GSfcyJGZF=99nhX&4LFwmX@=WWp*JkFJzr;m1y!6|aB=+inPaP2&}^ar7lV+(OS zaz<81j%<8rhc~*SKQk^nW>w7T=_vTZW6nYFxptnCwt)6_49IoHr=Y1%KQ6-iY5xaVX-CXYpeQZaY3@ONV*WD5;+Tt}C!E!F4Rd9D@hWOCGQ zyd!=kL9(4b{aRVLcD>B(oGC~4?=9Q`TWZMiI7t+U7aO5HM!lml~hMOD_y)k}iC_r4GZmr*f}Sxz0{w5xNMU-Ixc zl=7^&yrAX{ScbPk@|$CR(ua^{3^)BGG^-(sw5>G8EaKeC&7RjRgoc$B8j=~F@`5HO z;85Cr_=kVEe{hrOL7Wc6z7uU3oo4P5){1pqaC@Oqrp$o*7`>1 zZ1&&qug*8=e8$}01$R8v>(zR_QIqAsfB6d^n4g*)EBzBUm!ah=<%Ms5>*RMIdG4Qo z{ng$Q@h<{XTPBuoKRWgIcg>8JiEY!RZ)khD{^IlHq317`(d~Q6fx1fBSu>-6=ftwS zcVldye5wJH5{hKup3+A@`q3^~*tbeBR#*z5EDf!+WL~q2#Nm-9T$F0HHvy}M)s;5VxDK3jU=W|3>V{V z26g(q6=;hCwPRDCHlQx0HTvd0AiU&SA9hG0N55wuJHnLoiTy-y5%J_=y`div4^hx1(1t8J5bLC?hA>MCGd=vp<| zri(50WPr~b;ja0)4=su-HVxk?Zv|+=A4uO;e~zx*O7RsHFMXds=lXE;{k)sI9REdQ0BsR&z zeIwgL?GlhAA=}%F>qB@7w!M>R;BeDXqTw9+NK&3=fH(}C`a4QSoEdI37{)kTMEskf zzVL-FbcxL#8;*9hkz>F$qoqDh^XC~j22KC=nqh(SKd&EX>p-qEUVWTJTlmX$`UhG^ zPkZ_pqi}Y1wPHw;Vhg%V;05Rls0&ZwC;eI;a;{JM2ebuG+EUjhCD$z<`sTXDk@mL# z|Nr>brqPAtn@=nGuD<-p?En*~BxN$>j}nM;6C6KPBnZ%>(bGGgBsvqXB;{JYK6Gw7 zrg%f$mrKygeKP&RXOG98+|DCQ+VR}IX7TKE<%N?kbo3-fyBH6i56<&tJ#;7lLE^_6)q|?p^<2-|V(BKDDzZsmXHjsmIC#&n=Y6*+b=MUFFQp?deuM z5=|c4OHd4DdCUkvlCrwOyw#HaR$UT@B*O3#gK?JDjA7wyhYoftGeN@< zjFW`iD3_=xNixHWG0v^v;NlFPJXlEq_^j6OF8Hj@BvnC(*BC5D2&63~ZH%O}ePg(^ zwfzCZzZoQd*64xYZ0V_s)3oi*1+lg`ow~Pz;A)FH`~XL~H!ISMK*{!|T^$$$T7JS) zjzB+sKzP!I-}KWb_yR4?=rZ*RUie|lcWAX^or5>8-^8a$G75j7#|Itt#*p2SPWY|+ zbbN|#Br4l72|yA2+O5DOmTc41>1zjIB6m9iUNJxqCQg3Y{W;6Ao4U!|ci{LrT#oui zPm!;cEqZ_#t*4*r{UE{(32Xc^kEzub7`xsij{PyVYvdge;+V?KWYc>g<& z{^0k$Yxm#WwR2k;nVc>geIwN<;v$%R6+mlpsGZ!ApFxyKwpr@GL zV`TUpB|U~Qdq{$CNtStAp7FJj#q7gyaUAD8M|d-^T?h0@>GkWi>q~w`9f$*DJe?TF zv6PHWyKD9OWTm1lj+pk;DeQnw0}-MucqM)H@C9d!FE~=? z7;xR{Nlb+&uh zfUEcA+TM+9I*>g04d0ATwDC#4mqc{w;-xMT@oR}9I}9rsK5q=Z*v!Q0iQN0%_rC7o z&pq$Fr<-_9%6Qziy097Y$)~^Z!*|agn42t1*Dscl>08Q3 zxiP$O`s9V*_{Pbvbr}8=@K@e(eD3{s%>Ju8ZrwJwr6#DMksW1yxs>nz@i)rTSL^cs zj=Re3civW&(_g;$#V?lM|NTGgk_f|PHN{v8hoUe^%9j)*HO68f$;lp@!4yf0At>F) z+9$V8cKk59Whw;^3=X`pa+8cC97=cXra48r4`#No%(Z><9*BaLKw}u&ImYB@5**$+ zmZZjU^npuZxEL=ES@Z@wfLAPa*k>eCk7AO?0F!|U%lG}UE%+8wpE zRcw zF1f&|E;J&WI{M~gfPe8xalsFhY$Xhn?k7I+i7rX)-?zVeDVmP8@$L91+4+5FL|3kz z13FXaLhP^`J<+?Ji6`S8QlXVyN$)48dcNkU#0GFHt$lz#@P-%Xv8UY=dh&vWM9ukS z+xBhcK$UH5bfOG=?ESaSAKEur8*WrZS7Ep9An>u{i!Xoc^2Hl3zjUpqoVSAa+;(L4 z-FF`R^hZB-+daFs)z!q7*_s%(mW5YdEnoV=L*@L?Oga9xx0PFNJzfKOsC@Ukk94zx z;HC@?V|C)55+%hbgx8j>UY4|8Cm@*d3c(5J$=(lq{||J(GVE0aHvtv*k0cNY$NO25 z9iuTg!`R~W=FMu^u2!R?KT`wY`4^t8`}ULN%H@SJ zP#t)vDtoA}2BhC192hF2Ro?Nz;W9BiTE=P_@t5C2!)0=GTNxT0uZAA4JWQ6UYK-l* z4CK4<6zc`Hnqc$6!CraO;4P?2lB5sL(K<%j9n%&^b!{AQbe%rA261ZmfbmMkw>a1? z&TEY1&H-C|>XjB!rvztv9a;cwkZZu65`kbv+iKV(2KWs5)C;d*(6ahBFR|^ z+8*(FGJ80bm6r!e`idJ#il3W=@z54J4X_nG(U&LZy>E{9zC$iCd9^3+5lT|V4-NPJ z_&SLdj`&1to7O&o*p%MVe)#ag4zGoXL|Gdv|I_8b-aTc@M2(gA-gR{T;9T7|Z>`2% zstOq$E8|mJr?yTGe|Y7}^62Qu;KL_QU;Z%k#zJE6bwj-R$Oj!OOD1cJcFPQpMGYb-o2=v zV;F-Mzu4j>RLfBb>vT}ssdCGa?d7KZTg$Nn+sn~?+iKlp zId-s~@88y4AFUI?(Y@QtkpqXy?!7e`?mt=%)dYRysNd?F>t?N8b!EvJB;LJq`^wn3 zpC0Gny&nRN1H{=FnZYFy=N!f{Nkt!!>$E8#{effKzlDs?IX;3vW76K@3@!cDr+h`9mwJJ~j zM>qUWVzZ_Z-`{d)Jmv9zV4E@85mbkweFC-&;o4PnG4q*)qCiPkHspm&zA@`-|nX zCzi^!n($_7;y8FsD$R|5iBG5mDN}3>ae$ZTP@>N zuBpk9a&XT?xoO|la%At8vTMh186K<#U?f|BDnp%?%SP?r+ve5PMBijt9oSbc4je3N z!&}PWP+jHpnT=}Vyl&RF@^D{jr0U2ofxOhM0?F)Y3;ys;KXJ4qZ*oOG*FgWyDXN|n zV}NtO4x9=eZN`J(Q|G8X<8$r^f5x~5aAr(E|L7mUuU)@@Yek>%1VXdzpFq$6l0a?0 zS0a+w-G4mw@~JLp1S+2~alP}MRsuJb=^C`&!>Jl7OEu|VID4gBSy-yf)U9Z>&Fbo6 zUGdbpc;QKe;c4)l(!q2{|ZeyxqYoemGq4Bzhp59e9Rz|8pDub__D(6o=U6yYw z)){|m*|u}GjBlH%23Ri(uf0&l552owd*yVw|BwE(eCiLLF3%5aE!Qiq{IW5H$GI@- zoFJ6pnsDkc>sryym~mYv*jhSjJ#9$qygu{9vcA zIH-H|)mO^GwT0@m19kg0QhwmR{pEdkO_am4bz4_w)r}3aRpqG%R< z14&Z)$I;0~hBjd+XhpVMw+X{|V0^9>WAsB)y=!A!rw*tK4(A|k!RH89?4wR!I2Cm{ z*Vnc7l=KJixCbSmO(5<=8Y2;S#l(*QSOt5$-SJuft*zI@WD=>+{oGnzDO>gU^zBW?6^R3s)H^2RK zIdST2xjtC8kJTnCYm1c{8iO5uv?8zV*s-I>%7x1pyPd&OT`g(j$MnLlB?d>flC*yL zmw&mF%TsWxqaXkAAMg5q<};t^9z11owhH>mpZv*g)n$eCYrpnuZ|L1IJkX(YdUng@ z@BO{M*Bwpj5|7=CF(!YvP$VqxN_j!mxvii@hQ8SWu}6F>G|7`|{JBmY`g~B5GWO}G z>x5kK)tz*?_0HSNJKug&wM*6A-nqT=moL}t#FZQ6@cyZ?WwLHDs&-edT`wz_Yvx=y zUHVoplr1AmWyj2DT^esI6I;j2;OJzvz;L%(nAkB_R?nX;-}=G><%{1sS)QuKyHNwR znz9R`p&Ha-F3e++f^y8c65$l*gvpqUPd&ji&UI#omX0HEOg%^-sOtr^;OZq(4&vT` z8R?m4p00`NYVEgCwr?FPAAA4d@{#+tm$_ZlAl3Pn&8}Y|ob%vRM0FJ6-Kp>-8aft=_1?vAU#x-R7)bEmK=p%1w71FFWd% z^ZLcB<yE+?c~rlX4C{ZAAYD~Y@A$u76N(oX{gji{5k2JoSrS#wvoe%)ZE1a} zQ-7;5$NZ^`LvHP$E<}dD7WwHWv9NkCH=ou?v_$hTe9(3Krmi+80JWR4;^U^iG z(6?H3?k2yn!4+HOnEKcg;3M`va^zTzH@~pt{jOK4JvPd&J-cdrO_$N(y49?+&^#lY zy-@e@m7(!EQBQ64+k3v3)N}H+m0H~3tNm)!l=Z=}GCVO=M#t)`v0Q~Y@lyH9AAGNT z<&o3n=}UDrQu*?TcDOF3yZvXKc>*n?Am;>%0tx0EXzzHaCFcKYgfu*4IH!R^}5x&c5SI!HTfj*mdw=P972rybx= zeIWb>PfG9whwGe!&^L>B+q}Bs5JYBob?&K1QdS-Mx)14r$&*!Yj<43$e)lI*RmXgD zVq&aY>34iqy!~#B_m5NttDTlkSAteV_^v$Rp>9Q#zW%y1=&KXK%3|HV)X8h-Oc@`U zD3@M3T~1%Cb;ETcsxcrAtfK1h&QGfLE3Mw-DlrLkGLVl95(;STpszmeTk->Aw$@dC zwqjP2ZggAqxP9T8ekCahr`4fzN7ukL{CO8kk(lUGTb`DycP|)U=%S;KpG8N9p8&X1 zS{Xt=^5M_5apKI)_=}a+nVRq@Yv=BrWv(Ww?pLSoyz9>SGEirmI`-`OtL6Ga&FFQe z8LCL_9f#|RVz74X_e5%BvJ7}6SeLYGb=!CD)amlX!!MMtfAjhBjmOTF=WBwxT=A?> zN?k=Dj1k617`Sdrm~S0%v%rLnas&FO1kyLqj&H{XQun4Z;gSe_V|lW33P0C%>ZMa< zq-ONnZkj6}eCM8W%fafXm7j{Wj**0Gf?&fw4L%)a_qQa^1vG$9N*-$1yIPJKyQg&w@#u0?jPfI$yLQcR#B~qZU43BJQg*_-frntoxEfU3JvN zG%#5Gt;ULbCZ68)_j}4^<-SzLw|NnGOIf{oqda@!mEM-GPJR+q@7073dzHPXPsL<| zu2s9DPU3PTe~Kg`aY#tymK^jk)&n1YK^OeBOL|ovaz9;n0Jes~2NFjnG4-zLldf!; z9RZ(m`-GnGDS=t`xWVRr z?R99h`rnKr?RabX1LU)vp%cMtTOv?>G2@Oq?(BkSz4oyM?DSKEN#89s$mzHDcVcz> zSMBOGf|;2ebwaHZPo?2ifXYUD z(0f&Apu4?szRI+<;7^X2r**UI@k;APoG~dudP*MRK}L->~95C%~csC zXm6(MW{$eN#cvd$J|z%kwa^BiW3KgsCv8!D`m{9Eg^u%#QAbIR!RIK@M?SUoR48G^*yojRFbhhF#Cz-kDFa%<2?rIMYGCJxt8Py4-+QkZ}Z{%tzKUn^*3&NV z)tQ7OTXIE5>B~3q>c+YIOxc=w?V$Z5dTk!GeDBfkbvLy6F&)Aeh)y>{_bNyAG55F7 zqc@3P@kjjHYzwVefo-1E7hU7gebCr2`0)>1NB+>)*U`4!?{rF1XHLIXZY*4{Noua_ zo7>slQX1H`W5>MNMd=r`wbZ>!O**UPwR2a?Gp8<>$6vf$o_PL3dF;7!<qAaQs}O-?#?MxW4h1N^`nqGK(oLXl&Mq&lcH3+>)Vupa+o$SkYPwDm zCXE_ALlu7|@705WmDftYBvrTa{WaN`e5(;^qlp3Dn#}4!-!5ZS-llH8y^OA(E3ck> zt-So&wX)dPvror+Cj%X*AyZF3c(p2&Ad*<31LtgPymLHTy-3uq=^^!2Qh5h4^&q-a z;H5)29r=`Pqo-_&Keh4wG;f=G4Je6A5>?0NBu6*xvlXOgehJ6};0CQNf%eeVcI3#R z8W&blSIUKRy+1IX^N!ZcWF1`lUabTYm+JQB^x{fA zZj{S))pVl@@0X6(7^*JShU%)o4*~XG)WQm7L^(ZXowtb#xCRlV6|5};OCJD7lmXHQ zFbo5dM}7LHsEcvix~^|^oX)2!sQ>>p_a|_cXUAP98aMOqx$l{kSyfqESM}bl?p8~d zWVKc=lCTZJ%K-M+3@~7LAM-I_uxuG2+u#R`JVCxWrlM)V-2B8Y~n z6U9m?`EFzysyh+uLx+-j?}DtRd?_^|JN?AW^vWniCe9n|7a=cYNR;X05Yb2 z`Qm`^k36F+!l8Q_4yU^E%N$$^Q+v68O6zwFQ4TZ_U$K<0HWD_`ieD!&40PSup`! z!d?BLaKzjE$%-x&Ggi)LO#eJj034mB{By7555TVs*`nhKS_TBKQZH~~h{Sb6-~7$r z>_=p9Jiq5X@A3H}ln!a4EdZxw*O3R#q=<=J|Gnvy@K1hHn}6Rbe3s2tPnJl-8ZxSbi95jC9kw;wNF#Kic7_^PH z2;doi96XM4Vyg?57%PJ8y<*cQ7XYyBg*st5afu%rO7X+;qfVrU-o5puym-d}{D$m@ zf3IA-Ur$(ne@^sLJ4jppT_Q$>!}TH+nMUEaYQrd~7a~1j5x4jG*7&_;kro&4#0PrQ z@QjPF0OE&#IDq_m^8$L`opI!{-Q{BLzM7nvuwuFBU#}?lw{3Q~V{?B&XS+gK=h*9mnS#}1f7DG zK!m^EdoS(ak$8`|0g)dxkNi`6rug#lRWGj>&cmr8{1RoN*qDrkStazu@igF&_JZiHo|l=U&dKMMs8yn;8rsWMZB>8a)|XRfEz2xhv{s{I*IqhnPd<0u&aF1AsUg0{ z>9PsQGW-27v$)1_UAi&p5)V7{9ls2_lCBU?yDnQ7Pg@BgH$wZ*R^?FTS&VQkh~2W44CS!=Xmke1b}b+;P&bJWS~%GK+( zCMLjyzP@zb@5i3k#t=^Suomoh!=um0Mv+NVGJs2GS|%)}dG375Nih#v9!6!ZQ_2dZi$RFeW}Xf|1ZG`B5DtD%j8E9eaJv4M{bnd6 zHgc}5t=g3-iU)ennMJe5iKqJGgFrwTqT%ZmF%=7nMd9 ztn_h2#wX7C#nQ?TsXYg+wY_ey{ra!jV~?%blNTzsTvZtI0=|xGqDe1Zcm{fDhJS>m zVQiX@LJ6T%v6!#~nKWlL55)xkum=nU#R?}%7^{eMLp(Mh9h0X*Z=+uP)9mFh|d)mV;Yk$FJHAvl|4^VIi`-g26PLhO9wU;cFE*` zU(gM39J=it?>OFXr8O>|38#$kkMer+@Mr$yO$c##QVwp2!ZEpg$wnq-ZFYXqre+ts zgUCoZWcsBz^micobEXl+Jv1^zE*c_NtWj&(el^{0IX=ezsTm)xGZ$5<>`CbOoYEC3 zscW_;#l?;#@4!Y@3^jPfB z7eCTaPvTHd3{The*aF5I) zlXwn=L3qT8XMn<@(){ucM0$R42r=^t%$*SDhJQDHl*@0Vi|2qy6AtLjE9wN?`W*3r zc#pbAdH{>aduzo>6RGB#%C>j5tX6NziLgzX)&qH)IV6QpkkutYBb{oje3XaJGcXaZ z25nTVuP|!)(vW3x0~+$F*O5}GsAp%gydj#@C3I{IoSfuy?a5+dPYNq3>_wrMSBCc5 zYv=5SA&x&j-pQVi=atr9>oTg+j&(`Hl?~q`*qDva;-Eu8Aqcm`+kv zv`Z3jhuHvV612lVXa$`JgQ4)lMf>zV2Q4EV(3^)B+x1UvM_y^@Rw@tM%;E_L>GSqmzxtd#wcBs|Qfddn9cwTzrP}528_vn0a8|W$&_@vT1;USTWD%hbCB@Eq zlm?a#@!=IZI;^QUvcfY%Gz4|Y`)x~$Aq;OFoTolZ2ga?E+#sR%)BQ9|w9u-VZ zLZbZ06L)JK;dd)UU4Y)_AY7ycB0cZDaq;izPaUbF0=tSVVl8jfZ9 zxEX=8ECKVW=>flZKJDvK&n^MOyyi;RC!cu2UOD@UPaq>yC@AJnN>Wgzfl(dfYe64r-W}m49B!cBmu^rLSV;Lc@lNW@AIbYpN*Pwx#IR zyKC6Y89bjGR2i%ivaNukxOD@8hK>v!2M5y1)RcDu(>{z~-xQ}JZYoclhDHZ_maV;P zwtv=4L%j^EeBh+I`XUK2!A-;cd}&Z|`tAHPm+f=E^Rj*Zl`Y#YszV|U_^EBdlk>1n zQ!hpIPf0r2A)!3G~DxS1HoQew^tYYe3umJahv_%V0HnY&O@gn1ph z`2o=e5gv8vwR8ad0Nx`GF4~v${Nez@h)XySLRMk#R5Z9`Wgkaiocg#c$-N1hOuYcD*$(;si4B+)K2GA9?k@NBpSI z>k+FLA|7ySTp*U8v5x4;oAriGPR}SKlOdl+I9467h>yjH zC9NTx`bq1{BUH+>wQrr~p2D!c@?z401}kD-DGe7iC1KK?;TcwET}tKRg^Tv=Gtb%+ z8saf$z(r|nMszx>cg`0FZD3?Vru~484rOe5T$bOc*-*Y|1Nn@ssD25(oGhwRmMd$e zs2b|QgbO%Aw_e&g{#|+m{Q=_ejEi(YyocjGh5)^3-!=q<{BdS<}JM~ePEwpz7mby>E`u$ymRnjqJZxgpD! z+a%mdb1SN>4yWW3?1@joLkdAj*$vJK0fx~1or)DYOO~s@>>D|0yME4(u@!_NpN7$W ztm3KtI#yO44(#G{m+a9`owd(CziL<7vPxAZZRl;q9G38>U16ddw4%ZtJyUPJ`>O~7 z4%Dv~g8sA#&rAhiZL@Kc`Ad{9b8Cb#%;TNTjg`3=?)B2YH~&P7?v|Nu{x{2ud8?c0 z2}}6gRB}LAT>%mIR*3QlCk^>yN%8JVip37mWlAH6qYG0~;-Y^jsVEfSy|-}Q$(UbU zREA&PVFZYS_U1kE;x{TEX#>drRwN?dK%zHY-OYRPx@Q|L*+ClBEj}ms6i_XOxT2&b#l0AvttJ~J>0OY1nctI*QDT3=I-;}=JmhpRZ|?ihN~!%s|3 z`DJt`jvThF73$lzk-@qZTFbU{_UX;v{H@3T)w3^L{;My(di5vIUs-u{Z?86c+v$a) z69YNFHfVbnYfAM|aXIFQ^uU6`<;z#>!iDqBlcO5`m1UjQHH>I9ILy75hTOG1vleZ) zYmLgbb!uCp-;x!YuUTJvUtz*GD=RoZqTj*P>GTh)E%H{cv~2bArhVzRp0{8B?F;tU z<%(T9=vR_NQ|Lo`rj=Ld*QJlQZ}6e$g9vo#1N71tz`s`>ux^;UWal|6aL|x_O$a(x z7L(@q5zaOOj>Yum#dFLNhd=ETa{iU=mJ~|zOZAKJUcfKv$20l%${r5DKOBCP$#cv} zAqyK)QYi1)`9m7Q&MRCp@$kbBcc=)FNkqn}f~jDLLRiG%orXs-MZ9>Y7sK@;?21Ew zO#A{2qwr@ePESKPc?Kc?WdVUGMeJXrBLB+Xv-?Ff6eBr}_hoAkWQHk5N28_sieu<}%$lu&t!v7}fsS>dI8`}9nY zjTN)2Ubxm*w5A$^h;9qXZOGG{PmyTuT*}vVRn6Jc;wW*cb@pr2fpcnKh<7Y zv(G<$$zERCw~7P~rUp;i4m_bR5cmgupk1^PVc`%4fVhO=0OIpZdLY81{h0XnA+;<> zO#KJn@PJK>joQlEj`g#mwtL<#zVw3q#;2bDrOSKv->>Xc{d?`hLnUR^cl7o%Cw}w2 zZ$5pZwpYo#@YGx%*7RJHAYP{KRo@$AWm3eSzoCzh-OK zF4^EgL-r8EU@2`i>42=Y!Cb@Y`y53Q{|O~l^HBD}!vDDHWox@`SJo@GT#<#Xkh<`y zD?WxDhtaXp==i|h6_N5u^u-@+po{1Pza(98gNC$6uMCg}ydH8Dvd8d_L&fZm;w#&< zC-YEDp0gUqsvMKv$PV#oGh}smNQzc}`+NJoFVC?OqLj`2C~;HUQ(IL}og>?4Xm8@& z+ToKg@uRNPz4x6s0MDTup#{2vFs{`BCl1g1lt!atcRz5yz4a{*ra8NZ9(qW_p{pF-Jc}r-THtu4F#lmqm-WdbL#^2ZE38fQawHpgn~Fc10G-D#Uc9=T$R{{gg|^vnO6zv(>tWfKs~P ziKD)h%LYVn#4qU0JI_Hs-f_?dTH%0{o}J!lg(}hzmpJeeb82a_m=&U|-FN>R><#zb zZzZMK-d(l6{Y$of@dbPOsTZ#P&Xbqka%Hb`(KG9Tk&&VIf9reS{O=}*3L{sRHtdz9 zy5)*_32EMsx1>9oTCyUp`Ar8{7o#JiQZzXmA0Kn8pRb}UYp5i`S|8V~Fi)s@X2rN! zp~I>n{9aI=;NTXu1l-%W-O(_!ZPmts)kI|(-(6l5uB6GQ&5eOS3_*K_kO%((Ob-wq zG$eknk_wvov%*{&oSsRsFmH(>K78be^Z4%0o}c%`Dyc{rGoMx}58U8?_=vKyLXrt; zELs)e<@hQ!+(_N14)YcY>+_*`+5pQjF0Qso)eU)qcM`9Vx66*geGw@|Q8pC9s$sG& zLrIb5{qK7pOl9ZJy=Jdz6i}};?7_D@Z1>%JT2+uPVG9Bk1cI5+{N5AjolIyP&PUgbf6UYxYsj&cY1h@Cz;X~*ZsZGLLl zCP&LQK3KA{2qv`sQu>$}?p^iphE^5vcf$147h+H9_K;pyJ;WfLY`^?)YEUvvC^(}v8+A9~mseM8 zS=JEN6N(U~pcCLD5YEg(c5r0cZaZ_@CdY?VNL4;f8!9zz{laB?;pL^@cy+n*;}@5f z6IXX(YiF<7YW7dvetQ1xjlGJ7nHrMT)nj+B(!s@!>>Em7cm>Y9-wOCa+lZUe-t0Yl z(?qy4sz9OoPZp{=J1!NRmuZhh(QIs6e|^)|q+DJ-zx46TTlIfc;YPt*;lM5`&7Yf| z7@36p*H(Ac-Y63Zkm!q&;0l(iEDd(?<950m1=(xHRs%N9`aY^gOT%9YtJFM976B_7z)N^ z6~-^wQtyP~;Nt`c4Q3?DiJF4QloZa9*%3Q)V%qM%bI$I+ecJ9jGh_GZ`QF=S?e5zq z?2Z$IcE_nHJ9B)}PArbw@grllxG-TeV`UpH=d37sMuf8Gl7@nMwemKrSy zEGt~R6cci4UU#sV*Y6l&jZ|bX`YD z)P~0L$yt9-zrJ&tcN(i(9woA{;7m&vdSV+Xl0H zcIA~z_Uh%$|NPYXYri4S-vyaYwz0T4^L_nFv$yA=6b$3^;u`ehJ%Hz4 z7x6=hhhNI`CO{g>NDR!dsNmZHSZ(v;K=q2{+p+|ttS??&`!~;C-T9nHyafh|<%46# z=l}ensi9dm&R$;G(U6SEYIgKDMc-sCFtxzqhhF?0piT^VSeU3)G~A%hs#kw^J`167 z>sF1H=8sU+$tI?~un-boIx^mNPK4jT4>p#Hyt#>ZKxeII>g@iC zm2hd<=`&}Xo*V01zM+$N3$hF+CWcem!-o(5E=vj`Ab5prI>+WyHnQDBVTu$z5A^v?d@+_w1@7Ww^NIQwlG_;sj-ZW40cQ-B`Kl0-~1_q%PfXhFcO0@aC&z7Ze#9n*G>jBMVIcqVMpwL>E%g8(MWf)ue|itWAdb%ifs5k! zVPBXEqA7BWg@IccgI~ge(FiA>h~FCqV5$<1rGvss<)?hTeDWoK^R%YXrgBreQ+Mjt`+h4efS^Y_1CDq1H)tE~ zMp!p5@F7`Nip4K$o1E~Kx{efRF|%jYy)9c>+5Gg&*S0_732%X+q0#BP?p*l(!EAGE zZF$|6ccheL2`E?PE9E4{-)FIb{!2qdnz4ZNgxhK#f? z?MRa|H{}x@2SaLxk@JISak zBa()!@EX@%iibyyb85xeJ}<92d!!WO26Yxvo6&1uo#DcSI@C za4ZFaA0fdJGf(iJ=MOe@xz=_-a#RVgWKXLIREq*CIA$pe_ zD_6G!0qTo`ft0|*s0~$$;Z~GSPwv(r5%6OULawPs9iN`Fk)e|Be`0)ZoX7(R8sXxZFrIIw342qz#hDP-oD}MZ?kv4^OU{m>yF!8sc>LJBN{0k8nnZb&Et0-wZ&tH?a=hJjfkGb*1nZ8Rn=cgv%{6i@Tio!H+P~3 zodA0W@yuxGN&C2EJvuR~`qpaCqM4=Vv{=5BGu?L1>U3;f|g02|uQ> z!6ck|CeA38i#dDKeMjxRUw_ix_Mj>~pYzFEKFyTj)5X%1Qrr4r=AH(TQxAC{Qxg+W z>d8qg$(277iD;FC0F@S+vbdTyGsk!C=WKd>)Ur}&yRr_PDLg4Xe%iW^B1-MXf2l#! zb837bn55SM2^d^{@o6g^L z&*EQL9O`@PWeN4_u7(tBV-RDIHt+$QsZ>@71@Ck&y|i*11;hb*(*uMTY^+IlsgD{c*x2Rc&|;|oWR9sQwqzU|E4 zndqtD90ROnOr%<;kQh6Xda3G!zYO!KPWPb0&ek696A2^WI;|3ZU*cUEme% zOBtlSX(0u@qV2;4{yb9$Am|Z}cW4;?5uaZm@&S?`b;JcPYUowS+vHTbK6qQk#Om^r z6qJ;`_@p3NnjbCMTkbz>?|AD8SxfU8xeVLb7*_+sW1MK-zQBi#Z)xd}I6 zpt8ghQZ!NxvSg*SB%kv~WW*ervGJ1V-I1jx3#+a8e8-}$|AIDD6g-$TXEX$V`{cXY zgb@Rl6k+tOo3flpcW8db78d5jAElf7qyPv8(=Z3cz99CJa7h?2aH#;H;A>R_8NVocc%MB!m-!`gO%61;#M~DKJnb%n75osqEBJXoDll$T23^kzw1AQthd3P@Nx)gFA$FZ z4dV6yOc4wP@Z398!r_;m6<`1HVM9OMt2j3%4_Wq9{i!E@G#KU4NPh94ghwe{K{4S8 zP!;?LqgV1B=~*dD4F`8b6YJ+5dd2H&^|xD%4V0PvwTzmN)F; za@96!%2RY<2;mdN(9soqY72%&N!d_7b%#e1-SMLie*KDv-)vtX>JRYi@3e!Sd8h8+ z9^nxeh_r+Uy@EdipkHr!K*S|)fbj4mCBD2fOf8p^tn%qK_+oW=*{Zuc)-NMra=2i3 zotUtosCV7+2rh$jSdf4sbB5h=Kg+lY;IL0T|nLGgu#V;!6WcSp5wz2JKHEJF1>5` zdDZFZaZl&Ny&&981*LJDGUM|~jNzH2TR1dfZ+-ZT*@ zzF#d`_GMzYGJW~VQ-0u+(@xlQR69V#!!^&jGFB6j? zv;cXNAHO(;%M2O7o-wuyjq0Z+6Z&EjWsi~qD3?y5JitL(scbc}uTD~5uSOR~aHAL1 zd%NDSifFO3x3B(B!x%!OxbnG7vD37>gx#Obl?H!ER@C1(a%k+`g=T&9<%`?4+Y~;k zdkpo!^Y^nf!G-sr1K@2a2>L~O;sgY}fQTRTM{&?bgg2#VVN@&v_9E?98@9Vsw|ccH zOR>LyVq$1|YHav{!-po`ws>gtj;W#S(8ltby|%Px%XX*4xw{XGhAkni}8uGS^bdIyqrcQ`9O+16Z0Es+_PJvtC8|B7t#Ni$K@g6ST zBM%_LfXEa2k{;zq5OZbl!jy)}9RFeXy1u$%wcUL`06#ZTw)^jxv3D>({18_XYdFjh z+UG~rRw^$YK*u;pGKkzNBUM}lP>%n#y-aa1mC>(ggN$QLAiLt`oJLk-lFiAPc^l;j zS*C6M8bzVgxK11y70FXteuMzH1bx6QUDaa#u?&${KJ++bTwRaG2SQix@^Hwl_jCGDj1kNe?+~mP2*U;QAplHJvcs47?DIgtA`h54 z`O)fX zY$oA-@>g;8_qiaCD{wi-){yds+45EzP_I@J!^j~Bd;#dPhDQ4bT z(NJ$3z;6f$^#_6u5ijDzbHoWp7|=^+>cVf#`#?{^SSj9g2c~lzLXa8I|jupIc0+ z<0<6JcH-`PtgInstI;q%5UMQPK<79OcTAyBp%IYqqT{2TZ}Lmv%r6i)$9pK6fS^k+ z{h$wdgg?*m9{DS_#~qU)!FL7W!Hu<5t5^0cqmJw7?6AG_?YG&x-gV4QoE%iSjC8u4 zv=lK`B=iW2-O1E7E>OWLQNFOM+6cN)o+~cLTCXxlB)6P9_3cO~tm>{6hDtVZnS=5#l(5C1*|Ouu=IsOTIAQO2aLPssP4#elUQykuSdSWRr<;Q%MS|v4{ zH%wx>+U~jysE#x9Q&twiwk|K(wup#D>P)Y=^u#Cwx1?y4XjnZ*Z|`-KKhMDg5r<#G zf`Nb-(!r!ynyjFpq}UzH`6yOFJzsIP@ADFq^P5(IlmSW<I+RVzZg8reQDN=A$E!6)gc1+ra3`4`yMg+|n?bd#PBMsO;AK zTp^$O=BP+TZP#cX_)(CWe*5!$=ppMCOFBdeyt@%)wESvR!ch#yDp`*)#x+s({%aahJixa z_=FQDcxhu7XfF??)AV7HztIkQZmWY})jF@b@J34ltOQDh zFemFPor-W=<*0w)M83TW419SH+`}*4dtLBY`N25n#ZDD$?ry{*G8-Q&kk_-Amq?x8M?4B>`H zhU|myyTjgc&$!KvL1-x_mc<2$tRjFa&OPV3@{DDuZ(2zPDGu z^x${@{S>_m|Ktb0G1F?*`ZN9QoL35%*(106REy^TwEp#Atsu88=qCiXmoyI1fF3EAQ%JS zIl{3xB7Gd>gjO%U@Pgk_M9(~2F4*+sh)ivj#qdH*%}A6xh-e2k%<)O}16fY3&ZOP` z@VDB14=h@#&^G2)wzg!Z7tF3-c+HlsE~~Nj#9-^z*k2P)EY)Wv9AKu3VL#JKo8Q&Yc;>!F<0B zm9w%gX>)pNlmYok@nN-!7L>)%u9GR+#Pnf1zBp@xN|TXbaYX0vnMHf$iO22LSFcDZ zR>i|@4I@!{C>~kC61YwVYe33gq7G>}(!(dK_SNzD@eY+jCqRB_HJ9NW!kG9g_>Xsf z0q6`p0C0_P{GlJu&?Mfu-;9IB+?jRt>SYP^ws&G91z980C41*1C++ULW^HIt`7@>B zc_zgQ4Wb-zwTL|+dDSSVFsO!>e5v!aekpsDlZI>7+|+MHHp8YI-+rt~F2x%f9r0mQ z&rgaa!)N8C^!m8~QvSU2&B9tOXRm(o^Y+Y>FW3`jSM8-`S$um9%a^#fi`!43gZN3b zea9p3Q2e@GIDf$|Uy@9zqj>o1zs}B_K5kW%)VtsH?#@vSrC1$!{ISPub4$Iq5)aFK zd;6PD+6Nw4u=#PCMrNZlZx$ic8|I*YFj3}mrZnn;Sl`;&+g{#y?AqnEfBf>xOTYR* z{LjCBQ}X{W;3MC0GIwOQ_@|FAj{U^pg~`R@Fp4P=q)%n!%ER8v_T~BN%9yQPuh}R5 z<8Rn!U){8;LVi!yg80R6s6_*Ern*FZaIVu5wTR89uoS;Q7Jpcs38CY?lMJO5YkM~Fq@D8&9&@u!LMa6rhCx7xK z9Ekk!10v5PP(kyQj<{IK2*=daq&Us4?R3@10~5Oqa66#%i>)O2r?P< zgyNZ;j0tr$GJKk{9+?AdKHu24f7^GE`E^+M1nPJy1s~ z9ur>B3c6-RuXjB1cDI<$ol_fJTXLm(-$M`B{rBDFBbChi-~ay3sZ+N}lkM9J&p&Uw zdsQ169<;ko&)N6=$=mJdlroYwX0p!BJqZ()=%77iD(9r2SS{Fi^|_Bx4*9$LP zx%e0V#nXuc{}AxQ-*SBN&G*fGYVpMAox@{NPADBQMQ(81m(3YU^%X}YT~l`bnM?Ld z|LIYC^4hj7?YI4|C%B1W8T?8^(>O3j2nh`zy%S8rJHN#B_}w_9=@lfD6ulT<;^1u9 z7u8E_t*zK?$EWNA@4eSP@U9b9*%M&8ip*%dfk`MvAm0=gH<2}F>+iAd(Kv$`?7uP-+$b`c)4cR zn^HJpYKA`{^dS@>1OT|;c)u0@c&C1(#o-@HJsc3>UP7P{q$$--~87v*`-?6WXMVA`ow!|rUW15D+qdqk_x~tXamGA z@o5|A!84X6ad|#@;*>AiT)1$~t}R`4gW=@ds6F!LBlgaB@HsEF8;e+7TI2eWRV*Iv zU(b!m$#Rks+g`e0*I&E%i&tJ-`oZ^q_`hEB!v6s9>p$_1;mO&-zcM~M`j>{r#}{)$ zGEnj*;WC_*mO4ov&Z`bt@#y-+Yxct9kK31?eAb@6(y?nBRjaCFX3BxHmU*Rp*Sp?n zTbrBq>MI&aEG;<>_dm$TB_42#zyIF*?)|%CV-x-<9nLc;Z##Bm(%%2BGxnx41qmAa zof1(yEHAR1KnQ0Cj$2{uxC-mo+UI`xV^99d7ryJgKl$19k3Ye;-2d?KnU^;!jg7`X z$<^vZLj&124-OZ7W8ML#vriU?;p@zr)@}Oq{Z_wr#a35$Y<;h84Ka38N{q=)7x*sY zd)@ULf&xS%hM*BA1QUjcIQWO)Fdu+|VyJcD{5fk@>oz|rE>QSp$ zy}Ga8nk=QV)$?cUVCYWE49MBRWkK&B=4V|#u_;D*uOjwTLk7!M&3$N5sWEoik>e$Mqf~=}R zD-BIpQ5JH(y=?i;rsevpvYy&fZn9uAH7g7bSza`1Z!X#M&t0(1raD25E|LXE{lO3Z zOSnT%cnf?2phM7`XTkyA@y9_I-U(yQczkTk&*fddddV+TEGo`Jcg@*b-l);ep^~3b z^u;VU-Qh8H9OA8Pe$sMM7})`JmV4Li`j>v~(a(SUlka-h-~P3K{_j6|_IGXk{r%wI z{q}|WKl?9dAN~6I+|L*KYrBP^?8#hFRs)Jq;lczPO=Syr@px%$-Y+Atz3Wosb=$3W ztWr(W16Wfzx!Z0(qYge@U(DU}tmqxq=#JZJIU3gg#s?qzyUgLR-Jl^2H$6FSZ+_sY zz2{BSmOrSfR5hwfX9W#lx-mO?j}<2lTWjNjUHZf?e*CddJojB6{P~wSNcKkpFRtv1 z;C;W@skat~hjRCg%?zr+R0kJkH7X5`Am;{bLd?6fvSI5hTejcHNf4R%Ob2J-@L-G( zhHxP$Fahr{N(f>S5|ZB(RDQV$fq5zB9#&UYts$nE8XK_F$7k)>;SnhotP?3hZ=*qL zXHQyZBoQdH!l78zw+;2T=&BNknn$eZmF@@U;1o&bK|#$O3jB0 zgQY_d*hdEn=L7*GuRhT#SEAF*TYdSQ?bWlkBdfJ8`cYr-<2vN36w}(;x@~Rks1Y)@ zc=Dvp$Z{?gn2S~qvLbdg--QF-KLM=$;rxMWG1VHEV8P zw2?zIcIwoeotPc4VdnmXG%GT`Lsq>S0*7C3!v~}Wy(wG(3=zx%#4nK2E3OzeFSGv8 z;bV40Ciuwsn3!bOS3x8pR8Puc!ff)5R+u^=Wm0lRukG(xwSqM&ArP~-WEJ5kg3YP* ziY%`R8)Ib-bKq5VXSmo`oUp#ZMaz`Nsl*K&*c{6$4FGE>TNi9j2e3LDTO>jO#cwaJ zp^QR!fL@$=#s%%-8F~^w!f`=6!Xv+Ujy#|c&jsEt@1sV(eN%?9QPqbzL1qdR{65PIidxP_C;^z|7vxef~*~`X)iWNkbrT3;cs7 zw>}ddcmvSWubLSh^;O)R?HyODBO32MaNn#gENFNs8l-HgJ+u?8vO|_FFIsN)0S#TR z+O;qI_Jv1(<+I=N4L|kxM?d_lFDH%p|0n#=FFo7&<{$sUbHDT7UV6{fm(P8szPlyj zs~y;4B;FK9XapcjGOCqetxMWY)$9WZm_p?IAvT0QBP{3w5YG)70dVgU<-q z*jN{{s<#>$vePFf?f8N$7x^n{Y7j>qp&7IM)P0tz%W`??%bz*>#B+b*y+8G(uQ*%v zM+yJ!+3N>icwyuHk3F_@VSQOjz?VT8vS3Z9L8=?p>F?P5u|sxZamvPJk{85`iAmC! zKUSP*^k9Zyh+ZHL@q;-6dWDL4BbbqA@s3SQ4%^(!m<R^uY%RPcQGQGcu(+VmdzRfQ9Aw z15^#O8d|uA5-AOJ#(F{lg<=Bm52XZvM}+eX4G6;pjR@;~?}hN|%`e>V2d@|BR=;@1 z(I!55t>?4_0JOnb4=_1262BfaS>+wKgVJr5898IQ0q&5ZO$l#kc)la$#8+jKVxsrv zmphW!dQh#g=Pa!rvND%pj-{v}`p{|X8#txXSdf4}dh4E~g9Q?l1K{+)lOO6ScPszh zieKhU@VJJ%>^ARL$0U9c_8H^1=NOW(0{VflHcCcLviQBj>1?^O+<2Wipk8t$MpaMT416B>G=Zh8k74GjZt>KRH1=zR}di3i|^ zi}zb0!U6IiUO1pPyceRpa8WMLkv`J(<`-=hodZsxQc#qwxF{xB_>PnOo6Ul?`j40m z$$}c1^!ZXOt#+Fo?7OzRvu(S3716owRurEG^XqW1HkBt^7WVnTgTnm)yQ)bCagf(= zd-QJ0_ zU3%`>l|R3+vLOmJlhx@RqUfPfPhVflCXd~2hvp`1ezIg^Wzko1L8r_L9`fLe4Z>fo zDoZdOtKs6lJ`Q#I7+sCAFgI#5;|0I`N-bi3BcC2+oT(Q-Wci^})>k=at51FYU%vgv zKKY{8?yCU*+ZV20{lb@49$8)8w-&>_jE0^X4rNPR$iHdDp|TxXn6u-PWz>UZg($ZU zGTdP<1_u#>8DMH41kIVe`y9*?&k^6l^@o696%_{u#qc|J?eckBTUiphWK9*zVp1`6 zXTbVO6H-W0s?1Y~ars#1z|fEt@>$!KS$uhQ%`UC1*<~rG3l}fjMYY4#wN=|tSXIN? z%3kV;sE%r(UzD6ITrn+-j+naus6J{vZ&Vo7H@3>#x`2omIQP2VxV`as z4ofWJKxcjl2M7ark2>565ymg^Z>)@E6Rw`0epx_a*w^tPu7(m)~z{7+we#xwk5 zhVS^X|N6yepI&;tEqe1ww*w9R;6>&?I$ZBEI%%_q=I!X*n9YqB{WexUn8Al}clYj*b!&BTbhs%DJr%aWQR0-DGu5GvmduB7p~s8 zDDSHU|L|8{{_@3Fx32H+_C#ak3TODze68cJI7!YXzFGumXZ-{v{1d;g(fQfOYqtZ!wtSb$9Y{qQtUdxUg zlAn6$dQFN)Rup@ia_Tg4gI1L#{_?9Y+bd_!+N-a=W@pd7X3sqRwEfPfe#ajD%x6UR zbB+_ohHBmPEYx@v8cq^L;F}r~?t`~pW2N#Mt z+6x*2JmUx5S*W3tWs`MPg3PxR56=(U)O=aZ4vlC>m8D-4mgT3cf9SAv>bo)~e*OBV zzqtH=dZu3`_?;K_e)PE)*Y*n1ratPCE@8_9d(z<5k=f%KzK+@SSk^{|@>054d-hfqLK~w())ve9!5{$7 zKnPJlFY`oi-^*YDNr1S3kDi-jE3$Z`NZ9S3#@+>uHy5SQ4_i)*PA`rU%gV}PxqEqK z)fE#T3m6}tu*vap-#yHZe^w5af$i?@*@`Tzl!rxPd#*p^N}%gwnttdO$B60!6PMtA)M! zMOq;81PBMnlQMu5AAg)M(z{#wC?q;l(ILmm5oyyu<);BgLBpHjSxj>XGc=M+Q;?Sh4h)g6Uth9UUwPHPGJ{n`{(i|Faa4%cyEJc^;;i}&wXNEd z{vp-DRZ{x%xX=&YOLPRkpnuRL-hp_J=UD8(g5uIi>dp2b76(QL`t8X4h!w==N~9Fz zDTGj1`sptpb>+Rc{FRG$+!o?p=fnR+%f4%k#t5Q;&ZELF`xf@(kDkWXj_`A=>W~OYaEQRZq z6ioP)!THBV3u3s#WM_@t~bfp#`?O32|FUDh^W%6&9(yl%8KeQPr4wmwZIjg z;@6uEUvXntje_Fr)%^UtGvUnaj1BSuQ3*SD#&cx}%dwkV+peTA-l!^du=1>ie8YOj zie%yu20)l$RL8oD!%byOx?Ujx0;gWr8y3JbX~V@kLKOJ}i8h$%?D)Sqr-JLvpLhY` zA9?cI3rW#RHF+AvfmdbO=jD7NojF7)toA|94sudZ9LsWJ3tam=K1!*wzn{)oN|{eh zPWg=!+y=_mq504z_pD>F?5Weaa^-T*7kZM#qZ(=$!bU2ar`HT*g{bQ193h5?gN_uYz31xB2caT;tzwqLF|JiF_ z6Dtb%=bw0~zP4HaRCS*vPU^|8da7nsOk_4VI%?CySu3#8A_Tf^?+xF}5IEpgrU78e za6ky6(@DQr3JeFhG=6uNM(DRZdzfTdHKec(uyQoCOAVvmTy<%wo=utT?Em58lzga? z&w$U&&iYXsmY3N{>;{8MYu~{Nj4c3wi>*c?NhK1rxbCY1Ix?nBtF^WiXU|lY{X@y4B9gp zje?5K;_%_a8fp}LSat2%RpBJTk+7tRaLK=vq3fNphLgoKfzEV-YUy-vT7Uo@mcZ{3 zQzKEQpjR&h4S)y>`ank%K0JXR2XCQqnbFR~kZ{nbMwKEN^K*Xdh|>4vCVa%x++MP^ z%jbUP`~KxK>cPJH@W1@a|Frzl3s*nR&AX~#!jIvZtg1|5(8{BeHaaq7L$aheX5_%jwM1VUDg(qYh07ZiV*A8J@#mL5CNefTHFrY@NB+&aNCb$}s5ped_TtNPH-56LP# zBV5&#`qS`5!pQ_}N7fr>pK=mNQGwE_xaR>bIFwf?4S?TJ6#Np#FD__Ac>(0Xd-z4X zUVmtZ67YEw{gOwN*;`iRO?-ZN#{uNWb4nwJ7KXRQi_nZM0`x@V8XD)M_-R|>^!E>1 zJAc%&qcgsdm4m-16*^{_QvR!~y>p43_+g=7^#LvjN=tiEw`D%$%7na>l=GPKzyekS zTDuR$D5v;z9tTZ2gPTI8|K)DdlV4mfe+BI#jQ5}k??DF~{_Ky!aNvU{qay=0G%{#> z@r47@{yj%^lw5_>Uzkzaj#byMUs$=m@-MuwuMwQTu<|4Rp$p-Z^a(U%@k*U~Sqe%x zj1Gw(xzV@V_Q(w~f*?8mUE1`~2oPpuNR8B|P-#4|o-@1e2-WyoPrm7JZ)@w9y|k|( z{NVrhi!W^NHXiG=#N^(SiRqhsze|lK^RZZx(25XAJEsN*LMVa>f>D6*2jVxv`Hk?M z-EDj2)tBw1mtK_8>Db(n!*=?P1zVUeTeB_3$_$HPq-d~iT*3}~NQw~9t1|&gKJ2~) z5a_gOvuAsJUTHtw3D3$TD_1Bv%wX}UPXHeXALgd~q%p@PIuB1FYU-1VQ z>rp4(sVm2uc#gUP#LwrLljWL{w%@+M5itB+fv8Qr?S%h9ZC7nwvzgu# zic0IW_x2)PT9|=ekv~8l0C+|RK|COSqwXkHEGqIK)j&Rd;U$+(Rvn*9>uBiPVc4YM zXn$$iGOaz^USIv#`#<`rKeqjge-Nnex1X<9MK{SPt>B9w4R({))Uj$bF*xE|DcF?F zeQ5AJJv>L5q|G!csrnsZlNxEbCB?p);SmWpiwnw(4E>WeqD;RC(#LXcySDe>5B=uX z6!CzD_5YUxru@Z3C{-6e1Wy)5K}^PFRjmA}rJWg~@#DFdQGj5Sa3RD1zr=%a*lfA0 zVHh7?Y`6MsXkb9SLD45MTXp4Cp3~5HL_I5$wGtF8Cx)czk+BF=y6+_CqnI!tz%~i; zV@QIaBM>Mwh8uoQx8fjZG#piOdrG~gPmpVj-FHsc80TQC>d+^PNNJM^MV`<|PUZLz0wtsTfDrny^r$a;kX%`* zD#!wP`3A{uefTf{_gg^?=4Lw$7HxKIc&=y!xXr zIm$ieeb62Ysx)TYf8}K>KC5h8yartv!lZIwyqnfc2)IuY%U?0{-fb}O@P2)r~MY=mbQYz#GiL(z$WGhv^y5+zZgNc#=6-?z%U1Tszg~ANW>- zKP-Iw;~&3?$m@XW-Kp-&8WsH$9aFn|oz;PvAsd5@X zJO%pDMM?-UhtnydTRwzSLWT{kcIQI!{Mv)e-XhkCu!fbqp>ECxq`Id@$3Gzt@QcGQ zm=uUODNUDIdVsj@P$W1JTz#t?rmUEfI-oe{%@nSG?oU3ArUa;)9;V}V!pM{Iv8b?0 z@*0L<4ffUr@Y_B$^z(M`@~As=BI<@HL>5=GE=9-QA^n9SNQ{xn#RUW{2oFU`S=0>| z(3>vkM11PXkcqgwBlO@v92g29Khj2BA}<{8g!j5gL)Z;Rd~nsD3p{Tg)wQt_BtKLG zd*(b2mJ|Z3KRR86nofoG>QzqO4qc_hJI`2BC@XfLH`Qij<@u|qSd^gE{SrN{JIM~H z1M1!;E2ZIo4D(&Ff_JKCFVFQp13U+P0QXk@(JqAh1U^=io{LgYrIL6|(Fyk*-JBPd zwJs@7Jr%p_n@rMvZQ&#T`{xeQTv}69RDIQ{LQfY@wFey!9Zjj2?xqiX35UP%gEkDo zeYl5wvs2plr#PjAyoim^@L>cu(J;gQ9{@k}oeyUAHum1mKuGMXx~cL)4o3A&s7(%m ziV=`S;REs@8w`T$W!7LA-Xm@>4lcqIo%Bpv1VcqLf9oGQl;&4}@0UU#+$w^RQm2)Q9kh7ydj41RVhU!{LWuBj6F%n?BO;OF6^~B^Y5r2i`-W#jg`Y z?WbUY{u4h!bMF8|m(*dX9MQr*bU~7SDO)LwmXrk(=xlamILJp(W2FqBF4Ud!W7y5y zAa@z9t*!bT3CaN>V?N9Goq-p)uu+q9l-aV{C*2alid3vhdA*b$)>tooJVOVbarpPX zgKtu%)F*|Lh6Neo0oZhGa`X|8loH>+WJ-ZyApD>VJf5CXZ}Bw-cIrbrp9}{-;p9!J zYSMOnKEJBrw-h>5^Ep)2zBo{}p^*V^Gq4f12+@IU?d)5{j)#-^ygCIxIGit8CSSILY(b=NIpw?#YNu4^bgvk7 zXR<#mK<0Q*PQ(F1QBhy&$Mwa2|F?iEthqSOzj+8h$uXg>>iDUG;?Sh(Qb2VngVYK2 zxyFRoZqgUJ1kR3M4^4XCsghgcim#%)9i!u;6XY;-EQo*?ljjGjn^Ie!XvL6kpj6)T zg1^R~>LvacEto&{Ylj&Ds9m|6u6fY#JK%g94MSMr?%(Zm>+rzJ-2SOd)Iq3sP{7(& zRg5lSMstY?)R&XBE2wsBUky?^IXHFn?Wy>$9ZXLSef!90d9hE7*`Mc@K@@_jO& zji!GNrzxEL8q;pW1CFfRt<2Hu7eWj09s&yRJWw9ABZrUJiKB$bMKV*B0mOE7efxfmK) z<&qB;o7WR1$jV=CSolv{eRa#8|IAsta%tVR_qc~k3QvVa{X;1P9{k2L0R9LOzX0(` z+Y7xkKq;-Sue+uZFU#t=zM=AkgRGBqx&RuZDA?%B9;xoCYIhZn{HO~`iZb!rS4YDyN(_tEzd9p} zlq+1YVpO=4l%TC_)iP3QF~nqk76+1D>jN^21gr4*c%#?0*fQ zROSG5(K{EEQ(P_VpRCh}rzVV!WWy=W-XK$!&pXiiJ3dLAtkk2li8|w zzn9yYN&*J)no`WU{9tkZ_78Q-|C+%_vHmBDe99dGNL;D28Q7>eD2!L_H|@cRBUadVq3c{%WA0MOyZ21fDRxHNs<|l z<;1)PW$}vzg3xmtA-jrM;S)MO9!Fq`>~0s+`(&c*d=wVk>dG%$lHY*Uxk=%|s`99& z)BIi28axB10N%sz)@LAaCT%DcTqqSF1e^LpPpp%$OmI9C7Xd^;gn&{8e!TbQ8D-!A ze#4(?@r-gG93Hl*nJFumus#oLd1+0KFKe@{!wVoXIrz}HTCeyQcc2|*Vy$BBMg4il zG7J~>D&&*0V$*H9307J2pQ^{z&VB72%XTUnVbpEs+NM4I*m+yt5Iv+gP%>COm|6a- zMBokY1idK(+=Cb6InkSfga*9JpWf4am>%T(%Rf?5%u|Y~Jgz5Em>U(1HPevC28M>y z2C%Oo{M4U*pg1sCc8eFq?Z{API_x&*BCEDnJMa+z1cs-RTtX+*k7T%2@lL_@HyUhv zr>Y^JdYq;NfD922W#~ha`j+V4vcjR;ANtbYygyOrYXIN>t@n-(7po8DOcsZjgfl@9 zpsz6C%Br%tVw?L1R+XH(vK1aMLNG&Ogv2;NJcrV9X6ORXxL$?EGh6uC70z)8hGX1q z%`JmUp)w^<`gMl%bSl%Wi<}EHJqtrU4zHq|cDA=~^yEy~vT2dJ5|{l))b*e&cPYOD%8nz{fOhC{}AsAo~c#>D(@p}PvML+}3pjFT<-op6nRQQc5P3{SBF`4kizPf=9ViC@}-yQHZ9=-8;w6|w`}x3-Wkg2aM(eMOnC z_&&A$?OnTYZCyOakUuG7AZ-G@shDs9;Sa7~LFaDUIXKP&ZxV>0f3mC_5@^1mh?R$* z&yf;`_}m;?zoxNe(T2t*zKxV$OPHD-d8j;CbgS2|#uoMb1)goH-70&wwI_V|E&-vS z(xnaaj74>JoyNXz_mDnf=PWyh8ya?Sb7Yz%JYa5zNiT)9>q~lHx7^^|;L!&kc&q37 zRfad+wa|a+=-|&Cnj0J}4HnFAt&~~rA1TZ+CsDJl6%7IEQdZ0j(0EX zAS+JwV~DQ$Al%d)h&tnL_SOk!7YsRPimqQTjev+lIKQE+fKY6N;TQRbLINUx;sH@k zq$8}itcdG}rV)C*`~Dfxyqi?vcnc>#R-m}7uC-;sN@{&?mHt@5rep9uI!ee#KCy~8 zsGBCo*IZelv{1I`ebdVxlEpTz4x&)Z`&<(nCuKmZ4AEJN;Gim5Xl|)##YcJ3!{&?!+Cad~FN7dgX^cjS?0aA6pz0(?ljFW%nRsz_1oddCHQ zARpTgeBnrSQ%`9_<1>Hrw|?&Xzh>6d|M;%kGsjL({q@qItSD)B+EO)?pvag|N8YaO z`PX4~_QflrQ5ODIo3U6_ugP-qRq{To?N+T>Nz)4Qpn=>P9uva7n)jQ$4se>YtR5 zcM9?sUHWa;`u5IykEZ1GL(4c=%lf3!1BnpaoKtAw#>Cz>~k6URu zXnf-MNt+s*bOpfGD|xjo9Y7n)wQ=6s`{$(yRF*6jubLe7mqv1H$myo4>gmRN&;X!L zxB$wg9i)#u4q?!yE{mJZj985$qho&jsUov|O+(AIm0d5F4a=0l3zqvqXJ3}}s+GoP z?wme+;yY6bUwt@pZ2aE&lVk76=e$LPkN8xszkgKiv}@HJ4(IRN$}Vjvx(H_sBR?>Y z(#o zzKZaT@4W4ui-$+mE23q^@Dk_)&H@#uXldJDy{=wz(>B^!t1;mzq8O871Mm1(VmV(W+G0V`n~!Lmer$2k zZomDEojG&H7WF)L=#VW+Ku(|L!=uM#D$m-G7;~VMx4f*S^xb~dN45c&Id2pXYV zUqIOT|4R53c!D4A(I&k2(*H(!g`xPjxk*$V0SBNN_E!~cd9!AhF3OUV<<5$u(?*UJ zKF_;yNitEk@x!P7=D+{(?;i3Dzl!jo?|e9OVsZS#lXK&Pe3O%phGJB7I9^vAmmXQS z-JMNa-D%iHMfJt<6ke(Qg^y@Lo5-$`V$R!v+OZG%xaJp~udQs`rKN4#*{vxNOsxQ% zWPrwR?p)UIo{io6jvssRpZ*VT>elOz9e(OBz5Cdyh3uaj9FT$%b4oLK@5Xq%zdUXY zA-yiEvkm0D?KR)}G!~7oBSKi`6xj!JHOQXhJwAtMV$Bz1w)#6 z55Iu$hpBppkmMJ?;i7D(T{kTd;XrSGQC2s|85STeJMZaH$%1z#R|kyH8NvDW@&De)Z}ou0e%^xgM;)vszfJXyH^=&9-VWvL-Mjn|Ji*NtGwQT4MryJq_qgLc9ma&o`)qw{ z-(I`0YFDMGeDa)O4F-b<;GdAHty*L4c`MA^wm5U&*Zqe_fBaA1m8$l~2Y>Bb?w`45 zvG^a0{rh*)=p3*W#%defkcLwQ+g-VC*EG~yuI6p8#e4+w32Ar{OaVZIfMAjcC#*Lv z(EENfzIrV8m(#Du@kd#8?L8?eDJwiEOaJOpP=4i#hI-7SWHf|80Qdmw)a1C$&&}BU z%(RWmavB~U?Vivdw81i~f#^J$!1Xmd*nZhsqJ2m0fO5J)1N|{9aiNt^p)dm%91MW< zgdg?4RWN$rfnb=M_=4+A+C{#%rVAh*c?9r`i!?amM1BF0FOIGiMa(n5{;a=#;S264 zAuLm&DnXDXE7#Xvx6a;c)~;}|T{?<^l7c2!UM+^(s>kT)h^(o3DXQbLoKD%PlPBG} z8XJ+7UK)@xV@JKLD309Fds9!gmQ*ikD7EEv^X7G4q#aZxM}@kB2l(SfKvLS#Nq8(p z3c5P30p0hA&okB(tG)o&%#>yMRhk{Uva)CE%Nr8UZXJ}yKb#_YZP(XbQ5DPmws_~m z-}$fq!C#s74898RkH7bAh10jq{K(v~$wBJo(-D#vrexRv%Q3F~jY~3yc1-q=aTtT4 zJ0p%3n`SkFE0qWB)R|K@SSrX^+OfTgloY)*D^?JlrQ27|t=UVj@`)=LLjd6@NIhN0 zlv(wHwBfQ1-*Nxq?cemifAz^9{>FQ}hJOt37r)`I(YM_<{joFm&ODGCV$zugp)p{d zqJQ+!>Q!64a@8(f+p_hx%u1P;-1p?yj*5$;hYrR-U|@n+jf%Mv!gvm5!jH6JDTLL4 z*$D%-oqM)f#*t;NQbZnJ@Tbg&+CW2l`H*8vou?_Z)f8z}T>SIK!%TVH;C^#QO46mf5*x>nqFl+O>VV zwj~}Cs)bV8V9Q=MNtumL&S`XUoA9U^U-l8P_hc|ZC~h~D;7SJ9w;J~1Yuon9g$-q( zT$r0;uPsDWoK9ognrmOO*5)fVbZF**yT9!NpZ#xt?Y-ZSs`^I;iB`bQeuVn#JC0B)gZqVWTIg(BRo zKzJ}y3TJY?WAz%VNeY*S@HsoF2qwrgmFKLz_Lw!dE_yH5Uo86tc&rj}n`A)*MtSv(V)CN*c9ko?DU@fab z&qy+NYa!SP--Hjsfl}c&Xb})}2_?ZZenA@`aF2I@_ggaSt8v_bf$gj#sFY=}FE^D< z6Hqa46SuNN6F#A(TJjh)0ypRY@Eh#`4FJLc{Ceq1+cCM%&8=gjLlXF$Eo;d4>Ca!a z^>y~;r46cnO2mo5LdU+71YTw^@?|s<^@0=X|gK+O1t{?3|NX zdBw`p5!u8ljp;S zQyK!T*wwS=?84HXsmiuhZLyY+ghEUVZi(p=Qv|>Sy$(hRX6Y3!Tmb1|LiQ^$7otca znac8b8dlI_w70CY{fxDie%qRtKVhxar>t-1Da&p@ZMG|+5#zgcr?glFISnoNtT!7( zO9ix!>fKU()r)kROV*ZxYVW?L!e#PG336o)>2H`!>aDRZu`=*Op#6Uri1ZsSAm|Z( zfqO3vdc&bXui(UQ-dsJy8L~t- zuHj)(rnCEsI*4bjQ@P@0VnI=!TX>W!y8G24-dW%$e$b`5F(Sb!SpV!O!T-2R+o>Zr>;j4cQb=0|R?jQFxo2{3ep%{ulU=d|w zw`otkylqcBz2=_)N#)g@HToeaGFu{n>y0gFpRG|Hikg z)&B7Ci$C(NBky|4!Y`aUJ^9GU#IW~*en*lN6awixt&1`zRoClJKW^vFui5#vwyjiT z;fNXi2!p^4KQ%VE(Hrqg!_(-&7_a9Lpx$uLOTXj=`1v~xBm6j#;=!Oy;^zm3rErF= zSdjMb-?ZYvMa%C#Z{^0zR&Jfs`>GUK)927wPRH-mCY^svuocs=3~+4|S)mQQyG#^%O&d;o?2w z1w?#YZ`=Uh2@AoB=Xj4a;ex(E#P4+;rhjgg2$af&(9=ml`}YU+tk|#s<3RDlfaN&j zSk^B`G4i5F>ym~SPpi{-*4lgL?V!HlLx@b91M^JKrfmv*6r)&B8VR_cGxOrBmT6qH z&ffFZsa+ELtJhZ<9h4Nj=)+6!kdR3sw3NvAZlSoqlX@XbDyJ8M2Kc+ob=wFC`~%_{ zyxDBZy-G#Zm#e0^+iJVrZ_m86WLGY)rwilgIJ>lQ8fr*3Sx zh15GK6wQs}I*R>j+xEAsc4)dR?ah#-yCTLOB`1OyvBj5LwwxFPlVdh_Wa>?ei&J-e z$GhM7>3{yQPp7ru-v_?^?PoIYe(1!|_k8oILx1_(&V0k)_%nC^)6=KMetK+n=q?1X zk9ij{1(T!9+4y14(u97CwzIrs&wu*!_RQs`o!#izS``J_(Xfio!iPZm|K8v@8n0JK zc#bfb27g@mMH=uXd~9^g@5p9i_R7_(N}sXm@c}zDS=LakY^{1;rnchyuuH?Ny-i>7 zV?P(;ZN7lp(r}TD+%Cd~udGFV#xNyi}`N*2! zfP9AI6;e>fem_}Oe8Ger`^@`M935M$QT4egKB&>(TC$9ko7JwV4xBDv;+N5qBCC$s z!icr1ObUtlooA;=G#Pw*uqV8CEH^Y{6AO!@hYufm|2s}h zUwh!x+>5{d*dP9L>;Lix-#vfdT{FLQ#~Y45GI5k^i>WKte)kZu=#eQM(sRM~S1;Q6 z7oN1wzOZjEURbv(7Z;#Jg(o8ezNmEQ$Vt2V?vpk*)@RQ>^@7zjMBLim`JSKtnV-Ip zx$nOF9ugtGgb*^ZO3%(FL=fc*qwl?c!oKP27wyD}aX)_H^B)M0n<`i+Ogida1m$x= z`N0v(4UX*fS!tsxnjym5G3>?BbM_hNf+IX~|xC^mF#bXV>k^%LTi#+p;Qq zXT)qpH69oCBUiLn%+0WAu9pd59Nux@-jcNi{s7^@NQ4uYl@|6i-F^4n##e41fBXx| zD{u2t!*+bCU?<12HXth}K3tisqkawP4t%AK$=IfpN~M{%!MR17K6Qr;j34seh6~#I zT5ERs$=|fqOHxvz0h9FzCm7U6>nqR6LY=UU^XGl@WH#Hj!Tv4js*B=j z@ldv`|B9-$>M!2!lXA;y__DdWYhV7-Gxl)_-h~xeED|($k3}0lXxya-xCQTVh&k{D zfBbMf1Mna3;LC5c54=a%z4zQFtFK^BJ@cfmdSyk&lcQ~W=fiXMo^QTKifB+4qZ9zW z8L}f@KyUlT=S)s=Ic@o|Md4MvaOuhCKK8<6ul(Hki|d#E%Fq0(RDs_I{?4C!XQtTN zFP=Fve(zlm9s5($3xgjl4&@g)?a}F%Rj)X%%=@LxRaUz#T{886HCA4>3(r4ppZ)SV z`}pJAzWJBoJkv4kv@c-6_6^vZzWx!r_x1(rYp&VTFI}{ev4#IwsZ_t?qaXc9C-auK zyyZ?2={XKx24NUyBitIsz1wokrPFY zqZ()WP-G%Hrm<8^yI!+KMdM_SF-ZDI&D;z`RLhEp$fEKlEGKQu@KfQ=DY8KN2d1n% zwqUiTi+1kGXY8>rowv_kY}@(WjuaF^*sZ&eZmW*0bg+jg1c`u|=RR0cnVVhQ_Du z$l`GuotVj+7?bZ7`Eo9v(C%-eO%Xkbe@uLUgUa6Yu+LRFO z?Cv>^QTGsf0NhXv;ENx>#6vi6AyDB@e86$*p-N>jRc&-TUa=3N7YF{+b17?Lfq4~Q7Qk?e7_Z>INFNC4s15e<_gUBrF6>G zMrCabXQh-ob(@);w9{{xljXr(<^`2CYJ2rjd+ak`vP(;A)=>KmlnOR5Qn2l%6}PU^ z2S`)h`c*y_z>b<@sUoXpzhOH&yUxp{0@vz@cLf~haZp@%2i)RLtKRkiz!d=BTj`JE z9Yr-acgPkFA6C3RDXM2&8ReT5J2RcNZ~VFid)xc&mqn+Vs`FyI1)Ur9h9{jZ$xn(u zlN0W_K^X;w3zfZtkL_+ZezUflzgDZ%8e5yIw!XH~+}qjM_`bjQ3)}zUBj36(G?4$Z z54u3%K1kd&DJ;l?9cw3%s|!q zO>cVByohxLLg9ju7(AhTxVz`D%*luEn6P)gX~B-2oDk6vW|UPut-5t!aI%xXo@3Ps zaq+8N+2YV5z8qnyBn^+HfwdrxQu-jQ6qhV1_I;>b)lwzPmPV~GFk~ASF4_UrJasq)MW3sW+3_OvbSz+~3vkFbEADLV!QdIPe8}!*K!ePB=m} zK0angk1nbq*JX}w`OO3B4;?oqFVlfk(a$YS;jXeq2Zy{Ij=p$prCgZXf}uG8iy+>8 z&pmea>J__u`Lgkq7&V5~xiP_M%Bw%QMaD1xdEI1bNX@A3N!j3NN9qgip+sPE1cQ2D z!QhYb2m$HEJ^X@x&JXeSvkRB5OJOCt<&{Tew~{&t(Kil%^Q9WB01ofh#H)4j8P|@G zh8q-oJA~ppJ@f|!z#T^%Xa=5y^A1EfxI+uVgI*Dz_M-#lc+Y|?LDIkW+Bw_b-LlcX zrrkMHu=l;^q@8~7xGckRIuF#=3G3T+TUuTFh7bSfhkqm0 zSS8HQ&%=>F+{=jGTkBmlhui!*g}qACKg!9svbdX=;hD&*$||`s7sq(q#F$+R$>&nU zkm`+EQXFY=9wDP=lJXF-u(Y_J$J2RIkY-*%%v%`L_@8C>j%{7NYOiXn`s|C#_RQs) zo!ydOJvBTHi((M&($rlc7LaGE&+i8CrSanz+yTd5ev!7Z<-T>2;Focec zb$(eHW}!z%*z~J#E-S-{^`snHe&m6j=-d&+M=4Pln_C-ccRC7Pb;0U_&3#{v@boqj zefV?}eQi=(QUb1guv}749Juu2LH%&?4$e5919*Qui1_3iF8qN|T9GF}obaO_z0jLi z)F;aD=kA|KYt6BXY^X{jTv$+guHR`k22 zu+3`QHY#mf-e}szm6}~xuGuv`TWQd)t*zSHZq;_h>s95uUu_yXuXfO zRo}33sbhnKSsPG31EZr>8jyup6n@+&ksA=cQgYPKYbIG1jTy4_6{VmgyOp&id+~Fh zwqO7BS^NB}J9cH0>4g~bW0*)5#P@xff*mbbU8wd?0E+jC!f)}DK1+n&4D zv{yF|Y+X!;RY6bd%ko{4c@STT8!eGONnULFp#t zn0iK@5h~{E2xA8=!(u+Sl}@@RrUqyzR+Lz=p)On?9O<(WQ&N#2Q) zsTSlzor#NID%(T4Wl*p9#i2CfojAR?^+M1Kh;ZVEBYn`X*AI7VeEbk#{CNiA7l=AU zIQe$704e=TN(#lzT}lkC;1o6j?jp=4QJE zc-~z)N89o1*W~DrgVQV&HKnY!>rGo;7f0UhvxQb~chF`-|dW78k=O<9ywCMhX#ivAU3kjgJV;_-KuFWbvs`l9{H zuRUd-yV$nXnp0DyGY^GsQ3tEGVR30<`jEZj8y~ULvxBy?v17|?JHNVHseMpZRClbL zp#RdPO9v-Uo_zP--rkYW+7Jda6KkPRD7qkF?bO?SwzQwM>sL0cQ`@s4Y20C%&)L#Y zLf$8%FegQj{$iKmgbY@e2#HdXY2tz^UmfczC>oNs#-X&R5B@L=cm%(DMQ6vZT1D3g+|PMvMVN5*I5 z0Qf~1X@b7^@r*x!qToH!LUGEg%5spWI!Zdce!q>C&yYiWV){`p(kL4rIw~LXAdHpb zl)cKLeDO&|78+kB;RHTxqY$Mh4_2TMP#i_ZZ{h`bn#1K$U)qE`(^0cjCSegCct8*2 z3uOaDI5fUBKF|DmnCit)O*z~0%Bq(&J2&G;W_I`XZC4|fmruNApIs`*5|!<#OlU*M1r8V$oIB)G>-Rl;zrE+{PTHlj zSM2hVMiH&nw}15See?>&_JVWN>C>k#ix}S>1mWz`u(Whj+PPA#xRn55xtFIXvu~qv zV3)4f?CLf3KHIyNSKm}*-0Ek@guIY;*EM-lgC|5?8L7g)pF$eAKQBvyO?Xm-SPL4c z+U8{`r_a7%pZd%N`_u~+duAi&n>Dv<%0~#No=C)oxkYS#X|M$RLSC2zmm0fQP(m<* z83ICx@$U`mjq5phd6a>WiHL;J2r#*xlQ^faIe35BkF@iAg)%~usCUm zqq@j1)q_$}{+w?jZ|3s2l7!B{nTV9iD-;QHPVrqlT=d*HR+xMRSI<$G2q!MTq>pF9 z5U9wDXVUjRN7{(XdvDq(qc@LukGsct2g2XQN4Ve;9g?zRXFqd!eoYDZD;!$I=3Rie z(2FpCR$NF3Pta~OoxcJSKz6aCj3mW)kSr+~!n_k5g}^sc+Lo?e^I`9rte49g%C25ox3bkF z%Xurxyz<*RG<>BRY$b9+D86@;jwf?fX)`9Gm<){67Gh$R%QfAql<3Uo-1`S6q~9{u zSUYb||MsWszx~#W_K9b9?6qy|CXEPC;=)lGdHZmTtHG4f*t9+H@O_=Hd*c~fJ9oXa zR%vxwnZEz_;Sc}V|Kv#D0pt!hl>!{vvpL zzh+xY>vs9&tM<$jSM1TpuiF>S?#ps&*|q(Qku4LHa2Co5#Az^R8n5Y1NDbP3QHWlJ zgP60M#v2-^I{JGz9*)NE?af?Rf;qa@nR4%@0a6&wJ-g-lEB~dp8_$WZNf5(Q^5Y%y zCf784xS2MF8|fWdu`J9?Xd16Hed-#2l65NuHFi zzZ6cT5V>ypE)W*!U68x=Ax_kX@W6rRo9>ID(S$Oz*wznbLYv<(DiH!tisU5g;t7 z14uxb$?=xjk$iY2@37VZ;&?kML!x`-&jnv|L1%HYWN@o@tg6U-^cJh0RW3syc=lP$|=7)xcf_aOqO;+$vtIo?%}@+v4! zCNC?nV=Grz?D;33w@>`mllDo;>~ohZwk89H;U`-?sH+asM_c^)tmf0T!D!`2qQz(M8~Kr?ZW(8Qo^D$M@g_b6yA$t z;0X}dhsTt8(_1e=Tgp#@Or1Q)tCH&C7QNnGVR;=$laxio2_Oy-`FI_B!c$s*y7A0! z)GP5v$}{rydUYe*Oy8|fH$HJ_1A_4*9u7;Bw1iV8N(&nDp8V3#i8%bCu%H)hPdIg# zy7$W;mo{o9MPRG?-P~&0UX_if!u3GIJCu+wT*)%lXeL`4H$H)$Mkz7|aG-fSfHoHsNkNI`mbKxj zLkADN@!o?wPAxQxeSOWfwVlTLUhR`IkiPZ9AO3K zUWOyhO@<@C)N`lwH{;`v;~iy5{9r_YIQXXt`kQ3{47s=~iD6TvQnmGs4fV2gC`{I) zh=|V;vjjq@z=RCF*@#Q0L%x12MA$N)TSodzLo41x_^^1u4IxR}R-$KaiJl1` z;&v4zdAWiVtEwDsGG&_xX_Jxzzk~~9N@$TcaiB{I0|=wZX}d(3l$N1y;tlAYlmPUj zZj_6ImiPtj;yvgcv?dHc0Kf2$HY7a|X_692b&OvWM+#5%3x6QWPu50SK%sqnRaXgU zN7CZ}+85xR`U1p@x+nT){T?#XLKtrL#Hkv<@%OgTb81_wrWeOo3^`GGrp9= zngaW`s0%prDYCk(IzEk;FO)jt)6<>19(+UV{yV0dt(|IfXQ$rSYjvJq-&p&ufAIHz zYT1!`9r)0PJ~Vcda)S4K<0FI3M(0~k-)o8H^r zbEdfmXDkb3nmlKB261tdR9Gil!*c+Y#$vkx@4l+1 zFqAhC+3-uAsh+8K1E^~-A`r|RzX0`v`J&ehh0&{o*_J>)!H7=#o-%?yb8|C(X&Wnq zFTMP-D>6SGMDbWKIMoG#XHJ8Q#b8`Mpox-ZcYn6qe$@&`M!NLI+R5}FktymEUO#E3L56UuEWT$-DJD`0ry<2L;QrslSspH`Re5pqo&Lm~; zVS>bKsSW^2Gp)SwPN_GQ0>42&Xh)sF2mHvhCBY|*XRoVpBn@$T0YBmrPFkmro=L-V z0P(`#Aywx_d4%KeM8@DVKcp-mf9mMCcjNIKWl{IYm$1k$%Ex-a~O-+s2^u(l#(O{{2Vg4T|tq(An!IUT#*Tq%vijKYsGyjcuqm5-njJA+3J<+yVX{v z@b8P|;@|u0Kkx&5N#k|lqaXcfS-3rzTCxY;`L0JM74WHiA$#Z5%RBa#Z~SJP8Oq!G z+lovfHN(~0`A(pHykN_ery)es? zC=>|9aR`_$R!Qj9*(gV2kQaHQ^iVLt5d4xaTO!!VNj+48eknU02}upEvK81+BQXEw zcWEgO3{P*yubaCfJ(GRpO%HKXfuvrVMxs2@Qnp(ssvpBH0ETh}M}u|o08-r4nBic~ z5P*mm>G)+u1SLXTP6pt|GrtJa!u%mp_&5AkR#$xwRW7T#HOWtkusCYN<5Rv0#DqF$ z-3qQ8lafOC{TgIB&QZC!rM$t7Ho%hc(*f#y*!Gd>@O7JA^{!QKGwMR8!eRi+*-a@f z$gY^)S@Ct8R&4qOXXVd*Wt83WUCVR?sROHVbVdA?RxwrozEF}$fuXceQX!a1Bpiv8 z+KxPE8%k$mWejnNPgp2{lr+&BI!1Un-tp%-=pF5dUjSjz&H*V6HApmoo^*oLADTP8 zgadoz=-?esM*HuM(uF*|+osLjtzDI{k*yW4jD)r-=wyMDcAt5p-@ z$mFYIX-Of8FiDXl>j{D)>=2Y5oZgcLgcuN$OOZ57ECm@`zb$PCD1#H zLkM^S@gV;9v~B^ZA;~T^F5xtI8qU#>G$>NUGAb)Fl*RD2$&nqJO8F3vYgtgfBeEvZ zPbi4}{fajrN)%=bh8-BdbRPDwx)dPuLGj5X8r{q2I)Jp1p8YcX@(%EPllhX6`fZU? z1e@yF$j=q2;^?1SO)v_dWWpUt(e(9~Y;5|N%`YCaqsJC(VQ$Jshq+HFpYF9%9?-^z zQ!u#eC74VV2%2{VBP}=UUtcbrNjzW!>bC7^eD2pHYe>QB&*;RA7+OjPhE<*Xv+qhs zXVSn*hKL5v5(346Z}<>on$Tw(1#_4?wzIWi>uVZLT)%GDu3dKv+qVvgb_^qEP2O!#}-3S98i-bpbedIs&|9oPFF&p=pfkzd58eeok6j{FmEMO~7zpnQM#_@alu zr!>)iDIa1b{~JzKAwT2?g$~c-54iFW&7cMC9`%8DQU}>>K#zN%&baDVB9D!YyJfy4 zCFRzn+7jOPd{rQ;bW9NdiC=}U9J2*Z1KMAB-JCuE-{{Ddj~qk0g9DA2%42r))IIjL zuYW^lYN*}Lw07&8n>&@~UU>CI>(Bpyti7lI?nnM^D(rROBOm=pW^!_J=+ebY1O0vd zzSHV;;Tzuj-u%$O$e)vW_#@*JTL zYWo#>R@99YQ)^#D;(SisO-(1HG%!q-6T@*MAC0@Ux#bFixe6ct_|T7~c_A%2z$`SD z4}Ii8dYB&JXXiFFMz{i;=*kbmBYZGXTNcIO=(vrHa^^_Fta{UwoSRF+B!L(487^Uh z`<+e@UHK3;Ju@j`ZM*5r_t{`P?r@@^P>Q8e*=A?wykY6BSYaVO%)km8SG&MOFcf$M zQzgq2C6)ZZH7Tm-@xeO{N6CXdYaGyY2EtR!!vAUR35FBx`bt(T4B4Th$8G-btW8gi z+Vu3e9b25U!6L#0=I}>X(4>G;F1Q5g2^B?6gr|J`8W<*136!N&Z_qiZSC^Hvv9@8- z%Qky-(Ta+|20;C8Rd>pxb79D`x3i@@S6xB9dhVJO z^Nz|>n=39B8DIHDNntfZ2b%nb(1>mz059Q3d(vLSOK}qLjKd#ZO7v6?%8YuF-g&9( z2ZZ7wKINpi$uf$(NsGVF4GD+~UOv~;tt$}q@yTU8RXl#AkKI8YbBT?CDMKpD&K7TEqE0;%XWN6&RrlxFW;gFp^b<$2A8ECIwJ=a)SUaRib?ZuUi zjUWAqAOG=BdcxO%pZxnjnQ1heMHQGW6ia=Q$EFlD&3GGTDrC*0hW@2NY=1=ZBxDMmaK`Ie;V3%*NOm5 z32E$&fkC+%m0^baiO40l7?LUMf+}Y8UD-6C6i!1-%J6}?lf8Wn3)&*6ga-viexwuC zRD0gVAW{k)lw325;zEgyjg8veT>4bi=H`YgW*Qi!0~2wu6eeS*I^+6aWSB0P z7h&QTL4YApW+*>|)_XqDD4#Dn?u5f|I1YA`AFC+`2clhJ+@=mK+CBF#TG_U&F3XqA zdhZe`?0##BTNgvNQ?_6%3l@|lhUfK*Dn>E6ahVPUU+VAY#X2G zKeTw%hSd4&Y;URuuQ?+#_r=$HBwj9ju0)gt;n2@l-WWDuX(9aJqBd^SDzelnc5Qjv zb}H($)Jt@FyHvc{}PEdQuNM6vB}Q+Qv6Hixw!55PI4=Iz{4g{E3l<9}reJ zoe^~QV^509yAOHA8+=K{SMgL=>QEBhQB-tl42e;m(1E+A60b?=s6AZKs5~EuC^!?6o!@SczJzPo;r8{rHR9MARZsC^{pfwS^1?2n_oC;hvyI3!qMr@#ALqH-dt|) zY^^mfF0E9yE6q>kip9VALx1aUUGU6a2mZlN{e2ag8KtWAYPF$q8p5lk5rk^=2Y_$? z_7Bcnzq0fnGtKPV-uagI*ll+lv17L#vAH7)Ha@{+S0&@_ZIJat#OgKaC3m-XMN|<& zje-T_in@y=gryC*x|KPMxR%53?S{EkH3X`zbP#7^d{hiqaV5tPhJ-WmkDpkke= z2I__PGz>*iF~^b=S3|mZVrJZi%2Em$=AqK~Khr{V#5Af0cQ&b66qlZt^L1(X1j8ZJ z2n`H{(4jO3hd4nGgJ6**i>O#)4n%pY&Ts%s!#l!4!((AFZv>MwY@|m+kulMUpimZ! zu4*_VvRcD=H54bFd9Iweb#oWeO8{} zGfhSHbi=}_>UHyjyHXN0zBz^d@5wr#&foP)SN`hB)qaYu_TVeRdp`7MGM~xV219GkH|}oP;;Fmr zj{6?4p^w@c`n`My#6AehhE0<`7hX%M6)cB8)mf8>b)q zuiA}q8&H4hfs#_$d6Y@V3hFQi z2l$FK+k2$kWi9b7M_>4nC4?d`sV%&-7w<3)LB7V zUscx2AO7%P zWfk_OL(|jWlji26k&f zzeMEI@iYK01mD;pF0vsqHwus^^CNg*-8oaKzJ!nv0j2?oi+SuTT{uq;12XJNJta&) z@dyQFQr8%kBB;LnPFX|}qXB6i0OgQ+aNbd5j<3q`6ZUcMx93j}sk$hxXCooun|zhc zi}vL&KWFuhtW#Nw=_XNnRxF}aj?+#r2p@ICQEz~Jy)NBnn#Pr|+7_h*oq1<#$D%<1;S*)(3W540CBAQ)dMs;Ej`Z+ebS8j@>o?tIA*H9hY1@W>oL00Jj^Q2d16Iz}u3UTUU&T@Tu^>ce$b2!p zi?x=^Wo$r}&yW-u_mu7JRi&s>XN4TPa#mY0szCM_;$dvidHe2uDX2VO(NWtE4ypa2 zp@|L^jh41HrIhQPt)-RLwJR4JTlMGGBS z$%%;$*CVUl50&zaS>HP5D`H)izy#H^*w|&dE$eJ!Zkk94+q#Ejj<$==T;iHRo zLgUb5$B${~GiybLLl9S((kL)Z%;lg6eAPe!KDVRrCd?{_<)eh&fO_%re1a4O20{B# zUTJQCCt;*3sIEzP z#R$&v2rfe(>aX5U)`8#6BVqOr9I`4VCBaE??~NtM&fuO>f6U8B_z+mmIP!5*gc&^* zO4ldjiA%X+L`-`B1hq1OR#GiKHv?U%3&O<3gb1=Ks<^rTRhx7E8)fP`>yg9;3hNNbWq5z?HY2QCP@b!YL_f9B2BNFlPayva{h| z-l?fG+FV(&rAtc(SFf+O$EIg%>)TtO+S=d$LCY3i{YU@kA5xXy6MpE2eyG1(F6XAF zr`uPrU27K$#g59%NWt=JANj~fZluqA@Pi*Le(Yl(OD7$>@a8waIs5s~e?D~=e*k#j z``$OAAvKR^G$!$%et`M%lI__+7-^mNdq>Yu2|NR#i&jAxZhL!p5I-(FB0 z6yu4a+hY3Fm1P$=dRA&mW3XYgATzV59svemERE7}!m2?SE^KXXxN`>KPl=hwVZI2V zLbzZOXXY+bV$x$B_!b8-CV)AN<31;b3ykq$6zVgexEw9mTweA1d*g|r*v!gZJ2{RV zC?2;oa@7Up)5~$`Uv+O+xL2$u1ymlMvhi6BmuF}E>fwV{#del2+1B#1aM-i$N?rMt zY5;7^pM&!346_3YNQa2nLmcyx4F_%kzNl`tew8+o)?EkN51n%e&k2a ztGM46e)xxfIIH$9ioe>*zaiN?p#5Y1l{>Tk*5CSDiAl`t{|E1AkLnj=rau4x01jnX jNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjfaDDbx literal 0 HcmV?d00001 diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg new file mode 100644 index 0000000..fe92096 --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.toml b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.toml new file mode 100644 index 0000000..f27075b --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.toml @@ -0,0 +1,25 @@ + +name = "Feather nRF52832" +manufacturer = "Adafruit" +is_main_board = true +standard = "Feather" +cpu = "Cortex-M4" +ram = 64 +flash = 512 +required_crates = ["nRF52832", "embedded-hal", "embedded-time", "cortex-m-rt", "cortex-m", "panic-halt"] +related_crates = ["smart-leds", "ws2812-pio"] + +bsp = "iron-coder-nRF52832-bsp" + +# Each element of the Pinout Vec should be prefaced with [[pinout]] +[[pinout]] +pins = ["rx", "tx"] +interface = { iface_type = "UART", direction = "Bidirectional" } + +[[pinout]] +pins = ["scl", "sda"] +interface = { iface_type = "I2C", direction = "Output" } + +[[pinout]] +pins = ["mosi", "miso", "sclk"] +interface = { iface_type = "SPI", direction = "Output" } \ No newline at end of file diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/template/.cargo/config b/iron-coder-boards/Adafruit/Feather_nRF52832/template/.cargo/config new file mode 100644 index 0000000..ed10a10 --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/template/.cargo/config @@ -0,0 +1,42 @@ +# +# Cargo Configuration for the https://github.com/rp-rs/rp-hal.git repository. +# +# Copyright (c) The RP-RS Developers, 2021 +# +# You might want to make a similar file in your own repository if you are +# writing programs for Raspberry Silicon microcontrollers. +# +# This file is MIT or Apache-2.0 as per the repository README.md file +# + +[build] +# Set the default target to match the Cortex-M0+ in the RP2040 +target = "thumbv6m-none-eabi" + +# Target specific options +[target.thumbv6m-none-eabi] +# Pass some extra options to rustc, some of which get passed on to the linker. +# +# * linker argument --nmagic turns off page alignment of sections (which saves +# flash space) +# * linker argument -Tlink.x tells the linker to use link.x as the linker +# script. This is usually provided by the cortex-m-rt crate, and by default +# the version in that crate will include a file called `memory.x` which +# describes the particular memory layout for your specific chip. +# * inline-threshold=5 makes the compiler more aggressive and inlining functions +# * no-vectorize-loops turns off the loop vectorizer (seeing as the M0+ doesn't +# have SIMD) +rustflags = [ + "-C", "link-arg=--nmagic", + "-C", "link-arg=-Tlink.x", + "-C", "inline-threshold=5", + "-C", "no-vectorize-loops", +] + +# This runner will make a UF2 file and then copy it to a mounted RP2040 in USB +# Bootloader mode: +runner = "elf2uf2-rs -d" + +# This runner will find a supported SWD debug probe and flash your RP2040 over +# SWD: +# runner = "probe-run --chip RP2040" diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/template/Cargo.toml b/iron-coder-boards/Adafruit/Feather_nRF52832/template/Cargo.toml new file mode 100644 index 0000000..fdec28c --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/template/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "{{project-name}}" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +panic-halt = "0.2.0" +cortex-m-rt = "0.7.3" diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/template/memory.x b/iron-coder-boards/Adafruit/Feather_nRF52832/template/memory.x new file mode 100644 index 0000000..4077aab --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/template/memory.x @@ -0,0 +1,15 @@ +MEMORY { + BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 + FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 + RAM : ORIGIN = 0x20000000, LENGTH = 256K +} + +EXTERN(BOOT2_FIRMWARE) + +SECTIONS { + /* ### Boot loader */ + .boot2 ORIGIN(BOOT2) : + { + KEEP(*(.boot2)); + } > BOOT2 +} INSERT BEFORE .text; diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs b/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs new file mode 100644 index 0000000..24396c6 --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs @@ -0,0 +1,22 @@ +#![no_std] +#![no_main] + +/**** low-level imports *****/ +use panic_halt as _; +use cortex_m_rt::entry; + +mod system; +use system::System; + +#[entry] +fn main() -> ! { + + let mut system = System::new(); + + // init code goes here! + + loop { + // loop code goes here! + } + +} \ No newline at end of file diff --git a/src/app/mod.rs b/src/app/mod.rs index 49506e0..1d4303e 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -386,7 +386,7 @@ impl IronCoderApp { With inspirations from Arduino and CircuitPython, Iron Coder aims\n\ to provide a fun environment for embedded development." ); - ui.label("Developed by Shulltronics"); + ui.label("Developed by Shulltronics, fredward36, aidanpine"); ui.hyperlink_to("Iron Coder on Github", "https://github.com/shulltronics/iron-coder"); ui.horizontal(|ui| { egui::warn_if_debug_build(ui); From 3b0de3dc3ca0b82a455dfd373157ea569898683e Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Mon, 13 Nov 2023 20:43:31 -0500 Subject: [PATCH 06/48] Made a struct to store warnings --- src/app/mod.rs | 26 ++++++++++++++++---------- src/project/display.rs | 9 ++++----- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index e319e38..0b7a1be 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -12,7 +12,6 @@ use std::string::String; use clap::Parser; use egui::{ - Align2, Vec2, RichText, Label, @@ -51,6 +50,13 @@ pub struct IronCoderOptions { pub persistence: bool, } +// The current warning flags +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Warnings { + pub display_mainboard_warning: bool, + pub display_unnamed_project_warning: bool, +} + /// The current GUI mode #[non_exhaustive] #[derive(serde::Deserialize, serde::Serialize)] @@ -75,9 +81,7 @@ pub struct IronCoderApp { boards: Vec, options: IronCoderOptions, - // Warning Flags - display_mainboard_warning: bool, - display_unnamed_project_warning: bool, + warning_flags: Warnings, } impl Default for IronCoderApp { @@ -96,8 +100,10 @@ impl Default for IronCoderApp { colorscheme: colorscheme::INDUSTRIAL_DARK, options: IronCoderOptions::default(), // Warning Flags - display_mainboard_warning: false, - display_unnamed_project_warning: false, + warning_flags: Warnings { + display_mainboard_warning: false, + display_unnamed_project_warning: false, + }, } } } @@ -136,7 +142,7 @@ impl IronCoderApp { info!("setting ui scale to {}", scale); cc.egui_ctx.set_pixels_per_point(scale); - // Supposed to set color scheme for the app from settings.toml + // Sets the color scheme for the app from settings.toml let mut colorscheme_name = settings_string.lines().nth(1).unwrap().split("=").nth(1).unwrap().trim().to_string(); info!("setting colorscheme to {}", colorscheme_name); colorscheme_name = colorscheme_name.trim_matches('"').to_string(); @@ -325,7 +331,7 @@ impl IronCoderApp { pub fn display_project_editor(&mut self, ctx: &egui::Context) { egui::CentralPanel::default().show(ctx, |ui| { - if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.display_mainboard_warning, &mut self.display_unnamed_project_warning) { + if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.warning_flags) { self.mode = mode; } self.project.display_system_editor_boards(ctx, ui); @@ -499,7 +505,7 @@ impl IronCoderApp { // Displays the waring message that no main board has been selected for the project pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Board Warning") - .open(&mut self.display_mainboard_warning) + .open(&mut self.warning_flags.display_mainboard_warning) .collapsible(false) .resizable(false) .movable(true) @@ -510,7 +516,7 @@ impl IronCoderApp { // Displays the waring message that the project has not been named pub fn display_unnamed_project_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Name Warning") - .open(&mut self.display_unnamed_project_warning) + .open(&mut self.warning_flags.display_unnamed_project_warning) .collapsible(false) .resizable(false) .movable(true) diff --git a/src/project/display.rs b/src/project/display.rs index 65fa70f..bb8812f 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -12,8 +12,7 @@ use egui::widgets::Button; use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; -use crate::app::{Mode, self}; -use crate::IronCoderApp; +use crate::app::{Mode, Warnings}; use serde::{Serialize, Deserialize}; @@ -505,7 +504,7 @@ impl Project { /// Show the project HUD with information about the current system. Return a "Mode" so that /// the calling module (app) can update the GUI accordingly. - pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, main_board_warning: &mut bool, no_name_warning: &mut bool) -> Option { + pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, warning_flags: &mut Warnings) -> Option { // prepare the return value let mut ret: Option = None; @@ -583,10 +582,10 @@ impl Project { } else { if !self.has_main_board() { - *main_board_warning = true; + warning_flags.display_mainboard_warning = true; } if self.name == "" { - *no_name_warning = true; + warning_flags.display_unnamed_project_warning = true; } } } From 4d0571dfc7ca73e00a549506bb8cab9b5fc838da Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Mon, 13 Nov 2023 20:45:59 -0500 Subject: [PATCH 07/48] Adding settings.toml to .gitignore --- settings.toml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 settings.toml diff --git a/settings.toml b/settings.toml deleted file mode 100644 index 98e0528..0000000 --- a/settings.toml +++ /dev/null @@ -1,2 +0,0 @@ -ui_scale = 1.25 -colorscheme = "Industrial Dark" From 9b622a3cf5f434a2fc4b2da1ad00ba0bc152e819 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Mon, 13 Nov 2023 20:46:26 -0500 Subject: [PATCH 08/48] Same as previous commit message --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 53e3dbc..9b37a22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .vscode .obsidian/ tmp/ +settings.toml # for now don't track these as they constantly have breaking changes projects/ From 518d44d7cde00eb5c66c95547bb9d2e4d366f5a2 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Wed, 15 Nov 2023 11:40:29 -0500 Subject: [PATCH 09/48] Settings now apply when hittting apply button. --- src/app/mod.rs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 0b7a1be..3b1d2e6 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -365,22 +365,16 @@ impl IronCoderApp { ui.text_edit_singleline(&mut ui_scale_string); ctx.data_mut(|data| data.insert_temp(id, ui_scale_string.clone())); // if the string is parsable into f32, update the global scale - match ui_scale_string.parse::() { - Ok(scale) => { - ctx.set_pixels_per_point(scale); - }, - Err(_e) => (), - } + // Create radio buttons for colorscheme selection ui.separator(); - ui.heading("Color Scheme:"); + ui.heading("Color Scheme:"); for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { // ui.radio_value(&mut colorscheme, colorscheme::SOLARIZED_DARK, cs.name); let rb = egui::RadioButton::new(*colorscheme == cs.clone(), cs.name.clone()); if ui.add(rb).clicked() { *colorscheme = cs.clone(); - colorscheme::set_colorscheme(ctx, cs.clone()); } } @@ -431,9 +425,22 @@ impl IronCoderApp { // ctx.set_visuals(visuals); + // Create a button to apply the settings if ui.button("Apply").clicked() { - // TODO -- Read all the settings to the settings file so they take place on next startup - // TODO -- Make a settings file + // Change settings when Apply button is pressed + // Change the colorscheme + colorscheme::set_colorscheme(ctx, colorscheme.clone()); + + // Set the ui scale + match ui_scale_string.parse::() { + Ok(scale) => { + ctx.set_pixels_per_point(scale); + }, + Err(_e) => (), + } + + + // Write the settings to settings.toml let mut settings_file = match File::create("settings.toml") { Err(why) => panic!("couldn't create settings.toml: {}", why), Ok(file) => file, @@ -451,7 +458,6 @@ impl IronCoderApp { Err(why) => panic!("couldn't write to settings.toml: {}", why), Ok(_) => println!("successfully wrote to settings.toml"), } - } }); // unwrap ok here because window must be open for us to get here. From 8c86541305baad7d65478c6ee2f5909201f62e6b Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Wed, 15 Nov 2023 11:43:22 -0500 Subject: [PATCH 10/48] Removed warning message about redundant clone. --- src/app/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 3b1d2e6..c7be181 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -404,7 +404,7 @@ impl IronCoderApp { } let egui::FontId {size: _, family} = font_id; // I don't really understand this dereference syntax with the Arc... - let font_text = egui::RichText::new((&**name).clone()) + let font_text = egui::RichText::new(&**name) .family((family).clone()).size(12.0); ui.label(font_text); }, From 2cf23ea1e22e06978aa28bb24012912ec6af1254 Mon Sep 17 00:00:00 2001 From: aidanpine Date: Mon, 27 Nov 2023 16:08:50 -0500 Subject: [PATCH 11/48] Added Jacob's Changes --- .../FeatherWing_OLED_128x64/bsp/Cargo.lock | 110 +++++++++++- src/app/mod.rs | 161 ++++++++++++++++-- src/project/display.rs | 39 +++-- 3 files changed, 279 insertions(+), 31 deletions(-) diff --git a/iron-coder-boards/Adafruit/FeatherWing_OLED_128x64/bsp/Cargo.lock b/iron-coder-boards/Adafruit/FeatherWing_OLED_128x64/bsp/Cargo.lock index a7f69ed..19df944 100644 --- a/iron-coder-boards/Adafruit/FeatherWing_OLED_128x64/bsp/Cargo.lock +++ b/iron-coder-boards/Adafruit/FeatherWing_OLED_128x64/bsp/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + [[package]] name = "az" version = "1.2.1" @@ -14,6 +20,19 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "embedded-graphics" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "750082c65094fbcc4baf9ba31583ce9a8bb7f52cadfb96f6164b1bc7f922f32b" +dependencies = [ + "az", + "byteorder", + "embedded-graphics-core", + "float-cmp", + "micromath", +] + [[package]] name = "embedded-graphics-core" version = "0.3.3" @@ -35,13 +54,48 @@ dependencies = [ ] [[package]] -name = "featherwing-oled" +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "float-cmp" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4" +dependencies = [ + "num-traits", +] + +[[package]] +name = "iron-coder-featherwing-oled-bsp" version = "0.1.0" dependencies = [ "embedded-hal", - "sh1106", + "sh1107", ] +[[package]] +name = "micromath" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc4010833aea396656c2f91ee704d51a6f1329ec2ab56ffd00bfd56f7481ea94" + [[package]] name = "nb" version = "0.1.3" @@ -58,15 +112,59 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" [[package]] -name = "sh1106" -version = "0.4.0" +name = "num-traits" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4022685baa7cc82b2fb97ced2b53fd753a21d98f45b0fd0b55fc717de9075a" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ - "embedded-graphics-core", + "autocfg", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "sh1107" +version = "0.3.5" +source = "git+https://github.com/shulltronics/sh1107.git?branch=embedded-graphics-fix#b0617e8fa27f977d8710fd00ca3895c82b559781" +dependencies = [ + "embedded-graphics", "embedded-hal", + "enum-iterator", ] +[[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 = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + [[package]] name = "void" version = "1.0.2" diff --git a/src/app/mod.rs b/src/app/mod.rs index 1d4303e..d1577d1 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -4,11 +4,14 @@ use log::{error, warn, info}; use std::path::{Path, PathBuf}; use std::sync::Arc; +use std::fs::File; +use std::io::Write; +use std::io::Read; +use std::string::String; use clap::Parser; use egui::{ - Align2, Vec2, RichText, Label, @@ -47,6 +50,13 @@ pub struct IronCoderOptions { pub persistence: bool, } +// The current warning flags +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Warnings { + pub display_mainboard_warning: bool, + pub display_unnamed_project_warning: bool, +} + /// The current GUI mode #[non_exhaustive] #[derive(serde::Deserialize, serde::Serialize)] @@ -70,6 +80,8 @@ pub struct IronCoderApp { #[serde(skip)] boards: Vec, options: IronCoderOptions, + + warning_flags: Warnings, } impl Default for IronCoderApp { @@ -87,6 +99,11 @@ impl Default for IronCoderApp { boards: boards, colorscheme: colorscheme::INDUSTRIAL_DARK, options: IronCoderOptions::default(), + // Warning Flags + warning_flags: Warnings { + display_mainboard_warning: false, + display_unnamed_project_warning: false, + }, } } } @@ -94,6 +111,7 @@ impl Default for IronCoderApp { impl IronCoderApp { /// Called once before the first frame. pub fn with_options(cc: &eframe::CreationContext<'_>, options: IronCoderOptions) -> Self { + info!("welcome to Iron Coder! setting up initial app state..."); // we mutate cc.egui_ctx (the context) to set the overall app style setup_fonts_and_style(&cc.egui_ctx); @@ -105,6 +123,41 @@ impl IronCoderApp { app = eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default(); } } + + // Load settings from settings.toml if it exists + info!("reading settings and applying to app state..."); + let mut settings_file = match File::open("settings.toml") { + Err(why) => panic!("couldn't open settings.toml: {}", why), + Ok(file) => file, + }; + + let mut settings_string = String::new(); + match settings_file.read_to_string(&mut settings_string) { + Err(why) => panic!("couldn't read settings.toml: {}", why), + Ok(_) => print!("settings.toml contains:\n{}", settings_string), + } + + if (settings_string != "") { + // Sets the scale for the app from settings.toml + let scale = settings_string.lines().nth(0).unwrap().split("=").nth(1).unwrap().trim().parse::().unwrap(); + info!("setting ui scale to {}", scale); + cc.egui_ctx.set_pixels_per_point(scale); + + + // Sets the color scheme for the app from settings.toml + let mut colorscheme_name = settings_string.lines().nth(1).unwrap().split("=").nth(1).unwrap().trim().to_string(); + info!("setting colorscheme to {}", colorscheme_name); + colorscheme_name = colorscheme_name.trim_matches('"').to_string(); + let mut colorscheme = colorscheme::INDUSTRIAL_DARK; + for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { + if cs.name == colorscheme_name { + colorscheme = cs.clone(); + } + } + app.colorscheme = colorscheme.clone(); + colorscheme::set_colorscheme(&cc.egui_ctx, colorscheme.clone()); + } + app.options = options; info!("Reloading current project and assets..."); app.set_colorscheme(&cc.egui_ctx); @@ -281,7 +334,7 @@ impl IronCoderApp { pub fn display_project_editor(&mut self, ctx: &egui::Context) { egui::CentralPanel::default().show(ctx, |ui| { - if let Some(mode) = self.project.display_system_editor_hud(ctx, ui) { + if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.warning_flags) { self.mode = mode; } self.project.display_system_editor_boards(ctx, ui); @@ -302,11 +355,11 @@ impl IronCoderApp { .open(display_settings) .collapsible(false) .resizable(false) - .movable(false) - .anchor(Align2::CENTER_CENTER, [0.0, 0.0]) + .movable(true) .show(ctx, |ui| { // Store the text edit string representing the ui scale + ui.heading("Font Size:"); let id = egui::Id::new("ui_scale_string"); let current_scale = ctx.pixels_per_point(); let mut ui_scale_string: String = ctx.data_mut(|data| { @@ -315,24 +368,35 @@ impl IronCoderApp { ui.text_edit_singleline(&mut ui_scale_string); ctx.data_mut(|data| data.insert_temp(id, ui_scale_string.clone())); // if the string is parsable into f32, update the global scale - match ui_scale_string.parse::() { - Ok(scale) => { - ctx.set_pixels_per_point(scale); - }, - Err(_e) => (), - } + // Create radio buttons for colorscheme selection + ui.separator(); + ui.heading("Color Scheme:"); for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { // ui.radio_value(&mut colorscheme, colorscheme::SOLARIZED_DARK, cs.name); let rb = egui::RadioButton::new(*colorscheme == cs.clone(), cs.name.clone()); if ui.add(rb).clicked() { *colorscheme = cs.clone(); - colorscheme::set_colorscheme(ctx, cs.clone()); } } // create a font selector: + ui.separator(); + ui.heading("Font Selector:"); + // Tried working on selecotr box for fonts + // Need to figure out how fonts are configured before continuing + // Used example here: https://github.com/emilk/egui/blob/master/examples/user_attention/src/main.rs + // + // eframe::egui::ComboBox::new("","") + // .show_ui(ui, |ui| { + // for font in [ + + // ] { + // ui.selectable_value(&mut colorscheme, font, font); + // } + // }); + for (text_style, font_id) in ctx.style().text_styles.iter() { match text_style { egui::TextStyle::Name(name) => { @@ -343,7 +407,7 @@ impl IronCoderApp { } let egui::FontId {size: _, family} = font_id; // I don't really understand this dereference syntax with the Arc... - let font_text = egui::RichText::new((&**name).clone()) + let font_text = egui::RichText::new(&**name) .family((family).clone()).size(12.0); ui.label(font_text); }, @@ -357,7 +421,47 @@ impl IronCoderApp { _ => (), } } + + ui.separator(); + ui.heading("Account Settings:"); + ui.label("Add github account here."); // ctx.set_visuals(visuals); + + + // Create a button to apply the settings + if ui.button("Apply").clicked() { + // Change settings when Apply button is pressed + // Change the colorscheme + colorscheme::set_colorscheme(ctx, colorscheme.clone()); + + // Set the ui scale + match ui_scale_string.parse::() { + Ok(scale) => { + ctx.set_pixels_per_point(scale); + }, + Err(_e) => (), + } + + + // Write the settings to settings.toml + let mut settings_file = match File::create("settings.toml") { + Err(why) => panic!("couldn't create settings.toml: {}", why), + Ok(file) => file, + }; + + let mut settings_string = String::new(); + settings_string.push_str("ui_scale = "); + settings_string.push_str(&ui_scale_string); + settings_string.push_str("\n"); + settings_string.push_str("colorscheme = \""); + settings_string.push_str(&colorscheme.name); + settings_string.push_str("\"\n"); + + match settings_file.write_all(settings_string.as_bytes()) { + Err(why) => panic!("couldn't write to settings.toml: {}", why), + Ok(_) => println!("successfully wrote to settings.toml"), + } + } }); // unwrap ok here because window must be open for us to get here. // ctx.move_to_top(window_response.unwrap().response.layer_id); @@ -378,15 +482,17 @@ impl IronCoderApp { .open(display_about) .collapsible(false) .resizable(false) - .movable(false) - .anchor(Align2::CENTER_CENTER, [0.0, 0.0]) + .movable(true) .show(ctx, |ui| { + ui.label("Iron Coder Version: 0.2.0"); + ui.separator(); ui.label( "Iron Coder is an app for practicing embedded Rust development.\n\ With inspirations from Arduino and CircuitPython, Iron Coder aims\n\ to provide a fun environment for embedded development." ); - ui.label("Developed by Shulltronics, fredward36, aidanpine"); + ui.separator(); + ui.label("Developed by Shulltronics"); ui.hyperlink_to("Iron Coder on Github", "https://github.com/shulltronics/iron-coder"); ui.horizontal(|ui| { egui::warn_if_debug_build(ui); @@ -404,6 +510,29 @@ impl IronCoderApp { }); }); } + + // Displays the waring message that no main board has been selected for the project + pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context) { + egui::Window::new("Board Warning") + .open(&mut self.warning_flags.display_mainboard_warning) + .collapsible(false) + .resizable(false) + .movable(true) + .show(ctx, |ui| { + ui.label("please select a main board to proceed."); + }); + } + // Displays the waring message that the project has not been named + pub fn display_unnamed_project_warning(&mut self, ctx: &egui::Context) { + egui::Window::new("Name Warning") + .open(&mut self.warning_flags.display_unnamed_project_warning) + .collapsible(false) + .resizable(false) + .movable(true) + .show(ctx, |ui| { + ui.label("please name the project to proceed."); + }); + } } impl eframe::App for IronCoderApp { @@ -436,6 +565,8 @@ impl eframe::App for IronCoderApp { // optionally render these popup windows self.display_settings_window(ctx); self.display_about_window(ctx); + self.unselected_mainboard_warning(ctx); + self.display_unnamed_project_warning(ctx); } } diff --git a/src/project/display.rs b/src/project/display.rs index dff32d6..bb8812f 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -12,7 +12,7 @@ use egui::widgets::Button; use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; -use crate::app::Mode; +use crate::app::{Mode, Warnings}; use serde::{Serialize, Deserialize}; @@ -504,7 +504,7 @@ impl Project { /// Show the project HUD with information about the current system. Return a "Mode" so that /// the calling module (app) can update the GUI accordingly. - pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui) -> Option { + pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, warning_flags: &mut Warnings) -> Option { // prepare the return value let mut ret: Option = None; @@ -560,13 +560,33 @@ impl Project { .frame(false); let mut cui = ui.child_ui(top_hud_rect, egui::Layout::right_to_left(egui::Align::Center)); if cui.add(start_dev_button).clicked() { - match self.save() { - Ok(()) => { - ret = Some(Mode::DevelopProject); - }, - Err(e) => { - warn!("couldn't save project: {:?}", e); - }, + if self.has_main_board() && self.name != "" { + match self.save() { + Ok(()) => { + ret = Some(Mode::DevelopProject); + }, + Err(e) => { + warn!("couldn't save project: {:?}", e); + }, + } + // generate template code on initialization of project + info!("generating project template"); + match self.generate_cargo_template(ctx) { + Ok(()) => { + info!("generate_cargo_template returned Ok(())."); + }, + Err(e) => { + warn!("generate_cargo_template returned error: {:?}", e); + }, + } + } + else { + if !self.has_main_board() { + warning_flags.display_mainboard_warning = true; + } + if self.name == "" { + warning_flags.display_unnamed_project_warning = true; + } } } @@ -579,7 +599,6 @@ impl Project { // let painter = ui.painter(); // let rect = ui.min_rect(); // painter.rect(rect, egui::Rounding::none(), egui::Color32::TRANSPARENT, egui::Stroke::new(2.0, egui::Color32::GOLD)); - return ret; } From bb72cfd61716f519499fe0d18f061577957c3444 Mon Sep 17 00:00:00 2001 From: aidanpine Date: Mon, 27 Nov 2023 16:09:59 -0500 Subject: [PATCH 12/48] Added Jacob's Changes --- settings.toml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 settings.toml diff --git a/settings.toml b/settings.toml new file mode 100644 index 0000000..98e0528 --- /dev/null +++ b/settings.toml @@ -0,0 +1,2 @@ +ui_scale = 1.25 +colorscheme = "Industrial Dark" From 67683db1261a83f3c9801942d686c200a68880ba Mon Sep 17 00:00:00 2001 From: aidanpine Date: Mon, 27 Nov 2023 16:23:20 -0500 Subject: [PATCH 13/48] Added Jacob's Changes --- .../Feather_nRF52832/feather_nRF52832.svg | 152 ++++++++---------- 1 file changed, 67 insertions(+), 85 deletions(-) diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg index fe92096..1666fee 100644 --- a/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/feather_nRF52832.svg @@ -6,13 +6,12 @@ id="svg1" width="39.85265mm" height="89.634918mm" - viewBox="0 0 237.60001 534.40004" - sodipodi:docname="feather_nRF52832.png" + viewBox="0 0 39.85265 89.634918" + sodipodi:docname="feather_nRF52832.svg" inkscape:export-filename="feather_nRF52832.svg" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.3 (0e150ed6c4, 2023-07-21)" - inkscape:dataloss="true" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -29,90 +28,73 @@ inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" - inkscape:zoom="1.4895209" - inkscape:cx="28.196986" - inkscape:cy="161.79699" - inkscape:window-width="1920" - inkscape:window-height="992" - inkscape:window-x="-8" - inkscape:window-y="-8" + inkscape:zoom="2.9790418" + inkscape:cx="68.478395" + inkscape:cy="94.66131" + inkscape:window-width="1918" + inkscape:window-height="1147" + inkscape:window-x="0" + inkscape:window-y="0" inkscape:window-maximized="1" - inkscape:current-layer="layer1" + inkscape:current-layer="svg1" inkscape:document-units="mm" /> + - - - - - - - - + id="pins" + inkscape:label="pins"> + + + + From 78768610b4c8003b56b778207c45a845c0309fb4 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Tue, 9 Jan 2024 13:14:06 -0500 Subject: [PATCH 14/48] If settings folder is blank, then load default --- src/app/mod.rs | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index c7be181..d1577d1 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -137,23 +137,26 @@ impl IronCoderApp { Ok(_) => print!("settings.toml contains:\n{}", settings_string), } - // Sets the scale for the app from settings.toml - let scale = settings_string.lines().nth(0).unwrap().split("=").nth(1).unwrap().trim().parse::().unwrap(); - info!("setting ui scale to {}", scale); - cc.egui_ctx.set_pixels_per_point(scale); - - // Sets the color scheme for the app from settings.toml - let mut colorscheme_name = settings_string.lines().nth(1).unwrap().split("=").nth(1).unwrap().trim().to_string(); - info!("setting colorscheme to {}", colorscheme_name); - colorscheme_name = colorscheme_name.trim_matches('"').to_string(); - let mut colorscheme = colorscheme::INDUSTRIAL_DARK; - for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { - if cs.name == colorscheme_name { - colorscheme = cs.clone(); + if (settings_string != "") { + // Sets the scale for the app from settings.toml + let scale = settings_string.lines().nth(0).unwrap().split("=").nth(1).unwrap().trim().parse::().unwrap(); + info!("setting ui scale to {}", scale); + cc.egui_ctx.set_pixels_per_point(scale); + + + // Sets the color scheme for the app from settings.toml + let mut colorscheme_name = settings_string.lines().nth(1).unwrap().split("=").nth(1).unwrap().trim().to_string(); + info!("setting colorscheme to {}", colorscheme_name); + colorscheme_name = colorscheme_name.trim_matches('"').to_string(); + let mut colorscheme = colorscheme::INDUSTRIAL_DARK; + for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { + if cs.name == colorscheme_name { + colorscheme = cs.clone(); + } } + app.colorscheme = colorscheme.clone(); + colorscheme::set_colorscheme(&cc.egui_ctx, colorscheme.clone()); } - app.colorscheme = colorscheme.clone(); - colorscheme::set_colorscheme(&cc.egui_ctx, colorscheme.clone()); app.options = options; info!("Reloading current project and assets..."); From 6d6b11e2426f7058eb3124967dc8b99334774bcf Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Tue, 16 Jan 2024 14:23:51 -0500 Subject: [PATCH 15/48] Added git2 crate and projects intialize with git --- Cargo.lock | 80 ++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 3 ++ src/app/mod.rs | 2 +- src/project/mod.rs | 6 ++++ 4 files changed, 90 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 3797ee5..0b98841 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1310,6 +1310,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "git2" +version = "0.13.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29229cc1b24c0e6062f6e742aa3e256492a5323365e5ed3413599f8a5eff7d6" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -1617,6 +1632,7 @@ dependencies = [ "egui_extras", "enum-iterator", "fs_extra", + "git2", "image", "log", "prettyplease", @@ -1775,6 +1791,20 @@ version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +[[package]] +name = "libgit2-sys" +version = "0.12.26+1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e1c899248e606fbfe68dcb31d8b0176ebab833b103824af31bddf4b7457494" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + [[package]] name = "libloading" version = "0.7.4" @@ -1795,6 +1825,32 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libssh2-sys" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "line-index" version = "0.1.0" @@ -2269,6 +2325,24 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "orbclient" version = "0.3.45" @@ -4185,6 +4259,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index ecc9459..0b9b984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,3 +35,6 @@ prettyplease = "0.2.10" slotmap = "1.0.6" clap = { version = "4.3.19", features = ["derive"] } usvg = "0.35.0" +git2 = "0.13.17" + + diff --git a/src/app/mod.rs b/src/app/mod.rs index 9ad7806..3b27bc8 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -137,7 +137,7 @@ impl IronCoderApp { Ok(_) => print!("settings.toml contains:\n{}", settings_string), } - if (settings_string != "") { + if settings_string != "" { // Sets the scale for the app from settings.toml let scale = settings_string.lines().nth(0).unwrap().split("=").nth(1).unwrap().trim().parse::().unwrap(); info!("setting ui scale to {}", scale); diff --git a/src/project/mod.rs b/src/project/mod.rs index 576a1ba..66138af 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -26,6 +26,8 @@ pub mod egui_helpers; mod system; use system::System; +use git2::Repository; + const PROJECT_FILE_NAME: &'static str = ".ironcoder.toml"; pub type Result = core::result::Result<(), ProjectIOError>; @@ -342,6 +344,10 @@ impl Project { } else { return Err(ProjectIOError::NoMainBoard); } + let _repo = match Repository::init(self.get_location()) { + Ok(_repo) => _repo, + Err(e) => panic!("failed to init: {}", e), + }; Ok(()) } From 831fdf0a2edd75d9916b5b6b5dac12d88d5fb547 Mon Sep 17 00:00:00 2001 From: EpicMealNinja Date: Fri, 19 Jan 2024 14:51:14 -0500 Subject: [PATCH 16/48] Added repo to project struct --- src/project/mod.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/project/mod.rs b/src/project/mod.rs index 66138af..88747c7 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -61,6 +61,8 @@ pub struct Project { current_view: ProjectViewType, #[serde(skip)] pub known_boards: Vec, + #[serde(skip)] + repo: Option, } // backend functionality for Project struct @@ -168,6 +170,12 @@ impl Project { self.current_view = p.current_view; // sync the assets with the global ones self.load_board_resources(); + // Open the repo in the project directory + self.repo = match Repository::open(self.get_location()) { + Ok(repo) => Some(repo), + Err(e) => panic!("Failed to open: {}", e), + }; + Ok(()) } @@ -344,10 +352,12 @@ impl Project { } else { return Err(ProjectIOError::NoMainBoard); } - let _repo = match Repository::init(self.get_location()) { - Ok(_repo) => _repo, - Err(e) => panic!("failed to init: {}", e), + // Create a repo to store code + self.repo = match Repository::init(self.get_location()) { + Ok(repo) => Some(repo), + Err(e) => panic!("Failed to init: {}", e), }; + Ok(()) } From 6dcf56ef97cf1b142c5372dcbd6f940d69de92c0 Mon Sep 17 00:00:00 2001 From: aidanpine Date: Mon, 22 Jan 2024 14:59:05 -0500 Subject: [PATCH 17/48] Added Saving and Keybind Functionality --- Cargo.lock | 19 +++++++++++++++++++ Cargo.toml | 4 +++- src/app/mod.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++-- src/project/mod.rs | 2 ++ 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3797ee5..10cf306 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1618,6 +1618,7 @@ dependencies = [ "enum-iterator", "fs_extra", "image", + "k_board", "log", "prettyplease", "proc-macro2", @@ -1625,6 +1626,7 @@ dependencies = [ "ra_ap_ide", "ra_ap_rust-analyzer", "rfd", + "savefile-derive", "serde", "slotmap", "syn 2.0.27", @@ -1716,6 +1718,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "k_board" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e2d301ff74526f34b9d912ff99fe7896ad94582ffa44162229bd919f087666" + [[package]] name = "khronos_api" version = "3.1.0" @@ -3398,6 +3406,17 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "savefile-derive" +version = "0.16.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a4c5bd5525edb4cb83fb0febff5aee308053554a765a745856bd59c65d573f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "scip" version = "0.1.1" diff --git a/Cargo.toml b/Cargo.toml index 7228767..6ffc32b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,4 +34,6 @@ proc-macro2 = "1.0.64" prettyplease = "0.2.10" slotmap = "1.0.6" clap = { version = "4.3.19", features = ["derive"] } -usvg = "0.35.0" \ No newline at end of file +usvg = "0.35.0" +savefile-derive = "0.16.4" +k_board = "1.2.2" diff --git a/src/app/mod.rs b/src/app/mod.rs index d1577d1..0e1d8b9 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -8,15 +8,17 @@ use std::fs::File; use std::io::Write; use std::io::Read; use std::string::String; - use clap::Parser; - use egui::{ Vec2, RichText, Label, Color32, + Key, + Modifiers, + KeyboardShortcut }; +use fs_extra::dir::DirEntryAttr::Modified; // use egui_modal::Modal; @@ -567,6 +569,46 @@ impl eframe::App for IronCoderApp { self.display_about_window(ctx); self.unselected_mainboard_warning(ctx); self.display_unnamed_project_warning(ctx); + + let save_shortcut = KeyboardShortcut::new(Modifiers::CTRL, Key::S); + let quit_shortcut = KeyboardShortcut::new(Modifiers::CTRL, Key::Q); + let open_shortcut = KeyboardShortcut::new(Modifiers::CTRL, Key::O); + let new_shortcut = KeyboardShortcut::new(Modifiers::CTRL, Key::N); + + if ctx.input_mut(|i| i.consume_shortcut(&save_shortcut)) { + if let Err(e) = self.project.save() { + error!("error saving project: {:?}", e); + } + } + + if ctx.input_mut(|i| i.consume_shortcut(&quit_shortcut)) { + frame.close(); + } + + if ctx.input_mut(|i| i.consume_shortcut(&open_shortcut)) { + match self.project.open() { + Ok(_) => { + self.mode = Mode::DevelopProject; + }, + Err(e) => { + error!("error opening project: {:?}", e); + }, + } + } + + if ctx.input_mut(|i| i.consume_shortcut(&new_shortcut)) { + match self.mode { + Mode::EditProject => (), + Mode::DevelopProject => { + // TODO -- add a popup here confirming that user + // wants to leave the current project, and probably save + // the project in it's current state. + self.project = Project::default(); + self.project.known_boards = self.boards.clone(); + self.mode = Mode::EditProject; + }, + } + } } } diff --git a/src/project/mod.rs b/src/project/mod.rs index 576a1ba..7925040 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -232,6 +232,8 @@ impl Project { warn!("couldn't save project to toml file!! {:?}", e); } } + + self.code_editor.save_all().unwrap_or_else(|_| warn!("error saving tabs!")); Ok(()) } } From 4f2a9b424c28b6ef50a0d7e37435c0126ea43424 Mon Sep 17 00:00:00 2001 From: Fredy Jose Castaneda Date: Mon, 22 Jan 2024 20:53:31 -0500 Subject: [PATCH 18/48] Added blinky rust file and flash support for RP2040 --- Cargo.lock | 1817 ++++++++++++++++- Cargo.toml | 5 +- .../Feather_RP2040/template/.cargo/config | 2 +- .../Feather_RP2040/template/.gitignore | 2 + .../Feather_RP2040/template/Cargo.toml | 14 +- .../Feather_RP2040/template/README.md | 7 + .../Feather_RP2040/template/src/main.rs | 54 +- src/project/mod.rs | 33 + 8 files changed, 1826 insertions(+), 108 deletions(-) create mode 100644 iron-coder-boards/Adafruit/Feather_RP2040/template/.gitignore create mode 100644 iron-coder-boards/Adafruit/Feather_RP2040/template/README.md diff --git a/Cargo.lock b/Cargo.lock index 3797ee5..8061811 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,6 +28,18 @@ dependencies = [ "serde", ] +[[package]] +name = "adafruit-feather-rp2040" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600aa82d1316cf5b3a9d9f008a025fb0ea9e33669054d36f69baf24c08f9babd" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "rp2040-boot2", + "rp2040-hal 0.8.2", +] + [[package]] name = "adler" version = "1.0.2" @@ -41,11 +53,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", + "const-random", + "getrandom", "once_cell", "serde", "version_check", ] +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655" +dependencies = [ + "as-slice", +] + [[package]] name = "always-assert" version = "0.1.3" @@ -81,16 +113,15 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] @@ -120,12 +151,12 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -140,6 +171,12 @@ version = "1.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1f8f5a6f3d50d89e3797d7593a50f96bb2aaa20ca0cc7be1fb673232c91d72" +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + [[package]] name = "arboard" version = "3.2.0" @@ -170,6 +207,15 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "async-io" version = "1.13.0" @@ -217,12 +263,32 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31" +[[package]] +name = "auth-git2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e7771d4ab6635cbd685ce8db215b29c78a468098126de77c57f3b2e6eb3757" +dependencies = [ + "dirs", + "git2", + "terminal-prompt", +] + [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version", +] + [[package]] name = "base64" version = "0.13.1" @@ -250,6 +316,12 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + [[package]] name = "bitflags" version = "1.3.2" @@ -258,9 +330,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "block" @@ -268,6 +340,15 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[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 = "block-sys" version = "0.1.0-beta.1" @@ -287,6 +368,26 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "bstr" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + [[package]] name = "bumpalo" version = "3.13.0" @@ -358,6 +459,46 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo-generate" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c1b6f44358912a9538fa3b6ac8d3aa3f585444f9dc32f12ed85d1545a9df9f" +dependencies = [ + "anyhow", + "auth-git2", + "clap", + "console", + "dialoguer", + "env_logger", + "fs-err", + "git2", + "gix-config", + "heck 0.4.1", + "home", + "ignore", + "indexmap 2.0.0", + "indicatif", + "liquid", + "liquid-core", + "liquid-derive", + "liquid-lib", + "log", + "names", + "paste", + "path-absolutize", + "regex", + "remove_dir_all", + "rhai", + "sanitize-filename", + "semver 1.0.18", + "serde", + "tempfile", + "thiserror", + "toml 0.8.2", + "walkdir", +] + [[package]] name = "cargo-platform" version = "0.1.3" @@ -375,7 +516,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver", + "semver 1.0.18", "serde", "serde_json", "thiserror", @@ -481,20 +622,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.19" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.19" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" dependencies = [ "anstream", "anstyle", @@ -504,9 +644,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -516,9 +656,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clipboard-win" @@ -603,6 +743,39 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -643,6 +816,38 @@ dependencies = [ "libc", ] +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield", + "embedded-hal 0.2.7", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee84e813d593101b1723e13ec38b6ab6abbdbaaa4546553f5395ed274079ddb1" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f6f3e36f203cfedbc78b357fb28730aa2c6dc1ab060ee5c2405e843988d3c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "countme" version = "3.0.1" @@ -660,6 +865,24 @@ version = "2.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d48d8f76bd9331f19fe2aaf3821a9f9fb32c3963e1e3d6ce82a8c09cef7444a" +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc-any" +version = "2.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01a5e1f881f6fb6099a7bdf949e946719fd4f1fefa56264890574febf0eb6d0" +dependencies = [ + "debug-helper", +] + [[package]] name = "crc32fast" version = "1.3.2" @@ -669,6 +892,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + [[package]] name = "crossbeam-channel" version = "0.5.8" @@ -718,6 +947,25 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cvt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ae9bf77fbf2d39ef573205d554d87e86c12f1994e9ea335b0651b9b278bcf1" +dependencies = [ + "cfg-if", +] + [[package]] name = "dashmap" version = "5.4.0" @@ -737,6 +985,35 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" +[[package]] +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + +[[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 = "directories-next" version = "2.0.0" @@ -747,6 +1024,27 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -779,6 +1077,12 @@ dependencies = [ "libloading 0.8.0", ] +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "dot" version = "0.1.4" @@ -924,6 +1228,41 @@ dependencies = [ "serde", ] +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2894bc2f0457b8ca3d6b8ab8aad64d9337583672494013457f86c5a9146c0e22" + +[[package]] +name = "embedded-hal-nb" +version = "1.0.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257e3bb0163c69195acb0ebe0083b017b963235861d5ea9741626abdc55f39c9" +dependencies = [ + "embedded-hal 1.0.0-rc.1", + "nb 1.1.0", +] + [[package]] name = "ena" version = "0.14.2" @@ -933,6 +1272,12 @@ dependencies = [ "log", ] +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "enum-iterator" version = "1.4.1" @@ -964,6 +1309,19 @@ dependencies = [ "syn 2.0.27", ] +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + [[package]] name = "epaint" version = "0.22.0" @@ -990,23 +1348,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1041,6 +1388,15 @@ dependencies = [ "zune-inflate", ] +[[package]] +name = "faster-hex" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" +dependencies = [ + "serde", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -1050,6 +1406,12 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "fdeflate" version = "0.3.0" @@ -1160,29 +1522,100 @@ dependencies = [ ] [[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "fsevent-sys" -version = "4.1.0" +name = "frunk" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287" dependencies = [ - "libc", + "frunk_core", + "frunk_derives", ] [[package]] -name = "fst" -version = "0.4.7" +name = "frunk_core" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" +checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6" [[package]] -name = "futures-core" -version = "0.3.28" +name = "frunk_derives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" +dependencies = [ + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.27", +] + +[[package]] +name = "frunk_proc_macro_helpers" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c" +dependencies = [ + "frunk_core", + "proc-macro2", + "quote", + "syn 2.0.27", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs_at" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982f82cc75107eef84f417ad6c53ae89bf65b561937ca4a3b3b0fd04d0aa2425" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "libc", + "nix 0.26.2", + "windows-sys 0.48.0", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" + +[[package]] +name = "fugit" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" +dependencies = [ + "gcd", +] + +[[package]] +name = "futures-core" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" @@ -1198,7 +1631,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1234,6 +1667,12 @@ dependencies = [ "slab", ] +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + [[package]] name = "gdk-pixbuf-sys" version = "0.16.3" @@ -1264,6 +1703,36 @@ dependencies = [ "system-deps", ] +[[package]] +name = "generate" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726016a4c116c1946e331dcf5fc3632ec0e68e43d7ca04c9b2404b74b1479421" +dependencies = [ + "generate-derive", +] + +[[package]] +name = "generate-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e140c401f7f5d92a02bce5991e02393c1dd52b43c24ab86793ab7ebc171400d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "gethostname" version = "0.2.3" @@ -1310,6 +1779,240 @@ dependencies = [ "winapi", ] +[[package]] +name = "git2" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf97ba92db08df386e10c8ede66a2a0369bd277090afd8710e19e38de9ec0cd" +dependencies = [ + "bitflags 2.4.2", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + +[[package]] +name = "gix-actor" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417" +dependencies = [ + "bstr", + "btoi", + "gix-date", + "itoa", + "thiserror", + "winnow", +] + +[[package]] +name = "gix-config" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0341471d55d8676e98b88e121d7065dfa4c9c5acea4b6d6ecdd2846e85cce0c3" +dependencies = [ + "bstr", + "gix-config-value", + "gix-features", + "gix-glob", + "gix-path", + "gix-ref", + "gix-sec", + "memchr", + "once_cell", + "smallvec", + "thiserror", + "unicode-bom", + "winnow", +] + +[[package]] +name = "gix-config-value" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e0be46f4cf1f8f9e88d0e3eb7b29718aff23889563249f379119bd1ab6910e" +dependencies = [ + "bitflags 2.4.2", + "bstr", + "gix-path", + "libc", + "thiserror", +] + +[[package]] +name = "gix-date" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb7f3dfb72bebe3449b5e642be64e3c6ccbe9821c8b8f19f487cf5bfbbf4067e" +dependencies = [ + "bstr", + "itoa", + "thiserror", + "time", +] + +[[package]] +name = "gix-features" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2" +dependencies = [ + "gix-hash", + "gix-trace", + "libc", + "prodash", + "sha1_smol", + "walkdir", +] + +[[package]] +name = "gix-fs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107" +dependencies = [ + "gix-features", +] + +[[package]] +name = "gix-glob" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19" +dependencies = [ + "bitflags 2.4.2", + "bstr", + "gix-features", + "gix-path", +] + +[[package]] +name = "gix-hash" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0" +dependencies = [ + "faster-hex", + "thiserror", +] + +[[package]] +name = "gix-lock" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5c65e6a29830a435664891ced3f3c1af010f14900226019590ee0971a22f37" +dependencies = [ + "gix-tempfile", + "gix-utils", + "thiserror", +] + +[[package]] +name = "gix-object" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33" +dependencies = [ + "bstr", + "btoi", + "gix-actor", + "gix-date", + "gix-features", + "gix-hash", + "gix-validate", + "itoa", + "smallvec", + "thiserror", + "winnow", +] + +[[package]] +name = "gix-path" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dd0998ab245f33d40ca2267e58d542fe54185ebd1dc41923346cf28d179fb6" +dependencies = [ + "bstr", + "gix-trace", + "home", + "once_cell", + "thiserror", +] + +[[package]] +name = "gix-ref" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2069adc212cf7f3317ef55f6444abd06c50f28479dbbac5a86acf3b05cbbfe" +dependencies = [ + "gix-actor", + "gix-date", + "gix-features", + "gix-fs", + "gix-hash", + "gix-lock", + "gix-object", + "gix-path", + "gix-tempfile", + "gix-validate", + "memmap2 0.9.3", + "thiserror", + "winnow", +] + +[[package]] +name = "gix-sec" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78f6dce0c6683e2219e8169aac4b1c29e89540a8262fef7056b31d80d969408c" +dependencies = [ + "bitflags 2.4.2", + "gix-path", + "libc", + "windows 0.52.0", +] + +[[package]] +name = "gix-tempfile" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23" +dependencies = [ + "gix-fs", + "libc", + "once_cell", + "parking_lot 0.12.1", + "tempfile", +] + +[[package]] +name = "gix-trace" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b202d766a7fefc596e2cc6a89cda8ad8ad733aed82da635ac120691112a9b1" + +[[package]] +name = "gix-utils" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de6225e2de30b6e9bca2d9f1cc4731640fcef0fb3cabddceee366e7e85d3e94f" +dependencies = [ + "fastrand 2.0.1", +] + +[[package]] +name = "gix-validate" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac7cc36f496bd5d96cdca0f9289bb684480725d40db60f48194aa7723b883854" +dependencies = [ + "bstr", + "thiserror", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -1331,6 +2034,19 @@ dependencies = [ "system-deps", ] +[[package]] +name = "globset" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + [[package]] name = "glow" version = "0.12.3" @@ -1508,6 +2224,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "idna" version = "0.4.0" @@ -1518,6 +2240,23 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + [[package]] name = "image" version = "0.24.6" @@ -1561,6 +2300,20 @@ checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ "equivalent", "hashbrown 0.14.0", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", ] [[package]] @@ -1606,10 +2359,29 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "iron-coder-feather-rp2040-bsp" +version = "0.1.0" +dependencies = [ + "adafruit-feather-rp2040", + "cortex-m", + "critical-section", + "embedded-hal 0.2.7", + "fugit", + "rp2040-hal 0.9.1", + "rtt-target", + "shared-bus", + "smart-leds", + "usb-device", + "usbd-serial", + "ws2812-pio", +] + [[package]] name = "iron_coder" version = "0.2.0" dependencies = [ + "cargo-generate", "clap", "duct", "eframe", @@ -1617,7 +2389,9 @@ dependencies = [ "egui_extras", "enum-iterator", "fs_extra", + "generate", "image", + "iron-coder-feather-rp2040-bsp", "log", "prettyplease", "proc-macro2", @@ -1629,7 +2403,7 @@ dependencies = [ "slotmap", "syn 2.0.27", "syntect", - "toml", + "toml 0.7.6", "tracing", "tracing-subscriber", "usvg", @@ -1642,7 +2416,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi", - "rustix 0.38.4", + "rustix 0.38.30", "windows-sys 0.48.0", ] @@ -1742,6 +2516,16 @@ dependencies = [ "libc", ] +[[package]] +name = "kstring" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747" +dependencies = [ + "serde", + "static_assertions", +] + [[package]] name = "kurbo" version = "0.9.5" @@ -1771,9 +2555,23 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libgit2-sys" +version = "0.16.1+1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2a2bb3680b094add03bb3732ec520ece34da31a8cd2d633d1389d0f0fb60d0c" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] [[package]] name = "libloading" @@ -1795,6 +2593,32 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libssh2-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "line-index" version = "0.1.0" @@ -1827,10 +2651,67 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] -name = "linux-raw-sys" -version = "0.4.3" +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "liquid" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f68ae1011499ae2ef879f631891f21c78e309755f4a5e483c4a8f12e10b609" +dependencies = [ + "doc-comment", + "liquid-core", + "liquid-derive", + "liquid-lib", + "serde", +] + +[[package]] +name = "liquid-core" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e0724dfcaad5cfb7965ea0f178ca0870b8d7315178f4a7179f5696f7f04d5f" +dependencies = [ + "anymap2", + "itertools", + "kstring", + "liquid-derive", + "num-traits", + "pest", + "pest_derive", + "regex", + "serde", + "time", +] + +[[package]] +name = "liquid-derive" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2fb41a9bb4257a3803154bdf7e2df7d45197d1941c9b1a90ad815231630721" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.27", +] + +[[package]] +name = "liquid-lib" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "e2a17e273a6fb1fb6268f7a5867ddfd0bd4683c7e19b51084f3d567fad4348c0" +dependencies = [ + "itertools", + "liquid-core", + "once_cell", + "percent-encoding", + "regex", + "time", + "unicode-segmentation", +] [[package]] name = "lock_api" @@ -1884,9 +2765,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memmap2" @@ -1906,6 +2787,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.6.5" @@ -1970,6 +2860,15 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand", +] + [[package]] name = "nanorand" version = "0.7.0" @@ -1979,6 +2878,21 @@ dependencies = [ "getrandom", ] +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + [[package]] name = "ndk" version = "0.7.0" @@ -2061,6 +2975,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "normpath" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "notify" version = "5.1.0" @@ -2171,6 +3094,21 @@ dependencies = [ "syn 2.0.27", ] +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "objc" version = "0.2.7" @@ -2269,6 +3207,30 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "orbclient" version = "0.3.45" @@ -2369,6 +3331,30 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-absolutize" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" +dependencies = [ + "path-dedot", +] + +[[package]] +name = "path-dedot" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" +dependencies = [ + "once_cell", +] + [[package]] name = "percent-encoding" version = "2.3.0" @@ -2394,6 +3380,51 @@ dependencies = [ "libc", ] +[[package]] +name = "pest" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcd6ab1236bbdb3a49027e920e693192ebfe8913f6d60e294de57463a493cfde" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a31940305ffc96863a735bef7c7994a00b325a7138fdbc5bda0f1a0476d3275" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.27", +] + +[[package]] +name = "pest_meta" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ff62f5259e53b78d1af898941cdcdccfae7385cf7d793a6e55de5d05bb4b7d" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + [[package]] name = "petgraph" version = "0.5.1" @@ -2442,6 +3473,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pio" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" +dependencies = [ + "arrayvec", + "num_enum 0.5.11", + "paste", +] + [[package]] name = "pkg-config" version = "0.3.27" @@ -2491,6 +3533,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + [[package]] name = "prettyplease" version = "0.2.12" @@ -2508,7 +3562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.14", ] [[package]] @@ -2520,6 +3574,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prodash" +version = "26.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf" + [[package]] name = "protobuf" version = "3.1.0" @@ -2676,7 +3736,7 @@ checksum = "dd1f1dd5d889c8422e6cde6a4af29ba31e2182e67e61a852065e0c9fb21a994e" dependencies = [ "anymap", "arrayvec", - "bitflags 2.3.3", + "bitflags 2.4.2", "cov-mark", "dashmap", "drop_bomb", @@ -2738,7 +3798,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8e5fdc0ad131da5aa999a759f2225fc99177408978ff0a21acc92fa0f525c13" dependencies = [ "arrayvec", - "bitflags 2.3.3", + "bitflags 2.4.2", "chalk-derive", "chalk-ir", "chalk-recursive", @@ -3007,7 +4067,7 @@ dependencies = [ "ra_ap_stdx", "ra_ap_toolchain", "rustc-hash", - "semver", + "semver 1.0.18", "serde", "serde_json", "tracing", @@ -3172,6 +4232,36 @@ dependencies = [ "walkdir", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -3224,6 +4314,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_users" version = "0.4.3" @@ -3235,12 +4334,57 @@ dependencies = [ "thiserror", ] +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + [[package]] name = "regex-syntax" version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "remove_dir_all" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23895cfadc1917fed9c6ed76a8c2903615fa3704f7493ff82b364c6540acc02b" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "fs_at", + "lazy_static", + "libc", + "normpath", + "windows-sys 0.45.0", +] + [[package]] name = "rfd" version = "0.11.4" @@ -3263,40 +4407,178 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows", + "windows 0.44.0", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rhai" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3625f343d89990133d013e39c46e350915178cf94f1bec9f49b0cbef98a3e3c" +dependencies = [ + "ahash", + "bitflags 2.4.2", + "instant", + "num-traits", + "once_cell", + "rhai_codegen", + "smallvec", + "smartstring", +] + +[[package]] +name = "rhai_codegen" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853977598f084a492323fe2f7896b4100a86284ee8473612de60021ea341310f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.27", +] + +[[package]] +name = "ron" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" +dependencies = [ + "base64 0.13.1", + "bitflags 1.3.2", + "serde", +] + +[[package]] +name = "rowan" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64449cfef9483a475ed56ae30e2da5ee96448789fb2aa240a04beb6a055078bf" +dependencies = [ + "countme", + "hashbrown 0.12.3", + "memoffset 0.8.0", + "rustc-hash", + "text-size", +] + +[[package]] +name = "roxmltree" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "rp2040-boot2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c773ec49b836077aa144b58dc7654a243e1eecdb6cf0d25361ae7c7600fabd8" +dependencies = [ + "crc-any", +] + +[[package]] +name = "rp2040-hal" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1369bb84862d7f69391a96606b2f29a00bfce7f29a749e23d5f01fc3f607ada0" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal 0.2.7", + "fugit", + "itertools", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac 0.4.0", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f21deadb5f29f05be9e665049c9c6d6385c6ed3437574c995658a041f71453" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0-rc.1", + "embedded-hal-nb", + "frunk", + "fugit", + "itertools", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac 0.5.0", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" +dependencies = [ + "cortex-m-rt", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "ron" -version = "0.8.0" +name = "rp2040-pac" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" +checksum = "9192cafbb40d717c9e0ddf767aaf9c69fee1b4e48d22ed853b57b11f6d9f3d7e" dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", - "serde", + "cortex-m", + "cortex-m-rt", + "vcell", ] [[package]] -name = "rowan" -version = "0.15.11" +name = "rp2040-pac" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64449cfef9483a475ed56ae30e2da5ee96448789fb2aa240a04beb6a055078bf" +checksum = "12d9d8375815f543f54835d01160d4e47f9e2cae75f17ff8f1ec19ce1da96e4c" dependencies = [ - "countme", - "hashbrown 0.12.3", - "memoffset 0.8.0", - "rustc-hash", - "text-size", + "cortex-m", + "critical-section", + "vcell", ] [[package]] -name = "roxmltree" -version = "0.18.0" +name = "rtt-target" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8" +checksum = "3afa12c77ba1b9bf560e4039a9b9a08bb9cde0e9e6923955eeb917dd8d5cf303" dependencies = [ - "xmlparser", + "critical-section", + "ufmt-write", ] [[package]] @@ -3305,6 +4587,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + [[package]] name = "rustix" version = "0.37.23" @@ -3321,15 +4612,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.4" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.2", "errno", "libc", - "linux-raw-sys 0.4.3", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", ] [[package]] @@ -3398,6 +4689,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "sanitize-filename" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" +dependencies = [ + "lazy_static", + "regex", +] + [[package]] name = "scip" version = "0.1.1" @@ -3432,6 +4733,15 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + [[package]] name = "semver" version = "1.0.18" @@ -3441,6 +4751,12 @@ dependencies = [ "serde", ] +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "serde" version = "1.0.175" @@ -3493,6 +4809,23 @@ dependencies = [ "serde", ] +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.4" @@ -3502,6 +4835,16 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared-bus" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f8438a40b91c8b9531c664e9680c55b92bd78cd6809a8b45b4512b1e5765f2" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", +] + [[package]] name = "shared_child" version = "1.0.0" @@ -3512,6 +4855,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "simd-adler32" version = "0.3.7" @@ -3557,6 +4906,35 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +[[package]] +name = "smart-leds" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38dd45fa275f70b4110eac5f5182611ad384f88bb22b68b9a9c3cafd7015290b" +dependencies = [ + "smart-leds-trait", +] + +[[package]] +name = "smart-leds-trait" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf6d833fa93f16a1c1874e62c2aebe8567e5bdd436d59bf543ed258b6f7a8e3" +dependencies = [ + "rgb", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + [[package]] name = "smithay-client-toolkit" version = "0.16.0" @@ -3620,6 +4998,12 @@ dependencies = [ "lock_api", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -3705,7 +5089,7 @@ dependencies = [ "once_cell", "onig", "plist", - "regex-syntax", + "regex-syntax 0.6.29", "serde", "serde_derive", "serde_json", @@ -3723,7 +5107,7 @@ dependencies = [ "cfg-expr", "heck 0.4.1", "pkg-config", - "toml", + "toml 0.7.6", "version-compare", ] @@ -3733,6 +5117,38 @@ version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d2faeef5759ab89935255b1a4cd98e0baf99d1085e37d36599c625dac49ae8e" +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.30", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal-prompt" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "572818b3472910acbd5dff46a3413715c18e934b071ab2ba464a7b2c2af16376" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "text-size" version = "1.1.1" @@ -3787,6 +5203,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" dependencies = [ "itoa", + "libc", + "num_threads", "serde", "time-core", "time-macros", @@ -3807,6 +5225,15 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tiny-skia" version = "0.8.4" @@ -3867,7 +5294,20 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.19.14", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -3892,6 +5332,19 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.0.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tracing" version = "0.1.37" @@ -3987,6 +5440,24 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "ufmt-write" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" + [[package]] name = "unic-char-property" version = "0.9.0" @@ -4049,6 +5520,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" +[[package]] +name = "unicode-bom" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" + [[package]] name = "unicode-ccc" version = "0.1.2" @@ -4094,6 +5571,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + [[package]] name = "unicode-xid" version = "0.2.4" @@ -4112,6 +5595,23 @@ dependencies = [ "serde", ] +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + +[[package]] +name = "usbd-serial" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", + "usb-device", +] + [[package]] name = "usvg" version = "0.35.0" @@ -4185,6 +5685,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" @@ -4203,6 +5715,21 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] + [[package]] name = "waker-fn" version = "1.1.0" @@ -4211,9 +5738,9 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -4458,6 +5985,25 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.42.0" @@ -4491,6 +6037,15 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -4521,6 +6076,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -4533,6 +6103,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -4545,6 +6121,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -4557,6 +6139,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -4569,6 +6157,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -4581,6 +6175,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -4593,6 +6193,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -4605,6 +6211,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winit" version = "0.28.6" @@ -4642,13 +6254,28 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.1" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" dependencies = [ "memchr", ] +[[package]] +name = "ws2812-pio" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d219e3b43c1e14305b36363060c0348d560314e235d999cf492bbbab1f38e8d" +dependencies = [ + "cortex-m", + "embedded-hal 0.2.7", + "fugit", + "nb 1.1.0", + "pio", + "rp2040-hal 0.8.2", + "smart-leds-trait", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -4733,6 +6360,12 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + [[package]] name = "zune-inflate" version = "0.2.54" diff --git a/Cargo.toml b/Cargo.toml index 7228767..0747799 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,4 +34,7 @@ proc-macro2 = "1.0.64" prettyplease = "0.2.10" slotmap = "1.0.6" clap = { version = "4.3.19", features = ["derive"] } -usvg = "0.35.0" \ No newline at end of file +usvg = "0.35.0" +generate = "1.5.0" +cargo-generate = "0.19.0" +iron-coder-feather-rp2040-bsp = { version = "0.1.0", path = "iron-coder-boards/Adafruit/Feather_RP2040/bsp" } diff --git a/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config b/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config index ed10a10..6b66945 100644 --- a/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config +++ b/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config @@ -35,7 +35,7 @@ rustflags = [ # This runner will make a UF2 file and then copy it to a mounted RP2040 in USB # Bootloader mode: -runner = "elf2uf2-rs -d" +runner = "elf2uf2-rs" # This runner will find a supported SWD debug probe and flash your RP2040 over # SWD: diff --git a/iron-coder-boards/Adafruit/Feather_RP2040/template/.gitignore b/iron-coder-boards/Adafruit/Feather_RP2040/template/.gitignore new file mode 100644 index 0000000..4470988 --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_RP2040/template/.gitignore @@ -0,0 +1,2 @@ +target/ +Cargo.lock \ No newline at end of file diff --git a/iron-coder-boards/Adafruit/Feather_RP2040/template/Cargo.toml b/iron-coder-boards/Adafruit/Feather_RP2040/template/Cargo.toml index fdec28c..be3391c 100644 --- a/iron-coder-boards/Adafruit/Feather_RP2040/template/Cargo.toml +++ b/iron-coder-boards/Adafruit/Feather_RP2040/template/Cargo.toml @@ -1,10 +1,16 @@ [package] -name = "{{project-name}}" -version = "0.1.0" +name = "feather-rp2040-blink" +version = "0.2.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -panic-halt = "0.2.0" -cortex-m-rt = "0.7.3" +panic-halt = "0.2.0" +cortex-m = "0.7.7" +cortex-m-rt = "0.7.3" +embedded-hal = "0.2.7" +adafruit-feather-rp2040 = "0.7.0" +usbd-serial = "0.1.1" +usb-device = "0.2.9" +critical-section = "1.1.2" \ No newline at end of file diff --git a/iron-coder-boards/Adafruit/Feather_RP2040/template/README.md b/iron-coder-boards/Adafruit/Feather_RP2040/template/README.md new file mode 100644 index 0000000..9290b46 --- /dev/null +++ b/iron-coder-boards/Adafruit/Feather_RP2040/template/README.md @@ -0,0 +1,7 @@ +Embedded Rust Template Project for Feather RP2040 +================================================= + +This repo contains a simple blinky-led example in embedded rust for the Adafruit Feather RP2040. The template includes code that will configure the USB peripheral as a serial port to allow for printing of formatted strings via the `write!` macro. Additionally, panic messages are sent to the serial port, and will show up when properly connected to a utility such as minicom, nRF terminal, or putty. + +### Acknowledgements +Most of this code is adapted from [this](https://github.com/eterevsky/rp2040-blink/blob/main/README.md) repository -- thanks! diff --git a/iron-coder-boards/Adafruit/Feather_RP2040/template/src/main.rs b/iron-coder-boards/Adafruit/Feather_RP2040/template/src/main.rs index 24396c6..5da5afd 100644 --- a/iron-coder-boards/Adafruit/Feather_RP2040/template/src/main.rs +++ b/iron-coder-boards/Adafruit/Feather_RP2040/template/src/main.rs @@ -1,22 +1,56 @@ +//! Blinks the LED on a Adafruit Feather RP2040 board +//! +//! This will blink on-board LED. #![no_std] #![no_main] -/**** low-level imports *****/ +use adafruit_feather_rp2040::entry; +use adafruit_feather_rp2040::{ + hal::{ + clocks::{init_clocks_and_plls, Clock}, + pac, + watchdog::Watchdog, + Sio, + }, + Pins, XOSC_CRYSTAL_FREQ, +}; +use embedded_hal::digital::v2::OutputPin; use panic_halt as _; -use cortex_m_rt::entry; - -mod system; -use system::System; #[entry] fn main() -> ! { - - let mut system = System::new(); + let mut pac = pac::Peripherals::take().unwrap(); + let core = pac::CorePeripherals::take().unwrap(); + + let mut watchdog = Watchdog::new(pac.WATCHDOG); + + let clocks = init_clocks_and_plls( + XOSC_CRYSTAL_FREQ, + pac.XOSC, + pac.CLOCKS, + pac.PLL_SYS, + pac.PLL_USB, + &mut pac.RESETS, + &mut watchdog, + ) + .ok() + .unwrap(); - // init code goes here! + let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); + + let sio = Sio::new(pac.SIO); + let pins = Pins::new( + pac.IO_BANK0, + pac.PADS_BANK0, + sio.gpio_bank0, + &mut pac.RESETS, + ); + let mut led_pin = pins.d13.into_push_pull_output(); loop { - // loop code goes here! + led_pin.set_high().unwrap(); + delay.delay_ms(1500); + led_pin.set_low().unwrap(); + delay.delay_ms(1500); } - } \ No newline at end of file diff --git a/src/project/mod.rs b/src/project/mod.rs index 576a1ba..f9ff8bc 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -25,6 +25,7 @@ pub mod egui_helpers; mod system; use system::System; +use std::process::Command; const PROJECT_FILE_NAME: &'static str = ".ironcoder.toml"; @@ -61,6 +62,23 @@ pub struct Project { pub known_boards: Vec, } +fn cli_cmd(str: &str) { + let output = if cfg!(target_os = "windows") { + Command::new("powershell") + .args(["/C", &str]) + .output() + .expect("failed to execute process") + } else { + Command::new("sh") + .arg("-c") + .arg("echo hello") + .output() + .expect("failed to execute process") + }; + let str = String::from_utf8(output.stdout).expect("Returned output"); + print!("{}", str); +} + // backend functionality for Project struct impl Project { @@ -251,12 +269,27 @@ impl Project { /// Load the code (for now using 'cargo run') fn load_to_board(&mut self, ctx: &egui::Context) { + // First check if the board is mounted + cli_cmd(""); + // Create the uf2 file for the board. Then redirect the uf2 to be in the current directory. + cli_cmd("cd ./iron-coder-boards/Adafruit/Feather_RP2040/template;\\ + cargo run;\\ + cd ./target/thumbv6m-none-eabi/debug;\\ + cp feather-rp2040-blink.uf2 ../../../../../../../projects/blinky + "); + self.info_logger("Successfully flashed board."); + // Flash the board + cli_cmd("cd ./projects/blinky;\\ + cp feather-rp2040-blink.uf2 D:; + "); + /* if let Some(path) = &self.location { let cmd = duct::cmd!("cargo", "-Z", "unstable-options", "-C", path.as_path().to_str().unwrap(), "run"); self.run_background_commands(&[cmd], ctx); } else { self.info_logger("project needs a valid working directory before building"); } + */ } pub fn new_file(&mut self) -> io::Result<()> { From 83d5180ab749cf693e03c74972635ce85c4c9764 Mon Sep 17 00:00:00 2001 From: Fredy Jose Date: Mon, 29 Jan 2024 12:13:11 -0500 Subject: [PATCH 19/48] Added flash support for RP2040. --- .gitignore | 4 ++++ src/project/mod.rs | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/.gitignore b/.gitignore index 53e3dbc..a5faf7b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ projects/ # Added by cargo /target +/.idea/.gitignore +/.idea/iron-coder.iml +/.idea/modules.xml +/.idea/vcs.xml diff --git a/src/project/mod.rs b/src/project/mod.rs index f9ff8bc..c4397d7 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -272,11 +272,18 @@ impl Project { // First check if the board is mounted cli_cmd(""); // Create the uf2 file for the board. Then redirect the uf2 to be in the current directory. + /* cli_cmd("cd ./iron-coder-boards/Adafruit/Feather_RP2040/template;\\ cargo run;\\ cd ./target/thumbv6m-none-eabi/debug;\\ cp feather-rp2040-blink.uf2 ../../../../../../../projects/blinky "); + */ + cli_cmd("cd ./projects/blinky\\ + cargo run;\\ + cd ./target/thumbv6m-none-eabi/debug;\\ + cp feather-rp2040-blink.uf2 ../../../../../../../projects/blinky + "); self.info_logger("Successfully flashed board."); // Flash the board cli_cmd("cd ./projects/blinky;\\ From 02c172b687caf25a90b0dbb145c7ad69771c5f90 Mon Sep 17 00:00:00 2001 From: Jacob Date: Wed, 31 Jan 2024 19:08:52 -0500 Subject: [PATCH 20/48] Added Commit button to bottom Bar. Button Currently only checks and prints changes to repo from last commit. --- src/project/display.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/project/display.rs b/src/project/display.rs index bb8812f..bfffb89 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -9,11 +9,14 @@ use std::sync::Arc; use egui::widget_text::RichText; use egui::widgets::Button; +use git2::{Repository, StatusOptions}; + use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; use crate::app::{Mode, Warnings}; + use serde::{Serialize, Deserialize}; #[derive(Serialize, Deserialize, Clone, Debug, Default)] @@ -165,6 +168,43 @@ impl Project { } } + // Open a window to add changes + // Commit the changes to the git repo with a user message + ui.separator(); + + if ui.button("commit").clicked() { + // Open the repo + let mut repo = match Repository::open(self.get_location()) { + Ok(repo) => repo, + Err(e) => { + panic!("Error opening repository: {:?}", e); + } + }; + + let mut status_options = StatusOptions::new(); + status_options.include_untracked(true); + + // Get the status of the repo + let repo_statuses = repo.statuses(Some(&mut status_options)); + + // Check if there are any changes or new files and save them in a vector + let mut changes: Vec = Vec::new(); + for entry in repo_statuses.unwrap().iter() { + if entry.status().contains(git2::Status::WT_NEW) || entry.status().contains(git2::Status::WT_MODIFIED){ + changes.push(entry.path().unwrap().to_string()); + } + } + + // Print the changes + info!("Changes to be committed:"); + for change in changes.iter() { + info!("{}", change); + } + + // Open a window to choose the changes to commit + + } + }); } From 870e0762df5a2f691145235649ecc4eb289d77a4 Mon Sep 17 00:00:00 2001 From: aidanpine Date: Fri, 2 Feb 2024 15:58:47 -0500 Subject: [PATCH 21/48] Fixed Active Tab Closing Issue --- src/app/code_editor.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/app/code_editor.rs b/src/app/code_editor.rs index 2a5e35d..8005cac 100644 --- a/src/app/code_editor.rs +++ b/src/app/code_editor.rs @@ -295,18 +295,26 @@ impl CodeEditor { ui.separator(); } // Remove a tab if necessary - // TODO -- make it so that the active tab is changed only if - // the closed tab was the active tab. + // TODO -- FIXED, but consider changing vector to linked list if let Some(i) = idx_to_remove { let _ = self.tabs.remove(i); let mut at = i; + if self.tabs.len() == 0 { self.active_tab = None; } else { if at >= self.tabs.len() { at -= 1; } - self.active_tab = Some(at); + + if (self.active_tab == None || self.active_tab == Some(i)) { + self.active_tab = Some(at); + } + else { + if self.active_tab > Some(i) { + self.active_tab = Some(self.active_tab.unwrap() - 1); + } + } } } }); From 2fe75d6275a48340c68cfce53ef7b1ce5f6f50e4 Mon Sep 17 00:00:00 2001 From: Fredy Jose Date: Fri, 2 Feb 2024 16:30:52 -0500 Subject: [PATCH 22/48] Fixed file paths to work for different projects. --- src/project/mod.rs | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/src/project/mod.rs b/src/project/mod.rs index c4397d7..91c852b 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -268,35 +268,27 @@ impl Project { } /// Load the code (for now using 'cargo run') - fn load_to_board(&mut self, ctx: &egui::Context) { - // First check if the board is mounted - cli_cmd(""); - // Create the uf2 file for the board. Then redirect the uf2 to be in the current directory. - /* - cli_cmd("cd ./iron-coder-boards/Adafruit/Feather_RP2040/template;\\ - cargo run;\\ - cd ./target/thumbv6m-none-eabi/debug;\\ - cp feather-rp2040-blink.uf2 ../../../../../../../projects/blinky - "); - */ - cli_cmd("cd ./projects/blinky\\ - cargo run;\\ - cd ./target/thumbv6m-none-eabi/debug;\\ - cp feather-rp2040-blink.uf2 ../../../../../../../projects/blinky - "); - self.info_logger("Successfully flashed board."); - // Flash the board - cli_cmd("cd ./projects/blinky;\\ - cp feather-rp2040-blink.uf2 D:; - "); - /* + fn load_to_board(&mut self, ctx: &egui::Context) { if let Some(path) = &self.location { - let cmd = duct::cmd!("cargo", "-Z", "unstable-options", "-C", path.as_path().to_str().unwrap(), "run"); - self.run_background_commands(&[cmd], ctx); + //let cmd = duct::cmd!("cargo", "-Z", "unstable-options", "-C", path.as_path().to_str().unwrap(), "run"); + //self.run_background_commands(&[cmd], ctx); + // First check if the board is mounted + // Create the uf2 file for the board. Then redirect the uf2 to be in the current directory. + let file_path_str = path.to_str().unwrap().to_string(); + let cmd_str1 = "cd ".to_string() + &file_path_str + ";\\ + cargo run;\\ + cd ./target/thumbv6m-none-eabi/debug; + cp feather-rp2040-blink.uf2 " + &file_path_str; + cli_cmd(&cmd_str1); + // Flash the board + let cmd_str2 = "cd ".to_string() + &file_path_str + ";\\ + cp feather-rp2040-blink.uf2 D:;"; + cli_cmd(&cmd_str2); + self.info_logger("Successfully flashed board."); } else { self.info_logger("project needs a valid working directory before building"); } - */ + } pub fn new_file(&mut self) -> io::Result<()> { From faaf9fb3a778ab17470322d5d8648a49ad54ebb8 Mon Sep 17 00:00:00 2001 From: Jacob <92765823+EpicMealNinja@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:12:30 -0500 Subject: [PATCH 23/48] Warnings (#6) * Made changes to project launch Now require main board to start new project. On new project start, template is auto generated. * Changed settings menu Made small graphical and text changes to make the settings menu look better. Added todos to the settings code in comments to plan what changes need to be made. * Added Unamed project warning Made it so that when a new project is being created there won't be an error in creation of the project because of a lack of a name. * Added settings file and added a function to it Settings are now saved between launches. Saved settings are text size and colorscheme. * Made a struct to store warnings * Adding settings.toml to .gitignore * Same as previous commit message * Settings now apply when hittting apply button. * Removed warning message about redundant clone. * If settings folder is blank, then load default * Added git2 crate and projects intialize with git * Added repo to project struct * Revert "Added Unamed project warning" This reverts commit fbb8b241691da5cba3dcdde1548b20a86b4144ea. --------- Co-authored-by: Jacob Pyatt --- src/app/mod.rs | 1 - src/project/display.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 3b27bc8..0a3fc1d 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -576,7 +576,6 @@ impl eframe::App for IronCoderApp { self.display_settings_window(ctx); self.display_about_window(ctx); self.unselected_mainboard_warning(ctx); - self.display_unnamed_project_warning(ctx); } } diff --git a/src/project/display.rs b/src/project/display.rs index bb8812f..ecd6848 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -560,7 +560,7 @@ impl Project { .frame(false); let mut cui = ui.child_ui(top_hud_rect, egui::Layout::right_to_left(egui::Align::Center)); if cui.add(start_dev_button).clicked() { - if self.has_main_board() && self.name != "" { + if self.has_main_board() { match self.save() { Ok(()) => { ret = Some(Mode::DevelopProject); From 9da52b55c7d6b4e53d03b00f53b36d0581f6ff4a Mon Sep 17 00:00:00 2001 From: Carsten Thue-Bludworth Date: Tue, 6 Feb 2024 13:25:54 -0500 Subject: [PATCH 24/48] removed buggy code that looked for a 'settings.toml' file --- src/app/mod.rs | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 0a3fc1d..9bfa2e1 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -124,40 +124,6 @@ impl IronCoderApp { } } - // Load settings from settings.toml if it exists - info!("reading settings and applying to app state..."); - let mut settings_file = match File::open("settings.toml") { - Err(why) => panic!("couldn't open settings.toml: {}", why), - Ok(file) => file, - }; - - let mut settings_string = String::new(); - match settings_file.read_to_string(&mut settings_string) { - Err(why) => panic!("couldn't read settings.toml: {}", why), - Ok(_) => print!("settings.toml contains:\n{}", settings_string), - } - - if settings_string != "" { - // Sets the scale for the app from settings.toml - let scale = settings_string.lines().nth(0).unwrap().split("=").nth(1).unwrap().trim().parse::().unwrap(); - info!("setting ui scale to {}", scale); - cc.egui_ctx.set_pixels_per_point(scale); - - - // Sets the color scheme for the app from settings.toml - let mut colorscheme_name = settings_string.lines().nth(1).unwrap().split("=").nth(1).unwrap().trim().to_string(); - info!("setting colorscheme to {}", colorscheme_name); - colorscheme_name = colorscheme_name.trim_matches('"').to_string(); - let mut colorscheme = colorscheme::INDUSTRIAL_DARK; - for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { - if cs.name == colorscheme_name { - colorscheme = cs.clone(); - } - } - app.colorscheme = colorscheme.clone(); - colorscheme::set_colorscheme(&cc.egui_ctx, colorscheme.clone()); - } - app.options = options; info!("Reloading current project and assets..."); app.set_colorscheme(&cc.egui_ctx); From d322045111414535d429202db5ae1aa3b29ded75 Mon Sep 17 00:00:00 2001 From: Jacob Date: Wed, 14 Feb 2024 15:05:13 -0500 Subject: [PATCH 25/48] Git Things --- src/app/mod.rs | 162 ++++++++++++++++++++++++++++++++++++++++- src/project/display.rs | 12 +-- 2 files changed, 166 insertions(+), 8 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 3b27bc8..9b3f91e 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -55,6 +55,20 @@ pub struct IronCoderOptions { pub struct Warnings { pub display_mainboard_warning: bool, pub display_unnamed_project_warning: bool, + pub display_git_warning: bool, +} + +// The current git state +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Git { + pub display : bool, + pub changes: Vec, + pub staged_changes: Vec, + pub commit_name: String, + pub commit_email: String, + pub commit_message: String, + #[serde(skip)] + pub repo : Option, } /// The current GUI mode @@ -82,6 +96,7 @@ pub struct IronCoderApp { options: IronCoderOptions, warning_flags: Warnings, + git_things: Git, } impl Default for IronCoderApp { @@ -103,6 +118,16 @@ impl Default for IronCoderApp { warning_flags: Warnings { display_mainboard_warning: false, display_unnamed_project_warning: false, + display_git_warning: false, + }, + git_things: Git { + display: false, + changes: Vec::new(), + staged_changes: Vec::new(), + commit_name: String::new(), + commit_email: String::new(), + commit_message: String::new(), + repo: None, }, } } @@ -318,7 +343,7 @@ impl IronCoderApp { project.display_terminal(ctx, ui); }); egui::TopBottomPanel::bottom("editor_control_panel").show(ctx, |ui| { - project.display_project_toolbar(ctx, ui); + project.display_project_toolbar(ctx, ui, &mut self.git_things); }); egui::TopBottomPanel::top("editor_tabs").show(ctx, |ui| { project.code_editor.display_editor_tabs(ctx, ui); @@ -521,7 +546,7 @@ impl IronCoderApp { }); } - // Displays the waring message that no main board has been selected for the project + /// Displays the waring message that no main board has been selected for the project pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Board Warning") .open(&mut self.warning_flags.display_mainboard_warning) @@ -532,7 +557,7 @@ impl IronCoderApp { ui.label("please select a main board to proceed."); }); } - // Displays the waring message that the project has not been named + /// Displays the waring message that the project has not been named pub fn display_unnamed_project_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Name Warning") .open(&mut self.warning_flags.display_unnamed_project_warning) @@ -543,6 +568,135 @@ impl IronCoderApp { ui.label("please name the project to proceed."); }); } + + /// Displays the warning message that not all of the git fields have been filled out + /// This is called when the user tries to commit changes to git + pub fn display_git_warning(&mut self, ctx: &egui::Context) { + egui::Window::new("Git Warning") + .open(&mut self.warning_flags.display_git_warning) + .collapsible(false) + .resizable(false) + .movable(true) + .show(ctx, |ui| { + ui.label("please fill out all of the git fields to commit changes."); + }); + } + + /// Displays the git changes window + // Is called by the toolbar when the user clicks the commit button + pub fn display_git_window(&mut self, ctx: &egui::Context) { + let mut display_git = self.git_things.display; + let mut unstaged_to_remove: Vec = Vec::new(); + let mut staged_to_remove: Vec = Vec::new(); + let mut staged_to_add: Vec = Vec::new(); + let mut unstaged_to_add: Vec = Vec::new(); + + + egui::Window::new("Commit") + .open(&mut display_git) + .collapsible(false) + .resizable(true) + .movable(true) + .show(ctx, |ui| { + egui::SidePanel::right("Unstaged Changes").show_inside(ui, |ui| { + ui.label("Staged Changes -- Currently doesn't work"); + ui.separator(); + ui.vertical(|ui| { + for (_i, change) in self.git_things.staged_changes.iter().enumerate() { + if ui.button(change.clone()).clicked() { + info!("Unstaging: {}", change.clone()); + unstaged_to_add.push(change.clone()); + staged_to_remove.push(change.clone()); + } + } + self.git_things.staged_changes.retain(|change| !staged_to_remove.contains(change)); + }); + ui.separator(); + ui.label("Unstaged Changes"); + // Display the files that have changed on the right side + ui.separator(); + ui.vertical(|ui| { + // Create a button for each unstaged change in git_things.changes + for (_i, change) in self.git_things.changes.iter().enumerate() { + if ui.button(change.clone()).clicked() { + info!("Staging: {}", change.clone()); + staged_to_add.push(change.clone()); + unstaged_to_remove.push(change.clone()); + } + } + self.git_things.changes.retain(|change| !unstaged_to_remove.contains(change)); + }); + }); + self.git_things.staged_changes.append(&mut staged_to_add); + self.git_things.changes.append(&mut unstaged_to_add); + + egui::CentralPanel::default().show_inside(ui, |ui|{ + // Have a text box for the commit message + // Have the text box take as much space as possible + ui.label("Commit Message:"); + ui.text_edit_multiline(&mut self.git_things.commit_message); + ui.label("Name"); + ui.text_edit_singleline(&mut self.git_things.commit_name); + ui.label("Email Address"); + ui.text_edit_singleline(&mut self.git_things.commit_email); + + let name = self.git_things.commit_name.clone(); + let email = self.git_things.commit_email.clone(); + let commit_message = self.git_things.commit_message.clone(); + + // Have a button to commit the changes + if ui.button("Commit").clicked() { + if name != "" && email != "" && commit_message != "" { + info!("committing changes to git..."); + info!("{}", self.git_things.commit_message.clone()); + + let repo = self.git_things.repo.as_mut().unwrap(); + + let signature = git2::Signature::now(&name, &email).unwrap(); + let mut index = repo.index().unwrap(); + // Should make only staged changes be committed but doesn't work instead crashes when reading staged changes + // This has to be fixed because it starts with none of the changes added + index.clear().unwrap(); + for change in self.git_things.staged_changes.iter() { + index.add_path(Path::new(change)).unwrap(); + } + let tree_id = index.write_tree().unwrap(); + let tree = repo.find_tree(tree_id).unwrap(); + + repo.commit( + // There is a problem with the head + None, + &signature, + &signature, + &commit_message, + &tree, + &[] + ).unwrap(); + + self.git_things.display = false; + self.git_things.commit_message.clear(); + self.git_things.commit_name.clear(); + self.git_things.commit_email.clear(); + } else { + self.warning_flags.display_git_warning = true; + } + } + }); + }); + + // Makes sure that both commit button and x button close the window + if self.git_things.display == false || display_git == false { + self.git_things.display = false; + display_git = false; + self.git_things.commit_message.clear(); + self.git_things.commit_name.clear(); + self.git_things.commit_email.clear(); + self.git_things.changes.clear(); + self.git_things.staged_changes.clear(); + } + + + } } impl eframe::App for IronCoderApp { @@ -577,6 +731,8 @@ impl eframe::App for IronCoderApp { self.display_about_window(ctx); self.unselected_mainboard_warning(ctx); self.display_unnamed_project_warning(ctx); + self.display_git_window(ctx); + self.display_git_warning(ctx); } } diff --git a/src/project/display.rs b/src/project/display.rs index bfffb89..6307d98 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -14,7 +14,7 @@ use git2::{Repository, StatusOptions}; use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; -use crate::app::{Mode, Warnings}; +use crate::app::{Mode, Warnings, Git}; use serde::{Serialize, Deserialize}; @@ -106,7 +106,7 @@ impl Project { } /// Show the project toolbar, with buttons to perform various actions - pub fn display_project_toolbar(&mut self, ctx: &egui::Context, ui: &mut egui::Ui) { + pub fn display_project_toolbar(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, git_things: &mut Git) { let iconref: Arc = ctx.data_mut(|data| { data.get_temp("icons".into()).expect("error loading shared icons!") }); @@ -172,9 +172,9 @@ impl Project { // Commit the changes to the git repo with a user message ui.separator(); - if ui.button("commit").clicked() { + if ui.button("Commit").clicked() { // Open the repo - let mut repo = match Repository::open(self.get_location()) { + let repo = match Repository::open(self.get_location()) { Ok(repo) => repo, Err(e) => { panic!("Error opening repository: {:?}", e); @@ -202,7 +202,9 @@ impl Project { } // Open a window to choose the changes to commit - + git_things.display = true; + git_things.changes = changes; + git_things.repo = Some(repo); } }); From 10edff9a31b906aa0935479b43856e97fc095473 Mon Sep 17 00:00:00 2001 From: Jacob Date: Thu, 15 Feb 2024 12:40:32 -0500 Subject: [PATCH 26/48] Finished with git commit feature Git commit feature should be fully finished and working --- src/app/mod.rs | 49 ++++++++++++++++++++++++++++-------------- src/project/display.rs | 5 +++++ 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 9b3f91e..ae16aa4 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -598,6 +598,9 @@ impl IronCoderApp { .resizable(true) .movable(true) .show(ctx, |ui| { + let repo = self.git_things.repo.as_mut().unwrap(); + let mut index = repo.index().unwrap(); + egui::SidePanel::right("Unstaged Changes").show_inside(ui, |ui| { ui.label("Staged Changes -- Currently doesn't work"); ui.separator(); @@ -607,6 +610,8 @@ impl IronCoderApp { info!("Unstaging: {}", change.clone()); unstaged_to_add.push(change.clone()); staged_to_remove.push(change.clone()); + index.remove_all([change.clone()].iter(), None).unwrap(); + index.write().unwrap(); } } self.git_things.staged_changes.retain(|change| !staged_to_remove.contains(change)); @@ -622,6 +627,17 @@ impl IronCoderApp { info!("Staging: {}", change.clone()); staged_to_add.push(change.clone()); unstaged_to_remove.push(change.clone()); + //index.add_path(Path::new(change)).unwrap(); + match index.add_path(Path::new(change)) { + Ok(_) => { + // add_path succeeded, do nothing + }, + Err(_) => { + // add_path failed, try add_all + index.add_all([change.clone()].iter(), git2::IndexAddOption::DEFAULT, None).unwrap(); + } + } + index.write().unwrap(); } } self.git_things.changes.retain(|change| !unstaged_to_remove.contains(change)); @@ -649,29 +665,30 @@ impl IronCoderApp { if name != "" && email != "" && commit_message != "" { info!("committing changes to git..."); info!("{}", self.git_things.commit_message.clone()); - - let repo = self.git_things.repo.as_mut().unwrap(); - + let signature = git2::Signature::now(&name, &email).unwrap(); - let mut index = repo.index().unwrap(); - // Should make only staged changes be committed but doesn't work instead crashes when reading staged changes - // This has to be fixed because it starts with none of the changes added - index.clear().unwrap(); - for change in self.git_things.staged_changes.iter() { - index.add_path(Path::new(change)).unwrap(); - } - let tree_id = index.write_tree().unwrap(); - let tree = repo.find_tree(tree_id).unwrap(); + let oid = index.write_tree().unwrap(); + let tree = repo.find_tree(oid).unwrap(); + let head = repo.head().unwrap(); + let head_commit = repo.find_commit(head.target().unwrap()).unwrap(); + - repo.commit( + match repo.commit( // There is a problem with the head - None, + Some("HEAD"), &signature, &signature, &commit_message, &tree, - &[] - ).unwrap(); + &[&head_commit] + ) { + Ok(_) => { + info!("commit successful!"); + }, + Err(e) => { + error!("error committing changes to git: {:?}", e); + } + } self.git_things.display = false; self.git_things.commit_message.clear(); diff --git a/src/project/display.rs b/src/project/display.rs index 6307d98..d8ba286 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -181,6 +181,11 @@ impl Project { } }; + // Unstage all staged files + let mut index = repo.index().unwrap(); + index.clear().unwrap(); + index.write().unwrap(); + let mut status_options = StatusOptions::new(); status_options.include_untracked(true); From 35a3eef5e9bf9a26604b8a9bc42e7718a5e9d744 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Mon, 13 Nov 2023 20:43:31 -0500 Subject: [PATCH 27/48] Made a struct to store warnings --- settings.toml | 2 ++ src/app/mod.rs | 26 ++++++++++++++++---------- src/project/display.rs | 9 ++++----- 3 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 settings.toml diff --git a/settings.toml b/settings.toml new file mode 100644 index 0000000..98e0528 --- /dev/null +++ b/settings.toml @@ -0,0 +1,2 @@ +ui_scale = 1.25 +colorscheme = "Industrial Dark" diff --git a/src/app/mod.rs b/src/app/mod.rs index 72e3d9b..45ed76c 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -8,7 +8,6 @@ use std::sync::Arc; use clap::Parser; use egui::{ - Align2, Vec2, RichText, Label, @@ -47,6 +46,13 @@ pub struct IronCoderOptions { pub persistence: bool, } +// The current warning flags +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Warnings { + pub display_mainboard_warning: bool, + pub display_unnamed_project_warning: bool, +} + /// The current GUI mode #[non_exhaustive] #[derive(serde::Deserialize, serde::Serialize)] @@ -71,9 +77,7 @@ pub struct IronCoderApp { boards: Vec, options: IronCoderOptions, - // Warning Flags - display_mainboard_warning: bool, - display_unnamed_project_warning: bool, + warning_flags: Warnings, } impl Default for IronCoderApp { @@ -92,8 +96,10 @@ impl Default for IronCoderApp { colorscheme: colorscheme::INDUSTRIAL_DARK, options: IronCoderOptions::default(), // Warning Flags - display_mainboard_warning: false, - display_unnamed_project_warning: false, + warning_flags: Warnings { + display_mainboard_warning: false, + display_unnamed_project_warning: false, + }, } } } @@ -288,7 +294,7 @@ impl IronCoderApp { pub fn display_project_editor(&mut self, ctx: &egui::Context) { egui::CentralPanel::default().show(ctx, |ui| { - if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.display_mainboard_warning, &mut self.display_unnamed_project_warning) { + if let Some(mode) = self.project.display_system_editor_hud(ctx, ui, &mut self.warning_flags) { self.mode = mode; } self.project.display_system_editor_boards(ctx, ui); @@ -367,7 +373,7 @@ impl IronCoderApp { } let egui::FontId {size: _, family} = font_id; // I don't really understand this dereference syntax with the Arc... - let font_text = egui::RichText::new((&**name).clone()) + let font_text = egui::RichText::new((&**name)) .family((family).clone()).size(12.0); ui.label(font_text); }, @@ -444,7 +450,7 @@ impl IronCoderApp { // Displays the waring message that no main board has been selected for the project pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Board Warning") - .open(&mut self.display_mainboard_warning) + .open(&mut self.warning_flags.display_mainboard_warning) .collapsible(false) .resizable(false) .movable(true) @@ -455,7 +461,7 @@ impl IronCoderApp { // Displays the waring message that the project has not been named pub fn display_unnamed_project_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Name Warning") - .open(&mut self.display_unnamed_project_warning) + .open(&mut self.warning_flags.display_unnamed_project_warning) .collapsible(false) .resizable(false) .movable(true) diff --git a/src/project/display.rs b/src/project/display.rs index 65fa70f..bb8812f 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -12,8 +12,7 @@ use egui::widgets::Button; use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; -use crate::app::{Mode, self}; -use crate::IronCoderApp; +use crate::app::{Mode, Warnings}; use serde::{Serialize, Deserialize}; @@ -505,7 +504,7 @@ impl Project { /// Show the project HUD with information about the current system. Return a "Mode" so that /// the calling module (app) can update the GUI accordingly. - pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, main_board_warning: &mut bool, no_name_warning: &mut bool) -> Option { + pub fn display_system_editor_hud(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, warning_flags: &mut Warnings) -> Option { // prepare the return value let mut ret: Option = None; @@ -583,10 +582,10 @@ impl Project { } else { if !self.has_main_board() { - *main_board_warning = true; + warning_flags.display_mainboard_warning = true; } if self.name == "" { - *no_name_warning = true; + warning_flags.display_unnamed_project_warning = true; } } } From 0102185c1efe77a973337a49356c06bae43569c3 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Wed, 15 Nov 2023 11:40:29 -0500 Subject: [PATCH 28/48] Settings now apply when hittting apply button. --- src/app/mod.rs | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 45ed76c..5ccab7c 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -328,22 +328,16 @@ impl IronCoderApp { ui.text_edit_singleline(&mut ui_scale_string); ctx.data_mut(|data| data.insert_temp(id, ui_scale_string.clone())); // if the string is parsable into f32, update the global scale - match ui_scale_string.parse::() { - Ok(scale) => { - ctx.set_pixels_per_point(scale); - }, - Err(_e) => (), - } + // Create radio buttons for colorscheme selection ui.separator(); - ui.heading("Color Scheme:"); + ui.heading("Color Scheme:"); for cs in colorscheme::SYSTEM_COLORSCHEMES.iter() { // ui.radio_value(&mut colorscheme, colorscheme::SOLARIZED_DARK, cs.name); let rb = egui::RadioButton::new(*colorscheme == cs.clone(), cs.name.clone()); if ui.add(rb).clicked() { *colorscheme = cs.clone(); - colorscheme::set_colorscheme(ctx, cs.clone()); } } @@ -394,9 +388,39 @@ impl IronCoderApp { // ctx.set_visuals(visuals); + // Create a button to apply the settings if ui.button("Apply").clicked() { - // TODO -- Read all the settings to the settings file so they take place on next startup - // TODO -- Make a settings file + // Change settings when Apply button is pressed + // Change the colorscheme + colorscheme::set_colorscheme(ctx, colorscheme.clone()); + + // Set the ui scale + match ui_scale_string.parse::() { + Ok(scale) => { + ctx.set_pixels_per_point(scale); + }, + Err(_e) => (), + } + + + // Write the settings to settings.toml + let mut settings_file = match File::create("settings.toml") { + Err(why) => panic!("couldn't create settings.toml: {}", why), + Ok(file) => file, + }; + + let mut settings_string = String::new(); + settings_string.push_str("ui_scale = "); + settings_string.push_str(&ui_scale_string); + settings_string.push_str("\n"); + settings_string.push_str("colorscheme = \""); + settings_string.push_str(&colorscheme.name); + settings_string.push_str("\"\n"); + + match settings_file.write_all(settings_string.as_bytes()) { + Err(why) => panic!("couldn't write to settings.toml: {}", why), + Ok(_) => println!("successfully wrote to settings.toml"), + } } }); // unwrap ok here because window must be open for us to get here. From 29b485d5ae7fd34dc6e7cbfd7f755265a622838c Mon Sep 17 00:00:00 2001 From: Carsten Thue-Bludworth Date: Tue, 12 Dec 2023 19:59:53 -0500 Subject: [PATCH 29/48] removed things that are no longer needed with newer rustc --- src/app/mod.rs | 20 -------------------- src/lib.rs | 2 +- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 5ccab7c..58ffb43 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -401,26 +401,6 @@ impl IronCoderApp { }, Err(_e) => (), } - - - // Write the settings to settings.toml - let mut settings_file = match File::create("settings.toml") { - Err(why) => panic!("couldn't create settings.toml: {}", why), - Ok(file) => file, - }; - - let mut settings_string = String::new(); - settings_string.push_str("ui_scale = "); - settings_string.push_str(&ui_scale_string); - settings_string.push_str("\n"); - settings_string.push_str("colorscheme = \""); - settings_string.push_str(&colorscheme.name); - settings_string.push_str("\"\n"); - - match settings_file.write_all(settings_string.as_bytes()) { - Err(why) => panic!("couldn't write to settings.toml: {}", why), - Ok(_) => println!("successfully wrote to settings.toml"), - } } }); // unwrap ok here because window must be open for us to get here. diff --git a/src/lib.rs b/src/lib.rs index 8c951a5..a375dbe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ #![feature(file_create_new)] // TODO - track progress of these features -#![feature(io_error_other)] + mod app; mod board; mod project; From 16976a749a12ff460a21d91dc69fb61b1e09745a Mon Sep 17 00:00:00 2001 From: Carsten Thue-Bludworth Date: Tue, 12 Dec 2023 20:13:48 -0500 Subject: [PATCH 30/48] fixed crash due to 0 font size --- src/app/mod.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 58ffb43..0cf5aa2 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -328,7 +328,17 @@ impl IronCoderApp { ui.text_edit_singleline(&mut ui_scale_string); ctx.data_mut(|data| data.insert_temp(id, ui_scale_string.clone())); // if the string is parsable into f32, update the global scale - + match ui_scale_string.parse::() { + Ok(scale) if scale >=0.7 => { + ctx.set_pixels_per_point(scale); + }, + Ok(_scale) => { + warn!("scale can't be below 0.7!"); + } + Err(_e) => { + warn!("scale not parsed as f32."); + }, + } // Create radio buttons for colorscheme selection ui.separator(); From e0ed1c47ce4e25325b5238a69ea89d5c36c93a18 Mon Sep 17 00:00:00 2001 From: Jacob Pyatt Date: Tue, 16 Jan 2024 14:23:51 -0500 Subject: [PATCH 31/48] Added git2 crate and projects intialize with git --- Cargo.lock | 80 ++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 3 ++ src/project/mod.rs | 6 ++++ 3 files changed, 89 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 3797ee5..0b98841 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1310,6 +1310,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "git2" +version = "0.13.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29229cc1b24c0e6062f6e742aa3e256492a5323365e5ed3413599f8a5eff7d6" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -1617,6 +1632,7 @@ dependencies = [ "egui_extras", "enum-iterator", "fs_extra", + "git2", "image", "log", "prettyplease", @@ -1775,6 +1791,20 @@ version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +[[package]] +name = "libgit2-sys" +version = "0.12.26+1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e1c899248e606fbfe68dcb31d8b0176ebab833b103824af31bddf4b7457494" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + [[package]] name = "libloading" version = "0.7.4" @@ -1795,6 +1825,32 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libssh2-sys" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "line-index" version = "0.1.0" @@ -2269,6 +2325,24 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "orbclient" version = "0.3.45" @@ -4185,6 +4259,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index ecc9459..0b9b984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,3 +35,6 @@ prettyplease = "0.2.10" slotmap = "1.0.6" clap = { version = "4.3.19", features = ["derive"] } usvg = "0.35.0" +git2 = "0.13.17" + + diff --git a/src/project/mod.rs b/src/project/mod.rs index 576a1ba..66138af 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -26,6 +26,8 @@ pub mod egui_helpers; mod system; use system::System; +use git2::Repository; + const PROJECT_FILE_NAME: &'static str = ".ironcoder.toml"; pub type Result = core::result::Result<(), ProjectIOError>; @@ -342,6 +344,10 @@ impl Project { } else { return Err(ProjectIOError::NoMainBoard); } + let _repo = match Repository::init(self.get_location()) { + Ok(_repo) => _repo, + Err(e) => panic!("failed to init: {}", e), + }; Ok(()) } From 0c12c8016dc1caef1c6755581e6f041cafedd6d5 Mon Sep 17 00:00:00 2001 From: EpicMealNinja Date: Fri, 19 Jan 2024 14:51:14 -0500 Subject: [PATCH 32/48] Added repo to project struct --- src/project/mod.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/project/mod.rs b/src/project/mod.rs index 66138af..88747c7 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -61,6 +61,8 @@ pub struct Project { current_view: ProjectViewType, #[serde(skip)] pub known_boards: Vec, + #[serde(skip)] + repo: Option, } // backend functionality for Project struct @@ -168,6 +170,12 @@ impl Project { self.current_view = p.current_view; // sync the assets with the global ones self.load_board_resources(); + // Open the repo in the project directory + self.repo = match Repository::open(self.get_location()) { + Ok(repo) => Some(repo), + Err(e) => panic!("Failed to open: {}", e), + }; + Ok(()) } @@ -344,10 +352,12 @@ impl Project { } else { return Err(ProjectIOError::NoMainBoard); } - let _repo = match Repository::init(self.get_location()) { - Ok(_repo) => _repo, - Err(e) => panic!("failed to init: {}", e), + // Create a repo to store code + self.repo = match Repository::init(self.get_location()) { + Ok(repo) => Some(repo), + Err(e) => panic!("Failed to init: {}", e), }; + Ok(()) } From 4bf1d78427927fba53861b0211655286a839b94c Mon Sep 17 00:00:00 2001 From: Jacob Date: Wed, 31 Jan 2024 19:08:52 -0500 Subject: [PATCH 33/48] Added Commit button to bottom Bar. Button Currently only checks and prints changes to repo from last commit. --- src/project/display.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/project/display.rs b/src/project/display.rs index bb8812f..bfffb89 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -9,11 +9,14 @@ use std::sync::Arc; use egui::widget_text::RichText; use egui::widgets::Button; +use git2::{Repository, StatusOptions}; + use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; use crate::app::{Mode, Warnings}; + use serde::{Serialize, Deserialize}; #[derive(Serialize, Deserialize, Clone, Debug, Default)] @@ -165,6 +168,43 @@ impl Project { } } + // Open a window to add changes + // Commit the changes to the git repo with a user message + ui.separator(); + + if ui.button("commit").clicked() { + // Open the repo + let mut repo = match Repository::open(self.get_location()) { + Ok(repo) => repo, + Err(e) => { + panic!("Error opening repository: {:?}", e); + } + }; + + let mut status_options = StatusOptions::new(); + status_options.include_untracked(true); + + // Get the status of the repo + let repo_statuses = repo.statuses(Some(&mut status_options)); + + // Check if there are any changes or new files and save them in a vector + let mut changes: Vec = Vec::new(); + for entry in repo_statuses.unwrap().iter() { + if entry.status().contains(git2::Status::WT_NEW) || entry.status().contains(git2::Status::WT_MODIFIED){ + changes.push(entry.path().unwrap().to_string()); + } + } + + // Print the changes + info!("Changes to be committed:"); + for change in changes.iter() { + info!("{}", change); + } + + // Open a window to choose the changes to commit + + } + }); } From 75b9e268ad76a1dc7a32c931bdccf4d82b5ed3da Mon Sep 17 00:00:00 2001 From: Jacob Date: Wed, 14 Feb 2024 15:05:13 -0500 Subject: [PATCH 34/48] Git Things --- src/app/mod.rs | 162 ++++++++++++++++++++++++++++++++++++++++- src/project/display.rs | 12 +-- 2 files changed, 166 insertions(+), 8 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 0cf5aa2..939dfd9 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -51,6 +51,20 @@ pub struct IronCoderOptions { pub struct Warnings { pub display_mainboard_warning: bool, pub display_unnamed_project_warning: bool, + pub display_git_warning: bool, +} + +// The current git state +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Git { + pub display : bool, + pub changes: Vec, + pub staged_changes: Vec, + pub commit_name: String, + pub commit_email: String, + pub commit_message: String, + #[serde(skip)] + pub repo : Option, } /// The current GUI mode @@ -78,6 +92,7 @@ pub struct IronCoderApp { options: IronCoderOptions, warning_flags: Warnings, + git_things: Git, } impl Default for IronCoderApp { @@ -99,6 +114,16 @@ impl Default for IronCoderApp { warning_flags: Warnings { display_mainboard_warning: false, display_unnamed_project_warning: false, + display_git_warning: false, + }, + git_things: Git { + display: false, + changes: Vec::new(), + staged_changes: Vec::new(), + commit_name: String::new(), + commit_email: String::new(), + commit_message: String::new(), + repo: None, }, } } @@ -278,7 +303,7 @@ impl IronCoderApp { project.display_terminal(ctx, ui); }); egui::TopBottomPanel::bottom("editor_control_panel").show(ctx, |ui| { - project.display_project_toolbar(ctx, ui); + project.display_project_toolbar(ctx, ui, &mut self.git_things); }); egui::TopBottomPanel::top("editor_tabs").show(ctx, |ui| { project.code_editor.display_editor_tabs(ctx, ui); @@ -461,7 +486,7 @@ impl IronCoderApp { }); } - // Displays the waring message that no main board has been selected for the project + /// Displays the waring message that no main board has been selected for the project pub fn unselected_mainboard_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Board Warning") .open(&mut self.warning_flags.display_mainboard_warning) @@ -472,7 +497,7 @@ impl IronCoderApp { ui.label("please select a main board to proceed."); }); } - // Displays the waring message that the project has not been named + /// Displays the waring message that the project has not been named pub fn display_unnamed_project_warning(&mut self, ctx: &egui::Context) { egui::Window::new("Name Warning") .open(&mut self.warning_flags.display_unnamed_project_warning) @@ -483,6 +508,135 @@ impl IronCoderApp { ui.label("please name the project to proceed."); }); } + + /// Displays the warning message that not all of the git fields have been filled out + /// This is called when the user tries to commit changes to git + pub fn display_git_warning(&mut self, ctx: &egui::Context) { + egui::Window::new("Git Warning") + .open(&mut self.warning_flags.display_git_warning) + .collapsible(false) + .resizable(false) + .movable(true) + .show(ctx, |ui| { + ui.label("please fill out all of the git fields to commit changes."); + }); + } + + /// Displays the git changes window + // Is called by the toolbar when the user clicks the commit button + pub fn display_git_window(&mut self, ctx: &egui::Context) { + let mut display_git = self.git_things.display; + let mut unstaged_to_remove: Vec = Vec::new(); + let mut staged_to_remove: Vec = Vec::new(); + let mut staged_to_add: Vec = Vec::new(); + let mut unstaged_to_add: Vec = Vec::new(); + + + egui::Window::new("Commit") + .open(&mut display_git) + .collapsible(false) + .resizable(true) + .movable(true) + .show(ctx, |ui| { + egui::SidePanel::right("Unstaged Changes").show_inside(ui, |ui| { + ui.label("Staged Changes -- Currently doesn't work"); + ui.separator(); + ui.vertical(|ui| { + for (_i, change) in self.git_things.staged_changes.iter().enumerate() { + if ui.button(change.clone()).clicked() { + info!("Unstaging: {}", change.clone()); + unstaged_to_add.push(change.clone()); + staged_to_remove.push(change.clone()); + } + } + self.git_things.staged_changes.retain(|change| !staged_to_remove.contains(change)); + }); + ui.separator(); + ui.label("Unstaged Changes"); + // Display the files that have changed on the right side + ui.separator(); + ui.vertical(|ui| { + // Create a button for each unstaged change in git_things.changes + for (_i, change) in self.git_things.changes.iter().enumerate() { + if ui.button(change.clone()).clicked() { + info!("Staging: {}", change.clone()); + staged_to_add.push(change.clone()); + unstaged_to_remove.push(change.clone()); + } + } + self.git_things.changes.retain(|change| !unstaged_to_remove.contains(change)); + }); + }); + self.git_things.staged_changes.append(&mut staged_to_add); + self.git_things.changes.append(&mut unstaged_to_add); + + egui::CentralPanel::default().show_inside(ui, |ui|{ + // Have a text box for the commit message + // Have the text box take as much space as possible + ui.label("Commit Message:"); + ui.text_edit_multiline(&mut self.git_things.commit_message); + ui.label("Name"); + ui.text_edit_singleline(&mut self.git_things.commit_name); + ui.label("Email Address"); + ui.text_edit_singleline(&mut self.git_things.commit_email); + + let name = self.git_things.commit_name.clone(); + let email = self.git_things.commit_email.clone(); + let commit_message = self.git_things.commit_message.clone(); + + // Have a button to commit the changes + if ui.button("Commit").clicked() { + if name != "" && email != "" && commit_message != "" { + info!("committing changes to git..."); + info!("{}", self.git_things.commit_message.clone()); + + let repo = self.git_things.repo.as_mut().unwrap(); + + let signature = git2::Signature::now(&name, &email).unwrap(); + let mut index = repo.index().unwrap(); + // Should make only staged changes be committed but doesn't work instead crashes when reading staged changes + // This has to be fixed because it starts with none of the changes added + index.clear().unwrap(); + for change in self.git_things.staged_changes.iter() { + index.add_path(Path::new(change)).unwrap(); + } + let tree_id = index.write_tree().unwrap(); + let tree = repo.find_tree(tree_id).unwrap(); + + repo.commit( + // There is a problem with the head + None, + &signature, + &signature, + &commit_message, + &tree, + &[] + ).unwrap(); + + self.git_things.display = false; + self.git_things.commit_message.clear(); + self.git_things.commit_name.clear(); + self.git_things.commit_email.clear(); + } else { + self.warning_flags.display_git_warning = true; + } + } + }); + }); + + // Makes sure that both commit button and x button close the window + if self.git_things.display == false || display_git == false { + self.git_things.display = false; + display_git = false; + self.git_things.commit_message.clear(); + self.git_things.commit_name.clear(); + self.git_things.commit_email.clear(); + self.git_things.changes.clear(); + self.git_things.staged_changes.clear(); + } + + + } } impl eframe::App for IronCoderApp { @@ -517,6 +671,8 @@ impl eframe::App for IronCoderApp { self.display_about_window(ctx); self.unselected_mainboard_warning(ctx); self.display_unnamed_project_warning(ctx); + self.display_git_window(ctx); + self.display_git_warning(ctx); } } diff --git a/src/project/display.rs b/src/project/display.rs index bfffb89..6307d98 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -14,7 +14,7 @@ use git2::{Repository, StatusOptions}; use crate::board::Board; use crate::{project::Project, board}; use crate::app::icons::IconSet; -use crate::app::{Mode, Warnings}; +use crate::app::{Mode, Warnings, Git}; use serde::{Serialize, Deserialize}; @@ -106,7 +106,7 @@ impl Project { } /// Show the project toolbar, with buttons to perform various actions - pub fn display_project_toolbar(&mut self, ctx: &egui::Context, ui: &mut egui::Ui) { + pub fn display_project_toolbar(&mut self, ctx: &egui::Context, ui: &mut egui::Ui, git_things: &mut Git) { let iconref: Arc = ctx.data_mut(|data| { data.get_temp("icons".into()).expect("error loading shared icons!") }); @@ -172,9 +172,9 @@ impl Project { // Commit the changes to the git repo with a user message ui.separator(); - if ui.button("commit").clicked() { + if ui.button("Commit").clicked() { // Open the repo - let mut repo = match Repository::open(self.get_location()) { + let repo = match Repository::open(self.get_location()) { Ok(repo) => repo, Err(e) => { panic!("Error opening repository: {:?}", e); @@ -202,7 +202,9 @@ impl Project { } // Open a window to choose the changes to commit - + git_things.display = true; + git_things.changes = changes; + git_things.repo = Some(repo); } }); From df83fbdbde071477850018618a0bcdecea14402b Mon Sep 17 00:00:00 2001 From: Jacob Date: Thu, 15 Feb 2024 12:40:32 -0500 Subject: [PATCH 35/48] Finished with git commit feature Git commit feature should be fully finished and working --- src/app/mod.rs | 49 ++++++++++++++++++++++++++++-------------- src/project/display.rs | 5 +++++ 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 939dfd9..0637278 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -538,6 +538,9 @@ impl IronCoderApp { .resizable(true) .movable(true) .show(ctx, |ui| { + let repo = self.git_things.repo.as_mut().unwrap(); + let mut index = repo.index().unwrap(); + egui::SidePanel::right("Unstaged Changes").show_inside(ui, |ui| { ui.label("Staged Changes -- Currently doesn't work"); ui.separator(); @@ -547,6 +550,8 @@ impl IronCoderApp { info!("Unstaging: {}", change.clone()); unstaged_to_add.push(change.clone()); staged_to_remove.push(change.clone()); + index.remove_all([change.clone()].iter(), None).unwrap(); + index.write().unwrap(); } } self.git_things.staged_changes.retain(|change| !staged_to_remove.contains(change)); @@ -562,6 +567,17 @@ impl IronCoderApp { info!("Staging: {}", change.clone()); staged_to_add.push(change.clone()); unstaged_to_remove.push(change.clone()); + //index.add_path(Path::new(change)).unwrap(); + match index.add_path(Path::new(change)) { + Ok(_) => { + // add_path succeeded, do nothing + }, + Err(_) => { + // add_path failed, try add_all + index.add_all([change.clone()].iter(), git2::IndexAddOption::DEFAULT, None).unwrap(); + } + } + index.write().unwrap(); } } self.git_things.changes.retain(|change| !unstaged_to_remove.contains(change)); @@ -589,29 +605,30 @@ impl IronCoderApp { if name != "" && email != "" && commit_message != "" { info!("committing changes to git..."); info!("{}", self.git_things.commit_message.clone()); - - let repo = self.git_things.repo.as_mut().unwrap(); - + let signature = git2::Signature::now(&name, &email).unwrap(); - let mut index = repo.index().unwrap(); - // Should make only staged changes be committed but doesn't work instead crashes when reading staged changes - // This has to be fixed because it starts with none of the changes added - index.clear().unwrap(); - for change in self.git_things.staged_changes.iter() { - index.add_path(Path::new(change)).unwrap(); - } - let tree_id = index.write_tree().unwrap(); - let tree = repo.find_tree(tree_id).unwrap(); + let oid = index.write_tree().unwrap(); + let tree = repo.find_tree(oid).unwrap(); + let head = repo.head().unwrap(); + let head_commit = repo.find_commit(head.target().unwrap()).unwrap(); + - repo.commit( + match repo.commit( // There is a problem with the head - None, + Some("HEAD"), &signature, &signature, &commit_message, &tree, - &[] - ).unwrap(); + &[&head_commit] + ) { + Ok(_) => { + info!("commit successful!"); + }, + Err(e) => { + error!("error committing changes to git: {:?}", e); + } + } self.git_things.display = false; self.git_things.commit_message.clear(); diff --git a/src/project/display.rs b/src/project/display.rs index 6307d98..d8ba286 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -181,6 +181,11 @@ impl Project { } }; + // Unstage all staged files + let mut index = repo.index().unwrap(); + index.clear().unwrap(); + index.write().unwrap(); + let mut status_options = StatusOptions::new(); status_options.include_untracked(true); From e1fbb7761791bd202977951a8fc0f9c6a83c12a9 Mon Sep 17 00:00:00 2001 From: Jacob Date: Wed, 21 Feb 2024 20:50:35 -0500 Subject: [PATCH 36/48] Fix removing files from git repo index --- src/project/display.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/project/display.rs b/src/project/display.rs index d8ba286..58d7334 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -1,6 +1,7 @@ use egui::Response; use egui_extras::RetainedImage; use log::{info, warn}; +use ra_ap_ide::Change; use std::collections::HashMap; use std::path::Path; @@ -181,11 +182,6 @@ impl Project { } }; - // Unstage all staged files - let mut index = repo.index().unwrap(); - index.clear().unwrap(); - index.write().unwrap(); - let mut status_options = StatusOptions::new(); status_options.include_untracked(true); @@ -206,6 +202,12 @@ impl Project { info!("{}", change); } + for change in changes.iter() { + let mut index = repo.index().unwrap(); + index.remove_all([change.clone()].iter(), None).unwrap(); + index.write().unwrap(); + } + // Open a window to choose the changes to commit git_things.display = true; git_things.changes = changes; From 01b9454fbec41dbbdde9c1318182665e4b1654e5 Mon Sep 17 00:00:00 2001 From: aidanpine Date: Fri, 23 Feb 2024 14:11:37 -0500 Subject: [PATCH 37/48] - Added "clear terminal" button - Added function for clearing CodeEditor tabs - Made it so that opening a new project saves the current one, closes all tabs, and clears the terminal --- Cargo.toml | 2 +- assets/icons/pack/white/005b_15.gif | Bin 0 -> 110 bytes .../Adafruit/Feather_nRF52832/bsp/Cargo.toml | 2 +- .../Feather_nRF52832/feather_nRF52832.toml | 2 +- .../Feather_nRF52832/template/.cargo/config | 8 +-- .../Feather_nRF52832/template/Cargo.toml | 15 ++++- .../Feather_nRF52832/template/memory.x | 15 ----- .../Feather_nRF52832/template/src/main.rs | 57 ++++++++++++++---- settings.toml | 2 +- src/app/code_editor.rs | 5 ++ src/app/icons.rs | 3 +- src/app/mod.rs | 5 +- src/app/test.rs | 18 ++++++ src/board/mod.rs | 2 + src/board/test.rs | 17 ++++++ src/project/display.rs | 10 +++ src/project/mod.rs | 30 +++++---- src/project/test.rs | 10 +++ 18 files changed, 147 insertions(+), 56 deletions(-) create mode 100644 assets/icons/pack/white/005b_15.gif delete mode 100644 iron-coder-boards/Adafruit/Feather_nRF52832/template/memory.x create mode 100644 src/app/test.rs create mode 100644 src/board/test.rs create mode 100644 src/project/test.rs diff --git a/Cargo.toml b/Cargo.toml index c33003e..b49c655 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,4 +39,4 @@ generate = "1.5.0" cargo-generate = "0.19.0" iron-coder-feather-rp2040-bsp = { version = "0.1.0", path = "iron-coder-boards/Adafruit/Feather_RP2040/bsp" } savefile-derive = "0.16.4" -k_board = "1.2.2" +k_board = "1.2.2" \ No newline at end of file diff --git a/assets/icons/pack/white/005b_15.gif b/assets/icons/pack/white/005b_15.gif new file mode 100644 index 0000000000000000000000000000000000000000..deecd3fd395eaefa8f5daf8fde3c2ecf176f3c6f GIT binary patch literal 110 zcmZ?wbhEHb6k-r!XkcXc|NlP&1B2o}LFb~>#FEq$h4Rdj31pDc`A42%pq zKm|a>LJSN{20i>MkFR|#Hzi~i*KEH0e4e&PtQ9JgXT)@Fcv-dW BOOT2 -} INSERT BEFORE .text; diff --git a/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs b/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs index 24396c6..f8b791e 100644 --- a/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs +++ b/iron-coder-boards/Adafruit/Feather_nRF52832/template/src/main.rs @@ -1,22 +1,57 @@ -#![no_std] #![no_main] +#![no_std] -/**** low-level imports *****/ -use panic_halt as _; -use cortex_m_rt::entry; +use hal::{gpio, prelude::*, pwm, pwm::Pwm, timer, timer::Timer}; +use nb::block; +use nrf52832_hal as hal; +use rtt_target::{rprintln, rtt_init_print}; -mod system; -use system::System; +#[panic_handler] +fn panic(_: &core::panic::PanicInfo) -> ! { + loop { + cortex_m::asm::bkpt(); + } +} -#[entry] +#[cortex_m_rt::entry] fn main() -> ! { - - let mut system = System::new(); + rtt_init_print!(); + + let p = hal::pac::Peripherals::take().unwrap(); + + let (pwm, mut timer) = init_device(p); - // init code goes here! + pwm.set_period(500u32.hz()); + rprintln!("PWM Blinky demo starting"); + + let wait_time = 1_000_000u32 / pwm.get_max_duty() as u32; loop { - // loop code goes here! + for duty in 0..pwm.get_max_duty() { + pwm.set_duty_on_common(duty); + delay(&mut timer, wait_time); + } } +} + +fn init_device(p: hal::pac::Peripherals) -> (Pwm, Timer) { + let p0 = gpio::p0::Parts::new(p.P0); + + let pwm = Pwm::new(p.PWM0); + pwm.set_output_pin( + pwm::Channel::C0, + p0.p0_19.into_push_pull_output(gpio::Level::High).degrade(), + ); + + let timer = Timer::new(p.TIMER0); + + (pwm, timer) +} +fn delay(timer: &mut Timer, cycles: u32) + where + T: timer::Instance, +{ + timer.start(cycles); + let _ = block!(timer.wait()); } \ No newline at end of file diff --git a/settings.toml b/settings.toml index 98e0528..5d4c97c 100644 --- a/settings.toml +++ b/settings.toml @@ -1,2 +1,2 @@ -ui_scale = 1.25 +ui_scale = 2 colorscheme = "Industrial Dark" diff --git a/src/app/code_editor.rs b/src/app/code_editor.rs index 8005cac..a0bf441 100644 --- a/src/app/code_editor.rs +++ b/src/app/code_editor.rs @@ -256,6 +256,11 @@ impl CodeEditor { }); } + pub fn close_all_tabs(&mut self) { + self.active_tab = None; + self.tabs.clear(); + } + pub fn display_editor_tabs(&mut self, ctx: &egui::Context, ui: &mut Ui) { let icons_ref: Arc = ctx.data_mut(|data| { data.get_temp("icons".into()).expect("error loading shared icon map!") diff --git a/src/app/icons.rs b/src/app/icons.rs index ff10204..82ad1a7 100644 --- a/src/app/icons.rs +++ b/src/app/icons.rs @@ -26,10 +26,11 @@ pub fn load_icons(icon_path: &Path) -> HashMap<&'static str, RetainedImage> { let mut icon_map = HashMap::new(); - let icon_names_and_files: [(&str, &str); 15] = [ + let icon_names_and_files: [(&str, &str); 16] = [ ("settings_icon", "gear.png"), ("boards_icon", "chip.png"), ("about_icon", "005b_13.gif"), + ("trash_icon", "005b_15.gif"), ("folder_icon", "005b_43.gif"), ("save_icon", "005b_23.gif"), ("build_icon", "005b_35.gif"), diff --git a/src/app/mod.rs b/src/app/mod.rs index 0e1d8b9..8a4772e 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -36,6 +36,7 @@ pub mod colorscheme; use colorscheme::ColorScheme; pub mod code_editor; +mod test; /// Iron Coder CLI configuration options... #[derive(Parser, Debug, Clone, Default, serde::Deserialize, serde::Serialize)] @@ -61,7 +62,7 @@ pub struct Warnings { /// The current GUI mode #[non_exhaustive] -#[derive(serde::Deserialize, serde::Serialize)] +#[derive(serde::Deserialize, serde::Serialize, PartialEq)] pub enum Mode { EditProject, DevelopProject, @@ -89,7 +90,7 @@ pub struct IronCoderApp { impl Default for IronCoderApp { fn default() -> Self { // Populate the boards - let boards_dir = Path::new("./iron-coder-boards"); + let boards_dir = Path::new("./iron-coder-boards"); // consider making this a global macro let boards: Vec = board::get_boards(boards_dir); Self { project: Project::default(), diff --git a/src/app/test.rs b/src/app/test.rs new file mode 100644 index 0000000..04e130f --- /dev/null +++ b/src/app/test.rs @@ -0,0 +1,18 @@ +/// TODO - Write more tests mainly testing egui related functionality (more research needed) +#[cfg(test)] +mod app_tests { + use crate::IronCoderApp; + + #[test] + fn test_initialization() { + let app : IronCoderApp = IronCoderApp::default(); + assert_ne!(app.boards.len(), 0); + } + #[test] + fn test_get_boards() { + let app : IronCoderApp = IronCoderApp::default(); + let boards = app.get_boards(); + assert_ne!(boards.len(), 0); + assert_eq!(boards, app.boards); + } +} \ No newline at end of file diff --git a/src/board/mod.rs b/src/board/mod.rs index a2cbea9..80d3f40 100644 --- a/src/board/mod.rs +++ b/src/board/mod.rs @@ -22,6 +22,8 @@ pub mod pinout; use pinout::Pinout; pub mod parsing; +mod test; + use parsing::BspParseInfo; /// These are the various standard development board form factors diff --git a/src/board/test.rs b/src/board/test.rs new file mode 100644 index 0000000..5db62dc --- /dev/null +++ b/src/board/test.rs @@ -0,0 +1,17 @@ +#[cfg(test)] +mod board_tests { + use std::collections::HashSet; + use std::path::Path; + use crate::board; + + #[test] + pub fn test_get_boards() { + let mut board_names: HashSet<&str> = HashSet::from(["Feather nRF52832", "Feather RP2040", "OLED Featherwing (128x64)", "PropMaker Featherwing", "PiTFT 3.2 with Capacitive Touch Screen", "MicroMod ESP32 Processor"]); + let boards = board::get_boards(Path::new("./iron-coder-boards")); + for board in boards { + assert!(board_names.contains(board.get_name())); + board_names.remove(board.get_name()); + } + assert!(board_names.is_empty()); + } +} \ No newline at end of file diff --git a/src/project/display.rs b/src/project/display.rs index bb8812f..28cf5e3 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -165,6 +165,16 @@ impl Project { } } + ui.separator(); + let button = Button::image_and_text( + icons.get("trash_icon").unwrap().texture_id(ctx), + egui::Vec2::new(9.0, 9.0), + " clear terminal", + ).frame(false); + if ui.add(button).clicked() { + self.terminal_buffer.clear(); + } + }); } diff --git a/src/project/mod.rs b/src/project/mod.rs index 6ca3f6c..b0179d5 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -24,6 +24,8 @@ use display::ProjectViewType; pub mod egui_helpers; mod system; +mod test; + use system::System; use std::process::Command; @@ -161,6 +163,11 @@ impl Project { /// Load a project from a specified directory, and sync the board assets. fn load_from(&mut self, project_directory: &Path) -> Result { + // check if a project is currently open and save and close all tabs + if self.location != None { + self.save().expect("Error saving project"); + } + let project_file = project_directory.join(PROJECT_FILE_NAME); let toml_str = match fs::read_to_string(project_file) { Ok(s) => s, @@ -178,12 +185,14 @@ impl Project { } }; // Now load in certain fields without overwriting others: + self.code_editor.close_all_tabs(); self.name = p.name; self.location = Some(project_directory.to_path_buf()); self.system = p.system; self.current_view = p.current_view; // sync the assets with the global ones self.load_board_resources(); + self.terminal_buffer.clear(); Ok(()) } @@ -198,6 +207,7 @@ impl Project { } /// Open a file dialog to select a project folder, and then call the save method + /// TODO - make file dialog have default directory pub fn save_as(&mut self, create_containing_folder: bool) -> io::Result<()> { if let Some(mut project_folder) = FileDialog::new().pick_folder() { // if indicated, create a new folder for the project (with same name as project) @@ -215,7 +225,7 @@ impl Project { } } self.location = Some(project_folder); - // TODo: find template directory based on "programmable board" (for now just use board 0) + // TODo: find template directory based on "programmable board" (for now just use board 0) -- No longer relevant? // if let Some(template_dir) = self.system.boards[0].get_template_dir() { // // copy_recursive(template_dir, project_dir) // let options = fs_extra::dir::CopyOptions::new(); @@ -232,7 +242,7 @@ impl Project { self.save() } - // TODO - have this save all project files, maybe, except the target directory + // TODO - have this save all project files, maybe, except the target directory -- FIXED (note: currently only saves all open tabs) pub fn save(&mut self) -> io::Result<()> { if self.location == None { info!("no project location, calling save_as..."); @@ -272,20 +282,8 @@ impl Project { /// Load the code (for now using 'cargo run') fn load_to_board(&mut self, ctx: &egui::Context) { if let Some(path) = &self.location { - //let cmd = duct::cmd!("cargo", "-Z", "unstable-options", "-C", path.as_path().to_str().unwrap(), "run"); - //self.run_background_commands(&[cmd], ctx); - // First check if the board is mounted - // Create the uf2 file for the board. Then redirect the uf2 to be in the current directory. - let file_path_str = path.to_str().unwrap().to_string(); - let cmd_str1 = "cd ".to_string() + &file_path_str + ";\\ - cargo run;\\ - cd ./target/thumbv6m-none-eabi/debug; - cp feather-rp2040-blink.uf2 " + &file_path_str; - cli_cmd(&cmd_str1); - // Flash the board - let cmd_str2 = "cd ".to_string() + &file_path_str + ";\\ - cp feather-rp2040-blink.uf2 D:;"; - cli_cmd(&cmd_str2); + let cmd = duct::cmd!("cargo", "-Z", "unstable-options", "-C", path.as_path().to_str().unwrap(), "run"); + self.run_background_commands(&[cmd], ctx); self.info_logger("Successfully flashed board."); } else { self.info_logger("project needs a valid working directory before building"); diff --git a/src/project/test.rs b/src/project/test.rs new file mode 100644 index 0000000..7803e64 --- /dev/null +++ b/src/project/test.rs @@ -0,0 +1,10 @@ +#[cfg(test)] +mod project_tests { + use crate::project::*; + + #[test] + pub fn test_save_as() { + let mut project: Project = Project{name : "test_project".to_string(), location: None, system: Default::default(), code_editor: Default::default(), terminal_buffer: "".to_string(), receiver: None, current_view: Default::default(), known_boards: vec![] }; + project.save_as(true).expect("Project Failed to Save!"); + } +} \ No newline at end of file From 089a69eae466627dfaa705e1e8cd4e1158701919 Mon Sep 17 00:00:00 2001 From: Jacob Date: Sun, 25 Feb 2024 11:05:18 -0500 Subject: [PATCH 38/48] Added Documentation for cargo doc Added descriptions and titles for all files in app and project folders Added descriptions for all functions in display.rs and app/mod.rs --- src/app/code_editor.rs | 3 +++ src/app/colorscheme.rs | 3 +++ src/app/icons.rs | 10 ++++------ src/app/mod.rs | 12 +++++++++--- src/project/display.rs | 7 +++++++ src/project/egui_helpers.rs | 3 +++ src/project/mod.rs | 3 ++- src/project/system.rs | 3 ++- 8 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/app/code_editor.rs b/src/app/code_editor.rs index 2a5e35d..1b8f070 100644 --- a/src/app/code_editor.rs +++ b/src/app/code_editor.rs @@ -1,3 +1,6 @@ +//! Title: Iron Coder App Module - Code Editor +//! Description: Handles all the code editing functionality for the app. + use std::string::String; use std::fmt; diff --git a/src/app/colorscheme.rs b/src/app/colorscheme.rs index 41c9726..c5a6dc4 100644 --- a/src/app/colorscheme.rs +++ b/src/app/colorscheme.rs @@ -1,3 +1,6 @@ +//! Title: Iron Coder App Module - ColorScheme +//! Description: This module defines the ColorScheme struct and some built-in color schemes for the app. + use egui::Color32; use serde::{Serialize, Deserialize}; diff --git a/src/app/icons.rs b/src/app/icons.rs index ff10204..32f80f7 100644 --- a/src/app/icons.rs +++ b/src/app/icons.rs @@ -1,3 +1,7 @@ +//! Title: Iron Coder App Module - Icons +//! Description: This module defines the IconSet type, which is a mapping of static str +//! to RetainedImages. It also defines functionality to load icons from the filesystem, + use log::error; use std::path::Path; @@ -10,12 +14,6 @@ use egui::{ }; use egui_extras::RetainedImage; -/// icons module -/// defines an IconSet type, which is a mapping of static str -/// to RetainedImages. -/// defines functionality to load icons from the filesystem, -/// and exposes them to the app via a const - pub type IconSet = HashMap<&'static str, RetainedImage>; pub const ICON_DIR: &'static str = "assets/icons/pack/white/"; pub const SMALL_ICON_SIZE: Vec2 = Vec2::new(8.0, 8.0); diff --git a/src/app/mod.rs b/src/app/mod.rs index 0637278..1d31b9b 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1,4 +1,8 @@ -//! Iron Coder is an app for developing embedded firmware in Rust. +//! Title: Iron Coder App Module - Module +//! Description: This module contains the IronCoderApp struct and its implementation. +//! The IronCoderApp struct is the main application struct for the Iron Coder app. +//! It contains all the state and methods for the app, and is the main entry point +//! for the eframe framework to interact with the app. use log::{error, warn, info}; @@ -155,6 +159,7 @@ impl IronCoderApp { return app; } + /// Set the colorscheme for the app fn set_colorscheme(&self, ctx: &egui::Context) { colorscheme::set_colorscheme(ctx, self.colorscheme.clone()); } @@ -693,6 +698,7 @@ impl eframe::App for IronCoderApp { } } +/// Sets up the fonts and style for the app fn setup_fonts_and_style(ctx: &egui::Context) { let mut fonts = egui::FontDefinitions::default(); @@ -816,8 +822,8 @@ fn setup_fonts_and_style(ctx: &egui::Context) { }); } -// Displays a cool looking header in the Ui element, utilizing our custom fonts -// and returns the rect that was drawn to. +/// Displays a cool looking header in the Ui element, utilizing our custom fonts +/// and returns the rect that was drawn to. fn pretty_header(ui: &mut egui::Ui, text: &str) -> egui::Rect { // draw the background and get the rectangle we drew to let text_bg = RichText::new(text.to_uppercase()) diff --git a/src/project/display.rs b/src/project/display.rs index d8ba286..06ba5a1 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -1,3 +1,9 @@ +//! Title: Iron Coder Project Module - Display +//! Description: This file contains methods that help display +//! the main project window using equi. It also contains some +//! helper functions for drawing connections between pins on +//! the system editor. + use egui::Response; use egui_extras::RetainedImage; use log::{info, warn}; @@ -234,6 +240,7 @@ impl Project { }); } + /// Show the crate info pub fn show_crate_info(&mut self, crate_name: String) { self.current_view = ProjectViewType::CrateView(crate_name); } diff --git a/src/project/egui_helpers.rs b/src/project/egui_helpers.rs index 19c0189..0c17e95 100644 --- a/src/project/egui_helpers.rs +++ b/src/project/egui_helpers.rs @@ -1,3 +1,6 @@ +//! Title: Iron Coder Project Module - Egui Helpers +//! Description: This module contains helper functions for drawing egui elements in the project module. + use std::sync::Arc; use crate::project::Project; diff --git a/src/project/mod.rs b/src/project/mod.rs index 88747c7..5ca104a 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -1,4 +1,5 @@ -//! This module describes an Iron Coder project. +//! Title: Iron Coder Project Module - Module +//! Description: This module contains the Project struct and its associated functionality. use log::{info, warn, debug}; diff --git a/src/project/system.rs b/src/project/system.rs index ba1de65..b5ce8bf 100644 --- a/src/project/system.rs +++ b/src/project/system.rs @@ -1,4 +1,5 @@ -//! This module represents a hardware system, i.e. a main board, +//! Title: Iron Coder Poject Module - System +//! Description: This module represents a hardware system, i.e. a main board, //! a set of peripheral boards, and the connections between them. use log::{info, warn}; From 7186f4afaec88b3bf9d40a1de5f9269d4063fbc5 Mon Sep 17 00:00:00 2001 From: Jacob Date: Sun, 25 Feb 2024 13:31:37 -0500 Subject: [PATCH 39/48] Added files to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 53e3dbc..9c239ab 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ projects/ # Added by cargo /target +/settings.toml +/Cargo.lock \ No newline at end of file From 2ff45f213cbf063d341397d72a07c6ff7450b36e Mon Sep 17 00:00:00 2001 From: Jacob Date: Sun, 25 Feb 2024 13:34:31 -0500 Subject: [PATCH 40/48] Removed tracking of ignored files --- Cargo.lock | 4823 ------------------------------------------------- settings.toml | 2 - 2 files changed, 4825 deletions(-) delete mode 100644 Cargo.lock delete mode 100644 settings.toml diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 0b98841..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,4823 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ab_glyph" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - -[[package]] -name = "accesskit" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c98a5d094590335462354da402d754fe2cb78f0e6ce5024611c28ed539c1de" -dependencies = [ - "enumn", - "serde", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" -dependencies = [ - "cfg-if", - "once_cell", - "serde", - "version_check", -] - -[[package]] -name = "always-assert" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127" -dependencies = [ - "log", -] - -[[package]] -name = "android-activity" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40bc1575e653f158cbdc6ebcd917b9564e66321c5325c232c3591269c257be69" -dependencies = [ - "android-properties", - "bitflags 1.3.2", - "cc", - "jni-sys", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "num_enum 0.6.1", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - -[[package]] -name = "anstream" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is-terminal", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" - -[[package]] -name = "anstyle-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "anstyle-wincon" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" -dependencies = [ - "anstyle", - "windows-sys 0.48.0", -] - -[[package]] -name = "anyhow" -version = "1.0.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" - -[[package]] -name = "anymap" -version = "1.0.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1f8f5a6f3d50d89e3797d7593a50f96bb2aaa20ca0cc7be1fb673232c91d72" - -[[package]] -name = "arboard" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" -dependencies = [ - "clipboard-win", - "log", - "objc", - "objc-foundation", - "objc_id", - "once_cell", - "parking_lot 0.12.1", - "thiserror", - "winapi", - "x11rb", -] - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix 0.37.23", - "slab", - "socket2", - "waker-fn", -] - -[[package]] -name = "async-lock" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" -dependencies = [ - "event-listener", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "atomic_refcell" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit_field" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-sys" -version = "0.1.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" -dependencies = [ - "objc-sys", -] - -[[package]] -name = "block2" -version = "0.2.0-alpha.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" -dependencies = [ - "block-sys", - "objc2-encode", -] - -[[package]] -name = "bumpalo" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "calloop" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" -dependencies = [ - "bitflags 1.3.2", - "log", - "nix 0.25.1", - "slotmap", - "thiserror", - "vec_map", -] - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfg-expr" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "215c0072ecc28f92eeb0eea38ba63ddfcb65c2828c46311d646f1a3ff5f9841c" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - -[[package]] -name = "chalk-derive" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff5053a8a42dbff5279a82423946fc56dc1253b76cf211b2b3c14b3aad4e1281" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", - "synstructure", -] - -[[package]] -name = "chalk-ir" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56de2146a8ed0fcd54f4bd50db852f1de4eac9e1efe568494f106c21b77d2a" -dependencies = [ - "bitflags 1.3.2", - "chalk-derive", - "lazy_static", -] - -[[package]] -name = "chalk-recursive" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc09e6e9531f3544989ef89b189e80fbc7ad9e2f73f1c5e03ddc9ffb0527463" -dependencies = [ - "chalk-derive", - "chalk-ir", - "chalk-solve", - "rustc-hash", - "tracing", -] - -[[package]] -name = "chalk-solve" -version = "0.92.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b392e02b4c81ec76d3748da839fc70a5539b83d27c9030668463d34d5110b860" -dependencies = [ - "chalk-derive", - "chalk-ir", - "ena", - "indexmap 1.9.3", - "itertools", - "petgraph", - "rustc-hash", - "tracing", -] - -[[package]] -name = "clap" -version = "4.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" -dependencies = [ - "clap_builder", - "clap_derive", - "once_cell", -] - -[[package]] -name = "clap_builder" -version = "4.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "clap_lex" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" - -[[package]] -name = "clipboard-win" -version = "4.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" -dependencies = [ - "error-code", - "str-buf", - "winapi", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "combine" -version = "4.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "command-group" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5080df6b0f0ecb76cab30808f00d937ba725cebe266a3da8cd89dff92f2a9916" -dependencies = [ - "nix 0.26.2", - "winapi", -] - -[[package]] -name = "concurrent-queue" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "countme" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" -dependencies = [ - "dashmap", - "once_cell", - "rustc-hash", -] - -[[package]] -name = "cov-mark" -version = "2.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d48d8f76bd9331f19fe2aaf3821a9f9fb32c3963e1e3d6ce82a8c09cef7444a" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset 0.9.0", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "dashmap" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" -dependencies = [ - "cfg-if", - "hashbrown 0.12.3", - "lock_api", - "once_cell", - "parking_lot_core 0.9.6", -] - -[[package]] -name = "data-url" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" - -[[package]] -name = "directories-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dissimilar" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632" - -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading 0.8.0", -] - -[[package]] -name = "dot" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a74b6c4d4a1cff5f454164363c16b72fa12463ca6b31f4b5f2035a65fa3d5906" - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "drop_bomb" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1" - -[[package]] -name = "duct" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e" -dependencies = [ - "libc", - "once_cell", - "os_pipe", - "shared_child", -] - -[[package]] -name = "ecolor" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e479a7fa3f23d4e794f8b2f8b3568dd4e47886ad1b12c9c095e141cb591eb63" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "eframe" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4596583a2c680c55b6feaa748f74890c4f9cb9c7cb69d6117110444cb65b2f" -dependencies = [ - "bytemuck", - "cocoa", - "directories-next", - "egui", - "egui-winit", - "egui_glow", - "glow", - "glutin", - "glutin-winit", - "image", - "js-sys", - "log", - "objc", - "percent-encoding", - "raw-window-handle", - "ron", - "serde", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winapi", - "winit", -] - -[[package]] -name = "egui" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aef8ec3ae1b772f340170c65bf27d5b8c28f543a0116c844d2ac08d01123e7" -dependencies = [ - "accesskit", - "ahash", - "epaint", - "log", - "nohash-hasher", - "ron", - "serde", -] - -[[package]] -name = "egui-winit" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a49155fd4a0a4fb21224407a91de0030847972ef90fc64edb63621caea61cb2" -dependencies = [ - "arboard", - "egui", - "instant", - "log", - "raw-window-handle", - "serde", - "smithay-clipboard", - "webbrowser", - "winit", -] - -[[package]] -name = "egui_extras" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9278f4337b526f0d57e5375e5a7340a311fa6ee8f9fcc75721ac50af13face02" -dependencies = [ - "egui", - "image", - "serde", -] - -[[package]] -name = "egui_glow" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8c2752cdf1b0ef5fcda59a898cacabad974d4f5880e92a420b2c917022da64" -dependencies = [ - "bytemuck", - "egui", - "glow", - "log", - "memoffset 0.6.5", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "emath" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3857d743a6e0741cdd60b622a74c7a36ea75f5f8f11b793b41d905d2c9721a4b" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "ena" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" -dependencies = [ - "log", -] - -[[package]] -name = "enum-iterator" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7add3873b5dd076766ee79c8e406ad1a472c385476b9e38849f8eec24f1be689" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "enumn" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b893c4eb2dc092c811165f84dc7447fae16fb66521717968c34c509b39b1a5c5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "epaint" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09333964d4d57f40a85338ba3ca5ed4716070ab184dcfed966b35491c5c64f3b" -dependencies = [ - "ab_glyph", - "ahash", - "atomic_refcell", - "bytemuck", - "ecolor", - "emath", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "serde", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "error-code" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" -dependencies = [ - "libc", - "str-buf", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "exr" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1e481eb11a482815d3e9d618db8c42a93207134662873809335a92327440c18" -dependencies = [ - "bit_field", - "flume", - "half", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "filetime" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.42.0", -] - -[[package]] -name = "fixedbitset" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" - -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "fontconfig-parser" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab2e12762761366dcb876ab8b6e0cfa4797ddcd890575919f008b5ba655672a" -dependencies = [ - "roxmltree", -] - -[[package]] -name = "fontdb" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" -dependencies = [ - "fontconfig-parser", - "log", - "memmap2 0.6.2", - "slotmap", - "tinyvec", - "ttf-parser 0.19.1", -] - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "fst" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gethostname" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "getrandom" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gif" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "git2" -version = "0.13.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29229cc1b24c0e6062f6e742aa3e256492a5323365e5ed3413599f8a5eff7d6" -dependencies = [ - "bitflags 1.3.2", - "libc", - "libgit2-sys", - "log", - "openssl-probe", - "openssl-sys", - "url", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glow" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "glutin" -version = "0.30.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b0385782048be65f0a9dd046c469d6a758a53fe1aa63a8111dea394d2ffa2f" -dependencies = [ - "bitflags 1.3.2", - "cfg_aliases", - "cgl", - "core-foundation", - "dispatch", - "glutin_egl_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "libloading 0.7.4", - "objc2", - "once_cell", - "raw-window-handle", - "wayland-sys 0.30.1", - "windows-sys 0.45.0", - "x11-dl", -] - -[[package]] -name = "glutin-winit" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "629a873fc04062830bfe8f97c03773bcd7b371e23bcc465d0a61448cd1588fa4" -dependencies = [ - "cfg_aliases", - "glutin", - "raw-window-handle", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b3bcbddc51573b977fc6dca5d93867e4f29682cdbaf5d13e48f4fa4346d4d87" -dependencies = [ - "gl_generator", - "windows-sys 0.45.0", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b53cb5fe568964aa066a3ba91eac5ecbac869fb0842cd0dc9e412434f1a1494" -dependencies = [ - "gl_generator", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef89398e90033fc6bc65e9bd42fd29bbbfd483bda5b56dc5562f455550618165" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "half" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - -[[package]] -name = "hkalbasi-rustc-ap-rustc_abi" -version = "0.0.20221221" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adabaadad9aa7576f97af02241cdf5554d62fb3d51a84cb05d77ba28edd3013f" -dependencies = [ - "bitflags 1.3.2", - "hkalbasi-rustc-ap-rustc_index", - "tracing", -] - -[[package]] -name = "hkalbasi-rustc-ap-rustc_index" -version = "0.0.20221221" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4d3c48474e09afb0f5efbd6f758e05411699301a113c47d454d28ec7059d00e" -dependencies = [ - "arrayvec", - "smallvec", -] - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "exr", - "gif", - "jpeg-decoder", - "num-rational", - "num-traits", - "png", - "qoi", - "tiff", -] - -[[package]] -name = "imagesize" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" - -[[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", -] - -[[package]] -name = "indexmap" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" -dependencies = [ - "equivalent", - "hashbrown 0.14.0", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "iron_coder" -version = "0.2.0" -dependencies = [ - "clap", - "duct", - "eframe", - "egui", - "egui_extras", - "enum-iterator", - "fs_extra", - "git2", - "image", - "log", - "prettyplease", - "proc-macro2", - "quote", - "ra_ap_ide", - "ra_ap_rust-analyzer", - "rfd", - "serde", - "slotmap", - "syn 2.0.27", - "syntect", - "toml", - "tracing", - "tracing-subscriber", - "usvg", -] - -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi", - "rustix 0.38.4", - "windows-sys 0.48.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" - -[[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", - "log", - "thiserror", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" -dependencies = [ - "libc", -] - -[[package]] -name = "jod-thread" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b23360e99b8717f20aaa4598f5a6541efbe30630039fbc7706cf954a87947ae" - -[[package]] -name = "jpeg-decoder" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" -dependencies = [ - "rayon", -] - -[[package]] -name = "js-sys" -version = "0.3.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "kqueue" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "kurbo" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "la-arena" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3752f229dcc5a481d60f385fa479ff46818033d881d2d801aa27dffcfb5e8306" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "libc" -version = "0.2.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" - -[[package]] -name = "libgit2-sys" -version = "0.12.26+1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e1c899248e606fbfe68dcb31d8b0176ebab833b103824af31bddf4b7457494" -dependencies = [ - "cc", - "libc", - "libssh2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", -] - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "libloading" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "libssh2-sys" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "line-index" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee59ea2e50e61bae4f09eee6416820f2ba9796d6e924c86f6e4f699dcb1a7ac" -dependencies = [ - "nohash-hasher", - "text-size", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" - -[[package]] -name = "lock_api" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" - -[[package]] -name = "lsp-server" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ea9ae5a5082ca3b6ae824fc7666cd206b99168a4d4c769ad8fe9cc740df6a6" -dependencies = [ - "crossbeam-channel", - "log", - "serde", - "serde_json", -] - -[[package]] -name = "lsp-types" -version = "0.94.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b63735a13a1f9cd4f4835223d828ed9c2e35c8c5e61837774399f558b6a1237" -dependencies = [ - "bitflags 1.3.2", - "serde", - "serde_json", - "serde_repr", - "url", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "memmap2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[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.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.42.0", -] - -[[package]] -name = "miow" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ffbca2f655e33c08be35d87278e5b18b89550a37dbd598c20db92f6a471123" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom", -] - -[[package]] -name = "ndk" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" -dependencies = [ - "bitflags 1.3.2", - "jni-sys", - "ndk-sys", - "num_enum 0.5.11", - "raw-window-handle", - "thiserror", -] - -[[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.4.1+23.1.7779620" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "static_assertions", -] - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "notify" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" -dependencies = [ - "bitflags 1.3.2", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "mio", - "walkdir", - "windows-sys 0.42.0", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive 0.5.11", -] - -[[package]] -name = "num_enum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" -dependencies = [ - "num_enum_derive 0.6.1", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num_enum_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - -[[package]] -name = "objc-sys" -version = "0.2.0-beta.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" - -[[package]] -name = "objc2" -version = "0.3.0-beta.3.patch-leaks.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" -dependencies = [ - "block2", - "objc-sys", - "objc2-encode", -] - -[[package]] -name = "objc2-encode" -version = "2.0.0-pre.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" -dependencies = [ - "objc-sys", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "object" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "onig" -version = "6.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" -dependencies = [ - "bitflags 1.3.2", - "libc", - "once_cell", - "onig_sys", -] - -[[package]] -name = "onig_sys" -version = "69.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "orbclient" -version = "0.3.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1" -dependencies = [ - "redox_syscall 0.3.5", -] - -[[package]] -name = "os_pipe" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "owned_ttf_parser" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" -dependencies = [ - "ttf-parser 0.19.1", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.6", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.42.0", -] - -[[package]] -name = "percent-encoding" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" - -[[package]] -name = "perf-event" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5396562cd2eaa828445d6d34258ae21ee1eb9d40fe626ca7f51c8dccb4af9d66" -dependencies = [ - "libc", - "perf-event-open-sys", -] - -[[package]] -name = "perf-event-open-sys" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9bedf5da2c234fdf2391ede2b90fabf585355f33100689bc364a3ea558561a" -dependencies = [ - "libc", -] - -[[package]] -name = "petgraph" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" -dependencies = [ - "fixedbitset", - "indexmap 1.9.3", -] - -[[package]] -name = "pico-args" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" - -[[package]] -name = "pin-project" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "plist" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" -dependencies = [ - "base64 0.21.2", - "indexmap 1.9.3", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "prettyplease" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" -dependencies = [ - "proc-macro2", - "syn 2.0.27", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "protobuf" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee4a7d8b91800c8f167a6268d1a1026607368e1adc84e98fe044aeb905302f7" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror", -] - -[[package]] -name = "protobuf-support" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca157fe12fc7ee2e315f2f735e27df41b3d97cdd70ea112824dac1ffb08ee1c" -dependencies = [ - "thiserror", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" -dependencies = [ - "bitflags 1.3.2", - "memchr", - "unicase", -] - -[[package]] -name = "pulldown-cmark-to-cmark" -version = "10.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0194e6e1966c23cc5fd988714f85b18d548d773e81965413555d96569931833d" -dependencies = [ - "pulldown-cmark", -] - -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "quick-xml" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "ra-ap-rustc_lexer" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c145702ed3f237918e512685185dc8a4d0edc3a5326c63d20361d8ba9b45b3" -dependencies = [ - "unic-emoji-char", - "unicode-xid", -] - -[[package]] -name = "ra_ap_base_db" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355e07bdf0a8823f7a7ae17babe7ff11dc06600934ab6dd720e54fab0ba79e86" -dependencies = [ - "la-arena", - "ra_ap_cfg", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_test_utils", - "ra_ap_tt", - "ra_ap_vfs", - "rustc-hash", - "salsa", - "triomphe", -] - -[[package]] -name = "ra_ap_cfg" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8b57a8aa3bc93b1b490e9ebecbd8a0a17bb916fe4231e8d850cbaeb884a618" -dependencies = [ - "ra_ap_tt", - "rustc-hash", -] - -[[package]] -name = "ra_ap_flycheck" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5cea726b3632a1620dad0c2439ecd9ae614d4ff010c8e9ea03c52a074f73180" -dependencies = [ - "cargo_metadata", - "command-group", - "crossbeam-channel", - "ra_ap_paths", - "ra_ap_stdx", - "ra_ap_toolchain", - "rustc-hash", - "serde", - "serde_json", - "tracing", -] - -[[package]] -name = "ra_ap_hir" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a55c89ca3cab6e53354c61e24782b657b417871d391612cfe1d0f6dddde3" -dependencies = [ - "arrayvec", - "either", - "itertools", - "once_cell", - "ra_ap_base_db", - "ra_ap_cfg", - "ra_ap_hir_def", - "ra_ap_hir_expand", - "ra_ap_hir_ty", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_tt", - "rustc-hash", - "smallvec", - "triomphe", -] - -[[package]] -name = "ra_ap_hir_def" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd1f1dd5d889c8422e6cde6a4af29ba31e2182e67e61a852065e0c9fb21a994e" -dependencies = [ - "anymap", - "arrayvec", - "bitflags 2.3.3", - "cov-mark", - "dashmap", - "drop_bomb", - "either", - "fst", - "hashbrown 0.12.3", - "hkalbasi-rustc-ap-rustc_abi", - "hkalbasi-rustc-ap-rustc_index", - "indexmap 2.0.0", - "itertools", - "la-arena", - "once_cell", - "ra_ap_base_db", - "ra_ap_cfg", - "ra_ap_hir_expand", - "ra_ap_intern", - "ra_ap_limit", - "ra_ap_mbe", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_tt", - "rustc-hash", - "smallvec", - "tracing", - "triomphe", -] - -[[package]] -name = "ra_ap_hir_expand" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baeb1bf167a26ce5bf9abdf42e2d29b42ea382dcfe493bbdcb5871ccd82414f" -dependencies = [ - "cov-mark", - "either", - "hashbrown 0.12.3", - "itertools", - "la-arena", - "ra_ap_base_db", - "ra_ap_cfg", - "ra_ap_intern", - "ra_ap_limit", - "ra_ap_mbe", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_tt", - "rustc-hash", - "smallvec", - "tracing", - "triomphe", -] - -[[package]] -name = "ra_ap_hir_ty" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e5fdc0ad131da5aa999a759f2225fc99177408978ff0a21acc92fa0f525c13" -dependencies = [ - "arrayvec", - "bitflags 2.3.3", - "chalk-derive", - "chalk-ir", - "chalk-recursive", - "chalk-solve", - "cov-mark", - "either", - "ena", - "hkalbasi-rustc-ap-rustc_index", - "itertools", - "la-arena", - "nohash-hasher", - "once_cell", - "ra_ap_base_db", - "ra_ap_hir_def", - "ra_ap_hir_expand", - "ra_ap_intern", - "ra_ap_limit", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "rustc-hash", - "scoped-tls", - "smallvec", - "tracing", - "triomphe", - "typed-arena", -] - -[[package]] -name = "ra_ap_ide" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e12a0942c2e86f1bf9796782091975f1f5bb685bf89a74069e11ff613547675" -dependencies = [ - "cov-mark", - "crossbeam-channel", - "dot", - "either", - "itertools", - "nohash-hasher", - "oorandom", - "pulldown-cmark", - "pulldown-cmark-to-cmark", - "ra_ap_cfg", - "ra_ap_hir", - "ra_ap_ide_assists", - "ra_ap_ide_completion", - "ra_ap_ide_db", - "ra_ap_ide_diagnostics", - "ra_ap_ide_ssr", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_text_edit", - "ra_ap_toolchain", - "smallvec", - "tracing", - "triomphe", - "url", -] - -[[package]] -name = "ra_ap_ide_assists" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efed8b041e5f37451176b46d34ab99f29a8129967fe2c4626b100ecfad1f44fb" -dependencies = [ - "cov-mark", - "either", - "itertools", - "ra_ap_hir", - "ra_ap_ide_db", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_text_edit", - "smallvec", -] - -[[package]] -name = "ra_ap_ide_completion" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850141d7a76c1c53502b4ad5eee664e6e3eda9b171c27c0467bda314310b2553" -dependencies = [ - "cov-mark", - "itertools", - "once_cell", - "ra_ap_base_db", - "ra_ap_hir", - "ra_ap_ide_db", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_text_edit", - "smallvec", -] - -[[package]] -name = "ra_ap_ide_db" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bed825630c27436856116118892b7cd3f21cb99ba2951c9250cfd8db8311434" -dependencies = [ - "arrayvec", - "cov-mark", - "either", - "fst", - "indexmap 2.0.0", - "itertools", - "line-index", - "memchr", - "nohash-hasher", - "once_cell", - "ra_ap_base_db", - "ra_ap_hir", - "ra_ap_limit", - "ra_ap_parser", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_text_edit", - "rayon", - "rustc-hash", - "tracing", - "triomphe", -] - -[[package]] -name = "ra_ap_ide_diagnostics" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d84c85babbc7a30f9be3758e171f25b5afd0c4eada4e7e76ee551a4f674ee0" -dependencies = [ - "cov-mark", - "either", - "itertools", - "ra_ap_cfg", - "ra_ap_hir", - "ra_ap_ide_db", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_text_edit", - "serde_json", -] - -[[package]] -name = "ra_ap_ide_ssr" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76b61a514a05df72cfc12445e66c9c85205a73584ebfb8f4a025dcb91a02ec2" -dependencies = [ - "cov-mark", - "itertools", - "nohash-hasher", - "ra_ap_hir", - "ra_ap_ide_db", - "ra_ap_parser", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_text_edit", - "triomphe", -] - -[[package]] -name = "ra_ap_intern" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495826b3b3d31f785e35e9c03625448fe919fc08ecaa905e08041173f2b0d556" -dependencies = [ - "dashmap", - "hashbrown 0.12.3", - "once_cell", - "rustc-hash", - "triomphe", -] - -[[package]] -name = "ra_ap_limit" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1d2b9b96768e2edbaf0dbedd8ce84e5158ba1937116f4da654990887a39065" - -[[package]] -name = "ra_ap_mbe" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75c0e8e900056e905e095a23079bb4d07e59ef25daf1328df53c38b547e837c" -dependencies = [ - "cov-mark", - "ra_ap_parser", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_tt", - "rustc-hash", - "smallvec", - "tracing", -] - -[[package]] -name = "ra_ap_parser" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1e77cec34dfbf975a9748ddd855a58229e21fcab84061bcfa5389d14ca9739" -dependencies = [ - "drop_bomb", - "ra-ap-rustc_lexer", - "ra_ap_limit", -] - -[[package]] -name = "ra_ap_paths" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206851c8e47610c54c2f1bd7dbbb69b025f8e1afc1fc94b97a9b553bc3e30ffc" - -[[package]] -name = "ra_ap_proc_macro_api" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dc484f93bbd993c8ac52ac1beaebb01ea4fc6dff7aa7c90eb30cb4f0f33fec" -dependencies = [ - "memmap2 0.5.10", - "object", - "ra_ap_paths", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_tt", - "serde", - "serde_json", - "snap", - "tracing", - "triomphe", -] - -[[package]] -name = "ra_ap_profile" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86365a5e22c02b36a1046f97fd3398788ebc4dec7661fc9fcc58de537b28f4f0" -dependencies = [ - "cfg-if", - "countme", - "la-arena", - "libc", - "once_cell", - "perf-event", - "winapi", -] - -[[package]] -name = "ra_ap_project_model" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1ab9419b80fe5a5ec7c103b23ca43923dc2b77f7cf8942f86e7e50faf50e17c" -dependencies = [ - "anyhow", - "cargo_metadata", - "itertools", - "la-arena", - "ra_ap_base_db", - "ra_ap_cfg", - "ra_ap_paths", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_toolchain", - "rustc-hash", - "semver", - "serde", - "serde_json", - "tracing", - "triomphe", -] - -[[package]] -name = "ra_ap_rust-analyzer" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2928c390de7aa09460f678b7fc75d27c9bd1905ec3afecdfe91fa9d12e6c1" -dependencies = [ - "always-assert", - "anyhow", - "crossbeam-channel", - "dissimilar", - "filetime", - "itertools", - "lsp-server", - "lsp-types", - "mio", - "nohash-hasher", - "num_cpus", - "oorandom", - "parking_lot 0.12.1", - "parking_lot_core 0.9.6", - "ra_ap_cfg", - "ra_ap_flycheck", - "ra_ap_hir", - "ra_ap_hir_def", - "ra_ap_hir_ty", - "ra_ap_ide", - "ra_ap_ide_db", - "ra_ap_ide_ssr", - "ra_ap_proc_macro_api", - "ra_ap_profile", - "ra_ap_project_model", - "ra_ap_stdx", - "ra_ap_syntax", - "ra_ap_toolchain", - "ra_ap_tt", - "ra_ap_vfs", - "ra_ap_vfs-notify", - "rayon", - "rustc-hash", - "scip", - "serde", - "serde_json", - "tracing", - "tracing-log", - "tracing-subscriber", - "tracing-tree", - "triomphe", - "winapi", - "xflags", -] - -[[package]] -name = "ra_ap_stdx" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189493c3b178c61811e1fcdd0b8c59ecfc5d8d6e71bee0b1a65c27ba7e6bd85a" -dependencies = [ - "always-assert", - "crossbeam-channel", - "jod-thread", - "libc", - "miow", - "winapi", -] - -[[package]] -name = "ra_ap_syntax" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bcaecbd185ef5598156fc8c35f21a2151318bd0a5c447325347f949b82420b2" -dependencies = [ - "cov-mark", - "either", - "indexmap 2.0.0", - "itertools", - "once_cell", - "ra-ap-rustc_lexer", - "ra_ap_parser", - "ra_ap_profile", - "ra_ap_stdx", - "ra_ap_text_edit", - "rowan", - "rustc-hash", - "smol_str", - "triomphe", -] - -[[package]] -name = "ra_ap_test_utils" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba2b7a2bfb4baeaacfaa17afee20e18b4a9b950e7c886f6d9094e9a220ddf1e" -dependencies = [ - "dissimilar", - "ra_ap_profile", - "ra_ap_stdx", - "rustc-hash", - "text-size", -] - -[[package]] -name = "ra_ap_text_edit" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1548fa953738f8593e242c5b6fb442a4a97a62adec5a8646761c577215ca57" -dependencies = [ - "itertools", - "text-size", -] - -[[package]] -name = "ra_ap_toolchain" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183c215489b471d00f26f2915f62b08fa1b989b3d720c92ce7776939104b59aa" -dependencies = [ - "home", -] - -[[package]] -name = "ra_ap_tt" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f615774b3bc5dcb61b308981ad9c7f06e0fd3ec28e1b8e83f93a11cb18836b13" -dependencies = [ - "ra_ap_stdx", - "smol_str", -] - -[[package]] -name = "ra_ap_vfs" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0957aa04ca507e0ae99a8866b1316b7f02c607fc1b45c954298b2416418b1d72" -dependencies = [ - "fst", - "indexmap 2.0.0", - "nohash-hasher", - "ra_ap_paths", - "ra_ap_stdx", - "rustc-hash", -] - -[[package]] -name = "ra_ap_vfs-notify" -version = "0.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476019045310a8ea4bb65aa9a87a657f426f08c04f94ccaba1ff2f4a83c7825d" -dependencies = [ - "crossbeam-channel", - "notify", - "ra_ap_paths", - "ra_ap_stdx", - "ra_ap_vfs", - "tracing", - "walkdir", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "rayon" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - -[[package]] -name = "rctree" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "rfd" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe664af397d2b6a13a8ba1d172a2b5c87c6c5149039edbf8fa122b98c9ed96f" -dependencies = [ - "async-io", - "block", - "dispatch", - "futures-util", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "log", - "objc", - "objc-foundation", - "objc_id", - "raw-window-handle", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows", -] - -[[package]] -name = "ron" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" -dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", - "serde", -] - -[[package]] -name = "rowan" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64449cfef9483a475ed56ae30e2da5ee96448789fb2aa240a04beb6a055078bf" -dependencies = [ - "countme", - "hashbrown 0.12.3", - "memoffset 0.8.0", - "rustc-hash", - "text-size", -] - -[[package]] -name = "roxmltree" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8" -dependencies = [ - "xmlparser", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustix" -version = "0.37.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" -dependencies = [ - "bitflags 2.3.3", - "errno", - "libc", - "linux-raw-sys 0.4.3", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustybuzz" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162bdf42e261bee271b3957691018634488084ef577dddeb6420a9684cab2a6a" -dependencies = [ - "bitflags 1.3.2", - "bytemuck", - "smallvec", - "ttf-parser 0.18.1", - "unicode-bidi-mirroring", - "unicode-ccc", - "unicode-general-category", - "unicode-script", -] - -[[package]] -name = "ryu" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "salsa" -version = "0.17.0-pre.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b223dccb46c32753144d0b51290da7230bb4aedcd8379d6b4c9a474c18bf17a" -dependencies = [ - "crossbeam-utils", - "indexmap 1.9.3", - "lock_api", - "log", - "oorandom", - "parking_lot 0.11.2", - "rustc-hash", - "salsa-macros", - "smallvec", -] - -[[package]] -name = "salsa-macros" -version = "0.17.0-pre.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac6c2e352df550bf019da7b16164ed2f7fa107c39653d1311d1bba42d1582ff7" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scip" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bfbb10286f69fad7c78db71004b7839bf957788359fe0c479f029f9849136b" -dependencies = [ - "protobuf", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sctk-adwaita" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" -dependencies = [ - "ab_glyph", - "log", - "memmap2 0.5.10", - "smithay-client-toolkit", - "tiny-skia", -] - -[[package]] -name = "semver" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.175" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.175" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "serde_json" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" -dependencies = [ - "indexmap 2.0.0", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e168eaaf71e8f9bd6037feb05190485708e019f4fd87d161b3c0a0d37daf85e5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "serde_spanned" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" -dependencies = [ - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shared_child" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "simplecss" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" -dependencies = [ - "log", -] - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slotmap" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" -dependencies = [ - "version_check", -] - -[[package]] -name = "smallvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" - -[[package]] -name = "smithay-client-toolkit" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" -dependencies = [ - "bitflags 1.3.2", - "calloop", - "dlib", - "lazy_static", - "log", - "memmap2 0.5.10", - "nix 0.24.3", - "pkg-config", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - -[[package]] -name = "smithay-clipboard" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" -dependencies = [ - "smithay-client-toolkit", - "wayland-client", -] - -[[package]] -name = "smol_str" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" -dependencies = [ - "serde", -] - -[[package]] -name = "snap" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "str-buf" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" - -[[package]] -name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" -dependencies = [ - "float-cmp", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "svgtypes" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4b0611e7f3277f68c0fa18e385d9e2d26923691379690039548f867cef02a7" -dependencies = [ - "kurbo", - "siphasher", -] - -[[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.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", - "unicode-xid", -] - -[[package]] -name = "syntect" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c454c27d9d7d9a84c7803aaa3c50cd088d2906fe3c6e42da3209aa623576a8" -dependencies = [ - "bincode", - "bitflags 1.3.2", - "flate2", - "fnv", - "lazy_static", - "once_cell", - "onig", - "plist", - "regex-syntax", - "serde", - "serde_derive", - "serde_json", - "thiserror", - "walkdir", - "yaml-rust", -] - -[[package]] -name = "system-deps" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" -dependencies = [ - "cfg-expr", - "heck 0.4.1", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "target-lexicon" -version = "0.12.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2faeef5759ab89935255b1a4cd98e0baf99d1085e37d36599c625dac49ae8e" - -[[package]] -name = "text-size" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" - -[[package]] -name = "thiserror" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "tiff" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "time" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny-skia" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "png", - "tiny-skia-path 0.8.4", -] - -[[package]] -name = "tiny-skia-path" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - -[[package]] -name = "tiny-skia-path" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "toml" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" -dependencies = [ - "indexmap 2.0.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", -] - -[[package]] -name = "tracing-core" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "tracing-tree" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d6b63348fad3ae0439b8bebf8d38fb5bda0b115d7a8a7e6f165f12790c58c3" -dependencies = [ - "is-terminal", - "nu-ansi-term", - "tracing-core", - "tracing-log", - "tracing-subscriber", -] - -[[package]] -name = "triomphe" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f" - -[[package]] -name = "ttf-parser" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" - -[[package]] -name = "ttf-parser" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a464a4b34948a5f67fddd2b823c62d9d92e44be75058b99939eae6c5b6960b33" - -[[package]] -name = "typed-arena" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" - -[[package]] -name = "unic-char-property" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" -dependencies = [ - "unic-char-range", -] - -[[package]] -name = "unic-char-range" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" - -[[package]] -name = "unic-common" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" - -[[package]] -name = "unic-emoji-char" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b07221e68897210270a38bde4babb655869637af0f69407f96053a34f76494d" -dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", -] - -[[package]] -name = "unic-ucd-version" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -dependencies = [ - "unic-common", -] - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-bidi-mirroring" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" - -[[package]] -name = "unicode-ccc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" - -[[package]] -name = "unicode-general-category" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" - -[[package]] -name = "unicode-ident" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-script" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-vo" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "url" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "usvg" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d09ddfb0d93bf84824c09336d32e42f80961a9d1680832eb24fdf249ce11e6" -dependencies = [ - "base64 0.21.2", - "log", - "pico-args", - "usvg-parser", - "usvg-text-layout", - "usvg-tree", - "xmlwriter", -] - -[[package]] -name = "usvg-parser" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19bf93d230813599927d88557014e0908ecc3531666d47c634c6838bc8db408" -dependencies = [ - "data-url", - "flate2", - "imagesize", - "kurbo", - "log", - "roxmltree", - "simplecss", - "siphasher", - "svgtypes", - "usvg-tree", -] - -[[package]] -name = "usvg-text-layout" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035044604e89652c0a2959b8b356946997a52649ba6cade45928c2842376feb4" -dependencies = [ - "fontdb", - "kurbo", - "log", - "rustybuzz", - "unicode-bidi", - "unicode-script", - "unicode-vo", - "usvg-tree", -] - -[[package]] -name = "usvg-tree" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7939a7e4ed21cadb5d311d6339730681c3e24c3e81d60065be80e485d3fc8b92" -dependencies = [ - "rctree", - "strict-num", - "svgtypes", - "tiny-skia-path 0.10.0", -] - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.27", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.27", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" - -[[package]] -name = "wayland-client" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" -dependencies = [ - "bitflags 1.3.2", - "downcast-rs", - "libc", - "nix 0.24.3", - "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys 0.29.5", -] - -[[package]] -name = "wayland-commons" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" -dependencies = [ - "nix 0.24.3", - "once_cell", - "smallvec", - "wayland-sys 0.29.5", -] - -[[package]] -name = "wayland-cursor" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" -dependencies = [ - "nix 0.24.3", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" -dependencies = [ - "bitflags 1.3.2", - "wayland-client", - "wayland-commons", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" -dependencies = [ - "proc-macro2", - "quote", - "xml-rs", -] - -[[package]] -name = "wayland-sys" -version = "0.29.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" -dependencies = [ - "dlib", - "lazy_static", - "pkg-config", -] - -[[package]] -name = "wayland-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" -dependencies = [ - "dlib", - "lazy_static", - "log", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webbrowser" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd222aa310eb7532e3fd427a5d7db7e44bc0b0cf1c1e21139c345325511a85b6" -dependencies = [ - "core-foundation", - "home", - "jni", - "log", - "ndk-context", - "objc", - "raw-window-handle", - "url", - "web-sys", -] - -[[package]] -name = "weezl" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-wsapoll" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -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-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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.1", -] - -[[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.48.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[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.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winit" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "866db3f712fffba75d31bf0cdecf357c8aeafd158c5b7ab51dba2a2b2d47f196" -dependencies = [ - "android-activity", - "bitflags 1.3.2", - "cfg_aliases", - "core-foundation", - "core-graphics", - "dispatch", - "instant", - "libc", - "log", - "mio", - "ndk", - "objc2", - "once_cell", - "orbclient", - "percent-encoding", - "raw-window-handle", - "redox_syscall 0.3.5", - "sctk-adwaita", - "smithay-client-toolkit", - "wasm-bindgen", - "wayland-client", - "wayland-commons", - "wayland-protocols", - "wayland-scanner", - "web-sys", - "windows-sys 0.45.0", - "x11-dl", -] - -[[package]] -name = "winnow" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11" -dependencies = [ - "memchr", -] - -[[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 = "x11rb" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" -dependencies = [ - "gethostname", - "nix 0.24.3", - "winapi", - "winapi-wsapoll", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" -dependencies = [ - "nix 0.24.3", -] - -[[package]] -name = "xcursor" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] - -[[package]] -name = "xflags" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4554b580522d0ca238369c16b8f6ce34524d61dafe7244993754bbd05f2c2ea" -dependencies = [ - "xflags-macros", -] - -[[package]] -name = "xflags-macros" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e7b3ca8977093aae6b87b6a7730216fc4c53a6530bab5c43a783cd810c1a8" - -[[package]] -name = "xml-rs" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47430998a7b5d499ccee752b41567bc3afc57e1327dc855b1a2aa44ce29b5fa1" - -[[package]] -name = "xmlparser" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" - -[[package]] -name = "xmlwriter" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" - -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] diff --git a/settings.toml b/settings.toml deleted file mode 100644 index 98e0528..0000000 --- a/settings.toml +++ /dev/null @@ -1,2 +0,0 @@ -ui_scale = 1.25 -colorscheme = "Industrial Dark" From d6f70bc54a58700f4150d5a0029daab4bafc2cf9 Mon Sep 17 00:00:00 2001 From: AidanPine <92037147+AidanPine@users.noreply.github.com> Date: Sun, 25 Feb 2024 16:46:23 -0500 Subject: [PATCH 41/48] - Updated egui to the most recent version - Changed icon loading method to use egui image instead of deprecated RetainedImage - Fixed errors corresponding to button functions using older format after updating --- Cargo.toml | 12 +++++----- src/app/code_editor.rs | 3 +-- src/app/icons.rs | 48 ++++++------------------------------- src/app/mod.rs | 40 ++++++++++++++----------------- src/project/display.rs | 20 +++++++--------- src/project/egui_helpers.rs | 3 +-- 6 files changed, 41 insertions(+), 85 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 728baea..1f90485 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,8 +7,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -egui = { version = "0.22.0", features = ["serde"] } -eframe = { version = "0.22.0", default-features = false, features = [ +egui = { version = "0.26.2", features = ["serde"] } +eframe = { version = "0.26.2", default-features = false, features = [ "default_fonts", # Embed the default egui fonts. "glow", # Use the glow rendering backend. Alternative: "wgpu". "persistence", # Enable restoring app state when restarting the app. @@ -18,7 +18,7 @@ tracing-subscriber = "0.3" log = "0.4.19" # You only need serde if you want app persistence: serde = { version = "1", features = ["derive"] } -egui_extras = { version = "0.22.0", features = ["image"] } +egui_extras = { version = "0.26.2", features = ["image", "all_loaders"] } image = { version = "0.24.6", features = ["jpeg", "png", "gif"] } toml = "0.7.4" syntect = "5.0.0" @@ -26,8 +26,8 @@ rfd = "0.11.4" fs_extra = "1.3.0" duct = "0.13.6" enum-iterator = "1.4.1" -ra_ap_rust-analyzer = "0.0.160" -ra_ap_ide = "0.0.160" +ra_ap_rust-analyzer = "0.0.202" +ra_ap_ide = "0.0.202" syn = { version = "2.0.25", features = ["full", "extra-traits", "parsing", "visit"] } quote = "1.0.29" proc-macro2 = "1.0.64" @@ -40,4 +40,4 @@ cargo-generate = "0.19.0" iron-coder-feather-rp2040-bsp = { version = "0.1.0", path = "iron-coder-boards/Adafruit/Feather_RP2040/bsp" } savefile-derive = "0.16.4" k_board = "1.2.2" -git2 = "0.13.17" +git2 = "0.18.2" diff --git a/src/app/code_editor.rs b/src/app/code_editor.rs index ea3495c..62c2939 100644 --- a/src/app/code_editor.rs +++ b/src/app/code_editor.rs @@ -274,8 +274,7 @@ impl CodeEditor { for (i, code_file) in self.tabs.iter().enumerate() { // display the close icon let x_icon = egui::widgets::ImageButton::new( - icons.get("quit_icon").unwrap().texture_id(ctx), - egui::Vec2::new(6.0, 6.0), + icons.get("quit_icon").unwrap().clone() ).frame(true); if ui.add(x_icon).clicked() { // we'll remove the tab right after this loop diff --git a/src/app/icons.rs b/src/app/icons.rs index 10e6d67..a1a461f 100644 --- a/src/app/icons.rs +++ b/src/app/icons.rs @@ -8,19 +8,15 @@ use std::path::Path; use std::collections::HashMap; use image; -use egui::{ - ColorImage, - Vec2, -}; -use egui_extras::RetainedImage; +use egui::{Vec2, Image}; -pub type IconSet = HashMap<&'static str, RetainedImage>; -pub const ICON_DIR: &'static str = "assets/icons/pack/white/"; +pub type IconSet<'a> = HashMap<&'static str, Image<'a>>; +pub const ICON_DIR: &'static str = "file://assets/icons/pack/white/"; pub const SMALL_ICON_SIZE: Vec2 = Vec2::new(8.0, 8.0); pub const DEFAULT_ICON_SIZE: Vec2 = Vec2::new(12.0, 12.0); // This function returns a mapping of icon names to RetainedImages -pub fn load_icons(icon_path: &Path) -> HashMap<&'static str, RetainedImage> { +pub fn load_icons(icon_path: &Path) -> HashMap<&'static str, Image> { let mut icon_map = HashMap::new(); @@ -42,41 +38,11 @@ pub fn load_icons(icon_path: &Path) -> HashMap<&'static str, RetainedImage> { ("plus_icon", "005b_39.gif"), ("right_arrow_icon", "005b_53.gif"), ]; - for (icon_name, icon_file) in icon_names_and_files.into_iter() { - let p = icon_path.join(icon_file); + let p = icon_path.join(icon_file).as_path().to_str().unwrap().to_string(); // attempt to open the icon image file - let im_file = match image::io::Reader::open(p) { - Err(e) => { - error!("error reading icon file {:?}: {:?}", icon_file, e); - break; - }, - Ok(im_file) => { - im_file - } - }; - // attempt to decode it - let image = match im_file.decode() { - Err(e) => { - error!("error decoding icon file {:?}: {:?}", icon_file, e); - break; - }, - Ok(image) => { - image - } - }; - let size = [image.width() as _, image.height() as _]; - let image_buffer = image.to_rgba8(); - let image_samples = image_buffer.as_flat_samples(); - let color_image = ColorImage::from_rgba_unmultiplied( - size, - image_samples.as_slice(), - ); - let retained_image = RetainedImage::from_color_image( - icon_name, - color_image, - ); - icon_map.insert(icon_name, retained_image); + let image = Image::new(p).fit_to_exact_size(DEFAULT_ICON_SIZE); + icon_map.insert(icon_name, image); } return icon_map; } \ No newline at end of file diff --git a/src/app/mod.rs b/src/app/mod.rs index f15a3db..e1e14fd 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -22,7 +22,9 @@ use egui::{ Modifiers, KeyboardShortcut }; +use::egui_extras::install_image_loaders; use fs_extra::dir::DirEntryAttr::Modified; +use toml::macros::insert_toml; // use egui_modal::Modal; @@ -147,6 +149,7 @@ impl IronCoderApp { info!("welcome to Iron Coder! setting up initial app state..."); // we mutate cc.egui_ctx (the context) to set the overall app style setup_fonts_and_style(&cc.egui_ctx); + install_image_loaders(&cc.egui_ctx); // Load previous app state if it exists and is specified. let mut app = IronCoderApp::default(); if options.persistence { @@ -233,12 +236,11 @@ impl IronCoderApp { }); // Now use that Rect to draw the menu icon at the proper place ui.allocate_ui_at_rect(r, |ui| { - let tid = icons.get("menu_icon").unwrap().texture_id(ctx); - ui.menu_image_button(tid, Vec2::new(12.0, 12.0), |ui| { + let tid = icons.get("menu_icon").unwrap().clone(); + ui.menu_image_button(tid, |ui| { let ib = egui::widgets::Button::image_and_text( - icons.get("save_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("save_icon").unwrap().clone(), "save project" ).shortcut_text("ctrl+s"); if ui.add(ib).clicked() { @@ -248,8 +250,7 @@ impl IronCoderApp { } let ib = egui::widgets::Button::image_and_text( - icons.get("save_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("save_icon").unwrap().clone(), "save project as..." ); if ui.add(ib).clicked() { @@ -257,8 +258,7 @@ impl IronCoderApp { } let ib = egui::widgets::Button::image_and_text( - icons.get("folder_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("folder_icon").unwrap().clone(), "open" ).shortcut_text("ctrl+o"); if ui.add(ib).clicked() { @@ -273,8 +273,7 @@ impl IronCoderApp { } let ib = egui::widgets::Button::image_and_text( - icons.get("boards_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("boards_icon").unwrap().clone(), "new project" ).shortcut_text("ctrl+n"); if ui.add(ib).clicked() { @@ -292,8 +291,7 @@ impl IronCoderApp { } let ib = egui::widgets::Button::image_and_text( - icons.get("settings_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("settings_icon").unwrap().clone(), "settings" ); if ui.add(ib).clicked() { @@ -301,8 +299,7 @@ impl IronCoderApp { } let ib = egui::widgets::Button::image_and_text( - icons.get("about_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("about_icon").unwrap().clone(), "about Iron Coder" ); if ui.add(ib).clicked() { @@ -310,14 +307,13 @@ impl IronCoderApp { } let ib = egui::widgets::Button::image_and_text( - icons.get("quit_icon").unwrap().texture_id(ctx), - SMALL_ICON_SIZE, + icons.get("quit_icon").unwrap().clone(), "quit" ).shortcut_text("ctrl+q"); //.tint(egui::Color32::WHITE); // TODO: set tint to the appropriate value for the current colorscheme if ui.add(ib).clicked() { - frame.close(); + ctx.send_viewport_cmd(egui::ViewportCommand::Close); }; }); }); @@ -769,7 +765,7 @@ impl eframe::App for IronCoderApp { } if ctx.input_mut(|i| i.consume_shortcut(&quit_shortcut)) { - frame.close(); + ctx.send_viewport_cmd(egui::ViewportCommand::Close); } if ctx.input_mut(|i| i.consume_shortcut(&open_shortcut)) { @@ -908,11 +904,11 @@ fn setup_fonts_and_style(ctx: &egui::Context) { ].into(); // Make things look more square - style.visuals.menu_rounding = egui::Rounding::none(); - style.visuals.window_rounding = egui::Rounding::none(); + style.visuals.menu_rounding = egui::Rounding::ZERO; + style.visuals.window_rounding = egui::Rounding::ZERO; // change width of scroll bar - style.spacing.scroll_bar_width = 6.0; - style.spacing.scroll_bar_inner_margin = 6.0; // this keeps some space + style.spacing.scroll.bar_width = 6.0; + style.spacing.scroll.bar_inner_margin = 6.0; // this keeps some space // Remove shadows style.visuals.window_shadow = eframe::epaint::Shadow::NONE; style.visuals.popup_shadow = eframe::epaint::Shadow::NONE; diff --git a/src/project/display.rs b/src/project/display.rs index 4b9c7a7..67c6ffc 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -55,8 +55,7 @@ impl Project { // FILE case if child.file_type().unwrap().is_file() { let button = egui::widgets::Button::image_and_text( - icons.get("file_icon").unwrap().texture_id(ctx), - egui::Vec2::new(7.0, 7.0), + icons.get("file_icon").unwrap().clone(), text, ).frame(false); let resp = ui.add(button); @@ -120,8 +119,7 @@ impl Project { ui.horizontal(|ui| { // COMPILE CODE let button = egui::widgets::Button::image_and_text( - icons.get("build_icon").unwrap().texture_id(ctx), - egui::Vec2::new(9.0, 9.0), + icons.get("build_icon").unwrap().clone(), " build project", ).frame(false); if ui.add(button).clicked() { @@ -131,8 +129,7 @@ impl Project { ui.separator(); // LOAD CODE ONTO BOARD let button = egui::widgets::Button::image_and_text( - icons.get("load_icon").unwrap().texture_id(ctx), - egui::Vec2::new(9.0, 9.0), + icons.get("load_icon").unwrap().clone(), " load onto board", ).frame(false); if ui.add(button).clicked() { @@ -176,8 +173,7 @@ impl Project { ui.separator(); let button = Button::image_and_text( - icons.get("trash_icon").unwrap().texture_id(ctx), - egui::Vec2::new(9.0, 9.0), + icons.get("trash_icon").unwrap().clone(), " clear terminal", ).frame(false); if ui.add(button).clicked() { @@ -599,8 +595,8 @@ impl Project { }); // generate the button - let tid = icons.get("plus_icon").expect("error fetching plus_icon!").texture_id(ctx); - let add_board_button = egui::Button::image_and_text(tid, egui::Vec2::new(12.0, 12.0), "add board") + let tid = icons.get("plus_icon").expect("error fetching plus_icon!").clone(); + let add_board_button = egui::Button::image_and_text(tid, "add board") .frame(false); let mut cui = ui.child_ui(top_hud_rect, egui::Layout::left_to_right(egui::Align::Center)); if cui.add(add_board_button).clicked() { @@ -618,8 +614,8 @@ impl Project { // ui.label(label); // generate the button - let tid = icons.get("right_arrow_icon").expect("error fetching right_arrow_icon!").texture_id(ctx); - let start_dev_button = egui::Button::image_and_text(tid, egui::Vec2::new(12.0, 12.0), "start development") + let tid = icons.get("right_arrow_icon").expect("error fetching right_arrow_icon!").clone(); + let start_dev_button = egui::Button::image_and_text(tid, "start development") .frame(false); let mut cui = ui.child_ui(top_hud_rect, egui::Layout::right_to_left(egui::Align::Center)); if cui.add(start_dev_button).clicked() { diff --git a/src/project/egui_helpers.rs b/src/project/egui_helpers.rs index 0c17e95..4428cdc 100644 --- a/src/project/egui_helpers.rs +++ b/src/project/egui_helpers.rs @@ -43,8 +43,7 @@ impl Project { // capture the height of drawn text height = (resp.rect.max - resp.rect.min).y; let button = ImageButton::new( - icons.get("edit_icon").unwrap().texture_id(ctx), - DEFAULT_ICON_SIZE, + icons.get("edit_icon").unwrap().clone(), ).frame(false).tint(color); columns[1].with_layout(Layout::top_down(Align::RIGHT), |ui| { // slightly confusing, but we leave the semi-colons off here so that From 0edb23489b9fdbf586ea659c4338a95d23260008 Mon Sep 17 00:00:00 2001 From: AidanPine <92037147+AidanPine@users.noreply.github.com> Date: Sun, 25 Feb 2024 16:47:24 -0500 Subject: [PATCH 42/48] - Updated lock file --- Cargo.lock | 6659 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6659 insertions(+) create mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..830c970 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,6659 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb10ed32c63247e4e39a8f42e8e30fb9442fbf7878c8e4a9849e7e381619bea" +dependencies = [ + "enumn", + "serde", +] + +[[package]] +name = "adafruit-feather-rp2040" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600aa82d1316cf5b3a9d9f008a025fb0ea9e33669054d36f69baf24c08f9babd" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "rp2040-boot2", + "rp2040-hal 0.8.2", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "serde", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655" +dependencies = [ + "as-slice", +] + +[[package]] +name = "always-assert" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1078fa1ce1e34b1872d8611ad921196d76bdd7027e949fbe31231abde201892" +dependencies = [ + "tracing", +] + +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.4.2", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.7.2", + "thiserror", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "anstream" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" + +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + +[[package]] +name = "arboard" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1faa3c733d9a3dd6fbaf85da5d162a2e03b2e0033a90dceb0e2a90fdd1e5380a" +dependencies = [ + "clipboard-win", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "atk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auth-git2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e7771d4ab6635cbd685ce8db215b29c78a468098126de77c57f3b2e6eb3757" +dependencies = [ + "dirs", + "git2", + "terminal-prompt", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[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 = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys", + "objc2", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + +[[package]] +name = "bytemuck" +version = "1.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cairo-sys-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "calloop" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +dependencies = [ + "bitflags 2.4.2", + "log", + "polling 3.5.0", + "rustix 0.38.31", + "slab", + "thiserror", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop", + "rustix 0.38.31", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-generate" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c1b6f44358912a9538fa3b6ac8d3aa3f585444f9dc32f12ed85d1545a9df9f" +dependencies = [ + "anyhow", + "auth-git2", + "clap", + "console", + "dialoguer", + "env_logger", + "fs-err", + "git2", + "gix-config", + "heck", + "home", + "ignore", + "indexmap", + "indicatif", + "liquid", + "liquid-core", + "liquid-derive", + "liquid-lib", + "log", + "names", + "paste", + "path-absolutize", + "regex", + "remove_dir_all", + "rhai", + "sanitize-filename", + "semver 1.0.22", + "serde", + "tempfile", + "thiserror", + "toml 0.8.10", + "walkdir", +] + +[[package]] +name = "cargo-platform" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.22", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" +dependencies = [ + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chalk-derive" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5676cea088c32290fe65c82895be9d06dd21e0fa49bb97ca840529e9417ab71a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "synstructure", +] + +[[package]] +name = "chalk-ir" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff550c2cdd63ff74394214dce03d06386928a641c0f08837535f04af573a966d" +dependencies = [ + "bitflags 2.4.2", + "chalk-derive", + "lazy_static", +] + +[[package]] +name = "chalk-recursive" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4559e5c9b200240453b07d893f9c3c74413b53b0d33cbe272c68b0b77aa1c3" +dependencies = [ + "chalk-derive", + "chalk-ir", + "chalk-solve", + "rustc-hash", + "tracing", +] + +[[package]] +name = "chalk-solve" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0882e68ce9eb5a0a2413806538494d19df6ee520ab17d1faf489e952f32e98b8" +dependencies = [ + "chalk-derive", + "chalk-ir", + "ena", + "indexmap", + "itertools 0.12.1", + "petgraph", + "rustc-hash", + "tracing", +] + +[[package]] +name = "clap" +version = "4.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "clipboard-win" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9a0700e0127ba15d1d52dd742097f821cd9c65939303a44d970465040a297" +dependencies = [ + "error-code", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "command-group" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5080df6b0f0ecb76cab30808f00d937ba725cebe266a3da8cd89dff92f2a9916" +dependencies = [ + "nix", + "winapi", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield", + "embedded-hal 0.2.7", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee84e813d593101b1723e13ec38b6ab6abbdbaaa4546553f5395ed274079ddb1" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f6f3e36f203cfedbc78b357fb28730aa2c6dc1ab060ee5c2405e843988d3c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "countme" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" +dependencies = [ + "dashmap", + "once_cell", + "rustc-hash", +] + +[[package]] +name = "cov-mark" +version = "2.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d48d8f76bd9331f19fe2aaf3821a9f9fb32c3963e1e3d6ce82a8c09cef7444a" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc-any" +version = "2.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01a5e1f881f6fb6099a7bdf949e946719fd4f1fefa56264890574febf0eb6d0" +dependencies = [ + "debug-helper", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-channel" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "cvt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ae9bf77fbf2d39ef573205d554d87e86c12f1994e9ea335b0651b9b278bcf1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-url" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" + +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + +[[package]] +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + +[[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 = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dissimilar" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "document-features" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" +dependencies = [ + "litrs", +] + +[[package]] +name = "dot" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a74b6c4d4a1cff5f454164363c16b72fa12463ca6b31f4b5f2035a65fa3d5906" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "drop_bomb" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1" + +[[package]] +name = "duct" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" +dependencies = [ + "libc", + "once_cell", + "os_pipe", + "shared_child", +] + +[[package]] +name = "ecolor" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cfe80b1890e1a8cdbffc6044d6872e814aaf6011835a2a5e2db0e5c5c4ef4e" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "eframe" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c456c1bb6d13bf68b780257484703d750c70a23ff891ba35f4d6e23a4dbdf26f" +dependencies = [ + "bytemuck", + "cocoa", + "directories-next", + "document-features", + "egui", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "glutin-winit", + "image", + "js-sys", + "log", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", + "ron", + "serde", + "static_assertions", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "winapi", + "winit", +] + +[[package]] +name = "egui" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180f595432a5b615fc6b74afef3955249b86cfea72607b40740a4cd60d5297d0" +dependencies = [ + "accesskit", + "ahash", + "epaint", + "log", + "nohash-hasher", + "ron", + "serde", +] + +[[package]] +name = "egui-winit" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4d44f8d89f70d4480545eb2346b76ea88c3022e9f4706cebc799dbe8b004a2" +dependencies = [ + "arboard", + "egui", + "log", + "raw-window-handle 0.6.0", + "serde", + "smithay-clipboard", + "web-time", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_extras" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4a6962241a76da5be5e64e41b851ee1c95fda11f76635522a3c82b119b5475" +dependencies = [ + "egui", + "ehttp", + "enum-map", + "image", + "log", + "mime_guess2", + "resvg", + "serde", +] + +[[package]] +name = "egui_glow" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08e3be8728b4c59493dbfec041c657e6725bdeafdbd49aef3f1dbb9e551fa01" +dependencies = [ + "bytemuck", + "egui", + "glow", + "log", + "memoffset", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "ehttp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e598cc2bfc28612f26426259ed99a978270e9433d63ae6d2843e30fb0974cd02" +dependencies = [ + "document-features", + "js-sys", + "ureq", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "emath" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6916301ecf80448f786cdf3eb51d9dbdd831538732229d49119e2d4312eaaf09" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + +[[package]] +name = "embedded-hal-nb" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" +dependencies = [ + "embedded-hal 1.0.0", + "nb 1.1.0", +] + +[[package]] +name = "ena" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "enumn" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "epaint" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b9fdf617dd7f58b0c8e6e9e4a1281f730cde0831d40547da446b2bb76a47af" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "log", + "nohash-hasher", + "parking_lot", + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-code" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26a147e1a6641a55d994b3e4e9fa4d9b180c8d652c09b363af8c9bf1b8e04139" + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "faster-hex" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" +dependencies = [ + "serde", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fontconfig-parser" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a595cb550439a117696039dfc69830492058211b771a2a165379f2a1a53d84d" +dependencies = [ + "roxmltree 0.19.0", +] + +[[package]] +name = "fontdb" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2 0.6.2", + "slotmap", + "tinyvec", + "ttf-parser 0.19.2", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "frunk" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287" +dependencies = [ + "frunk_core", + "frunk_derives", +] + +[[package]] +name = "frunk_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6" + +[[package]] +name = "frunk_derives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" +dependencies = [ + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "frunk_proc_macro_helpers" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c" +dependencies = [ + "frunk_core", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs_at" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982f82cc75107eef84f417ad6c53ae89bf65b561937ca4a3b3b0fd04d0aa2425" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "libc", + "nix", + "windows-sys 0.48.0", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" + +[[package]] +name = "fugit" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" +dependencies = [ + "gcd", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "generate" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726016a4c116c1946e331dcf5fc3632ec0e68e43d7ca04c9b2404b74b1479421" +dependencies = [ + "generate-derive", +] + +[[package]] +name = "generate-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e140c401f7f5d92a02bce5991e02393c1dd52b43c24ab86793ab7ebc171400d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "git2" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b3ba52851e73b46a4c3df1d89343741112003f0f6f13beb0dfac9e457c3fdcd" +dependencies = [ + "bitflags 2.4.2", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + +[[package]] +name = "gix-actor" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417" +dependencies = [ + "bstr", + "btoi", + "gix-date", + "itoa", + "thiserror", + "winnow 0.5.40", +] + +[[package]] +name = "gix-config" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0341471d55d8676e98b88e121d7065dfa4c9c5acea4b6d6ecdd2846e85cce0c3" +dependencies = [ + "bstr", + "gix-config-value", + "gix-features", + "gix-glob", + "gix-path", + "gix-ref", + "gix-sec", + "memchr", + "once_cell", + "smallvec", + "thiserror", + "unicode-bom", + "winnow 0.5.40", +] + +[[package]] +name = "gix-config-value" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74ab5d22bc21840f4be0ba2e78df947ba14d8ba6999ea798f86b5bdb999edd0c" +dependencies = [ + "bitflags 2.4.2", + "bstr", + "gix-path", + "libc", + "thiserror", +] + +[[package]] +name = "gix-date" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17077f0870ac12b55d2eed9cb3f56549e40def514c8a783a0a79177a8a76b7c5" +dependencies = [ + "bstr", + "itoa", + "thiserror", + "time", +] + +[[package]] +name = "gix-features" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2" +dependencies = [ + "gix-hash", + "gix-trace", + "libc", + "prodash", + "sha1_smol", + "walkdir", +] + +[[package]] +name = "gix-fs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107" +dependencies = [ + "gix-features", +] + +[[package]] +name = "gix-glob" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19" +dependencies = [ + "bitflags 2.4.2", + "bstr", + "gix-features", + "gix-path", +] + +[[package]] +name = "gix-hash" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0" +dependencies = [ + "faster-hex", + "thiserror", +] + +[[package]] +name = "gix-lock" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5c65e6a29830a435664891ced3f3c1af010f14900226019590ee0971a22f37" +dependencies = [ + "gix-tempfile", + "gix-utils", + "thiserror", +] + +[[package]] +name = "gix-object" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33" +dependencies = [ + "bstr", + "btoi", + "gix-actor", + "gix-date", + "gix-features", + "gix-hash", + "gix-validate", + "itoa", + "smallvec", + "thiserror", + "winnow 0.5.40", +] + +[[package]] +name = "gix-path" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e0b521a5c345b7cd6a81e3e6f634407360a038c8b74ba14c621124304251b8" +dependencies = [ + "bstr", + "gix-trace", + "home", + "once_cell", + "thiserror", +] + +[[package]] +name = "gix-ref" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2069adc212cf7f3317ef55f6444abd06c50f28479dbbac5a86acf3b05cbbfe" +dependencies = [ + "gix-actor", + "gix-date", + "gix-features", + "gix-fs", + "gix-hash", + "gix-lock", + "gix-object", + "gix-path", + "gix-tempfile", + "gix-validate", + "memmap2 0.9.4", + "thiserror", + "winnow 0.5.40", +] + +[[package]] +name = "gix-sec" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022592a0334bdf77c18c06e12a7c0eaff28845c37e73c51a3e37d56dd495fb35" +dependencies = [ + "bitflags 2.4.2", + "gix-path", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "gix-tempfile" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23" +dependencies = [ + "gix-fs", + "libc", + "once_cell", + "parking_lot", + "tempfile", +] + +[[package]] +name = "gix-trace" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b202d766a7fefc596e2cc6a89cda8ad8ad733aed82da635ac120691112a9b1" + +[[package]] +name = "gix-utils" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60157a15b9f14b11af1c6817ad7a93b10b50b4e5136d98a127c46a37ff16eeb6" +dependencies = [ + "fastrand 2.0.1", + "unicode-normalization", +] + +[[package]] +name = "gix-validate" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac7cc36f496bd5d96cdca0f9289bb684480725d40db60f48194aa7723b883854" +dependencies = [ + "bstr", + "thiserror", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fcd4ae4e86d991ad1300b8f57166e5be0c95ef1f63f3f5b827f8a164548746" +dependencies = [ + "bitflags 2.4.2", + "cfg_aliases", + "cgl", + "core-foundation", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "icrate", + "libloading", + "objc2", + "once_cell", + "raw-window-handle 0.5.2", + "wayland-sys", + "windows-sys 0.48.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebcdfba24f73b8412c5181e56f092b5eff16671c514ce896b258a0a64bd7735" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle 0.5.2", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77cc5623f5309ef433c3dd4ca1223195347fe62c413da8e2fdd0eb76db2d9bcd" +dependencies = [ + "gl_generator", + "windows-sys 0.48.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a165fd686c10dcc2d45380b35796e577eacfd43d4660ee741ec8ebe2201b3b4f" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "half" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "379dada1584ad501b383485dd706b8afb7a70fcbc7f4da7d780638a5a6124a60" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2", + "dispatch", + "objc2", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-traits", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "iron-coder-feather-rp2040-bsp" +version = "0.1.0" +dependencies = [ + "adafruit-feather-rp2040", + "cortex-m", + "critical-section", + "embedded-hal 0.2.7", + "fugit", + "rp2040-hal 0.9.2", + "rtt-target", + "shared-bus", + "smart-leds", + "usb-device", + "usbd-serial", + "ws2812-pio", +] + +[[package]] +name = "iron_coder" +version = "0.2.0" +dependencies = [ + "cargo-generate", + "clap", + "duct", + "eframe", + "egui", + "egui_extras", + "enum-iterator", + "fs_extra", + "generate", + "git2", + "image", + "iron-coder-feather-rp2040-bsp", + "k_board", + "log", + "prettyplease", + "proc-macro2", + "quote", + "ra_ap_ide", + "ra_ap_rust-analyzer", + "rfd", + "savefile-derive", + "serde", + "slotmap", + "syn 2.0.50", + "syntect", + "toml 0.7.8", + "tracing", + "tracing-subscriber", + "usvg 0.35.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[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", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jod-thread" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b23360e99b8717f20aaa4598f5a6541efbe30630039fbc7706cf954a87947ae" + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k_board" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fedb2be91dd22ccceb181f2ea97adef9752f004855f2e669f6aff7f7c280a6d" + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "kstring" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747" +dependencies = [ + "serde", + "static_assertions", +] + +[[package]] +name = "kurbo" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "la-arena" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3752f229dcc5a481d60f385fa479ff46818033d881d2d801aa27dffcfb5e8306" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libssh2-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "line-index" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67d61795376ae2683928c218fda7d7d7db136fd38c06b7552904667f0d55580a" +dependencies = [ + "nohash-hasher", + "text-size", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "liquid" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f68ae1011499ae2ef879f631891f21c78e309755f4a5e483c4a8f12e10b609" +dependencies = [ + "doc-comment", + "liquid-core", + "liquid-derive", + "liquid-lib", + "serde", +] + +[[package]] +name = "liquid-core" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e0724dfcaad5cfb7965ea0f178ca0870b8d7315178f4a7179f5696f7f04d5f" +dependencies = [ + "anymap2", + "itertools 0.10.5", + "kstring", + "liquid-derive", + "num-traits", + "pest", + "pest_derive", + "regex", + "serde", + "time", +] + +[[package]] +name = "liquid-derive" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2fb41a9bb4257a3803154bdf7e2df7d45197d1941c9b1a90ad815231630721" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "liquid-lib" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a17e273a6fb1fb6268f7a5867ddfd0bd4683c7e19b51084f3d567fad4348c0" +dependencies = [ + "itertools 0.10.5", + "liquid-core", + "once_cell", + "percent-encoding", + "regex", + "time", + "unicode-segmentation", +] + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "lsp-server" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095" +dependencies = [ + "crossbeam-channel", + "log", + "serde", + "serde_json", +] + +[[package]] +name = "lsp-types" +version = "0.95.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984" +dependencies = [ + "bitflags 1.3.2", + "serde", + "serde_json", + "serde_repr", + "url", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess2" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a3333bb1609500601edc766a39b4c1772874a4ce26022f4d866854dc020c41" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "miow" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand", +] + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.4.2", + "jni-sys", + "log", + "ndk-sys", + "num_enum 0.7.2", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", + "thiserror", +] + +[[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.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "normpath" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5831952a9476f2fed74b77d74182fa5ddc4d21c72ec45a333b250e3ed0272804" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.4.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459" + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "onig" +version = "6.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" +dependencies = [ + "bitflags 1.3.2", + "libc", + "once_cell", + "onig_sys", +] + +[[package]] +name = "onig_sys" +version = "69.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox 0.0.2", +] + +[[package]] +name = "os_pipe" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owned_ttf_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser 0.20.0", +] + +[[package]] +name = "pango-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-absolutize" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" +dependencies = [ + "path-dedot", +] + +[[package]] +name = "path-dedot" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" +dependencies = [ + "once_cell", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "perf-event" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5396562cd2eaa828445d6d34258ae21ee1eb9d40fe626ca7f51c8dccb4af9d66" +dependencies = [ + "libc", + "perf-event-open-sys", +] + +[[package]] +name = "perf-event-open-sys" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce9bedf5da2c234fdf2391ede2b90fabf585355f33100689bc364a3ea558561a" +dependencies = [ + "libc", +] + +[[package]] +name = "pest" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "pest_meta" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pio" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" +dependencies = [ + "arrayvec", + "num_enum 0.5.11", + "paste", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +dependencies = [ + "base64", + "indexmap", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.31", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.50", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prodash" +version = "26.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf" + +[[package]] +name = "protobuf" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55bad9126f378a853655831eb7363b7b01b81d19f8cb1218861086ca4a1a61e" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror", +] + +[[package]] +name = "protobuf-support" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d4d7b8601c814cfb36bcebb79f0e61e45e1e93640cf778837833bbed05c372" +dependencies = [ + "thiserror", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.4.2", + "memchr", + "unicase", +] + +[[package]] +name = "pulldown-cmark-to-cmark" +version = "10.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0194e6e1966c23cc5fd988714f85b18d548d773e81965413555d96569931833d" +dependencies = [ + "pulldown-cmark", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ra-ap-rustc_abi" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0baa423a2c2bfd6e4bd40e7215f7ddebd12a649ce0b65078a38b91068895aa" +dependencies = [ + "bitflags 2.4.2", + "ra-ap-rustc_index 0.35.0", + "tracing", +] + +[[package]] +name = "ra-ap-rustc_index" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322b751895cc4a0a2ee0c6ab36ec80bc8abf5f8d76254c482f96f03c27c92ebe" +dependencies = [ + "arrayvec", + "ra-ap-rustc_index_macros 0.35.0", + "smallvec", +] + +[[package]] +name = "ra-ap-rustc_index" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5a0ba0d08af366cf235dbe8eb7226cced7a4fe502c98aa434ccf416defd746" +dependencies = [ + "arrayvec", + "ra-ap-rustc_index_macros 0.37.0", + "smallvec", +] + +[[package]] +name = "ra-ap-rustc_index_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054e25eac52f0506c1309ca4317c11ad4925d7b99eb897f71aa7c3cbafb46c2b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "synstructure", +] + +[[package]] +name = "ra-ap-rustc_index_macros" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1971ebf9a701e0e68387c264a32517dcb4861ad3a4862f2e2803c1121ade20d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "synstructure", +] + +[[package]] +name = "ra-ap-rustc_lexer" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8da0fa51a1a97ba4296a1c78fa454815a153b472e2546b6338a0902ad59e015" +dependencies = [ + "unicode-properties", + "unicode-xid", +] + +[[package]] +name = "ra-ap-rustc_parse_format" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3851f930a54adcb76889983dcd5c00a0c4e206e190e1384dbc00d49b82dfb45e" +dependencies = [ + "ra-ap-rustc_index 0.35.0", + "ra-ap-rustc_lexer", +] + +[[package]] +name = "ra-ap-rustc_pattern_analysis" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3c0e7ca9c5bdc66e3b590688e237a22ac47a48e4eac7f46b05b2abbfaf0abd" +dependencies = [ + "ra-ap-rustc_index 0.37.0", + "rustc-hash", + "rustc_apfloat", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_base_db" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "474d7a9edb1ae9934eb55f169a70cb51e2ddcc006e0ec320412e4b6ec6ef9b4f" +dependencies = [ + "la-arena", + "ra_ap_cfg", + "ra_ap_profile", + "ra_ap_salsa", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_vfs", + "rustc-hash", + "semver 1.0.22", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_cfg" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1979ae15d2383379c04261a7ba08115c0a168c7f6d1b318d3c8fb60e54b22d" +dependencies = [ + "ra_ap_tt", + "rustc-hash", +] + +[[package]] +name = "ra_ap_flycheck" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2becd812249f78e9bebec9f98330a92eb1a4ff44ddc1f31733c275ec0b43503c" +dependencies = [ + "cargo_metadata", + "command-group", + "crossbeam-channel", + "ra_ap_paths", + "ra_ap_stdx", + "ra_ap_toolchain", + "rustc-hash", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "ra_ap_hir" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ee0abe369a2695cfa42539192fdda61301d36f8ccb593ec227ecb5680fb530" +dependencies = [ + "arrayvec", + "either", + "itertools 0.12.1", + "once_cell", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_hir_def", + "ra_ap_hir_expand", + "ra_ap_hir_ty", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_hir_def" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117331a1952bb0cea47fa33f64c1eeee1f0b1b33a24f5fc9ab152a1b2b1b199b" +dependencies = [ + "arrayvec", + "bitflags 2.4.2", + "cov-mark", + "dashmap", + "drop_bomb", + "either", + "fst", + "hashbrown", + "indexmap", + "itertools 0.12.1", + "la-arena", + "once_cell", + "ra-ap-rustc_abi", + "ra-ap-rustc_parse_format", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_hir_expand", + "ra_ap_intern", + "ra_ap_limit", + "ra_ap_mbe", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_hir_expand" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ada1f96a6f87be158c58773b39392cee94532c2c7c44698f93637e6a488bb966" +dependencies = [ + "cov-mark", + "either", + "hashbrown", + "itertools 0.12.1", + "la-arena", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_intern", + "ra_ap_limit", + "ra_ap_mbe", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_hir_ty" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "204687ffcff17eaa802a569ab8396f67aaa7ec3702074696b2b0fff3dbb34a59" +dependencies = [ + "arrayvec", + "bitflags 2.4.2", + "chalk-derive", + "chalk-ir", + "chalk-recursive", + "chalk-solve", + "cov-mark", + "either", + "ena", + "indexmap", + "itertools 0.12.1", + "la-arena", + "nohash-hasher", + "once_cell", + "oorandom", + "ra-ap-rustc_abi", + "ra-ap-rustc_index 0.35.0", + "ra-ap-rustc_pattern_analysis", + "ra_ap_base_db", + "ra_ap_hir_def", + "ra_ap_hir_expand", + "ra_ap_intern", + "ra_ap_limit", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "rustc-hash", + "scoped-tls", + "smallvec", + "tracing", + "triomphe", + "typed-arena", +] + +[[package]] +name = "ra_ap_ide" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac89cd5365d9d0348022c2bebb904ea79c98952b9585961addc1eaa86c76319e" +dependencies = [ + "arrayvec", + "cov-mark", + "crossbeam-channel", + "dot", + "either", + "itertools 0.12.1", + "nohash-hasher", + "oorandom", + "pulldown-cmark", + "pulldown-cmark-to-cmark", + "ra_ap_cfg", + "ra_ap_hir", + "ra_ap_ide_assists", + "ra_ap_ide_completion", + "ra_ap_ide_db", + "ra_ap_ide_diagnostics", + "ra_ap_ide_ssr", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "ra_ap_toolchain", + "smallvec", + "tracing", + "triomphe", + "url", +] + +[[package]] +name = "ra_ap_ide_assists" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb77f40118fe5c793a349a8d344dd364bde4d77befcfb16cda891e2f580941" +dependencies = [ + "cov-mark", + "either", + "itertools 0.12.1", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_ide_completion" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934fa34dc3ef1eea9ca6b09b43f9a56ec95467316ad4e2ece6cd01b39c5a6464" +dependencies = [ + "cov-mark", + "itertools 0.12.1", + "once_cell", + "ra_ap_base_db", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_ide_db" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c4dcceab14042b5082a36783c4b572db7c977aff92632eb20441d5fc6ac3ea9" +dependencies = [ + "arrayvec", + "cov-mark", + "either", + "fst", + "indexmap", + "itertools 0.12.1", + "line-index", + "memchr", + "nohash-hasher", + "once_cell", + "ra_ap_base_db", + "ra_ap_hir", + "ra_ap_limit", + "ra_ap_parser", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "rayon", + "rustc-hash", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_ide_diagnostics" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca03e7af5ff14b2061a3beb8ab442bfcd4570c400220a3de906054a7899d9d3" +dependencies = [ + "cov-mark", + "either", + "itertools 0.12.1", + "once_cell", + "ra_ap_cfg", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "serde_json", + "tracing", +] + +[[package]] +name = "ra_ap_ide_ssr" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2036f040da0eadb033f670b7337a55748c4d265a90e328af2355b8be4fa5b57e" +dependencies = [ + "cov-mark", + "itertools 0.12.1", + "nohash-hasher", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_parser", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "triomphe", +] + +[[package]] +name = "ra_ap_intern" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29bc12bedcbab58383497382b9c5f806f13712461ee7e21c46927f470dc81a" +dependencies = [ + "dashmap", + "hashbrown", + "rustc-hash", + "triomphe", +] + +[[package]] +name = "ra_ap_limit" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f6afbf3c52cdbefffa13de361ed690a44d03e00ebf37912a6ee31eb69696dd6" + +[[package]] +name = "ra_ap_load-cargo" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "378661baba4b3aa9aa5775680f7c6f68fd6fa84aad93b9d22c5927b333f8194a" +dependencies = [ + "anyhow", + "crossbeam-channel", + "itertools 0.12.1", + "ra_ap_hir_expand", + "ra_ap_ide", + "ra_ap_ide_db", + "ra_ap_proc_macro_api", + "ra_ap_project_model", + "ra_ap_span", + "ra_ap_tt", + "ra_ap_vfs", + "ra_ap_vfs-notify", + "tracing", +] + +[[package]] +name = "ra_ap_mbe" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e917def5b1f98ba3d513f7c1c7a7f167159d4598eaa11c48e56a257514c5be" +dependencies = [ + "cov-mark", + "ra_ap_parser", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_parser" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e2c28677f68f1e281655e7a4cb01c5dd4122955a6fce6af8ba75818c5ef6123" +dependencies = [ + "drop_bomb", + "ra-ap-rustc_lexer", + "ra_ap_limit", +] + +[[package]] +name = "ra_ap_paths" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2879d77e15dda37cec7555951e8f8193ea25b12a396730cb57a82a7d9775d21c" + +[[package]] +name = "ra_ap_proc_macro_api" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e7fa1cf5303439f1755bf87907db568dc2b4ed1c31fdd81ba810cb5ab7db6c" +dependencies = [ + "indexmap", + "la-arena", + "memmap2 0.5.10", + "object", + "ra_ap_base_db", + "ra_ap_paths", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_tt", + "rustc-hash", + "serde", + "serde_json", + "snap", + "text-size", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_profile" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b04b6eee69594a004396b61cec5182d7eabb1264da703b6b57cec2b74f62d" +dependencies = [ + "cfg-if", + "countme", + "la-arena", + "libc", + "once_cell", + "perf-event", + "tracing", + "winapi", +] + +[[package]] +name = "ra_ap_project_model" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be7f11b2ffaea22d1310a1b122336bc5fd4cd1d92ad4795371450a230c3d267" +dependencies = [ + "anyhow", + "cargo_metadata", + "itertools 0.12.1", + "la-arena", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_paths", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_toolchain", + "rustc-hash", + "semver 1.0.22", + "serde", + "serde_json", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_rust-analyzer" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff3f23e4246cb68358fe449a394fced9a0059a966a90d0bcb2f519e9ef6197f" +dependencies = [ + "always-assert", + "anyhow", + "crossbeam-channel", + "dissimilar", + "itertools 0.12.1", + "lsp-server", + "lsp-types", + "memchr", + "nohash-hasher", + "num_cpus", + "oorandom", + "parking_lot", + "ra_ap_cfg", + "ra_ap_flycheck", + "ra_ap_hir", + "ra_ap_hir_def", + "ra_ap_hir_ty", + "ra_ap_ide", + "ra_ap_ide_db", + "ra_ap_ide_ssr", + "ra_ap_load-cargo", + "ra_ap_parser", + "ra_ap_proc_macro_api", + "ra_ap_profile", + "ra_ap_project_model", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_toolchain", + "ra_ap_vfs", + "ra_ap_vfs-notify", + "rayon", + "rustc-hash", + "scip", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", + "tracing-tree", + "triomphe", + "walkdir", + "winapi", + "xflags", +] + +[[package]] +name = "ra_ap_salsa" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d2a171e5907d4dc405c595a64dad98a4e6d00036dedbe1365ece8650bfdf4" +dependencies = [ + "indexmap", + "lock_api", + "oorandom", + "parking_lot", + "ra_ap_salsa-macros", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_salsa-macros" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567d2dab6370fe3eec26cf6153806f4f084b688f6ed54be8b14cced0b94895a5" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "ra_ap_span" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7051bc3c4ab04f1845bae88c5123970a06e69468700e363853fe3d871dccbf90" +dependencies = [ + "la-arena", + "ra_ap_salsa", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_vfs", +] + +[[package]] +name = "ra_ap_stdx" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b788aeb92380b790c726fb69db99a6e5f9d6472f0d312ce01355e49ec1cf406c" +dependencies = [ + "always-assert", + "crossbeam-channel", + "itertools 0.12.1", + "jod-thread", + "libc", + "miow", + "winapi", +] + +[[package]] +name = "ra_ap_syntax" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "114a62fd597ec71fd75a1c707ca30354749f66b4b1053e79fc79741a16948ebe" +dependencies = [ + "cov-mark", + "either", + "indexmap", + "itertools 0.12.1", + "once_cell", + "ra-ap-rustc_lexer", + "ra_ap_parser", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_text_edit", + "rowan", + "rustc-hash", + "smol_str", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_text_edit" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96635947604d35bc7f27d63d0f10d020b198d53c02f5df563febea7ad525dc6d" +dependencies = [ + "itertools 0.12.1", + "text-size", +] + +[[package]] +name = "ra_ap_toolchain" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a675ed9a963f5c8e4da56e8bcdd2d261eeeab596c1b92b69383c08e8accc0dd2" +dependencies = [ + "home", +] + +[[package]] +name = "ra_ap_tt" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c79f258ec56093bbc5b2c60d58b4fb135a2d51a91e506944f7ac7b44cc401d" +dependencies = [ + "ra_ap_span", + "ra_ap_stdx", + "smol_str", + "text-size", +] + +[[package]] +name = "ra_ap_vfs" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a18828a4642bdc990621f0d7931d60206db7510b192d037eb64b34574c2e60" +dependencies = [ + "fst", + "indexmap", + "nohash-hasher", + "ra_ap_paths", + "ra_ap_stdx", + "rustc-hash", +] + +[[package]] +name = "ra_ap_vfs-notify" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d2ed464852945117a7d8fc9267206fc90aa9f9609ec8faff9592e81ed27d94" +dependencies = [ + "crossbeam-channel", + "notify", + "ra_ap_paths", + "ra_ap_stdx", + "ra_ap_vfs", + "tracing", + "walkdir", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rctree" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox 0.0.1", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "remove_dir_all" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23895cfadc1917fed9c6ed76a8c2903615fa3704f7493ff82b364c6540acc02b" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "fs_at", + "lazy_static", + "libc", + "normpath", + "windows-sys 0.45.0", +] + +[[package]] +name = "resvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadccb3d99a9efb8e5e00c16fbb732cbe400db2ec7fc004697ee7d97d86cf1f4" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes 0.13.0", + "tiny-skia", + "usvg 0.37.0", +] + +[[package]] +name = "rfd" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe664af397d2b6a13a8ba1d172a2b5c87c6c5149039edbf8fa122b98c9ed96f" +dependencies = [ + "async-io", + "block", + "dispatch", + "futures-util", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle 0.5.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rhai" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3625f343d89990133d013e39c46e350915178cf94f1bec9f49b0cbef98a3e3c" +dependencies = [ + "ahash", + "bitflags 2.4.2", + "instant", + "num-traits", + "once_cell", + "rhai_codegen", + "smallvec", + "smartstring", +] + +[[package]] +name = "rhai_codegen" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853977598f084a492323fe2f7896b4100a86284ee8473612de60021ea341310f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64", + "bitflags 2.4.2", + "serde", + "serde_derive", +] + +[[package]] +name = "rowan" +version = "0.15.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a58fa8a7ccff2aec4f39cc45bf5f985cec7125ab271cf681c279fd00192b49" +dependencies = [ + "countme", + "hashbrown", + "memoffset", + "rustc-hash", + "text-size", +] + +[[package]] +name = "roxmltree" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "roxmltree" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" + +[[package]] +name = "rp2040-boot2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c773ec49b836077aa144b58dc7654a243e1eecdb6cf0d25361ae7c7600fabd8" +dependencies = [ + "crc-any", +] + +[[package]] +name = "rp2040-hal" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1369bb84862d7f69391a96606b2f29a00bfce7f29a749e23d5f01fc3f607ada0" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal 0.2.7", + "fugit", + "itertools 0.10.5", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac 0.4.0", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff2b9ae7e6dd6720fd9f64250c9087260e50fe98b6b032ccca65be3581167ca" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0", + "embedded-hal-nb", + "frunk", + "fugit", + "itertools 0.10.5", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac 0.5.0", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" +dependencies = [ + "cortex-m-rt", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rp2040-pac" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9192cafbb40d717c9e0ddf767aaf9c69fee1b4e48d22ed853b57b11f6d9f3d7e" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "vcell", +] + +[[package]] +name = "rp2040-pac" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12d9d8375815f543f54835d01160d4e47f9e2cae75f17ff8f1ec19ce1da96e4c" +dependencies = [ + "cortex-m", + "critical-section", + "vcell", +] + +[[package]] +name = "rtt-target" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3afa12c77ba1b9bf560e4039a9b9a08bb9cde0e9e6923955eeb917dd8d5cf303" +dependencies = [ + "critical-section", + "ufmt-write", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_apfloat" +version = "0.2.0+llvm-462a31f5a5ab" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465187772033a5ee566f69fe008df03628fce549a0899aae76f0a0c2e34696be" +dependencies = [ + "bitflags 1.3.2", + "smallvec", +] + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048a63e5b3ac996d78d402940b5fa47973d2d080c6c6fffa1d0f19c4445310b7" + +[[package]] +name = "rustls-webpki" +version = "0.102.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustybuzz" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162bdf42e261bee271b3957691018634488084ef577dddeb6420a9684cab2a6a" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "smallvec", + "ttf-parser 0.18.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-general-category", + "unicode-script", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sanitize-filename" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "savefile-derive" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c624cb24aceeeff8b993f54dec710e0a9ef06e71ad3841b4dd711be542263ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scip" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5dc1bd66649133af84ab62436ddd2856c2605182b02dec2cd197f684dfe15ef" +dependencies = [ + "protobuf", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared-bus" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f8438a40b91c8b9531c664e9680c55b92bd78cd6809a8b45b4512b1e5765f2" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "smart-leds" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38dd45fa275f70b4110eac5f5182611ad384f88bb22b68b9a9c3cafd7015290b" +dependencies = [ + "smart-leds-trait", +] + +[[package]] +name = "smart-leds-trait" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf6d833fa93f16a1c1874e62c2aebe8567e5bdd436d59bf543ed258b6f7a8e3" +dependencies = [ + "rgb", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.4.2", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2 0.9.4", + "rustix 0.38.31", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" +dependencies = [ + "libc", + "smithay-client-toolkit", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", +] + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "svgtypes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed4b0611e7f3277f68c0fa18e385d9e2d26923691379690039548f867cef02a7" +dependencies = [ + "kurbo", + "siphasher", +] + +[[package]] +name = "svgtypes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e44e288cd960318917cbd540340968b90becc8bc81f171345d706e7a89d9d70" +dependencies = [ + "kurbo", + "siphasher", +] + +[[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.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "syntect" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1" +dependencies = [ + "bincode", + "bitflags 1.3.2", + "flate2", + "fnv", + "once_cell", + "onig", + "plist", + "regex-syntax", + "serde", + "serde_derive", + "serde_json", + "thiserror", + "walkdir", + "yaml-rust", +] + +[[package]] +name = "system-deps" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.10", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.31", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal-prompt" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "572818b3472910acbd5dff46a3413715c18e934b071ab2ba464a7b2c2af16376" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "text-size" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path 0.11.4", +] + +[[package]] +name = "tiny-skia-path" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.6", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1b5fd4128cc8d3e0cb74d4ed9a9cc7c7284becd4df68f5f940e1ad123606f6" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.2", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term 0.46.0", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-tree" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65139ecd2c3f6484c3b99bc01c77afe21e95473630747c7aca525e78b0666675" +dependencies = [ + "nu-ansi-term 0.49.0", + "tracing-core", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "ttf-parser" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" + +[[package]] +name = "ttf-parser" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" + +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "ufmt-write" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" + +[[package]] +name = "unicode-bom" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" + +[[package]] +name = "unicode-ccc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" + +[[package]] +name = "unicode-general-category" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" + +[[package]] +name = "unicode-script" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" +dependencies = [ + "base64", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "rustls-webpki", + "url", + "webpki-roots", +] + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + +[[package]] +name = "usbd-serial" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", + "usb-device", +] + +[[package]] +name = "usvg" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14d09ddfb0d93bf84824c09336d32e42f80961a9d1680832eb24fdf249ce11e6" +dependencies = [ + "base64", + "log", + "pico-args", + "usvg-parser 0.35.0", + "usvg-text-layout", + "usvg-tree 0.35.0", + "xmlwriter", +] + +[[package]] +name = "usvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b0a51b72ab80ca511d126b77feeeb4fb1e972764653e61feac30adc161a756" +dependencies = [ + "base64", + "log", + "pico-args", + "usvg-parser 0.37.0", + "usvg-tree 0.37.0", + "xmlwriter", +] + +[[package]] +name = "usvg-parser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19bf93d230813599927d88557014e0908ecc3531666d47c634c6838bc8db408" +dependencies = [ + "data-url 0.2.0", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree 0.18.1", + "simplecss", + "siphasher", + "svgtypes 0.11.0", + "usvg-tree 0.35.0", +] + +[[package]] +name = "usvg-parser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd4e3c291f45d152929a31f0f6c819245e2921bfd01e7bd91201a9af39a2bdc" +dependencies = [ + "data-url 0.3.1", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree 0.19.0", + "simplecss", + "siphasher", + "svgtypes 0.13.0", + "usvg-tree 0.37.0", +] + +[[package]] +name = "usvg-text-layout" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "035044604e89652c0a2959b8b356946997a52649ba6cade45928c2842376feb4" +dependencies = [ + "fontdb", + "kurbo", + "log", + "rustybuzz", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "usvg-tree 0.35.0", +] + +[[package]] +name = "usvg-tree" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7939a7e4ed21cadb5d311d6339730681c3e24c3e81d60065be80e485d3fc8b92" +dependencies = [ + "rctree", + "strict-num", + "svgtypes 0.11.0", + "tiny-skia-path 0.10.0", +] + +[[package]] +name = "usvg-tree" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee3d202ebdb97a6215604b8f5b4d6ef9024efd623cf2e373a6416ba976ec7d3" +dependencies = [ + "rctree", + "strict-num", + "svgtypes 0.13.0", + "tiny-skia-path 0.11.4", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.50", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "wayland-backend" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +dependencies = [ + "cc", + "downcast-rs", + "rustix 0.38.31", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +dependencies = [ + "bitflags 2.4.2", + "rustix 0.38.31", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.4.2", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" +dependencies = [ + "rustix 0.38.31", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.4.2", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.4.2", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.4.2", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" +dependencies = [ + "core-foundation", + "home", + "jni", + "log", + "ndk-context", + "objc", + "raw-window-handle 0.5.2", + "url", + "web-sys", +] + +[[package]] +name = "webpki-roots" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-targets 0.42.2", +] + +[[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.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.3", +] + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" +dependencies = [ + "windows_aarch64_gnullvm 0.52.3", + "windows_aarch64_msvc 0.52.3", + "windows_i686_gnu 0.52.3", + "windows_i686_msvc 0.52.3", + "windows_x86_64_gnu 0.52.3", + "windows_x86_64_gnullvm 0.52.3", + "windows_x86_64_msvc 0.52.3", +] + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" + +[[package]] +name = "winit" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c824f11941eeae66ec71111cc2674373c772f482b58939bb4066b642aa2ffcf" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.4.2", + "bytemuck", + "calloop", + "cfg_aliases", + "core-foundation", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", + "libc", + "log", + "memmap2 0.9.4", + "ndk", + "ndk-sys", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", + "redox_syscall 0.3.5", + "rustix 0.38.31", + "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.48.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4191c47f15cc3ec71fcb4913cb83d58def65dd3787610213c649283b5ce178" +dependencies = [ + "memchr", +] + +[[package]] +name = "ws2812-pio" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d219e3b43c1e14305b36363060c0348d560314e235d999cf492bbbab1f38e8d" +dependencies = [ + "cortex-m", + "embedded-hal 0.2.7", + "fugit", + "nb 1.1.0", + "pio", + "rp2040-hal 0.8.2", + "smart-leds-trait", +] + +[[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 = "x11rb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix 0.38.31", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" + +[[package]] +name = "xcursor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" + +[[package]] +name = "xflags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9e15fbb3de55454b0106e314b28e671279009b363e6f1d8e39fdc3bf048944" +dependencies = [ + "xflags-macros", +] + +[[package]] +name = "xflags-macros" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "672423d4fea7ffa2f6c25ba60031ea13dc6258070556f125cc4d790007d4a155" + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.4.2", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] From 66d858c14d4cc905117937c100a41570a6a8f339 Mon Sep 17 00:00:00 2001 From: Jacob Date: Sun, 25 Feb 2024 17:58:38 -0500 Subject: [PATCH 43/48] Fixed git bug --- src/project/display.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/project/display.rs b/src/project/display.rs index 06ba5a1..e2ef990 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -187,11 +187,6 @@ impl Project { } }; - // Unstage all staged files - let mut index = repo.index().unwrap(); - index.clear().unwrap(); - index.write().unwrap(); - let mut status_options = StatusOptions::new(); status_options.include_untracked(true); @@ -212,6 +207,12 @@ impl Project { info!("{}", change); } + for change in changes.iter() { + let mut index = repo.index().unwrap(); + index.remove_all([change.clone()].iter(), None).unwrap(); + index.write().unwrap(); + } + // Open a window to choose the changes to commit git_things.display = true; git_things.changes = changes; From 761d740ad6972d97b12c0a3a3d593b79509b5bd1 Mon Sep 17 00:00:00 2001 From: Fredy Jose Date: Sun, 25 Feb 2024 19:51:17 -0500 Subject: [PATCH 44/48] Removed BSP crate addition. --- src/project/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/project/mod.rs b/src/project/mod.rs index 46e588c..23d3ea6 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -366,6 +366,9 @@ impl Project { return Err(ProjectIOError::NoProjectTemplate); } // iterate through BSP paths and add the crates to the project + // TODO: This needs to be changed, likely an issue with + // updating the crates in the main toml file. Figure out why! + /* for b in self.system.get_all_boards() { if let Some(local_bsp) = b.bsp_path { let cmd = duct::cmd!( @@ -381,6 +384,7 @@ impl Project { cmds.push(cmd); } } + */ self.run_background_commands(&cmds, ctx); } else { return Err(ProjectIOError::NoMainBoard); From 3e23dd3db637fad0f3dce475d0bc98f4cfa672e8 Mon Sep 17 00:00:00 2001 From: AidanPine <92037147+AidanPine@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:01:47 -0500 Subject: [PATCH 45/48] Update config --- .../Adafruit/Feather_RP2040/template/.cargo/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config b/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config index 6b66945..ed10a10 100644 --- a/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config +++ b/iron-coder-boards/Adafruit/Feather_RP2040/template/.cargo/config @@ -35,7 +35,7 @@ rustflags = [ # This runner will make a UF2 file and then copy it to a mounted RP2040 in USB # Bootloader mode: -runner = "elf2uf2-rs" +runner = "elf2uf2-rs -d" # This runner will find a supported SWD debug probe and flash your RP2040 over # SWD: From 95b1db6008e66444b8957146a2e62dd7c4df0076 Mon Sep 17 00:00:00 2001 From: Jacob <92765823+EpicMealNinja@users.noreply.github.com> Date: Thu, 29 Feb 2024 13:31:42 -0500 Subject: [PATCH 46/48] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9b37a22..55d1017 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ projects/ # Added by cargo /target +Cargo.lock From e4abe2b54918c00e9708240cf35955a02e912ba1 Mon Sep 17 00:00:00 2001 From: Jacob <92765823+EpicMealNinja@users.noreply.github.com> Date: Thu, 29 Feb 2024 13:31:56 -0500 Subject: [PATCH 47/48] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 55d1017..4e6b01b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ projects/ /target Cargo.lock +settings.toml From 0e048b4e9d4f6b35dd56cebab4ad5116cd0b9d6d Mon Sep 17 00:00:00 2001 From: AidanPine <92037147+AidanPine@users.noreply.github.com> Date: Tue, 19 Mar 2024 15:04:24 -0400 Subject: [PATCH 48/48] - Updated lock file - Set toolchain versions - Removed ra_ap_ide::Change crate --- Cargo.lock | 6675 ++++++++++++++++++++++++++++++++++++++++ rust-toolchain.toml | 2 +- src/project/display.rs | 2 - src/project/mod.rs | 1 - 4 files changed, 6676 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e69de29..396c881 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -0,0 +1,6675 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" +dependencies = [ + "enumn", + "serde", +] + +[[package]] +name = "adafruit-feather-rp2040" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600aa82d1316cf5b3a9d9f008a025fb0ea9e33669054d36f69baf24c08f9babd" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "rp2040-boot2", + "rp2040-hal 0.8.2", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "serde", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655" +dependencies = [ + "as-slice", +] + +[[package]] +name = "always-assert" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1078fa1ce1e34b1872d8611ad921196d76bdd7027e949fbe31231abde201892" +dependencies = [ + "tracing", +] + +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.5.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.7.2", + "thiserror", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" + +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + +[[package]] +name = "arboard" +version = "3.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2041f1943049c7978768d84e6d0fd95de98b76d6c4727b09e78ec253d29fa58" +dependencies = [ + "clipboard-win", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "as-slice" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "atk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auth-git2" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51bd0e4592409df8631ca807716dc1e5caafae5d01ce0157c966c71c7e49c3c" +dependencies = [ + "dirs", + "git2", + "terminal-prompt", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[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 = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys", + "objc2", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + +[[package]] +name = "bumpalo" +version = "3.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" + +[[package]] +name = "bytemuck" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cairo-sys-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "calloop" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +dependencies = [ + "bitflags 2.5.0", + "log", + "polling 3.5.0", + "rustix 0.38.31", + "slab", + "thiserror", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop", + "rustix 0.38.31", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-generate" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c1b6f44358912a9538fa3b6ac8d3aa3f585444f9dc32f12ed85d1545a9df9f" +dependencies = [ + "anyhow", + "auth-git2", + "clap", + "console", + "dialoguer", + "env_logger", + "fs-err", + "git2", + "gix-config", + "heck 0.4.1", + "home", + "ignore", + "indexmap", + "indicatif", + "liquid", + "liquid-core", + "liquid-derive", + "liquid-lib", + "log", + "names", + "paste", + "path-absolutize", + "regex", + "remove_dir_all", + "rhai", + "sanitize-filename", + "semver 1.0.22", + "serde", + "tempfile", + "thiserror", + "toml 0.8.12", + "walkdir", +] + +[[package]] +name = "cargo-platform" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.22", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chalk-derive" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5676cea088c32290fe65c82895be9d06dd21e0fa49bb97ca840529e9417ab71a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", + "synstructure", +] + +[[package]] +name = "chalk-ir" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff550c2cdd63ff74394214dce03d06386928a641c0f08837535f04af573a966d" +dependencies = [ + "bitflags 2.5.0", + "chalk-derive", + "lazy_static", +] + +[[package]] +name = "chalk-recursive" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4559e5c9b200240453b07d893f9c3c74413b53b0d33cbe272c68b0b77aa1c3" +dependencies = [ + "chalk-derive", + "chalk-ir", + "chalk-solve", + "rustc-hash", + "tracing", +] + +[[package]] +name = "chalk-solve" +version = "0.96.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0882e68ce9eb5a0a2413806538494d19df6ee520ab17d1faf489e952f32e98b8" +dependencies = [ + "chalk-derive", + "chalk-ir", + "ena", + "indexmap", + "itertools 0.12.1", + "petgraph", + "rustc-hash", + "tracing", +] + +[[package]] +name = "clap" +version = "4.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "clipboard-win" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d517d4b86184dbb111d3556a10f1c8a04da7428d2987bf1081602bf11c3aa9ee" +dependencies = [ + "error-code", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "command-group" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5080df6b0f0ecb76cab30808f00d937ba725cebe266a3da8cd89dff92f2a9916" +dependencies = [ + "nix", + "winapi", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield", + "embedded-hal 0.2.7", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee84e813d593101b1723e13ec38b6ab6abbdbaaa4546553f5395ed274079ddb1" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f6f3e36f203cfedbc78b357fb28730aa2c6dc1ab060ee5c2405e843988d3c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "countme" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" +dependencies = [ + "dashmap", + "once_cell", + "rustc-hash", +] + +[[package]] +name = "cov-mark" +version = "2.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d48d8f76bd9331f19fe2aaf3821a9f9fb32c3963e1e3d6ce82a8c09cef7444a" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc-any" +version = "2.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c01a5e1f881f6fb6099a7bdf949e946719fd4f1fefa56264890574febf0eb6d0" +dependencies = [ + "debug-helper", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-channel" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "cvt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ae9bf77fbf2d39ef573205d554d87e86c12f1994e9ea335b0651b9b278bcf1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-url" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" + +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + +[[package]] +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + +[[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 = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dissimilar" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e3bdc80eee6e16b2b6b0f87fbc98c04bee3455e35174c0de1a125d0688c632" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "document-features" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" +dependencies = [ + "litrs", +] + +[[package]] +name = "dot" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a74b6c4d4a1cff5f454164363c16b72fa12463ca6b31f4b5f2035a65fa3d5906" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "drop_bomb" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1" + +[[package]] +name = "duct" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" +dependencies = [ + "libc", + "once_cell", + "os_pipe", + "shared_child", +] + +[[package]] +name = "ecolor" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cfe80b1890e1a8cdbffc6044d6872e814aaf6011835a2a5e2db0e5c5c4ef4e" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "eframe" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c456c1bb6d13bf68b780257484703d750c70a23ff891ba35f4d6e23a4dbdf26f" +dependencies = [ + "bytemuck", + "cocoa", + "directories-next", + "document-features", + "egui", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "glutin-winit", + "image", + "js-sys", + "log", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", + "ron", + "serde", + "static_assertions", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "winapi", + "winit", +] + +[[package]] +name = "egui" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180f595432a5b615fc6b74afef3955249b86cfea72607b40740a4cd60d5297d0" +dependencies = [ + "accesskit", + "ahash", + "epaint", + "log", + "nohash-hasher", + "ron", + "serde", +] + +[[package]] +name = "egui-winit" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4d44f8d89f70d4480545eb2346b76ea88c3022e9f4706cebc799dbe8b004a2" +dependencies = [ + "arboard", + "egui", + "log", + "raw-window-handle 0.6.0", + "serde", + "smithay-clipboard", + "web-time", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_extras" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4a6962241a76da5be5e64e41b851ee1c95fda11f76635522a3c82b119b5475" +dependencies = [ + "egui", + "ehttp", + "enum-map", + "image", + "log", + "mime_guess2", + "resvg", + "serde", +] + +[[package]] +name = "egui_glow" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08e3be8728b4c59493dbfec041c657e6725bdeafdbd49aef3f1dbb9e551fa01" +dependencies = [ + "bytemuck", + "egui", + "glow", + "log", + "memoffset", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "ehttp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e598cc2bfc28612f26426259ed99a978270e9433d63ae6d2843e30fb0974cd02" +dependencies = [ + "document-features", + "js-sys", + "ureq", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "emath" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6916301ecf80448f786cdf3eb51d9dbdd831538732229d49119e2d4312eaaf09" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + +[[package]] +name = "embedded-hal-nb" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605" +dependencies = [ + "embedded-hal 1.0.0", + "nb 1.1.0", +] + +[[package]] +name = "ena" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "enumn" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "epaint" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b9fdf617dd7f58b0c8e6e9e4a1281f730cde0831d40547da446b2bb76a47af" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "log", + "nohash-hasher", + "parking_lot", + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-code" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "faster-hex" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" +dependencies = [ + "serde", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fontconfig-parser" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a595cb550439a117696039dfc69830492058211b771a2a165379f2a1a53d84d" +dependencies = [ + "roxmltree 0.19.0", +] + +[[package]] +name = "fontdb" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2 0.6.2", + "slotmap", + "tinyvec", + "ttf-parser 0.19.2", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "frunk" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11a351b59e12f97b4176ee78497dff72e4276fb1ceb13e19056aca7fa0206287" +dependencies = [ + "frunk_core", + "frunk_derives", +] + +[[package]] +name = "frunk_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2469fab0bd07e64ccf0ad57a1438f63160c69b2e57f04a439653d68eb558d6" + +[[package]] +name = "frunk_derives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" +dependencies = [ + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "frunk_proc_macro_helpers" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b54add839292b743aeda6ebedbd8b11e93404f902c56223e51b9ec18a13d2c" +dependencies = [ + "frunk_core", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs_at" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982f82cc75107eef84f417ad6c53ae89bf65b561937ca4a3b3b0fd04d0aa2425" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "libc", + "nix", + "windows-sys 0.48.0", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" + +[[package]] +name = "fugit" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" +dependencies = [ + "gcd", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "generate" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726016a4c116c1946e331dcf5fc3632ec0e68e43d7ca04c9b2404b74b1479421" +dependencies = [ + "generate-derive", +] + +[[package]] +name = "generate-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e140c401f7f5d92a02bce5991e02393c1dd52b43c24ab86793ab7ebc171400d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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 = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "git2" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" +dependencies = [ + "bitflags 2.5.0", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + +[[package]] +name = "gix-actor" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417" +dependencies = [ + "bstr", + "btoi", + "gix-date", + "itoa", + "thiserror", + "winnow 0.5.40", +] + +[[package]] +name = "gix-config" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0341471d55d8676e98b88e121d7065dfa4c9c5acea4b6d6ecdd2846e85cce0c3" +dependencies = [ + "bstr", + "gix-config-value", + "gix-features", + "gix-glob", + "gix-path", + "gix-ref", + "gix-sec", + "memchr", + "once_cell", + "smallvec", + "thiserror", + "unicode-bom", + "winnow 0.5.40", +] + +[[package]] +name = "gix-config-value" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd06203b1a9b33a78c88252a625031b094d9e1b647260070c25b09910c0a804" +dependencies = [ + "bitflags 2.5.0", + "bstr", + "gix-path", + "libc", + "thiserror", +] + +[[package]] +name = "gix-date" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180b130a4a41870edfbd36ce4169c7090bca70e195da783dea088dd973daa59c" +dependencies = [ + "bstr", + "itoa", + "thiserror", + "time", +] + +[[package]] +name = "gix-features" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2" +dependencies = [ + "gix-hash", + "gix-trace", + "libc", + "prodash", + "sha1_smol", + "walkdir", +] + +[[package]] +name = "gix-fs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107" +dependencies = [ + "gix-features", +] + +[[package]] +name = "gix-glob" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19" +dependencies = [ + "bitflags 2.5.0", + "bstr", + "gix-features", + "gix-path", +] + +[[package]] +name = "gix-hash" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0" +dependencies = [ + "faster-hex", + "thiserror", +] + +[[package]] +name = "gix-lock" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5c65e6a29830a435664891ced3f3c1af010f14900226019590ee0971a22f37" +dependencies = [ + "gix-tempfile", + "gix-utils", + "thiserror", +] + +[[package]] +name = "gix-object" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33" +dependencies = [ + "bstr", + "btoi", + "gix-actor", + "gix-date", + "gix-features", + "gix-hash", + "gix-validate", + "itoa", + "smallvec", + "thiserror", + "winnow 0.5.40", +] + +[[package]] +name = "gix-path" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23623cf0f475691a6d943f898c4d0b89f5c1a2a64d0f92bce0e0322ee6528783" +dependencies = [ + "bstr", + "gix-trace", + "home", + "once_cell", + "thiserror", +] + +[[package]] +name = "gix-ref" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2069adc212cf7f3317ef55f6444abd06c50f28479dbbac5a86acf3b05cbbfe" +dependencies = [ + "gix-actor", + "gix-date", + "gix-features", + "gix-fs", + "gix-hash", + "gix-lock", + "gix-object", + "gix-path", + "gix-tempfile", + "gix-validate", + "memmap2 0.9.4", + "thiserror", + "winnow 0.5.40", +] + +[[package]] +name = "gix-sec" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fddc27984a643b20dd03e97790555804f98cf07404e0e552c0ad8133266a79a1" +dependencies = [ + "bitflags 2.5.0", + "gix-path", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "gix-tempfile" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23" +dependencies = [ + "gix-fs", + "libc", + "once_cell", + "parking_lot", + "tempfile", +] + +[[package]] +name = "gix-trace" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b838b2db8f62c9447d483a4c28d251b67fee32741a82cb4d35e9eb4e9fdc5ab" + +[[package]] +name = "gix-utils" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0066432d4c277f9877f091279a597ea5331f68ca410efc874f0bdfb1cd348f92" +dependencies = [ + "fastrand 2.0.1", + "unicode-normalization", +] + +[[package]] +name = "gix-validate" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e39fc6e06044985eac19dd34d474909e517307582e462b2eb4c8fa51b6241545" +dependencies = [ + "bstr", + "thiserror", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fcd4ae4e86d991ad1300b8f57166e5be0c95ef1f63f3f5b827f8a164548746" +dependencies = [ + "bitflags 2.5.0", + "cfg_aliases", + "cgl", + "core-foundation", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "icrate", + "libloading", + "objc2", + "once_cell", + "raw-window-handle 0.5.2", + "wayland-sys", + "windows-sys 0.48.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebcdfba24f73b8412c5181e56f092b5eff16671c514ce896b258a0a64bd7735" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle 0.5.2", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77cc5623f5309ef433c3dd4ca1223195347fe62c413da8e2fdd0eb76db2d9bcd" +dependencies = [ + "gl_generator", + "windows-sys 0.48.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a165fd686c10dcc2d45380b35796e577eacfd43d4660ee741ec8ebe2201b3b4f" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "half" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eceaaeec696539ddaf7b333340f1af35a5aa87ae3e4f3ead0532f72affab2e" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fa0ae458eb99874f54c09f4f9174f8b45fb87e854536a4e608696247f0c23" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2", + "dispatch", + "objc2", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-traits", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "iron-coder-feather-rp2040-bsp" +version = "0.1.0" +dependencies = [ + "adafruit-feather-rp2040", + "cortex-m", + "critical-section", + "embedded-hal 0.2.7", + "fugit", + "rp2040-hal 0.9.2", + "rtt-target", + "shared-bus", + "smart-leds", + "usb-device", + "usbd-serial", + "ws2812-pio", +] + +[[package]] +name = "iron_coder" +version = "0.2.0" +dependencies = [ + "cargo-generate", + "clap", + "duct", + "eframe", + "egui", + "egui_extras", + "enum-iterator", + "fs_extra", + "generate", + "git2", + "image", + "iron-coder-feather-rp2040-bsp", + "k_board", + "log", + "prettyplease", + "proc-macro2", + "quote", + "ra_ap_ide", + "ra_ap_rust-analyzer", + "rfd", + "savefile-derive", + "serde", + "slotmap", + "syn 2.0.53", + "syntect", + "toml 0.7.8", + "tracing", + "tracing-subscriber", + "usvg 0.35.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[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", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] + +[[package]] +name = "jod-thread" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b23360e99b8717f20aaa4598f5a6541efbe30630039fbc7706cf954a87947ae" + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k_board" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fedb2be91dd22ccceb181f2ea97adef9752f004855f2e669f6aff7f7c280a6d" + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "kstring" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747" +dependencies = [ + "serde", + "static_assertions", +] + +[[package]] +name = "kurbo" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "la-arena" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3752f229dcc5a481d60f385fa479ff46818033d881d2d801aa27dffcfb5e8306" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.4", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.5.0", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.5.0", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libssh2-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "line-index" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67d61795376ae2683928c218fda7d7d7db136fd38c06b7552904667f0d55580a" +dependencies = [ + "nohash-hasher", + "text-size", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "liquid" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f68ae1011499ae2ef879f631891f21c78e309755f4a5e483c4a8f12e10b609" +dependencies = [ + "doc-comment", + "liquid-core", + "liquid-derive", + "liquid-lib", + "serde", +] + +[[package]] +name = "liquid-core" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e0724dfcaad5cfb7965ea0f178ca0870b8d7315178f4a7179f5696f7f04d5f" +dependencies = [ + "anymap2", + "itertools 0.10.5", + "kstring", + "liquid-derive", + "num-traits", + "pest", + "pest_derive", + "regex", + "serde", + "time", +] + +[[package]] +name = "liquid-derive" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2fb41a9bb4257a3803154bdf7e2df7d45197d1941c9b1a90ad815231630721" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "liquid-lib" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a17e273a6fb1fb6268f7a5867ddfd0bd4683c7e19b51084f3d567fad4348c0" +dependencies = [ + "itertools 0.10.5", + "liquid-core", + "once_cell", + "percent-encoding", + "regex", + "time", + "unicode-segmentation", +] + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "lsp-server" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095" +dependencies = [ + "crossbeam-channel", + "log", + "serde", + "serde_json", +] + +[[package]] +name = "lsp-types" +version = "0.95.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984" +dependencies = [ + "bitflags 1.3.2", + "serde", + "serde_json", + "serde_repr", + "url", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess2" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a3333bb1609500601edc766a39b4c1772874a4ce26022f4d866854dc020c41" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "miow" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand", +] + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.5.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum 0.7.2", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", + "thiserror", +] + +[[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.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "normpath" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5831952a9476f2fed74b77d74182fa5ddc4d21c72ec45a333b250e3ed0272804" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.5.0", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459" + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "onig" +version = "6.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" +dependencies = [ + "bitflags 1.3.2", + "libc", + "once_cell", + "onig_sys", +] + +[[package]] +name = "onig_sys" +version = "69.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox 0.0.2", +] + +[[package]] +name = "os_pipe" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owned_ttf_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser 0.20.0", +] + +[[package]] +name = "pango-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-absolutize" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" +dependencies = [ + "path-dedot", +] + +[[package]] +name = "path-dedot" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" +dependencies = [ + "once_cell", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "perf-event" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5396562cd2eaa828445d6d34258ae21ee1eb9d40fe626ca7f51c8dccb4af9d66" +dependencies = [ + "libc", + "perf-event-open-sys", +] + +[[package]] +name = "perf-event-open-sys" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce9bedf5da2c234fdf2391ede2b90fabf585355f33100689bc364a3ea558561a" +dependencies = [ + "libc", +] + +[[package]] +name = "pest" +version = "2.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f8023d0fb78c8e03784ea1c7f3fa36e68a723138990b8d5a47d916b651e7a8" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d24f72393fd16ab6ac5738bc33cdb6a9aa73f8b902e8fe29cf4e67d7dd1026" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc17e2a6c7d0a492f0158d7a4bd66cc17280308bbaff78d5bef566dca35ab80" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "pest_meta" +version = "2.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934cd7631c050f4674352a6e835d5f6711ffbfb9345c2fc0107155ac495ae293" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pio" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e09694b50f89f302ed531c1f2a7569f0be5867aee4ab4f8f729bbeec0078e3" +dependencies = [ + "arrayvec", + "num_enum 0.5.11", + "paste", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +dependencies = [ + "base64", + "indexmap", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.31", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.53", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + +[[package]] +name = "proc-macro2" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prodash" +version = "26.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf" + +[[package]] +name = "protobuf" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55bad9126f378a853655831eb7363b7b01b81d19f8cb1218861086ca4a1a61e" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror", +] + +[[package]] +name = "protobuf-support" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d4d7b8601c814cfb36bcebb79f0e61e45e1e93640cf778837833bbed05c372" +dependencies = [ + "thiserror", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.5.0", + "memchr", + "unicase", +] + +[[package]] +name = "pulldown-cmark-to-cmark" +version = "10.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0194e6e1966c23cc5fd988714f85b18d548d773e81965413555d96569931833d" +dependencies = [ + "pulldown-cmark", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ra-ap-rustc_abi" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0baa423a2c2bfd6e4bd40e7215f7ddebd12a649ce0b65078a38b91068895aa" +dependencies = [ + "bitflags 2.5.0", + "ra-ap-rustc_index 0.35.0", + "tracing", +] + +[[package]] +name = "ra-ap-rustc_index" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322b751895cc4a0a2ee0c6ab36ec80bc8abf5f8d76254c482f96f03c27c92ebe" +dependencies = [ + "arrayvec", + "ra-ap-rustc_index_macros 0.35.0", + "smallvec", +] + +[[package]] +name = "ra-ap-rustc_index" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5a0ba0d08af366cf235dbe8eb7226cced7a4fe502c98aa434ccf416defd746" +dependencies = [ + "arrayvec", + "ra-ap-rustc_index_macros 0.37.0", + "smallvec", +] + +[[package]] +name = "ra-ap-rustc_index_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054e25eac52f0506c1309ca4317c11ad4925d7b99eb897f71aa7c3cbafb46c2b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", + "synstructure", +] + +[[package]] +name = "ra-ap-rustc_index_macros" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1971ebf9a701e0e68387c264a32517dcb4861ad3a4862f2e2803c1121ade20d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", + "synstructure", +] + +[[package]] +name = "ra-ap-rustc_lexer" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8da0fa51a1a97ba4296a1c78fa454815a153b472e2546b6338a0902ad59e015" +dependencies = [ + "unicode-properties", + "unicode-xid", +] + +[[package]] +name = "ra-ap-rustc_parse_format" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3851f930a54adcb76889983dcd5c00a0c4e206e190e1384dbc00d49b82dfb45e" +dependencies = [ + "ra-ap-rustc_index 0.35.0", + "ra-ap-rustc_lexer", +] + +[[package]] +name = "ra-ap-rustc_pattern_analysis" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3c0e7ca9c5bdc66e3b590688e237a22ac47a48e4eac7f46b05b2abbfaf0abd" +dependencies = [ + "ra-ap-rustc_index 0.37.0", + "rustc-hash", + "rustc_apfloat", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_base_db" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "474d7a9edb1ae9934eb55f169a70cb51e2ddcc006e0ec320412e4b6ec6ef9b4f" +dependencies = [ + "la-arena", + "ra_ap_cfg", + "ra_ap_profile", + "ra_ap_salsa", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_vfs", + "rustc-hash", + "semver 1.0.22", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_cfg" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1979ae15d2383379c04261a7ba08115c0a168c7f6d1b318d3c8fb60e54b22d" +dependencies = [ + "ra_ap_tt", + "rustc-hash", +] + +[[package]] +name = "ra_ap_flycheck" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2becd812249f78e9bebec9f98330a92eb1a4ff44ddc1f31733c275ec0b43503c" +dependencies = [ + "cargo_metadata", + "command-group", + "crossbeam-channel", + "ra_ap_paths", + "ra_ap_stdx", + "ra_ap_toolchain", + "rustc-hash", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "ra_ap_hir" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ee0abe369a2695cfa42539192fdda61301d36f8ccb593ec227ecb5680fb530" +dependencies = [ + "arrayvec", + "either", + "itertools 0.12.1", + "once_cell", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_hir_def", + "ra_ap_hir_expand", + "ra_ap_hir_ty", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_hir_def" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117331a1952bb0cea47fa33f64c1eeee1f0b1b33a24f5fc9ab152a1b2b1b199b" +dependencies = [ + "arrayvec", + "bitflags 2.5.0", + "cov-mark", + "dashmap", + "drop_bomb", + "either", + "fst", + "hashbrown", + "indexmap", + "itertools 0.12.1", + "la-arena", + "once_cell", + "ra-ap-rustc_abi", + "ra-ap-rustc_parse_format", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_hir_expand", + "ra_ap_intern", + "ra_ap_limit", + "ra_ap_mbe", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_hir_expand" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ada1f96a6f87be158c58773b39392cee94532c2c7c44698f93637e6a488bb966" +dependencies = [ + "cov-mark", + "either", + "hashbrown", + "itertools 0.12.1", + "la-arena", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_intern", + "ra_ap_limit", + "ra_ap_mbe", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_hir_ty" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "204687ffcff17eaa802a569ab8396f67aaa7ec3702074696b2b0fff3dbb34a59" +dependencies = [ + "arrayvec", + "bitflags 2.5.0", + "chalk-derive", + "chalk-ir", + "chalk-recursive", + "chalk-solve", + "cov-mark", + "either", + "ena", + "indexmap", + "itertools 0.12.1", + "la-arena", + "nohash-hasher", + "once_cell", + "oorandom", + "ra-ap-rustc_abi", + "ra-ap-rustc_index 0.35.0", + "ra-ap-rustc_pattern_analysis", + "ra_ap_base_db", + "ra_ap_hir_def", + "ra_ap_hir_expand", + "ra_ap_intern", + "ra_ap_limit", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "rustc-hash", + "scoped-tls", + "smallvec", + "tracing", + "triomphe", + "typed-arena", +] + +[[package]] +name = "ra_ap_ide" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac89cd5365d9d0348022c2bebb904ea79c98952b9585961addc1eaa86c76319e" +dependencies = [ + "arrayvec", + "cov-mark", + "crossbeam-channel", + "dot", + "either", + "itertools 0.12.1", + "nohash-hasher", + "oorandom", + "pulldown-cmark", + "pulldown-cmark-to-cmark", + "ra_ap_cfg", + "ra_ap_hir", + "ra_ap_ide_assists", + "ra_ap_ide_completion", + "ra_ap_ide_db", + "ra_ap_ide_diagnostics", + "ra_ap_ide_ssr", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "ra_ap_toolchain", + "smallvec", + "tracing", + "triomphe", + "url", +] + +[[package]] +name = "ra_ap_ide_assists" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb77f40118fe5c793a349a8d344dd364bde4d77befcfb16cda891e2f580941" +dependencies = [ + "cov-mark", + "either", + "itertools 0.12.1", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_ide_completion" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934fa34dc3ef1eea9ca6b09b43f9a56ec95467316ad4e2ece6cd01b39c5a6464" +dependencies = [ + "cov-mark", + "itertools 0.12.1", + "once_cell", + "ra_ap_base_db", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_ide_db" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c4dcceab14042b5082a36783c4b572db7c977aff92632eb20441d5fc6ac3ea9" +dependencies = [ + "arrayvec", + "cov-mark", + "either", + "fst", + "indexmap", + "itertools 0.12.1", + "line-index", + "memchr", + "nohash-hasher", + "once_cell", + "ra_ap_base_db", + "ra_ap_hir", + "ra_ap_limit", + "ra_ap_parser", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "rayon", + "rustc-hash", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_ide_diagnostics" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca03e7af5ff14b2061a3beb8ab442bfcd4570c400220a3de906054a7899d9d3" +dependencies = [ + "cov-mark", + "either", + "itertools 0.12.1", + "once_cell", + "ra_ap_cfg", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "serde_json", + "tracing", +] + +[[package]] +name = "ra_ap_ide_ssr" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2036f040da0eadb033f670b7337a55748c4d265a90e328af2355b8be4fa5b57e" +dependencies = [ + "cov-mark", + "itertools 0.12.1", + "nohash-hasher", + "ra_ap_hir", + "ra_ap_ide_db", + "ra_ap_parser", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_text_edit", + "triomphe", +] + +[[package]] +name = "ra_ap_intern" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29bc12bedcbab58383497382b9c5f806f13712461ee7e21c46927f470dc81a" +dependencies = [ + "dashmap", + "hashbrown", + "rustc-hash", + "triomphe", +] + +[[package]] +name = "ra_ap_limit" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f6afbf3c52cdbefffa13de361ed690a44d03e00ebf37912a6ee31eb69696dd6" + +[[package]] +name = "ra_ap_load-cargo" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "378661baba4b3aa9aa5775680f7c6f68fd6fa84aad93b9d22c5927b333f8194a" +dependencies = [ + "anyhow", + "crossbeam-channel", + "itertools 0.12.1", + "ra_ap_hir_expand", + "ra_ap_ide", + "ra_ap_ide_db", + "ra_ap_proc_macro_api", + "ra_ap_project_model", + "ra_ap_span", + "ra_ap_tt", + "ra_ap_vfs", + "ra_ap_vfs-notify", + "tracing", +] + +[[package]] +name = "ra_ap_mbe" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e917def5b1f98ba3d513f7c1c7a7f167159d4598eaa11c48e56a257514c5be" +dependencies = [ + "cov-mark", + "ra_ap_parser", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_tt", + "rustc-hash", + "smallvec", + "tracing", +] + +[[package]] +name = "ra_ap_parser" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e2c28677f68f1e281655e7a4cb01c5dd4122955a6fce6af8ba75818c5ef6123" +dependencies = [ + "drop_bomb", + "ra-ap-rustc_lexer", + "ra_ap_limit", +] + +[[package]] +name = "ra_ap_paths" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2879d77e15dda37cec7555951e8f8193ea25b12a396730cb57a82a7d9775d21c" + +[[package]] +name = "ra_ap_proc_macro_api" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e7fa1cf5303439f1755bf87907db568dc2b4ed1c31fdd81ba810cb5ab7db6c" +dependencies = [ + "indexmap", + "la-arena", + "memmap2 0.5.10", + "object", + "ra_ap_base_db", + "ra_ap_paths", + "ra_ap_profile", + "ra_ap_span", + "ra_ap_stdx", + "ra_ap_tt", + "rustc-hash", + "serde", + "serde_json", + "snap", + "text-size", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_profile" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b04b6eee69594a004396b61cec5182d7eabb1264da703b6b57cec2b74f62d" +dependencies = [ + "cfg-if", + "countme", + "la-arena", + "libc", + "once_cell", + "perf-event", + "tracing", + "winapi", +] + +[[package]] +name = "ra_ap_project_model" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be7f11b2ffaea22d1310a1b122336bc5fd4cd1d92ad4795371450a230c3d267" +dependencies = [ + "anyhow", + "cargo_metadata", + "itertools 0.12.1", + "la-arena", + "ra_ap_base_db", + "ra_ap_cfg", + "ra_ap_paths", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_toolchain", + "rustc-hash", + "semver 1.0.22", + "serde", + "serde_json", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_rust-analyzer" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff3f23e4246cb68358fe449a394fced9a0059a966a90d0bcb2f519e9ef6197f" +dependencies = [ + "always-assert", + "anyhow", + "crossbeam-channel", + "dissimilar", + "itertools 0.12.1", + "lsp-server", + "lsp-types", + "memchr", + "nohash-hasher", + "num_cpus", + "oorandom", + "parking_lot", + "ra_ap_cfg", + "ra_ap_flycheck", + "ra_ap_hir", + "ra_ap_hir_def", + "ra_ap_hir_ty", + "ra_ap_ide", + "ra_ap_ide_db", + "ra_ap_ide_ssr", + "ra_ap_load-cargo", + "ra_ap_parser", + "ra_ap_proc_macro_api", + "ra_ap_profile", + "ra_ap_project_model", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_toolchain", + "ra_ap_vfs", + "ra_ap_vfs-notify", + "rayon", + "rustc-hash", + "scip", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", + "tracing-tree", + "triomphe", + "walkdir", + "winapi", + "xflags", +] + +[[package]] +name = "ra_ap_salsa" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d2a171e5907d4dc405c595a64dad98a4e6d00036dedbe1365ece8650bfdf4" +dependencies = [ + "indexmap", + "lock_api", + "oorandom", + "parking_lot", + "ra_ap_salsa-macros", + "rustc-hash", + "smallvec", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_salsa-macros" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567d2dab6370fe3eec26cf6153806f4f084b688f6ed54be8b14cced0b94895a5" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "ra_ap_span" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7051bc3c4ab04f1845bae88c5123970a06e69468700e363853fe3d871dccbf90" +dependencies = [ + "la-arena", + "ra_ap_salsa", + "ra_ap_stdx", + "ra_ap_syntax", + "ra_ap_vfs", +] + +[[package]] +name = "ra_ap_stdx" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b788aeb92380b790c726fb69db99a6e5f9d6472f0d312ce01355e49ec1cf406c" +dependencies = [ + "always-assert", + "crossbeam-channel", + "itertools 0.12.1", + "jod-thread", + "libc", + "miow", + "winapi", +] + +[[package]] +name = "ra_ap_syntax" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "114a62fd597ec71fd75a1c707ca30354749f66b4b1053e79fc79741a16948ebe" +dependencies = [ + "cov-mark", + "either", + "indexmap", + "itertools 0.12.1", + "once_cell", + "ra-ap-rustc_lexer", + "ra_ap_parser", + "ra_ap_profile", + "ra_ap_stdx", + "ra_ap_text_edit", + "rowan", + "rustc-hash", + "smol_str", + "tracing", + "triomphe", +] + +[[package]] +name = "ra_ap_text_edit" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96635947604d35bc7f27d63d0f10d020b198d53c02f5df563febea7ad525dc6d" +dependencies = [ + "itertools 0.12.1", + "text-size", +] + +[[package]] +name = "ra_ap_toolchain" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a675ed9a963f5c8e4da56e8bcdd2d261eeeab596c1b92b69383c08e8accc0dd2" +dependencies = [ + "home", +] + +[[package]] +name = "ra_ap_tt" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c79f258ec56093bbc5b2c60d58b4fb135a2d51a91e506944f7ac7b44cc401d" +dependencies = [ + "ra_ap_span", + "ra_ap_stdx", + "smol_str", + "text-size", +] + +[[package]] +name = "ra_ap_vfs" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a18828a4642bdc990621f0d7931d60206db7510b192d037eb64b34574c2e60" +dependencies = [ + "fst", + "indexmap", + "nohash-hasher", + "ra_ap_paths", + "ra_ap_stdx", + "rustc-hash", +] + +[[package]] +name = "ra_ap_vfs-notify" +version = "0.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d2ed464852945117a7d8fc9267206fc90aa9f9609ec8faff9592e81ed27d94" +dependencies = [ + "crossbeam-channel", + "notify", + "ra_ap_paths", + "ra_ap_stdx", + "ra_ap_vfs", + "tracing", + "walkdir", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + +[[package]] +name = "rayon" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rctree" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox 0.0.1", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "remove_dir_all" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23895cfadc1917fed9c6ed76a8c2903615fa3704f7493ff82b364c6540acc02b" +dependencies = [ + "aligned", + "cfg-if", + "cvt", + "fs_at", + "lazy_static", + "libc", + "normpath", + "windows-sys 0.45.0", +] + +[[package]] +name = "resvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadccb3d99a9efb8e5e00c16fbb732cbe400db2ec7fc004697ee7d97d86cf1f4" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes 0.13.0", + "tiny-skia", + "usvg 0.37.0", +] + +[[package]] +name = "rfd" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe664af397d2b6a13a8ba1d172a2b5c87c6c5149039edbf8fa122b98c9ed96f" +dependencies = [ + "async-io", + "block", + "dispatch", + "futures-util", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle 0.5.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rhai" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3625f343d89990133d013e39c46e350915178cf94f1bec9f49b0cbef98a3e3c" +dependencies = [ + "ahash", + "bitflags 2.5.0", + "instant", + "num-traits", + "once_cell", + "rhai_codegen", + "smallvec", + "smartstring", +] + +[[package]] +name = "rhai_codegen" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853977598f084a492323fe2f7896b4100a86284ee8473612de60021ea341310f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64", + "bitflags 2.5.0", + "serde", + "serde_derive", +] + +[[package]] +name = "rowan" +version = "0.15.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a58fa8a7ccff2aec4f39cc45bf5f985cec7125ab271cf681c279fd00192b49" +dependencies = [ + "countme", + "hashbrown", + "memoffset", + "rustc-hash", + "text-size", +] + +[[package]] +name = "roxmltree" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "roxmltree" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" + +[[package]] +name = "rp2040-boot2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c773ec49b836077aa144b58dc7654a243e1eecdb6cf0d25361ae7c7600fabd8" +dependencies = [ + "crc-any", +] + +[[package]] +name = "rp2040-hal" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1369bb84862d7f69391a96606b2f29a00bfce7f29a749e23d5f01fc3f607ada0" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal 0.2.7", + "fugit", + "itertools 0.10.5", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac 0.4.0", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff2b9ae7e6dd6720fd9f64250c9087260e50fe98b6b032ccca65be3581167ca" +dependencies = [ + "cortex-m", + "critical-section", + "embedded-dma", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0", + "embedded-hal-nb", + "frunk", + "fugit", + "itertools 0.10.5", + "nb 1.1.0", + "paste", + "pio", + "rand_core", + "rp2040-hal-macros", + "rp2040-pac 0.5.0", + "usb-device", + "vcell", + "void", +] + +[[package]] +name = "rp2040-hal-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86479063e497efe1ae81995ef9071f54fd1c7427e04d6c5b84cde545ff672a5e" +dependencies = [ + "cortex-m-rt", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rp2040-pac" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9192cafbb40d717c9e0ddf767aaf9c69fee1b4e48d22ed853b57b11f6d9f3d7e" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "vcell", +] + +[[package]] +name = "rp2040-pac" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12d9d8375815f543f54835d01160d4e47f9e2cae75f17ff8f1ec19ce1da96e4c" +dependencies = [ + "cortex-m", + "critical-section", + "vcell", +] + +[[package]] +name = "rtt-target" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3afa12c77ba1b9bf560e4039a9b9a08bb9cde0e9e6923955eeb917dd8d5cf303" +dependencies = [ + "critical-section", + "ufmt-write", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_apfloat" +version = "0.2.0+llvm-462a31f5a5ab" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465187772033a5ee566f69fe008df03628fce549a0899aae76f0a0c2e34696be" +dependencies = [ + "bitflags 1.3.2", + "smallvec", +] + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ede67b28608b4c60685c7d54122d4400d90f62b40caee7700e700380a390fa8" + +[[package]] +name = "rustls-webpki" +version = "0.102.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustybuzz" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162bdf42e261bee271b3957691018634488084ef577dddeb6420a9684cab2a6a" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "smallvec", + "ttf-parser 0.18.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-general-category", + "unicode-script", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sanitize-filename" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "savefile-derive" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c624cb24aceeeff8b993f54dec710e0a9ef06e71ad3841b4dd711be542263ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scip" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5dc1bd66649133af84ab62436ddd2856c2605182b02dec2cd197f684dfe15ef" +dependencies = [ + "protobuf", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared-bus" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f8438a40b91c8b9531c664e9680c55b92bd78cd6809a8b45b4512b1e5765f2" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "smart-leds" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38dd45fa275f70b4110eac5f5182611ad384f88bb22b68b9a9c3cafd7015290b" +dependencies = [ + "smart-leds-trait", +] + +[[package]] +name = "smart-leds-trait" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf6d833fa93f16a1c1874e62c2aebe8567e5bdd436d59bf543ed258b6f7a8e3" +dependencies = [ + "rgb", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.5.0", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2 0.9.4", + "rustix 0.38.31", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" +dependencies = [ + "libc", + "smithay-client-toolkit", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", +] + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "svgtypes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed4b0611e7f3277f68c0fa18e385d9e2d26923691379690039548f867cef02a7" +dependencies = [ + "kurbo", + "siphasher", +] + +[[package]] +name = "svgtypes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e44e288cd960318917cbd540340968b90becc8bc81f171345d706e7a89d9d70" +dependencies = [ + "kurbo", + "siphasher", +] + +[[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.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "syntect" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1" +dependencies = [ + "bincode", + "bitflags 1.3.2", + "flate2", + "fnv", + "once_cell", + "onig", + "plist", + "regex-syntax", + "serde", + "serde_derive", + "serde_json", + "thiserror", + "walkdir", + "yaml-rust", +] + +[[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.12", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.31", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal-prompt" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "572818b3472910acbd5dff46a3413715c18e934b071ab2ba464a7b2c2af16376" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "text-size" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path 0.11.4", +] + +[[package]] +name = "tiny-skia-path" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.8", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c12219811e0c1ba077867254e5ad62ee2c9c190b0d957110750ac0cda1ae96cd" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.5", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term 0.46.0", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-tree" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65139ecd2c3f6484c3b99bc01c77afe21e95473630747c7aca525e78b0666675" +dependencies = [ + "nu-ansi-term 0.49.0", + "tracing-core", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "ttf-parser" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" + +[[package]] +name = "ttf-parser" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" + +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "ufmt-write" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" + +[[package]] +name = "unicode-bom" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" + +[[package]] +name = "unicode-ccc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" + +[[package]] +name = "unicode-general-category" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" + +[[package]] +name = "unicode-script" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" +dependencies = [ + "base64", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "rustls-webpki", + "url", + "webpki-roots", +] + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + +[[package]] +name = "usbd-serial" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", + "usb-device", +] + +[[package]] +name = "usvg" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14d09ddfb0d93bf84824c09336d32e42f80961a9d1680832eb24fdf249ce11e6" +dependencies = [ + "base64", + "log", + "pico-args", + "usvg-parser 0.35.0", + "usvg-text-layout", + "usvg-tree 0.35.0", + "xmlwriter", +] + +[[package]] +name = "usvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b0a51b72ab80ca511d126b77feeeb4fb1e972764653e61feac30adc161a756" +dependencies = [ + "base64", + "log", + "pico-args", + "usvg-parser 0.37.0", + "usvg-tree 0.37.0", + "xmlwriter", +] + +[[package]] +name = "usvg-parser" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19bf93d230813599927d88557014e0908ecc3531666d47c634c6838bc8db408" +dependencies = [ + "data-url 0.2.0", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree 0.18.1", + "simplecss", + "siphasher", + "svgtypes 0.11.0", + "usvg-tree 0.35.0", +] + +[[package]] +name = "usvg-parser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd4e3c291f45d152929a31f0f6c819245e2921bfd01e7bd91201a9af39a2bdc" +dependencies = [ + "data-url 0.3.1", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree 0.19.0", + "simplecss", + "siphasher", + "svgtypes 0.13.0", + "usvg-tree 0.37.0", +] + +[[package]] +name = "usvg-text-layout" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "035044604e89652c0a2959b8b356946997a52649ba6cade45928c2842376feb4" +dependencies = [ + "fontdb", + "kurbo", + "log", + "rustybuzz", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "usvg-tree 0.35.0", +] + +[[package]] +name = "usvg-tree" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7939a7e4ed21cadb5d311d6339730681c3e24c3e81d60065be80e485d3fc8b92" +dependencies = [ + "rctree", + "strict-num", + "svgtypes 0.11.0", + "tiny-skia-path 0.10.0", +] + +[[package]] +name = "usvg-tree" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee3d202ebdb97a6215604b8f5b4d6ef9024efd623cf2e373a6416ba976ec7d3" +dependencies = [ + "rctree", + "strict-num", + "svgtypes 0.13.0", + "tiny-skia-path 0.11.4", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.53", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wayland-backend" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +dependencies = [ + "cc", + "downcast-rs", + "rustix 0.38.31", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +dependencies = [ + "bitflags 2.5.0", + "rustix 0.38.31", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" +dependencies = [ + "rustix 0.38.31", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1b04c569c83a9bb971dd47ec6fd48753315f4bf989b9b04a2e7ca4d7f0dc950" +dependencies = [ + "core-foundation", + "home", + "jni", + "log", + "ndk-context", + "objc", + "raw-window-handle 0.5.2", + "url", + "web-sys", +] + +[[package]] +name = "webpki-roots" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-targets 0.42.2", +] + +[[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.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + +[[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.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + +[[package]] +name = "winit" +version = "0.29.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.5.0", + "bytemuck", + "calloop", + "cfg_aliases", + "core-foundation", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", + "libc", + "log", + "memmap2 0.9.4", + "ndk", + "ndk-sys", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", + "redox_syscall 0.3.5", + "rustix 0.38.31", + "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.48.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" +dependencies = [ + "memchr", +] + +[[package]] +name = "ws2812-pio" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d219e3b43c1e14305b36363060c0348d560314e235d999cf492bbbab1f38e8d" +dependencies = [ + "cortex-m", + "embedded-hal 0.2.7", + "fugit", + "nb 1.1.0", + "pio", + "rp2040-hal 0.8.2", + "smart-leds-trait", +] + +[[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 = "x11rb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix 0.38.31", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" + +[[package]] +name = "xcursor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" + +[[package]] +name = "xflags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9e15fbb3de55454b0106e314b28e671279009b363e6f1d8e39fdc3bf048944" +dependencies = [ + "xflags-macros", +] + +[[package]] +name = "xflags-macros" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "672423d4fea7ffa2f6c25ba60031ea13dc6258070556f125cc4d790007d4a155" + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.5.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index efbfbea..508a9c3 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2023-10-02" +channel = "nightly-2024-03-08" # targets = ["x86_64-pc-windows-msvc"] \ No newline at end of file diff --git a/src/project/display.rs b/src/project/display.rs index f1a507f..01764ef 100644 --- a/src/project/display.rs +++ b/src/project/display.rs @@ -7,8 +7,6 @@ use egui::Response; use egui_extras::RetainedImage; use log::{info, warn}; -use ra_ap_ide::Change; - use std::collections::HashMap; use std::path::Path; use std::sync::Arc; diff --git a/src/project/mod.rs b/src/project/mod.rs index 23d3ea6..d71439c 100644 --- a/src/project/mod.rs +++ b/src/project/mod.rs @@ -88,7 +88,6 @@ fn cli_cmd(str: &str) { // backend functionality for Project struct impl Project { - // Helper function for printing both to logs and to built-in terminal fn info_logger(&mut self, msg: &str) { info!("{}", msg);