95.0.4638.69

epel8
Tom spot Callaway 3 years ago
parent f274478b7e
commit 9de3cc7e1f

@ -1,23 +0,0 @@
diff -up chromium-77.0.3865.75/third_party/one_euro_filter/src/one_euro_filter.h.gcc-include-memory chromium-77.0.3865.75/third_party/one_euro_filter/src/one_euro_filter.h
--- chromium-77.0.3865.75/third_party/one_euro_filter/src/one_euro_filter.h.gcc-include-memory 2019-09-13 14:44:24.962770079 +0200
+++ chromium-77.0.3865.75/third_party/one_euro_filter/src/one_euro_filter.h 2019-09-13 14:44:45.347073612 +0200
@@ -3,6 +3,8 @@
#include "low_pass_filter.h"
+#include <memory>
+
namespace one_euro_filter {
namespace test {
class OneEuroFilterTest;
diff -up chromium-80.0.3987.106/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h.missing-memory chromium-80.0.3987.106/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h
--- chromium-80.0.3987.106/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h.missing-memory 2020-02-21 12:25:17.206021379 -0500
+++ chromium-80.0.3987.106/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h 2020-02-21 12:25:31.613759976 -0500
@@ -12,6 +12,7 @@
#define MODULES_AUDIO_PROCESSING_AEC3_REVERB_MODEL_ESTIMATOR_H_
#include <array>
+#include <memory>
#include <vector>
#include "absl/types/optional.h"

@ -0,0 +1,41 @@
From c23f09d436b566934d02c26a19e3cf5d31545855 Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Sat, 4 Sep 2021 17:02:00 +0000
Subject: [PATCH] GCC: fix template specialization in webrtc::BitstreamReader
GCC complains that explicit specialization in non-namespace scope
is happening for webrtc::BitstreamReader::Read(). However, specialization
for bool isn't used because std::is_unsigned<bool>::value returns true.
Add std::is_same for bool check and enable second specialization only
for bool types.
---
third_party/webrtc/rtc_base/bitstream_reader.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/third_party/webrtc/rtc_base/bitstream_reader.h b/third_party/webrtc/rtc_base/bitstream_reader.h
index 8c0f66f..cd8537f 100644
--- a/third_party/webrtc/rtc_base/bitstream_reader.h
+++ b/third_party/webrtc/rtc_base/bitstream_reader.h
@@ -61,14 +61,16 @@ class BitstreamReader {
// Reads unsigned integer of fixed width.
template <typename T,
typename std::enable_if<std::is_unsigned<T>::value &&
+ !std::is_same<T, bool>::value &&
sizeof(T) <= 8>::type* = nullptr>
ABSL_MUST_USE_RESULT T Read() {
return rtc::dchecked_cast<T>(ReadBits(sizeof(T) * 8));
}
// Reads single bit as boolean.
- template <>
- ABSL_MUST_USE_RESULT bool Read<bool>() {
+ template <typename T,
+ typename std::enable_if<std::is_same<T, bool>::value>::type* = nullptr>
+ ABSL_MUST_USE_RESULT bool Read() {
return ReadBit() != 0;
}
--
2.32.0

@ -0,0 +1,229 @@
From 3d4ba855e014987cad86d62a8dff533492255695 Mon Sep 17 00:00:00 2001
From: Antonio Sanchez <cantonios@google.com>
Date: Wed, 1 Sep 2021 14:11:21 -0700
Subject: [PATCH] Fix AVX integer packet issues.
Most are instances of AVX2 functions not protected by
`EIGEN_VECTORIZE_AVX2`. There was also a missing semi-colon
for AVX512.
---
Eigen/src/Core/arch/AVX/PacketMath.h | 83 ++++++++++++++++++-------
Eigen/src/Core/arch/AVX512/PacketMath.h | 6 +-
2 files changed, 63 insertions(+), 26 deletions(-)
diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
index dc1a1d6b0..247ee4efd 100644
--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -262,10 +262,6 @@ template<> EIGEN_STRONG_INLINE Packet4d peven_mask(const Packet4d& /*a*/) { retu
template<> EIGEN_STRONG_INLINE Packet8f pload1<Packet8f>(const float* from) { return _mm256_broadcast_ss(from); }
template<> EIGEN_STRONG_INLINE Packet4d pload1<Packet4d>(const double* from) { return _mm256_broadcast_sd(from); }
-template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return _mm256_add_ps(_mm256_set1_ps(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
-template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return _mm256_add_pd(_mm256_set1_pd(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
-template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return _mm256_add_epi32(_mm256_set1_epi32(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
-
template<> EIGEN_STRONG_INLINE Packet8f padd<Packet8f>(const Packet8f& a, const Packet8f& b) { return _mm256_add_ps(a,b); }
template<> EIGEN_STRONG_INLINE Packet4d padd<Packet4d>(const Packet4d& a, const Packet4d& b) { return _mm256_add_pd(a,b); }
template<> EIGEN_STRONG_INLINE Packet8i padd<Packet8i>(const Packet8i& a, const Packet8i& b) {
@@ -278,6 +274,10 @@ template<> EIGEN_STRONG_INLINE Packet8i padd<Packet8i>(const Packet8i& a, const
#endif
}
+template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return padd(pset1(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
+template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return padd(pset1(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
+template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return padd(pset1(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
+
template<> EIGEN_STRONG_INLINE Packet8f psub<Packet8f>(const Packet8f& a, const Packet8f& b) { return _mm256_sub_ps(a,b); }
template<> EIGEN_STRONG_INLINE Packet4d psub<Packet4d>(const Packet4d& a, const Packet4d& b) { return _mm256_sub_pd(a,b); }
template<> EIGEN_STRONG_INLINE Packet8i psub<Packet8i>(const Packet8i& a, const Packet8i& b) {
@@ -300,7 +300,7 @@ template<> EIGEN_STRONG_INLINE Packet4d pnegate(const Packet4d& a)
}
template<> EIGEN_STRONG_INLINE Packet8i pnegate(const Packet8i& a)
{
- return _mm256_sub_epi32(_mm256_set1_epi32(0), a);
+ return psub(pzero(a), a);
}
template<> EIGEN_STRONG_INLINE Packet8f pconj(const Packet8f& a) { return a; }
@@ -419,7 +419,13 @@ template<> EIGEN_STRONG_INLINE Packet4d pmin<Packet4d>(const Packet4d& a, const
#endif
}
template<> EIGEN_STRONG_INLINE Packet8i pmin<Packet8i>(const Packet8i& a, const Packet8i& b) {
+#ifdef EIGEN_VECTORIZE_AVX2
return _mm256_min_epi32(a, b);
+#else
+ __m128i lo = _mm_min_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
+ __m128i hi = _mm_min_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
+ return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
+#endif
}
template<> EIGEN_STRONG_INLINE Packet8f pmax<Packet8f>(const Packet8f& a, const Packet8f& b) {
@@ -445,7 +451,13 @@ template<> EIGEN_STRONG_INLINE Packet4d pmax<Packet4d>(const Packet4d& a, const
#endif
}
template<> EIGEN_STRONG_INLINE Packet8i pmax<Packet8i>(const Packet8i& a, const Packet8i& b) {
+#ifdef EIGEN_VECTORIZE_AVX2
return _mm256_max_epi32(a, b);
+#else
+ __m128i lo = _mm_max_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
+ __m128i hi = _mm_max_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
+ return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
+#endif
}
// Add specializations for min/max with prescribed NaN progation.
@@ -641,17 +653,25 @@ template<> EIGEN_STRONG_INLINE Packet8f ploaddup<Packet8f>(const float* from)
// then we can perform a consistent permutation on the global register to get everything in shape:
return _mm256_permute_ps(tmp, _MM_SHUFFLE(3,3,2,2));
}
-// Loads 2 doubles from memory a returns the packet {a0, a0 a1, a1}
+// Loads 2 doubles from memory a returns the packet {a0, a0, a1, a1}
template<> EIGEN_STRONG_INLINE Packet4d ploaddup<Packet4d>(const double* from)
{
Packet4d tmp = _mm256_broadcast_pd((const __m128d*)(const void*)from);
return _mm256_permute_pd(tmp, 3<<2);
}
-// Loads 4 integers from memory a returns the packet {a0, a0 a1, a1, a2, a2, a3, a3}
+// Loads 4 integers from memory a returns the packet {a0, a0, a1, a1, a2, a2, a3, a3}
template<> EIGEN_STRONG_INLINE Packet8i ploaddup<Packet8i>(const int* from)
{
- Packet8i a = _mm256_castsi128_si256(pload<Packet4i>(from));
+#ifdef EIGEN_VECTORIZE_AVX2
+ const Packet8i a = _mm256_castsi128_si256(pload<Packet4i>(from));
return _mm256_permutevar8x32_epi32(a, _mm256_setr_epi32(0, 0, 1, 1, 2, 2, 3, 3));
+#else
+ __m256 tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
+ // mimic an "inplace" permutation of the lower 128bits using a blend
+ tmp = _mm256_blend_ps(tmp,_mm256_castps128_ps256(_mm_permute_ps( _mm256_castps256_ps128(tmp), _MM_SHUFFLE(1,0,1,0))), 15);
+ // then we can perform a consistent permutation on the global register to get everything in shape:
+ return _mm256_castps_si256(_mm256_permute_ps(tmp, _MM_SHUFFLE(3,3,2,2)));
+#endif
}
// Loads 2 floats from memory a returns the packet {a0, a0 a0, a0, a1, a1, a1, a1}
@@ -662,7 +682,7 @@ template<> EIGEN_STRONG_INLINE Packet8f ploadquad<Packet8f>(const float* from)
}
template<> EIGEN_STRONG_INLINE Packet8i ploadquad<Packet8i>(const int* from)
{
- return _mm256_inserti128_si256(_mm256_set1_epi32(*from), _mm_set1_epi32(*(from+1)), 1);
+ return _mm256_insertf128_si256(_mm256_set1_epi32(*from), _mm_set1_epi32(*(from+1)), 1);
}
template<> EIGEN_STRONG_INLINE void pstore<float>(float* to, const Packet8f& from) { EIGEN_DEBUG_ALIGNED_STORE _mm256_store_ps(to, from); }
@@ -723,13 +743,13 @@ template<> EIGEN_DEVICE_FUNC inline void pscatter<double, Packet4d>(double* to,
}
template<> EIGEN_DEVICE_FUNC inline void pscatter<int, Packet8i>(int* to, const Packet8i& from, Index stride)
{
- __m128i low = _mm256_extracti128_si256(from, 0);
+ __m128i low = _mm256_extractf128_si256(from, 0);
to[stride*0] = _mm_extract_epi32(low, 0);
to[stride*1] = _mm_extract_epi32(low, 1);
to[stride*2] = _mm_extract_epi32(low, 2);
to[stride*3] = _mm_extract_epi32(low, 3);
- __m128i high = _mm256_extracti128_si256(from, 1);
+ __m128i high = _mm256_extractf128_si256(from, 1);
to[stride*4] = _mm_extract_epi32(high, 0);
to[stride*5] = _mm_extract_epi32(high, 1);
to[stride*6] = _mm_extract_epi32(high, 2);
@@ -803,7 +823,13 @@ template<> EIGEN_STRONG_INLINE Packet4d pabs(const Packet4d& a)
}
template<> EIGEN_STRONG_INLINE Packet8i pabs(const Packet8i& a)
{
+#ifdef EIGEN_VECTORIZE_AVX2
return _mm256_abs_epi32(a);
+#else
+ __m128i lo = _mm_abs_epi32(_mm256_extractf128_si256(a, 0));
+ __m128i hi = _mm_abs_epi32(_mm256_extractf128_si256(a, 1));
+ return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
+#endif
}
template<> EIGEN_STRONG_INLINE Packet8f pfrexp<Packet8f>(const Packet8f& a, Packet8f& exponent) {
@@ -989,16 +1015,27 @@ ptranspose(PacketBlock<Packet8f,4>& kernel) {
#define MM256_SHUFFLE_EPI32(A, B, M) \
_mm256_castps_si256(_mm256_shuffle_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B), M))
+#ifdef EIGEN_VECTORIZE_AVX2
+#define MM256_UNPACKLO_EPI32(A, B) \
+ _mm256_castps_si256(_mm256_unpacklo_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
+#define MM256_UNPACKHI_EPI32(A, B) \
+ _mm256_castps_si256(_mm256_unpackhi_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
+#else
+#define MM256_UNPACKLO_EPI32(A, B) _mm256_unpacklo_ps(A, B)
+#define MM256_UNPACKHI_EPI32(A, B) _mm256_unpackhi_ps(A, B)
+#endif
+
+
EIGEN_DEVICE_FUNC inline void
ptranspose(PacketBlock<Packet8i,8>& kernel) {
- __m256i T0 = _mm256_unpacklo_epi32(kernel.packet[0], kernel.packet[1]);
- __m256i T1 = _mm256_unpackhi_epi32(kernel.packet[0], kernel.packet[1]);
- __m256i T2 = _mm256_unpacklo_epi32(kernel.packet[2], kernel.packet[3]);
- __m256i T3 = _mm256_unpackhi_epi32(kernel.packet[2], kernel.packet[3]);
- __m256i T4 = _mm256_unpacklo_epi32(kernel.packet[4], kernel.packet[5]);
- __m256i T5 = _mm256_unpackhi_epi32(kernel.packet[4], kernel.packet[5]);
- __m256i T6 = _mm256_unpacklo_epi32(kernel.packet[6], kernel.packet[7]);
- __m256i T7 = _mm256_unpackhi_epi32(kernel.packet[6], kernel.packet[7]);
+ __m256i T0 = MM256_UNPACKLO_EPI32(kernel.packet[0], kernel.packet[1]);
+ __m256i T1 = MM256_UNPACKHI_EPI32(kernel.packet[0], kernel.packet[1]);
+ __m256i T2 = MM256_UNPACKLO_EPI32(kernel.packet[2], kernel.packet[3]);
+ __m256i T3 = MM256_UNPACKHI_EPI32(kernel.packet[2], kernel.packet[3]);
+ __m256i T4 = MM256_UNPACKLO_EPI32(kernel.packet[4], kernel.packet[5]);
+ __m256i T5 = MM256_UNPACKHI_EPI32(kernel.packet[4], kernel.packet[5]);
+ __m256i T6 = MM256_UNPACKLO_EPI32(kernel.packet[6], kernel.packet[7]);
+ __m256i T7 = MM256_UNPACKHI_EPI32(kernel.packet[6], kernel.packet[7]);
__m256i S0 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(1,0,1,0));
__m256i S1 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(3,2,3,2));
__m256i S2 = MM256_SHUFFLE_EPI32(T1,T3,_MM_SHUFFLE(1,0,1,0));
@@ -1019,10 +1056,10 @@ ptranspose(PacketBlock<Packet8i,8>& kernel) {
EIGEN_DEVICE_FUNC inline void
ptranspose(PacketBlock<Packet8i,4>& kernel) {
- __m256i T0 = _mm256_unpacklo_epi32(kernel.packet[0], kernel.packet[1]);
- __m256i T1 = _mm256_unpackhi_epi32(kernel.packet[0], kernel.packet[1]);
- __m256i T2 = _mm256_unpacklo_epi32(kernel.packet[2], kernel.packet[3]);
- __m256i T3 = _mm256_unpackhi_epi32(kernel.packet[2], kernel.packet[3]);
+ __m256i T0 = MM256_UNPACKLO_EPI32(kernel.packet[0], kernel.packet[1]);
+ __m256i T1 = MM256_UNPACKHI_EPI32(kernel.packet[0], kernel.packet[1]);
+ __m256i T2 = MM256_UNPACKLO_EPI32(kernel.packet[2], kernel.packet[3]);
+ __m256i T3 = MM256_UNPACKHI_EPI32(kernel.packet[2], kernel.packet[3]);
__m256i S0 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(1,0,1,0));
__m256i S1 = MM256_SHUFFLE_EPI32(T0,T2,_MM_SHUFFLE(3,2,3,2));
diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h
index 6ce15c677..0810f66ee 100644
--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h
+++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX512/PacketMath.h
@@ -1028,7 +1028,7 @@ template<> EIGEN_STRONG_INLINE Packet8d pldexp<Packet8d>(const Packet8d& a, cons
// AVX512F does not define _mm512_extracti32x8_epi32 to extract _m256i from _m512i
#define EIGEN_EXTRACT_8i_FROM_16i(INPUT, OUTPUT) \
- __m256i OUTPUT##_0 = _mm512_extracti32x8_epi32(INPUT, 0) \
+ __m256i OUTPUT##_0 = _mm512_extracti32x8_epi32(INPUT, 0); \
__m256i OUTPUT##_1 = _mm512_extracti32x8_epi32(INPUT, 1)
#else
#define EIGEN_EXTRACT_8f_FROM_16f(INPUT, OUTPUT) \
@@ -1037,7 +1037,7 @@ template<> EIGEN_STRONG_INLINE Packet8d pldexp<Packet8d>(const Packet8d& a, cons
_mm512_extractf32x4_ps(INPUT, 1), 1); \
__m256 OUTPUT##_1 = _mm256_insertf128_ps( \
_mm256_castps128_ps256(_mm512_extractf32x4_ps(INPUT, 2)), \
- _mm512_extractf32x4_ps(INPUT, 3), 1);
+ _mm512_extractf32x4_ps(INPUT, 3), 1)
#define EIGEN_EXTRACT_8i_FROM_16i(INPUT, OUTPUT) \
__m256i OUTPUT##_0 = _mm256_insertf128_si256( \
@@ -1045,7 +1045,7 @@ template<> EIGEN_STRONG_INLINE Packet8d pldexp<Packet8d>(const Packet8d& a, cons
_mm512_extracti32x4_epi32(INPUT, 1), 1); \
__m256i OUTPUT##_1 = _mm256_insertf128_si256( \
_mm256_castsi128_si256(_mm512_extracti32x4_epi32(INPUT, 2)), \
- _mm512_extracti32x4_epi32(INPUT, 3), 1);
+ _mm512_extracti32x4_epi32(INPUT, 3), 1)
#endif
#ifdef EIGEN_VECTORIZE_AVX512DQ
--
GitLab

@ -0,0 +1,30 @@
From def145547fc6abd14236e103b9443a36064f664f Mon Sep 17 00:00:00 2001
From: Antonio Sanchez <cantonios@google.com>
Date: Thu, 2 Sep 2021 16:21:07 -0700
Subject: [PATCH] Add missing packet types in pset1 call.
Oops, introduced this when "fixing" integer packets.
---
Eigen/src/Core/arch/AVX/PacketMath.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
index 247ee4efd..8da9031dc 100644
--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -274,9 +274,9 @@ template<> EIGEN_STRONG_INLINE Packet8i padd<Packet8i>(const Packet8i& a, const
#endif
}
-template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return padd(pset1(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
-template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return padd(pset1(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
-template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return padd(pset1(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
+template<> EIGEN_STRONG_INLINE Packet8f plset<Packet8f>(const float& a) { return padd(pset1<Packet8f>(a), _mm256_set_ps(7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0)); }
+template<> EIGEN_STRONG_INLINE Packet4d plset<Packet4d>(const double& a) { return padd(pset1<Packet4d>(a), _mm256_set_pd(3.0,2.0,1.0,0.0)); }
+template<> EIGEN_STRONG_INLINE Packet8i plset<Packet8i>(const int& a) { return padd(pset1<Packet8i>(a), _mm256_set_epi32(7,6,5,4,3,2,1,0)); }
template<> EIGEN_STRONG_INLINE Packet8f psub<Packet8f>(const Packet8f& a, const Packet8f& b) { return _mm256_sub_ps(a,b); }
template<> EIGEN_STRONG_INLINE Packet4d psub<Packet4d>(const Packet4d& a, const Packet4d& b) { return _mm256_sub_pd(a,b); }
--
GitLab

@ -0,0 +1,44 @@
From 7792b1e909a98703181aecb8810b4b654004c25d Mon Sep 17 00:00:00 2001
From: Antonio Sanchez <cantonios@google.com>
Date: Fri, 3 Sep 2021 10:41:35 -0700
Subject: [PATCH] Fix AVX2 PacketMath.h.
There were a couple typos ps -> epi32, and an unaligned load issue.
---
Eigen/src/Core/arch/AVX/PacketMath.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
index 8da9031dc..41cb7af9c 100644
--- a/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
+++ b/third_party/eigen3/src/Eigen/src/Core/arch/AVX/PacketMath.h
@@ -663,7 +663,7 @@ template<> EIGEN_STRONG_INLINE Packet4d ploaddup<Packet4d>(const double* from)
template<> EIGEN_STRONG_INLINE Packet8i ploaddup<Packet8i>(const int* from)
{
#ifdef EIGEN_VECTORIZE_AVX2
- const Packet8i a = _mm256_castsi128_si256(pload<Packet4i>(from));
+ const Packet8i a = _mm256_castsi128_si256(ploadu<Packet4i>(from));
return _mm256_permutevar8x32_epi32(a, _mm256_setr_epi32(0, 0, 1, 1, 2, 2, 3, 3));
#else
__m256 tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
@@ -1015,14 +1015,14 @@ ptranspose(PacketBlock<Packet8f,4>& kernel) {
#define MM256_SHUFFLE_EPI32(A, B, M) \
_mm256_castps_si256(_mm256_shuffle_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B), M))
-#ifdef EIGEN_VECTORIZE_AVX2
+#ifndef EIGEN_VECTORIZE_AVX2
#define MM256_UNPACKLO_EPI32(A, B) \
_mm256_castps_si256(_mm256_unpacklo_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
#define MM256_UNPACKHI_EPI32(A, B) \
_mm256_castps_si256(_mm256_unpackhi_ps(_mm256_castsi256_ps(A), _mm256_castsi256_ps(B)))
#else
-#define MM256_UNPACKLO_EPI32(A, B) _mm256_unpacklo_ps(A, B)
-#define MM256_UNPACKHI_EPI32(A, B) _mm256_unpackhi_ps(A, B)
+#define MM256_UNPACKLO_EPI32(A, B) _mm256_unpacklo_epi32(A, B)
+#define MM256_UNPACKHI_EPI32(A, B) _mm256_unpackhi_epi32(A, B)
#endif
--
GitLab

@ -0,0 +1,30 @@
diff --git a/third_party/libyuv/source/row_neon64.cc b/third_party/libyuv/source/row_neon64.cc
index 350c964..2aab413 100644
--- a/third_party/libyuv/source/row_neon64.cc
+++ b/third_party/libyuv/source/row_neon64.cc
@@ -1835,7 +1835,7 @@ void ARGBToAB64Row_NEON(const uint8_t* src_argb,
: "+r"(src_argb), // %0
"+r"(dst_ab64), // %1
"+r"(width) // %2
- : "m"(kShuffleARGBToABGR) // %3
+ : "Q"(kShuffleARGBToABGR) // %3
: "cc", "memory", "v0", "v1", "v2", "v3", "v4");
}
@@ -1859,7 +1859,7 @@ void AR64ToARGBRow_NEON(const uint16_t* src_ar64,
: "+r"(src_ar64), // %0
"+r"(dst_argb), // %1
"+r"(width) // %2
- : "m"(kShuffleAR64ToARGB) // %3
+ : "Q"(kShuffleAR64ToARGB) // %3
: "cc", "memory", "v0", "v1", "v2", "v3", "v4");
}
@@ -1883,7 +1883,7 @@ void AB64ToARGBRow_NEON(const uint16_t* src_ab64,
: "+r"(src_ab64), // %0
"+r"(dst_argb), // %1
"+r"(width) // %2
- : "m"(kShuffleAB64ToARGB) // %3
+ : "Q"(kShuffleAB64ToARGB) // %3
: "cc", "memory", "v0", "v1", "v2", "v3", "v4");
}

@ -0,0 +1,13 @@
diff --git a/third_party/maldoca/BUILD.gn b/third_party/maldoca/BUILD.gn
index eeab205..29a0a2c 100644
--- a/third_party/maldoca/BUILD.gn
+++ b/third_party/maldoca/BUILD.gn
@@ -224,7 +224,7 @@ source_set("maldoca-ole") {
"//third_party/libxml",
"//third_party/protobuf:protobuf_lite",
"//third_party/re2",
- "//third_party/zlib:zlib_common_headers",
+ "//third_party/zlib:zlib",
"//third_party/zlib/google:zip",
]

@ -0,0 +1,25 @@
From a9d986203bcfbaab84f270c1dc6c3abb4c450ee1 Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Fri, 17 Sep 2021 14:57:33 +0000
Subject: [PATCH] IWYU: add stddef.h for size_t in WindowManager
---
net/third_party/quiche/src/http2/adapter/window_manager.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/third_party/quiche/src/http2/adapter/window_manager.h b/net/third_party/quiche/src/http2/adapter/window_manager.h
index f15982d..5a7701e 100644
--- a/net/third_party/quiche/src/http2/adapter/window_manager.h
+++ b/net/third_party/quiche/src/http2/adapter/window_manager.h
@@ -1,6 +1,8 @@
#ifndef QUICHE_HTTP2_ADAPTER_WINDOW_MANAGER_H_
#define QUICHE_HTTP2_ADAPTER_WINDOW_MANAGER_H_
+#include <stddef.h>
+
#include <functional>
#include "common/platform/api/quiche_export.h"
--
2.32.0

@ -0,0 +1,30 @@
From 603d765ca5154db27718d89a2ee9be2a95a64254 Mon Sep 17 00:00:00 2001
From: Alexander Dunaev <adunaev@igalia.com>
Date: Fri, 29 Oct 2021 20:54:46 +0700
Subject: [PATCH] [linux/xfce] Set zero insets on maximising the window.
It turned out that Xfwm handles the frame insets not the way KWin and
Mutter do.
Bug: 1260821
Change-Id: I69e71049157c03b74d78bc5edb7a60bf39cdda8b
---
diff --git a/ui/platform_window/x11/x11_window.cc b/ui/platform_window/x11/x11_window.cc
index dd381747..706f19c 100644
--- a/ui/platform_window/x11/x11_window.cc
+++ b/ui/platform_window/x11/x11_window.cc
@@ -676,6 +676,13 @@
// save this one for later too.
should_maximize_after_map_ = !window_mapped_in_client_;
+ // Some WMs keep respecting the frame extents even if the window is maximised.
+ // Remove the insets when maximising. The extents will be set again when the
+ // window is restored to normal state.
+ // See https://crbug.com/1260821
+ if (CanSetDecorationInsets())
+ SetDecorationInsets(nullptr);
+
SetWMSpecState(true, x11::GetAtom("_NET_WM_STATE_MAXIMIZED_VERT"),
x11::GetAtom("_NET_WM_STATE_MAXIMIZED_HORZ"));
}

@ -0,0 +1,57 @@
diff -up chromium-95.0.4638.69/net/base/test_data_stream.cc.missing-cstring chromium-95.0.4638.69/net/base/test_data_stream.cc
--- chromium-95.0.4638.69/net/base/test_data_stream.cc.missing-cstring 2021-11-14 16:04:59.911270740 +0000
+++ chromium-95.0.4638.69/net/base/test_data_stream.cc 2021-11-14 16:04:59.881272143 +0000
@@ -5,6 +5,7 @@
#include "net/base/test_data_stream.h"
#include <algorithm>
+#include <cstring>
namespace net {
diff -up chromium-95.0.4638.69/net/filter/filter_source_stream_test_util.cc.missing-cstring chromium-95.0.4638.69/net/filter/filter_source_stream_test_util.cc
--- chromium-95.0.4638.69/net/filter/filter_source_stream_test_util.cc.missing-cstring 2021-11-15 15:54:35.895963882 +0000
+++ chromium-95.0.4638.69/net/filter/filter_source_stream_test_util.cc 2021-11-15 15:54:50.342288149 +0000
@@ -4,6 +4,8 @@
#include "net/filter/filter_source_stream_test_util.h"
+#include <cstring>
+
#include "base/bit_cast.h"
#include "base/check_op.h"
#include "third_party/zlib/zlib.h"
diff -up chromium-95.0.4638.69/third_party/webrtc/audio/utility/channel_mixer.cc.missing-cstring chromium-95.0.4638.69/third_party/webrtc/audio/utility/channel_mixer.cc
--- chromium-95.0.4638.69/third_party/webrtc/audio/utility/channel_mixer.cc.missing-cstring 2021-11-14 16:05:24.613116022 +0000
+++ chromium-95.0.4638.69/third_party/webrtc/audio/utility/channel_mixer.cc 2021-11-14 16:05:24.614115975 +0000
@@ -8,6 +8,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <cstring>
+
#include "audio/utility/channel_mixer.h"
#include "audio/utility/channel_mixing_matrix.h"
diff -up chromium-95.0.4638.69/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.missing-cstring chromium-95.0.4638.69/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
--- chromium-95.0.4638.69/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.missing-cstring 2021-11-14 16:05:24.095140235 +0000
+++ chromium-95.0.4638.69/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc 2021-11-14 16:05:24.095140235 +0000
@@ -19,6 +19,7 @@
#include <sys/mman.h>
#include <sys/syscall.h>
+#include <cstring>
#include <memory>
#include <utility>
diff -up chromium-95.0.4638.69/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc.missing-cstring chromium-95.0.4638.69/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc
--- chromium-95.0.4638.69/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc.missing-cstring 2021-11-14 16:05:23.794154305 +0000
+++ chromium-95.0.4638.69/third_party/webrtc/modules/video_coding/utility/ivf_file_reader.cc 2021-11-14 16:05:23.792154399 +0000
@@ -10,6 +10,7 @@
#include "modules/video_coding/utility/ivf_file_reader.h"
+#include <cstring>
#include <string>
#include <vector>

@ -0,0 +1,90 @@
diff -up chromium-95.0.4638.69/chrome/common/safe_browsing/BUILD.gn.nounrar chromium-95.0.4638.69/chrome/common/safe_browsing/BUILD.gn
--- chromium-95.0.4638.69/chrome/common/safe_browsing/BUILD.gn.nounrar 2021-10-28 23:07:12.000000000 -0400
+++ chromium-95.0.4638.69/chrome/common/safe_browsing/BUILD.gn 2021-11-12 11:33:52.691346496 -0500
@@ -58,39 +58,6 @@ if (safe_browsing_mode == 1) {
public_deps = [ "//components/safe_browsing/core/common/proto:csd_proto" ]
}
- source_set("rar_analyzer") {
- sources = [
- "rar_analyzer.cc",
- "rar_analyzer.h",
- ]
-
- deps = [
- ":archive_analyzer_results",
- ":download_type_util",
- "//base",
- "//base:i18n",
- "//components/safe_browsing/content/common:file_type_policies",
- "//components/safe_browsing/core/common",
- "//third_party/unrar:unrar",
- ]
-
- defines = [
- "_FILE_OFFSET_BITS=64",
- "LARGEFILE_SOURCE",
- "RAR_SMP",
- "SILENT",
-
- # The following is set to disable certain macro definitions in the unrar
- # source code.
- "CHROMIUM_UNRAR",
-
- # Disables exceptions in unrar, replaces them with process termination.
- "UNRAR_NO_EXCEPTIONS",
- ]
-
- public_deps = [ "//components/safe_browsing/core/common/proto:csd_proto" ]
- }
-
if (is_linux || is_win) {
source_set("document_analyzer") {
sources = [
@@ -189,7 +156,6 @@ source_set("safe_browsing") {
":archive_analyzer_results",
":binary_feature_extractor",
":download_type_util",
- ":rar_analyzer",
"//components/safe_browsing/core/common",
]
diff -up chromium-95.0.4638.69/chrome/common/safe_browsing/DEPS.nounrar chromium-95.0.4638.69/chrome/common/safe_browsing/DEPS
--- chromium-95.0.4638.69/chrome/common/safe_browsing/DEPS.nounrar 2021-11-12 11:30:02.629954310 -0500
+++ chromium-95.0.4638.69/chrome/common/safe_browsing/DEPS 2021-11-12 11:34:16.732491978 -0500
@@ -3,6 +3,5 @@ include_rules = [
"+components/safe_browsing/core/common",
"+third_party/maldoca",
"+third_party/protobuf",
- "+third_party/unrar",
"+third_party/zlib",
]
diff -up chromium-95.0.4638.69/chrome/services/file_util/BUILD.gn.nounrar chromium-95.0.4638.69/chrome/services/file_util/BUILD.gn
--- chromium-95.0.4638.69/chrome/services/file_util/BUILD.gn.nounrar 2021-11-12 11:30:02.629954310 -0500
+++ chromium-95.0.4638.69/chrome/services/file_util/BUILD.gn 2021-11-12 11:36:08.277168386 -0500
@@ -60,7 +60,6 @@ source_set("file_util") {
deps += [
"//chrome/common/safe_browsing",
"//chrome/common/safe_browsing:archive_analyzer_results",
- "//chrome/common/safe_browsing:rar_analyzer",
]
if (is_linux || is_win) {
diff -up chromium-95.0.4638.69/chrome/services/file_util/safe_archive_analyzer.cc.nounrar chromium-95.0.4638.69/chrome/services/file_util/safe_archive_analyzer.cc
--- chromium-95.0.4638.69/chrome/services/file_util/safe_archive_analyzer.cc.nounrar 2021-10-28 23:07:12.000000000 -0400
+++ chromium-95.0.4638.69/chrome/services/file_util/safe_archive_analyzer.cc 2021-11-12 11:30:02.630954316 -0500
@@ -45,10 +45,14 @@ void SafeArchiveAnalyzer::AnalyzeDmgFile
void SafeArchiveAnalyzer::AnalyzeRarFile(base::File rar_file,
base::File temporary_file,
AnalyzeRarFileCallback callback) {
+#if 0
DCHECK(rar_file.IsValid());
safe_browsing::ArchiveAnalyzerResults results;
safe_browsing::rar_analyzer::AnalyzeRarFile(
std::move(rar_file), std::move(temporary_file), &results);
std::move(callback).Run(results);
+#else
+ NOTREACHED();
+#endif
}

@ -217,14 +217,14 @@ BuildRequires: libicu-devel >= 5.4
%global chromoting_client_id %nil
%endif
%global majorversion 94
%global majorversion 95
%if %{freeworld}
Name: chromium%{chromium_channel}%{nsuffix}
%else
Name: chromium%{chromium_channel}
%endif
Version: %{majorversion}.0.4606.81
Version: %{majorversion}.0.4638.69
Release: 1%{?dist}
%if %{?freeworld}
%if %{?shared}
@ -253,7 +253,7 @@ Patch4: chromium-60.0.3112.78-jpeg-nomangle.patch
# Do not mangle zlib
Patch5: chromium-77.0.3865.75-no-zlib-mangle.patch
# Do not use unrar code, it is non-free
Patch6: chromium-93.0.4577.63-norar.patch
Patch6: chromium-95.0.4638.69-norar.patch
# Use Gentoo's Widevine hack
# https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium/files/chromium-widevine-r3.patch
Patch7: chromium-71.0.3578.98-widevine-r3.patch
@ -272,25 +272,38 @@ Patch11: chromium-92.0.4515.107-py2-bootstrap.patch
# Add "Fedora" to the user agent string
Patch12: chromium-86.0.4240.75-fedora-user-agent.patch
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-95-maldoca-zlib.patch
Patch20: chromium-95-maldoca-zlib.patch
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-95-eigen-avx-1.patch
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-95-eigen-avx-2.patch
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-95-eigen-avx-3.patch
Patch21: chromium-95-eigen-avx-1.patch
Patch22: chromium-95-eigen-avx-2.patch
Patch23: chromium-95-eigen-avx-3.patch
# https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-95-xfce-maximize.patch
Patch24: chromium-95-xfce-maximize.patch
# Needs to be submitted..
Patch51: chromium-76.0.3809.100-gcc-remoting-constexpr.patch
# https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium/files/chromium-unbundle-zlib.patch
Patch52: chromium-81.0.4044.92-unbundle-zlib.patch
# Needs to be submitted..
Patch53: chromium-77.0.3865.75-gcc-include-memory.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-78-protobuf-RepeatedPtrField-export.patch
Patch55: chromium-78-protobuf-RepeatedPtrField-export.patch
# ../../third_party/perfetto/include/perfetto/base/task_runner.h:48:55: error: 'uint32_t' has not been declared
Patch56: chromium-80.0.3987.87-missing-cstdint-header.patch
# Missing <cstring> (thanks c++17)
Patch57: chromium-93.0.4577.63-missing-cstring.patch
Patch57: chromium-95.0.4638.69-missing-cstring.patch
# prepare for using system ffmpeg (clean)
# http://svnweb.mageia.org/packages/cauldron/chromium-browser-stable/current/SOURCES/chromium-53-ffmpeg-no-deprecation-errors.patch?view=markup
Patch58: chromium-53-ffmpeg-no-deprecation-errors.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-91-libyuv-aarch64.patch
Patch60: chromium-91-libyuv-aarch64.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-90-ruy-include.patch
Patch62: chromium-90-ruy-include.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-95-libyuv-aarch64.patch
Patch60: chromium-95-libyuv-aarch64.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-95-quiche-include.patch
Patch61: chromium-95-quiche-include.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-95-BitstreamReader-namespace.patch
Patch62: chromium-95-BitstreamReader-namespace.patch
# Extra CXXFLAGS for aarch64
Patch63: chromium-91.0.4472.77-aarch64-cxxflags-addition.patch
# Fix issue where closure_compiler thinks java is only allowed in android builds
@ -309,13 +322,10 @@ Patch68: chromium-84.0.4147.125-aarch64-clearkeycdm-binutils-workaround.patch
Patch76: chromium-92.0.4515.107-rawhide-gcc-std-max-fix.patch
# Do not download proprietary widevine module in the background (thanks Debian)
Patch79: chromium-93.0.4577.63-widevine-no-download.patch
# Fix crashes with components/cast_*
# Thanks to Gentoo
Patch80: chromium-92.0.4515.107-EnumTable-crash.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-94-ConversionStorageSql-lambda.patch
Patch81: chromium-94-ConversionStorageSql-lambda.patch
# https://github.com/stha09/chromium-patches/blob/master/chromium-94-CustomSpaces-include.patch
Patch82: chromium-94-CustomSpaces-include.patch
# Fixes for python3
Patch83: chromium-92.0.4515.107-py3-fixes.patch
# Add missing cmath header
@ -997,17 +1007,23 @@ udev.
%endif
# Short term fixes (usually gcc and backports)
%patch20 -p1 -b .maldoca-zlib
%patch21 -p1 -b .eigen-avx-1
%patch22 -p1 -b .eigen-avx-2
%patch23 -p1 -b .eigen-avx-3
%patch24 -p1 -b .xfce-maximize
%patch51 -p1 -b .gcc-remoting-constexpr
%if 0%{?fedora} || 0%{?rhel} >= 8
%patch52 -p1 -b .unbundle-zlib
%endif
%patch53 -p1 -b .gcc-include-memory
%patch55 -p1 -b .protobuf-export
%patch56 -p1 -b .missing-cstdint
%patch57 -p1 -b .missing-cstring
%patch58 -p1 -b .ffmpeg-deprecations
%patch60 -p1 -b .libyuv-aarch64
%patch62 -p1 -b .ruy-include
%patch61 -p1 -b .quiche-include
%patch62 -p1 -b .BitstreamReader-namespace
%patch63 -p1 -b .aarch64-cxxflags-addition
%patch64 -p1 -b .java-only-allowed
%patch65 -p1 -b .gn-gcc-cleanup
@ -1019,8 +1035,6 @@ udev.
%endif
%patch79 -p1 -b .widevine-no-download
%patch80 -p1 -b .EnumTable-crash
%patch81 -p1 -b .ConversionStorageSql-lambda-include
%patch82 -p1 -b .CustomSpaces-include
%patch83 -p1 -b .py3fixes
%patch84 -p1 -b .remoting-missing-cmath-header
%patch86 -p1 -b .clang-format-py3
@ -1338,6 +1352,7 @@ build/linux/unbundle/remove_bundled_libraries.py \
'third_party/devtools-frontend/src/front_end/third_party/puppeteer' \
'third_party/devtools-frontend/src/front_end/third_party/wasmparser' \
'third_party/devtools-frontend/src/test/unittests/front_end/third_party/i18n' \
'third_party/devtools-frontend/src/third_party' \
'third_party/dom_distiller_js' \
'third_party/eigen3' \
'third_party/emoji-segmenter' \
@ -1406,6 +1421,9 @@ build/linux/unbundle/remove_bundled_libraries.py \
'third_party/lss' \
'third_party/lzma_sdk' \
'third_party/mako' \
'third_party/maldoca' \
'third_party/maldoca/src/third_party/tensorflow_protos' \
'third_party/maldoca/src/third_party/zlibwrapper' \
'third_party/markupsafe' \
'third_party/mesa' \
'third_party/metrics_proto' \
@ -2126,6 +2144,9 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
%changelog
* Fri Nov 12 2021 Tom Callaway <spot@fedoraproject.org> - 95.0.4638.69-1
- update to 95.0.4638.69
* Fri Oct 8 2021 Tom Callaway <spot@fedoraproject.org> - 94.0.4606.81-1
- update to 94.0.4606.81

@ -21,4 +21,4 @@ SHA512 (NotoSansSymbols2-Regular.ttf) = 2644b42c3fdccfe12395f9b61553aced169a0f1d
SHA512 (NotoSansTibetan-Regular.ttf) = fb5a48fcaea80eebe7d692f6fcf00d59d47658a358d0ec8e046fc559873f88bd595b2da474d2826abd9e9305f3741c69058d867b1e6048f37fe7d71b5d3af36a
SHA512 (node-v12.22.6-linux-arm64.tar.xz) = 87ce5eb954deb1d0debe6fa02b28a3cc675e12fca1e51d44b123ab294aa39ce0c6b8ac9eae1e7a6e32673ea2c2d480651d9ba7eea73012f0529503eebe9eb34d
SHA512 (node-v12.22.6-linux-x64.tar.xz) = e1b55c32343cb2ccc40d888c705414bebf9c46b02083d13731df79b1e79521b7277761f6bcca041e40e3a2e47c67bb8e7848aa2b919a9de5c2ebf62c4a9c7176
SHA512 (chromium-94.0.4606.81-clean.tar.xz) = 4cc14e91b244d59b30931e7ff90e6a031784d1da9f2e3e72172757d0a76305ccd265f5456779bfcb893482d70a5cc86b52a0d26e255331505d5c2acc036f87e9
SHA512 (chromium-95.0.4638.69-clean.tar.xz) = b4e7c917300ead59492b0817a3a73f74cebdb6daa62d90edf5f7df8a4de2cdeb100d45811611b5251bd50dab363ec54090fa39cfa97c7a194bdd6bca6c5e4072

Loading…
Cancel
Save