extra/chromium to 73.0.3683.75-1

This commit is contained in:
Kevin Mihelich 2019-03-12 23:37:38 +00:00
parent e6919eb342
commit 8d91f8ae78
8 changed files with 150 additions and 267 deletions

View file

@ -14,9 +14,10 @@
buildarch=12
highmem=1
noautobuild=1
pkgname=chromium
pkgver=72.0.3626.121
pkgver=73.0.3683.75
pkgrel=1
_launcher_ver=6
pkgdesc="A web browser built for speed, simplicity, and security"
@ -36,23 +37,21 @@ source=(https://commondatastorage.googleapis.com/chromium-browser-official/$pkgn
chromium-launcher-$_launcher_ver.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver.tar.gz
chromium-drirc-disable-10bpc-color-configs.conf
chromium-system-icu.patch
chromium-webrtc-missing-header.patch
chromium-vaapi.patch
chromium-vaapi-relax-the-version-check-for-VA-API.patch
chromium-enable-mojo-video-decoders-by-default.patch
chromium-vaapi-fix-the-VA_CHECK_VERSION.patch
chromium-color_utils-use-std-sqrt.patch
chromium-media-fix-build-with-libstdc++.patch
chromium-avoid-log-flooding-in-GLSurfacePresentationHelper.patch
chromium-widevine.patch
chromium-skia-harmony.patch
0001-crashpad-include-limits.patch)
sha256sums=('4c1e554ab606eab328e77f5a92d8244b26a10ffd15d7986d30eab95f37adbc1f'
sha256sums=('8304810626c69c296b3262844e20052e7476280b634c525a711a7f6c0e3dd57c'
'04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1'
'babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb'
'e2d284311f49c529ea45083438a768db390bde52949995534034d2a814beab89'
'63cbed7d7af327c17878a2066c303f106ff08636372721845131f7ff13d87b44'
'e87ede45edf39ac19e56ac1ae49c9d1f5f5130e5838bcbb4c3d4fb16e55575c0'
'07fcf5d25114c7335582f117090b5e0bd148aca69044d4fe25c66b4c52dcd2a6'
'669a9ad4773d182a06ee729008a60aeadddae92f1a0077b3811e11f292c8d4ff'
'0bd750255163bfb1bedaf97c1cdb313f42bd9e6e52243c6e68494b6e0ffb84bf'
'b3b6f5147d519c586cbdaf3b227dd1719676fa3a65edd6f08989087afd287afa'
'f51fe91427d8638c5551746d2ec7de99e8059dd76889cfeaee8ca3d8fed62265'
'f2b12ccf83a8e0adda4a87ae5c983df5e092ccf1f9a6f2e05799ce4d451dbda1'
'd081f2ef8793544685aad35dea75a7e6264a2cb987ff3541e6377f4a3650a28b'
'5887f78b55c4ecbbcba5930f3f0bb7bc0117c2a41c2f761805fcf7f46f1ca2b3'
'df99f49ad58b70c9a3e1827d7e80b62e4363419334ed83373cf55b79c17b6f10')
@ -69,7 +68,7 @@ declare -gA _system_libs=(
[libdrm]=
[libjpeg]=libjpeg
#[libpng]=libpng # https://crbug.com/752403#c10
#[libvpx]=libvpx # needs unreleased libvpx
[libvpx]=libvpx
[libwebp]=libwebp
[libxml]=libxml2
[libxslt]=libxslt
@ -115,11 +114,17 @@ prepare() {
third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \
third_party/libxml/chromium/libxml_utils.cc
# https://crbug.com/819294#c88
patch -Np1 -i ../chromium-color_utils-use-std-sqrt.patch
# https://crbug.com/931373
patch -d media -Np1 -i ../../chromium-media-fix-build-with-libstdc++.patch
# https://crbug.com/879929
patch -Np1 -i ../chromium-avoid-log-flooding-in-GLSurfacePresentationHelper.patch
# Enable VAAPI on Linux
patch -Np1 -i ../chromium-vaapi.patch
patch -Np1 -i ../chromium-vaapi-relax-the-version-check-for-VA-API.patch
patch -Np1 -i ../chromium-enable-mojo-video-decoders-by-default.patch
patch -Np1 -i ../chromium-vaapi-fix-the-VA_CHECK_VERSION.patch
# Load Widevine CDM if available
patch -Np1 -i ../chromium-widevine.patch
@ -127,14 +132,12 @@ prepare() {
# https://crbug.com/skia/6663#c10
patch -Np0 -i ../chromium-skia-harmony.patch
# https://webrtc.googlesource.com/src.git/+/3e70781361ed
patch -Np0 -i ../chromium-webrtc-missing-header.patch
# https://bugs.gentoo.org/661880#c21
patch -Np1 -i ../chromium-system-icu.patch
# Remove compiler flags not supported by our system clang
sed -i \
-e '/"-fsplit-lto-unit"/d' \
-e '/"-Wno-defaulted-function-deleted"/d' \
build/config/compiler/BUILD.gn

View file

@ -0,0 +1,34 @@
From 1fb4edaf534c278a0b7a3150efff8e712c1efe91 Mon Sep 17 00:00:00 2001
From: Peng Huang <penghuang@chromium.org>
Date: Tue, 19 Feb 2019 22:01:52 +0000
Subject: [PATCH] Avoid log flooding in GLSurfacePresentationHelper
Bug: 879929
Change-Id: Ifb452736573e65791ed5e3f143778f576854a167
Reviewed-on: https://chromium-review.googlesource.com/c/1477918
Commit-Queue: Peng Huang <penghuang@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#633415}
---
ui/gl/gl_surface_presentation_helper.cc | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/ui/gl/gl_surface_presentation_helper.cc b/ui/gl/gl_surface_presentation_helper.cc
index 987725ca1c931..e7bcd1a5b79ff 100644
--- a/ui/gl/gl_surface_presentation_helper.cc
+++ b/ui/gl/gl_surface_presentation_helper.cc
@@ -237,7 +237,13 @@ void GLSurfacePresentationHelper::CheckPendingFrames() {
&vsync_interval_)) {
vsync_timebase_ = base::TimeTicks();
vsync_interval_ = base::TimeDelta();
- LOG(ERROR) << "GetVSyncParametersIfAvailable() failed!";
+ static unsigned int count = 0;
+ ++count;
+ // GetVSyncParametersIfAvailable() could be called and failed frequently,
+ // so we have to limit the LOG to avoid flooding the log.
+ LOG_IF(ERROR, count < 20 || !(count & 0xff))
+ << "GetVSyncParametersIfAvailable() failed for " << count
+ << " times!";
}
}

View file

@ -0,0 +1,48 @@
From a5ba6f9bb7665040045dc0f8087407096630ad7b Mon Sep 17 00:00:00 2001
From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
Date: Fri, 8 Feb 2019 02:57:28 +0000
Subject: [PATCH] color_utils: Use std::sqrt() instead of std::sqrtf()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This fixes the build with libstdc++:
../../ui/gfx/color_utils.cc: In function SkColor color_utils::SetDarkestColorForTesting(SkColor):
../../ui/gfx/color_utils.cc:434:12: error: sqrtf is not a member of std
std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
^~~~~
../../ui/gfx/color_utils.cc:434:12: note: suggested alternative: sqrt
std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
^~~~~
sqrt
sqrtf() is not formally part of C++14 as far as I can see even though libc++
has it in <cmath>. Additionally, we're only dealing with floats in all parts
of the expression above, so using the float sqrt() overload should be
harmless anyway.
Bug: 819294
Change-Id: If6c7bf31819df97a761e6963def6d6506154c34d
Reviewed-on: https://chromium-review.googlesource.com/c/1458193
Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
Cr-Commit-Position: refs/heads/master@{#630140}
---
ui/gfx/color_utils.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/gfx/color_utils.cc b/ui/gfx/color_utils.cc
index c868cd54bac3f..92ba1407d594f 100644
--- a/ui/gfx/color_utils.cc
+++ b/ui/gfx/color_utils.cc
@@ -431,7 +431,7 @@ SkColor SetDarkestColorForTesting(SkColor color) {
// GetContrastRatio(kWhiteLuminance, g_luminance_midpoint). The formula below
// can be verified by plugging it into how GetContrastRatio() operates.
g_luminance_midpoint =
- std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
+ std::sqrt((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
return previous_darkest_color;
}

View file

@ -1,104 +0,0 @@
From 31225b9c5f3f685d65f742dc129241c30c32157c Mon Sep 17 00:00:00 2001
From: Julien Isorce <julien.isorce@chromium.org>
Date: Sat, 15 Dec 2018 01:02:18 +0000
Subject: [PATCH] Enable mojo video decoders by default on Linux desktop if
use_vaapi is true
Already the case for ChromeOS, Mac and Win. And run the service
in the GPU process too. Except that here the gn arg use_vaapi
has to be true as well.
Note that this CL does not change the following:
- the gn arg 'use_vaapi' is still false by default on Linux,
see media/gpu/args.gni
- 'accelerated_video_decode' is still black listed on Linux,
see entry 48 in gpu/config/software_rendering_list.json
- it is still not possible to enable hw video decode from
about:flags, see chrome/browser/about_flags.cc
Also note that with this CL the ffmpeg and libvpx video decoders
are still selected thanks to media::DecoderSelector::SelectDecoder
in case vaapi fails to initialize.
Also see https://chromium-review.googlesource.com/c/chromium/src/+/1225275/
which was very similar but for ChromeOS.
Tested on Linux desktop with gn args:
- use_vaapi = true (default is false)
./out/release/chrome --ignore-gpu-blacklist --use-gl=desktop url_to_vp9_video
./out/release/chrome --ignore-gpu-blacklist --use-gl=egl url_to_vp9_video
-> MojoVideoDecoder was in use and VaapiVideoDecodeAccelerator runing in the
GPU process, through MojoVideoDecoderService
Bug: 522298
Change-Id: Ia19f9f3edc0af488a477a16001b7de4f4818b3b2
Reviewed-on: https://chromium-review.googlesource.com/c/1370717
Reviewed-by: Dan Sanders <sandersd@chromium.org>
Commit-Queue: Julien Isorce <julien.isorce@chromium.org>
Cr-Commit-Position: refs/heads/master@{#616901}
---
media/media_options.gni | 9 ++++++---
media/mojo/services/gpu_mojo_media_client.cc | 5 +++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/media/media_options.gni b/media/media_options.gni
index 46eaa58181..6e338f651b 100644
--- a/media/media_options.gni
+++ b/media/media_options.gni
@@ -5,6 +5,7 @@
import("//build/config/chrome_build.gni")
import("//build/config/chromecast_build.gni")
import("//build/config/features.gni")
+import("//media/gpu/args.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
# Do not expand this list without double-checking with OWNERS, this is a list of
@@ -129,8 +130,9 @@ declare_args() {
# |mojo_media_services|). When enabled, selected mojo paths will be enabled in
# the media pipeline and corresponding services will hosted in the selected
# remote process (e.g. "utility" process, see |mojo_media_host|).
- enable_mojo_media = is_android || is_chromecast || is_chromeos || is_mac ||
- is_win || enable_library_cdms
+ enable_mojo_media =
+ is_android || is_chromecast || is_chromeos || is_mac || is_win ||
+ enable_library_cdms || (is_desktop_linux && use_vaapi)
# Enable the TestMojoMediaClient to be used in mojo MediaService. This is for
# testing only and will override the default platform MojoMediaClient, if any.
@@ -200,7 +202,8 @@ if (enable_mojo_media) {
]
_default_mojo_media_host = "gpu"
}
- } else if (is_chromeos || is_mac || is_win) {
+ } else if (is_chromeos || is_mac || is_win ||
+ (is_desktop_linux && use_vaapi)) {
_default_mojo_media_services = [ "video_decoder" ]
_default_mojo_media_host = "gpu"
}
diff --git a/media/mojo/services/gpu_mojo_media_client.cc b/media/mojo/services/gpu_mojo_media_client.cc
index 75f5e611c7..f056e1b315 100644
--- a/media/mojo/services/gpu_mojo_media_client.cc
+++ b/media/mojo/services/gpu_mojo_media_client.cc
@@ -54,7 +54,7 @@ namespace media {
namespace {
#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_MACOSX) || \
- defined(OS_WIN)
+ defined(OS_WIN) || defined(OS_LINUX)
gpu::CommandBufferStub* GetCommandBufferStub(
base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager,
base::UnguessableToken channel_token,
@@ -148,7 +148,8 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::CreateVideoDecoder(
android_overlay_factory_cb_, std::move(request_overlay_info_cb),
std::make_unique<VideoFrameFactoryImpl>(gpu_task_runner_,
std::move(get_stub_cb)));
-#elif defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN)
+#elif defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || \
+ defined(OS_LINUX)
std::unique_ptr<VideoDecoder> vda_video_decoder = VdaVideoDecoder::Create(
task_runner, gpu_task_runner_, media_log->Clone(), target_color_space,
gpu_preferences_, gpu_workarounds_,
--
2.20.1

View file

@ -0,0 +1,48 @@
From d4824fb46a07f3dbecf6358020f0f0da2c586475 Mon Sep 17 00:00:00 2001
From: Tom Anderson <thomasanderson@chromium.org>
Date: Sat, 16 Feb 2019 05:35:55 +0000
Subject: [PATCH] Fix build with libstdc++
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
When building with libstdc++ (use_custom_libcxx=false), we get (different) build
erros when building with clang and gcc.
clang:
base/optional.h:348:61: error: no member named 'value' in
'std::is_constructible<media::learning::Value, const
base::Optional<media::learning::Value> &>'
gcc:
base/optional.h:347:57: error: incomplete type
std::is_constructible<media::learning::Value,
base::Optional<media::learning::Value>&> used in nested name specifier
BUG=931373
Change-Id: I133ff4f30398202b5726c605fafee8aa916179d3
Reviewed-on: https://chromium-review.googlesource.com/c/1475936
Auto-Submit: Thomas Anderson <thomasanderson@chromium.org>
Commit-Queue: Frank Liberato <liberato@chromium.org>
Reviewed-by: Frank Liberato <liberato@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#632921}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 08b9fbc728043c89f21af46796bacd7324b7ce06
---
learning/common/value.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/learning/common/value.h b/learning/common/value.h
index 62f4953f6..ef37eebd4 100644
--- a/learning/common/value.h
+++ b/learning/common/value.h
@@ -27,7 +27,7 @@ class COMPONENT_EXPORT(LEARNING_COMMON) Value {
public:
Value();
template <typename T>
- explicit Value(T x) : value_(x) {
+ explicit Value(const T& x) : value_(x) {
// We want to rule out mostly pointers, since they wouldn't make much sense.
// Note that the implicit cast would likely fail anyway.
static_assert(std::is_arithmetic<T>::value || std::is_enum<T>::value,

View file

@ -1,74 +0,0 @@
From 674fb0486a1b525cb850530c4cdc79506338bd37 Mon Sep 17 00:00:00 2001
From: Azhar Shaikh <azhar.shaikh@intel.com>
Date: Fri, 11 Jan 2019 07:44:38 +0000
Subject: [PATCH] media/gpu/vaapi: Fix the VA_CHECK_VERSION
commit 6f1309ef8fe109 ("media/gpu/vaapi: Relax the version
check for VA-API") added the VA_CHECK_VERSION to relax the
VA-API version check. But it still does the same thing as
the previous check. VA_CHECK_VERSION will return 'true', only
when the VA-API version is greater than or equal to the
parameters passed to it. So in this case when the major and
minor version were passed from vaInitialize() output, it did
the same strict check as earlier. When trying to update libva
to a newer version, there will still be a mismatch, since
vaInitialize() would return the updated/newer libva version
installed on the system, but the chromium would still be built
with older version (libva-2.1.0 as of now).
To fix this and actually relax the check, make sure the system
version of libva is greater than the libva version with which
the browser is built, since libva is backward compatible. This
will allow any future libva updates without breaking existing code.
Fixes: 6f1309ef8fe109 ("media/gpu/vaapi: Relax the version check for VA-API")
Bug: 905814
TEST=Below scenarios were tested and h/w acceleration is working successfully.
TEST=Build chromium with libva-2.3.0 and system version 2.3.0
TEST=Build chromium with libva-2.1.0 and system version 2.3.0
TEST=Build chromium with libva 2.1.0 and system version 2.1.0
Signed-off-by: Azhar Shaikh <azhar.shaikh@intel.com>
Change-Id: I1ec14aabed21b7d6b6fc55080bbac17233c40ec0
Reviewed-on: https://chromium-review.googlesource.com/c/1376716
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Miguel Casas <mcasas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#621940}
---
media/gpu/vaapi/vaapi_wrapper.cc | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc
index 4921aabf64..93d7c98b80 100644
--- a/media/gpu/vaapi/vaapi_wrapper.cc
+++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -337,15 +337,16 @@ bool VADisplayState::InitializeOnce() {
<< va_vendor_string_;
// The VAAPI version is determined from what is loaded on the system by
- // calling vaInitialize(). We want a runtime evaluation of libva version,
- // of what is loaded on the system, with, what browser is compiled with.
- // Also since the libva is now ABI-compatible, relax the version check
- // which helps in upgrading the libva, without breaking any existing
- // functionality.
- if (!VA_CHECK_VERSION(major_version, minor_version, 0)) {
- LOG(ERROR) << "This build of Chromium requires VA-API version "
- << VA_MAJOR_VERSION << "." << VA_MINOR_VERSION
- << ", system version: " << major_version << "." << minor_version;
+ // calling vaInitialize(). Since the libva is now ABI-compatible, relax the
+ // version check which helps in upgrading the libva, without breaking any
+ // existing functionality. Make sure the system version is not older than
+ // the version with which the chromium is built since libva is only
+ // guaranteed to be backward (and not forward) compatible.
+ if (VA_MAJOR_VERSION > major_version ||
+ (VA_MAJOR_VERSION == major_version && VA_MINOR_VERSION > minor_version)) {
+ LOG(ERROR) << "The system version " << major_version << "." << minor_version
+ << " should be greater than or equal to "
+ << VA_MAJOR_VERSION << "." << VA_MINOR_VERSION;
return false;
}
return true;
--
2.20.1

View file

@ -1,62 +0,0 @@
From 6f1309ef8fe10965e4d0018b4f1b80ac6deccdaa Mon Sep 17 00:00:00 2001
From: Azhar Shaikh <azhar.shaikh@intel.com>
Date: Fri, 30 Nov 2018 23:11:57 +0000
Subject: [PATCH] media/gpu/vaapi: Relax the version check for VA-API
Since the newer versions of VA-API are ABI compatible, relax the
version checks for VA-API, by using VA_CHECK_VERSION().
This will help in updating the libva to the latest releases,
while still supporting the old versions, till the new version of
libva is merged and picked by the builds. Thus ensuring that
hardware accleration is not broken while updating the libva.
Bug: 905814
TEST=libva-2.3.0 and libva-2.1.0 are able to do hardware acceleration.
Suggested-by: Alexandre Courbot <acourbot@chromium.org>
Signed-off-by: Azhar Shaikh <azhar.shaikh@intel.com>
Change-Id: I510549f72290d20676927eeeeb89a87199c062af
Reviewed-on: https://chromium-review.googlesource.com/c/1352519
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Commit-Queue: Miguel Casas <mcasas@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612832}
---
AUTHORS | 1 +
media/gpu/vaapi/vaapi_wrapper.cc | 8 +++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/AUTHORS b/AUTHORS
index 567fe15a60..ff42fc5df0 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -103,6 +103,7 @@ Asish Singh <asish.singh@samsung.com>
Attila Dusnoki <dati91@gmail.com>
Avinaash Doreswamy <avi.nitk@samsung.com>
Ayush Khandelwal <k.ayush@samsung.com>
+Azhar Shaikh <azhar.shaikh@intel.com>
Balazs Kelemen <b.kelemen@samsung.com>
Baul Eun <baul.eun@samsung.com>
Behara Mani Shyam Patro <behara.ms@samsung.com>
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc
index b4156423f7..053384d378 100644
--- a/media/gpu/vaapi/vaapi_wrapper.cc
+++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -333,7 +333,13 @@ bool VADisplayState::InitializeOnce() {
DVLOG(1) << "VAAPI version: " << major_version << "." << minor_version << " "
<< va_vendor_string_;
- if (major_version != VA_MAJOR_VERSION || minor_version != VA_MINOR_VERSION) {
+ // The VAAPI version is determined from what is loaded on the system by
+ // calling vaInitialize(). We want a runtime evaluation of libva version,
+ // of what is loaded on the system, with, what browser is compiled with.
+ // Also since the libva is now ABI-compatible, relax the version check
+ // which helps in upgrading the libva, without breaking any existing
+ // functionality.
+ if (!VA_CHECK_VERSION(major_version, minor_version, 0)) {
LOG(ERROR) << "This build of Chromium requires VA-API version "
<< VA_MAJOR_VERSION << "." << VA_MINOR_VERSION
<< ", system version: " << major_version << "." << minor_version;
--
2.20.1

View file

@ -1,10 +0,0 @@
--- third_party/webrtc/modules/desktop_capture/linux/window_capturer_x11.cc.orig 2019-01-20 10:57:09.166224517 +0000
+++ third_party/webrtc/modules/desktop_capture/linux/window_capturer_x11.cc 2019-01-20 06:01:05.901545307 +0000
@@ -14,6 +14,7 @@
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xrender.h>
+#include <string.h>
#include <memory>
#include <string>
#include <utility>