update to ghc-8.0.2

epel9
Jens Petersen 8 years ago
parent 6db3dc36a5
commit b7696275b3

2
.gitignore vendored

@ -20,3 +20,5 @@ testsuite-6.12.3.tar.bz2
/ghc-7.10.3/
/ghc-7.10.3b-src.tar.xz
/ghc-7.10.3b-testsuite.tar.xz
/ghc-8.0.2-testsuite.tar.xz
/ghc-8.0.2-src.tar.xz

@ -0,0 +1,11 @@
--- ghc-8.0.1.20161117/libraries/Cabal/Cabal/Distribution/Simple/InstallDirs.hs~ 2016-11-18 07:08:46.000000000 +0900
+++ ghc-8.0.1.20161117/libraries/Cabal/Cabal/Distribution/Simple/InstallDirs.hs 2016-12-07 18:19:02.670468156 +0900
@@ -186,7 +186,7 @@
JHC -> "$compiler"
LHC -> "$compiler"
UHC -> "$pkgid"
- _other -> "$abi",
+ _other -> "$compiler/$pkgkey",
libexecdir = case buildOS of
Windows -> "$prefix" </> "$libname"
_other -> "$prefix" </> "libexec",

@ -3,12 +3,12 @@ Description: Do not emit a warning if the .haddock file is missing
without the -doc package.
Author: Joachim Breitner <nomeata@debian.org>
Index: ghc-7.10/utils/ghc-pkg/Main.hs
Index: ghc-8.0.2/utils/ghc-pkg/Main.hs
===================================================================
--- ghc-7.10.orig/utils/ghc-pkg/Main.hs 2015-07-22 11:17:04.787751658 +0200
+++ ghc-7.10/utils/ghc-pkg/Main.hs 2015-07-22 11:17:04.787751658 +0200
@@ -1533,8 +1533,10 @@
mapM_ (checkDir True "library-dirs") (libraryDirs pkg)
--- ghc-8.0.2.orig/utils/ghc-pkg/Main.hs
+++ ghc-8.0.2/utils/ghc-pkg/Main.hs
@@ -1588,8 +1588,10 @@
mapM_ (checkDir True "dynamic-library-dirs") (libraryDynDirs pkg)
mapM_ (checkDir True "include-dirs") (includeDirs pkg)
mapM_ (checkDir True "framework-dirs") (frameworkDirs pkg)
- mapM_ (checkFile True "haddock-interfaces") (haddockInterfaces pkg)

@ -0,0 +1,39 @@
Description: rts: Ensure we always give MADV_DONTNEED a chance in osDecommitMemory
Author: Ben Gamari <bgamari.foss@gmail.com>
Origin: upstream, https://phabricator.haskell.org/D2780
Bug: https://ghc.haskell.org/trac/ghc/ticket/12865
Bug-Debian: https://bugs.debian.org/847677
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
Index: ghc-8.0.2/rts/posix/OSMem.c
===================================================================
--- ghc-8.0.2.orig/rts/posix/OSMem.c
+++ ghc-8.0.2/rts/posix/OSMem.c
@@ -522,11 +522,24 @@
#ifdef MADV_FREE
// Try MADV_FREE first, FreeBSD has both and MADV_DONTNEED
- // just swaps memory out
+ // just swaps memory out. Linux >= 4.5 has both DONTNEED and FREE; either
+ // will work as they both allow the system to free anonymous pages.
+ // It is important that we try both methods as the kernel which we were
+ // built on may differ from the kernel we are now running on.
r = madvise(at, size, MADV_FREE);
-#else
- r = madvise(at, size, MADV_DONTNEED);
+ if(r < 0) {
+ if (errno == EINVAL) {
+ // Perhaps the system doesn't support MADV_FREE; fall-through and
+ // try MADV_DONTNEED.
+ } else {
+ sysErrorBelch("unable to decommit memory");
+ }
+ } else {
+ return;
+ }
#endif
+
+ r = madvise(at, size, MADV_DONTNEED);
if(r < 0)
sysErrorBelch("unable to decommit memory");
}

@ -4,19 +4,19 @@ up in the resulting binary (in the debug section), but not the directory.
Instead of using the process id, create a hash from the command line arguments,
and assume that is going to be unique.
Index: ghc/compiler/main/SysTools.hs
Index: ghc-8.0.2/compiler/main/SysTools.hs
===================================================================
--- ghc.orig/compiler/main/SysTools.hs 2015-11-02 17:23:05.410365013 +0100
+++ ghc/compiler/main/SysTools.hs 2015-11-02 17:23:05.410365013 +0100
@@ -66,6 +66,7 @@
--- ghc-8.0.2.orig/compiler/main/SysTools.hs
+++ ghc-8.0.2/compiler/main/SysTools.hs
@@ -65,6 +65,7 @@
import Util
import DynFlags
import Exception
+import Fingerprint
import Data.IORef
import Control.Monad
@@ -1152,8 +1153,8 @@
import LlvmCodeGen.Base (llvmVersionStr, supportedLlvmVersion)
@@ -1145,8 +1146,8 @@
mapping <- readIORef dir_ref
case Map.lookup tmp_dir mapping of
Nothing -> do
@ -27,7 +27,7 @@ Index: ghc/compiler/main/SysTools.hs
mask_ $ mkTempDir prefix
Just dir -> return dir
where
@@ -1531,6 +1532,13 @@
@@ -1562,6 +1563,13 @@
getProcessID = System.Posix.Internals.c_getpid >>= return . fromIntegral
#endif

@ -0,0 +1,27 @@
Description: Use native x86_64 instructions on x32
This patch enables a few native 64-bit integer instructions
on x32 which are available on this architecture despite using
32-bit pointers. These instructions are present on x86_64 but
not on x86 and ghc checks the size of (void *) to determine
that. This method fails on x32 since despite using 32-bit
pointers and hence sizeof(void *) == 4, it still uses the
full x86_64 instruction set and software-emulated variants
of the aforementioned 64-bit integer instructions are
therefore not present in the toolchain which will make ghc
fail to build on x32.
See: https://ghc.haskell.org/trac/ghc/ticket/11571
.
Index: ghc-8.0.2/rts/RtsSymbols.c
===================================================================
--- ghc-8.0.2.orig/rts/RtsSymbols.c
+++ ghc-8.0.2/rts/RtsSymbols.c
@@ -857,7 +857,7 @@
// 64-bit support functions in libgcc.a
-#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32)
+#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) && !(defined(__x86_64__) && defined(__ILP32__))
#define RTS_LIBGCC_SYMBOLS \
SymI_NeedsProto(__divdi3) \
SymI_NeedsProto(__udivdi3) \

@ -1,5 +1,5 @@
# To bootstrap build a new version of ghc, uncomment the following:
#%%global ghc_bootstrapping 1
%global ghc_bootstrapping 1
%if %{defined ghc_bootstrapping}
%global without_testsuite 1
@ -14,59 +14,39 @@
Name: ghc
# ghc must be rebuilt after a version bump to avoid ABI change problems
Version: 7.10.3
Version: 8.0.2
# Since library subpackages are versioned:
# - release can only be reset if *all* library versions get bumped simultaneously
# (sometimes after a major release)
# - minor release numbers for a branch should be incremented monotonically
# xhtml has not had a new release for some years
Release: 55%{?dist}
Release: 56%{?dist}
Summary: Glasgow Haskell Compiler
License: %BSDHaskellReport
URL: https://haskell.org/ghc/
Source0: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}b-src.tar.xz
Source0: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}-src.tar.xz
%if %{undefined without_testsuite}
Source1: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}b-testsuite.tar.xz
Source1: http://www.haskell.org/ghc/dist/%{version}/ghc-%{version}-testsuite.tar.xz
%endif
Source3: ghc-doc-index.cron
Source4: ghc-doc-index
# absolute haddock path (was for html/libraries -> libraries)
Patch1: ghc-gen_contents_index-haddock-path.patch
# Debian patch
Patch22: ghc-armv7-VFPv3D16--NEON.patch
Patch23: ghc-7.8.3-Cabal-install-PATH-warning.patch
Patch2: ghc-7.8.3-Cabal-install-PATH-warning.patch
Patch3: ghc-8.0.2-Cabal-dynlibdir.patch
Patch12: ghc-armv7-VFPv3D16--NEON.patch
# Debian patches:
Patch24: ghc-Debian-buildpath-abi-stability.patch
Patch26: ghc-Debian-no-missing-haddock-file-warning.patch
Patch27: ghc-Debian-reproducible-tmp-names.patch
Patch28: ghc-Debian-x32-use-native-x86_64-insn.patch
Patch29: ghc-Debian-osdecommitmemory-compat.patch
# 7.10.3 needs llvm-3.5
%global llvm_major 3.5
# use "./libraries-versions.sh" to check versions
%global Cabal_ver 1.22.5.0
%global array_ver 0.5.1.0
%global base_ver 4.8.2.0
%global bin_package_db_ver 0.0.0.0
%global binary_ver 0.7.5.0
%global bytestring_ver 0.10.6.0
%global containers_ver 0.5.6.2
%global deepseq_ver 1.4.1.1
%global directory_ver 1.2.2.0
%global filepath_ver 1.4.0.0
%global ghc_prim_ver 0.4.0.0
%global haskeline_ver 0.7.2.1
%global hoopl_ver 3.10.0.2
%global hpc_ver 0.6.0.2
%global integer_gmp_ver 1.0.0.0
%global pretty_ver 1.1.2.0
%global process_ver 1.2.3.0
%global template_haskell_ver 2.10.0.0
%global terminfo_ver 0.4.0.1
%global time_ver 1.5.0.1
%global transformers_ver 0.4.2.0
%global unix_ver 2.7.1.0
%global xhtml_ver 3000.2.1
# 8.0 needs llvm-3.7
%global llvm_major 3.7
# fedora ghc has been bootstrapped on
# %%{ix86} x86_64 ppc ppc64 armv7hl s390 s390x ppc64le aarch64
@ -91,15 +71,17 @@ BuildRequires: libffi-devel
BuildRequires: ncurses-devel
# for man and docs
BuildRequires: perl
BuildRequires: libxslt, docbook-style-xsl
%if %{undefined without_testsuite}
BuildRequires: python
%endif
%ifarch armv7hl armv5tel
BuildRequires: llvm35
%if %{undefined without_manual}
BuildRequires: python-sphinx
%endif
%ifarch armv7hl
# patch22
%ifarch armv7hl aarch64
BuildRequires: llvm%{llvm_major}
%endif
%ifarch armv7hl aarch64
# patch12
BuildRequires: autoconf, automake
%endif
Requires: ghc-compiler = %{version}-%{release}
@ -145,8 +127,8 @@ Obsoletes: ghc-doc < 6.12.3-4
%if %{defined without_haddock}
Obsoletes: ghc-doc-index < %{version}-%{release}
%endif
%ifarch armv7hl armv5tel
Requires: llvm35
%ifarch armv7hl aarch64
Requires: llvm%{llvm_major}
%endif
%description compiler
@ -183,36 +165,36 @@ documention.
%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release}
# use "./libraries-versions.sh" to check versions
%if %{defined ghclibdir}
%ghc_lib_subpackage -d Cabal-%{Cabal_ver}
%ghc_lib_subpackage -d -l %BSDHaskellReport array-%{array_ver}
%define ghc_pkg_obsoletes ghc-haskell98-devel <= 2.0.0.3, ghc-haskell2010-devel <= 1.1.2.0
%ghc_lib_subpackage -d -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base-%{base_ver}
%undefine ghc_pkg_obsoletes
%ghc_lib_subpackage -d binary-%{binary_ver}
%ghc_lib_subpackage -d bytestring-%{bytestring_ver}
%ghc_lib_subpackage -d -l %BSDHaskellReport containers-%{containers_ver}
%ghc_lib_subpackage -d -l %BSDHaskellReport deepseq-%{deepseq_ver}
%ghc_lib_subpackage -d -l %BSDHaskellReport directory-%{directory_ver}
%ghc_lib_subpackage -d filepath-%{filepath_ver}
%ghc_lib_subpackage -d Cabal-1.24.2.0
%ghc_lib_subpackage -d -l %BSDHaskellReport array-0.5.1.1
%ghc_lib_subpackage -d -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base-4.9.1.0
%ghc_lib_subpackage -d binary-0.8.3.0
%ghc_lib_subpackage -d bytestring-0.10.8.1
%ghc_lib_subpackage -d -l %BSDHaskellReport containers-0.5.7.1
%ghc_lib_subpackage -d -l %BSDHaskellReport deepseq-1.4.2.0
%ghc_lib_subpackage -d -l %BSDHaskellReport directory-1.3.0.0
%ghc_lib_subpackage -d filepath-1.4.1.1
%define ghc_pkg_obsoletes ghc-bin-package-db-devel < 0.0.0.0-12
# in ghc not ghc-libraries:
%ghc_lib_subpackage -d -x ghc-%{ghc_version_override}
%undefine ghc_pkg_obsoletes
%ghc_lib_subpackage -d haskeline-%{haskeline_ver}
%ghc_lib_subpackage -d hoopl-%{hoopl_ver}
%ghc_lib_subpackage -d hpc-%{hpc_ver}
%ghc_lib_subpackage -d pretty-%{pretty_ver}
%define ghc_pkg_obsoletes ghc-process-leksah-devel < 1.0.1.4-14
%ghc_lib_subpackage -d -l %BSDHaskellReport process-%{process_ver}
%undefine ghc_pkg_obsoletes
%ghc_lib_subpackage -d template-haskell-%{template_haskell_ver}
%ghc_lib_subpackage -d -c ncurses-devel%{?_isa} terminfo-%{terminfo_ver}
%ghc_lib_subpackage -d time-%{time_ver}
%ghc_lib_subpackage -d transformers-%{transformers_ver}
%ghc_lib_subpackage -d unix-%{unix_ver}
%ghc_lib_subpackage -d ghc-boot-%{ghc_version_override}
%ghc_lib_subpackage -d ghc-boot-th-%{ghc_version_override}
%ghc_lib_subpackage -d -x ghci-%{ghc_version_override}
%ghc_lib_subpackage -d haskeline-0.7.3.0
%ghc_lib_subpackage -d hoopl-3.10.2.1
%ghc_lib_subpackage -d hpc-0.6.0.3
%ghc_lib_subpackage -d pretty-1.1.3.3
%ghc_lib_subpackage -d -l %BSDHaskellReport process-1.4.3.0
%ghc_lib_subpackage -d template-haskell-2.11.1.0
%ghc_lib_subpackage -d -c ncurses-devel%{?_isa} terminfo-0.4.0.2
%ghc_lib_subpackage -d time-1.6.0.1
%ghc_lib_subpackage -d transformers-0.5.2.0
%ghc_lib_subpackage -d unix-2.7.2.1
%if %{undefined without_haddock}
%ghc_lib_subpackage -d xhtml-%{xhtml_ver}
%ghc_lib_subpackage -d xhtml-3000.2.1
%endif
%endif
@ -238,22 +220,24 @@ except the ghc library, which is installed by the toplevel ghc metapackage.
%prep
%setup -q -n %{name}-%{version} %{!?without_testsuite:-b1}
# gen_contents_index: use absolute path for haddock
%patch1 -p1 -b .orig
%patch2 -p1 -b .orig
%patch3 -p1 -b .orig
%if 0%{?fedora} || 0%{?rhel} > 6
rm -r libffi-tarballs
%endif
%ifarch armv7hl
%patch22 -p1 -b .orig
%patch12 -p1 -b .orig
%endif
%patch23 -p1 -b .orig
%patch24 -p1 -b .orig
%patch26 -p1 -b .orig
%patch27 -p1 -b .orig
%patch28 -p1 -b .orig
%patch29 -p1 -b .orig
%global gen_contents_index gen_contents_index.orig
%if %{undefined without_haddock}
@ -263,22 +247,19 @@ if [ ! -f "libraries/%{gen_contents_index}" ]; then
fi
%endif
mv libraries/integer-gmp{,.old}
ln -s integer-gmp2 libraries/integer-gmp
%build
# http://hackage.haskell.org/trac/ghc/wiki/Platforms
# cf https://github.com/gentoo-haskell/gentoo-haskell/tree/master/dev-lang/ghc
cat > mk/build.mk << EOF
%if %{undefined ghc_bootstrapping}
%ifarch armv7hl armv5tel
%ifarch armv7hl aarch64
BuildFlavour = perf-llvm
%else
BuildFlavour = perf
%endif
%else
%ifarch armv7hl armv5tel
%ifarch armv7hl aarch64
BuildFlavour = quick-llvm
%else
BuildFlavour = quick
@ -288,25 +269,38 @@ GhcLibWays = v dyn %{!?without_prof:p}
%if %{defined without_haddock}
HADDOCK_DOCS = NO
%endif
%if %{defined without_manual}
BUILD_DOCBOOK_HTML = NO
EXTRA_HADDOCK_OPTS += --hyperlinked-source
%if %{undefined without_manual}
BUILD_MAN = yes
%else
BUILD_MAN = no
%endif
BUILD_SPHINX_PDF=no
EOF
## for verbose build output
#GhcStage1HcOpts=-v4
## enable RTS debugging:
## (http://ghc.haskell.org/trac/ghc/wiki/Debugging/RuntimeSystem)
#EXTRA_HC_OPTS=-debug
EOF
%ifarch armv7hl
%ifarch armv7hl aarch64
autoreconf
%endif
# still happens when bootstrapping 8.0 with 7.10:
# x86_64: /usr/bin/ld: utils/ghc-pwd/dist-boot/Main.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
# aarch64: /usr/bin/ld: /usr/lib64/ghc-7.6.3/libHSrts.a(RtsFlags.o)(.text+0x578): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `stdout@@GLIBC_2.17'
%ifarch x86_64 armv7hl aarch64 s390x ppc64 ppc64le
%global _hardened_ldflags %{nil}
%endif
%ifnarch aarch64 ppc64 ppc64le
export CFLAGS="${CFLAGS:-%optflags}"
%else
%if %{undefined ghc_bootstrapping}
export CFLAGS="${CFLAGS:-%optflags}"
%endif
%endif
export LDFLAGS="${LDFLAGS:-%{?__global_ldflags}}"
# * %%configure induces cross-build due to different target/host/build platform names
# * --with-gcc=%{_bindir}/gcc is to avoid ccache hardcoding problem when bootstrapping
@ -315,7 +309,7 @@ export LDFLAGS="${LDFLAGS:-%{?__global_ldflags}}"
--datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} \
--libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} \
--sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} \
--with-gcc=%{_bindir}/gcc \
--with-gcc=%{_bindir}/gcc --docdir=%{_docdir}/ghc \
--with-llc=%{_bindir}/llc-%{llvm_major} --with-opt=%{_bindir}/opt-%{llvm_major} \
%if 0%{?fedora} || 0%{?rhel} > 6
--with-system-libffi \
@ -340,10 +334,10 @@ done
# ghc-base should own ghclibdir
echo "%%dir %{ghclibdir}" >> ghc-base.files
%ghc_gen_filelists bin-package-db %{bin_package_db_ver}
%ghc_gen_filelists ghc %{ghc_version_override}
%ghc_gen_filelists ghc-prim %{ghc_prim_ver}
%ghc_gen_filelists integer-gmp %{integer_gmp_ver}
%ghc_gen_filelists ghci %{ghc_version_override}
%ghc_gen_filelists ghc-prim 0.5.0.0
%ghc_gen_filelists integer-gmp 1.0.0.1
%define merge_filelist()\
cat ghc-%1.files >> ghc-%2.files\
@ -353,7 +347,6 @@ echo "%%license libraries/LICENSE.%1" >> ghc-%2.files
%merge_filelist integer-gmp base
%merge_filelist ghc-prim base
%merge_filelist bin-package-db ghc
# add rts libs
echo "%%dir %{ghclibdir}/rts" >> ghc-base.files
@ -364,7 +357,7 @@ ls %{buildroot}%{ghclibdir}/rts/libffi.so.* >> ghc-base.files
sed -i -e "s|^%{buildroot}||g" ghc-base.files
ls -d %{buildroot}%{ghclibdir}/rts/lib*.a %{buildroot}%{ghclibdir}/package.conf.d/builtin_*.conf %{buildroot}%{ghclibdir}/include >> ghc-base-devel.files
ls -d %{buildroot}%{ghclibdir}/rts/lib*.a %{buildroot}%{ghclibdir}/package.conf.d/rts.conf %{buildroot}%{ghclibdir}/include >> ghc-base-devel.files
%if 0%{?rhel} && 0%{?rhel} < 7
ls %{buildroot}%{ghclibdir}/rts/libffi.so >> ghc-base-devel.files
%endif
@ -493,11 +486,16 @@ fi
%{ghclibdir}/bin/ghc-pkg
%{ghclibdir}/bin/hpc
%{ghclibdir}/bin/hsc2hs
%{ghclibdir}/bin/ghc-iserv
%{ghclibdir}/bin/ghc-iserv-dyn
%if %{undefined without_prof}
%{ghclibdir}/bin/ghc-iserv-prof
%endif
%{ghclibdir}/bin/runghc
# unknown (unregisterized) archs
%ifnarch ppc64 s390 s390x ppc64le %{mips} aarch64
%{ghclibdir}/ghc-split
%ifnarch s390 s390x aarch64 %{mips}
%{ghclibdir}/bin/ghc-split
%endif
%{ghclibdir}/bin/unlit
%{ghclibdir}/ghc-usage.txt
%{ghclibdir}/ghci-usage.txt
%dir %{ghclibdir}/package.conf.d
@ -505,8 +503,6 @@ fi
%{ghclibdir}/platformConstants
%{ghclibdir}/settings
%{ghclibdir}/template-hsc.h
%{ghclibdir}/unlit
%{_mandir}/man1/ghc.*
%dir %{_docdir}/ghc
%dir %{ghc_html_dir}
%if %{undefined without_haddock}
@ -517,13 +513,14 @@ fi
%{ghclibdir}/html
%{ghclibdir}/latex
%if %{undefined without_manual}
# https://ghc.haskell.org/trac/ghc/ticket/12939
#%{_mandir}/man1/ghc.*
## needs pandoc
#%%{ghc_html_dir}/Cabal
%{ghc_html_dir}/haddock
%{ghc_html_dir}/users_guide
%endif
%dir %{ghc_html_dir}/libraries
%{ghc_html_dir}/libraries/frames.html
%{ghc_html_dir}/libraries/gen_contents_index
%{ghc_html_dir}/libraries/hslogo-16.png
%{ghc_html_dir}/libraries/ocean.css
@ -547,6 +544,13 @@ fi
%changelog
* Fri Feb 17 2017 Jens Petersen <petersen@redhat.com> - 8.0.2-56
- update to GHC 8.0 (bootstrap build)
- backport changes from http://github.com/fedora-haskell/ghc
adding some new patches from Debian
- use llvm3.7 on ARM archs
- user guide now built with sphinx
* Mon Feb 13 2017 Jens Petersen <petersen@redhat.com> - 7.10.3-55
- use new ghc_lib_subpackage -d option to fix handling of .files
- configure llc-3.5 and opt-3.5 explicitly for all arch's

@ -1,2 +1,2 @@
d614735d9dac67432f8c6df7e45c76f7 ghc-7.10.3b-src.tar.xz
a2df2aaf3424127f0811c42d386c079b ghc-7.10.3b-testsuite.tar.xz
SHA512 (ghc-8.0.2-src.tar.xz) = 58ea3853cd93b556ecdc4abd0be079b2621171b8491f59004ea4e036a4cba4470aaafe6591b942e0a50a64bdc47540e01fe6900212a1ef7087850112d9bfc5ef
SHA512 (ghc-8.0.2-testsuite.tar.xz) = 1b35fc6a5f482dc1e33f21ddf4c4fe17591990f16a4105c787225980a5f4dbaa42205204faf547f8e1b53f6356aefde9d3ff50cc416c9bf1a9ac08feadd74a99

Loading…
Cancel
Save