Skip to content

Commit

Permalink
Update nodejs16 to version 16.13.0 / rev 12 via SR 930406
Browse files Browse the repository at this point in the history
https://build.opensuse.org/request/show/930406
by user adamm + dimstar_suse
- BR python 3.6+

- Update to 16.13.0:
  * Experimental ESM Loader Hooks API
    nodejs/node#37468
  * deps: upgrade npm to 8.1.0 (npm team)
  * vm: add support for import assertions in dynamic imports
- Changes in 16.11.1:
  * deps: update llhttp to 6.0.4
    - HTTP Request Smuggling due to spaced in headers
     (bsc#1191601, CVE-2021-22959)
    - HTTP Request Smuggling when parsing the body
     (bsc#1191602, CVE-2021-22960)
- Changes in 16.11.0:
  * deps: update nghttp2 to v1.45.1
- Changes in 16.10.0:
  * crypto: add rsa-pss keygen parameters
  * fs: make open and close stream override optional when unused
  * http: limit requests per connection
    The maximum number of requests a socket can handle before closing
    keep alive connection can be set with server
  • Loading branch information
adamm authored and bmwiedemann committed Nov 20, 2021
1 parent dc89d0c commit e643880
Show file tree
Hide file tree
Showing 15 changed files with 358 additions and 309 deletions.
Binary file modified packages/n/nodejs16/.files
Binary file not shown.
37 changes: 37 additions & 0 deletions packages/n/nodejs16/.rev
Expand Up @@ -144,4 +144,41 @@
- nodejs16.spec: Reference it.</comment>
<requestid>928966</requestid>
</revision>
<revision rev="12" vrev="1">
<srcmd5>28933a5c83961a1298ec2fbdde6bc03d</srcmd5>
<version>16.13.0</version>
<time>1637372297</time>
<user>dimstar_suse</user>
<comment>- BR python 3.6+

- Update to 16.13.0:
* Experimental ESM Loader Hooks API
https://github.com/nodejs/node/pull/37468
* deps: upgrade npm to 8.1.0 (npm team)
* vm: add support for import assertions in dynamic imports
- Changes in 16.11.1:
* deps: update llhttp to 6.0.4
- HTTP Request Smuggling due to spaced in headers
(bsc#1191601, CVE-2021-22959)
- HTTP Request Smuggling when parsing the body
(bsc#1191602, CVE-2021-22960)
- Changes in 16.11.0:
* deps: update nghttp2 to v1.45.1
- Changes in 16.10.0:
* crypto: add rsa-pss keygen parameters
* fs: make open and close stream override optional when unused
* http: limit requests per connection
The maximum number of requests a socket can handle before closing
keep alive connection can be set with server.maxRequestsPerSocket.
* src: add --no-global-search-paths cli option
* stream: add signal support to pipeline generators
- Changes in 16.9.0:
* Added support for corepack
* crypto: add RSA-PSS params to asymmetricKeyDetails
* module: support pattern trailers
* stream: add stream.compose
- Changes in 16.8.0:
* doc: deprecate type coercion for dns.lookup options</comment>
<requestid>930406</requestid>
</revision>
</revisionlist>
68 changes: 34 additions & 34 deletions packages/n/nodejs16/SHASUMS256.txt
@@ -1,34 +1,34 @@
2a51635501451a88f6addc192a79b6d36cc40dcf3a198a54037ab26fa6305043 node-v16.6.2-aix-ppc64.tar.gz
29e46e83f6837ff1c815c49f590c25fa51b0811a6590c62120a9d464ba431fc6 node-v16.6.2-darwin-arm64.tar.gz
befbfdec7c2118689544ef596e990aae2fcd1227707c6a8475056be14ce2ee8d node-v16.6.2-darwin-arm64.tar.xz
74e95aca0ea88ed2d9270dccc1e3e62500912be5fef1528bb11f178c468f312c node-v16.6.2-darwin-x64.tar.gz
21c9417c38d9bee140c659f7cf11806ec866af3f7053bd17ec45757a902c9956 node-v16.6.2-darwin-x64.tar.xz
7764da71e22d57746d65eb408dc80cbd7f6eed7f38b558684fa60571d1c69b26 node-v16.6.2-headers.tar.gz
e4bf9c8db91d149d9f3cebd79621571079ffb9d92dca10e7d260120ff99b428e node-v16.6.2-headers.tar.xz
c51a94f28a29c390d20445d9b334a9808d3166bd244ebc03852d23c0b17a93ca node-v16.6.2-linux-arm64.tar.gz
d885ffcef367a010e2b21a283ec96721e92b29f222de5d943bc7188e48f30349 node-v16.6.2-linux-arm64.tar.xz
1ba5287c941cef2da53c0d80db7db7124971b1c933f222ca7f2eb833e1817f35 node-v16.6.2-linux-armv7l.tar.gz
9756e763910ab7277346307fb5c4d34370ab3bb7d957129f58a65bf69f2af93b node-v16.6.2-linux-armv7l.tar.xz
a966ea0d258c0e4a2c23b77f49f85bd7a4a4ff674fcd0d625a7fa48370d14d15 node-v16.6.2-linux-ppc64le.tar.gz
c2ee7961f1f217b0cc57a15efc3372b0495f6e1775a3e7f50b153b9db7c46be9 node-v16.6.2-linux-ppc64le.tar.xz
31e27413ff29607af54fcf842105a5290f2556add1b009b8e28240f96f742638 node-v16.6.2-linux-s390x.tar.gz
c3d6b4f7bf055f257abc07862743b614bdba00fd096a863eaadc700ae0939c98 node-v16.6.2-linux-s390x.tar.xz
913913f62416b96dee5f463b54e1adebaf669dd2ff3b047d6290deadc3003d97 node-v16.6.2-linux-x64.tar.gz
90c88cf6ca06dcd6d20c2b6dba5ff84d1f831446c25ef650f86e86bb94239353 node-v16.6.2-linux-x64.tar.xz
5bb14dafbac87efb74d3e050a90de68eb407ecadd52f12a1b4e937ec59884792 node-v16.6.2.pkg
e8df4a0084c379a37c11b315b7d068760a38598119d7ca9262977adcbbb58933 node-v16.6.2.tar.gz
8794cba1f971e4200a38690c76d7cc0a3bd1cba96fbf4305dfbe21fc459d79eb node-v16.6.2.tar.xz
152e36fe0493f37d3be939c7f9c3a975c9f39a3346d66787b59e2db28ed2eeb6 node-v16.6.2-win-x64.7z
e7e05eb133fce48b76b4db6714d80aea90872afec176599585bc1aa457fb41b9 node-v16.6.2-win-x64.zip
b40c0f3bf401ff56c558de3a24b33101273c622e664e1e5df4d08444aa4ae7df node-v16.6.2-win-x86.7z
b7324b70ed37e14878cde39cd69099368513068495b25d97f1423591c0206685 node-v16.6.2-win-x86.zip
6cb05e722749c98cc9d0d1b2ef0c3a4c5c05da83a00b4ef04cee0bd4a3cfbbc7 node-v16.6.2-x64.msi
22b21336d6ae8d16a1e45d38bd198831aa27ddf8a61d52831cfbd3ba5d2866e0 node-v16.6.2-x86.msi
9c99a5255dabc044bd262df07ec8e6ba3351e38d003121ed8739906bf5f0eb42 win-x64/node.exe
e7484e4552df7e992e5d409e518aa467555769dc85917da408d41f85c4f2823d win-x64/node.lib
a44ba1e9c42f84d80a9c29871a22c687e7f35ae358a898813d50b02866b8d6e9 win-x64/node_pdb.7z
bfdfedc1829855dcb1545661963dcb98d72ea517a4be3926a8c35f5120a72637 win-x64/node_pdb.zip
5dc410d110cb86a0e9fd58f30b5c1208915e733e3ab222e71fbdb0aa1a3755f3 win-x86/node.exe
7821ab6af3cef68eee042ef6b7fb2185eafff8bd4e4c988c8fc6c1d0242d2bcd win-x86/node.lib
cee7fe2c53d99e9c7bca0e7485a35c49d0f01ad131a790199cdb68e1383b946d win-x86/node_pdb.7z
32f1c9673025980c1563bf173c02bf3ae81a0a8c0e30673a3e906b3adff0519a win-x86/node_pdb.zip
eadf10e991a690c2af98b6df8a118336ded513d6b13a83721bb28bec290df908 node-v16.13.0-aix-ppc64.tar.gz
46d83fc0bd971db5050ef1b15afc44a6665dee40bd6c1cbaec23e1b40fa49e6d node-v16.13.0-darwin-arm64.tar.gz
ca8d79ceecfa8b7d74651fba648c9034f6108070b7cd02437ecb2b7f103842d4 node-v16.13.0-darwin-arm64.tar.xz
37e09a8cf2352f340d1204c6154058d81362fef4ec488b0197b2ce36b3f0367a node-v16.13.0-darwin-x64.tar.gz
8dc70eb0965896a4d1755e719be2b5efeff7cb8a54e1f3b8dccc5a2864965504 node-v16.13.0-darwin-x64.tar.xz
9abfc6dcd32bce3b9a978b8c23b8bb48a562c94919feba489f9bb9d4bbeeae66 node-v16.13.0-headers.tar.gz
9f38e4e1702dde08937125d618c0de119bd77da4665e584aaffc332691af7ef1 node-v16.13.0-headers.tar.xz
46e3857f5552abd36d9548380d795b043a3ceec2504e69fe1a754fa76012daaf node-v16.13.0-linux-arm64.tar.gz
93a0d03f9f802353cb7052bc97a02cd9642b49fa985671cdc16c99936c86d7d2 node-v16.13.0-linux-arm64.tar.xz
3d22bc15b47c26129d56745cd587ead7e240a36968ceb3c4105bebc5c6a0be16 node-v16.13.0-linux-armv7l.tar.gz
c2c548387ec6b08291b746423bfdf6475948561884985cad16a95983e4913ee4 node-v16.13.0-linux-armv7l.tar.xz
3ed1d82ecd6eee3549e9b7f4e65c8a42cbc77f1c6e4da35cf7e496d540fa1760 node-v16.13.0-linux-ppc64le.tar.gz
46ae5cd3b4c554a600d1b3df5ead1567f6f223a7d4d4667a2be92a67ae70aea7 node-v16.13.0-linux-ppc64le.tar.xz
8883af58d2e7c8f8c8311a9504ba1d6ce77c6badc7120165823a516049378042 node-v16.13.0-linux-s390x.tar.gz
49e972bf3e969d621157df4c8f2fa18ff748c167d5ebd0efc87e1b9f0c6541cc node-v16.13.0-linux-s390x.tar.xz
589b7e7eb22f8358797a2c14a0bd865459d0b44458b8f05d2721294dacc7f734 node-v16.13.0-linux-x64.tar.gz
a876ce787133149abd1696afa54b0b5bc5ce3d5ae359081d407ff776e39b7ba8 node-v16.13.0-linux-x64.tar.xz
33c3b6eba6b7f82413545b3789b35bf9b9a187f92c984d6c5555934c773ce4fc node-v16.13.0.pkg
9c00e5b6024cfcbc9105f9c58cf160762e78659a345d100c5bd80a7fb38c684f node-v16.13.0.tar.gz
32114b3dc3945ed0f95f8bc33b42c68e0ef18c408cb56122572a163d907ecbcc node-v16.13.0.tar.xz
f4402bebb34339d9b6f1814df17eed278ec79ec6f0f7501203b2681b284c644d node-v16.13.0-win-x64.7z
5a39ec5d4786c2814a6c04488bebac6423c2aaa12832b24f0882456f2e4674e1 node-v16.13.0-win-x64.zip
d93bceda06924a46c7035d74e99dd58802960f4ce9dc6c3aa8c55118612c4106 node-v16.13.0-win-x86.7z
dd2e7fccf073ac356878e541dd4e165f05ff145fe9722feb52613f58f88ded7b node-v16.13.0-win-x86.zip
bf55b68293b163423ea4856c1d330be23158e78aea18a8756cfdff6fb6ffcd88 node-v16.13.0-x64.msi
53443f9147d86d538ee24ef9897ae0ff0be740c18fd0e3c17058dbafe343364f node-v16.13.0-x86.msi
7fca04f83b0e2169e41b2e1845e8da0f07d66cf9c3a1b4150767bf3ffddccf62 win-x64/node.exe
7c94657df6918a77dc8edefaf3b5415dbfb9eb83a88c17d216a48c8c36fcc58d win-x64/node.lib
1009402493f1eba91c587486033fd46d8006cb7d9c41b84abc19fa3ba18b0d55 win-x64/node_pdb.7z
72d08ea9e7a7b10d8d1da92a0261e60f71e1f0cf1e14443db8477cad9fcd511e win-x64/node_pdb.zip
0414fdd69004885755cb6782100970e62814d6f1f66ce1d6ba0d7bf89c2522f6 win-x86/node.exe
8090f51a19ff2d5e765920262a4367203be2e69e64ac3725e4e14dd034c98443 win-x86/node.lib
90759e7c7aa604f25ba3454618834d3a31a30bd8c500a8625d4dd270a8127614 win-x86/node_pdb.7z
703b18c4ffcd5f082254a4885cd58f3924352dc7c2287749b0087cdfc1b7f2ce win-x86/node_pdb.zip
Binary file modified packages/n/nodejs16/SHASUMS256.txt.sig
Binary file not shown.
57 changes: 22 additions & 35 deletions packages/n/nodejs16/fix_ci_tests.patch
Expand Up @@ -2,10 +2,10 @@ Author: Adam Majer <amajer@suse.de>
Date: Dec 20 09:18:49 UTC 2017
Summary: Fix CI unit tests framework for OBS building

Index: node-v16.5.0/test/parallel/test-module-loading-globalpaths.js
Index: node-v16.13.0/test/parallel/test-module-loading-globalpaths.js
===================================================================
--- node-v16.5.0.orig/test/parallel/test-module-loading-globalpaths.js
+++ node-v16.5.0/test/parallel/test-module-loading-globalpaths.js
--- node-v16.13.0.orig/test/parallel/test-module-loading-globalpaths.js
+++ node-v16.13.0/test/parallel/test-module-loading-globalpaths.js
@@ -11,6 +11,9 @@ const { addLibraryPath } = require('../c

addLibraryPath(process.env);
Expand All @@ -16,23 +16,10 @@ Index: node-v16.5.0/test/parallel/test-module-loading-globalpaths.js
if (process.argv[2] === 'child') {
console.log(require(pkgName).string);
} else {
Index: node-v16.5.0/test/parallel/test-tls-env-bad-extra-ca.js
Index: node-v16.13.0/test/parallel/test-tls-passphrase.js
===================================================================
--- node-v16.5.0.orig/test/parallel/test-tls-env-bad-extra-ca.js
+++ node-v16.5.0/test/parallel/test-tls-env-bad-extra-ca.js
@@ -37,7 +37,7 @@ fork(__filename, opts)
// TODO(addaleax): Make `SafeGetenv` work like `process.env`
// encoding-wise
if (!common.isWindows) {
- const re = /Warning: Ignoring extra certs from.*no-such-file-exists-🐢.* load failed:.*No such file or directory/;
+ const re = /Warning: Ignoring extra certs from.*no-such-file-exists-.* load failed:.*/;
assert(re.test(stderr), stderr);
}
}))
Index: node-v16.5.0/test/parallel/test-tls-passphrase.js
===================================================================
--- node-v16.5.0.orig/test/parallel/test-tls-passphrase.js
+++ node-v16.5.0/test/parallel/test-tls-passphrase.js
--- node-v16.13.0.orig/test/parallel/test-tls-passphrase.js
+++ node-v16.13.0/test/parallel/test-tls-passphrase.js
@@ -224,7 +224,7 @@ server.listen(0, common.mustCall(functio
})).unref();

Expand All @@ -51,10 +38,10 @@ Index: node-v16.5.0/test/parallel/test-tls-passphrase.js

// Invalid passphrase
assert.throws(function() {
Index: node-v16.5.0/test/parallel/test-repl-envvars.js
Index: node-v16.13.0/test/parallel/test-repl-envvars.js
===================================================================
--- node-v16.5.0.orig/test/parallel/test-repl-envvars.js
+++ node-v16.5.0/test/parallel/test-repl-envvars.js
--- node-v16.13.0.orig/test/parallel/test-repl-envvars.js
+++ node-v16.13.0/test/parallel/test-repl-envvars.js
@@ -2,7 +2,9 @@

// Flags: --expose-internals
Expand All @@ -66,31 +53,31 @@ Index: node-v16.5.0/test/parallel/test-repl-envvars.js
const stream = require('stream');
const REPL = require('internal/repl');
const assert = require('assert');
Index: node-v16.5.0/test/common/index.mjs
Index: node-v16.13.0/test/common/index.mjs
===================================================================
--- node-v16.5.0.orig/test/common/index.mjs
+++ node-v16.5.0/test/common/index.mjs
@@ -44,6 +44,7 @@ const {
--- node-v16.13.0.orig/test/common/index.mjs
+++ node-v16.13.0/test/common/index.mjs
@@ -42,6 +42,7 @@ const {
expectsError,
skipIfInspectorDisabled,
skipIf32Bits,
+ skipIfWorker,
getArrayBufferViews,
getBufferSources,
getTTYfd,
@@ -89,6 +90,7 @@ export {
@@ -87,6 +88,7 @@ export {
expectsError,
skipIfInspectorDisabled,
skipIf32Bits,
+ skipIfWorker,
getArrayBufferViews,
getBufferSources,
getTTYfd,
Index: node-v16.5.0/Makefile
Index: node-v16.13.0/Makefile
===================================================================
--- node-v16.5.0.orig/Makefile
+++ node-v16.5.0/Makefile
@@ -509,7 +509,8 @@ test-ci-js: | clear-stalled
--- node-v16.13.0.orig/Makefile
+++ node-v16.13.0/Makefile
@@ -508,7 +508,8 @@ test-ci-js: | clear-stalled
.PHONY: test-ci
# Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned
test-ci: LOGLEVEL := info
Expand All @@ -100,7 +87,7 @@ Index: node-v16.5.0/Makefile
out/Release/cctest --gtest_output=xml:out/junit/cctest.xml
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \
@@ -687,7 +688,8 @@ apidocs_json = $(addprefix out/,$(apidoc
@@ -684,7 +685,8 @@ apidocs_json = $(addprefix out/,$(apidoc
apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*)))

tools/doc/node_modules: tools/doc/package.json
Expand All @@ -110,10 +97,10 @@ Index: node-v16.5.0/Makefile
echo "Skipping tools/doc/node_modules (no crypto)"; \
else \
cd tools/doc && $(call available-node,$(run-npm-ci)) \
Index: node-v16.5.0/test/parallel/test-crypto-dh.js
Index: node-v16.13.0/test/parallel/test-crypto-dh.js
===================================================================
--- node-v16.5.0.orig/test/parallel/test-crypto-dh.js
+++ node-v16.5.0/test/parallel/test-crypto-dh.js
--- node-v16.13.0.orig/test/parallel/test-crypto-dh.js
+++ node-v16.13.0/test/parallel/test-crypto-dh.js
@@ -189,7 +189,7 @@ assert.throws(() => {
dh3.computeSecret('');
}, { message: common.hasOpenSSL3 ?
Expand Down
8 changes: 4 additions & 4 deletions packages/n/nodejs16/flaky_test_rerun.patch
@@ -1,8 +1,8 @@
Index: node-git.b4f0a18b5a/tools/test.py
Index: node-v16.13.0/tools/test.py
===================================================================
--- node-git.b4f0a18b5a.orig/tools/test.py
+++ node-git.b4f0a18b5a/tools/test.py
@@ -537,6 +537,16 @@ class TestCase(object):
--- node-v16.13.0.orig/tools/test.py
+++ node-v16.13.0/tools/test.py
@@ -586,6 +586,16 @@ class TestCase(object):
self.context.store_unexpected_output)

def Run(self):
Expand Down
1 change: 0 additions & 1 deletion packages/n/nodejs16/node-gyp_7.1.2.tar.xz

This file was deleted.

1 change: 1 addition & 0 deletions packages/n/nodejs16/node-v16.13.0.tar.xz
1 change: 0 additions & 1 deletion packages/n/nodejs16/node-v16.6.2.tar.xz

This file was deleted.

2 changes: 1 addition & 1 deletion packages/n/nodejs16/node_modules.tar.xz
67 changes: 35 additions & 32 deletions packages/n/nodejs16/nodejs-libpath.patch
@@ -1,56 +1,59 @@
Index: node-git.4cc76457d9/tools/install.py
Index: node-v16.13.0/tools/install.py
===================================================================
--- node-git.4cc76457d9.orig/tools/install.py
+++ node-git.4cc76457d9/tools/install.py
@@ -7,6 +7,7 @@ import errno
--- node-v16.13.0.orig/tools/install.py
+++ node-v16.13.0/tools/install.py
@@ -7,6 +7,8 @@ import errno
import os
import shutil
import sys
+from distutils import sysconfig
+import re

# set at init time
node_prefix = '/usr/local' # PREFIX variable from Makefile
@@ -80,7 +81,7 @@ def uninstall(paths, dst):
@@ -65,6 +67,10 @@ def try_copy(path, dst):
try_unlink(target_path) # prevent ETXTBSY errors
return shutil.copy2(source_path, target_path)

+def libdir():
+ libdir_fq = sysconfig.get_config_var("LIBDIR")
+ return re.sub("^" + re.escape(node_prefix + "/"), "", libdir_fq)
+
def try_remove(path, dst):
source_path, target_path = mkpaths(path, dst)
print('removing %s' % target_path)
@@ -80,7 +86,7 @@ def uninstall(paths, dst):
try_remove(path, dst)

def npm_files(action):
- target_path = 'lib/node_modules/npm/'
+ target_path = sysconfig.get_config_var("LIB") + '/node_modules/npm/'
def package_files(action, name, bins):
- target_path = 'lib/node_modules/' + name + '/'
+ target_path = libdir() + '/node_modules/' + name + '/'

# don't install npm if the target path is a symlink, it probably means
# that a dev version of npm is installed there
@@ -98,7 +99,7 @@ def npm_files(action):
if action == uninstall:
action([link_path], 'bin/npm')
elif action == install:
- try_symlink('../lib/node_modules/npm/bin/npm-cli.js', link_path)
+ try_symlink("../" + sysconfig.get_config_var("LIB") + '/node_modules/npm/bin/npm-cli.js',link_path)
else:
assert 0 # unhandled action type

@@ -107,7 +108,7 @@ def npm_files(action):
if action == uninstall:
action([link_path], 'bin/npx')
elif action == install:
- try_symlink('../lib/node_modules/npm/bin/npx-cli.js', link_path)
+ try_symlink('../' + sysconfig.get_config_var("LIB") + '/node_modules/npm/bin/npx-cli.js', link_path)
else:
assert 0 # unhandled action type

@@ -139,7 +140,7 @@ def files(action):
@@ -100,7 +106,7 @@ def package_files(action, name, bins):
if action == uninstall:
action([link_path], 'bin/' + bin_name)
elif action == install:
- try_symlink('../lib/node_modules/' + name + '/' + bin_target, link_path)
+ try_symlink('../' + libdir() + '/node_modules/' + name + '/' + bin_target, link_path)
else:
assert 0 # unhandled action type

@@ -148,7 +154,7 @@ def files(action):
action([output_prefix + output_file], 'lib/' + output_file)

if 'true' == variables.get('node_use_dtrace'):
- action(['out/Release/node.d'], 'lib/dtrace/node.d')
+ action(['out/Release/node.d'], sysconfig.get_config_var("LIB") + '/dtrace/node.d')
+ action(['out/Release/node.d'], libdir() + '/dtrace/node.d')

# behave similarly for systemtap
action(['src/node.stp'], 'share/systemtap/tapset/')
Index: node-git.4cc76457d9/lib/internal/modules/cjs/loader.js
Index: node-v16.13.0/lib/internal/modules/cjs/loader.js
===================================================================
--- node-git.4cc76457d9.orig/lib/internal/modules/cjs/loader.js
+++ node-git.4cc76457d9/lib/internal/modules/cjs/loader.js
@@ -1209,7 +1209,7 @@ Module._initPaths = function() {
--- node-v16.13.0.orig/lib/internal/modules/cjs/loader.js
+++ node-v16.13.0/lib/internal/modules/cjs/loader.js
@@ -1234,7 +1234,7 @@ Module._initPaths = function() {
path.resolve(process.execPath, '..') :
path.resolve(process.execPath, '..', '..');

Expand Down

0 comments on commit e643880

Please sign in to comment.