From 7ccfc9e5477e3564b4812c046be8274f98846bbb417d527ef6a3e248bdfa4ae2 Mon Sep 17 00:00:00 2001 From: Luke Jones Date: Tue, 1 Oct 2019 03:31:42 +0000 Subject: [PATCH] Accepting request 734169 from home:luke_nukem:branches:devel:languages:rust - Add patch add-option-to-allow-warnings.patch to add a config option which allows warnings and so enables v1.38 to bootstrap itself. - Update to version 1.38.0 + Language - The `#[global_allocator]` attribute can now be used in submodules. - The `#[deprecated]` attribute can now be used on macros. + Compiler - Added pipelined compilation support to `rustc`. This will improve compilation times in some cases. + Libraries - `ascii::EscapeDefault` now implements `Clone` and `Display`. - Derive macros for prelude traits (e.g. `Clone`, `Debug`, `Hash`) are now available at the same path as the trait. (e.g. The `Clone` derive macro is available at `std::clone::Clone`). This also makes all built-in macros available in `std`/`core` root. e.g. `std::include_bytes!`. - `str::Chars` now implements `Debug`. - `slice::{concat, connect, join}` now accepts `&[T]` in addition to `&T`. - `*const T` and `*mut T` now implement `marker::Unpin`. - `Arc<[T]>` and `Rc<[T]>` now implement `FromIterator`. - Added euclidean remainder and division operations (`div_euclid`, `rem_euclid`) to all numeric primitives. Additionally `checked`, `overflowing`, and `wrapping` versions are available for all integer primitives. - `thread::AccessError` now implements `Clone`, `Copy`, `Eq`, `Error`, and `PartialEq`. - `iter::{StepBy, Peekable, Take}` now implement `DoubleEndedIterator`. + Stabilized APIs - `<*const T>::cast` - `<*mut T>::cast` - `Duration::as_secs_f32` - `Duration::as_secs_f64` - `Duration::div_f32` - `Duration::div_f64` - `Duration::from_secs_f32` - `Duration::from_secs_f64` - `Duration::mul_f32` - `Duration::mul_f64` - `any::type_name` + Cargo - Added pipelined compilation support to `cargo`. - You can now pass the `--features` option multiple times to enable multiple features. + Misc - `rustc` will now warn about some incorrect uses of `mem::{uninitialized, zeroed}` that are known to cause undefined behaviour. OBS-URL: https://build.opensuse.org/request/show/734169 OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=229 --- add-option-to-allow-warnings.patch | 112 ++++++++++++++++++ rust-1.36.0-aarch64-unknown-linux-gnu.tar.xz | 3 - ....36.0-armv7-unknown-linux-gnueabihf.tar.xz | 3 - rust-1.36.0-i686-unknown-linux-gnu.tar.xz | 3 - rust-1.36.0-powerpc-unknown-linux-gnu.tar.xz | 3 - ...-1.36.0-powerpc64-unknown-linux-gnu.tar.xz | 3 - ....36.0-powerpc64le-unknown-linux-gnu.tar.xz | 3 - rust-1.36.0-s390x-unknown-linux-gnu.tar.xz | 3 - rust-1.36.0-x86_64-unknown-linux-gnu.tar.xz | 3 - rust-1.37.0-aarch64-unknown-linux-gnu.tar.xz | 3 + ....37.0-armv7-unknown-linux-gnueabihf.tar.xz | 3 + rust-1.37.0-i686-unknown-linux-gnu.tar.xz | 3 + rust-1.37.0-powerpc-unknown-linux-gnu.tar.xz | 3 + ...-1.37.0-powerpc64-unknown-linux-gnu.tar.xz | 3 + ....37.0-powerpc64le-unknown-linux-gnu.tar.xz | 3 + rust-1.37.0-s390x-unknown-linux-gnu.tar.xz | 3 + rust-1.37.0-x86_64-unknown-linux-gnu.tar.xz | 3 + rust.changes | 53 +++++++++ rust.spec | 10 +- rustc-1.37.0-src.tar.xz | 3 - rustc-1.38.0-src.tar.xz | 3 + 21 files changed, 199 insertions(+), 30 deletions(-) create mode 100644 add-option-to-allow-warnings.patch delete mode 100644 rust-1.36.0-aarch64-unknown-linux-gnu.tar.xz delete mode 100644 rust-1.36.0-armv7-unknown-linux-gnueabihf.tar.xz delete mode 100644 rust-1.36.0-i686-unknown-linux-gnu.tar.xz delete mode 100644 rust-1.36.0-powerpc-unknown-linux-gnu.tar.xz delete mode 100644 rust-1.36.0-powerpc64-unknown-linux-gnu.tar.xz delete mode 100644 rust-1.36.0-powerpc64le-unknown-linux-gnu.tar.xz delete mode 100644 rust-1.36.0-s390x-unknown-linux-gnu.tar.xz delete mode 100644 rust-1.36.0-x86_64-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-aarch64-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-armv7-unknown-linux-gnueabihf.tar.xz create mode 100644 rust-1.37.0-i686-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-powerpc-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-powerpc64-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-powerpc64le-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-s390x-unknown-linux-gnu.tar.xz create mode 100644 rust-1.37.0-x86_64-unknown-linux-gnu.tar.xz delete mode 100644 rustc-1.37.0-src.tar.xz create mode 100644 rustc-1.38.0-src.tar.xz diff --git a/add-option-to-allow-warnings.patch b/add-option-to-allow-warnings.patch new file mode 100644 index 0000000..a4c709d --- /dev/null +++ b/add-option-to-allow-warnings.patch @@ -0,0 +1,112 @@ +From 935c1c86070dfac3515a4296bf991cdf544bae27 Mon Sep 17 00:00:00 2001 +From: Marc-Antoine Perennou +Date: Tue, 27 Aug 2019 09:37:51 +0200 +Subject: [PATCH] rustbuild: allow disabling deny(warnings) for bootstrap + +When deny-warnings is not specified or set to true, the behaviour is the same as before. +When deny-warnings is set to false, warnings are now allowed + +Fixes #63911 + +Signed-off-by: Marc-Antoine Perennou +--- + src/bootstrap/bin/main.rs | 3 --- + src/bootstrap/bin/rustc.rs | 8 +++----- + src/bootstrap/bin/rustdoc.rs | 3 --- + src/bootstrap/bootstrap.py | 2 ++ + src/bootstrap/lib.rs | 3 --- + src/build_helper/lib.rs | 3 --- + 6 files changed, 5 insertions(+), 17 deletions(-) + +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs +index bd1a87c5744d..138b7f4b2610 100644 +--- a/src/bootstrap/bin/main.rs ++++ b/src/bootstrap/bin/main.rs +@@ -5,9 +5,6 @@ + //! parent directory, and otherwise documentation can be found throughout the `build` + //! directory in each respective module. + +-// NO-RUSTC-WRAPPER +-#![deny(warnings, rust_2018_idioms, unused_lifetimes)] +- + use std::env; + + use bootstrap::{Config, Build}; +diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs +index ce92ce026967..8cb48df14bfe 100644 +--- a/src/bootstrap/bin/rustc.rs ++++ b/src/bootstrap/bin/rustc.rs +@@ -15,9 +15,6 @@ + //! switching compilers for the bootstrap and for build scripts will probably + //! never get replaced. + +-// NO-RUSTC-WRAPPER +-#![deny(warnings, rust_2018_idioms, unused_lifetimes)] +- + use std::env; + use std::ffi::OsString; + use std::io; +@@ -124,8 +121,9 @@ fn main() { + + if env::var_os("RUSTC_DENY_WARNINGS").is_some() && + env::var_os("RUSTC_EXTERNAL_TOOL").is_none() { +- // When extending this list, search for `NO-RUSTC-WRAPPER` and add the new lints +- // there as well, some code doesn't go through this `rustc` wrapper. ++ // When extending this list, add the new lints to the RUSTFLAGS of the ++ // build_bootstrap function of src/bootstrap/bootstrap.py as well as ++ // some code doesn't go through this `rustc` wrapper. + cmd.arg("-Dwarnings"); + cmd.arg("-Drust_2018_idioms"); + cmd.arg("-Dunused_lifetimes"); +diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs +index ff38ee8788f5..766a3463ecd8 100644 +--- a/src/bootstrap/bin/rustdoc.rs ++++ b/src/bootstrap/bin/rustdoc.rs +@@ -2,9 +2,6 @@ + //! + //! See comments in `src/bootstrap/rustc.rs` for more information. + +-// NO-RUSTC-WRAPPER +-#![deny(warnings, rust_2018_idioms, unused_lifetimes)] +- + use std::env; + use std::process::Command; + use std::path::PathBuf; +diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py +index 86901792d797..3c56131396f2 100644 +--- a/src/bootstrap/bootstrap.py ++++ b/src/bootstrap/bootstrap.py +@@ -631,6 +631,8 @@ def build_bootstrap(self): + target_linker = self.get_toml("linker", build_section) + if target_linker is not None: + env["RUSTFLAGS"] += "-C linker=" + target_linker + " " ++ if self.get_toml("deny-warnings", "rust") != "false": ++ env["RUSTFLAGS"] += "-Dwarnings -Drust_2018_idioms -Dunused_lifetimes " + + env["PATH"] = os.path.join(self.bin_root(), "bin") + \ + os.pathsep + env["PATH"] +diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs +index c0e0ad1a857b..575844028d56 100644 +--- a/src/bootstrap/lib.rs ++++ b/src/bootstrap/lib.rs +@@ -103,9 +103,6 @@ + //! More documentation can be found in each respective module below, and you can + //! also check out the `src/bootstrap/README.md` file for more information. + +-// NO-RUSTC-WRAPPER +-#![deny(warnings, rust_2018_idioms, unused_lifetimes)] +- + #![feature(core_intrinsics)] + #![feature(drain_filter)] + +diff --git a/src/build_helper/lib.rs b/src/build_helper/lib.rs +index 131d2034675e..f035a7119188 100644 +--- a/src/build_helper/lib.rs ++++ b/src/build_helper/lib.rs +@@ -1,6 +1,3 @@ +-// NO-RUSTC-WRAPPER +-#![deny(warnings, rust_2018_idioms, unused_lifetimes)] +- + use std::fs::File; + use std::path::{Path, PathBuf}; + use std::process::{Command, Stdio}; diff --git a/rust-1.36.0-aarch64-unknown-linux-gnu.tar.xz b/rust-1.36.0-aarch64-unknown-linux-gnu.tar.xz deleted file mode 100644 index b3ed13b..0000000 --- a/rust-1.36.0-aarch64-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:009a55688042c8f64cab97a1019d2d4e2c5ebc932acaa9eadecbcb7cd8193183 -size 139261576 diff --git a/rust-1.36.0-armv7-unknown-linux-gnueabihf.tar.xz b/rust-1.36.0-armv7-unknown-linux-gnueabihf.tar.xz deleted file mode 100644 index 15afdf7..0000000 --- a/rust-1.36.0-armv7-unknown-linux-gnueabihf.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d86790c837e6ef6f80cd477148342bef4fc93f0872715bf7bdd201f9dfc932da -size 142315532 diff --git a/rust-1.36.0-i686-unknown-linux-gnu.tar.xz b/rust-1.36.0-i686-unknown-linux-gnu.tar.xz deleted file mode 100644 index 041e1bd..0000000 --- a/rust-1.36.0-i686-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e3653a203b4ef3f8f4d661872664e0741755a36665ac77b4053c3f791b2be5d4 -size 182609496 diff --git a/rust-1.36.0-powerpc-unknown-linux-gnu.tar.xz b/rust-1.36.0-powerpc-unknown-linux-gnu.tar.xz deleted file mode 100644 index 736aadf..0000000 --- a/rust-1.36.0-powerpc-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:afbb05b3c4045e9ad5270ada53a31e954358bf893154c075ee05bbcbef7a2168 -size 134270632 diff --git a/rust-1.36.0-powerpc64-unknown-linux-gnu.tar.xz b/rust-1.36.0-powerpc64-unknown-linux-gnu.tar.xz deleted file mode 100644 index ecb4bf7..0000000 --- a/rust-1.36.0-powerpc64-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0eba9783e674264c9f7af552ccd85889ff22b538147255ca153dfc10f3f91bb5 -size 145880928 diff --git a/rust-1.36.0-powerpc64le-unknown-linux-gnu.tar.xz b/rust-1.36.0-powerpc64le-unknown-linux-gnu.tar.xz deleted file mode 100644 index 4fd9028..0000000 --- a/rust-1.36.0-powerpc64le-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:abb43afccedbd902928397b302ff265114dce738a5bc3cc6fab2851bab2ab2a0 -size 149721676 diff --git a/rust-1.36.0-s390x-unknown-linux-gnu.tar.xz b/rust-1.36.0-s390x-unknown-linux-gnu.tar.xz deleted file mode 100644 index 6bcc684..0000000 --- a/rust-1.36.0-s390x-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7b2b5d9599b18e30a7f471fd2b41e0f04bfaf6c38f55d983abb9e8aa6196738 -size 159518028 diff --git a/rust-1.36.0-x86_64-unknown-linux-gnu.tar.xz b/rust-1.36.0-x86_64-unknown-linux-gnu.tar.xz deleted file mode 100644 index 685cae7..0000000 --- a/rust-1.36.0-x86_64-unknown-linux-gnu.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e8dfbbba493b7efa762daf9980406cd7266f7224e7895a9940b86ef7614f738 -size 169600936 diff --git a/rust-1.37.0-aarch64-unknown-linux-gnu.tar.xz b/rust-1.37.0-aarch64-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..0c98aef --- /dev/null +++ b/rust-1.37.0-aarch64-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aed553dbf457d8239eb3b01d4a2f422672772a0114aa43647294eca1b358d219 +size 124322996 diff --git a/rust-1.37.0-armv7-unknown-linux-gnueabihf.tar.xz b/rust-1.37.0-armv7-unknown-linux-gnueabihf.tar.xz new file mode 100644 index 0000000..aa3eb9c --- /dev/null +++ b/rust-1.37.0-armv7-unknown-linux-gnueabihf.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4ed33497b3a3b89f5910fa140bbc9f4865ebf1735898bbe06266ef5944f6fca +size 126583596 diff --git a/rust-1.37.0-i686-unknown-linux-gnu.tar.xz b/rust-1.37.0-i686-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..5865aee --- /dev/null +++ b/rust-1.37.0-i686-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f99daecd13c716b0c285b1c26225e71df2c7ca520a00285ba4c26ff767680ecb +size 177419360 diff --git a/rust-1.37.0-powerpc-unknown-linux-gnu.tar.xz b/rust-1.37.0-powerpc-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..86c8cb1 --- /dev/null +++ b/rust-1.37.0-powerpc-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d784f998e93e18e2daf369097c30eb4718d8d2a71372b0f3d0da2869942f19ec +size 124035536 diff --git a/rust-1.37.0-powerpc64-unknown-linux-gnu.tar.xz b/rust-1.37.0-powerpc64-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..d937dc5 --- /dev/null +++ b/rust-1.37.0-powerpc64-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:539492d5bfcd21261843028e4f53f753f57bb8ed45faee394701f27c01aef63b +size 128662180 diff --git a/rust-1.37.0-powerpc64le-unknown-linux-gnu.tar.xz b/rust-1.37.0-powerpc64le-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..31cda0f --- /dev/null +++ b/rust-1.37.0-powerpc64le-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eecebeaa2100950196e604d5680f9a9e7b6e97c535c246011a2247fe6ce629fc +size 131763436 diff --git a/rust-1.37.0-s390x-unknown-linux-gnu.tar.xz b/rust-1.37.0-s390x-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..0b6af21 --- /dev/null +++ b/rust-1.37.0-s390x-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e5bcf4181d0ae65ec7a20f727fc29a13c7a4864e69344a1bc19721053b7daaf +size 141808296 diff --git a/rust-1.37.0-x86_64-unknown-linux-gnu.tar.xz b/rust-1.37.0-x86_64-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..d2d7de4 --- /dev/null +++ b/rust-1.37.0-x86_64-unknown-linux-gnu.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b498a84947012064363607c29cdd2ba6fab9a5260212ec4a7151dafd0d079081 +size 165034364 diff --git a/rust.changes b/rust.changes index eaa3f46..51c68f9 100644 --- a/rust.changes +++ b/rust.changes @@ -1,3 +1,56 @@ +------------------------------------------------------------------- +Mon Sep 30 21:29:54 UTC 2019 - Luke Jones + +- Add patch add-option-to-allow-warnings.patch to add a config option + which allows warnings and so enables v1.38 to bootstrap itself. + +------------------------------------------------------------------- +Mon Sep 30 02:46:51 UTC 2019 - Luke Jones + +- Update to version 1.38.0 + + Language + - The `#[global_allocator]` attribute can now be used in submodules. + - The `#[deprecated]` attribute can now be used on macros. + + Compiler + - Added pipelined compilation support to `rustc`. This will + improve compilation times in some cases. + + Libraries + - `ascii::EscapeDefault` now implements `Clone` and `Display`. + - Derive macros for prelude traits (e.g. `Clone`, `Debug`, `Hash`) are now + available at the same path as the trait. (e.g. The `Clone` derive macro + is available at `std::clone::Clone`). This also makes all built-in macros + available in `std`/`core` root. e.g. `std::include_bytes!`. + - `str::Chars` now implements `Debug`. + - `slice::{concat, connect, join}` now accepts `&[T]` in addition to `&T`. + - `*const T` and `*mut T` now implement `marker::Unpin`. + - `Arc<[T]>` and `Rc<[T]>` now implement `FromIterator`. + - Added euclidean remainder and division operations (`div_euclid`, + `rem_euclid`) to all numeric primitives. Additionally `checked`, + `overflowing`, and `wrapping` versions are available for all + integer primitives. + - `thread::AccessError` now implements `Clone`, `Copy`, `Eq`, `Error`, and + `PartialEq`. + - `iter::{StepBy, Peekable, Take}` now implement `DoubleEndedIterator`. + + Stabilized APIs + - `<*const T>::cast` + - `<*mut T>::cast` + - `Duration::as_secs_f32` + - `Duration::as_secs_f64` + - `Duration::div_f32` + - `Duration::div_f64` + - `Duration::from_secs_f32` + - `Duration::from_secs_f64` + - `Duration::mul_f32` + - `Duration::mul_f64` + - `any::type_name` + + Cargo + - Added pipelined compilation support to `cargo`. + - You can now pass the `--features` option multiple times to enable + multiple features. + + Misc + - `rustc` will now warn about some incorrect uses of + `mem::{uninitialized, zeroed}` that are known to cause undefined behaviour. + ------------------------------------------------------------------- Tue Sep 10 18:11:30 UTC 2019 - federico@suse.com diff --git a/rust.spec b/rust.spec index 1400c4c..a250101 100644 --- a/rust.spec +++ b/rust.spec @@ -17,9 +17,9 @@ # -%global version_current 1.37.0 -%global version_previous 1.36.0 -%global version_bootstrap 1.36.0 +%global version_current 1.38.0 +%global version_previous 1.37.0 +%global version_bootstrap 1.37.0 # some sub-packages are versioned independantly %global rustfmt_version 1.0.3 %global clippy_version 0.0.212 @@ -124,6 +124,8 @@ Source108: %{dl_url}/rust-%{version_bootstrap}-powerpc-unknown-linux-gnu.ta Patch0: ignore-Wstring-conversion.patch # PATCH-FIX-UPSTREAM: Fix bug with timestamps which caused LLVM to rebuild - https://github.com/rust-lang/rust/issues/61206 Patch1: rust-61206-assume-tarball-llvm-is-fresh.patch +# PATCH-FIX-UPSTREAM: Adds an option to ignore warnings, primaraily used in this build to allow v1.38 to bootstrap itself +Patch2: add-option-to-allow-warnings.patch BuildRequires: ccache # Leap 42 to 42.3, SLE12 SP1, SP2 %if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120200 @@ -376,6 +378,7 @@ This package includes HTML documentation for Cargo. %patch0 -p1 %patch1 -p1 +%patch2 -p1 # use python3 sed -i -e "1s|#!.*|#!%{_bindir}/python3|" x.py @@ -412,6 +415,7 @@ chmod +x src/libcore/unicode/printable.py %build %define _lto_cflags %{nil} %configure \ + --set rust.deny-warnings=false \ --disable-option-checking \ --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ --enable-local-rust \ diff --git a/rustc-1.37.0-src.tar.xz b/rustc-1.37.0-src.tar.xz deleted file mode 100644 index ab5fbe1..0000000 --- a/rustc-1.37.0-src.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:10abffac50a729cf74cef6dd03193a2f4647541bd19ee9281be9e5b12ca8cdfd -size 98654252 diff --git a/rustc-1.38.0-src.tar.xz b/rustc-1.38.0-src.tar.xz new file mode 100644 index 0000000..cfc2fe0 --- /dev/null +++ b/rustc-1.38.0-src.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a7991aa4cb44ef941d71636e45a95468b520dc6fc7cf725364925bd3e3d3a34 +size 96163304