[INFO] fetching crate rlox-burn 0.2.0...
[INFO] checking rlox-burn-0.2.0 against try#f4690f24e7d9bcb0b168a02b06dd61391e8bd55a for pr-157814-crater-rollup
[INFO] extracting crate rlox-burn 0.2.0 into /workspace/builds/worker-5-tc2/source
[INFO] started tweaking crates.io crate rlox-burn 0.2.0
[INFO] finished tweaking crates.io crate rlox-burn 0.2.0
[INFO] tweaked toml for crates.io crate rlox-burn 0.2.0 written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate rlox-burn 0.2.0 on toolchain f4690f24e7d9bcb0b168a02b06dd61391e8bd55a
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate rlox-burn 0.2.0 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" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6
[INFO] running `Command { std: "docker" "start" "e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6", 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" "e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6" "/opt/rustwide/cargo-home/bin/cargo" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6", 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" "e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6" "/opt/rustwide/cargo-home/bin/cargo" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy v0.8.40
[INFO] [stderr]     Checking bitflags v2.11.0
[INFO] [stderr]    Compiling portable-atomic v1.13.1
[INFO] [stderr]     Checking futures-core v0.3.32
[INFO] [stderr]    Compiling cubecl-common v0.4.0
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling zerocopy-derive v0.8.40
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling derive-new v0.6.0
[INFO] [stderr]     Checking event-listener v5.4.1
[INFO] [stderr]     Checking regex-syntax v0.8.10
[INFO] [stderr]     Checking fastrand v2.3.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking embassy-futures v0.1.2
[INFO] [stderr]     Checking serde_json v1.0.149
[INFO] [stderr]     Checking event-listener-strategy v0.5.4
[INFO] [stderr]     Checking futures-lite v2.6.1
[INFO] [stderr]     Checking dirs-sys v0.4.1
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling cubecl-runtime v0.4.0
[INFO] [stderr]     Checking libloading v0.8.9
[INFO] [stderr]    Compiling naga v23.1.0
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling derive_more-impl v1.0.0
[INFO] [stderr]     Checking async-channel v2.5.0
[INFO] [stderr]     Checking async-lock v3.4.2
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking dirs v5.0.1
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]    Compiling prettyplease v0.2.37
[INFO] [stderr]     Checking gpu-alloc-types v0.3.0
[INFO] [stderr]     Checking spirv v0.3.0+sdk-1.3.268.0
[INFO] [stderr]     Checking gpu-descriptor-types v0.2.0
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking gpu-alloc v0.6.0
[INFO] [stderr]     Checking khronos-egl v6.0.0
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking ash v0.38.0+1.3.281
[INFO] [stderr]     Checking wgpu-types v23.0.0
[INFO] [stderr]     Checking profiling v1.0.17
[INFO] [stderr]    Compiling wgpu v23.0.1
[INFO] [stderr]    Compiling cubecl-wgpu v0.4.0
[INFO] [stderr]     Checking gpu-descriptor v0.3.2
[INFO] [stderr]     Checking bytemuck v1.25.0
[INFO] [stderr]    Compiling derive-new v0.7.0
[INFO] [stderr]     Checking serde_bytes v0.11.19
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking thread-tree v0.3.3
[INFO] [stderr]     Checking num_cpus v1.17.0
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]    Compiling burn-ndarray v0.16.1
[INFO] [stderr]     Checking simd-adler32 v0.3.8
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking rmp v0.8.15
[INFO] [stderr]     Checking atomic_float v1.1.0
[INFO] [stderr]     Checking bincode v2.0.1
[INFO] [stderr]     Checking rmp-serde v1.3.1
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking data-encoding v2.10.0
[INFO] [stderr]    Compiling burn-derive v0.16.1
[INFO] [stderr]     Checking uuid v1.22.0
[INFO] [stderr]     Checking ndarray v0.16.1
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking rlox-nn v0.2.0
[INFO] [stderr]     Checking sanitize-filename v0.5.0
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]     Checking derive_more v1.0.0
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling cubecl-macros v0.4.0
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking hashbrown v0.13.2
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking text_placeholder v0.5.1
[INFO] [stderr]     Checking rand_distr v0.4.3
[INFO] [stderr]     Checking burn-common v0.16.1
[INFO] [stderr]     Checking cubecl-core v0.4.0
[INFO] [stderr]     Checking cubecl-linalg v0.4.0
[INFO] [stderr]     Checking cubecl-reduce v0.4.0
[INFO] [stderr]     Checking wgpu-hal v23.0.1
[INFO] [stderr]     Checking wgpu-core v23.0.1
[INFO] [stderr]     Checking cubecl v0.4.0
[INFO] [stderr]     Checking burn-tensor v0.16.1
[INFO] [stderr]     Checking burn-fusion v0.16.1
[INFO] [stderr]     Checking burn-autodiff v0.16.1
[INFO] [stderr]     Checking burn-jit v0.16.1
[INFO] [stderr]     Checking burn-wgpu v0.16.1
[INFO] [stderr]     Checking burn-core v0.16.1
[INFO] [stderr]     Checking burn v0.16.1
[INFO] [stderr]     Checking rlox-burn v0.2.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/actor_critic.rs:139:64
[INFO] [stdout]     |
[INFO] [stdout] 139 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[warn(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/actor_critic.rs:190:64
[INFO] [stdout]     |
[INFO] [stdout] 190 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:132:59
[INFO] [stdout]     |
[INFO] [stdout] 132 |         let obs_t = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:133:63
[INFO] [stdout]     |
[INFO] [stdout] 133 |         let act_t = to_tensor_2d::<B::InnerBackend>(actions, &self.device.clone().into());
[INFO] [stdout]     |                                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:143:57
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:160:57
[INFO] [stdout]     |
[INFO] [stdout] 160 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:224:18
[INFO] [stdout]     |
[INFO] [stdout] 224 |                 &self.device.clone().into(),
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:230:18
[INFO] [stdout]     |
[INFO] [stdout] 230 |                 &self.device.clone().into(),
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/deterministic.rs:169:57
[INFO] [stdout]     |
[INFO] [stdout] 169 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/deterministic.rs:176:57
[INFO] [stdout]     |
[INFO] [stdout] 176 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/deterministic.rs:189:61
[INFO] [stdout]     |
[INFO] [stdout] 189 |             let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:205:64
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:211:64
[INFO] [stdout]     |
[INFO] [stdout] 211 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:213:73
[INFO] [stdout]     |
[INFO] [stdout] 213 |         let actions_int = to_int_tensor_1d::<B::InnerBackend>(actions, &self.device.clone().into());
[INFO] [stdout]     |                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:256:64
[INFO] [stdout]     |
[INFO] [stdout] 256 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/stochastic.rs:202:57
[INFO] [stdout]     |
[INFO] [stdout] 202 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/stochastic.rs:253:57
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/actor_critic.rs:139:64
[INFO] [stdout]     |
[INFO] [stdout] 139 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[warn(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/actor_critic.rs:190:64
[INFO] [stdout]     |
[INFO] [stdout] 190 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:384:72
[INFO] [stdout]     |
[INFO] [stdout] 384 |         let ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:401:72
[INFO] [stdout]     |
[INFO] [stdout] 401 |         let ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:409:72
[INFO] [stdout]     |
[INFO] [stdout] 409 |         let ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:421:76
[INFO] [stdout]     |
[INFO] [stdout] 421 |         let mut ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:453:74
[INFO] [stdout]     |
[INFO] [stdout] 453 |         let mut ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 1e-3, device().into(), 42);
[INFO] [stdout]     |                                                                          ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:500:76
[INFO] [stdout]     |
[INFO] [stdout] 500 |         let mut ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:508:72
[INFO] [stdout]     |
[INFO] [stdout] 508 |         let ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/actor_critic.rs:515:72
[INFO] [stdout]     |
[INFO] [stdout] 515 |         let ac = BurnActorCritic::<TestBackend>::new(4, 2, 64, 2.5e-4, device().into(), 42);
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:132:59
[INFO] [stdout]     |
[INFO] [stdout] 132 |         let obs_t = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:133:63
[INFO] [stdout]     |
[INFO] [stdout] 133 |         let act_t = to_tensor_2d::<B::InnerBackend>(actions, &self.device.clone().into());
[INFO] [stdout]     |                                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:143:57
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:160:57
[INFO] [stdout]     |
[INFO] [stdout] 160 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:224:18
[INFO] [stdout]     |
[INFO] [stdout] 224 |                 &self.device.clone().into(),
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/continuous_q.rs:230:18
[INFO] [stdout]     |
[INFO] [stdout] 230 |                 &self.device.clone().into(),
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/continuous_q.rs:293:66
[INFO] [stdout]     |
[INFO] [stdout] 293 |         let twin = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]     |                                                                  ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/continuous_q.rs:303:66
[INFO] [stdout]     |
[INFO] [stdout] 303 |         let twin = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]     |                                                                  ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/continuous_q.rs:313:70
[INFO] [stdout]     |
[INFO] [stdout] 313 |         let mut twin = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/continuous_q.rs:326:70
[INFO] [stdout]     |
[INFO] [stdout] 326 |         let mut twin = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/deterministic.rs:169:57
[INFO] [stdout]     |
[INFO] [stdout] 169 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/deterministic.rs:176:57
[INFO] [stdout]     |
[INFO] [stdout] 176 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/deterministic.rs:189:61
[INFO] [stdout]     |
[INFO] [stdout] 189 |             let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/deterministic.rs:288:78
[INFO] [stdout]     |
[INFO] [stdout] 288 |             BurnDeterministicPolicy::<TestBackend>::new(3, 1, 64, 1.0, 3e-4, device().into());
[INFO] [stdout]     |                                                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/deterministic.rs:297:78
[INFO] [stdout]     |
[INFO] [stdout] 297 |             BurnDeterministicPolicy::<TestBackend>::new(3, 1, 64, 1.0, 3e-4, device().into());
[INFO] [stdout]     |                                                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/deterministic.rs:310:78
[INFO] [stdout]     |
[INFO] [stdout] 310 |             BurnDeterministicPolicy::<TestBackend>::new(3, 1, 64, 1.0, 3e-4, device().into());
[INFO] [stdout]     |                                                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:205:64
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:211:64
[INFO] [stdout]     |
[INFO] [stdout] 211 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:213:73
[INFO] [stdout]     |
[INFO] [stdout] 213 |         let actions_int = to_int_tensor_1d::<B::InnerBackend>(actions, &self.device.clone().into());
[INFO] [stdout]     |                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/dqn.rs:256:64
[INFO] [stdout]     |
[INFO] [stdout] 256 |         let obs_tensor = to_tensor_2d::<B::InnerBackend>(obs, &self.device.clone().into());
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/dqn.rs:298:63
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let dqn = BurnDQN::<TestBackend>::new(4, 2, 64, 1e-4, device().into());
[INFO] [stdout]     |                                                               ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/dqn.rs:307:63
[INFO] [stdout]     |
[INFO] [stdout] 307 |         let dqn = BurnDQN::<TestBackend>::new(4, 2, 64, 1e-4, device().into());
[INFO] [stdout]     |                                                               ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/dqn.rs:317:67
[INFO] [stdout]     |
[INFO] [stdout] 317 |         let mut dqn = BurnDQN::<TestBackend>::new(4, 2, 64, 1e-4, device().into());
[INFO] [stdout]     |                                                                   ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/dqn.rs:330:67
[INFO] [stdout]     |
[INFO] [stdout] 330 |         let mut dqn = BurnDQN::<TestBackend>::new(4, 2, 64, 1e-4, device().into());
[INFO] [stdout]     |                                                                   ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/dqn.rs:345:67
[INFO] [stdout]     |
[INFO] [stdout] 345 |         let mut dqn = BurnDQN::<TestBackend>::new(4, 2, 64, 1e-4, device().into());
[INFO] [stdout]     |                                                                   ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/entropy.rs:94:64
[INFO] [stdout]    |
[INFO] [stdout] 94 |         let tuner = BurnEntropyTuner::<TestBackend>::new(3e-4, device().into());
[INFO] [stdout]    |                                                                ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/entropy.rs:101:68
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut tuner = BurnEntropyTuner::<TestBackend>::new(3e-4, device().into());
[INFO] [stdout]     |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/entropy.rs:109:68
[INFO] [stdout]     |
[INFO] [stdout] 109 |         let mut tuner = BurnEntropyTuner::<TestBackend>::new(1e-2, device().into());
[INFO] [stdout]     |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/entropy.rs:124:68
[INFO] [stdout]     |
[INFO] [stdout] 124 |         let mut tuner = BurnEntropyTuner::<TestBackend>::new(1e-1, device().into());
[INFO] [stdout]     |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/stochastic.rs:202:57
[INFO] [stdout]     |
[INFO] [stdout] 202 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `<B as burn::prelude::Backend>::Device`
[INFO] [stdout]    --> src/stochastic.rs:253:57
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let dev: <B::InnerBackend as Backend>::Device = self.device.clone().into();
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<<B as burn::prelude::Backend>::Device as Into<<B as burn::prelude::Backend>::Device>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/stochastic.rs:333:79
[INFO] [stdout]     |
[INFO] [stdout] 333 |         let policy = BurnStochasticPolicy::<TestBackend>::new(3, 2, 64, 3e-4, device().into(), 42);
[INFO] [stdout]     |                                                                               ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/stochastic.rs:342:79
[INFO] [stdout]     |
[INFO] [stdout] 342 |         let policy = BurnStochasticPolicy::<TestBackend>::new(3, 1, 64, 3e-4, device().into(), 42);
[INFO] [stdout]     |                                                                               ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/stochastic.rs:355:79
[INFO] [stdout]     |
[INFO] [stdout] 355 |         let policy = BurnStochasticPolicy::<TestBackend>::new(3, 2, 64, 3e-4, device().into(), 42);
[INFO] [stdout]     |                                                                               ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/stochastic.rs:363:79
[INFO] [stdout]     |
[INFO] [stdout] 363 |         let policy = BurnStochasticPolicy::<TestBackend>::new(3, 1, 64, 3e-4, device().into(), 42);
[INFO] [stdout]     |                                                                               ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/training.rs:31:78
[INFO] [stdout]    |
[INFO] [stdout] 31 |             BurnDeterministicPolicy::<TestBackend>::new(3, 1, 64, 1.0, 1e-2, device().into());
[INFO] [stdout]    |                                                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/training.rs:32:68
[INFO] [stdout]    |
[INFO] [stdout] 32 |         let critic = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]    |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/training.rs:64:78
[INFO] [stdout]    |
[INFO] [stdout] 64 |             BurnDeterministicPolicy::<TestBackend>::new(3, 1, 64, 1.0, 1e-2, device().into());
[INFO] [stdout]    |                                                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/training.rs:65:68
[INFO] [stdout]    |
[INFO] [stdout] 65 |         let critic = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]    |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/training.rs:95:70
[INFO] [stdout]    |
[INFO] [stdout] 95 |             BurnStochasticPolicy::<TestBackend>::new(3, 2, 64, 1e-2, device().into(), 42);
[INFO] [stdout]    |                                                                      ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]   --> src/training.rs:96:68
[INFO] [stdout]    |
[INFO] [stdout] 96 |         let critic = BurnTwinQ::<TestBackend>::new(3, 2, 64, 3e-4, device().into());
[INFO] [stdout]    |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/training.rs:126:70
[INFO] [stdout]     |
[INFO] [stdout] 126 |             BurnStochasticPolicy::<TestBackend>::new(3, 1, 64, 1e-2, device().into(), 42);
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `NdArrayDevice`
[INFO] [stdout]    --> src/training.rs:127:68
[INFO] [stdout]     |
[INFO] [stdout] 127 |         let critic = BurnTwinQ::<TestBackend>::new(3, 1, 64, 3e-4, device().into());
[INFO] [stdout]     |                                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> 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: you can instead use the fully-qualified path `<NdArrayDevice as Into<NdArrayDevice>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 14s
[INFO] running `Command { std: "docker" "inspect" "e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6", kill_on_drop: false }`
[INFO] [stdout] e60f4f8c5bbac994785043db49050c799abbdde30936dfb0719cd7d986ff5ff6
