[INFO] cloning repository https://github.com/junidy/parallel-dsp [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/junidy/parallel-dsp" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjunidy%2Fparallel-dsp", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjunidy%2Fparallel-dsp'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 91b1c43e9ad7c5ef95ec9f032654ca186fd8da41 [INFO] checking junidy/parallel-dsp against master#84e729a59f216cc64755788a470f165429a731f4 for pr-123737-1 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjunidy%2Fparallel-dsp" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/junidy/parallel-dsp on toolchain 84e729a59f216cc64755788a470f165429a731f4 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+84e729a59f216cc64755788a470f165429a731f4" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/junidy/parallel-dsp [INFO] finished tweaking git repo https://github.com/junidy/parallel-dsp [INFO] tweaked toml for git repo https://github.com/junidy/parallel-dsp written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] crate git repo https://github.com/junidy/parallel-dsp 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" "+84e729a59f216cc64755788a470f165429a731f4" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded coremidi-sys v3.1.0 [INFO] [stderr] Downloaded rsor v0.1.4 [INFO] [stderr] Downloaded primal-check v0.3.3 [INFO] [stderr] Downloaded coremidi v0.6.0 [INFO] [stderr] Downloaded dyn-clone v1.0.17 [INFO] [stderr] Downloaded numeric-array v0.5.2 [INFO] [stderr] Downloaded libloading v0.8.2 [INFO] [stderr] Downloaded pin-project v1.1.4 [INFO] [stderr] Downloaded thingbuf v0.1.4 [INFO] [stderr] Downloaded duplicate v1.0.0 [INFO] [stderr] Downloaded rustfft v6.2.0 [INFO] [stderr] Downloaded fundsp v0.16.0 [INFO] [stderr] Downloaded pin-project-internal v1.1.4 [INFO] [stderr] Downloaded midir v0.9.1 [INFO] [stderr] Downloaded ringbuf v0.3.3 [INFO] [stderr] Downloaded realfft v3.3.0 [INFO] [stderr] Downloaded strength_reduce v0.2.4 [INFO] [stderr] Downloaded transpose v0.2.3 [INFO] [stderr] Downloaded symphonia-format-caf v0.5.4 [INFO] [stderr] Downloaded funutd v0.12.1 [INFO] [stderr] Downloaded windows v0.43.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+84e729a59f216cc64755788a470f165429a731f4" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] f270ef97ff696670c04595fd8de279c94f58130bc3ae3f4e44fa555684107e4b [INFO] running `Command { std: "docker" "start" "-a" "f270ef97ff696670c04595fd8de279c94f58130bc3ae3f4e44fa555684107e4b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f270ef97ff696670c04595fd8de279c94f58130bc3ae3f4e44fa555684107e4b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f270ef97ff696670c04595fd8de279c94f58130bc3ae3f4e44fa555684107e4b", kill_on_drop: false }` [INFO] [stdout] f270ef97ff696670c04595fd8de279c94f58130bc3ae3f4e44fa555684107e4b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+84e729a59f216cc64755788a470f165429a731f4" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] cce6c348d96962eaa31d9a1748532fe9b68d3e3e0b502a482a41790c98adb1db [INFO] running `Command { std: "docker" "start" "-a" "cce6c348d96962eaa31d9a1748532fe9b68d3e3e0b502a482a41790c98adb1db", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Checking symphonia-utils-xiph v0.5.4 [INFO] [stderr] Compiling typenum v1.17.0 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Checking smallvec v1.13.1 [INFO] [stderr] Compiling syn v2.0.52 [INFO] [stderr] Compiling rustfft v6.2.0 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Checking parking_lot_core v0.9.9 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Checking strength_reduce v0.2.4 [INFO] [stderr] Checking primal-check v0.3.3 [INFO] [stderr] Checking transpose v0.2.3 [INFO] [stderr] Checking alsa-sys v0.3.1 [INFO] [stderr] Checking num-complex v0.4.5 [INFO] [stderr] Checking parking_lot v0.12.1 [INFO] [stderr] Checking nix v0.24.3 [INFO] [stderr] Checking extended v0.1.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.19 [INFO] [stderr] Checking symphonia-format-riff v0.5.4 [INFO] [stderr] Checking alsa v0.7.1 [INFO] [stderr] Checking symphonia-format-ogg v0.5.4 [INFO] [stderr] Checking symphonia-codec-vorbis v0.5.4 [INFO] [stderr] Checking symphonia-format-isomp4 v0.5.4 [INFO] [stderr] Checking symphonia-bundle-flac v0.5.4 [INFO] [stderr] Checking symphonia-format-mkv v0.5.4 [INFO] [stderr] Checking symphonia-bundle-mp3 v0.5.4 [INFO] [stderr] Checking symphonia-format-caf v0.5.4 [INFO] [stderr] Checking symphonia-codec-adpcm v0.5.4 [INFO] [stderr] Checking symphonia-codec-aac v0.5.4 [INFO] [stderr] Checking symphonia-codec-pcm v0.5.4 [INFO] [stderr] Checking symphonia-codec-alac v0.5.4 [INFO] [stderr] Checking glam v0.24.2 [INFO] [stderr] Compiling cpal v0.15.2 [INFO] [stderr] Checking dyn-clone v1.0.17 [INFO] [stderr] Compiling heck v0.4.1 [INFO] [stderr] Checking numeric-array v0.5.2 [INFO] [stderr] Compiling duplicate v1.0.0 [INFO] [stderr] Checking rsor v0.1.4 [INFO] [stderr] Checking symphonia v0.5.4 [INFO] [stderr] Checking midir v0.9.1 [INFO] [stderr] Checking ringbuf v0.3.3 [INFO] [stderr] Compiling pin-project-internal v1.1.4 [INFO] [stderr] Checking funutd v0.12.1 [INFO] [stderr] Checking pin-project v1.1.4 [INFO] [stderr] Checking thingbuf v0.1.4 [INFO] [stderr] Checking realfft v3.3.0 [INFO] [stderr] Checking fundsp v0.16.0 [INFO] [stderr] Checking parallel-dsp v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `Mutex` [INFO] [stdout] --> src/io/mod.rs:1:22 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Mutex` [INFO] [stdout] --> src/io/mod.rs:1:22 [INFO] [stdout] | [INFO] [stdout] 1 | use std::sync::{Arc, Mutex}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `io`, `thread` [INFO] [stdout] --> src/io/mod.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | use std::{io, panic, thread}; [INFO] [stdout] | ^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/io/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BuildStreamError`, `Data`, `FrameCount`, `OutputStreamTimestamp` [INFO] [stdout] --> src/io/mod.rs:5:24 [INFO] [stdout] | [INFO] [stdout] 5 | use cpal::{BufferSize, BuildStreamError, Data, Device, FrameCount, Host, OutputStreamTimestamp, Stream, StreamConfig, StreamError, Suppor... [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `StreamTrait` [INFO] [stdout] --> src/io/mod.rs:6:44 [INFO] [stdout] | [INFO] [stdout] 6 | use cpal::traits::{HostTrait, DeviceTrait, StreamTrait}; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `io`, `thread` [INFO] [stdout] --> src/io/mod.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | use std::{io, panic, thread}; [INFO] [stdout] | ^^ ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fundsp::hacker32::*` [INFO] [stdout] --> src/dsp/oscillators.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use fundsp::hacker32::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/io/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Mutex` [INFO] [stdout] --> src/dsp/mod.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | sync::{Arc, Mutex}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `BuildStreamError`, `Data`, `FrameCount`, `OutputStreamTimestamp` [INFO] [stdout] --> src/io/mod.rs:5:24 [INFO] [stdout] | [INFO] [stdout] 5 | use cpal::{BufferSize, BuildStreamError, Data, Device, FrameCount, Host, OutputStreamTimestamp, Stream, StreamConfig, StreamError, Suppor... [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Mutex`, `time::Duration` [INFO] [stdout] --> src/main.rs:4:23 [INFO] [stdout] | [INFO] [stdout] 4 | use std::{sync::{Arc, Mutex}, thread, time::Duration}; [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `StreamTrait` [INFO] [stdout] --> src/io/mod.rs:6:44 [INFO] [stdout] | [INFO] [stdout] 6 | use cpal::traits::{HostTrait, DeviceTrait, StreamTrait}; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fundsp::hacker32::*` [INFO] [stdout] --> src/dsp/oscillators.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use fundsp::hacker32::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Mutex` [INFO] [stdout] --> src/dsp/mod.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | sync::{Arc, Mutex}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Mutex`, `time::Duration` [INFO] [stdout] --> src/main.rs:4:23 [INFO] [stdout] | [INFO] [stdout] 4 | use std::{sync::{Arc, Mutex}, thread, time::Duration}; [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ringbuf::Rb` [INFO] [stdout] --> src/dsp/mod.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use ringbuf::Rb; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ringbuf::Rb` [INFO] [stdout] --> src/dsp/mod.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use ringbuf::Rb; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `min` [INFO] [stdout] --> src/io/mod.rs:34:41 [INFO] [stdout] | [INFO] [stdout] 34 | SupportedBufferSize::Range {min, max} => BufferSize::Fixed(*max), [INFO] [stdout] | ^^^ help: try ignoring the field: `min: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `min` [INFO] [stdout] --> src/io/mod.rs:34:41 [INFO] [stdout] | [INFO] [stdout] 34 | SupportedBufferSize::Range {min, max} => BufferSize::Fixed(*max), [INFO] [stdout] | ^^^ help: try ignoring the field: `min: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `error` [INFO] [stdout] --> src/io/mod.rs:48:32 [INFO] [stdout] | [INFO] [stdout] 48 | let error_callback = move |error: StreamError| { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_error` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `error` [INFO] [stdout] --> src/io/mod.rs:48:32 [INFO] [stdout] | [INFO] [stdout] 48 | let error_callback = move |error: StreamError| { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_error` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `sample_ind` [INFO] [stdout] --> src/dsp/mod.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | let sample_ind = 0; [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_ind` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `sample_ind` [INFO] [stdout] --> src/dsp/mod.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | let sample_ind = 0; [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_ind` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `input_stream_config` [INFO] [stdout] --> src/main.rs:14:24 [INFO] [stdout] | [INFO] [stdout] 14 | let (input_device, input_stream_config) = io::init_input_device(&host); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_input_stream_config` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `input_stream_config` [INFO] [stdout] --> src/main.rs:14:24 [INFO] [stdout] | [INFO] [stdout] 14 | let (input_device, input_stream_config) = io::init_input_device(&host); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_input_stream_config` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output_stream` [INFO] [stdout] --> src/main.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | let output_stream = io::init_output_stream(output_buffer, manager_handle, &output_device, &output_stream_config); [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_output_stream` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let mut output_buffer = Arc::new(DoubleBuffer::::new(buffer_size)); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `SampleCount` is never used [INFO] [stdout] --> src/io/mod.rs:9:6 [INFO] [stdout] | [INFO] [stdout] 9 | type SampleCount = usize; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `output_stream` [INFO] [stdout] --> src/main.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | let output_stream = io::init_output_stream(output_buffer, manager_handle, &output_device, &output_stream_config); [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_output_stream` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let mut output_buffer = Arc::new(DoubleBuffer::::new(buffer_size)); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `SampleCount` is never used [INFO] [stdout] --> src/io/mod.rs:9:6 [INFO] [stdout] | [INFO] [stdout] 9 | type SampleCount = usize; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 16 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 16 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 33.04s [INFO] running `Command { std: "docker" "inspect" "cce6c348d96962eaa31d9a1748532fe9b68d3e3e0b502a482a41790c98adb1db", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cce6c348d96962eaa31d9a1748532fe9b68d3e3e0b502a482a41790c98adb1db", kill_on_drop: false }` [INFO] [stdout] cce6c348d96962eaa31d9a1748532fe9b68d3e3e0b502a482a41790c98adb1db