[INFO] cloning repository https://github.com/magnhalv/ray_tracer [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/magnhalv/ray_tracer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmagnhalv%2Fray_tracer", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmagnhalv%2Fray_tracer'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 76f164d7412caec33463c622aaf450665d9d7a68 [INFO] testing magnhalv/ray_tracer against master#a77da2d454e6caa227a85b16410b95f93495e7e0 for pr-91031 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmagnhalv%2Fray_tracer" "/workspace/builds/worker-0/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/magnhalv/ray_tracer on toolchain a77da2d454e6caa227a85b16410b95f93495e7e0 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/magnhalv/ray_tracer [INFO] finished tweaking git repo https://github.com/magnhalv/ray_tracer [INFO] tweaked toml for git repo https://github.com/magnhalv/ray_tracer written to /workspace/builds/worker-0/source/Cargo.toml [INFO] crate git repo https://github.com/magnhalv/ray_tracer already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/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:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] f0715269c1e17741f39fbce425b0a2d350b32e674a5c093e9264acd19850792b [INFO] running `Command { std: "docker" "start" "-a" "f0715269c1e17741f39fbce425b0a2d350b32e674a5c093e9264acd19850792b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "f0715269c1e17741f39fbce425b0a2d350b32e674a5c093e9264acd19850792b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f0715269c1e17741f39fbce425b0a2d350b32e674a5c093e9264acd19850792b", kill_on_drop: false }` [INFO] [stdout] f0715269c1e17741f39fbce425b0a2d350b32e674a5c093e9264acd19850792b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/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" "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:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 4f1445b8aba29fe6708f164aa1664b2643e64f97b0e7a2413c4195ee2e8aba7c [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "4f1445b8aba29fe6708f164aa1664b2643e64f97b0e7a2413c4195ee2e8aba7c", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.107 [INFO] [stderr] Compiling cfg-if v1.0.0 [INFO] [stderr] Compiling proc-macro2 v1.0.32 [INFO] [stderr] Compiling memchr v2.4.1 [INFO] [stderr] Compiling unicode-xid v0.2.2 [INFO] [stderr] Compiling version_check v0.9.3 [INFO] [stderr] Compiling pkg-config v0.3.22 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Compiling glob v0.3.0 [INFO] [stderr] Compiling log v0.4.14 [INFO] [stderr] Compiling xml-rs v0.8.4 [INFO] [stderr] Compiling autocfg v1.0.1 [INFO] [stderr] Compiling unicode-width v0.1.9 [INFO] [stderr] Compiling regex-syntax v0.6.25 [INFO] [stderr] Compiling vec_map v0.8.2 [INFO] [stderr] Compiling termcolor v1.1.2 [INFO] [stderr] Compiling ansi_term v0.11.0 [INFO] [stderr] Compiling lazy_static v1.4.0 [INFO] [stderr] Compiling strsim v0.8.0 [INFO] [stderr] Compiling humantime v2.1.0 [INFO] [stderr] Compiling bindgen v0.56.0 [INFO] [stderr] Compiling shlex v0.1.1 [INFO] [stderr] Compiling lazycell v1.3.0 [INFO] [stderr] Compiling peeking_take_while v0.1.2 [INFO] [stderr] Compiling smallvec v1.7.0 [INFO] [stderr] Compiling once_cell v1.8.0 [INFO] [stderr] Compiling downcast-rs v1.2.0 [INFO] [stderr] Compiling minimal-lexical v0.2.1 [INFO] [stderr] Compiling ppv-lite86 v0.2.15 [INFO] [stderr] Compiling cc v1.0.72 [INFO] [stderr] Compiling remove_dir_all v0.5.3 [INFO] [stderr] Compiling libloading v0.7.1 [INFO] [stderr] Compiling textwrap v0.11.0 [INFO] [stderr] Compiling nom v5.1.2 [INFO] [stderr] Compiling nom v7.1.0 [INFO] [stderr] Compiling memoffset v0.6.4 [INFO] [stderr] Compiling clang-sys v1.3.0 [INFO] [stderr] Compiling aho-corasick v0.7.18 [INFO] [stderr] Compiling wayland-sys v0.28.6 [INFO] [stderr] Compiling x11-dl v2.19.1 [INFO] [stderr] Compiling quote v1.0.10 [INFO] [stderr] Compiling wayland-scanner v0.28.6 [INFO] [stderr] Compiling minifb v0.19.3 [INFO] [stderr] Compiling regex v1.5.4 [INFO] [stderr] Compiling atty v0.2.14 [INFO] [stderr] Compiling which v3.1.1 [INFO] [stderr] Compiling nix v0.20.2 [INFO] [stderr] Compiling getrandom v0.2.3 [INFO] [stderr] Compiling raw-window-handle v0.3.3 [INFO] [stderr] Compiling clap v2.33.3 [INFO] [stderr] Compiling wayland-client v0.28.6 [INFO] [stderr] Compiling wayland-protocols v0.28.6 [INFO] [stderr] Compiling rand_core v0.6.3 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling xcursor v0.3.4 [INFO] [stderr] Compiling rand v0.8.4 [INFO] [stderr] Compiling cexpr v0.4.0 [INFO] [stderr] Compiling env_logger v0.8.4 [INFO] [stderr] Compiling tempfile v3.2.0 [INFO] [stderr] Compiling wayland-commons v0.28.6 [INFO] [stderr] Compiling wayland-cursor v0.28.6 [INFO] [stderr] Compiling xkbcommon-sys v0.7.5 [INFO] [stderr] Compiling xkb v0.2.1 [INFO] [stderr] Compiling ray_tracer v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `crate::color::WHITE` [INFO] [stdout] --> src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use crate::color::WHITE; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::pattern::StripePattern` [INFO] [stdout] --> src/main.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use crate::pattern::StripePattern; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Sphere` [INFO] [stdout] --> src/camera.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::Sphere; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::canvas::set_pixel` [INFO] [stdout] --> src/camera.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::canvas::set_pixel; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Color` [INFO] [stdout] --> src/camera.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::Color; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::transformation::view_transform` [INFO] [stdout] --> src/camera.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::transformation::view_transform; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `core::f32::consts::PI` [INFO] [stdout] --> src/camera.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use core::f32::consts::PI; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Sphere` [INFO] [stdout] --> src/lighting.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::Sphere; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Sphere` [INFO] [stdout] --> src/material.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::Sphere; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::pattern::StripePattern` [INFO] [stdout] --> src/material.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::pattern::StripePattern; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::color::BLACK` [INFO] [stdout] --> src/material.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::color::BLACK; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::color::WHITE` [INFO] [stdout] --> src/material.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::color::WHITE; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::lighting` [INFO] [stdout] --> src/material.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::lighting; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::PointLight` [INFO] [stdout] --> src/material.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use crate::PointLight; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Tuple` [INFO] [stdout] --> src/material.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use crate::Tuple; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Sphere` [INFO] [stdout] --> src/pattern.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::Sphere; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:12:37 [INFO] [stdout] | [INFO] [stdout] 12 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color; [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:40:37 [INFO] [stdout] | [INFO] [stdout] 40 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:65:37 [INFO] [stdout] | [INFO] [stdout] 65 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:91:37 [INFO] [stdout] | [INFO] [stdout] 91 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::transformation::scaling` [INFO] [stdout] --> src/ray.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::transformation::scaling; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::transformation::translation` [INFO] [stdout] --> src/ray.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::transformation::translation; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::Sphere` [INFO] [stdout] --> src/ray.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::Sphere; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `inverse4` [INFO] [stdout] --> src/transformation.rs:2:30 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::matrix::{Matrix4, inverse4}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PI` [INFO] [stdout] --> src/transformation.rs:3:24 [INFO] [stdout] | [INFO] [stdout] 3 | use std::f32::consts::{PI}; [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `world_point` [INFO] [stdout] --> src/plane.rs:30:25 [INFO] [stdout] | [INFO] [stdout] 30 | fn normal_at(&self, world_point: &Tuple) -> Tuple { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_world_point` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `field_of_view` [INFO] [stdout] --> src/camera.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | field_of_view: f32, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `pixel_at` [INFO] [stdout] --> src/canvas.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub fn pixel_at(&self, x: usize, y: usize) -> Color { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `set_pixel` [INFO] [stdout] --> src/canvas.rs:31:8 [INFO] [stdout] | [INFO] [stdout] 31 | pub fn set_pixel (canvas: &mut Canvas, x: usize, y: usize, color: Color) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant is never used: `WHITE` [INFO] [stdout] --> src/color.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / pub const WHITE: Color = Color { [INFO] [stdout] 11 | | red: 1_f32, green: 1_f32, blue: 1_f32 [INFO] [stdout] 12 | | }; [INFO] [stdout] | |__^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `new` [INFO] [stdout] --> src/matrix.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `new` [INFO] [stdout] --> src/matrix.rs:68:12 [INFO] [stdout] | [INFO] [stdout] 68 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `is_invertible` [INFO] [stdout] --> src/matrix.rs:382:4 [INFO] [stdout] | [INFO] [stdout] 382 | fn is_invertible(m: &Matrix4) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `new_box` [INFO] [stdout] --> src/pattern.rs:23:12 [INFO] [stdout] | [INFO] [stdout] 23 | pub fn new_box(first: Color, second: Color) -> Option> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `test_default` [INFO] [stdout] --> src/pattern.rs:27:8 [INFO] [stdout] | [INFO] [stdout] 27 | fn test_default() -> StripePattern { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `default` [INFO] [stdout] --> src/ray.rs:24:12 [INFO] [stdout] | [INFO] [stdout] 24 | pub fn default() -> Ray { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function is never used: `shearing` [INFO] [stdout] --> src/transformation.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | pub fn shearing(x_to_y: f32, x_to_z: f32, y_to_x: f32, y_to_z: f32, z_to_x: f32, z_to_y: f32) -> Matrix4 { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `default` [INFO] [stdout] --> src/world.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 17 | pub fn default(s1: &'a dyn Shape, s2: &'a dyn Shape) -> Self { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function is never used: `default_spheres` [INFO] [stdout] --> src/world.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub fn default_spheres() -> (Sphere, Sphere) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 39 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 47s [INFO] running `Command { std: "docker" "inspect" "4f1445b8aba29fe6708f164aa1664b2643e64f97b0e7a2413c4195ee2e8aba7c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4f1445b8aba29fe6708f164aa1664b2643e64f97b0e7a2413c4195ee2e8aba7c", kill_on_drop: false }` [INFO] [stdout] 4f1445b8aba29fe6708f164aa1664b2643e64f97b0e7a2413c4195ee2e8aba7c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/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" "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:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 19242dd7eaf9dae6e1472160d71cb4ff127b6330092a0cd603b4208439642b55 [INFO] running `Command { std: "docker" "start" "-a" "19242dd7eaf9dae6e1472160d71cb4ff127b6330092a0cd603b4208439642b55", kill_on_drop: false }` [INFO] [stderr] Compiling ray_tracer v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `crate::color::WHITE` [INFO] [stdout] --> src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use crate::color::WHITE; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::pattern::StripePattern` [INFO] [stdout] --> src/main.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | use crate::pattern::StripePattern; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::canvas::set_pixel` [INFO] [stdout] --> src/camera.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use crate::canvas::set_pixel; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:12:37 [INFO] [stdout] | [INFO] [stdout] 12 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color; [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:40:37 [INFO] [stdout] | [INFO] [stdout] 40 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:65:37 [INFO] [stdout] | [INFO] [stdout] 65 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/pattern.rs:91:37 [INFO] [stdout] | [INFO] [stdout] 91 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stdout] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `color` [INFO] [stdout] --> src/material.rs:41:9 [INFO] [stdout] | [INFO] [stdout] 41 | let color = match &material.pattern { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_color` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `world_point` [INFO] [stdout] --> src/plane.rs:30:25 [INFO] [stdout] | [INFO] [stdout] 30 | fn normal_at(&self, world_point: &Tuple) -> Tuple { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_world_point` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `field_of_view` [INFO] [stdout] --> src/camera.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | field_of_view: f32, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 10 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 2.89s [INFO] running `Command { std: "docker" "inspect" "19242dd7eaf9dae6e1472160d71cb4ff127b6330092a0cd603b4208439642b55", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "19242dd7eaf9dae6e1472160d71cb4ff127b6330092a0cd603b4208439642b55", kill_on_drop: false }` [INFO] [stdout] 19242dd7eaf9dae6e1472160d71cb4ff127b6330092a0cd603b4208439642b55 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0/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" "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:5736fa189c1c60b01babf4b8b698fe57b6ecc41933a7ff2e0b8d7a221459412b" "/opt/rustwide/cargo-home/bin/cargo" "+a77da2d454e6caa227a85b16410b95f93495e7e0" "test" "--frozen", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 5830fe34ccb3d46c96a0565cf5ac82b1600dd0adfc19543d185fc83a3ddd18cf [INFO] running `Command { std: "docker" "start" "-a" "5830fe34ccb3d46c96a0565cf5ac82b1600dd0adfc19543d185fc83a3ddd18cf", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] warning: unused import: `crate::color::WHITE` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use crate::color::WHITE; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::pattern::StripePattern` [INFO] [stderr] --> src/main.rs:9:5 [INFO] [stderr] | [INFO] [stderr] 9 | use crate::pattern::StripePattern; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `crate::canvas::set_pixel` [INFO] [stderr] --> src/camera.rs:2:5 [INFO] [stderr] | [INFO] [stderr] 2 | use crate::canvas::set_pixel; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/pattern.rs:12:37 [INFO] [stderr] | [INFO] [stderr] 12 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color; [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stderr] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stderr] = note: for more information, see [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/pattern.rs:40:37 [INFO] [stderr] | [INFO] [stderr] 40 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stderr] | [INFO] [stderr] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stderr] = note: for more information, see [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/pattern.rs:65:37 [INFO] [stderr] | [INFO] [stderr] 65 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stderr] | [INFO] [stderr] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stderr] = note: for more information, see [INFO] [stderr] [INFO] [stderr] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stderr] --> src/pattern.rs:91:37 [INFO] [stderr] | [INFO] [stderr] 91 | fn color_at_obj(&self, object: &Shape, world_point: &Tuple) -> Color { [INFO] [stderr] | ^^^^^ help: use `dyn`: `dyn Shape` [INFO] [stderr] | [INFO] [stderr] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! [INFO] [stderr] = note: for more information, see [INFO] [stderr] [INFO] [stderr] warning: unused variable: `color` [INFO] [stderr] --> src/material.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | let color = match &material.pattern { [INFO] [stderr] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_color` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `world_point` [INFO] [stderr] --> src/plane.rs:30:25 [INFO] [stderr] | [INFO] [stderr] 30 | fn normal_at(&self, world_point: &Tuple) -> Tuple { [INFO] [stderr] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_world_point` [INFO] [stderr] [INFO] [stderr] warning: field is never read: `field_of_view` [INFO] [stderr] --> src/camera.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | field_of_view: f32, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` on by default [INFO] [stderr] [INFO] [stderr] warning: `ray_tracer` (bin "ray_tracer" test) generated 10 warnings [INFO] [stderr] Finished test [unoptimized + debuginfo] target(s) in 0.66s [INFO] [stderr] Running unittests (/opt/rustwide/target/debug/deps/ray_tracer-ca22759bb1e16518) [INFO] [stdout] [INFO] [stdout] running 108 tests [INFO] [stdout] test canvas::init_canvas ... ok [INFO] [stdout] test lighting::lighting_with_the_eye_between_the_light_and_the_surface ... ok [INFO] [stdout] test lighting::lighting_with_the_eye_in_the_path_of_the_reflection_vector ... ok [INFO] [stdout] test lighting::lighting_with_the_eye_between_light_and_the_surface_and_45deg_on_surface ... ok [INFO] [stdout] test color::multiply_color_by_scalar ... ok [INFO] [stdout] test color::multiply_color_by_color ... ok [INFO] [stdout] test color::add_colors ... ok [INFO] [stdout] test camera::constructing_a_ray_through_a_corner_of_the_canvas ... ok [INFO] [stdout] test color::sub_colors ... ok [INFO] [stdout] test camera::constructing_a_ray_when_the_camera_is_transformed ... ok [INFO] [stdout] test camera::the_pixel_size_for_a_horizontal_canvas ... ok [INFO] [stdout] test camera::the_pixel_size_for_a_vertical_canvas ... ok [INFO] [stdout] test canvas::to_ppm ... ok [INFO] [stdout] test camera::constructing_a_ray_through_the_center_of_the_canvas ... ok [INFO] [stdout] test lighting::lighting_with_the_light_behind_the_surface ... ok [INFO] [stdout] test camera::rendering_a_world_with_a_camera ... ok [INFO] [stdout] test matrix::matrix4_invert ... ok [INFO] [stdout] test material::lighting_with_a_pattern_applied ... ok [INFO] [stdout] test matrix::matrix4_determinant ... ok [INFO] [stdout] test matrix::matrix_equals ... ok [INFO] [stdout] test matrix::matrix3_determinant ... ok [INFO] [stdout] test matrix::init_matrix ... ok [INFO] [stdout] test matrix::matrix_multiplication ... ok [INFO] [stdout] test matrix::matrix_submatrix ... ok [INFO] [stdout] test matrix::matrix_transpose ... ok [INFO] [stdout] test pattern::a_gradient_linerarly_interpolates_between_colors ... ok [INFO] [stdout] test pattern::stripe_pattern_alternates_only_in_x ... ok [INFO] [stdout] test plane::a_ray_intersecting_a_plane_from_above ... ok [INFO] [stdout] test plane::the_normal_of_a_plane_is_constant_everywhere ... ok [INFO] [stdout] test ray::hit_when_all_intersections_have_negative_t ... ok [INFO] [stdout] test ray::hit_when_all_intersections_have_positive_t ... ok [INFO] [stdout] test ray::hit_when_some_intersections_have_negative_t ... ok [INFO] [stdout] test ray::intersecting_a_scaled_sphere_with_a_ray ... ok [INFO] [stdout] test ray::precomputing_the_state_of_an_intersection ... ok [INFO] [stdout] test ray::ray_intersects_when_it_originiates_inside_sphere ... ok [INFO] [stdout] test ray::ray_intersects_when_sphere_is_behind_ray ... ok [INFO] [stdout] test matrix::matrix4_is_invertibile ... ok [INFO] [stdout] test ray::ray_interspects_but_misses_sphere ... ok [INFO] [stdout] test ray::ray_intesects_a_sphere_at_a_tangent ... ok [INFO] [stdout] test plane::a_ray_intersecting_a_plane_from_below ... ok [INFO] [stdout] test plane::intersect_with_a_coplanar_ray ... ok [INFO] [stdout] test plane::intersect_with_a_ray_parallel_to_the_plane ... ok [INFO] [stdout] test canvas::set_pixel_test ... ok [INFO] [stdout] test pattern::stripes_with_both_an_object_and_a_pattern_transformation ... ok [INFO] [stdout] test matrix::matrix_determinant ... ok [INFO] [stdout] test lighting::lighting_with_the_eye_oppsite_surface_light_offset_45deg ... ok [INFO] [stdout] test matrix::matrix3_minor ... ok [INFO] [stdout] test matrix::matrix3_cofactor3 ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_at_a_point_on_the_y_axis ... ok [INFO] [stdout] test lighting::lighting_with_the_surface_in_shadow ... ok [INFO] [stdout] test ray::scale_a_ray ... ok [INFO] [stdout] test matrix::init_2x2_matrix ... ok [INFO] [stdout] test ray::the_hit_should_offset_the_point_to_avoid_acne ... ok [INFO] [stdout] test ray::the_hit_when_an_interection_occurs_on_the_outside ... ok [INFO] [stdout] test transformation::chaining_fluent_transformations ... ok [INFO] [stdout] test transformation::chaining_transformations ... ok [INFO] [stdout] test transformation::an_arbitrary_view_transformation ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_at_a_point_on_the_z_axis ... ok [INFO] [stdout] test transformation::rotation_y_axis ... ok [INFO] [stdout] test transformation::rotation_z_axis ... ok [INFO] [stdout] test transformation::scale_point ... ok [INFO] [stdout] test transformation::shearing_x_in_proportion_to_z ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_translated_sphere ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_is_normalized ... ok [INFO] [stdout] test transformation::shearing_x_in_proportion_to_y ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_transformed_sphere ... ok [INFO] [stdout] test transformation::shearing_y_in_proportion_to_x ... ok [INFO] [stdout] test transformation::shearing_y_in_proportion_to_z ... ok [INFO] [stdout] test transformation::shearing_z_in_proportion_to_x ... ok [INFO] [stdout] test transformation::shearing_z_in_proportion_to_y ... ok [INFO] [stdout] test transformation::translate_point ... ok [INFO] [stdout] test tuple::add_vector_to_point_gives_point ... ok [INFO] [stdout] test tuple::cross_product_vector ... ok [INFO] [stdout] test tuple::dot_product_vector ... ok [INFO] [stdout] test tuple::magnitude_vector ... ok [INFO] [stdout] test tuple::multiply_point_by_scalar ... ok [INFO] [stdout] test transformation::scale_vector ... ok [INFO] [stdout] test transformation::rotation_x_axis ... ok [INFO] [stdout] test transformation::the_view_transformation_matrix_moves_the_world ... ok [INFO] [stdout] test tuple::normalize_vector ... ok [INFO] [stdout] test tuple::negating_point ... ok [INFO] [stdout] test tuple::reflect_vector_at_slanted_surface ... ok [INFO] [stdout] test tuple::sub_vector_from_point_gives_point ... ok [INFO] [stdout] test tuple::sub_vector_from_vector_gives_vector ... ok [INFO] [stdout] test world::intersect_a_world_with_ray ... ok [INFO] [stdout] test world::shade_hit_is_given_an_intersection_in_shadow ... ok [INFO] [stdout] test world::shading_an_interection ... ok [INFO] [stdout] test world::shading_an_interection_from_the_inside ... ok [INFO] [stdout] test world::the_color_when_a_ray_hits ... ok [INFO] [stdout] test world::the_color_when_a_ray_misses ... ok [INFO] [stdout] test world::the_shadow_when_an_object_is_between_the_point_and_the_light ... ok [INFO] [stdout] test world::there_is_no_shadow_when_an_object_is_behind_the_point ... ok [INFO] [stdout] test world::there_is_no_shadow_when_an_objet_is_behind_the_light ... ok [INFO] [stdout] test ray::translate_a_ray ... ok [INFO] [stdout] test tuple::add_vector_to_vector_gives_vector ... ok [INFO] [stdout] test ray::ray_position ... ok [INFO] [stdout] test tuple::reflect_vector_at_45deg ... ok [INFO] [stdout] test tuple::negating_vector ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_at_a_nonaxial_point ... ok [INFO] [stdout] test ray::the_hit_when_an_interection_occurs_on_the_inside ... ok [INFO] [stdout] test ray::ray_intesects_a_sphere_at_two_points ... ok [INFO] [stdout] test world::there_is_no_shadow_when_nothing_is_collinear_with_point_and_light ... ok [INFO] [stdout] test pattern::stripes_with_a_pattern_transformation ... ok [INFO] [stdout] test pattern::stripes_with_an_object_transformation ... ok [INFO] [stdout] test transformation::the_view_transformation_matrix_for_the_default_orientation ... ok [INFO] [stdout] test transformation::a_view_transformation_matrix_looking_in_positive_z_direction ... ok [INFO] [stdout] test tuple::sub_point_from_point_gives_vector ... ok [INFO] [stdout] test sphere::the_normal_on_a_sphere_at_a_point_on_the_x_axis ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 108 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "5830fe34ccb3d46c96a0565cf5ac82b1600dd0adfc19543d185fc83a3ddd18cf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5830fe34ccb3d46c96a0565cf5ac82b1600dd0adfc19543d185fc83a3ddd18cf", kill_on_drop: false }` [INFO] [stdout] 5830fe34ccb3d46c96a0565cf5ac82b1600dd0adfc19543d185fc83a3ddd18cf