├── .rustfmt.toml
├── .gitignore
├── img
└── example.jpeg
├── Cargo.toml
├── src
├── main.rs
├── config.rs
├── client.rs
├── plugin.rs
└── server.rs
├── README.md
└── Cargo.lock
/.rustfmt.toml:
--------------------------------------------------------------------------------
1 | tab_spaces = 2
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 |
3 | *.json
4 | *.js
5 | examples
6 | memo.md
7 |
--------------------------------------------------------------------------------
/img/example.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oyyd/kcptun-sip003-rust/main/img/example.jpeg
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "kcptun-sip003-rust"
3 | version = "0.1.0"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | [dependencies]
9 | tokio = { version = "1.35.1", features = [
10 | "macros",
11 | "net",
12 | "rt",
13 | "rt-multi-thread",
14 | ] }
15 | tokio_kcp = { git = "https://github.com/oyyd/tokio_kcp.git", branch = "hack" }
16 | tokio_smux = "0.2"
17 | anyhow = "1.0.79"
18 | log = "0.4.20"
19 | env_logger = "0.10.1"
20 | tokio-io-timeout = "1.2.0"
21 |
22 | [dev-dependencies]
23 | tokio-socks = "0.5.1"
24 | reqwest = { version = "0.11.23", features = ["socks"] }
25 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | mod client;
2 | mod config;
3 | mod plugin;
4 | mod server;
5 |
6 | use anyhow::Result;
7 | use env_logger;
8 | use tokio;
9 |
10 | async fn server() -> Result<()> {
11 | let config = config::Config::new_server()?;
12 |
13 | let s = server::Server::new(config);
14 |
15 | s.run().await?;
16 |
17 | Ok(())
18 | }
19 |
20 | async fn client() -> Result<()> {
21 | let config = config::Config::new_client()?;
22 |
23 | let c = client::Client::new(config);
24 |
25 | c.run().await?;
26 |
27 | Ok(())
28 | }
29 |
30 | #[tokio::main]
31 | async fn main() {
32 | let env = env_logger::Env::new().filter_or("RUST_LOG", "info");
33 | env_logger::init_from_env(env);
34 |
35 | let plugin_opts = plugin::PluginOptions::new();
36 |
37 | if plugin_opts.is_client {
38 | client().await.unwrap()
39 | } else {
40 | server().await.unwrap()
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # kcptun-sip003-rust
2 |
3 | A [kcptun](https://github.com/xtaci/kcptun) implementation in Rust with sip003 support. It combines:
4 | - A hacked version of [tokio_kcp](https://github.com/Matrix-Zhang/tokio_kcp/)
5 | - [tokio_smux](https://github.com/oyyd/tokio_smux).
6 |
7 | Currently, only minimal features of kcptun are implemented. To work with kcptun, please set these options:
8 |
9 | ```bash
10 | --crypt none --mode fast3 --nocomp --ps 0 --ds 0
11 | ```
12 |
13 | Example:
14 |
15 |
16 |
17 |
18 | ## Install
19 |
20 | ```bash
21 | git clone https://github.com/oyyd/kcptun-sip003-rust.git
22 | cd kcptun-sip003-rust
23 | cargo install --path .
24 | kcptun-sip003-rust
25 | ```
26 |
27 |
28 | ## Usage
29 |
30 | Start a server:
31 | ```bash
32 | kcptun-sip003-rust
33 | ```
34 |
35 | Start a client:
36 | ```bash
37 | SS_PLUGIN_OPTIONS="client=true" kcptun-sip003-rust
38 | ```
39 |
--------------------------------------------------------------------------------
/src/config.rs:
--------------------------------------------------------------------------------
1 | use core::time;
2 |
3 | use crate::plugin::PluginConfig;
4 | use anyhow::Result;
5 | use tokio_kcp::{KcpConfig, KcpNoDelayConfig};
6 | use tokio_smux::SmuxConfig;
7 |
8 | const DEFAULT_RW_TIMEOUT: time::Duration = time::Duration::from_secs(600);
9 |
10 | #[derive(Clone)]
11 | pub struct Config {
12 | pub plugin: PluginConfig,
13 | pub kcp: KcpConfig,
14 | pub sockbuf: u32,
15 | pub server_kcp_stream_rw_timeout: Option,
16 | }
17 |
18 | impl Config {
19 | fn default_sokcbuf() -> u32 {
20 | 1024 * 1024 * 4
21 | }
22 |
23 | pub fn new_client() -> Result {
24 | let plugin = PluginConfig::new_client()?;
25 | let kcp = Config::new_kcp_config();
26 |
27 | Ok(Self {
28 | plugin,
29 | kcp,
30 | sockbuf: Self::default_sokcbuf(),
31 | server_kcp_stream_rw_timeout: None,
32 | })
33 | }
34 |
35 | pub fn new_server() -> Result {
36 | let plugin = PluginConfig::new_server()?;
37 | let kcp = Config::new_kcp_config();
38 |
39 | Ok(Self {
40 | plugin,
41 | kcp,
42 | sockbuf: Self::default_sokcbuf(),
43 | server_kcp_stream_rw_timeout: Some(DEFAULT_RW_TIMEOUT),
44 | })
45 | }
46 |
47 | fn new_kcp_config() -> KcpConfig {
48 | let mut kcp = KcpConfig::default();
49 |
50 | // TODO support kcp config from outside
51 | kcp.nodelay = KcpNoDelayConfig::fastest();
52 |
53 | kcp
54 | }
55 |
56 | // TODO support config from outside
57 | // TODO allow clone SmuxConfig and move to config
58 | pub fn new_smux() -> SmuxConfig {
59 | let smux = SmuxConfig::default();
60 |
61 | smux
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/client.rs:
--------------------------------------------------------------------------------
1 | use crate::config::Config;
2 | use anyhow::Result;
3 | use log;
4 | use tokio::{
5 | io::{AsyncReadExt, AsyncWriteExt},
6 | net::{TcpListener, TcpStream},
7 | };
8 | use tokio_kcp::KcpStream;
9 | use tokio_smux::{Session, Stream};
10 |
11 | pub struct Client {
12 | config: Config,
13 | }
14 |
15 | async fn proxy(mut socket: TcpStream, mut smux_stream: Stream) -> Result<()> {
16 | let mut buf: Vec = vec![0; 65535];
17 |
18 | loop {
19 | tokio::select! {
20 | size = socket.read(&mut buf) => {
21 | let size = size?;
22 | if size == 0 {
23 | break
24 | }
25 | let data = &buf[0..size];
26 | smux_stream.send_message(data.to_vec()).await?;
27 | }
28 | msg = smux_stream.recv_message() => {
29 | let msg = msg?;
30 | if msg.is_none() {
31 | // receive fin
32 | break
33 | }
34 | let msg = msg.unwrap();
35 | socket.write_all(&msg).await?;
36 | }
37 | }
38 | }
39 | Ok(())
40 | }
41 |
42 | impl Client {
43 | pub fn new(config: Config) -> Self {
44 | Client { config }
45 | }
46 |
47 | pub async fn run(&self) -> Result<()> {
48 | // - create kcp client connects to server
49 | let remote_addr = self.config.plugin.client_remote_addr()?;
50 | let kcp_stream = KcpStream::connect(&self.config.kcp, remote_addr).await?;
51 |
52 | // - wrap smux
53 | let mut session = Session::client(kcp_stream, Config::new_smux())?;
54 |
55 | // - bind local tcp server
56 | let local_addr = self.config.plugin.client_local_addr()?;
57 |
58 | log::info!("tcp client bind local_addr {}", local_addr);
59 |
60 | let tcp_listener = TcpListener::bind(local_addr).await?;
61 |
62 | // - receive tcp clients and create kcp clients stream to proxy them
63 | loop {
64 | let (socket, local_addr) = tcp_listener.accept().await?;
65 | let smux_stream = session.open_stream().await;
66 |
67 | // TODO restart if kcp stream broken?
68 | if smux_stream.is_err() {
69 | let err = smux_stream.err().unwrap();
70 | log::warn!("failed to open smux stream, err: {}", err.to_string());
71 | continue;
72 | }
73 |
74 | let smux_stream = smux_stream?;
75 |
76 | log::info!("proxy {} -> {}", local_addr, remote_addr);
77 |
78 | tokio::spawn(async move {
79 | let res = proxy(socket, smux_stream).await;
80 | let _ = res.map_err(|err| log::warn!("tunnel failure, err: {}", err.to_string()));
81 | });
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/src/plugin.rs:
--------------------------------------------------------------------------------
1 | use anyhow::Result;
2 | use std::env;
3 | use std::net;
4 | use std::str::FromStr;
5 |
6 | const LOCAL_HOST: &str = "SS_LOCAL_HOST";
7 | const LOCAL_PORT: &str = "SS_LOCAL_PORT";
8 | const REMOTE_HOST: &str = "SS_REMOTE_HOST";
9 | const REMOTE_PORT: &str = "SS_REMOTE_PORT";
10 | const PLUGIN_OPTIONS: &str = "SS_PLUGIN_OPTIONS";
11 |
12 | pub struct PluginOptions {
13 | pub is_client: bool,
14 | }
15 |
16 | impl PluginOptions {
17 | pub fn new() -> Self {
18 | let mut opts = PluginOptions { is_client: false };
19 |
20 | let opts_str = env::var(PLUGIN_OPTIONS);
21 |
22 | if opts_str.is_err() {
23 | return opts;
24 | }
25 |
26 | let opts_str = opts_str.unwrap();
27 |
28 | let parts = opts_str.split(";");
29 |
30 | for item in parts.into_iter() {
31 | let kv: Vec<_> = item.split("=").collect();
32 | if kv.len() != 2 {
33 | continue;
34 | }
35 |
36 | let key = kv[0];
37 | let value = kv[1];
38 |
39 | match key {
40 | "client" => opts.is_client = value == "true",
41 | _ => {
42 | //
43 | }
44 | }
45 | }
46 |
47 | opts
48 | }
49 | }
50 |
51 | #[derive(Clone)]
52 | pub struct PluginConfig {
53 | is_client: bool,
54 |
55 | local_host: String,
56 | local_port: u16,
57 | remote_host: String,
58 | remote_port: u16,
59 | }
60 |
61 | impl Default for PluginConfig {
62 | fn default() -> Self {
63 | Self {
64 | is_client: false,
65 | local_host: "127.0.0.1".to_string(),
66 | local_port: 12948,
67 | remote_host: "127.0.0.1".to_string(),
68 | remote_port: 29900,
69 | }
70 | }
71 | }
72 |
73 | fn parse_port(val: &str) -> Result {
74 | let port = val.parse::()?;
75 |
76 | Ok(port)
77 | }
78 |
79 | impl PluginConfig {
80 | pub fn new_client() -> Result {
81 | let mut config = PluginConfig::new()?;
82 |
83 | config.is_client = true;
84 |
85 | Ok(config)
86 | }
87 |
88 | pub fn new_server() -> Result {
89 | let mut config = PluginConfig::new()?;
90 |
91 | config.is_client = false;
92 |
93 | Ok(config)
94 | }
95 |
96 | fn new() -> Result {
97 | let mut config = Self::default();
98 |
99 | let vars = env::vars();
100 |
101 | for (key, value) in vars {
102 | match key.as_str() {
103 | LOCAL_HOST => {
104 | config.local_host = value;
105 | }
106 | LOCAL_PORT => {
107 | config.local_port = parse_port(&value)?;
108 | }
109 | REMOTE_HOST => {
110 | config.remote_host = value;
111 | }
112 | REMOTE_PORT => {
113 | config.remote_port = parse_port(&value)?;
114 | }
115 | _ => {}
116 | }
117 | }
118 |
119 | Ok(config)
120 | }
121 |
122 | pub fn server_listen_addr(&self) -> Result {
123 | let addr = format!("{}:{}", self.remote_host, self.remote_port);
124 | let addr = net::SocketAddr::from_str(&addr)?;
125 | Ok(addr)
126 | }
127 |
128 | pub fn server_target_addr(&self) -> Result {
129 | let addr = format!("{}:{}", self.local_host, self.local_port);
130 | let addr = net::SocketAddr::from_str(&addr)?;
131 | Ok(addr)
132 | }
133 |
134 | // TODO check
135 | pub fn client_local_addr(&self) -> Result {
136 | let addr = format!("{}:{}", self.local_host, self.local_port);
137 | let addr = net::SocketAddr::from_str(&addr)?;
138 | Ok(addr)
139 | }
140 |
141 | pub fn client_remote_addr(&self) -> Result {
142 | let addr = format!("{}:{}", self.remote_host, self.remote_port);
143 | let addr = net::SocketAddr::from_str(&addr)?;
144 | Ok(addr)
145 | }
146 | }
147 |
--------------------------------------------------------------------------------
/src/server.rs:
--------------------------------------------------------------------------------
1 | use std::net::SocketAddr;
2 |
3 | use crate::config::Config;
4 | use anyhow::Result;
5 | use log;
6 | use tokio::{
7 | io::{AsyncReadExt, AsyncWriteExt},
8 | net::{TcpSocket, TcpStream},
9 | };
10 | use tokio_io_timeout::TimeoutStream;
11 | use tokio_kcp::KcpListener;
12 | use tokio_smux::{Session, Stream};
13 |
14 | pub struct Server {
15 | config: Config,
16 | }
17 |
18 | const MAX_FRAME_DATA_LEN: usize = 65535;
19 |
20 | async fn proxy(mut socket: TcpStream, mut smux_stream: Stream) -> Result<()> {
21 | let mut buf: Vec = vec![0; 65535];
22 |
23 | loop {
24 | tokio::select! {
25 | size = socket.read(&mut buf) => {
26 | let size = size?;
27 | if size == 0 {
28 | break;
29 | }
30 |
31 | // NOTE: When test, large frames will crash shadowrocket clients.
32 | // But I can't reproduce it with kcptun.
33 | let mut pos = 0;
34 | loop {
35 | if pos >= size {
36 | break;
37 | }
38 | let mut end = pos + MAX_FRAME_DATA_LEN;
39 | if end > size {
40 | end = size;
41 | }
42 | let data = &buf[pos..end];
43 | smux_stream.send_message(data.to_vec()).await?;
44 | pos = end;
45 | };
46 |
47 | // NOTE: Simply write all of them into a frame when using with kcptun.
48 | // smux_stream.send_message(buf[0..size].to_vec()).await?;
49 | }
50 | msg = smux_stream.recv_message() => {
51 | let msg = msg?;
52 | if msg.is_none() {
53 | break;
54 | }
55 |
56 | let data = msg.unwrap();
57 | socket.write_all(&data).await?;
58 | }
59 | }
60 | }
61 |
62 | Ok(())
63 | }
64 |
65 | async fn handle_stream(
66 | smux_stream: Stream,
67 | local_addr: SocketAddr,
68 | target_addr: SocketAddr,
69 | sockbuf: u32,
70 | ) -> Result<()> {
71 | let socket = {
72 | match target_addr.is_ipv4() {
73 | true => TcpSocket::new_v4(),
74 | false => TcpSocket::new_v6(),
75 | }
76 | }?;
77 |
78 | socket.set_recv_buffer_size(sockbuf)?;
79 | socket.set_send_buffer_size(sockbuf)?;
80 |
81 | let tcp_socket = socket.connect(target_addr).await?;
82 |
83 | log::info!("proxy {} -> {}", local_addr, target_addr);
84 |
85 | proxy(tcp_socket, smux_stream).await?;
86 |
87 | Ok(())
88 | }
89 |
90 | async fn loop_smux_session(
91 | mut session: Session,
92 | local_addr: SocketAddr,
93 | target_addr: SocketAddr,
94 | sockbuf: u32,
95 | ) -> Result<()> {
96 | // - accept smux stream
97 | loop {
98 | let smux_stream = session.accept_stream().await?;
99 | let sid = smux_stream.sid();
100 |
101 | log::trace!("accept smux stream, sid {}", sid);
102 |
103 | tokio::spawn(async move {
104 | // - create tcp socket connect to the remote and proxy their data
105 | let res = handle_stream(smux_stream, local_addr, target_addr.clone(), sockbuf).await;
106 | let _ = res.map_err(|err| {
107 | log::warn!("proxy failed, err {}", err.to_string());
108 | });
109 | log::trace!("smux stream finished, sid {}", sid);
110 | });
111 | }
112 | }
113 |
114 | impl Server {
115 | pub fn new(config: Config) -> Self {
116 | Self { config }
117 | }
118 |
119 | pub async fn run(&self) -> Result<()> {
120 | // - create kcp stream server
121 | let listen_addr = self.config.plugin.server_listen_addr()?;
122 | let target_addr = self.config.plugin.server_target_addr()?;
123 |
124 | log::info!(
125 | "server starts, listen_addr={}, target_addr={}",
126 | listen_addr,
127 | target_addr
128 | );
129 |
130 | let mut listener = KcpListener::bind(self.config.kcp, listen_addr).await?;
131 | let sockbuf = self.config.sockbuf;
132 |
133 | // - accept kcp client stream
134 | loop {
135 | let (kcp_stream, addr) = listener.accept().await?;
136 |
137 | let mut kcp_stream_with_timeout = TimeoutStream::new(kcp_stream);
138 | if self.config.server_kcp_stream_rw_timeout.is_some() {
139 | kcp_stream_with_timeout.set_read_timeout(self.config.server_kcp_stream_rw_timeout);
140 | kcp_stream_with_timeout.set_write_timeout(self.config.server_kcp_stream_rw_timeout);
141 | }
142 |
143 | log::info!("accept kcp stream, addr {}", addr);
144 |
145 | // - wrap smux
146 | let session = Session::server(Box::pin(kcp_stream_with_timeout), Config::new_smux())?;
147 |
148 | tokio::spawn(async move {
149 | let res = loop_smux_session(session, addr, target_addr, sockbuf).await;
150 | let _ = res.map_err(|err| {
151 | log::warn!("smux session failed, err: {}", err.to_string());
152 | });
153 | log::info!("kcp stream finished, addr {}", addr);
154 | });
155 | }
156 | }
157 | }
158 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "addr2line"
7 | version = "0.24.2"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
10 | dependencies = [
11 | "gimli",
12 | ]
13 |
14 | [[package]]
15 | name = "adler2"
16 | version = "2.0.0"
17 | source = "registry+https://github.com/rust-lang/crates.io-index"
18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
19 |
20 | [[package]]
21 | name = "aho-corasick"
22 | version = "1.1.3"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
25 | dependencies = [
26 | "memchr",
27 | ]
28 |
29 | [[package]]
30 | name = "anyhow"
31 | version = "1.0.97"
32 | source = "registry+https://github.com/rust-lang/crates.io-index"
33 | checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
34 |
35 | [[package]]
36 | name = "autocfg"
37 | version = "1.4.0"
38 | source = "registry+https://github.com/rust-lang/crates.io-index"
39 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
40 |
41 | [[package]]
42 | name = "backtrace"
43 | version = "0.3.74"
44 | source = "registry+https://github.com/rust-lang/crates.io-index"
45 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
46 | dependencies = [
47 | "addr2line",
48 | "cfg-if",
49 | "libc",
50 | "miniz_oxide",
51 | "object",
52 | "rustc-demangle",
53 | "windows-targets 0.52.6",
54 | ]
55 |
56 | [[package]]
57 | name = "base64"
58 | version = "0.21.7"
59 | source = "registry+https://github.com/rust-lang/crates.io-index"
60 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
61 |
62 | [[package]]
63 | name = "bitflags"
64 | version = "1.3.2"
65 | source = "registry+https://github.com/rust-lang/crates.io-index"
66 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
67 |
68 | [[package]]
69 | name = "bitflags"
70 | version = "2.9.0"
71 | source = "registry+https://github.com/rust-lang/crates.io-index"
72 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
73 |
74 | [[package]]
75 | name = "bumpalo"
76 | version = "3.17.0"
77 | source = "registry+https://github.com/rust-lang/crates.io-index"
78 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
79 |
80 | [[package]]
81 | name = "byte_string"
82 | version = "1.0.0"
83 | source = "registry+https://github.com/rust-lang/crates.io-index"
84 | checksum = "11aade7a05aa8c3a351cedc44c3fc45806430543382fcc4743a9b757a2a0b4ed"
85 |
86 | [[package]]
87 | name = "byteorder"
88 | version = "1.5.0"
89 | source = "registry+https://github.com/rust-lang/crates.io-index"
90 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
91 |
92 | [[package]]
93 | name = "bytes"
94 | version = "1.10.1"
95 | source = "registry+https://github.com/rust-lang/crates.io-index"
96 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
97 |
98 | [[package]]
99 | name = "cc"
100 | version = "1.2.16"
101 | source = "registry+https://github.com/rust-lang/crates.io-index"
102 | checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
103 | dependencies = [
104 | "shlex",
105 | ]
106 |
107 | [[package]]
108 | name = "cfg-if"
109 | version = "1.0.0"
110 | source = "registry+https://github.com/rust-lang/crates.io-index"
111 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
112 |
113 | [[package]]
114 | name = "core-foundation"
115 | version = "0.9.4"
116 | source = "registry+https://github.com/rust-lang/crates.io-index"
117 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
118 | dependencies = [
119 | "core-foundation-sys",
120 | "libc",
121 | ]
122 |
123 | [[package]]
124 | name = "core-foundation-sys"
125 | version = "0.8.7"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
128 |
129 | [[package]]
130 | name = "crc32fast"
131 | version = "1.4.2"
132 | source = "registry+https://github.com/rust-lang/crates.io-index"
133 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
134 | dependencies = [
135 | "cfg-if",
136 | ]
137 |
138 | [[package]]
139 | name = "dashmap"
140 | version = "5.5.3"
141 | source = "registry+https://github.com/rust-lang/crates.io-index"
142 | checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
143 | dependencies = [
144 | "cfg-if",
145 | "hashbrown 0.14.5",
146 | "lock_api",
147 | "once_cell",
148 | "parking_lot_core",
149 | ]
150 |
151 | [[package]]
152 | name = "displaydoc"
153 | version = "0.2.5"
154 | source = "registry+https://github.com/rust-lang/crates.io-index"
155 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
156 | dependencies = [
157 | "proc-macro2",
158 | "quote",
159 | "syn",
160 | ]
161 |
162 | [[package]]
163 | name = "either"
164 | version = "1.15.0"
165 | source = "registry+https://github.com/rust-lang/crates.io-index"
166 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
167 |
168 | [[package]]
169 | name = "encoding_rs"
170 | version = "0.8.35"
171 | source = "registry+https://github.com/rust-lang/crates.io-index"
172 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
173 | dependencies = [
174 | "cfg-if",
175 | ]
176 |
177 | [[package]]
178 | name = "env_logger"
179 | version = "0.10.2"
180 | source = "registry+https://github.com/rust-lang/crates.io-index"
181 | checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
182 | dependencies = [
183 | "humantime",
184 | "is-terminal",
185 | "log",
186 | "regex",
187 | "termcolor",
188 | ]
189 |
190 | [[package]]
191 | name = "equivalent"
192 | version = "1.0.2"
193 | source = "registry+https://github.com/rust-lang/crates.io-index"
194 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
195 |
196 | [[package]]
197 | name = "errno"
198 | version = "0.3.10"
199 | source = "registry+https://github.com/rust-lang/crates.io-index"
200 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
201 | dependencies = [
202 | "libc",
203 | "windows-sys 0.59.0",
204 | ]
205 |
206 | [[package]]
207 | name = "fastrand"
208 | version = "2.3.0"
209 | source = "registry+https://github.com/rust-lang/crates.io-index"
210 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
211 |
212 | [[package]]
213 | name = "fnv"
214 | version = "1.0.7"
215 | source = "registry+https://github.com/rust-lang/crates.io-index"
216 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
217 |
218 | [[package]]
219 | name = "foreign-types"
220 | version = "0.3.2"
221 | source = "registry+https://github.com/rust-lang/crates.io-index"
222 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
223 | dependencies = [
224 | "foreign-types-shared",
225 | ]
226 |
227 | [[package]]
228 | name = "foreign-types-shared"
229 | version = "0.1.1"
230 | source = "registry+https://github.com/rust-lang/crates.io-index"
231 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
232 |
233 | [[package]]
234 | name = "form_urlencoded"
235 | version = "1.2.1"
236 | source = "registry+https://github.com/rust-lang/crates.io-index"
237 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
238 | dependencies = [
239 | "percent-encoding",
240 | ]
241 |
242 | [[package]]
243 | name = "futures"
244 | version = "0.3.31"
245 | source = "registry+https://github.com/rust-lang/crates.io-index"
246 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
247 | dependencies = [
248 | "futures-channel",
249 | "futures-core",
250 | "futures-executor",
251 | "futures-io",
252 | "futures-sink",
253 | "futures-task",
254 | "futures-util",
255 | ]
256 |
257 | [[package]]
258 | name = "futures-channel"
259 | version = "0.3.31"
260 | source = "registry+https://github.com/rust-lang/crates.io-index"
261 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
262 | dependencies = [
263 | "futures-core",
264 | "futures-sink",
265 | ]
266 |
267 | [[package]]
268 | name = "futures-core"
269 | version = "0.3.31"
270 | source = "registry+https://github.com/rust-lang/crates.io-index"
271 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
272 |
273 | [[package]]
274 | name = "futures-executor"
275 | version = "0.3.31"
276 | source = "registry+https://github.com/rust-lang/crates.io-index"
277 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
278 | dependencies = [
279 | "futures-core",
280 | "futures-task",
281 | "futures-util",
282 | ]
283 |
284 | [[package]]
285 | name = "futures-io"
286 | version = "0.3.31"
287 | source = "registry+https://github.com/rust-lang/crates.io-index"
288 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
289 |
290 | [[package]]
291 | name = "futures-macro"
292 | version = "0.3.31"
293 | source = "registry+https://github.com/rust-lang/crates.io-index"
294 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
295 | dependencies = [
296 | "proc-macro2",
297 | "quote",
298 | "syn",
299 | ]
300 |
301 | [[package]]
302 | name = "futures-sink"
303 | version = "0.3.31"
304 | source = "registry+https://github.com/rust-lang/crates.io-index"
305 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
306 |
307 | [[package]]
308 | name = "futures-task"
309 | version = "0.3.31"
310 | source = "registry+https://github.com/rust-lang/crates.io-index"
311 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
312 |
313 | [[package]]
314 | name = "futures-util"
315 | version = "0.3.31"
316 | source = "registry+https://github.com/rust-lang/crates.io-index"
317 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
318 | dependencies = [
319 | "futures-channel",
320 | "futures-core",
321 | "futures-io",
322 | "futures-macro",
323 | "futures-sink",
324 | "futures-task",
325 | "memchr",
326 | "pin-project-lite",
327 | "pin-utils",
328 | "slab",
329 | ]
330 |
331 | [[package]]
332 | name = "getrandom"
333 | version = "0.2.15"
334 | source = "registry+https://github.com/rust-lang/crates.io-index"
335 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
336 | dependencies = [
337 | "cfg-if",
338 | "libc",
339 | "wasi 0.11.0+wasi-snapshot-preview1",
340 | ]
341 |
342 | [[package]]
343 | name = "getrandom"
344 | version = "0.3.1"
345 | source = "registry+https://github.com/rust-lang/crates.io-index"
346 | checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
347 | dependencies = [
348 | "cfg-if",
349 | "libc",
350 | "wasi 0.13.3+wasi-0.2.2",
351 | "windows-targets 0.52.6",
352 | ]
353 |
354 | [[package]]
355 | name = "gimli"
356 | version = "0.31.1"
357 | source = "registry+https://github.com/rust-lang/crates.io-index"
358 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
359 |
360 | [[package]]
361 | name = "h2"
362 | version = "0.3.26"
363 | source = "registry+https://github.com/rust-lang/crates.io-index"
364 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
365 | dependencies = [
366 | "bytes",
367 | "fnv",
368 | "futures-core",
369 | "futures-sink",
370 | "futures-util",
371 | "http",
372 | "indexmap",
373 | "slab",
374 | "tokio",
375 | "tokio-util",
376 | "tracing",
377 | ]
378 |
379 | [[package]]
380 | name = "hashbrown"
381 | version = "0.14.5"
382 | source = "registry+https://github.com/rust-lang/crates.io-index"
383 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
384 |
385 | [[package]]
386 | name = "hashbrown"
387 | version = "0.15.2"
388 | source = "registry+https://github.com/rust-lang/crates.io-index"
389 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
390 |
391 | [[package]]
392 | name = "hermit-abi"
393 | version = "0.5.0"
394 | source = "registry+https://github.com/rust-lang/crates.io-index"
395 | checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e"
396 |
397 | [[package]]
398 | name = "http"
399 | version = "0.2.12"
400 | source = "registry+https://github.com/rust-lang/crates.io-index"
401 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
402 | dependencies = [
403 | "bytes",
404 | "fnv",
405 | "itoa",
406 | ]
407 |
408 | [[package]]
409 | name = "http-body"
410 | version = "0.4.6"
411 | source = "registry+https://github.com/rust-lang/crates.io-index"
412 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
413 | dependencies = [
414 | "bytes",
415 | "http",
416 | "pin-project-lite",
417 | ]
418 |
419 | [[package]]
420 | name = "httparse"
421 | version = "1.10.1"
422 | source = "registry+https://github.com/rust-lang/crates.io-index"
423 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
424 |
425 | [[package]]
426 | name = "httpdate"
427 | version = "1.0.3"
428 | source = "registry+https://github.com/rust-lang/crates.io-index"
429 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
430 |
431 | [[package]]
432 | name = "humantime"
433 | version = "2.1.0"
434 | source = "registry+https://github.com/rust-lang/crates.io-index"
435 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
436 |
437 | [[package]]
438 | name = "hyper"
439 | version = "0.14.32"
440 | source = "registry+https://github.com/rust-lang/crates.io-index"
441 | checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
442 | dependencies = [
443 | "bytes",
444 | "futures-channel",
445 | "futures-core",
446 | "futures-util",
447 | "h2",
448 | "http",
449 | "http-body",
450 | "httparse",
451 | "httpdate",
452 | "itoa",
453 | "pin-project-lite",
454 | "socket2",
455 | "tokio",
456 | "tower-service",
457 | "tracing",
458 | "want",
459 | ]
460 |
461 | [[package]]
462 | name = "hyper-tls"
463 | version = "0.5.0"
464 | source = "registry+https://github.com/rust-lang/crates.io-index"
465 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
466 | dependencies = [
467 | "bytes",
468 | "hyper",
469 | "native-tls",
470 | "tokio",
471 | "tokio-native-tls",
472 | ]
473 |
474 | [[package]]
475 | name = "icu_collections"
476 | version = "1.5.0"
477 | source = "registry+https://github.com/rust-lang/crates.io-index"
478 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
479 | dependencies = [
480 | "displaydoc",
481 | "yoke",
482 | "zerofrom",
483 | "zerovec",
484 | ]
485 |
486 | [[package]]
487 | name = "icu_locid"
488 | version = "1.5.0"
489 | source = "registry+https://github.com/rust-lang/crates.io-index"
490 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
491 | dependencies = [
492 | "displaydoc",
493 | "litemap",
494 | "tinystr",
495 | "writeable",
496 | "zerovec",
497 | ]
498 |
499 | [[package]]
500 | name = "icu_locid_transform"
501 | version = "1.5.0"
502 | source = "registry+https://github.com/rust-lang/crates.io-index"
503 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
504 | dependencies = [
505 | "displaydoc",
506 | "icu_locid",
507 | "icu_locid_transform_data",
508 | "icu_provider",
509 | "tinystr",
510 | "zerovec",
511 | ]
512 |
513 | [[package]]
514 | name = "icu_locid_transform_data"
515 | version = "1.5.0"
516 | source = "registry+https://github.com/rust-lang/crates.io-index"
517 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
518 |
519 | [[package]]
520 | name = "icu_normalizer"
521 | version = "1.5.0"
522 | source = "registry+https://github.com/rust-lang/crates.io-index"
523 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
524 | dependencies = [
525 | "displaydoc",
526 | "icu_collections",
527 | "icu_normalizer_data",
528 | "icu_properties",
529 | "icu_provider",
530 | "smallvec",
531 | "utf16_iter",
532 | "utf8_iter",
533 | "write16",
534 | "zerovec",
535 | ]
536 |
537 | [[package]]
538 | name = "icu_normalizer_data"
539 | version = "1.5.0"
540 | source = "registry+https://github.com/rust-lang/crates.io-index"
541 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
542 |
543 | [[package]]
544 | name = "icu_properties"
545 | version = "1.5.1"
546 | source = "registry+https://github.com/rust-lang/crates.io-index"
547 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
548 | dependencies = [
549 | "displaydoc",
550 | "icu_collections",
551 | "icu_locid_transform",
552 | "icu_properties_data",
553 | "icu_provider",
554 | "tinystr",
555 | "zerovec",
556 | ]
557 |
558 | [[package]]
559 | name = "icu_properties_data"
560 | version = "1.5.0"
561 | source = "registry+https://github.com/rust-lang/crates.io-index"
562 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
563 |
564 | [[package]]
565 | name = "icu_provider"
566 | version = "1.5.0"
567 | source = "registry+https://github.com/rust-lang/crates.io-index"
568 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
569 | dependencies = [
570 | "displaydoc",
571 | "icu_locid",
572 | "icu_provider_macros",
573 | "stable_deref_trait",
574 | "tinystr",
575 | "writeable",
576 | "yoke",
577 | "zerofrom",
578 | "zerovec",
579 | ]
580 |
581 | [[package]]
582 | name = "icu_provider_macros"
583 | version = "1.5.0"
584 | source = "registry+https://github.com/rust-lang/crates.io-index"
585 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
586 | dependencies = [
587 | "proc-macro2",
588 | "quote",
589 | "syn",
590 | ]
591 |
592 | [[package]]
593 | name = "idna"
594 | version = "1.0.3"
595 | source = "registry+https://github.com/rust-lang/crates.io-index"
596 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
597 | dependencies = [
598 | "idna_adapter",
599 | "smallvec",
600 | "utf8_iter",
601 | ]
602 |
603 | [[package]]
604 | name = "idna_adapter"
605 | version = "1.2.0"
606 | source = "registry+https://github.com/rust-lang/crates.io-index"
607 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
608 | dependencies = [
609 | "icu_normalizer",
610 | "icu_properties",
611 | ]
612 |
613 | [[package]]
614 | name = "indexmap"
615 | version = "2.8.0"
616 | source = "registry+https://github.com/rust-lang/crates.io-index"
617 | checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
618 | dependencies = [
619 | "equivalent",
620 | "hashbrown 0.15.2",
621 | ]
622 |
623 | [[package]]
624 | name = "ipnet"
625 | version = "2.11.0"
626 | source = "registry+https://github.com/rust-lang/crates.io-index"
627 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
628 |
629 | [[package]]
630 | name = "is-terminal"
631 | version = "0.4.16"
632 | source = "registry+https://github.com/rust-lang/crates.io-index"
633 | checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
634 | dependencies = [
635 | "hermit-abi",
636 | "libc",
637 | "windows-sys 0.59.0",
638 | ]
639 |
640 | [[package]]
641 | name = "itoa"
642 | version = "1.0.15"
643 | source = "registry+https://github.com/rust-lang/crates.io-index"
644 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
645 |
646 | [[package]]
647 | name = "js-sys"
648 | version = "0.3.77"
649 | source = "registry+https://github.com/rust-lang/crates.io-index"
650 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
651 | dependencies = [
652 | "once_cell",
653 | "wasm-bindgen",
654 | ]
655 |
656 | [[package]]
657 | name = "kcp"
658 | version = "0.5.3"
659 | source = "registry+https://github.com/rust-lang/crates.io-index"
660 | checksum = "0e387a924f42063d380be14857714a2f0c177e44dbeab8895244e5370d8a8e68"
661 | dependencies = [
662 | "bytes",
663 | "log",
664 | "thiserror",
665 | ]
666 |
667 | [[package]]
668 | name = "kcptun-sip003-rust"
669 | version = "0.1.0"
670 | dependencies = [
671 | "anyhow",
672 | "env_logger",
673 | "log",
674 | "reqwest",
675 | "tokio",
676 | "tokio-io-timeout",
677 | "tokio-socks",
678 | "tokio_kcp",
679 | "tokio_smux",
680 | ]
681 |
682 | [[package]]
683 | name = "libc"
684 | version = "0.2.170"
685 | source = "registry+https://github.com/rust-lang/crates.io-index"
686 | checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
687 |
688 | [[package]]
689 | name = "linux-raw-sys"
690 | version = "0.9.2"
691 | source = "registry+https://github.com/rust-lang/crates.io-index"
692 | checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9"
693 |
694 | [[package]]
695 | name = "litemap"
696 | version = "0.7.5"
697 | source = "registry+https://github.com/rust-lang/crates.io-index"
698 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
699 |
700 | [[package]]
701 | name = "lock_api"
702 | version = "0.4.12"
703 | source = "registry+https://github.com/rust-lang/crates.io-index"
704 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
705 | dependencies = [
706 | "autocfg",
707 | "scopeguard",
708 | ]
709 |
710 | [[package]]
711 | name = "log"
712 | version = "0.4.26"
713 | source = "registry+https://github.com/rust-lang/crates.io-index"
714 | checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
715 |
716 | [[package]]
717 | name = "memchr"
718 | version = "2.7.4"
719 | source = "registry+https://github.com/rust-lang/crates.io-index"
720 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
721 |
722 | [[package]]
723 | name = "mime"
724 | version = "0.3.17"
725 | source = "registry+https://github.com/rust-lang/crates.io-index"
726 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
727 |
728 | [[package]]
729 | name = "miniz_oxide"
730 | version = "0.8.5"
731 | source = "registry+https://github.com/rust-lang/crates.io-index"
732 | checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
733 | dependencies = [
734 | "adler2",
735 | ]
736 |
737 | [[package]]
738 | name = "mio"
739 | version = "1.0.3"
740 | source = "registry+https://github.com/rust-lang/crates.io-index"
741 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
742 | dependencies = [
743 | "libc",
744 | "wasi 0.11.0+wasi-snapshot-preview1",
745 | "windows-sys 0.52.0",
746 | ]
747 |
748 | [[package]]
749 | name = "native-tls"
750 | version = "0.2.14"
751 | source = "registry+https://github.com/rust-lang/crates.io-index"
752 | checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
753 | dependencies = [
754 | "libc",
755 | "log",
756 | "openssl",
757 | "openssl-probe",
758 | "openssl-sys",
759 | "schannel",
760 | "security-framework",
761 | "security-framework-sys",
762 | "tempfile",
763 | ]
764 |
765 | [[package]]
766 | name = "object"
767 | version = "0.36.7"
768 | source = "registry+https://github.com/rust-lang/crates.io-index"
769 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
770 | dependencies = [
771 | "memchr",
772 | ]
773 |
774 | [[package]]
775 | name = "once_cell"
776 | version = "1.21.0"
777 | source = "registry+https://github.com/rust-lang/crates.io-index"
778 | checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad"
779 |
780 | [[package]]
781 | name = "openssl"
782 | version = "0.10.71"
783 | source = "registry+https://github.com/rust-lang/crates.io-index"
784 | checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd"
785 | dependencies = [
786 | "bitflags 2.9.0",
787 | "cfg-if",
788 | "foreign-types",
789 | "libc",
790 | "once_cell",
791 | "openssl-macros",
792 | "openssl-sys",
793 | ]
794 |
795 | [[package]]
796 | name = "openssl-macros"
797 | version = "0.1.1"
798 | source = "registry+https://github.com/rust-lang/crates.io-index"
799 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
800 | dependencies = [
801 | "proc-macro2",
802 | "quote",
803 | "syn",
804 | ]
805 |
806 | [[package]]
807 | name = "openssl-probe"
808 | version = "0.1.6"
809 | source = "registry+https://github.com/rust-lang/crates.io-index"
810 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
811 |
812 | [[package]]
813 | name = "openssl-sys"
814 | version = "0.9.106"
815 | source = "registry+https://github.com/rust-lang/crates.io-index"
816 | checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd"
817 | dependencies = [
818 | "cc",
819 | "libc",
820 | "pkg-config",
821 | "vcpkg",
822 | ]
823 |
824 | [[package]]
825 | name = "parking_lot_core"
826 | version = "0.9.10"
827 | source = "registry+https://github.com/rust-lang/crates.io-index"
828 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
829 | dependencies = [
830 | "cfg-if",
831 | "libc",
832 | "redox_syscall",
833 | "smallvec",
834 | "windows-targets 0.52.6",
835 | ]
836 |
837 | [[package]]
838 | name = "percent-encoding"
839 | version = "2.3.1"
840 | source = "registry+https://github.com/rust-lang/crates.io-index"
841 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
842 |
843 | [[package]]
844 | name = "pin-project-lite"
845 | version = "0.2.16"
846 | source = "registry+https://github.com/rust-lang/crates.io-index"
847 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
848 |
849 | [[package]]
850 | name = "pin-utils"
851 | version = "0.1.0"
852 | source = "registry+https://github.com/rust-lang/crates.io-index"
853 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
854 |
855 | [[package]]
856 | name = "pkg-config"
857 | version = "0.3.32"
858 | source = "registry+https://github.com/rust-lang/crates.io-index"
859 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
860 |
861 | [[package]]
862 | name = "ppv-lite86"
863 | version = "0.2.21"
864 | source = "registry+https://github.com/rust-lang/crates.io-index"
865 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
866 | dependencies = [
867 | "zerocopy",
868 | ]
869 |
870 | [[package]]
871 | name = "proc-macro2"
872 | version = "1.0.94"
873 | source = "registry+https://github.com/rust-lang/crates.io-index"
874 | checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
875 | dependencies = [
876 | "unicode-ident",
877 | ]
878 |
879 | [[package]]
880 | name = "quote"
881 | version = "1.0.39"
882 | source = "registry+https://github.com/rust-lang/crates.io-index"
883 | checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
884 | dependencies = [
885 | "proc-macro2",
886 | ]
887 |
888 | [[package]]
889 | name = "rand"
890 | version = "0.8.5"
891 | source = "registry+https://github.com/rust-lang/crates.io-index"
892 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
893 | dependencies = [
894 | "libc",
895 | "rand_chacha",
896 | "rand_core",
897 | ]
898 |
899 | [[package]]
900 | name = "rand_chacha"
901 | version = "0.3.1"
902 | source = "registry+https://github.com/rust-lang/crates.io-index"
903 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
904 | dependencies = [
905 | "ppv-lite86",
906 | "rand_core",
907 | ]
908 |
909 | [[package]]
910 | name = "rand_core"
911 | version = "0.6.4"
912 | source = "registry+https://github.com/rust-lang/crates.io-index"
913 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
914 | dependencies = [
915 | "getrandom 0.2.15",
916 | ]
917 |
918 | [[package]]
919 | name = "redox_syscall"
920 | version = "0.5.10"
921 | source = "registry+https://github.com/rust-lang/crates.io-index"
922 | checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
923 | dependencies = [
924 | "bitflags 2.9.0",
925 | ]
926 |
927 | [[package]]
928 | name = "regex"
929 | version = "1.11.1"
930 | source = "registry+https://github.com/rust-lang/crates.io-index"
931 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
932 | dependencies = [
933 | "aho-corasick",
934 | "memchr",
935 | "regex-automata",
936 | "regex-syntax",
937 | ]
938 |
939 | [[package]]
940 | name = "regex-automata"
941 | version = "0.4.9"
942 | source = "registry+https://github.com/rust-lang/crates.io-index"
943 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
944 | dependencies = [
945 | "aho-corasick",
946 | "memchr",
947 | "regex-syntax",
948 | ]
949 |
950 | [[package]]
951 | name = "regex-syntax"
952 | version = "0.8.5"
953 | source = "registry+https://github.com/rust-lang/crates.io-index"
954 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
955 |
956 | [[package]]
957 | name = "reqwest"
958 | version = "0.11.27"
959 | source = "registry+https://github.com/rust-lang/crates.io-index"
960 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
961 | dependencies = [
962 | "base64",
963 | "bytes",
964 | "encoding_rs",
965 | "futures-core",
966 | "futures-util",
967 | "h2",
968 | "http",
969 | "http-body",
970 | "hyper",
971 | "hyper-tls",
972 | "ipnet",
973 | "js-sys",
974 | "log",
975 | "mime",
976 | "native-tls",
977 | "once_cell",
978 | "percent-encoding",
979 | "pin-project-lite",
980 | "rustls-pemfile",
981 | "serde",
982 | "serde_json",
983 | "serde_urlencoded",
984 | "sync_wrapper",
985 | "system-configuration",
986 | "tokio",
987 | "tokio-native-tls",
988 | "tokio-socks",
989 | "tower-service",
990 | "url",
991 | "wasm-bindgen",
992 | "wasm-bindgen-futures",
993 | "web-sys",
994 | "winreg",
995 | ]
996 |
997 | [[package]]
998 | name = "rustc-demangle"
999 | version = "0.1.24"
1000 | source = "registry+https://github.com/rust-lang/crates.io-index"
1001 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
1002 |
1003 | [[package]]
1004 | name = "rustix"
1005 | version = "1.0.2"
1006 | source = "registry+https://github.com/rust-lang/crates.io-index"
1007 | checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825"
1008 | dependencies = [
1009 | "bitflags 2.9.0",
1010 | "errno",
1011 | "libc",
1012 | "linux-raw-sys",
1013 | "windows-sys 0.59.0",
1014 | ]
1015 |
1016 | [[package]]
1017 | name = "rustls-pemfile"
1018 | version = "1.0.4"
1019 | source = "registry+https://github.com/rust-lang/crates.io-index"
1020 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
1021 | dependencies = [
1022 | "base64",
1023 | ]
1024 |
1025 | [[package]]
1026 | name = "rustversion"
1027 | version = "1.0.20"
1028 | source = "registry+https://github.com/rust-lang/crates.io-index"
1029 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
1030 |
1031 | [[package]]
1032 | name = "ryu"
1033 | version = "1.0.20"
1034 | source = "registry+https://github.com/rust-lang/crates.io-index"
1035 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
1036 |
1037 | [[package]]
1038 | name = "schannel"
1039 | version = "0.1.27"
1040 | source = "registry+https://github.com/rust-lang/crates.io-index"
1041 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
1042 | dependencies = [
1043 | "windows-sys 0.59.0",
1044 | ]
1045 |
1046 | [[package]]
1047 | name = "scopeguard"
1048 | version = "1.2.0"
1049 | source = "registry+https://github.com/rust-lang/crates.io-index"
1050 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1051 |
1052 | [[package]]
1053 | name = "security-framework"
1054 | version = "2.11.1"
1055 | source = "registry+https://github.com/rust-lang/crates.io-index"
1056 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
1057 | dependencies = [
1058 | "bitflags 2.9.0",
1059 | "core-foundation",
1060 | "core-foundation-sys",
1061 | "libc",
1062 | "security-framework-sys",
1063 | ]
1064 |
1065 | [[package]]
1066 | name = "security-framework-sys"
1067 | version = "2.14.0"
1068 | source = "registry+https://github.com/rust-lang/crates.io-index"
1069 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
1070 | dependencies = [
1071 | "core-foundation-sys",
1072 | "libc",
1073 | ]
1074 |
1075 | [[package]]
1076 | name = "serde"
1077 | version = "1.0.219"
1078 | source = "registry+https://github.com/rust-lang/crates.io-index"
1079 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
1080 | dependencies = [
1081 | "serde_derive",
1082 | ]
1083 |
1084 | [[package]]
1085 | name = "serde_derive"
1086 | version = "1.0.219"
1087 | source = "registry+https://github.com/rust-lang/crates.io-index"
1088 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
1089 | dependencies = [
1090 | "proc-macro2",
1091 | "quote",
1092 | "syn",
1093 | ]
1094 |
1095 | [[package]]
1096 | name = "serde_json"
1097 | version = "1.0.140"
1098 | source = "registry+https://github.com/rust-lang/crates.io-index"
1099 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
1100 | dependencies = [
1101 | "itoa",
1102 | "memchr",
1103 | "ryu",
1104 | "serde",
1105 | ]
1106 |
1107 | [[package]]
1108 | name = "serde_urlencoded"
1109 | version = "0.7.1"
1110 | source = "registry+https://github.com/rust-lang/crates.io-index"
1111 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1112 | dependencies = [
1113 | "form_urlencoded",
1114 | "itoa",
1115 | "ryu",
1116 | "serde",
1117 | ]
1118 |
1119 | [[package]]
1120 | name = "shlex"
1121 | version = "1.3.0"
1122 | source = "registry+https://github.com/rust-lang/crates.io-index"
1123 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1124 |
1125 | [[package]]
1126 | name = "slab"
1127 | version = "0.4.9"
1128 | source = "registry+https://github.com/rust-lang/crates.io-index"
1129 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
1130 | dependencies = [
1131 | "autocfg",
1132 | ]
1133 |
1134 | [[package]]
1135 | name = "smallvec"
1136 | version = "1.14.0"
1137 | source = "registry+https://github.com/rust-lang/crates.io-index"
1138 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
1139 |
1140 | [[package]]
1141 | name = "socket2"
1142 | version = "0.5.8"
1143 | source = "registry+https://github.com/rust-lang/crates.io-index"
1144 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
1145 | dependencies = [
1146 | "libc",
1147 | "windows-sys 0.52.0",
1148 | ]
1149 |
1150 | [[package]]
1151 | name = "spin"
1152 | version = "0.9.8"
1153 | source = "registry+https://github.com/rust-lang/crates.io-index"
1154 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
1155 | dependencies = [
1156 | "lock_api",
1157 | ]
1158 |
1159 | [[package]]
1160 | name = "stable_deref_trait"
1161 | version = "1.2.0"
1162 | source = "registry+https://github.com/rust-lang/crates.io-index"
1163 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1164 |
1165 | [[package]]
1166 | name = "syn"
1167 | version = "2.0.100"
1168 | source = "registry+https://github.com/rust-lang/crates.io-index"
1169 | checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
1170 | dependencies = [
1171 | "proc-macro2",
1172 | "quote",
1173 | "unicode-ident",
1174 | ]
1175 |
1176 | [[package]]
1177 | name = "sync_wrapper"
1178 | version = "0.1.2"
1179 | source = "registry+https://github.com/rust-lang/crates.io-index"
1180 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
1181 |
1182 | [[package]]
1183 | name = "synstructure"
1184 | version = "0.13.1"
1185 | source = "registry+https://github.com/rust-lang/crates.io-index"
1186 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
1187 | dependencies = [
1188 | "proc-macro2",
1189 | "quote",
1190 | "syn",
1191 | ]
1192 |
1193 | [[package]]
1194 | name = "system-configuration"
1195 | version = "0.5.1"
1196 | source = "registry+https://github.com/rust-lang/crates.io-index"
1197 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
1198 | dependencies = [
1199 | "bitflags 1.3.2",
1200 | "core-foundation",
1201 | "system-configuration-sys",
1202 | ]
1203 |
1204 | [[package]]
1205 | name = "system-configuration-sys"
1206 | version = "0.5.0"
1207 | source = "registry+https://github.com/rust-lang/crates.io-index"
1208 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
1209 | dependencies = [
1210 | "core-foundation-sys",
1211 | "libc",
1212 | ]
1213 |
1214 | [[package]]
1215 | name = "tempfile"
1216 | version = "3.18.0"
1217 | source = "registry+https://github.com/rust-lang/crates.io-index"
1218 | checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567"
1219 | dependencies = [
1220 | "cfg-if",
1221 | "fastrand",
1222 | "getrandom 0.3.1",
1223 | "once_cell",
1224 | "rustix",
1225 | "windows-sys 0.59.0",
1226 | ]
1227 |
1228 | [[package]]
1229 | name = "termcolor"
1230 | version = "1.4.1"
1231 | source = "registry+https://github.com/rust-lang/crates.io-index"
1232 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
1233 | dependencies = [
1234 | "winapi-util",
1235 | ]
1236 |
1237 | [[package]]
1238 | name = "thiserror"
1239 | version = "1.0.69"
1240 | source = "registry+https://github.com/rust-lang/crates.io-index"
1241 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
1242 | dependencies = [
1243 | "thiserror-impl",
1244 | ]
1245 |
1246 | [[package]]
1247 | name = "thiserror-impl"
1248 | version = "1.0.69"
1249 | source = "registry+https://github.com/rust-lang/crates.io-index"
1250 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
1251 | dependencies = [
1252 | "proc-macro2",
1253 | "quote",
1254 | "syn",
1255 | ]
1256 |
1257 | [[package]]
1258 | name = "tinystr"
1259 | version = "0.7.6"
1260 | source = "registry+https://github.com/rust-lang/crates.io-index"
1261 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
1262 | dependencies = [
1263 | "displaydoc",
1264 | "zerovec",
1265 | ]
1266 |
1267 | [[package]]
1268 | name = "tokio"
1269 | version = "1.44.0"
1270 | source = "registry+https://github.com/rust-lang/crates.io-index"
1271 | checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a"
1272 | dependencies = [
1273 | "backtrace",
1274 | "bytes",
1275 | "libc",
1276 | "mio",
1277 | "pin-project-lite",
1278 | "socket2",
1279 | "tokio-macros",
1280 | "windows-sys 0.52.0",
1281 | ]
1282 |
1283 | [[package]]
1284 | name = "tokio-io-timeout"
1285 | version = "1.2.0"
1286 | source = "registry+https://github.com/rust-lang/crates.io-index"
1287 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
1288 | dependencies = [
1289 | "pin-project-lite",
1290 | "tokio",
1291 | ]
1292 |
1293 | [[package]]
1294 | name = "tokio-macros"
1295 | version = "2.5.0"
1296 | source = "registry+https://github.com/rust-lang/crates.io-index"
1297 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
1298 | dependencies = [
1299 | "proc-macro2",
1300 | "quote",
1301 | "syn",
1302 | ]
1303 |
1304 | [[package]]
1305 | name = "tokio-native-tls"
1306 | version = "0.3.1"
1307 | source = "registry+https://github.com/rust-lang/crates.io-index"
1308 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
1309 | dependencies = [
1310 | "native-tls",
1311 | "tokio",
1312 | ]
1313 |
1314 | [[package]]
1315 | name = "tokio-socks"
1316 | version = "0.5.2"
1317 | source = "registry+https://github.com/rust-lang/crates.io-index"
1318 | checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f"
1319 | dependencies = [
1320 | "either",
1321 | "futures-util",
1322 | "thiserror",
1323 | "tokio",
1324 | ]
1325 |
1326 | [[package]]
1327 | name = "tokio-util"
1328 | version = "0.7.13"
1329 | source = "registry+https://github.com/rust-lang/crates.io-index"
1330 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078"
1331 | dependencies = [
1332 | "bytes",
1333 | "futures-core",
1334 | "futures-sink",
1335 | "pin-project-lite",
1336 | "tokio",
1337 | ]
1338 |
1339 | [[package]]
1340 | name = "tokio_kcp"
1341 | version = "0.9.6"
1342 | source = "git+https://github.com/oyyd/tokio_kcp.git?branch=hack#de79162ad71371324c03eef6c5e1878d6613774e"
1343 | dependencies = [
1344 | "byte_string",
1345 | "byteorder",
1346 | "bytes",
1347 | "crc32fast",
1348 | "futures",
1349 | "kcp",
1350 | "log",
1351 | "rand",
1352 | "spin",
1353 | "tokio",
1354 | ]
1355 |
1356 | [[package]]
1357 | name = "tokio_smux"
1358 | version = "0.2.0"
1359 | source = "registry+https://github.com/rust-lang/crates.io-index"
1360 | checksum = "0a5826746b94900340cfda9e18a29a75986992df653d5941b5e359ca3b667117"
1361 | dependencies = [
1362 | "byteorder",
1363 | "dashmap",
1364 | "log",
1365 | "thiserror",
1366 | "tokio",
1367 | ]
1368 |
1369 | [[package]]
1370 | name = "tower-service"
1371 | version = "0.3.3"
1372 | source = "registry+https://github.com/rust-lang/crates.io-index"
1373 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
1374 |
1375 | [[package]]
1376 | name = "tracing"
1377 | version = "0.1.41"
1378 | source = "registry+https://github.com/rust-lang/crates.io-index"
1379 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
1380 | dependencies = [
1381 | "pin-project-lite",
1382 | "tracing-core",
1383 | ]
1384 |
1385 | [[package]]
1386 | name = "tracing-core"
1387 | version = "0.1.33"
1388 | source = "registry+https://github.com/rust-lang/crates.io-index"
1389 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
1390 | dependencies = [
1391 | "once_cell",
1392 | ]
1393 |
1394 | [[package]]
1395 | name = "try-lock"
1396 | version = "0.2.5"
1397 | source = "registry+https://github.com/rust-lang/crates.io-index"
1398 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1399 |
1400 | [[package]]
1401 | name = "unicode-ident"
1402 | version = "1.0.18"
1403 | source = "registry+https://github.com/rust-lang/crates.io-index"
1404 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
1405 |
1406 | [[package]]
1407 | name = "url"
1408 | version = "2.5.4"
1409 | source = "registry+https://github.com/rust-lang/crates.io-index"
1410 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
1411 | dependencies = [
1412 | "form_urlencoded",
1413 | "idna",
1414 | "percent-encoding",
1415 | ]
1416 |
1417 | [[package]]
1418 | name = "utf16_iter"
1419 | version = "1.0.5"
1420 | source = "registry+https://github.com/rust-lang/crates.io-index"
1421 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
1422 |
1423 | [[package]]
1424 | name = "utf8_iter"
1425 | version = "1.0.4"
1426 | source = "registry+https://github.com/rust-lang/crates.io-index"
1427 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
1428 |
1429 | [[package]]
1430 | name = "vcpkg"
1431 | version = "0.2.15"
1432 | source = "registry+https://github.com/rust-lang/crates.io-index"
1433 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1434 |
1435 | [[package]]
1436 | name = "want"
1437 | version = "0.3.1"
1438 | source = "registry+https://github.com/rust-lang/crates.io-index"
1439 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
1440 | dependencies = [
1441 | "try-lock",
1442 | ]
1443 |
1444 | [[package]]
1445 | name = "wasi"
1446 | version = "0.11.0+wasi-snapshot-preview1"
1447 | source = "registry+https://github.com/rust-lang/crates.io-index"
1448 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1449 |
1450 | [[package]]
1451 | name = "wasi"
1452 | version = "0.13.3+wasi-0.2.2"
1453 | source = "registry+https://github.com/rust-lang/crates.io-index"
1454 | checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
1455 | dependencies = [
1456 | "wit-bindgen-rt",
1457 | ]
1458 |
1459 | [[package]]
1460 | name = "wasm-bindgen"
1461 | version = "0.2.100"
1462 | source = "registry+https://github.com/rust-lang/crates.io-index"
1463 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
1464 | dependencies = [
1465 | "cfg-if",
1466 | "once_cell",
1467 | "rustversion",
1468 | "wasm-bindgen-macro",
1469 | ]
1470 |
1471 | [[package]]
1472 | name = "wasm-bindgen-backend"
1473 | version = "0.2.100"
1474 | source = "registry+https://github.com/rust-lang/crates.io-index"
1475 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
1476 | dependencies = [
1477 | "bumpalo",
1478 | "log",
1479 | "proc-macro2",
1480 | "quote",
1481 | "syn",
1482 | "wasm-bindgen-shared",
1483 | ]
1484 |
1485 | [[package]]
1486 | name = "wasm-bindgen-futures"
1487 | version = "0.4.50"
1488 | source = "registry+https://github.com/rust-lang/crates.io-index"
1489 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
1490 | dependencies = [
1491 | "cfg-if",
1492 | "js-sys",
1493 | "once_cell",
1494 | "wasm-bindgen",
1495 | "web-sys",
1496 | ]
1497 |
1498 | [[package]]
1499 | name = "wasm-bindgen-macro"
1500 | version = "0.2.100"
1501 | source = "registry+https://github.com/rust-lang/crates.io-index"
1502 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
1503 | dependencies = [
1504 | "quote",
1505 | "wasm-bindgen-macro-support",
1506 | ]
1507 |
1508 | [[package]]
1509 | name = "wasm-bindgen-macro-support"
1510 | version = "0.2.100"
1511 | source = "registry+https://github.com/rust-lang/crates.io-index"
1512 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
1513 | dependencies = [
1514 | "proc-macro2",
1515 | "quote",
1516 | "syn",
1517 | "wasm-bindgen-backend",
1518 | "wasm-bindgen-shared",
1519 | ]
1520 |
1521 | [[package]]
1522 | name = "wasm-bindgen-shared"
1523 | version = "0.2.100"
1524 | source = "registry+https://github.com/rust-lang/crates.io-index"
1525 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
1526 | dependencies = [
1527 | "unicode-ident",
1528 | ]
1529 |
1530 | [[package]]
1531 | name = "web-sys"
1532 | version = "0.3.77"
1533 | source = "registry+https://github.com/rust-lang/crates.io-index"
1534 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
1535 | dependencies = [
1536 | "js-sys",
1537 | "wasm-bindgen",
1538 | ]
1539 |
1540 | [[package]]
1541 | name = "winapi-util"
1542 | version = "0.1.9"
1543 | source = "registry+https://github.com/rust-lang/crates.io-index"
1544 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
1545 | dependencies = [
1546 | "windows-sys 0.59.0",
1547 | ]
1548 |
1549 | [[package]]
1550 | name = "windows-sys"
1551 | version = "0.48.0"
1552 | source = "registry+https://github.com/rust-lang/crates.io-index"
1553 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
1554 | dependencies = [
1555 | "windows-targets 0.48.5",
1556 | ]
1557 |
1558 | [[package]]
1559 | name = "windows-sys"
1560 | version = "0.52.0"
1561 | source = "registry+https://github.com/rust-lang/crates.io-index"
1562 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1563 | dependencies = [
1564 | "windows-targets 0.52.6",
1565 | ]
1566 |
1567 | [[package]]
1568 | name = "windows-sys"
1569 | version = "0.59.0"
1570 | source = "registry+https://github.com/rust-lang/crates.io-index"
1571 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
1572 | dependencies = [
1573 | "windows-targets 0.52.6",
1574 | ]
1575 |
1576 | [[package]]
1577 | name = "windows-targets"
1578 | version = "0.48.5"
1579 | source = "registry+https://github.com/rust-lang/crates.io-index"
1580 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
1581 | dependencies = [
1582 | "windows_aarch64_gnullvm 0.48.5",
1583 | "windows_aarch64_msvc 0.48.5",
1584 | "windows_i686_gnu 0.48.5",
1585 | "windows_i686_msvc 0.48.5",
1586 | "windows_x86_64_gnu 0.48.5",
1587 | "windows_x86_64_gnullvm 0.48.5",
1588 | "windows_x86_64_msvc 0.48.5",
1589 | ]
1590 |
1591 | [[package]]
1592 | name = "windows-targets"
1593 | version = "0.52.6"
1594 | source = "registry+https://github.com/rust-lang/crates.io-index"
1595 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1596 | dependencies = [
1597 | "windows_aarch64_gnullvm 0.52.6",
1598 | "windows_aarch64_msvc 0.52.6",
1599 | "windows_i686_gnu 0.52.6",
1600 | "windows_i686_gnullvm",
1601 | "windows_i686_msvc 0.52.6",
1602 | "windows_x86_64_gnu 0.52.6",
1603 | "windows_x86_64_gnullvm 0.52.6",
1604 | "windows_x86_64_msvc 0.52.6",
1605 | ]
1606 |
1607 | [[package]]
1608 | name = "windows_aarch64_gnullvm"
1609 | version = "0.48.5"
1610 | source = "registry+https://github.com/rust-lang/crates.io-index"
1611 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
1612 |
1613 | [[package]]
1614 | name = "windows_aarch64_gnullvm"
1615 | version = "0.52.6"
1616 | source = "registry+https://github.com/rust-lang/crates.io-index"
1617 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
1618 |
1619 | [[package]]
1620 | name = "windows_aarch64_msvc"
1621 | version = "0.48.5"
1622 | source = "registry+https://github.com/rust-lang/crates.io-index"
1623 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
1624 |
1625 | [[package]]
1626 | name = "windows_aarch64_msvc"
1627 | version = "0.52.6"
1628 | source = "registry+https://github.com/rust-lang/crates.io-index"
1629 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
1630 |
1631 | [[package]]
1632 | name = "windows_i686_gnu"
1633 | version = "0.48.5"
1634 | source = "registry+https://github.com/rust-lang/crates.io-index"
1635 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
1636 |
1637 | [[package]]
1638 | name = "windows_i686_gnu"
1639 | version = "0.52.6"
1640 | source = "registry+https://github.com/rust-lang/crates.io-index"
1641 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
1642 |
1643 | [[package]]
1644 | name = "windows_i686_gnullvm"
1645 | version = "0.52.6"
1646 | source = "registry+https://github.com/rust-lang/crates.io-index"
1647 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
1648 |
1649 | [[package]]
1650 | name = "windows_i686_msvc"
1651 | version = "0.48.5"
1652 | source = "registry+https://github.com/rust-lang/crates.io-index"
1653 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
1654 |
1655 | [[package]]
1656 | name = "windows_i686_msvc"
1657 | version = "0.52.6"
1658 | source = "registry+https://github.com/rust-lang/crates.io-index"
1659 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
1660 |
1661 | [[package]]
1662 | name = "windows_x86_64_gnu"
1663 | version = "0.48.5"
1664 | source = "registry+https://github.com/rust-lang/crates.io-index"
1665 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
1666 |
1667 | [[package]]
1668 | name = "windows_x86_64_gnu"
1669 | version = "0.52.6"
1670 | source = "registry+https://github.com/rust-lang/crates.io-index"
1671 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
1672 |
1673 | [[package]]
1674 | name = "windows_x86_64_gnullvm"
1675 | version = "0.48.5"
1676 | source = "registry+https://github.com/rust-lang/crates.io-index"
1677 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
1678 |
1679 | [[package]]
1680 | name = "windows_x86_64_gnullvm"
1681 | version = "0.52.6"
1682 | source = "registry+https://github.com/rust-lang/crates.io-index"
1683 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
1684 |
1685 | [[package]]
1686 | name = "windows_x86_64_msvc"
1687 | version = "0.48.5"
1688 | source = "registry+https://github.com/rust-lang/crates.io-index"
1689 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
1690 |
1691 | [[package]]
1692 | name = "windows_x86_64_msvc"
1693 | version = "0.52.6"
1694 | source = "registry+https://github.com/rust-lang/crates.io-index"
1695 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
1696 |
1697 | [[package]]
1698 | name = "winreg"
1699 | version = "0.50.0"
1700 | source = "registry+https://github.com/rust-lang/crates.io-index"
1701 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
1702 | dependencies = [
1703 | "cfg-if",
1704 | "windows-sys 0.48.0",
1705 | ]
1706 |
1707 | [[package]]
1708 | name = "wit-bindgen-rt"
1709 | version = "0.33.0"
1710 | source = "registry+https://github.com/rust-lang/crates.io-index"
1711 | checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
1712 | dependencies = [
1713 | "bitflags 2.9.0",
1714 | ]
1715 |
1716 | [[package]]
1717 | name = "write16"
1718 | version = "1.0.0"
1719 | source = "registry+https://github.com/rust-lang/crates.io-index"
1720 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
1721 |
1722 | [[package]]
1723 | name = "writeable"
1724 | version = "0.5.5"
1725 | source = "registry+https://github.com/rust-lang/crates.io-index"
1726 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
1727 |
1728 | [[package]]
1729 | name = "yoke"
1730 | version = "0.7.5"
1731 | source = "registry+https://github.com/rust-lang/crates.io-index"
1732 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
1733 | dependencies = [
1734 | "serde",
1735 | "stable_deref_trait",
1736 | "yoke-derive",
1737 | "zerofrom",
1738 | ]
1739 |
1740 | [[package]]
1741 | name = "yoke-derive"
1742 | version = "0.7.5"
1743 | source = "registry+https://github.com/rust-lang/crates.io-index"
1744 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
1745 | dependencies = [
1746 | "proc-macro2",
1747 | "quote",
1748 | "syn",
1749 | "synstructure",
1750 | ]
1751 |
1752 | [[package]]
1753 | name = "zerocopy"
1754 | version = "0.8.23"
1755 | source = "registry+https://github.com/rust-lang/crates.io-index"
1756 | checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6"
1757 | dependencies = [
1758 | "zerocopy-derive",
1759 | ]
1760 |
1761 | [[package]]
1762 | name = "zerocopy-derive"
1763 | version = "0.8.23"
1764 | source = "registry+https://github.com/rust-lang/crates.io-index"
1765 | checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154"
1766 | dependencies = [
1767 | "proc-macro2",
1768 | "quote",
1769 | "syn",
1770 | ]
1771 |
1772 | [[package]]
1773 | name = "zerofrom"
1774 | version = "0.1.6"
1775 | source = "registry+https://github.com/rust-lang/crates.io-index"
1776 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
1777 | dependencies = [
1778 | "zerofrom-derive",
1779 | ]
1780 |
1781 | [[package]]
1782 | name = "zerofrom-derive"
1783 | version = "0.1.6"
1784 | source = "registry+https://github.com/rust-lang/crates.io-index"
1785 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
1786 | dependencies = [
1787 | "proc-macro2",
1788 | "quote",
1789 | "syn",
1790 | "synstructure",
1791 | ]
1792 |
1793 | [[package]]
1794 | name = "zerovec"
1795 | version = "0.10.4"
1796 | source = "registry+https://github.com/rust-lang/crates.io-index"
1797 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
1798 | dependencies = [
1799 | "yoke",
1800 | "zerofrom",
1801 | "zerovec-derive",
1802 | ]
1803 |
1804 | [[package]]
1805 | name = "zerovec-derive"
1806 | version = "0.10.3"
1807 | source = "registry+https://github.com/rust-lang/crates.io-index"
1808 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
1809 | dependencies = [
1810 | "proc-macro2",
1811 | "quote",
1812 | "syn",
1813 | ]
1814 |
--------------------------------------------------------------------------------