Skip to content

Commit

Permalink
chromium-*-dev=76.0.3806.1
Browse files Browse the repository at this point in the history
Non relevant license changes in boringssl, ffmpeg, harfbuzz-ng, libjpeg_turbo,
libpng, v8.

GCC build fixes for chromium repository (all of them proposed upstream):
* 0001-zlib-fix-ARMv8-CRC32-compilation-in-GCC.patch: replaced the old fix
  with a new one that actually builds CRC32 SIMD implementation.
* 0001-GCC-do-not-use-old-C-notation-to-assign-struct-with-.patch
* 0001-GCC-remove-noexcept-from-move-constructor-and-assign.patch
* 0001-Fix-AutoCompleteMatch-move-constructor-assign-operat.patch
* 0001-Make-SharedMemoryMapping-move-constructor-noexcept.patch
* 0001-IWYU-ThemeService-requires-NativeTheme.patch
* 0001-Make-blink-LayoutUnit-HasFraction-constexpr.patch
* 0001-GCC-FeaturePolicyParser-ParseValueForFuzzer-is-not-i.patch
* 0001-Avoid-pure-virtual-crash-destroying-RenderProcessUse.patch
* 0001-ThrottlingController-Liveness-needs-to-be-uint32_t.patch
* 0001-GCC-avoid-ambiguous-NoDestructor-creation-in-GetNeve.patch
* 0001-DisjoingRangeLockManager-Lock-move-constructor-assig.patch
* 0001-GCC-XSetWindowAttributes-struct-initialization-shoul.patch
* 0001-GCC-CertNetFetcherImpl-declares-Job-as-a-friend-but-.patch

GCC fix for quiche library:
* 0001-GCC-accessing-TransportParameters-enum-class-members.patch
  • Loading branch information
Jose Dapena Paz committed Jun 6, 2019
1 parent a6cd824 commit 486e46d
Show file tree
Hide file tree
Showing 18 changed files with 1,406 additions and 13 deletions.
2 changes: 2 additions & 0 deletions recipes-browser/chromium/chromium-beta.inc
Expand Up @@ -21,8 +21,10 @@ LIC_FILES_CHKSUM += "\
file://${S}/third_party/google_toolbox_for_mac/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
file://${S}/third_party/harfbuzz-ng/src/COPYING;md5=e021dd6dda6ff1e6b1044002fc662b9b \
file://${S}/third_party/icu/LICENSE;md5=8bc5d32052a96f214cbdd1e53dfc935d \
file://${S}/third_party/libjpeg_turbo/LICENSE.md;md5=843854939fbe775b4faaf7517f95b091 \
file://${S}/third_party/libpng/LICENSE;md5=b0085051bf265bac2bfc38bc89f50000 \
file://${S}/third_party/libsrtp/LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1\
file://${S}/third_party/openmax_dl/LICENSE;md5=3c999c621badfd6937bcfef14f4528ce \
file://${S}/third_party/ots/LICENSE;md5=e06eff2aa65b917034a81599bea73dc4 \
file://${S}/third_party/protobuf/LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b \
file://${S}/third_party/shaderc/src/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \
Expand Down
35 changes: 24 additions & 11 deletions recipes-browser/chromium/chromium-dev.inc
@@ -1,41 +1,54 @@
require chromium-upstream-tarball.inc

PV = "75.0.3766.2"
PV = "76.0.3806.1"

SRC_URI[md5sum] = "66b96fbb352307f4cf0dc92d5f48b682"
SRC_URI[sha256sum] = "844408078a6c26908e193308eb7bfd5d7ebb7d32f627bc494471108045262ff3"
SRC_URI[md5sum] = "b723a847981741428086932af2b456c4"
SRC_URI[sha256sum] = "10712f2cdffa99a82787372f4018c71ee742b875d4c7885e30ac108a665d0d40"

LIC_FILES_CHKSUM += "\
file://${S}/buildtools/third_party/libc++/trunk/LICENSE.TXT;md5=55d89dd7eec8d3b4204b680e27da3953 \
file://${S}/buildtools/third_party/libc++abi/trunk/LICENSE.TXT;md5=7b9334635b542c56868400a46b272b1e \
file://${S}/third_party/SPIRV-Tools/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
file://${S}/third_party/angle/LICENSE;md5=7abdb66a6948f39c2f469140db5184e2 \
file://${S}/third_party/blink/LICENSE_FOR_ABOUT_CREDITS;md5=11e90d553b211de885f245900c4ccf89 \
file://${S}/third_party/boringssl/src/LICENSE;md5=9b082148f9953258347788edb83e401b \
file://${S}/third_party/boringssl/src/LICENSE;md5=e91719b7727a2d3464ec006154275572 \
file://${S}/third_party/breakpad/LICENSE;md5=828152b41153892a725f0e7f56faff73 \
file://${S}/third_party/chromevox/LICENSE;md5=45739090b454125d851ac7bb1bbd23a2 \
file://${S}/third_party/d3/src/LICENSE;md5=0679931d76eb2f1dd1915249da84a722 \
file://${S}/third_party/expat/files/COPYING;md5=5b8620d98e49772d95fc1d291c26aa79 \
file://${S}/third_party/ffmpeg/CREDITS.chromium;md5=005e77d67b51bc0b90c80d469d5e7a0e \
file://${S}/third_party/ffmpeg/CREDITS.chromium;md5=eeb4d970460805156a5bc3a414d48740\
file://${S}/third_party/freetype/src/docs/FTL.TXT;md5=9f37b4e6afa3fef9dba8932b16bd3f97 \
file://${S}/third_party/google_toolbox_for_mac/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
file://${S}/third_party/harfbuzz-ng/src/COPYING;md5=e021dd6dda6ff1e6b1044002fc662b9b \
file://${S}/third_party/harfbuzz-ng/src/COPYING;md5=e11f5c3149cdec4bb309babb020b32b9 \
file://${S}/third_party/icu/LICENSE;md5=8bc5d32052a96f214cbdd1e53dfc935d \
file://${S}/third_party/libpng/LICENSE;md5=c2adba923425f511c6087a7ca53270e6 \
file://${S}/third_party/libjpeg_turbo/LICENSE.md;md5=f568c3bdd0195918f507100b71862ee5 \
file://${S}/third_party/libpng/LICENSE;md5=b0085051bf265bac2bfc38bc89f50000 \
file://${S}/third_party/libsrtp/LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1\
file://${S}/third_party/ots/LICENSE;md5=e06eff2aa65b917034a81599bea73dc4 \
file://${S}/third_party/protobuf/LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b \
file://${S}/third_party/shaderc/src/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \
file://${S}/third_party/yasm/source/patched-yasm/COPYING;md5=a12d8903508fb6bfd49d8d82c6170dd9 \
file://${S}/v8/LICENSE;md5=bda6d3b7be87052ff181da3ed9fd5501 \
file://${S}/v8/LICENSE;md5=6611673a9587a522034a4be8f4df564c \
"

SRC_URI += " \
file://0001-Wrap-mksnapshot-and-torque-calls-on-Yocto-building-w.patch;patchdir=v8 \
file://0001-Use-v8-qemu-wrapper.sh-on-v8-context-snapshot-creati.patch \
file://0001-zlib-GCC-Disable-CRC32-optimizations-on-ARM.patch \
file://0001-Add-missing-limits-header-to-crashpad.patch;patchdir=third_party/crashpad/crashpad \
file://0001-NEON-do-not-use-certain-calls-that-would-break-GCC-b.patch;patchdir=third_party/skia \
file://0001-GCC-do-not-use-COMPILER_GCC.patch;patchdir=third_party/angle \
file://0001-omnibox-AutocompleteMatch-constructor-cannot-be-noex.patch \
file://0001-zlib-fix-ARMv8-CRC32-compilation-in-GCC.patch \
file://0001-GCC-do-not-use-old-C-notation-to-assign-struct-with-.patch \
file://0001-GCC-CertNetFetcherImpl-declares-Job-as-a-friend-but-.patch \
file://0001-GCC-accessing-TransportParameters-enum-class-members.patch;patchdir=net/third_party/quiche/src \
file://0001-GCC-remove-noexcept-from-move-constructor-and-assign.patch \
file://0001-Fix-AutoCompleteMatch-move-constructor-assign-operat.patch \
file://0001-Make-SharedMemoryMapping-move-constructor-noexcept.patch \
file://0001-IWYU-ThemeService-requires-NativeTheme.patch \
file://0001-Make-blink-LayoutUnit-HasFraction-constexpr.patch \
file://0001-GCC-FeaturePolicyParser-ParseValueForFuzzer-is-not-i.patch \
file://0001-Avoid-pure-virtual-crash-destroying-RenderProcessUse.patch \
file://0001-ThrottlingController-Liveness-needs-to-be-uint32_t.patch \
file://0001-GCC-avoid-ambiguous-NoDestructor-creation-in-GetNeve.patch \
file://0001-DisjoingRangeLockManager-Lock-move-constructor-assig.patch \
file://0001-GCC-XSetWindowAttributes-struct-initialization-shoul.patch \
"
2 changes: 2 additions & 0 deletions recipes-browser/chromium/chromium-stable.inc
Expand Up @@ -22,8 +22,10 @@ LIC_FILES_CHKSUM += "\
file://${S}/third_party/google_toolbox_for_mac/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
file://${S}/third_party/harfbuzz-ng/src/COPYING;md5=e021dd6dda6ff1e6b1044002fc662b9b \
file://${S}/third_party/icu/LICENSE;md5=63752c57bd0b365c9af9f427ef79c819 \
file://${S}/third_party/libjpeg_turbo/LICENSE.md;md5=843854939fbe775b4faaf7517f95b091 \
file://${S}/third_party/libpng/LICENSE;md5=c2adba923425f511c6087a7ca53270e6 \
file://${S}/third_party/libsrtp/LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1\
file://${S}/third_party/openmax_dl/LICENSE;md5=3c999c621badfd6937bcfef14f4528ce \
file://${S}/third_party/ots/LICENSE;md5=e06eff2aa65b917034a81599bea73dc4 \
file://${S}/third_party/protobuf/LICENSE;md5=37b5762e07f0af8c74ce80a8bda4266b \
file://${S}/third_party/shaderc/src/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \
Expand Down
2 changes: 0 additions & 2 deletions recipes-browser/chromium/chromium-upstream-tarball.inc
Expand Up @@ -86,7 +86,6 @@ LIC_FILES_CHKSUM = "\
file://${S}/third_party/libevdev/LICENSE;md5=9ee2ef12ddcc3b79de961c76918569b6 \
file://${S}/third_party/libjingle_xmpp/LICENSE;md5=ad296492125bc71530d06234d9bfebe0 \
file://${S}/third_party/libjpeg/LICENSE;md5=b44b6615c3ed3bad7c25c9d66de81b05 \
file://${S}/third_party/libjpeg_turbo/LICENSE.md;md5=843854939fbe775b4faaf7517f95b091 \
file://${S}/third_party/liblouis/LICENSE;md5=8ab69863de0d3a0e00c4f97a4d78dd4a \
file://${S}/third_party/libphonenumber/LICENSE;md5=e23fadd6ceef8c618fc1c65191d846fa \
file://${S}/third_party/libprotobuf-mutator/src/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
Expand All @@ -107,7 +106,6 @@ LIC_FILES_CHKSUM = "\
file://${S}/third_party/modp_b64/LICENSE;md5=eb7e2e0af1d4971360553aedadee8d86 \
file://${S}/third_party/mozilla/LICENSE;md5=822502c0e010ccdbb6a3e681dd47888e \
file://${S}/third_party/openh264/src/LICENSE;md5=bb6d3771da6a07d33fd50d4d9aa73bcf \
file://${S}/third_party/openmax_dl/LICENSE;md5=3c999c621badfd6937bcfef14f4528ce \
file://${S}/third_party/opus/src/COPYING;md5=e304cdf74c2a1b0a33a5084c128a23a3 \
file://${S}/third_party/pdfium/LICENSE;md5=defd64fe3646eb60a5d01fcbcc8b6b7c \
file://${S}/third_party/ply/LICENSE;md5=f298aa3b0cfe0b0ea96acabf944529c0 \
Expand Down
@@ -0,0 +1,48 @@
From 2764cc05de8bd0670348e56e9eb067aa2860dd87 Mon Sep 17 00:00:00 2001
From: Jose Dapena Paz <jose.dapena@lge.com>
Date: Wed, 5 Jun 2019 12:26:19 +0200
Subject: Avoid pure virtual crash destroying RenderProcessUserData

When RenderProcessUserData is destroyed from the destructor of
RenderProcessHostImpl, it is done in the destructor of RenderProcessHost.
At this point RemoveObserver override is already freed, so RenderProcessHost
is pure virtual. This crash happens at least building with GCC:

at /usr/include/c++/8/ext/new_allocator.h:140
(this=0x7fffffffcb50, __in_chrg=<optimized out>) at /usr/include/c++/8/bits/stl_tree.h:964

We need to destroy RenderProcessUserData before that happens. To do that
we can just override RenderProcessHostDestroyed.

Bug: 910288
Change-Id: I38107b178829b0cb7494f5333b765e5b087d82cd

diff --git a/chrome/browser/performance_manager/render_process_user_data.cc b/chrome/browser/performance_manager/render_process_user_data.cc
index 2e2c199d4fff..ef6e1fbfb986 100644
--- a/chrome/browser/performance_manager/render_process_user_data.cc
+++ b/chrome/browser/performance_manager/render_process_user_data.cc
@@ -116,4 +116,9 @@ void RenderProcessUserData::RenderProcessExited(
base::Unretained(process_node_.get()), info.exit_code));
}

+void RenderProcessUserData::RenderProcessHostDestroyed(
+ content::RenderProcessHost* host) {
+ host->RemoveUserData(kRenderProcessUserDataKey);
+}
+
} // namespace performance_manager
diff --git a/chrome/browser/performance_manager/render_process_user_data.h b/chrome/browser/performance_manager/render_process_user_data.h
index ac74b1df2040..f3b4d162e6d3 100644
--- a/chrome/browser/performance_manager/render_process_user_data.h
+++ b/chrome/browser/performance_manager/render_process_user_data.h
@@ -47,6 +47,7 @@ class RenderProcessUserData : public base::SupportsUserData::Data,
void RenderProcessExited(
content::RenderProcessHost* host,
const content::ChildProcessTerminationInfo& info) override;
+ void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;

// All instances are linked together in a doubly linked list to allow orderly
// destruction at browser shutdown time.
--
2.20.1

@@ -0,0 +1,36 @@
From 331c31e7273480cb04105712515323aad6d520e1 Mon Sep 17 00:00:00 2001
From: Jose Dapena Paz <jose.dapena@lge.com>
Date: Tue, 4 Jun 2019 19:21:32 +0200
Subject: DisjoingRangeLockManager::Lock move constructor/assign operator
cannot be noexcept

They depend on LockRequest, that depends on WeakPtr, none of them noexcept.

Bug: 819294
Change-Id: I04ec15901ca627358df727540597f21f135c129b

diff --git a/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc b/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc
index 478a5c920521..a18c6cd74545 100644
--- a/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc
+++ b/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc
@@ -19,14 +19,13 @@ DisjointRangeLockManager::LockRequest::LockRequest(
: requested_type(type),
locks_holder(std::move(locks_holder)),
acquired_callback(std::move(acquired_callback)) {}
-DisjointRangeLockManager::LockRequest::LockRequest(LockRequest&&) noexcept =
- default;
+DisjointRangeLockManager::LockRequest::LockRequest(LockRequest&&) = default;
DisjointRangeLockManager::LockRequest::~LockRequest() = default;
DisjointRangeLockManager::Lock::Lock() = default;
-DisjointRangeLockManager::Lock::Lock(Lock&&) noexcept = default;
+DisjointRangeLockManager::Lock::Lock(Lock&&) = default;
DisjointRangeLockManager::Lock::~Lock() = default;
DisjointRangeLockManager::Lock& DisjointRangeLockManager::Lock::operator=(
- DisjointRangeLockManager::Lock&&) noexcept = default;
+ DisjointRangeLockManager::Lock&&) = default;

DisjointRangeLockManager::DisjointRangeLockManager(int level_count)
: task_runner_(base::SequencedTaskRunnerHandle::Get()),
--
2.20.1

@@ -0,0 +1,154 @@
From ea1679622ec0dfef782f1a275a1d4ea6c8b217ba Mon Sep 17 00:00:00 2001
From: Jose Dapena Paz <jose.dapena@lge.com>
Date: Tue, 4 Jun 2019 21:26:05 +0200
Subject: Fix AutoCompleteMatch move constructor/assign operator noexcept

For AutoCompleteMatch to declare noexcept them, all the contained
properties need to be noexcept too. This fixes GCC build.

Bug: 819294
Change-Id: I8714f2c6352a3292bdebdc3aed9790270e49c580

diff --git a/components/omnibox/browser/suggestion_answer.cc b/components/omnibox/browser/suggestion_answer.cc
index 151e55f7dd58..a0c9049afedb 100644
--- a/components/omnibox/browser/suggestion_answer.cc
+++ b/components/omnibox/browser/suggestion_answer.cc
@@ -55,6 +55,12 @@ void AppendWithSpace(const SuggestionAnswer::TextField* text,

SuggestionAnswer::TextField::TextField() = default;
SuggestionAnswer::TextField::~TextField() = default;
+SuggestionAnswer::TextField::TextField(const TextField&) = default;
+SuggestionAnswer::TextField::TextField(TextField&&) noexcept = default;
+SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
+ const TextField&) = default;
+SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
+ TextField&&) noexcept = default;

// static
bool SuggestionAnswer::TextField::ParseTextField(const base::Value& field_json,
@@ -93,9 +99,12 @@ size_t SuggestionAnswer::TextField::EstimateMemoryUsage() const {
SuggestionAnswer::ImageLine::ImageLine()
: num_text_lines_(1) {}
SuggestionAnswer::ImageLine::ImageLine(const ImageLine& line) = default;
+SuggestionAnswer::ImageLine::ImageLine(ImageLine&&) noexcept = default;

SuggestionAnswer::ImageLine& SuggestionAnswer::ImageLine::operator=(
const ImageLine& line) = default;
+SuggestionAnswer::ImageLine& SuggestionAnswer::ImageLine::operator=(
+ ImageLine&&) noexcept = default;

SuggestionAnswer::ImageLine::~ImageLine() {}

@@ -251,9 +260,14 @@ SuggestionAnswer::SuggestionAnswer() = default;

SuggestionAnswer::SuggestionAnswer(const SuggestionAnswer& answer) = default;

+SuggestionAnswer::SuggestionAnswer(SuggestionAnswer&&) noexcept = default;
+
SuggestionAnswer& SuggestionAnswer::operator=(const SuggestionAnswer& answer) =
default;

+SuggestionAnswer& SuggestionAnswer::operator=(SuggestionAnswer&&) noexcept =
+ default;
+
SuggestionAnswer::~SuggestionAnswer() = default;

// static
diff --git a/components/omnibox/browser/suggestion_answer.h b/components/omnibox/browser/suggestion_answer.h
index 31be937ccbed..2840ace1c117 100644
--- a/components/omnibox/browser/suggestion_answer.h
+++ b/components/omnibox/browser/suggestion_answer.h
@@ -125,6 +125,10 @@ class SuggestionAnswer {
public:
TextField();
~TextField();
+ TextField(const TextField&);
+ TextField(TextField&&) noexcept;
+ TextField& operator=(const TextField&);
+ TextField& operator=(TextField&&) noexcept;

// Parses |field_json| dictionary and populates |text_field| with the
// contents. If any of the required elements is missing, returns false and
@@ -162,7 +166,9 @@ class SuggestionAnswer {
public:
ImageLine();
explicit ImageLine(const ImageLine& line);
+ ImageLine(ImageLine&&) noexcept;
ImageLine& operator=(const ImageLine& line);
+ ImageLine& operator=(ImageLine&&) noexcept;
~ImageLine();

// Parses dictionary |line_json| and populates |image_line| with the
@@ -213,7 +219,9 @@ class SuggestionAnswer {

SuggestionAnswer();
SuggestionAnswer(const SuggestionAnswer& answer);
+ SuggestionAnswer(SuggestionAnswer&&) noexcept;
SuggestionAnswer& operator=(const SuggestionAnswer& answer);
+ SuggestionAnswer& operator=(SuggestionAnswer&&) noexcept;
~SuggestionAnswer();

// Parses dictionary |answer_json| and fills a SuggestionAnswer containing the
diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc
index 1895362558f9..a6ecb9dbcb52 100644
--- a/components/search_engines/template_url.cc
+++ b/components/search_engines/template_url.cc
@@ -199,6 +199,12 @@ TemplateURLRef::SearchTermsArgs::SearchTermsArgs(
TemplateURLRef::SearchTermsArgs::SearchTermsArgs(const SearchTermsArgs& other) =
default;

+TemplateURLRef::SearchTermsArgs::SearchTermsArgs(SearchTermsArgs&&) noexcept =
+ default;
+
+TemplateURLRef::SearchTermsArgs& TemplateURLRef::SearchTermsArgs::operator=(
+ SearchTermsArgs&&) noexcept = default;
+
TemplateURLRef::SearchTermsArgs::~SearchTermsArgs() {
}

@@ -242,6 +248,17 @@ TemplateURLRef::SearchTermsArgs::ContextualSearchParams::ContextualSearchParams(
TemplateURLRef::SearchTermsArgs::ContextualSearchParams::ContextualSearchParams(
const ContextualSearchParams& other) = default;

+TemplateURLRef::SearchTermsArgs::ContextualSearchParams::ContextualSearchParams(
+ ContextualSearchParams&&) noexcept = default;
+
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams&
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams::operator=(
+ const ContextualSearchParams&) = default;
+
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams&
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams::operator=(
+ ContextualSearchParams&&) noexcept = default;
+
TemplateURLRef::SearchTermsArgs::ContextualSearchParams::
~ContextualSearchParams() {
}
diff --git a/components/search_engines/template_url.h b/components/search_engines/template_url.h
index 21c68f029f14..be1ab05e0a45 100644
--- a/components/search_engines/template_url.h
+++ b/components/search_engines/template_url.h
@@ -73,7 +73,9 @@ class TemplateURLRef {
struct SearchTermsArgs {
explicit SearchTermsArgs(const base::string16& search_terms);
SearchTermsArgs(const SearchTermsArgs& other);
+ SearchTermsArgs(SearchTermsArgs&&) noexcept;
~SearchTermsArgs();
+ SearchTermsArgs& operator=(SearchTermsArgs&&) noexcept;

struct ContextualSearchParams {
ContextualSearchParams();
@@ -97,7 +99,10 @@ class TemplateURLRef {
int64_t previous_event_id,
int previous_event_results);
ContextualSearchParams(const ContextualSearchParams& other);
+ ContextualSearchParams(ContextualSearchParams&&) noexcept;
~ContextualSearchParams();
+ ContextualSearchParams& operator=(const ContextualSearchParams&);
+ ContextualSearchParams& operator=(ContextualSearchParams&&) noexcept;

// Estimates dynamic memory usage.
// See base/trace_event/memory_usage_estimator.h for more info.
--
2.20.1

0 comments on commit 486e46d

Please sign in to comment.