[INFO] cloning repository https://github.com/SnowCheetos/GServerManager [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/SnowCheetos/GServerManager" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSnowCheetos%2FGServerManager", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSnowCheetos%2FGServerManager'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 51dc4ac893c12fe2dc65ef4545d1f12103e6d80f [INFO] checking SnowCheetos/GServerManager against a5689b034ad287112f709693384a37f1377eb9cc for pr-129249-3 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSnowCheetos%2FGServerManager" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/SnowCheetos/GServerManager [INFO] finished tweaking git repo https://github.com/SnowCheetos/GServerManager [INFO] tweaked toml for git repo https://github.com/SnowCheetos/GServerManager written to /workspace/builds/worker-2-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/SnowCheetos/GServerManager on toolchain a5689b034ad287112f709693384a37f1377eb9cc [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/SnowCheetos/GServerManager already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] 27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d [INFO] running `Command { std: "docker" "start" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.146 [INFO] [stderr] Compiling proc-macro2 v1.0.60 [INFO] [stderr] Compiling unicode-ident v1.0.9 [INFO] [stderr] Compiling quote v1.0.28 [INFO] [stderr] Compiling crossbeam-utils v0.8.16 [INFO] [stderr] Compiling memoffset v0.9.0 [INFO] [stderr] Compiling crossbeam-epoch v0.9.15 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Checking scopeguard v1.1.0 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling memoffset v0.6.5 [INFO] [stderr] Compiling rayon-core v1.11.0 [INFO] [stderr] Checking unicode-width v0.1.10 [INFO] [stderr] Checking smallvec v1.10.0 [INFO] [stderr] Compiling serde v1.0.164 [INFO] [stderr] Compiling memchr v2.5.0 [INFO] [stderr] Compiling unicode-segmentation v1.10.1 [INFO] [stderr] Checking nibble_vec v0.1.0 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking strsim v0.8.0 [INFO] [stderr] Checking either v1.8.1 [INFO] [stderr] Checking ansi_term v0.12.1 [INFO] [stderr] Checking crossbeam-channel v0.5.8 [INFO] [stderr] Compiling serde_json v1.0.99 [INFO] [stderr] Compiling sysinfo v0.20.5 [INFO] [stderr] Checking endian-type v0.1.2 [INFO] [stderr] Checking vec_map v0.8.2 [INFO] [stderr] Checking radix_trie v0.2.1 [INFO] [stderr] Checking crossbeam-deque v0.8.3 [INFO] [stderr] Compiling heck v0.3.3 [INFO] [stderr] Checking once_cell v1.18.0 [INFO] [stderr] Checking numtoa v0.1.0 [INFO] [stderr] Compiling syn v2.0.18 [INFO] [stderr] Checking itoa v1.0.6 [INFO] [stderr] Checking log v0.4.19 [INFO] [stderr] Checking ryu v1.0.13 [INFO] [stderr] Checking num_cpus v1.15.0 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking dirs-sys-next v0.1.2 [INFO] [stderr] Checking fd-lock v2.0.0 [INFO] [stderr] Checking nix v0.20.2 [INFO] [stderr] Checking termion v1.5.6 [INFO] [stderr] Checking clap v2.34.0 [INFO] [stderr] Checking dirs-next v2.0.0 [INFO] [stderr] Checking rayon v1.7.0 [INFO] [stderr] Compiling serde_derive v1.0.164 [INFO] [stderr] Compiling structopt-derive v0.4.18 [INFO] [stderr] Checking rustyline v8.2.0 [INFO] [stderr] Checking structopt v0.3.26 [INFO] [stderr] Checking GServerManager v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] = note: `#[deny(self_type_conversion)]` on by default [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 26 - Err(error_message.into()) [INFO] [stdout] 26 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 26 - Err(error_message.into()) [INFO] [stdout] 26 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:42:13 [INFO] [stdout] | [INFO] [stdout] 42 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 42 - Err(error_message.into()) [INFO] [stdout] 42 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 42 - Err(error_message.into()) [INFO] [stdout] 42 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 57 - Err(error_message.into()) [INFO] [stdout] 57 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 57 - Err(error_message.into()) [INFO] [stdout] 57 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:70:12 [INFO] [stdout] | [INFO] [stdout] 70 | Ok(diff_output.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 70 - Ok(diff_output.into()) [INFO] [stdout] 70 + Ok(diff_output) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 70 - Ok(diff_output.into()) [INFO] [stdout] 70 + Ok(>::into(diff_output)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:73:13 [INFO] [stdout] | [INFO] [stdout] 73 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 73 - Err(error_message.into()) [INFO] [stdout] 73 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 73 - Err(error_message.into()) [INFO] [stdout] 73 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/server/server.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | initialize_git_repository(&self.path); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 118 | let _ = initialize_git_repository(&self.path); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/server/server.rs:125:9 [INFO] [stdout] | [INFO] [stdout] 125 | add_remote_origin(&self.path, remote_url); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 125 | let _ = add_remote_origin(&self.path, remote_url); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/server/servers.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | self.servers[index].stop(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _unused = ...` to ignore the resulting value without dropping it immediately [INFO] [stdout] | [INFO] [stdout] 72 | let _unused = self.servers[index].stop(); [INFO] [stdout] | +++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `GServerManager` (lib test) due to 5 previous errors; 3 warnings emitted [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:26:13 [INFO] [stdout] | [INFO] [stdout] 26 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] = note: `#[deny(self_type_conversion)]` on by default [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 26 - Err(error_message.into()) [INFO] [stdout] 26 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 26 - Err(error_message.into()) [INFO] [stdout] 26 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:42:13 [INFO] [stdout] | [INFO] [stdout] 42 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 42 - Err(error_message.into()) [INFO] [stdout] 42 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 42 - Err(error_message.into()) [INFO] [stdout] 42 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:57:13 [INFO] [stdout] | [INFO] [stdout] 57 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 57 - Err(error_message.into()) [INFO] [stdout] 57 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 57 - Err(error_message.into()) [INFO] [stdout] 57 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:70:12 [INFO] [stdout] | [INFO] [stdout] 70 | Ok(diff_output.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 70 - Ok(diff_output.into()) [INFO] [stdout] 70 + Ok(diff_output) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 70 - Ok(diff_output.into()) [INFO] [stdout] 70 + Ok(>::into(diff_output)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/github/utils.rs:73:13 [INFO] [stdout] | [INFO] [stdout] 73 | Err(error_message.into()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this method call relies on the `impl Into for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors [INFO] [stdout] help: consider removing the conversion call [INFO] [stdout] | [INFO] [stdout] 73 - Err(error_message.into()) [INFO] [stdout] 73 + Err(error_message) [INFO] [stdout] | [INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint [INFO] [stdout] | [INFO] [stdout] 73 - Err(error_message.into()) [INFO] [stdout] 73 + Err(>::into(error_message)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: crate `GServerManager` should have a snake case name [INFO] [stdout] | [INFO] [stdout] = help: convert the identifier to snake case: `gserver_manager` [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/server/server.rs:118:13 [INFO] [stdout] | [INFO] [stdout] 118 | initialize_git_repository(&self.path); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 118 | let _ = initialize_git_repository(&self.path); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/server/server.rs:125:9 [INFO] [stdout] | [INFO] [stdout] 125 | add_remote_origin(&self.path, remote_url); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 125 | let _ = add_remote_origin(&self.path, remote_url); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `Result` that must be used [INFO] [stdout] --> src/server/servers.rs:72:13 [INFO] [stdout] | [INFO] [stdout] 72 | self.servers[index].stop(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _unused = ...` to ignore the resulting value without dropping it immediately [INFO] [stdout] | [INFO] [stdout] 72 | let _unused = self.servers[index].stop(); [INFO] [stdout] | +++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `GServerManager` (lib) due to 5 previous errors; 4 warnings emitted [INFO] running `Command { std: "docker" "inspect" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d", kill_on_drop: false }` [INFO] [stdout] 27e980278ffbcaaf06575c0bcbaf3267aaafeb5a8b701efdfb12d354a324f22d