diff --git a/meta-openembedded/meta-oe/classes/signing.bbclass b/meta-openembedded/meta-oe/classes/signing.bbclass
index ec076d9..f52d861 100644
--- a/meta-openembedded/meta-oe/classes/signing.bbclass
+++ b/meta-openembedded/meta-oe/classes/signing.bbclass
@@ -6,9 +6,9 @@
 
 # This class provides a common workflow to use asymmetric (i.e. RSA) keys to
 # sign artifacts. Usually, the keys are either stored as simple files in the
-# file system or on a HSM (Hardware Security Module). While files are easy to
-# use, it's hard to verify that no copies of the private have been made and
-# only authorized persons are able to use the key. Use of an HSM addresses
+# file system or on an HSM (Hardware Security Module). While files are easy to
+# use, it's hard to verify that no copies of the private key have been made
+# and only authorized persons are able to use the key. Use of an HSM addresses
 # these risks by only allowing use of the key via an API (often PKCS #11). The
 # standard way of referring to a specific key in an HSM are PKCS #11 URIs (RFC
 # 7512).
diff --git a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
index a0e23be..fadec12 100644
--- a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
+++ b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
@@ -18,6 +18,7 @@
     leveldb \
     libcereal \
     libee \
+    libgpiod \
     libio-pty-perl \
     libmanette \
     librelp \
@@ -62,7 +63,6 @@
     jemalloc \
     keyutils \
     libdbi-perl \
-    libgpiod \
     libjcat \
     libteam \
     libxml++ \
diff --git a/meta-openembedded/meta-oe/conf/layer.conf b/meta-openembedded/meta-oe/conf/layer.conf
index 6b64328..732a7e5 100644
--- a/meta-openembedded/meta-oe/conf/layer.conf
+++ b/meta-openembedded/meta-oe/conf/layer.conf
@@ -50,6 +50,7 @@
 
 PREFERRED_RPROVIDER_libdevmapper = "lvm2"
 PREFERRED_RPROVIDER_libdevmapper-native = "lvm2-native"
+PREFERRED_RPROVIDER_nativesdk-libdevmapper = "nativesdk-lvm2"
 PREFERRED_PROVIDER_android-tools-conf ?= "android-tools-conf"
 # Configures whether coreutils or uutils-coreutils is used.
 PREFERRED_PROVIDER_coreutils = "coreutils"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0003-GLVisualConfig-By-default-don-t-care-about-the-stenc.patch b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0003-GLVisualConfig-By-default-don-t-care-about-the-stenc.patch
new file mode 100644
index 0000000..dc47af8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/files/0003-GLVisualConfig-By-default-don-t-care-about-the-stenc.patch
@@ -0,0 +1,103 @@
+From b59ec731c8c7e084b289e4ea92938faaebcc389d Mon Sep 17 00:00:00 2001
+From: Alexandros Frantzis <alexandros.frantzis@collabora.com>
+Date: Wed, 1 Nov 2023 13:43:00 +0200
+Subject: [PATCH] GLVisualConfig: By default don't care about the stencil
+ config component
+
+Our benchmarks don't use a stencil buffer, but its presence doesn't hurt
+either, so don't mark configs that have one as unacceptable. Our scoring
+still favors configs without one, unless the user explicitly specifies
+otherwise with --visual-config.
+
+Upstream-Status: Backport [https://github.com/glmark2/glmark2/commit/5f23d540342ba69e12afeb6a1ac4f6fd36747975]
+---
+ doc/glmark2.1.in         | 2 +-
+ src/gl-visual-config.cpp | 9 ++++++---
+ src/gl-visual-config.h   | 2 +-
+ src/options.cpp          | 6 +++---
+ 4 files changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/doc/glmark2.1.in b/doc/glmark2.1.in
+index 015ba20..1f4a047 100644
+--- a/doc/glmark2.1.in
++++ b/doc/glmark2.1.in
+@@ -38,7 +38,7 @@ Render to an off-screen surface
+ The visual configuration to use for the rendering target:
+ \'id=ID:red=R:green=G:blue=B:alpha=A:buffer=BUF:stencil=STENCIL:samples=SAMPLES'.
+ The parameters may be defined in any order, and any omitted parameters assume a
+-default value of '0' (id, stencil, samples) or '1' (red, green, blue, alpha, buffer).
++default value of '0' (id, samples), -1 (stencil) or '1' (red, green, blue, alpha, buffer).
+ If 'id' is set to a non-zero value, all other parameters are ignored
+ .TP
+ \fB\-\-reuse\-context\fR
+diff --git a/src/gl-visual-config.cpp b/src/gl-visual-config.cpp
+index de92f93..665f53a 100644
+--- a/src/gl-visual-config.cpp
++++ b/src/gl-visual-config.cpp
+@@ -26,7 +26,7 @@
+ #include <vector>
+ 
+ GLVisualConfig::GLVisualConfig(const std::string &s) :
+-    id(0), red(1), green(1), blue(1), alpha(1), depth(1), stencil(0), buffer(1), samples(0)
++    GLVisualConfig()
+ {
+     std::vector<std::string> elems;
+ 
+@@ -85,7 +85,7 @@ GLVisualConfig::match_score(const GLVisualConfig &target) const
+     score += score_component(blue, target.blue, 4);
+     score += score_component(alpha, target.alpha, 4);
+     score += score_component(depth, target.depth, 1);
+-    score += score_component(stencil, target.stencil, 0);
++    score += score_component(stencil, target.stencil, 1);
+     score += score_component(buffer, target.buffer, 1);
+     score += score_component(samples, target.samples, -1);
+ 
+@@ -135,11 +135,14 @@ GLVisualConfig::score_component(int component, int target, int scale) const
+          * score for all components ranges from [0,MAXIMUM_COMPONENT_SCORE).
+          * If scale > 0, we reward the largest positive difference from target,
+          * otherwise the smallest positive difference from target.
++         * We also reward the smallest positive difference from the target,
++         * if the target < 0, i.e., we don't care about this value.
+          */
+         int diff = std::abs(scale) * (component - target);
+         if (diff > 0)
+         {
+-            score = scale < 0 ? MAXIMUM_COMPONENT_SCORE - diff : diff;
++            score = (scale < 0 || target < 0) ?
++                    MAXIMUM_COMPONENT_SCORE - diff : diff;
+             score = std::min(MAXIMUM_COMPONENT_SCORE, score);
+             score = std::max(0, score);
+         }
+diff --git a/src/gl-visual-config.h b/src/gl-visual-config.h
+index b28473f..013ce14 100644
+--- a/src/gl-visual-config.h
++++ b/src/gl-visual-config.h
+@@ -31,7 +31,7 @@ class GLVisualConfig
+ {
+ public:
+     GLVisualConfig():
+-        id(0), red(1), green(1), blue(1), alpha(1), depth(1), stencil(0), buffer(1), samples(0) {}
++        id(0), red(1), green(1), blue(1), alpha(1), depth(1), stencil(-1), buffer(1), samples(0) {}
+     GLVisualConfig(const std::string &s);
+ 
+     /**
+diff --git a/src/options.cpp b/src/options.cpp
+index 8d1ec16..3a31d3d 100644
+--- a/src/options.cpp
++++ b/src/options.cpp
+@@ -213,9 +213,9 @@ Options::print_help()
+            "                         target: 'id=ID:red=R:green=G:blue=B:alpha=A:buffer=BUF:\n"
+            "                         stencil=STENCIL:samples=SAMPLES'. The parameters may be\n"
+            "                         defined in any order, and any omitted parameters assume a\n"
+-           "                         default value of '0' (id, stencil, samples) or '1' (red,\n"
+-           "                         green, blue, alpha, buffer). If 'id' is set to a non-zero\n"
+-           "                         value, all other parameters are ignored\n"
++           "                         default value of '0' (id, samples), '-1' (stencil) or\n"
++           "                         '1' (red, green, blue, alpha, buffer). If 'id' is set to\n"
++           "                         a non-zero value, all other parameters are ignored\n"
+            "      --reuse-context    Use a single context for all scenes\n"
+            "                         (by default, each scene gets its own context)\n"
+            "  -s, --size WxH         Size of the output window (default: 800x600)\n"
+-- 
+2.44.0
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
index a2d5b15..0b61d6e 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
@@ -17,6 +17,7 @@
     git://github.com/glmark2/glmark2.git;protocol=https;branch=master \
     file://0001-fix-dispmanx-build.patch \
     file://0002-run-dispmanx-fullscreen.patch \
+    file://0003-GLVisualConfig-By-default-don-t-care-about-the-stenc.patch \
 "
 SRCREV = "42e3d8fe3aa88743ef90348138f643f7b04a9237"
 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0001-configure.ac-check-for-CPP-prog.patch b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0001-configure.ac-check-for-CPP-prog.patch
index 09e3d9c..a67be4d 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0001-configure.ac-check-for-CPP-prog.patch
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3/0001-configure.ac-check-for-CPP-prog.patch
@@ -1,4 +1,4 @@
-From 4801363fbff12bf1019aaf90142981702cecff92 Mon Sep 17 00:00:00 2001
+From 80d208e47a525c915e3961efa61ccf91120ffafa Mon Sep 17 00:00:00 2001
 From: Andrey Zhizhikin <andrey.z@gmail.com>
 Date: Wed, 3 Feb 2021 20:44:34 +0000
 Subject: [PATCH] configure.ac: check for CPP prog
@@ -10,20 +10,19 @@
 
 Upstream-Status: Pending
 Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
-
 ---
  configure.ac | 1 +
  1 file changed, 1 insertion(+)
 
 diff --git a/configure.ac b/configure.ac
-index 53a4db4..3462b3e 100644
+index 2594b39..559b160 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -48,6 +48,7 @@ AC_CANONICAL_HOST
+@@ -49,6 +49,7 @@ AC_CANONICAL_HOST
  # Checks for tools: c compiler, ranlib (used for creating static libraries),
  # symlinks and libtool
  AC_PROG_CC
 +AC_PROG_CPP
- AC_PROG_RANLIB
  AC_PROG_LN_S
- LT_INIT
+ 
+ # Add -Wall if we are using GCC.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.15.bb b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.16.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.15.bb
rename to meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.16.bb
index 156bb5a..5cec4c6 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.15.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.16.bb
@@ -17,7 +17,7 @@
            file://0001-configure.ac-check-for-CPP-prog.patch \
            "
 
-SRCREV = "917d2f02188f6f4cdc443df7923a4bde72017d92"
+SRCREV = "f9481e1cd35159929458513692e4a8f9fdd1bd6f"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.20.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.21.2.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.20.2.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.21.2.bb
index e1fe5e5..7af33e4 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.20.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.21.2.bb
@@ -14,7 +14,7 @@
 HOMEPAGE = "http://web.mit.edu/Kerberos/"
 SECTION = "console/network"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${S}/../NOTICE;md5=3c7414a99de5452b8f809ae2753b0855"
+LIC_FILES_CHKSUM = "file://${S}/../NOTICE;md5=32cb3a99207053d9f5c1ef177c4d6e34"
 
 inherit autotools-brokensep binconfig perlnative systemd update-rc.d pkgconfig
 
@@ -29,8 +29,8 @@
            file://krb5-kdc.service \
            file://krb5-admin-server.service \
 "
-SRC_URI[md5sum] = "7ac456e97c4959ebe5c836dc2f5aab2c"
-SRC_URI[sha256sum] = "7d8d687d42aed350c2525cb69a4fc3aa791694da6761dccc1c42c2ee7796b5dd"
+
+SRC_URI[sha256sum] = "9560941a9d843c0243a71b17a7ac6fe31c7cebb5bce3983db79e52ae7e850491"
 
 CVE_PRODUCT = "kerberos"
 CVE_VERSION = "5-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox-inittab_0.8.2.bb b/meta-openembedded/meta-oe/recipes-core/toybox/toybox-inittab_0.8.2.bb
index 603f365..4cad7dc 100644
--- a/meta-openembedded/meta-oe/recipes-core/toybox/toybox-inittab_0.8.2.bb
+++ b/meta-openembedded/meta-oe/recipes-core/toybox/toybox-inittab_0.8.2.bb
@@ -34,7 +34,7 @@
 	cp orig/* .
 
 	for config in ${PACKAGECONFIG_CONFARGS}; do
-		if [[ ${config} == "enable_getty" ]]; then
+		if [ "${config}" = "enable_getty" ]; then
 			echo "# generated by bitbake recipe ${PN}" >> ${S}/inittab
 			for console in "${SERIAL_CONSOLES}"; do
 				param=$(echo ${console} | sed s/\;/\ /g)
diff --git a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.6.1.bb b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.7.0.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.6.1.bb
rename to meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.7.0.bb
index 2935221..c5e84b1 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.7.0.bb
@@ -20,7 +20,7 @@
 LDFLAGS:append:libc-musl = " -largp"
 
 SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "410ded65a1072ab9c8e41added37b9729c087fef4d2db02bb4ef529ad6da4693"
+SRC_URI[sha256sum] = "94003a00cd5a81944f45e8dc529e0cfd2a6ff629bd2cd21cf5e574e465daf795"
 
 inherit autotools gettext pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libkcapi/libkcapi_1.5.0.bb b/meta-openembedded/meta-oe/recipes-crypto/libkcapi/libkcapi_1.5.0.bb
index 35e9b03..a34614d 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/libkcapi/libkcapi_1.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/libkcapi/libkcapi_1.5.0.bb
@@ -1,5 +1,5 @@
 SUMMARY = "Linux Kernel Crypto API User Space Interface Library"
-HOMEPAGE = "http://www.chronox.de/libkcapi.html"
+HOMEPAGE = "https://www.chronox.de/libkcapi/index.html"
 LICENSE = "BSD-3-Clause | GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=3d8a091d797491204567185a6efce70f"
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb b/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
index 0770e4b..5301071 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
@@ -27,6 +27,8 @@
 
 inherit go-mod pkgconfig systemd update-rc.d useradd
 
+export GOPROXY = "https://proxy.golang.org,direct"
+
 # Workaround for network access issue during compile step
 # this needs to be fixed in the recipes buildsystem to move
 # this such that it can be accomplished during do_fetch task
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Add-support-for-RISC-V.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Add-support-for-RISC-V.patch
index 7a4ba98..34d34ec 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Add-support-for-RISC-V.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Add-support-for-RISC-V.patch
@@ -1,21 +1,19 @@
-From 780fd27ea6f7f2c446c46a7a5e26d94106c67efd Mon Sep 17 00:00:00 2001
+From ba079b8d6a50796db41bb0ddf4c22bfe022ef898 Mon Sep 17 00:00:00 2001
 From: "Richard W.M. Jones" <rjones@redhat.com>
 Date: Sun, 20 Nov 2016 15:04:52 +0000
-Subject: [PATCH] Add support for RISC-V.
+Subject: [PATCH 1/5] Add support for RISC-V.
 
 The architecture is sufficiently similar to aarch64 that simply
 extending the existing aarch64 macro works.
 ---
-Upstream-Status: Pending
-
- src/include/storage/s_lock.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
+ src/include/storage/s_lock.h | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
-index 4d3ffc7..22e27bf 100644
+index c9fa84c..9b491e8 100644
 --- a/src/include/storage/s_lock.h
 +++ b/src/include/storage/s_lock.h
-@@ -317,11 +317,12 @@ tas(volatile slock_t *lock)
+@@ -252,11 +252,12 @@ spin_delay(void)
  
  /*
   * On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available.
@@ -24,21 +22,20 @@
   * We use the int-width variant of the builtin because it works on more chips
   * than other widths.
   */
--#if defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(__aarch64)
-+#if defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(__aarch64) || defined(__riscv)
+-#if defined(__arm__) || defined(__arm) || defined(__aarch64__)
++#if defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(__riscv)
  #ifdef HAVE_GCC__SYNC_INT32_TAS
  #define HAS_TEST_AND_SET
  
-@@ -355,8 +356,7 @@ spin_delay(void)
+@@ -290,7 +291,7 @@ spin_delay(void)
  
- #endif	 /* __aarch64__ || __aarch64 */
+ #endif	 /* __aarch64__ */
  #endif	 /* HAVE_GCC__SYNC_INT32_TAS */
--#endif	 /* __arm__ || __arm || __aarch64__ || __aarch64 */
--
-+#endif	 /* __arm__ || __arm || __aarch64__ || __aarch64 || __riscv */
+-#endif	 /* __arm__ || __arm || __aarch64__ */
++#endif	 /* __arm__ || __arm || __aarch64__ || __riscv */
+ 
  
  /* S/390 and S/390x Linux (32- and 64-bit zSeries) */
- #if defined(__s390__) || defined(__s390x__)
 -- 
-2.34.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Improve-reproducibility.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0002-Improve-reproducibility.patch
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Improve-reproducibility.patch
rename to meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0002-Improve-reproducibility.patch
index 02f4c9e..b3e87cb 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-Improve-reproducibility.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0002-Improve-reproducibility.patch
@@ -1,7 +1,7 @@
-From bbba8a5261a99e79c9cd4693ef56021014a9856b Mon Sep 17 00:00:00 2001
+From 084cc44215c1d5e6d33bc3d2e1d24da4fc98bdcd Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 Date: Mon, 28 Dec 2020 16:38:21 +0800
-Subject: [PATCH] Improve reproducibility,
+Subject: [PATCH 2/5] Improve reproducibility,
 
 Remove build patch from binaries which pg_config do
 not record var-CC, var-CFLAGS, and configure
@@ -23,7 +23,7 @@
  1 file changed, 3 deletions(-)
 
 diff --git a/src/common/Makefile b/src/common/Makefile
-index 880722f..7a9b9d4 100644
+index 113029b..58842a6 100644
 --- a/src/common/Makefile
 +++ b/src/common/Makefile
 @@ -31,9 +31,6 @@ include $(top_builddir)/src/Makefile.global
@@ -37,5 +37,5 @@
  override CPPFLAGS += -DVAL_LDFLAGS="\"$(STD_LDFLAGS)\""
  override CPPFLAGS += -DVAL_LDFLAGS_EX="\"$(LDFLAGS_EX)\""
 -- 
-2.34.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-configure.ac-bypass-autoconf-2.69-version-check.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0003-configure.ac-bypass-autoconf-2.69-version-check.patch
similarity index 75%
rename from meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-configure.ac-bypass-autoconf-2.69-version-check.patch
rename to meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0003-configure.ac-bypass-autoconf-2.69-version-check.patch
index ab57805..d76d199 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-configure.ac-bypass-autoconf-2.69-version-check.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0003-configure.ac-bypass-autoconf-2.69-version-check.patch
@@ -1,7 +1,7 @@
-From d44c83ed0f30462a31930d6d925762b3f8412ce2 Mon Sep 17 00:00:00 2001
+From 30b1b37d309f67ba6d58f2197bd917107bc7d56c Mon Sep 17 00:00:00 2001
 From: Yi Fan Yu <yifan.yu@windriver.com>
 Date: Fri, 5 Feb 2021 17:15:42 -0500
-Subject: [PATCH] configure.ac: bypass autoconf 2.69 version check
+Subject: [PATCH 3/5] configure.ac: bypass autoconf 2.69 version check
 
 for upgrade to autoconf 2.71
 
@@ -13,18 +13,18 @@
  1 file changed, 4 deletions(-)
 
 diff --git a/configure.ac b/configure.ac
-index e988503..d1b2cfd 100644
+index 401ce30..27f382d 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -19,10 +19,6 @@ m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
  
- AC_INIT([PostgreSQL], [15.5], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/])
+ AC_INIT([PostgreSQL], [16.2], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/])
  
 -m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required.
 -Untested combinations of 'autoconf' and PostgreSQL versions are not
 -recommended.  You can remove the check from 'configure.ac' but it is then
 -your responsibility whether the result works or not.])])
- AC_COPYRIGHT([Copyright (c) 1996-2022, PostgreSQL Global Development Group])
+ AC_COPYRIGHT([Copyright (c) 1996-2023, PostgreSQL Global Development Group])
  AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
  AC_CONFIG_AUX_DIR(config)
 -- 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-config_info.c-not-expose-build-info.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0004-config_info.c-not-expose-build-info.patch
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-config_info.c-not-expose-build-info.patch
rename to meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0004-config_info.c-not-expose-build-info.patch
index 52ca276..ff0582a 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-config_info.c-not-expose-build-info.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0004-config_info.c-not-expose-build-info.patch
@@ -1,7 +1,7 @@
-From b92eebe8b0760fee7bd55c6c22318620c2c07579 Mon Sep 17 00:00:00 2001
+From 5be3ffdf767c1efcbfd2d1be87aa83f2e37e348e Mon Sep 17 00:00:00 2001
 From: Mingli Yu <mingli.yu@windriver.com>
 Date: Mon, 1 Aug 2022 15:44:38 +0800
-Subject: [PATCH] config_info.c: not expose build info
+Subject: [PATCH 4/5] config_info.c: not expose build info
 
 Don't collect the build information to fix the buildpaths issue.
 
@@ -10,14 +10,14 @@
 Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
 ---
  configure.ac             |  2 +-
- src/common/config_info.c | 68 ----------------------------------------
- 2 files changed, 1 insertion(+), 69 deletions(-)
+ src/common/config_info.c | 70 +---------------------------------------
+ 2 files changed, 2 insertions(+), 70 deletions(-)
 
 diff --git a/configure.ac b/configure.ac
-index 0eb595b..508487b 100644
+index 27f382d..3dd6bb1 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -23,7 +23,7 @@ AC_COPYRIGHT([Copyright (c) 1996-2021, PostgreSQL Global Development Group])
+@@ -23,7 +23,7 @@ AC_COPYRIGHT([Copyright (c) 1996-2023, PostgreSQL Global Development Group])
  AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
  AC_CONFIG_AUX_DIR(config)
  AC_PREFIX_DEFAULT(/usr/local/pgsql)
@@ -27,19 +27,19 @@
  [PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\)'`]
  [PG_MINORVERSION=`expr "$PACKAGE_VERSION" : '.*\.\([0-9][0-9]*\)'`]
 diff --git a/src/common/config_info.c b/src/common/config_info.c
-index e72e729..b482c20 100644
+index 09e78a6..86e4230 100644
 --- a/src/common/config_info.c
 +++ b/src/common/config_info.c
-@@ -38,7 +38,7 @@
+@@ -38,7 +38,7 @@ get_configdata(const char *my_exec_path, size_t *configdata_len)
  	int			i = 0;
  
  	/* Adjust this to match the number of items filled below */
 -	*configdata_len = 23;
 +	*configdata_len = 14;
- 	configdata = (ConfigData *) palloc(*configdata_len * sizeof(ConfigData));
+ 	configdata = palloc_array(ConfigData, *configdata_len);
  
  	configdata[i].name = pstrdup("BINDIR");
-@@ -123,74 +123,6 @@
+@@ -123,74 +123,6 @@ get_configdata(const char *my_exec_path, size_t *configdata_len)
  	configdata[i].setting = pstrdup(path);
  	i++;
  
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-postgresql-fix-ptest-failure-of-sysviews.patch b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0005-postgresql-fix-ptest-failure-of-sysviews.patch
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-postgresql-fix-ptest-failure-of-sysviews.patch
rename to meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0005-postgresql-fix-ptest-failure-of-sysviews.patch
index 4db36d2..af36da4 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0001-postgresql-fix-ptest-failure-of-sysviews.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/files/0005-postgresql-fix-ptest-failure-of-sysviews.patch
@@ -1,7 +1,7 @@
-From 9f81377dddfe32d950844d7053020a36b40fce08 Mon Sep 17 00:00:00 2001
+From 1a8b94140988d2ee5ff987b0bb3e7c3e936b8c01 Mon Sep 17 00:00:00 2001
 From: Manoj Saun <manojsingh.saun@windriver.com>
 Date: Wed, 22 Mar 2023 08:07:26 +0000
-Subject: [PATCH] postgresql: fix ptest failure of sysviews
+Subject: [PATCH 5/5] postgresql: fix ptest failure of sysviews
 
 The patch "0001-config_info.c-not-expose-build-info.patch" hides the debug info
 in pg_config table which reduces the count of rows from pg_config and leads to
@@ -18,9 +18,11 @@
  src/test/regress/sql/sysviews.sql      | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
+diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
+index 001c6e7..8256898 100644
 --- a/src/test/regress/expected/sysviews.out
 +++ b/src/test/regress/expected/sysviews.out
-@@ -29,7 +29,7 @@ select name, ident, parent, level, total
+@@ -29,7 +29,7 @@ select name, ident, parent, level, total_bytes >= free_bytes
  (1 row)
  
  -- At introduction, pg_config had 23 entries; it may grow
@@ -29,9 +31,11 @@
   ok 
  ----
   t
+diff --git a/src/test/regress/sql/sysviews.sql b/src/test/regress/sql/sysviews.sql
+index 351e469..84c113e 100644
 --- a/src/test/regress/sql/sysviews.sql
 +++ b/src/test/regress/sql/sysviews.sql
-@@ -18,7 +18,7 @@ select name, ident, parent, level, total
+@@ -18,7 +18,7 @@ select name, ident, parent, level, total_bytes >= free_bytes
    from pg_backend_memory_contexts where level = 0;
  
  -- At introduction, pg_config had 23 entries; it may grow
@@ -40,3 +44,6 @@
  
  -- We expect no cursors in this test; see also portals.sql
  select count(*) = 0 as ok from pg_cursors;
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
index 15ecdee..868a2e4 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
@@ -54,7 +54,7 @@
 
 PACKAGECONFIG ??= " \
     ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)} \
-    openssl python uuid libxml tcl perl zlib \
+    openssl python uuid libxml tcl perl zlib icu \
 "
 PACKAGECONFIG[tcl] = "--with-tcl --with-tclconfig=${STAGING_BINDIR_CROSS},--without-tcl,tcl tcl-native,"
 PACKAGECONFIG[perl] = "--with-perl,--without-perl,perl,perl"
@@ -69,6 +69,7 @@
 PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
 PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4"
 PACKAGECONFIG[openssl] = "--with-ssl=openssl,ac_cv_file__dev_urandom=yes,openssl"
+PACKAGECONFIG[icu] = "--with-icu,--without-icu,icu,icu"
 
 EXTRA_OECONF += "--enable-thread-safety --disable-rpath \
     --datadir=${datadir}/${BPN} \
@@ -229,6 +230,16 @@
 SSTATE_SCAN_FILES += "Makefile.global"
 SSTATE_SCAN_FILES:remove = "*_config"
 
+postgresql_fix_sources () {
+	for f in ${PKGD}${TARGET_DBGSRC_DIR}/src/pl/plperl/Util.c \
+			${PKGD}${TARGET_DBGSRC_DIR}/src/pl/plperl/SPI.c; do
+		if [ -e $f ]; then
+			sed -i -e 's#${B}/../${P}#${TARGET_DBGSRC_DIR}#g' $f
+		fi
+	done
+}
+PACKAGESPLITFUNCS =+ "postgresql_fix_sources"
+
 PACKAGES =+ "${PN}-client ${PN}-server-dev ${PN}-timezone \
     libecpg-compat libecpg-compat-dev \
     libecpg libecpg-dev libecpg-staticdev libecpg-doc \
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_15.5.bb b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_15.5.bb
deleted file mode 100644
index cb90ff9..0000000
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_15.5.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require postgresql.inc
-
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=c31f662bb2bfb3b4187fe9a53e0ffe7c"
-
-SRC_URI += "\
-   file://not-check-libperl.patch \
-   file://0001-Add-support-for-RISC-V.patch \
-   file://0001-Improve-reproducibility.patch \
-   file://0001-configure.ac-bypass-autoconf-2.69-version-check.patch \
-   file://0001-config_info.c-not-expose-build-info.patch \
-   file://0001-postgresql-fix-ptest-failure-of-sysviews.patch \
-"
-
-SRC_URI[sha256sum] = "8f53aa95d78eb8e82536ea46b68187793b42bba3b4f65aa342f540b23c9b10a6"
-
-CVE_STATUS[CVE-2017-8806] = "not-applicable-config: Ddoesn't apply to out configuration of postgresql so we can safely ignore it."
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_16.2.bb b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_16.2.bb
new file mode 100644
index 0000000..31f83a5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_16.2.bb
@@ -0,0 +1,16 @@
+require postgresql.inc
+
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=89afbb2d7716371015101c2b2cb4297a"
+
+SRC_URI += "\
+   file://not-check-libperl.patch \
+   file://0001-Add-support-for-RISC-V.patch \
+   file://0002-Improve-reproducibility.patch \
+   file://0003-configure.ac-bypass-autoconf-2.69-version-check.patch \
+   file://0004-config_info.c-not-expose-build-info.patch \
+   file://0005-postgresql-fix-ptest-failure-of-sysviews.patch \
+"
+
+SRC_URI[sha256sum] = "446e88294dbc2c9085ab4b7061a646fa604b4bec03521d5ea671c2e5ad9b2952"
+
+CVE_STATUS[CVE-2017-8806] = "not-applicable-config: Ddoesn't apply to out configuration of postgresql so we can safely ignore it."
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.60.0.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.60.1.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.60.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.60.1.bb
index d41a73e..63c696a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.60.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.60.1.bb
@@ -20,7 +20,7 @@
 # RDEPENDS:${PN}-dev += "${PN}-compiler"
 
 S = "${WORKDIR}/git"
-SRCREV_grpc = "0ef13a7555dbaadd4633399242524129eef5e231"
+SRCREV_grpc = "e5ae3b6b44bf3b64d24bfb4b4f82556239b986db"
 BRANCH = "v1.60.x"
 SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
            file://0001-cmake-Link-with-libatomic-on-rv32-rv64.patch \
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch
deleted file mode 100644
index d964586..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <slyich@gmail.com>
-Date: Wed, 8 Mar 2023 11:31:56 +0000
-Subject: [PATCH] custom allocators: define missing 'rebind' type (#3895)
-
-Upstream-Status: Backport [https://github.com/nlohmann/json/commit/6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- tests/src/unit-allocator.cpp   | 9 +++++++++
- tests/src/unit-regression2.cpp | 9 +++++++++
- 2 files changed, 18 insertions(+)
-
-diff --git a/tests/src/unit-allocator.cpp b/tests/src/unit-allocator.cpp
-index 76e3b03f..f2e63552 100644
---- a/tests/src/unit-allocator.cpp
-+++ b/tests/src/unit-allocator.cpp
-@@ -20,11 +20,20 @@ struct bad_allocator : std::allocator<T>
- {
-     using std::allocator<T>::allocator;
- 
-+    bad_allocator() = default;
-+    template<class U> bad_allocator(const bad_allocator<U>& /*unused*/) { }
-+
-     template<class... Args>
-     void construct(T* /*unused*/, Args&& ... /*unused*/)
-     {
-         throw std::bad_alloc();
-     }
-+
-+    template <class U>
-+    struct rebind
-+    {
-+        using other = bad_allocator<U>;
-+    };
- };
- } // namespace
- 
-diff --git a/tests/src/unit-regression2.cpp b/tests/src/unit-regression2.cpp
-index 2bb9b32e..dbafb436 100644
---- a/tests/src/unit-regression2.cpp
-+++ b/tests/src/unit-regression2.cpp
-@@ -189,6 +189,15 @@ class my_allocator : public std::allocator<T>
- {
-   public:
-     using std::allocator<T>::allocator;
-+
-+    my_allocator() = default;
-+    template<class U> my_allocator(const my_allocator<U>& /*unused*/) { }
-+
-+    template <class U>
-+    struct rebind
-+    {
-+        using other = my_allocator<U>;
-+    };
- };
- 
- /////////////////////////////////////////////////////////////////////
--- 
-2.25.1
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch
deleted file mode 100644
index 463912e..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 660d0b58565073975d6f5d94365d6cbf150a4cf8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me>
-Date: Sun, 5 Mar 2023 14:11:22 +0100
-Subject: [PATCH] tests/unit-iterators2: use std::ranges::equals for range
- comparisons (#3950)
-
-Closes https://github.com/nlohmann/json/issues/3927
-
-Upstream-Status: Backport [https://github.com/nlohmann/json/commit/660d0b58565073975d6f5d94365d6cbf150a4cf8]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- tests/src/unit-iterators2.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/src/unit-iterators2.cpp b/tests/src/unit-iterators2.cpp
-index 27926084..72a5d9dc 100644
---- a/tests/src/unit-iterators2.cpp
-+++ b/tests/src/unit-iterators2.cpp
-@@ -943,7 +943,7 @@ TEST_CASE("iterators 2")
-                 json j_expected{5, 4, 3, 2, 1};
- 
-                 auto reversed = j | std::views::reverse;
--                CHECK(reversed == j_expected);
-+                CHECK(std::ranges::equal(reversed, j_expected));
-             }
- 
-             SECTION("transform")
--- 
-2.25.1
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.3.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.3.bb
index 3509323..194e805 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.3.bb
@@ -8,12 +8,10 @@
 
 SRC_URI = "git://github.com/nlohmann/json.git;branch=develop;protocol=https \
            git://github.com/nlohmann/json_test_data.git;destsuffix=git/json_test_data;name=json-test-data;branch=master;protocol=https \
-           file://0001-custom-allocators-define-missing-rebind-type-3895.patch \
-           file://0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch \
            file://run-ptest \
 "
 
-SRCREV = "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
+SRCREV = "9cca280a4d0ccf0c08f47a99aa71d1b0e52f8d03"
 SRCREV_json-test-data = "a1375cea09d27cc1c4cadb8d00470375b421ac37"
 
 SRCREV_FORMAT .= "_json-test-data"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch
deleted file mode 100644
index d98463d..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch
+++ /dev/null
@@ -1,3414 +0,0 @@
-From 937dfa70104b7401a7570a98cf6e0a534e250557 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <martin.jansa@gmail.com>
-Date: Wed, 18 Oct 2023 22:43:55 +0200
-Subject: [PATCH] Revert io_uring changes from libuv-1.46.0
-
-Included in nodejs-20.4.0 with the libuv upgrade to 1.46.0 in:
-https://github.com/nodejs/node/commit/6199e1946c9abd59bd71a61870a4f6c85e100b18
-
-Revert "linux: work around io_uring IORING_OP_CLOSE bug (#4059)"
-This reverts commit 1752791c9ea89dbf54e2a20a9d9f899119a2d179.
-Revert "linux: fs_read to use io_uring if iovcnt > IOV_MAX (#4023)"
-This reverts commit e7b96331703e929e75d93c574573c9736e34b0c0.
-Revert "linux: add some more iouring backed fs ops (#4012)"
-This reverts commit 962b8e626ceaaf296eecab1d008e8b70dc6da5e7.
-Revert "android: disable io_uring support (#4016)"
-This reverts commit 281e6185cc9e77c582ff6ca9e4c00d57e6b90d95.
-Revert "unix,win: replace QUEUE with struct uv__queue (#4022)"
-This reverts commit 1b01b786c0180d29f07dccbb98001a2b3148828a.
-Revert "fs: use WTF-8 on Windows (#2970)"
-This reverts commit 8f32a14afaaa47514a7d28e1e069a8329e2dd939.
-
-Dropped deps/uv/docs deps/uv/test changes as these dirs aren't included
-in nodejs tarballs.
-
-Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
----
-Upstream-Status: Inappropriate [OE specific]
-
- deps/uv/include/uv.h                     |  10 +-
- deps/uv/include/uv/darwin.h              |   6 +-
- deps/uv/include/uv/linux.h               |   2 +-
- deps/uv/include/uv/threadpool.h          |   2 +-
- deps/uv/include/uv/unix.h                |  44 ++--
- deps/uv/include/uv/win.h                 |   4 +-
- deps/uv/src/queue.h                      | 154 ++++++-----
- deps/uv/src/threadpool.c                 |  72 +++---
- deps/uv/src/unix/aix.c                   |  14 +-
- deps/uv/src/unix/async.c                 |  52 ++--
- deps/uv/src/unix/core.c                  |  53 ++--
- deps/uv/src/unix/fs.c                    |  41 +--
- deps/uv/src/unix/fsevents.c              |  84 +++---
- deps/uv/src/unix/internal.h              |  11 -
- deps/uv/src/unix/kqueue.c                |  18 +-
- deps/uv/src/unix/linux.c                 | 257 +++----------------
- deps/uv/src/unix/loop-watcher.c          |  20 +-
- deps/uv/src/unix/loop.c                  |  28 +-
- deps/uv/src/unix/os390-syscalls.c        |  24 +-
- deps/uv/src/unix/os390-syscalls.h        |   2 +-
- deps/uv/src/unix/os390.c                 |  14 +-
- deps/uv/src/unix/pipe.c                  |   2 +-
- deps/uv/src/unix/posix-poll.c            |  14 +-
- deps/uv/src/unix/process.c               |  38 +--
- deps/uv/src/unix/signal.c                |   8 +-
- deps/uv/src/unix/stream.c                |  56 ++--
- deps/uv/src/unix/sunos.c                 |  18 +-
- deps/uv/src/unix/tcp.c                   |   4 +-
- deps/uv/src/unix/tty.c                   |   2 +-
- deps/uv/src/unix/udp.c                   |  76 +++---
- deps/uv/src/uv-common.c                  |  28 +-
- deps/uv/src/uv-common.h                  |   3 +-
- deps/uv/src/win/core.c                   |   6 +-
- deps/uv/src/win/fs.c                     | 311 ++++++++---------------
- deps/uv/src/win/handle-inl.h             |   2 +-
- deps/uv/src/win/pipe.c                   |  26 +-
- deps/uv/src/win/tcp.c                    |   4 +-
- deps/uv/src/win/udp.c                    |   4 +-
- deps/uv/test/test-fs.c                   |  53 ----
- deps/uv/test/test-list.h                 |   2 -
- deps/uv/test/test-queue-foreach-delete.c |   5 +-
- deps/uv/test/test-threadpool-cancel.c    |   5 -
- 42 files changed, 625 insertions(+), 954 deletions(-)
-
-diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h
-index 02397dd0fdd..1af95289776 100644
---- a/deps/uv/include/uv.h
-+++ b/deps/uv/include/uv.h
-@@ -59,12 +59,6 @@ extern "C" {
- #include <stdio.h>
- #include <stdint.h>
- 
--/* Internal type, do not use. */
--struct uv__queue {
--  struct uv__queue* next;
--  struct uv__queue* prev;
--};
--
- #if defined(_WIN32)
- # include "uv/win.h"
- #else
-@@ -466,7 +460,7 @@ struct uv_shutdown_s {
-   uv_handle_type type;                                                        \
-   /* private */                                                               \
-   uv_close_cb close_cb;                                                       \
--  struct uv__queue handle_queue;                                              \
-+  void* handle_queue[2];                                                      \
-   union {                                                                     \
-     int fd;                                                                   \
-     void* reserved[4];                                                        \
-@@ -1870,7 +1864,7 @@ struct uv_loop_s {
-   void* data;
-   /* Loop reference counting. */
-   unsigned int active_handles;
--  struct uv__queue handle_queue;
-+  void* handle_queue[2];
-   union {
-     void* unused;
-     unsigned int count;
-diff --git a/deps/uv/include/uv/darwin.h b/deps/uv/include/uv/darwin.h
-index 06962bfda80..d226415820b 100644
---- a/deps/uv/include/uv/darwin.h
-+++ b/deps/uv/include/uv/darwin.h
-@@ -40,7 +40,7 @@
-   void* cf_state;                                                             \
-   uv_mutex_t cf_mutex;                                                        \
-   uv_sem_t cf_sem;                                                            \
--  struct uv__queue cf_signals;                                                \
-+  void* cf_signals[2];                                                        \
- 
- #define UV_PLATFORM_FS_EVENT_FIELDS                                           \
-   uv__io_t event_watcher;                                                     \
-@@ -48,8 +48,8 @@
-   int realpath_len;                                                           \
-   int cf_flags;                                                               \
-   uv_async_t* cf_cb;                                                          \
--  struct uv__queue cf_events;                                                 \
--  struct uv__queue cf_member;                                                 \
-+  void* cf_events[2];                                                         \
-+  void* cf_member[2];                                                         \
-   int cf_error;                                                               \
-   uv_mutex_t cf_mutex;                                                        \
- 
-diff --git a/deps/uv/include/uv/linux.h b/deps/uv/include/uv/linux.h
-index 9f22f8cf726..9b38405a190 100644
---- a/deps/uv/include/uv/linux.h
-+++ b/deps/uv/include/uv/linux.h
-@@ -28,7 +28,7 @@
-   int inotify_fd;                                                             \
- 
- #define UV_PLATFORM_FS_EVENT_FIELDS                                           \
--  struct uv__queue watchers;                                                  \
-+  void* watchers[2];                                                          \
-   int wd;                                                                     \
- 
- #endif /* UV_LINUX_H */
-diff --git a/deps/uv/include/uv/threadpool.h b/deps/uv/include/uv/threadpool.h
-index 24ce916fda4..9708ebdd530 100644
---- a/deps/uv/include/uv/threadpool.h
-+++ b/deps/uv/include/uv/threadpool.h
-@@ -31,7 +31,7 @@ struct uv__work {
-   void (*work)(struct uv__work *w);
-   void (*done)(struct uv__work *w, int status);
-   struct uv_loop_s* loop;
--  struct uv__queue wq;
-+  void* wq[2];
- };
- 
- #endif /* UV_THREADPOOL_H_ */
-diff --git a/deps/uv/include/uv/unix.h b/deps/uv/include/uv/unix.h
-index 09f88a56742..95447b8dd67 100644
---- a/deps/uv/include/uv/unix.h
-+++ b/deps/uv/include/uv/unix.h
-@@ -92,8 +92,8 @@ typedef struct uv__io_s uv__io_t;
- 
- struct uv__io_s {
-   uv__io_cb cb;
--  struct uv__queue pending_queue;
--  struct uv__queue watcher_queue;
-+  void* pending_queue[2];
-+  void* watcher_queue[2];
-   unsigned int pevents; /* Pending event mask i.e. mask at next tick. */
-   unsigned int events;  /* Current event mask. */
-   int fd;
-@@ -220,21 +220,21 @@ typedef struct {
- #define UV_LOOP_PRIVATE_FIELDS                                                \
-   unsigned long flags;                                                        \
-   int backend_fd;                                                             \
--  struct uv__queue pending_queue;                                             \
--  struct uv__queue watcher_queue;                                             \
-+  void* pending_queue[2];                                                     \
-+  void* watcher_queue[2];                                                     \
-   uv__io_t** watchers;                                                        \
-   unsigned int nwatchers;                                                     \
-   unsigned int nfds;                                                          \
--  struct uv__queue wq;                                                        \
-+  void* wq[2];                                                                \
-   uv_mutex_t wq_mutex;                                                        \
-   uv_async_t wq_async;                                                        \
-   uv_rwlock_t cloexec_lock;                                                   \
-   uv_handle_t* closing_handles;                                               \
--  struct uv__queue process_handles;                                           \
--  struct uv__queue prepare_handles;                                           \
--  struct uv__queue check_handles;                                             \
--  struct uv__queue idle_handles;                                              \
--  struct uv__queue async_handles;                                             \
-+  void* process_handles[2];                                                   \
-+  void* prepare_handles[2];                                                   \
-+  void* check_handles[2];                                                     \
-+  void* idle_handles[2];                                                      \
-+  void* async_handles[2];                                                     \
-   void (*async_unused)(void);  /* TODO(bnoordhuis) Remove in libuv v2. */     \
-   uv__io_t async_io_watcher;                                                  \
-   int async_wfd;                                                              \
-@@ -257,7 +257,7 @@ typedef struct {
- #define UV_PRIVATE_REQ_TYPES /* empty */
- 
- #define UV_WRITE_PRIVATE_FIELDS                                               \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
-   unsigned int write_index;                                                   \
-   uv_buf_t* bufs;                                                             \
-   unsigned int nbufs;                                                         \
-@@ -265,12 +265,12 @@ typedef struct {
-   uv_buf_t bufsml[4];                                                         \
- 
- #define UV_CONNECT_PRIVATE_FIELDS                                             \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
- 
- #define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */
- 
- #define UV_UDP_SEND_PRIVATE_FIELDS                                            \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
-   struct sockaddr_storage addr;                                               \
-   unsigned int nbufs;                                                         \
-   uv_buf_t* bufs;                                                             \
-@@ -286,8 +286,8 @@ typedef struct {
-   uv_connect_t *connect_req;                                                  \
-   uv_shutdown_t *shutdown_req;                                                \
-   uv__io_t io_watcher;                                                        \
--  struct uv__queue write_queue;                                               \
--  struct uv__queue write_completed_queue;                                     \
-+  void* write_queue[2];                                                       \
-+  void* write_completed_queue[2];                                             \
-   uv_connection_cb connection_cb;                                             \
-   int delayed_error;                                                          \
-   int accepted_fd;                                                            \
-@@ -300,8 +300,8 @@ typedef struct {
-   uv_alloc_cb alloc_cb;                                                       \
-   uv_udp_recv_cb recv_cb;                                                     \
-   uv__io_t io_watcher;                                                        \
--  struct uv__queue write_queue;                                               \
--  struct uv__queue write_completed_queue;                                     \
-+  void* write_queue[2];                                                       \
-+  void* write_completed_queue[2];                                             \
- 
- #define UV_PIPE_PRIVATE_FIELDS                                                \
-   const char* pipe_fname; /* NULL or strdup'ed */
-@@ -311,19 +311,19 @@ typedef struct {
- 
- #define UV_PREPARE_PRIVATE_FIELDS                                             \
-   uv_prepare_cb prepare_cb;                                                   \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
- 
- #define UV_CHECK_PRIVATE_FIELDS                                               \
-   uv_check_cb check_cb;                                                       \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
- 
- #define UV_IDLE_PRIVATE_FIELDS                                                \
-   uv_idle_cb idle_cb;                                                         \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
- 
- #define UV_ASYNC_PRIVATE_FIELDS                                               \
-   uv_async_cb async_cb;                                                       \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
-   int pending;                                                                \
- 
- #define UV_TIMER_PRIVATE_FIELDS                                               \
-@@ -352,7 +352,7 @@ typedef struct {
-   int retcode;
- 
- #define UV_PROCESS_PRIVATE_FIELDS                                             \
--  struct uv__queue queue;                                                     \
-+  void* queue[2];                                                             \
-   int status;                                                                 \
- 
- #define UV_FS_PRIVATE_FIELDS                                                  \
-diff --git a/deps/uv/include/uv/win.h b/deps/uv/include/uv/win.h
-index 6f8c47298e4..92a95fa15f1 100644
---- a/deps/uv/include/uv/win.h
-+++ b/deps/uv/include/uv/win.h
-@@ -357,7 +357,7 @@ typedef struct {
-   /* Counter to started timer */                                              \
-   uint64_t timer_counter;                                                     \
-   /* Threadpool */                                                            \
--  struct uv__queue wq;                                                        \
-+  void* wq[2];                                                                \
-   uv_mutex_t wq_mutex;                                                        \
-   uv_async_t wq_async;
- 
-@@ -486,7 +486,7 @@ typedef struct {
-     uint32_t payload_remaining;                                               \
-     uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \
-   } ipc_data_frame;                                                           \
--  struct uv__queue ipc_xfer_queue;                                            \
-+  void* ipc_xfer_queue[2];                                                    \
-   int ipc_xfer_queue_length;                                                  \
-   uv_write_t* non_overlapped_writes_tail;                                     \
-   CRITICAL_SECTION readfile_thread_lock;                                      \
-diff --git a/deps/uv/src/queue.h b/deps/uv/src/queue.h
-index 5f8489e9bc5..ff3540a0a51 100644
---- a/deps/uv/src/queue.h
-+++ b/deps/uv/src/queue.h
-@@ -18,73 +18,91 @@
- 
- #include <stddef.h>
- 
--#define uv__queue_data(pointer, type, field)                                  \
--  ((type*) ((char*) (pointer) - offsetof(type, field)))
--
--#define uv__queue_foreach(q, h)                                               \
--  for ((q) = (h)->next; (q) != (h); (q) = (q)->next)
--
--static inline void uv__queue_init(struct uv__queue* q) {
--  q->next = q;
--  q->prev = q;
--}
--
--static inline int uv__queue_empty(const struct uv__queue* q) {
--  return q == q->next;
--}
--
--static inline struct uv__queue* uv__queue_head(const struct uv__queue* q) {
--  return q->next;
--}
--
--static inline struct uv__queue* uv__queue_next(const struct uv__queue* q) {
--  return q->next;
--}
--
--static inline void uv__queue_add(struct uv__queue* h, struct uv__queue* n) {
--  h->prev->next = n->next;
--  n->next->prev = h->prev;
--  h->prev = n->prev;
--  h->prev->next = h;
--}
--
--static inline void uv__queue_split(struct uv__queue* h,
--                                   struct uv__queue* q,
--                                   struct uv__queue* n) {
--  n->prev = h->prev;
--  n->prev->next = n;
--  n->next = q;
--  h->prev = q->prev;
--  h->prev->next = h;
--  q->prev = n;
--}
--
--static inline void uv__queue_move(struct uv__queue* h, struct uv__queue* n) {
--  if (uv__queue_empty(h))
--    uv__queue_init(n);
--  else
--    uv__queue_split(h, h->next, n);
--}
--
--static inline void uv__queue_insert_head(struct uv__queue* h,
--                                         struct uv__queue* q) {
--  q->next = h->next;
--  q->prev = h;
--  q->next->prev = q;
--  h->next = q;
--}
--
--static inline void uv__queue_insert_tail(struct uv__queue* h,
--                                         struct uv__queue* q) {
--  q->next = h;
--  q->prev = h->prev;
--  q->prev->next = q;
--  h->prev = q;
--}
--
--static inline void uv__queue_remove(struct uv__queue* q) {
--  q->prev->next = q->next;
--  q->next->prev = q->prev;
--}
-+typedef void *QUEUE[2];
-+
-+/* Private macros. */
-+#define QUEUE_NEXT(q)       (*(QUEUE **) &((*(q))[0]))
-+#define QUEUE_PREV(q)       (*(QUEUE **) &((*(q))[1]))
-+#define QUEUE_PREV_NEXT(q)  (QUEUE_NEXT(QUEUE_PREV(q)))
-+#define QUEUE_NEXT_PREV(q)  (QUEUE_PREV(QUEUE_NEXT(q)))
-+
-+/* Public macros. */
-+#define QUEUE_DATA(ptr, type, field)                                          \
-+  ((type *) ((char *) (ptr) - offsetof(type, field)))
-+
-+/* Important note: mutating the list while QUEUE_FOREACH is
-+ * iterating over its elements results in undefined behavior.
-+ */
-+#define QUEUE_FOREACH(q, h)                                                   \
-+  for ((q) = QUEUE_NEXT(h); (q) != (h); (q) = QUEUE_NEXT(q))
-+
-+#define QUEUE_EMPTY(q)                                                        \
-+  ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q))
-+
-+#define QUEUE_HEAD(q)                                                         \
-+  (QUEUE_NEXT(q))
-+
-+#define QUEUE_INIT(q)                                                         \
-+  do {                                                                        \
-+    QUEUE_NEXT(q) = (q);                                                      \
-+    QUEUE_PREV(q) = (q);                                                      \
-+  }                                                                           \
-+  while (0)
-+
-+#define QUEUE_ADD(h, n)                                                       \
-+  do {                                                                        \
-+    QUEUE_PREV_NEXT(h) = QUEUE_NEXT(n);                                       \
-+    QUEUE_NEXT_PREV(n) = QUEUE_PREV(h);                                       \
-+    QUEUE_PREV(h) = QUEUE_PREV(n);                                            \
-+    QUEUE_PREV_NEXT(h) = (h);                                                 \
-+  }                                                                           \
-+  while (0)
-+
-+#define QUEUE_SPLIT(h, q, n)                                                  \
-+  do {                                                                        \
-+    QUEUE_PREV(n) = QUEUE_PREV(h);                                            \
-+    QUEUE_PREV_NEXT(n) = (n);                                                 \
-+    QUEUE_NEXT(n) = (q);                                                      \
-+    QUEUE_PREV(h) = QUEUE_PREV(q);                                            \
-+    QUEUE_PREV_NEXT(h) = (h);                                                 \
-+    QUEUE_PREV(q) = (n);                                                      \
-+  }                                                                           \
-+  while (0)
-+
-+#define QUEUE_MOVE(h, n)                                                      \
-+  do {                                                                        \
-+    if (QUEUE_EMPTY(h))                                                       \
-+      QUEUE_INIT(n);                                                          \
-+    else {                                                                    \
-+      QUEUE* q = QUEUE_HEAD(h);                                               \
-+      QUEUE_SPLIT(h, q, n);                                                   \
-+    }                                                                         \
-+  }                                                                           \
-+  while (0)
-+
-+#define QUEUE_INSERT_HEAD(h, q)                                               \
-+  do {                                                                        \
-+    QUEUE_NEXT(q) = QUEUE_NEXT(h);                                            \
-+    QUEUE_PREV(q) = (h);                                                      \
-+    QUEUE_NEXT_PREV(q) = (q);                                                 \
-+    QUEUE_NEXT(h) = (q);                                                      \
-+  }                                                                           \
-+  while (0)
-+
-+#define QUEUE_INSERT_TAIL(h, q)                                               \
-+  do {                                                                        \
-+    QUEUE_NEXT(q) = (h);                                                      \
-+    QUEUE_PREV(q) = QUEUE_PREV(h);                                            \
-+    QUEUE_PREV_NEXT(q) = (q);                                                 \
-+    QUEUE_PREV(h) = (q);                                                      \
-+  }                                                                           \
-+  while (0)
-+
-+#define QUEUE_REMOVE(q)                                                       \
-+  do {                                                                        \
-+    QUEUE_PREV_NEXT(q) = QUEUE_NEXT(q);                                       \
-+    QUEUE_NEXT_PREV(q) = QUEUE_PREV(q);                                       \
-+  }                                                                           \
-+  while (0)
- 
- #endif /* QUEUE_H_ */
-diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c
-index dbef67f2f10..51962bf0021 100644
---- a/deps/uv/src/threadpool.c
-+++ b/deps/uv/src/threadpool.c
-@@ -37,10 +37,10 @@ static unsigned int slow_io_work_running;
- static unsigned int nthreads;
- static uv_thread_t* threads;
- static uv_thread_t default_threads[4];
--static struct uv__queue exit_message;
--static struct uv__queue wq;
--static struct uv__queue run_slow_work_message;
--static struct uv__queue slow_io_pending_wq;
-+static QUEUE exit_message;
-+static QUEUE wq;
-+static QUEUE run_slow_work_message;
-+static QUEUE slow_io_pending_wq;
- 
- static unsigned int slow_work_thread_threshold(void) {
-   return (nthreads + 1) / 2;
-@@ -56,7 +56,7 @@ static void uv__cancelled(struct uv__work* w) {
-  */
- static void worker(void* arg) {
-   struct uv__work* w;
--  struct uv__queue* q;
-+  QUEUE* q;
-   int is_slow_work;
- 
-   uv_sem_post((uv_sem_t*) arg);
-@@ -68,49 +68,49 @@ static void worker(void* arg) {
- 
-     /* Keep waiting while either no work is present or only slow I/O
-        and we're at the threshold for that. */
--    while (uv__queue_empty(&wq) ||
--           (uv__queue_head(&wq) == &run_slow_work_message &&
--            uv__queue_next(&run_slow_work_message) == &wq &&
-+    while (QUEUE_EMPTY(&wq) ||
-+           (QUEUE_HEAD(&wq) == &run_slow_work_message &&
-+            QUEUE_NEXT(&run_slow_work_message) == &wq &&
-             slow_io_work_running >= slow_work_thread_threshold())) {
-       idle_threads += 1;
-       uv_cond_wait(&cond, &mutex);
-       idle_threads -= 1;
-     }
- 
--    q = uv__queue_head(&wq);
-+    q = QUEUE_HEAD(&wq);
-     if (q == &exit_message) {
-       uv_cond_signal(&cond);
-       uv_mutex_unlock(&mutex);
-       break;
-     }
- 
--    uv__queue_remove(q);
--    uv__queue_init(q);  /* Signal uv_cancel() that the work req is executing. */
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);  /* Signal uv_cancel() that the work req is executing. */
- 
-     is_slow_work = 0;
-     if (q == &run_slow_work_message) {
-       /* If we're at the slow I/O threshold, re-schedule until after all
-          other work in the queue is done. */
-       if (slow_io_work_running >= slow_work_thread_threshold()) {
--        uv__queue_insert_tail(&wq, q);
-+        QUEUE_INSERT_TAIL(&wq, q);
-         continue;
-       }
- 
-       /* If we encountered a request to run slow I/O work but there is none
-          to run, that means it's cancelled => Start over. */
--      if (uv__queue_empty(&slow_io_pending_wq))
-+      if (QUEUE_EMPTY(&slow_io_pending_wq))
-         continue;
- 
-       is_slow_work = 1;
-       slow_io_work_running++;
- 
--      q = uv__queue_head(&slow_io_pending_wq);
--      uv__queue_remove(q);
--      uv__queue_init(q);
-+      q = QUEUE_HEAD(&slow_io_pending_wq);
-+      QUEUE_REMOVE(q);
-+      QUEUE_INIT(q);
- 
-       /* If there is more slow I/O work, schedule it to be run as well. */
--      if (!uv__queue_empty(&slow_io_pending_wq)) {
--        uv__queue_insert_tail(&wq, &run_slow_work_message);
-+      if (!QUEUE_EMPTY(&slow_io_pending_wq)) {
-+        QUEUE_INSERT_TAIL(&wq, &run_slow_work_message);
-         if (idle_threads > 0)
-           uv_cond_signal(&cond);
-       }
-@@ -118,13 +118,13 @@ static void worker(void* arg) {
- 
-     uv_mutex_unlock(&mutex);
- 
--    w = uv__queue_data(q, struct uv__work, wq);
-+    w = QUEUE_DATA(q, struct uv__work, wq);
-     w->work(w);
- 
-     uv_mutex_lock(&w->loop->wq_mutex);
-     w->work = NULL;  /* Signal uv_cancel() that the work req is done
-                         executing. */
--    uv__queue_insert_tail(&w->loop->wq, &w->wq);
-+    QUEUE_INSERT_TAIL(&w->loop->wq, &w->wq);
-     uv_async_send(&w->loop->wq_async);
-     uv_mutex_unlock(&w->loop->wq_mutex);
- 
-@@ -139,12 +139,12 @@ static void worker(void* arg) {
- }
- 
- 
--static void post(struct uv__queue* q, enum uv__work_kind kind) {
-+static void post(QUEUE* q, enum uv__work_kind kind) {
-   uv_mutex_lock(&mutex);
-   if (kind == UV__WORK_SLOW_IO) {
-     /* Insert into a separate queue. */
--    uv__queue_insert_tail(&slow_io_pending_wq, q);
--    if (!uv__queue_empty(&run_slow_work_message)) {
-+    QUEUE_INSERT_TAIL(&slow_io_pending_wq, q);
-+    if (!QUEUE_EMPTY(&run_slow_work_message)) {
-       /* Running slow I/O tasks is already scheduled => Nothing to do here.
-          The worker that runs said other task will schedule this one as well. */
-       uv_mutex_unlock(&mutex);
-@@ -153,7 +153,7 @@ static void post(struct uv__queue* q, enum uv__work_kind kind) {
-     q = &run_slow_work_message;
-   }
- 
--  uv__queue_insert_tail(&wq, q);
-+  QUEUE_INSERT_TAIL(&wq, q);
-   if (idle_threads > 0)
-     uv_cond_signal(&cond);
-   uv_mutex_unlock(&mutex);
-@@ -220,9 +220,9 @@ static void init_threads(void) {
-   if (uv_mutex_init(&mutex))
-     abort();
- 
--  uv__queue_init(&wq);
--  uv__queue_init(&slow_io_pending_wq);
--  uv__queue_init(&run_slow_work_message);
-+  QUEUE_INIT(&wq);
-+  QUEUE_INIT(&slow_io_pending_wq);
-+  QUEUE_INIT(&run_slow_work_message);
- 
-   if (uv_sem_init(&sem, 0))
-     abort();
-@@ -285,9 +285,9 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
-   uv_mutex_lock(&mutex);
-   uv_mutex_lock(&w->loop->wq_mutex);
- 
--  cancelled = !uv__queue_empty(&w->wq) && w->work != NULL;
-+  cancelled = !QUEUE_EMPTY(&w->wq) && w->work != NULL;
-   if (cancelled)
--    uv__queue_remove(&w->wq);
-+    QUEUE_REMOVE(&w->wq);
- 
-   uv_mutex_unlock(&w->loop->wq_mutex);
-   uv_mutex_unlock(&mutex);
-@@ -297,7 +297,7 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
- 
-   w->work = uv__cancelled;
-   uv_mutex_lock(&loop->wq_mutex);
--  uv__queue_insert_tail(&loop->wq, &w->wq);
-+  QUEUE_INSERT_TAIL(&loop->wq, &w->wq);
-   uv_async_send(&loop->wq_async);
-   uv_mutex_unlock(&loop->wq_mutex);
- 
-@@ -308,21 +308,21 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
- void uv__work_done(uv_async_t* handle) {
-   struct uv__work* w;
-   uv_loop_t* loop;
--  struct uv__queue* q;
--  struct uv__queue wq;
-+  QUEUE* q;
-+  QUEUE wq;
-   int err;
-   int nevents;
- 
-   loop = container_of(handle, uv_loop_t, wq_async);
-   uv_mutex_lock(&loop->wq_mutex);
--  uv__queue_move(&loop->wq, &wq);
-+  QUEUE_MOVE(&loop->wq, &wq);
-   uv_mutex_unlock(&loop->wq_mutex);
- 
-   nevents = 0;
- 
--  while (!uv__queue_empty(&wq)) {
--    q = uv__queue_head(&wq);
--    uv__queue_remove(q);
-+  while (!QUEUE_EMPTY(&wq)) {
-+    q = QUEUE_HEAD(&wq);
-+    QUEUE_REMOVE(q);
- 
-     w = container_of(q, struct uv__work, wq);
-     err = (w->work == uv__cancelled) ? UV_ECANCELED : 0;
-diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
-index 3af3009a216..f1afbed49ec 100644
---- a/deps/uv/src/unix/aix.c
-+++ b/deps/uv/src/unix/aix.c
-@@ -136,7 +136,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   struct pollfd pqry;
-   struct pollfd* pe;
-   struct poll_ctl pc;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__io_t* w;
-   uint64_t base;
-   uint64_t diff;
-@@ -151,18 +151,18 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int reset_timeout;
- 
-   if (loop->nfds == 0) {
--    assert(uv__queue_empty(&loop->watcher_queue));
-+    assert(QUEUE_EMPTY(&loop->watcher_queue));
-     return;
-   }
- 
-   lfields = uv__get_internal_fields(loop);
- 
--  while (!uv__queue_empty(&loop->watcher_queue)) {
--    q = uv__queue_head(&loop->watcher_queue);
--    uv__queue_remove(q);
--    uv__queue_init(q);
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
- 
--    w = uv__queue_data(q, uv__io_t, watcher_queue);
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
-     assert(w->pevents != 0);
-     assert(w->fd >= 0);
-     assert(w->fd < (int) loop->nwatchers);
-diff --git a/deps/uv/src/unix/async.c b/deps/uv/src/unix/async.c
-index 0ff2669e30a..5751b6d02be 100644
---- a/deps/uv/src/unix/async.c
-+++ b/deps/uv/src/unix/async.c
-@@ -55,7 +55,7 @@ int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) {
-   handle->pending = 0;
-   handle->u.fd = 0; /* This will be used as a busy flag. */
- 
--  uv__queue_insert_tail(&loop->async_handles, &handle->queue);
-+  QUEUE_INSERT_TAIL(&loop->async_handles, &handle->queue);
-   uv__handle_start(handle);
- 
-   return 0;
-@@ -124,7 +124,7 @@ static void uv__async_spin(uv_async_t* handle) {
- 
- void uv__async_close(uv_async_t* handle) {
-   uv__async_spin(handle);
--  uv__queue_remove(&handle->queue);
-+  QUEUE_REMOVE(&handle->queue);
-   uv__handle_stop(handle);
- }
- 
-@@ -132,8 +132,8 @@ void uv__async_close(uv_async_t* handle) {
- static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
-   char buf[1024];
-   ssize_t r;
--  struct uv__queue queue;
--  struct uv__queue* q;
-+  QUEUE queue;
-+  QUEUE* q;
-   uv_async_t* h;
-   _Atomic int *pending;
- 
-@@ -157,13 +157,13 @@ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
-     abort();
-   }
- 
--  uv__queue_move(&loop->async_handles, &queue);
--  while (!uv__queue_empty(&queue)) {
--    q = uv__queue_head(&queue);
--    h = uv__queue_data(q, uv_async_t, queue);
-+  QUEUE_MOVE(&loop->async_handles, &queue);
-+  while (!QUEUE_EMPTY(&queue)) {
-+    q = QUEUE_HEAD(&queue);
-+    h = QUEUE_DATA(q, uv_async_t, queue);
- 
--    uv__queue_remove(q);
--    uv__queue_insert_tail(&loop->async_handles, q);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INSERT_TAIL(&loop->async_handles, q);
- 
-     /* Atomically fetch and clear pending flag */
-     pending = (_Atomic int*) &h->pending;
-@@ -241,8 +241,8 @@ static int uv__async_start(uv_loop_t* loop) {
- 
- 
- void uv__async_stop(uv_loop_t* loop) {
--  struct uv__queue queue;
--  struct uv__queue* q;
-+  QUEUE queue;
-+  QUEUE* q;
-   uv_async_t* h;
- 
-   if (loop->async_io_watcher.fd == -1)
-@@ -251,13 +251,13 @@ void uv__async_stop(uv_loop_t* loop) {
-   /* Make sure no other thread is accessing the async handle fd after the loop
-    * cleanup.
-    */
--  uv__queue_move(&loop->async_handles, &queue);
--  while (!uv__queue_empty(&queue)) {
--    q = uv__queue_head(&queue);
--    h = uv__queue_data(q, uv_async_t, queue);
-+  QUEUE_MOVE(&loop->async_handles, &queue);
-+  while (!QUEUE_EMPTY(&queue)) {
-+    q = QUEUE_HEAD(&queue);
-+    h = QUEUE_DATA(q, uv_async_t, queue);
- 
--    uv__queue_remove(q);
--    uv__queue_insert_tail(&loop->async_handles, q);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INSERT_TAIL(&loop->async_handles, q);
- 
-     uv__async_spin(h);
-   }
-@@ -275,20 +275,20 @@ void uv__async_stop(uv_loop_t* loop) {
- 
- 
- int uv__async_fork(uv_loop_t* loop) {
--  struct uv__queue queue;
--  struct uv__queue* q;
-+  QUEUE queue;
-+  QUEUE* q;
-   uv_async_t* h;
- 
-   if (loop->async_io_watcher.fd == -1) /* never started */
-     return 0;
- 
--  uv__queue_move(&loop->async_handles, &queue);
--  while (!uv__queue_empty(&queue)) {
--    q = uv__queue_head(&queue);
--    h = uv__queue_data(q, uv_async_t, queue);
-+  QUEUE_MOVE(&loop->async_handles, &queue);
-+  while (!QUEUE_EMPTY(&queue)) {
-+    q = QUEUE_HEAD(&queue);
-+    h = QUEUE_DATA(q, uv_async_t, queue);
- 
--    uv__queue_remove(q);
--    uv__queue_insert_tail(&loop->async_handles, q);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INSERT_TAIL(&loop->async_handles, q);
- 
-     /* The state of any thread that set pending is now likely corrupt in this
-      * child because the user called fork, so just clear these flags and move
-diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c
-index 25c5181f370..55aa962787e 100644
---- a/deps/uv/src/unix/core.c
-+++ b/deps/uv/src/unix/core.c
-@@ -344,7 +344,7 @@ static void uv__finish_close(uv_handle_t* handle) {
-   }
- 
-   uv__handle_unref(handle);
--  uv__queue_remove(&handle->handle_queue);
-+  QUEUE_REMOVE(&handle->handle_queue);
- 
-   if (handle->close_cb) {
-     handle->close_cb(handle);
-@@ -380,7 +380,7 @@ int uv_backend_fd(const uv_loop_t* loop) {
- static int uv__loop_alive(const uv_loop_t* loop) {
-   return uv__has_active_handles(loop) ||
-          uv__has_active_reqs(loop) ||
--         !uv__queue_empty(&loop->pending_queue) ||
-+         !QUEUE_EMPTY(&loop->pending_queue) ||
-          loop->closing_handles != NULL;
- }
- 
-@@ -389,8 +389,8 @@ static int uv__backend_timeout(const uv_loop_t* loop) {
-   if (loop->stop_flag == 0 &&
-       /* uv__loop_alive(loop) && */
-       (uv__has_active_handles(loop) || uv__has_active_reqs(loop)) &&
--      uv__queue_empty(&loop->pending_queue) &&
--      uv__queue_empty(&loop->idle_handles) &&
-+      QUEUE_EMPTY(&loop->pending_queue) &&
-+      QUEUE_EMPTY(&loop->idle_handles) &&
-       (loop->flags & UV_LOOP_REAP_CHILDREN) == 0 &&
-       loop->closing_handles == NULL)
-     return uv__next_timeout(loop);
-@@ -399,7 +399,7 @@ static int uv__backend_timeout(const uv_loop_t* loop) {
- 
- 
- int uv_backend_timeout(const uv_loop_t* loop) {
--  if (uv__queue_empty(&loop->watcher_queue))
-+  if (QUEUE_EMPTY(&loop->watcher_queue))
-     return uv__backend_timeout(loop);
-   /* Need to call uv_run to update the backend fd state. */
-   return 0;
-@@ -431,8 +431,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
- 
-   while (r != 0 && loop->stop_flag == 0) {
-     can_sleep =
--        uv__queue_empty(&loop->pending_queue) &&
--        uv__queue_empty(&loop->idle_handles);
-+        QUEUE_EMPTY(&loop->pending_queue) && QUEUE_EMPTY(&loop->idle_handles);
- 
-     uv__run_pending(loop);
-     uv__run_idle(loop);
-@@ -448,7 +447,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
- 
-     /* Process immediate callbacks (e.g. write_cb) a small fixed number of
-      * times to avoid loop starvation.*/
--    for (r = 0; r < 8 && !uv__queue_empty(&loop->pending_queue); r++)
-+    for (r = 0; r < 8 && !QUEUE_EMPTY(&loop->pending_queue); r++)
-       uv__run_pending(loop);
- 
-     /* Run one final update on the provider_idle_time in case uv__io_poll
-@@ -827,17 +826,17 @@ int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) {
- 
- 
- static void uv__run_pending(uv_loop_t* loop) {
--  struct uv__queue* q;
--  struct uv__queue pq;
-+  QUEUE* q;
-+  QUEUE pq;
-   uv__io_t* w;
- 
--  uv__queue_move(&loop->pending_queue, &pq);
-+  QUEUE_MOVE(&loop->pending_queue, &pq);
- 
--  while (!uv__queue_empty(&pq)) {
--    q = uv__queue_head(&pq);
--    uv__queue_remove(q);
--    uv__queue_init(q);
--    w = uv__queue_data(q, uv__io_t, pending_queue);
-+  while (!QUEUE_EMPTY(&pq)) {
-+    q = QUEUE_HEAD(&pq);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
-+    w = QUEUE_DATA(q, uv__io_t, pending_queue);
-     w->cb(loop, w, POLLOUT);
-   }
- }
-@@ -892,8 +891,8 @@ static void maybe_resize(uv_loop_t* loop, unsigned int len) {
- void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) {
-   assert(cb != NULL);
-   assert(fd >= -1);
--  uv__queue_init(&w->pending_queue);
--  uv__queue_init(&w->watcher_queue);
-+  QUEUE_INIT(&w->pending_queue);
-+  QUEUE_INIT(&w->watcher_queue);
-   w->cb = cb;
-   w->fd = fd;
-   w->events = 0;
-@@ -919,8 +918,8 @@ void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
-     return;
- #endif
- 
--  if (uv__queue_empty(&w->watcher_queue))
--    uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
-+  if (QUEUE_EMPTY(&w->watcher_queue))
-+    QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
- 
-   if (loop->watchers[w->fd] == NULL) {
-     loop->watchers[w->fd] = w;
-@@ -945,8 +944,8 @@ void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
-   w->pevents &= ~events;
- 
-   if (w->pevents == 0) {
--    uv__queue_remove(&w->watcher_queue);
--    uv__queue_init(&w->watcher_queue);
-+    QUEUE_REMOVE(&w->watcher_queue);
-+    QUEUE_INIT(&w->watcher_queue);
-     w->events = 0;
- 
-     if (w == loop->watchers[w->fd]) {
-@@ -955,14 +954,14 @@ void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
-       loop->nfds--;
-     }
-   }
--  else if (uv__queue_empty(&w->watcher_queue))
--    uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
-+  else if (QUEUE_EMPTY(&w->watcher_queue))
-+    QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
- }
- 
- 
- void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
-   uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI);
--  uv__queue_remove(&w->pending_queue);
-+  QUEUE_REMOVE(&w->pending_queue);
- 
-   /* Remove stale events for this file descriptor */
-   if (w->fd != -1)
-@@ -971,8 +970,8 @@ void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
- 
- 
- void uv__io_feed(uv_loop_t* loop, uv__io_t* w) {
--  if (uv__queue_empty(&w->pending_queue))
--    uv__queue_insert_tail(&loop->pending_queue, &w->pending_queue);
-+  if (QUEUE_EMPTY(&w->pending_queue))
-+    QUEUE_INSERT_TAIL(&loop->pending_queue, &w->pending_queue);
- }
- 
- 
-diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
-index 6b051c124f2..00d385c24b7 100644
---- a/deps/uv/src/unix/fs.c
-+++ b/deps/uv/src/unix/fs.c
-@@ -62,6 +62,7 @@
- 
- #if defined(__linux__)
- # include <sys/sendfile.h>
-+# include <sys/utsname.h>
- #endif
- 
- #if defined(__sun)
-@@ -903,6 +904,31 @@ out:
- 
- 
- #ifdef __linux__
-+static unsigned uv__kernel_version(void) {
-+  static _Atomic unsigned cached_version;
-+  struct utsname u;
-+  unsigned version;
-+  unsigned major;
-+  unsigned minor;
-+  unsigned patch;
-+
-+  version = atomic_load_explicit(&cached_version, memory_order_relaxed);
-+  if (version != 0)
-+    return version;
-+
-+  if (-1 == uname(&u))
-+    return 0;
-+
-+  if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
-+    return 0;
-+
-+  version = major * 65536 + minor * 256 + patch;
-+  atomic_store_explicit(&cached_version, version, memory_order_relaxed);
-+
-+  return version;
-+}
-+
-+
- /* Pre-4.20 kernels have a bug where CephFS uses the RADOS copy-from command
-  * in copy_file_range() when it shouldn't. There is no workaround except to
-  * fall back to a regular copy.
-@@ -1905,9 +1931,6 @@ int uv_fs_link(uv_loop_t* loop,
-                uv_fs_cb cb) {
-   INIT(LINK);
-   PATH2;
--  if (cb != NULL)
--    if (uv__iou_fs_link(loop, req))
--      return 0;
-   POST;
- }
- 
-@@ -1920,9 +1943,6 @@ int uv_fs_mkdir(uv_loop_t* loop,
-   INIT(MKDIR);
-   PATH;
-   req->mode = mode;
--  if (cb != NULL)
--    if (uv__iou_fs_mkdir(loop, req))
--      return 0;
-   POST;
- }
- 
-@@ -2074,9 +2094,6 @@ int uv_fs_rename(uv_loop_t* loop,
-                  uv_fs_cb cb) {
-   INIT(RENAME);
-   PATH2;
--  if (cb != NULL)
--    if (uv__iou_fs_rename(loop, req))
--      return 0;
-   POST;
- }
- 
-@@ -2123,9 +2140,6 @@ int uv_fs_symlink(uv_loop_t* loop,
-   INIT(SYMLINK);
-   PATH2;
-   req->flags = flags;
--  if (cb != NULL)
--    if (uv__iou_fs_symlink(loop, req))
--      return 0;
-   POST;
- }
- 
-@@ -2133,9 +2147,6 @@ int uv_fs_symlink(uv_loop_t* loop,
- int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
-   INIT(UNLINK);
-   PATH;
--  if (cb != NULL)
--    if (uv__iou_fs_unlink(loop, req))
--      return 0;
-   POST;
- }
- 
-diff --git a/deps/uv/src/unix/fsevents.c b/deps/uv/src/unix/fsevents.c
-index df703f3635f..0535b4547aa 100644
---- a/deps/uv/src/unix/fsevents.c
-+++ b/deps/uv/src/unix/fsevents.c
-@@ -80,13 +80,13 @@ enum uv__cf_loop_signal_type_e {
- typedef enum uv__cf_loop_signal_type_e uv__cf_loop_signal_type_t;
- 
- struct uv__cf_loop_signal_s {
--  struct uv__queue member;
-+  QUEUE member;
-   uv_fs_event_t* handle;
-   uv__cf_loop_signal_type_t type;
- };
- 
- struct uv__fsevents_event_s {
--  struct uv__queue member;
-+  QUEUE member;
-   int events;
-   char path[1];
- };
-@@ -98,7 +98,7 @@ struct uv__cf_loop_state_s {
-   FSEventStreamRef fsevent_stream;
-   uv_sem_t fsevent_sem;
-   uv_mutex_t fsevent_mutex;
--  struct uv__queue fsevent_handles;
-+  void* fsevent_handles[2];
-   unsigned int fsevent_handle_count;
- };
- 
-@@ -150,22 +150,22 @@ static void (*pFSEventStreamStop)(FSEventStreamRef);
- 
- #define UV__FSEVENTS_PROCESS(handle, block)                                   \
-     do {                                                                      \
--      struct uv__queue events;                                                \
--      struct uv__queue* q;                                                    \
-+      QUEUE events;                                                           \
-+      QUEUE* q;                                                               \
-       uv__fsevents_event_t* event;                                            \
-       int err;                                                                \
-       uv_mutex_lock(&(handle)->cf_mutex);                                     \
-       /* Split-off all events and empty original queue */                     \
--      uv__queue_move(&(handle)->cf_events, &events);                          \
-+      QUEUE_MOVE(&(handle)->cf_events, &events);                              \
-       /* Get error (if any) and zero original one */                          \
-       err = (handle)->cf_error;                                               \
-       (handle)->cf_error = 0;                                                 \
-       uv_mutex_unlock(&(handle)->cf_mutex);                                   \
-       /* Loop through events, deallocating each after processing */           \
--      while (!uv__queue_empty(&events)) {                                     \
--        q = uv__queue_head(&events);                                          \
--        event = uv__queue_data(q, uv__fsevents_event_t, member);              \
--        uv__queue_remove(q);                                                  \
-+      while (!QUEUE_EMPTY(&events)) {                                         \
-+        q = QUEUE_HEAD(&events);                                              \
-+        event = QUEUE_DATA(q, uv__fsevents_event_t, member);                  \
-+        QUEUE_REMOVE(q);                                                      \
-         /* NOTE: Checking uv__is_active() is required here, because handle    \
-          * callback may close handle and invoking it after it will lead to    \
-          * incorrect behaviour */                                             \
-@@ -193,14 +193,14 @@ static void uv__fsevents_cb(uv_async_t* cb) {
- 
- /* Runs in CF thread, pushed event into handle's event list */
- static void uv__fsevents_push_event(uv_fs_event_t* handle,
--                                    struct uv__queue* events,
-+                                    QUEUE* events,
-                                     int err) {
-   assert(events != NULL || err != 0);
-   uv_mutex_lock(&handle->cf_mutex);
- 
-   /* Concatenate two queues */
-   if (events != NULL)
--    uv__queue_add(&handle->cf_events, events);
-+    QUEUE_ADD(&handle->cf_events, events);
- 
-   /* Propagate error */
-   if (err != 0)
-@@ -224,12 +224,12 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
-   char* path;
-   char* pos;
-   uv_fs_event_t* handle;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv_loop_t* loop;
-   uv__cf_loop_state_t* state;
-   uv__fsevents_event_t* event;
-   FSEventStreamEventFlags flags;
--  struct uv__queue head;
-+  QUEUE head;
- 
-   loop = info;
-   state = loop->cf_state;
-@@ -238,9 +238,9 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
- 
-   /* For each handle */
-   uv_mutex_lock(&state->fsevent_mutex);
--  uv__queue_foreach(q, &state->fsevent_handles) {
--    handle = uv__queue_data(q, uv_fs_event_t, cf_member);
--    uv__queue_init(&head);
-+  QUEUE_FOREACH(q, &state->fsevent_handles) {
-+    handle = QUEUE_DATA(q, uv_fs_event_t, cf_member);
-+    QUEUE_INIT(&head);
- 
-     /* Process and filter out events */
-     for (i = 0; i < numEvents; i++) {
-@@ -318,10 +318,10 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
-           event->events = UV_CHANGE;
-       }
- 
--      uv__queue_insert_tail(&head, &event->member);
-+      QUEUE_INSERT_TAIL(&head, &event->member);
-     }
- 
--    if (!uv__queue_empty(&head))
-+    if (!QUEUE_EMPTY(&head))
-       uv__fsevents_push_event(handle, &head, 0);
-   }
-   uv_mutex_unlock(&state->fsevent_mutex);
-@@ -403,7 +403,7 @@ static void uv__fsevents_destroy_stream(uv__cf_loop_state_t* state) {
- static void uv__fsevents_reschedule(uv__cf_loop_state_t* state,
-                                     uv_loop_t* loop,
-                                     uv__cf_loop_signal_type_t type) {
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv_fs_event_t* curr;
-   CFArrayRef cf_paths;
-   CFStringRef* paths;
-@@ -446,9 +446,9 @@ static void uv__fsevents_reschedule(uv__cf_loop_state_t* state,
- 
-     q = &state->fsevent_handles;
-     for (; i < path_count; i++) {
--      q = uv__queue_next(q);
-+      q = QUEUE_NEXT(q);
-       assert(q != &state->fsevent_handles);
--      curr = uv__queue_data(q, uv_fs_event_t, cf_member);
-+      curr = QUEUE_DATA(q, uv_fs_event_t, cf_member);
- 
-       assert(curr->realpath != NULL);
-       paths[i] =
-@@ -486,8 +486,8 @@ final:
- 
-     /* Broadcast error to all handles */
-     uv_mutex_lock(&state->fsevent_mutex);
--    uv__queue_foreach(q, &state->fsevent_handles) {
--      curr = uv__queue_data(q, uv_fs_event_t, cf_member);
-+    QUEUE_FOREACH(q, &state->fsevent_handles) {
-+      curr = QUEUE_DATA(q, uv_fs_event_t, cf_member);
-       uv__fsevents_push_event(curr, NULL, err);
-     }
-     uv_mutex_unlock(&state->fsevent_mutex);
-@@ -606,7 +606,7 @@ static int uv__fsevents_loop_init(uv_loop_t* loop) {
-   if (err)
-     goto fail_sem_init;
- 
--  uv__queue_init(&loop->cf_signals);
-+  QUEUE_INIT(&loop->cf_signals);
- 
-   err = uv_sem_init(&state->fsevent_sem, 0);
-   if (err)
-@@ -616,7 +616,7 @@ static int uv__fsevents_loop_init(uv_loop_t* loop) {
-   if (err)
-     goto fail_fsevent_mutex_init;
- 
--  uv__queue_init(&state->fsevent_handles);
-+  QUEUE_INIT(&state->fsevent_handles);
-   state->fsevent_need_reschedule = 0;
-   state->fsevent_handle_count = 0;
- 
-@@ -675,7 +675,7 @@ fail_mutex_init:
- void uv__fsevents_loop_delete(uv_loop_t* loop) {
-   uv__cf_loop_signal_t* s;
-   uv__cf_loop_state_t* state;
--  struct uv__queue* q;
-+  QUEUE* q;
- 
-   if (loop->cf_state == NULL)
-     return;
-@@ -688,10 +688,10 @@ void uv__fsevents_loop_delete(uv_loop_t* loop) {
-   uv_mutex_destroy(&loop->cf_mutex);
- 
-   /* Free any remaining data */
--  while (!uv__queue_empty(&loop->cf_signals)) {
--    q = uv__queue_head(&loop->cf_signals);
--    s = uv__queue_data(q, uv__cf_loop_signal_t, member);
--    uv__queue_remove(q);
-+  while (!QUEUE_EMPTY(&loop->cf_signals)) {
-+    q = QUEUE_HEAD(&loop->cf_signals);
-+    s = QUEUE_DATA(q, uv__cf_loop_signal_t, member);
-+    QUEUE_REMOVE(q);
-     uv__free(s);
-   }
- 
-@@ -735,22 +735,22 @@ static void* uv__cf_loop_runner(void* arg) {
- static void uv__cf_loop_cb(void* arg) {
-   uv_loop_t* loop;
-   uv__cf_loop_state_t* state;
--  struct uv__queue* item;
--  struct uv__queue split_head;
-+  QUEUE* item;
-+  QUEUE split_head;
-   uv__cf_loop_signal_t* s;
- 
-   loop = arg;
-   state = loop->cf_state;
- 
-   uv_mutex_lock(&loop->cf_mutex);
--  uv__queue_move(&loop->cf_signals, &split_head);
-+  QUEUE_MOVE(&loop->cf_signals, &split_head);
-   uv_mutex_unlock(&loop->cf_mutex);
- 
--  while (!uv__queue_empty(&split_head)) {
--    item = uv__queue_head(&split_head);
--    uv__queue_remove(item);
-+  while (!QUEUE_EMPTY(&split_head)) {
-+    item = QUEUE_HEAD(&split_head);
-+    QUEUE_REMOVE(item);
- 
--    s = uv__queue_data(item, uv__cf_loop_signal_t, member);
-+    s = QUEUE_DATA(item, uv__cf_loop_signal_t, member);
- 
-     /* This was a termination signal */
-     if (s->handle == NULL)
-@@ -778,7 +778,7 @@ int uv__cf_loop_signal(uv_loop_t* loop,
-   item->type = type;
- 
-   uv_mutex_lock(&loop->cf_mutex);
--  uv__queue_insert_tail(&loop->cf_signals, &item->member);
-+  QUEUE_INSERT_TAIL(&loop->cf_signals, &item->member);
- 
-   state = loop->cf_state;
-   assert(state != NULL);
-@@ -807,7 +807,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) {
-   handle->realpath_len = strlen(handle->realpath);
- 
-   /* Initialize event queue */
--  uv__queue_init(&handle->cf_events);
-+  QUEUE_INIT(&handle->cf_events);
-   handle->cf_error = 0;
- 
-   /*
-@@ -832,7 +832,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) {
-   /* Insert handle into the list */
-   state = handle->loop->cf_state;
-   uv_mutex_lock(&state->fsevent_mutex);
--  uv__queue_insert_tail(&state->fsevent_handles, &handle->cf_member);
-+  QUEUE_INSERT_TAIL(&state->fsevent_handles, &handle->cf_member);
-   state->fsevent_handle_count++;
-   state->fsevent_need_reschedule = 1;
-   uv_mutex_unlock(&state->fsevent_mutex);
-@@ -872,7 +872,7 @@ int uv__fsevents_close(uv_fs_event_t* handle) {
-   /* Remove handle from  the list */
-   state = handle->loop->cf_state;
-   uv_mutex_lock(&state->fsevent_mutex);
--  uv__queue_remove(&handle->cf_member);
-+  QUEUE_REMOVE(&handle->cf_member);
-   state->fsevent_handle_count--;
-   state->fsevent_need_reschedule = 1;
-   uv_mutex_unlock(&state->fsevent_mutex);
-diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
-index fe588513603..6c5822e6a0d 100644
---- a/deps/uv/src/unix/internal.h
-+++ b/deps/uv/src/unix/internal.h
-@@ -335,30 +335,20 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req);
- int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
-                                   uv_fs_t* req,
-                                   uint32_t fsync_flags);
--int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req);
--int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req);
- int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req);
- int uv__iou_fs_read_or_write(uv_loop_t* loop,
-                              uv_fs_t* req,
-                              int is_read);
--int uv__iou_fs_rename(uv_loop_t* loop, uv_fs_t* req);
- int uv__iou_fs_statx(uv_loop_t* loop,
-                      uv_fs_t* req,
-                      int is_fstat,
-                      int is_lstat);
--int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req);
--int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req);
- #else
- #define uv__iou_fs_close(loop, req) 0
- #define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0
--#define uv__iou_fs_link(loop, req) 0
--#define uv__iou_fs_mkdir(loop, req) 0
- #define uv__iou_fs_open(loop, req) 0
- #define uv__iou_fs_read_or_write(loop, req, is_read) 0
--#define uv__iou_fs_rename(loop, req) 0
- #define uv__iou_fs_statx(loop, req, is_fstat, is_lstat) 0
--#define uv__iou_fs_symlink(loop, req) 0
--#define uv__iou_fs_unlink(loop, req) 0
- #endif
- 
- #if defined(__APPLE__)
-@@ -439,7 +429,6 @@ int uv__statx(int dirfd,
-               struct uv__statx* statxbuf);
- void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf);
- ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags);
--unsigned uv__kernel_version(void);
- #endif
- 
- typedef int (*uv__peersockfunc)(int, struct sockaddr*, socklen_t*);
-diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
-index b78242d3be4..82916d65933 100644
---- a/deps/uv/src/unix/kqueue.c
-+++ b/deps/uv/src/unix/kqueue.c
-@@ -133,7 +133,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   struct timespec spec;
-   unsigned int nevents;
-   unsigned int revents;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__io_t* w;
-   uv_process_t* process;
-   sigset_t* pset;
-@@ -152,19 +152,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int reset_timeout;
- 
-   if (loop->nfds == 0) {
--    assert(uv__queue_empty(&loop->watcher_queue));
-+    assert(QUEUE_EMPTY(&loop->watcher_queue));
-     return;
-   }
- 
-   lfields = uv__get_internal_fields(loop);
-   nevents = 0;
- 
--  while (!uv__queue_empty(&loop->watcher_queue)) {
--    q = uv__queue_head(&loop->watcher_queue);
--    uv__queue_remove(q);
--    uv__queue_init(q);
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
- 
--    w = uv__queue_data(q, uv__io_t, watcher_queue);
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
-     assert(w->pevents != 0);
-     assert(w->fd >= 0);
-     assert(w->fd < (int) loop->nwatchers);
-@@ -307,8 +307,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
- 
-       /* Handle kevent NOTE_EXIT results */
-       if (ev->filter == EVFILT_PROC) {
--        uv__queue_foreach(q, &loop->process_handles) {
--          process = uv__queue_data(q, uv_process_t, queue);
-+        QUEUE_FOREACH(q, &loop->process_handles) {
-+          process = QUEUE_DATA(q, uv_process_t, queue);
-           if (process->pid == fd) {
-             process->flags |= UV_HANDLE_REAP;
-             loop->flags |= UV_LOOP_REAP_CHILDREN;
-diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
-index 48b9c2c43e1..5f84ad0eea3 100644
---- a/deps/uv/src/unix/linux.c
-+++ b/deps/uv/src/unix/linux.c
-@@ -48,7 +48,6 @@
- #include <sys/sysinfo.h>
- #include <sys/sysmacros.h>
- #include <sys/types.h>
--#include <sys/utsname.h>
- #include <time.h>
- #include <unistd.h>
- 
-@@ -151,11 +150,6 @@ enum {
-   UV__IORING_OP_CLOSE = 19,
-   UV__IORING_OP_STATX = 21,
-   UV__IORING_OP_EPOLL_CTL = 29,
--  UV__IORING_OP_RENAMEAT = 35,
--  UV__IORING_OP_UNLINKAT = 36,
--  UV__IORING_OP_MKDIRAT = 37,
--  UV__IORING_OP_SYMLINKAT = 38,
--  UV__IORING_OP_LINKAT = 39,
- };
- 
- enum {
-@@ -168,10 +162,6 @@ enum {
-   UV__IORING_SQ_CQ_OVERFLOW = 2u,
- };
- 
--enum {
--  UV__MKDIRAT_SYMLINKAT_LINKAT = 1u,
--};
--
- struct uv__io_cqring_offsets {
-   uint32_t head;
-   uint32_t tail;
-@@ -267,7 +257,7 @@ STATIC_ASSERT(EPOLL_CTL_MOD < 4);
- 
- struct watcher_list {
-   RB_ENTRY(watcher_list) entry;
--  struct uv__queue watchers;
-+  QUEUE watchers;
-   int iterating;
-   char* path;
-   int wd;
-@@ -310,31 +300,6 @@ static struct watcher_root* uv__inotify_watchers(uv_loop_t* loop) {
- }
- 
- 
--unsigned uv__kernel_version(void) {
--  static _Atomic unsigned cached_version;
--  struct utsname u;
--  unsigned version;
--  unsigned major;
--  unsigned minor;
--  unsigned patch;
--
--  version = atomic_load_explicit(&cached_version, memory_order_relaxed);
--  if (version != 0)
--    return version;
--
--  if (-1 == uname(&u))
--    return 0;
--
--  if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
--    return 0;
--
--  version = major * 65536 + minor * 256 + patch;
--  atomic_store_explicit(&cached_version, version, memory_order_relaxed);
--
--  return version;
--}
--
--
- ssize_t
- uv__fs_copy_file_range(int fd_in,
-                        off_t* off_in,
-@@ -420,9 +385,6 @@ int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
- 
- 
- static int uv__use_io_uring(void) {
--#if defined(__ANDROID_API__)
--  return 0;  /* Possibly available but blocked by seccomp. */
--#else
-   /* Ternary: unknown=0, yes=1, no=-1 */
-   static _Atomic int use_io_uring;
-   char* val;
-@@ -437,7 +399,6 @@ static int uv__use_io_uring(void) {
-   }
- 
-   return use > 0;
--#endif
- }
- 
- 
-@@ -542,10 +503,6 @@ static void uv__iou_init(int epollfd,
-   iou->sqelen = sqelen;
-   iou->ringfd = ringfd;
-   iou->in_flight = 0;
--  iou->flags = 0;
--
--  if (uv__kernel_version() >= /* 5.15.0 */ 0x050F00)
--    iou->flags |= UV__MKDIRAT_SYMLINKAT_LINKAT;
- 
-   for (i = 0; i <= iou->sqmask; i++)
-     iou->sqarray[i] = i;  /* Slot -> sqe identity mapping. */
-@@ -727,7 +684,7 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
-   req->work_req.loop = loop;
-   req->work_req.work = NULL;
-   req->work_req.done = NULL;
--  uv__queue_init(&req->work_req.wq);
-+  QUEUE_INIT(&req->work_req.wq);
- 
-   uv__req_register(loop, req);
-   iou->in_flight++;
-@@ -757,17 +714,6 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
-   struct uv__io_uring_sqe* sqe;
-   struct uv__iou* iou;
- 
--  /* Work around a poorly understood bug in older kernels where closing a file
--   * descriptor pointing to /foo/bar results in ETXTBSY errors when trying to
--   * execve("/foo/bar") later on. The bug seems to have been fixed somewhere
--   * between 5.15.85 and 5.15.90. I couldn't pinpoint the responsible commit
--   * but good candidates are the several data race fixes. Interestingly, it
--   * seems to manifest only when running under Docker so the possibility of
--   * a Docker bug can't be completely ruled out either. Yay, computers.
--   */
--  if (uv__kernel_version() < /* 5.15.90 */ 0x050F5A)
--    return 0;
--
-   iou = &uv__get_internal_fields(loop)->iou;
- 
-   sqe = uv__iou_get_sqe(iou, loop, req);
-@@ -808,55 +754,6 @@ int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
- }
- 
- 
--int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
--    return 0;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->fd = AT_FDCWD;
--  sqe->addr2 = (uintptr_t) req->new_path;
--  sqe->len = AT_FDCWD;
--  sqe->opcode = UV__IORING_OP_LINKAT;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
--    return 0;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->fd = AT_FDCWD;
--  sqe->len = req->mode;
--  sqe->opcode = UV__IORING_OP_MKDIRAT;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
- int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
-   struct uv__io_uring_sqe* sqe;
-   struct uv__iou* iou;
-@@ -879,86 +776,16 @@ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
- }
- 
- 
--int uv__iou_fs_rename(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->fd = AT_FDCWD;
--  sqe->addr2 = (uintptr_t) req->new_path;
--  sqe->len = AT_FDCWD;
--  sqe->opcode = UV__IORING_OP_RENAMEAT;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
--    return 0;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->fd = AT_FDCWD;
--  sqe->addr2 = (uintptr_t) req->new_path;
--  sqe->opcode = UV__IORING_OP_SYMLINKAT;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->fd = AT_FDCWD;
--  sqe->opcode = UV__IORING_OP_UNLINKAT;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
- int uv__iou_fs_read_or_write(uv_loop_t* loop,
-                              uv_fs_t* req,
-                              int is_read) {
-   struct uv__io_uring_sqe* sqe;
-   struct uv__iou* iou;
- 
--  /* If iovcnt is greater than IOV_MAX, cap it to IOV_MAX on reads and fallback
--   * to the threadpool on writes */
--  if (req->nbufs > IOV_MAX) {
--    if (is_read)
--      req->nbufs = IOV_MAX;
--    else
--      return 0;
--  }
-+  /* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
-+   * threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
-+  if (req->nbufs > IOV_MAX)
-+    return 0;
- 
-   iou = &uv__get_internal_fields(loop)->iou;
- 
-@@ -1265,7 +1092,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   struct uv__iou* ctl;
-   struct uv__iou* iou;
-   int real_timeout;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__io_t* w;
-   sigset_t* sigmask;
-   sigset_t sigset;
-@@ -1311,11 +1138,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
- 
-   memset(&e, 0, sizeof(e));
- 
--  while (!uv__queue_empty(&loop->watcher_queue)) {
--    q = uv__queue_head(&loop->watcher_queue);
--    w = uv__queue_data(q, uv__io_t, watcher_queue);
--    uv__queue_remove(q);
--    uv__queue_init(q);
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
- 
-     op = EPOLL_CTL_MOD;
-     if (w->events == 0)
-@@ -2272,8 +2099,8 @@ static int uv__inotify_fork(uv_loop_t* loop, struct watcher_list* root) {
-   struct watcher_list* tmp_watcher_list_iter;
-   struct watcher_list* watcher_list;
-   struct watcher_list tmp_watcher_list;
--  struct uv__queue queue;
--  struct uv__queue* q;
-+  QUEUE queue;
-+  QUEUE* q;
-   uv_fs_event_t* handle;
-   char* tmp_path;
- 
-@@ -2285,41 +2112,41 @@ static int uv__inotify_fork(uv_loop_t* loop, struct watcher_list* root) {
-    */
-   loop->inotify_watchers = root;
- 
--  uv__queue_init(&tmp_watcher_list.watchers);
-+  QUEUE_INIT(&tmp_watcher_list.watchers);
-   /* Note that the queue we use is shared with the start and stop()
--   * functions, making uv__queue_foreach unsafe to use. So we use the
--   * uv__queue_move trick to safely iterate. Also don't free the watcher
-+   * functions, making QUEUE_FOREACH unsafe to use. So we use the
-+   * QUEUE_MOVE trick to safely iterate. Also don't free the watcher
-    * list until we're done iterating. c.f. uv__inotify_read.
-    */
-   RB_FOREACH_SAFE(watcher_list, watcher_root,
-                   uv__inotify_watchers(loop), tmp_watcher_list_iter) {
-     watcher_list->iterating = 1;
--    uv__queue_move(&watcher_list->watchers, &queue);
--    while (!uv__queue_empty(&queue)) {
--      q = uv__queue_head(&queue);
--      handle = uv__queue_data(q, uv_fs_event_t, watchers);
-+    QUEUE_MOVE(&watcher_list->watchers, &queue);
-+    while (!QUEUE_EMPTY(&queue)) {
-+      q = QUEUE_HEAD(&queue);
-+      handle = QUEUE_DATA(q, uv_fs_event_t, watchers);
-       /* It's critical to keep a copy of path here, because it
-        * will be set to NULL by stop() and then deallocated by
-        * maybe_free_watcher_list
-        */
-       tmp_path = uv__strdup(handle->path);
-       assert(tmp_path != NULL);
--      uv__queue_remove(q);
--      uv__queue_insert_tail(&watcher_list->watchers, q);
-+      QUEUE_REMOVE(q);
-+      QUEUE_INSERT_TAIL(&watcher_list->watchers, q);
-       uv_fs_event_stop(handle);
- 
--      uv__queue_insert_tail(&tmp_watcher_list.watchers, &handle->watchers);
-+      QUEUE_INSERT_TAIL(&tmp_watcher_list.watchers, &handle->watchers);
-       handle->path = tmp_path;
-     }
-     watcher_list->iterating = 0;
-     maybe_free_watcher_list(watcher_list, loop);
-   }
- 
--  uv__queue_move(&tmp_watcher_list.watchers, &queue);
--  while (!uv__queue_empty(&queue)) {
--      q = uv__queue_head(&queue);
--      uv__queue_remove(q);
--      handle = uv__queue_data(q, uv_fs_event_t, watchers);
-+  QUEUE_MOVE(&tmp_watcher_list.watchers, &queue);
-+  while (!QUEUE_EMPTY(&queue)) {
-+      q = QUEUE_HEAD(&queue);
-+      QUEUE_REMOVE(q);
-+      handle = QUEUE_DATA(q, uv_fs_event_t, watchers);
-       tmp_path = handle->path;
-       handle->path = NULL;
-       err = uv_fs_event_start(handle, handle->cb, tmp_path, 0);
-@@ -2341,7 +2168,7 @@ static struct watcher_list* find_watcher(uv_loop_t* loop, int wd) {
- 
- static void maybe_free_watcher_list(struct watcher_list* w, uv_loop_t* loop) {
-   /* if the watcher_list->watchers is being iterated over, we can't free it. */
--  if ((!w->iterating) && uv__queue_empty(&w->watchers)) {
-+  if ((!w->iterating) && QUEUE_EMPTY(&w->watchers)) {
-     /* No watchers left for this path. Clean up. */
-     RB_REMOVE(watcher_root, uv__inotify_watchers(loop), w);
-     inotify_rm_watch(loop->inotify_fd, w->wd);
-@@ -2356,8 +2183,8 @@ static void uv__inotify_read(uv_loop_t* loop,
-   const struct inotify_event* e;
-   struct watcher_list* w;
-   uv_fs_event_t* h;
--  struct uv__queue queue;
--  struct uv__queue* q;
-+  QUEUE queue;
-+  QUEUE* q;
-   const char* path;
-   ssize_t size;
-   const char *p;
-@@ -2400,7 +2227,7 @@ static void uv__inotify_read(uv_loop_t* loop,
-        * What can go wrong?
-        * A callback could call uv_fs_event_stop()
-        * and the queue can change under our feet.
--       * So, we use uv__queue_move() trick to safely iterate over the queue.
-+       * So, we use QUEUE_MOVE() trick to safely iterate over the queue.
-        * And we don't free the watcher_list until we're done iterating.
-        *
-        * First,
-@@ -2408,13 +2235,13 @@ static void uv__inotify_read(uv_loop_t* loop,
-        * not to free watcher_list.
-        */
-       w->iterating = 1;
--      uv__queue_move(&w->watchers, &queue);
--      while (!uv__queue_empty(&queue)) {
--        q = uv__queue_head(&queue);
--        h = uv__queue_data(q, uv_fs_event_t, watchers);
-+      QUEUE_MOVE(&w->watchers, &queue);
-+      while (!QUEUE_EMPTY(&queue)) {
-+        q = QUEUE_HEAD(&queue);
-+        h = QUEUE_DATA(q, uv_fs_event_t, watchers);
- 
--        uv__queue_remove(q);
--        uv__queue_insert_tail(&w->watchers, q);
-+        QUEUE_REMOVE(q);
-+        QUEUE_INSERT_TAIL(&w->watchers, q);
- 
-         h->cb(h, path, events, 0);
-       }
-@@ -2476,13 +2303,13 @@ int uv_fs_event_start(uv_fs_event_t* handle,
- 
-   w->wd = wd;
-   w->path = memcpy(w + 1, path, len);
--  uv__queue_init(&w->watchers);
-+  QUEUE_INIT(&w->watchers);
-   w->iterating = 0;
-   RB_INSERT(watcher_root, uv__inotify_watchers(loop), w);
- 
- no_insert:
-   uv__handle_start(handle);
--  uv__queue_insert_tail(&w->watchers, &handle->watchers);
-+  QUEUE_INSERT_TAIL(&w->watchers, &handle->watchers);
-   handle->path = w->path;
-   handle->cb = cb;
-   handle->wd = wd;
-@@ -2503,7 +2330,7 @@ int uv_fs_event_stop(uv_fs_event_t* handle) {
-   handle->wd = -1;
-   handle->path = NULL;
-   uv__handle_stop(handle);
--  uv__queue_remove(&handle->watchers);
-+  QUEUE_REMOVE(&handle->watchers);
- 
-   maybe_free_watcher_list(w, handle->loop);
- 
-diff --git a/deps/uv/src/unix/loop-watcher.c b/deps/uv/src/unix/loop-watcher.c
-index 2db8b515df7..b8c1c2a7102 100644
---- a/deps/uv/src/unix/loop-watcher.c
-+++ b/deps/uv/src/unix/loop-watcher.c
-@@ -32,7 +32,7 @@
-   int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) {           \
-     if (uv__is_active(handle)) return 0;                                      \
-     if (cb == NULL) return UV_EINVAL;                                         \
--    uv__queue_insert_head(&handle->loop->name##_handles, &handle->queue);     \
-+    QUEUE_INSERT_HEAD(&handle->loop->name##_handles, &handle->queue);         \
-     handle->name##_cb = cb;                                                   \
-     uv__handle_start(handle);                                                 \
-     return 0;                                                                 \
-@@ -40,21 +40,21 @@
-                                                                               \
-   int uv_##name##_stop(uv_##name##_t* handle) {                               \
-     if (!uv__is_active(handle)) return 0;                                     \
--    uv__queue_remove(&handle->queue);                                         \
-+    QUEUE_REMOVE(&handle->queue);                                             \
-     uv__handle_stop(handle);                                                  \
-     return 0;                                                                 \
-   }                                                                           \
-                                                                               \
-   void uv__run_##name(uv_loop_t* loop) {                                      \
-     uv_##name##_t* h;                                                         \
--    struct uv__queue queue;                                                   \
--    struct uv__queue* q;                                                      \
--    uv__queue_move(&loop->name##_handles, &queue);                            \
--    while (!uv__queue_empty(&queue)) {                                        \
--      q = uv__queue_head(&queue);                                             \
--      h = uv__queue_data(q, uv_##name##_t, queue);                            \
--      uv__queue_remove(q);                                                    \
--      uv__queue_insert_tail(&loop->name##_handles, q);                        \
-+    QUEUE queue;                                                              \
-+    QUEUE* q;                                                                 \
-+    QUEUE_MOVE(&loop->name##_handles, &queue);                                \
-+    while (!QUEUE_EMPTY(&queue)) {                                            \
-+      q = QUEUE_HEAD(&queue);                                                 \
-+      h = QUEUE_DATA(q, uv_##name##_t, queue);                                \
-+      QUEUE_REMOVE(q);                                                        \
-+      QUEUE_INSERT_TAIL(&loop->name##_handles, q);                            \
-       h->name##_cb(h);                                                        \
-     }                                                                         \
-   }                                                                           \
-diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c
-index a9468e8e19c..90a51b339de 100644
---- a/deps/uv/src/unix/loop.c
-+++ b/deps/uv/src/unix/loop.c
-@@ -50,20 +50,20 @@ int uv_loop_init(uv_loop_t* loop) {
-          sizeof(lfields->loop_metrics.metrics));
- 
-   heap_init((struct heap*) &loop->timer_heap);
--  uv__queue_init(&loop->wq);
--  uv__queue_init(&loop->idle_handles);
--  uv__queue_init(&loop->async_handles);
--  uv__queue_init(&loop->check_handles);
--  uv__queue_init(&loop->prepare_handles);
--  uv__queue_init(&loop->handle_queue);
-+  QUEUE_INIT(&loop->wq);
-+  QUEUE_INIT(&loop->idle_handles);
-+  QUEUE_INIT(&loop->async_handles);
-+  QUEUE_INIT(&loop->check_handles);
-+  QUEUE_INIT(&loop->prepare_handles);
-+  QUEUE_INIT(&loop->handle_queue);
- 
-   loop->active_handles = 0;
-   loop->active_reqs.count = 0;
-   loop->nfds = 0;
-   loop->watchers = NULL;
-   loop->nwatchers = 0;
--  uv__queue_init(&loop->pending_queue);
--  uv__queue_init(&loop->watcher_queue);
-+  QUEUE_INIT(&loop->pending_queue);
-+  QUEUE_INIT(&loop->watcher_queue);
- 
-   loop->closing_handles = NULL;
-   uv__update_time(loop);
-@@ -85,7 +85,7 @@ int uv_loop_init(uv_loop_t* loop) {
-   err = uv__process_init(loop);
-   if (err)
-     goto fail_signal_init;
--  uv__queue_init(&loop->process_handles);
-+  QUEUE_INIT(&loop->process_handles);
- 
-   err = uv_rwlock_init(&loop->cloexec_lock);
-   if (err)
-@@ -152,9 +152,9 @@ int uv_loop_fork(uv_loop_t* loop) {
-     if (w == NULL)
-       continue;
- 
--    if (w->pevents != 0 && uv__queue_empty(&w->watcher_queue)) {
-+    if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) {
-       w->events = 0; /* Force re-registration in uv__io_poll. */
--      uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
-+      QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
-     }
-   }
- 
-@@ -180,7 +180,7 @@ void uv__loop_close(uv_loop_t* loop) {
-   }
- 
-   uv_mutex_lock(&loop->wq_mutex);
--  assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
-+  assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
-   assert(!uv__has_active_reqs(loop));
-   uv_mutex_unlock(&loop->wq_mutex);
-   uv_mutex_destroy(&loop->wq_mutex);
-@@ -192,8 +192,8 @@ void uv__loop_close(uv_loop_t* loop) {
-   uv_rwlock_destroy(&loop->cloexec_lock);
- 
- #if 0
--  assert(uv__queue_empty(&loop->pending_queue));
--  assert(uv__queue_empty(&loop->watcher_queue));
-+  assert(QUEUE_EMPTY(&loop->pending_queue));
-+  assert(QUEUE_EMPTY(&loop->watcher_queue));
-   assert(loop->nfds == 0);
- #endif
- 
-diff --git a/deps/uv/src/unix/os390-syscalls.c b/deps/uv/src/unix/os390-syscalls.c
-index 7f90c270906..5861aaaa202 100644
---- a/deps/uv/src/unix/os390-syscalls.c
-+++ b/deps/uv/src/unix/os390-syscalls.c
-@@ -27,7 +27,7 @@
- #include <termios.h>
- #include <sys/msg.h>
- 
--static struct uv__queue global_epoll_queue;
-+static QUEUE global_epoll_queue;
- static uv_mutex_t global_epoll_lock;
- static uv_once_t once = UV_ONCE_INIT;
- 
-@@ -178,18 +178,18 @@ static void after_fork(void) {
- 
- 
- static void child_fork(void) {
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv_once_t child_once = UV_ONCE_INIT;
- 
-   /* reset once */
-   memcpy(&once, &child_once, sizeof(child_once));
- 
-   /* reset epoll list */
--  while (!uv__queue_empty(&global_epoll_queue)) {
-+  while (!QUEUE_EMPTY(&global_epoll_queue)) {
-     uv__os390_epoll* lst;
--    q = uv__queue_head(&global_epoll_queue);
--    uv__queue_remove(q);
--    lst = uv__queue_data(q, uv__os390_epoll, member);
-+    q = QUEUE_HEAD(&global_epoll_queue);
-+    QUEUE_REMOVE(q);
-+    lst = QUEUE_DATA(q, uv__os390_epoll, member);
-     uv__free(lst->items);
-     lst->items = NULL;
-     lst->size = 0;
-@@ -201,7 +201,7 @@ static void child_fork(void) {
- 
- 
- static void epoll_init(void) {
--  uv__queue_init(&global_epoll_queue);
-+  QUEUE_INIT(&global_epoll_queue);
-   if (uv_mutex_init(&global_epoll_lock))
-     abort();
- 
-@@ -225,7 +225,7 @@ uv__os390_epoll* epoll_create1(int flags) {
-     lst->items[lst->size - 1].revents = 0;
-     uv_once(&once, epoll_init);
-     uv_mutex_lock(&global_epoll_lock);
--    uv__queue_insert_tail(&global_epoll_queue, &lst->member);
-+    QUEUE_INSERT_TAIL(&global_epoll_queue, &lst->member);
-     uv_mutex_unlock(&global_epoll_lock);
-   }
- 
-@@ -352,14 +352,14 @@ int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events,
- 
- 
- int epoll_file_close(int fd) {
--  struct uv__queue* q;
-+  QUEUE* q;
- 
-   uv_once(&once, epoll_init);
-   uv_mutex_lock(&global_epoll_lock);
--  uv__queue_foreach(q, &global_epoll_queue) {
-+  QUEUE_FOREACH(q, &global_epoll_queue) {
-     uv__os390_epoll* lst;
- 
--    lst = uv__queue_data(q, uv__os390_epoll, member);
-+    lst = QUEUE_DATA(q, uv__os390_epoll, member);
-     if (fd < lst->size && lst->items != NULL && lst->items[fd].fd != -1)
-       lst->items[fd].fd = -1;
-   }
-@@ -371,7 +371,7 @@ int epoll_file_close(int fd) {
- void epoll_queue_close(uv__os390_epoll* lst) {
-   /* Remove epoll instance from global queue */
-   uv_mutex_lock(&global_epoll_lock);
--  uv__queue_remove(&lst->member);
-+  QUEUE_REMOVE(&lst->member);
-   uv_mutex_unlock(&global_epoll_lock);
- 
-   /* Free resources */
-diff --git a/deps/uv/src/unix/os390-syscalls.h b/deps/uv/src/unix/os390-syscalls.h
-index d5f3bcf8b1c..9f504171d85 100644
---- a/deps/uv/src/unix/os390-syscalls.h
-+++ b/deps/uv/src/unix/os390-syscalls.h
-@@ -45,7 +45,7 @@ struct epoll_event {
- };
- 
- typedef struct {
--  struct uv__queue member;
-+  QUEUE member;
-   struct pollfd* items;
-   unsigned long size;
-   int msg_queue;
-diff --git a/deps/uv/src/unix/os390.c b/deps/uv/src/unix/os390.c
-index bbd37692d1d..a87c2d77faf 100644
---- a/deps/uv/src/unix/os390.c
-+++ b/deps/uv/src/unix/os390.c
-@@ -815,7 +815,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   uv__os390_epoll* ep;
-   int have_signals;
-   int real_timeout;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__io_t* w;
-   uint64_t base;
-   int count;
-@@ -827,19 +827,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int reset_timeout;
- 
-   if (loop->nfds == 0) {
--    assert(uv__queue_empty(&loop->watcher_queue));
-+    assert(QUEUE_EMPTY(&loop->watcher_queue));
-     return;
-   }
- 
-   lfields = uv__get_internal_fields(loop);
- 
--  while (!uv__queue_empty(&loop->watcher_queue)) {
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-     uv_stream_t* stream;
- 
--    q = uv__queue_head(&loop->watcher_queue);
--    uv__queue_remove(q);
--    uv__queue_init(q);
--    w = uv__queue_data(q, uv__io_t, watcher_queue);
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
- 
-     assert(w->pevents != 0);
-     assert(w->fd >= 0);
-diff --git a/deps/uv/src/unix/pipe.c b/deps/uv/src/unix/pipe.c
-index d332f351830..ce91ac49b30 100644
---- a/deps/uv/src/unix/pipe.c
-+++ b/deps/uv/src/unix/pipe.c
-@@ -297,7 +297,7 @@ out:
-   uv__req_init(handle->loop, req, UV_CONNECT);
-   req->handle = (uv_stream_t*)handle;
-   req->cb = cb;
--  uv__queue_init(&req->queue);
-+  QUEUE_INIT(&req->queue);
- 
-   /* Force callback to run on next tick in case of error. */
-   if (err)
-diff --git a/deps/uv/src/unix/posix-poll.c b/deps/uv/src/unix/posix-poll.c
-index 2e016c2fbae..7e7de86845d 100644
---- a/deps/uv/src/unix/posix-poll.c
-+++ b/deps/uv/src/unix/posix-poll.c
-@@ -137,7 +137,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   sigset_t set;
-   uint64_t time_base;
-   uint64_t time_diff;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__io_t* w;
-   size_t i;
-   unsigned int nevents;
-@@ -149,19 +149,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int reset_timeout;
- 
-   if (loop->nfds == 0) {
--    assert(uv__queue_empty(&loop->watcher_queue));
-+    assert(QUEUE_EMPTY(&loop->watcher_queue));
-     return;
-   }
- 
-   lfields = uv__get_internal_fields(loop);
- 
-   /* Take queued watchers and add their fds to our poll fds array.  */
--  while (!uv__queue_empty(&loop->watcher_queue)) {
--    q = uv__queue_head(&loop->watcher_queue);
--    uv__queue_remove(q);
--    uv__queue_init(q);
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
- 
--    w = uv__queue_data(q, uv__io_t, watcher_queue);
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
-     assert(w->pevents != 0);
-     assert(w->fd >= 0);
-     assert(w->fd < (int) loop->nwatchers);
-diff --git a/deps/uv/src/unix/process.c b/deps/uv/src/unix/process.c
-index dd58c18d9b9..bbf367b57d3 100644
---- a/deps/uv/src/unix/process.c
-+++ b/deps/uv/src/unix/process.c
-@@ -108,17 +108,17 @@ void uv__wait_children(uv_loop_t* loop) {
-   int status;
-   int options;
-   pid_t pid;
--  struct uv__queue pending;
--  struct uv__queue* q;
--  struct uv__queue* h;
-+  QUEUE pending;
-+  QUEUE* q;
-+  QUEUE* h;
- 
--  uv__queue_init(&pending);
-+  QUEUE_INIT(&pending);
- 
-   h = &loop->process_handles;
--  q = uv__queue_head(h);
-+  q = QUEUE_HEAD(h);
-   while (q != h) {
--    process = uv__queue_data(q, uv_process_t, queue);
--    q = uv__queue_next(q);
-+    process = QUEUE_DATA(q, uv_process_t, queue);
-+    q = QUEUE_NEXT(q);
- 
- #ifndef UV_USE_SIGCHLD
-     if ((process->flags & UV_HANDLE_REAP) == 0)
-@@ -149,18 +149,18 @@ void uv__wait_children(uv_loop_t* loop) {
- 
-     assert(pid == process->pid);
-     process->status = status;
--    uv__queue_remove(&process->queue);
--    uv__queue_insert_tail(&pending, &process->queue);
-+    QUEUE_REMOVE(&process->queue);
-+    QUEUE_INSERT_TAIL(&pending, &process->queue);
-   }
- 
-   h = &pending;
--  q = uv__queue_head(h);
-+  q = QUEUE_HEAD(h);
-   while (q != h) {
--    process = uv__queue_data(q, uv_process_t, queue);
--    q = uv__queue_next(q);
-+    process = QUEUE_DATA(q, uv_process_t, queue);
-+    q = QUEUE_NEXT(q);
- 
--    uv__queue_remove(&process->queue);
--    uv__queue_init(&process->queue);
-+    QUEUE_REMOVE(&process->queue);
-+    QUEUE_INIT(&process->queue);
-     uv__handle_stop(process);
- 
-     if (process->exit_cb == NULL)
-@@ -176,7 +176,7 @@ void uv__wait_children(uv_loop_t* loop) {
- 
-     process->exit_cb(process, exit_status, term_signal);
-   }
--  assert(uv__queue_empty(&pending));
-+  assert(QUEUE_EMPTY(&pending));
- }
- 
- /*
-@@ -978,7 +978,7 @@ int uv_spawn(uv_loop_t* loop,
-                               UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS)));
- 
-   uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS);
--  uv__queue_init(&process->queue);
-+  QUEUE_INIT(&process->queue);
-   process->status = 0;
- 
-   stdio_count = options->stdio_count;
-@@ -1041,7 +1041,7 @@ int uv_spawn(uv_loop_t* loop,
- 
-     process->pid = pid;
-     process->exit_cb = options->exit_cb;
--    uv__queue_insert_tail(&loop->process_handles, &process->queue);
-+    QUEUE_INSERT_TAIL(&loop->process_handles, &process->queue);
-     uv__handle_start(process);
-   }
- 
-@@ -1103,10 +1103,10 @@ int uv_kill(int pid, int signum) {
- 
- 
- void uv__process_close(uv_process_t* handle) {
--  uv__queue_remove(&handle->queue);
-+  QUEUE_REMOVE(&handle->queue);
-   uv__handle_stop(handle);
- #ifdef UV_USE_SIGCHLD
--  if (uv__queue_empty(&handle->loop->process_handles))
-+  if (QUEUE_EMPTY(&handle->loop->process_handles))
-     uv_signal_stop(&handle->loop->child_watcher);
- #endif
- }
-diff --git a/deps/uv/src/unix/signal.c b/deps/uv/src/unix/signal.c
-index 63aba5a60e0..bb70523f561 100644
---- a/deps/uv/src/unix/signal.c
-+++ b/deps/uv/src/unix/signal.c
-@@ -291,16 +291,16 @@ int uv__signal_loop_fork(uv_loop_t* loop) {
- 
- 
- void uv__signal_loop_cleanup(uv_loop_t* loop) {
--  struct uv__queue* q;
-+  QUEUE* q;
- 
-   /* Stop all the signal watchers that are still attached to this loop. This
-    * ensures that the (shared) signal tree doesn't contain any invalid entries
-    * entries, and that signal handlers are removed when appropriate.
--   * It's safe to use uv__queue_foreach here because the handles and the handle
-+   * It's safe to use QUEUE_FOREACH here because the handles and the handle
-    * queue are not modified by uv__signal_stop().
-    */
--  uv__queue_foreach(q, &loop->handle_queue) {
--    uv_handle_t* handle = uv__queue_data(q, uv_handle_t, handle_queue);
-+  QUEUE_FOREACH(q, &loop->handle_queue) {
-+    uv_handle_t* handle = QUEUE_DATA(q, uv_handle_t, handle_queue);
- 
-     if (handle->type == UV_SIGNAL)
-       uv__signal_stop((uv_signal_t*) handle);
-diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c
-index 28c4d5463c4..03f92b5045a 100644
---- a/deps/uv/src/unix/stream.c
-+++ b/deps/uv/src/unix/stream.c
-@@ -94,8 +94,8 @@ void uv__stream_init(uv_loop_t* loop,
-   stream->accepted_fd = -1;
-   stream->queued_fds = NULL;
-   stream->delayed_error = 0;
--  uv__queue_init(&stream->write_queue);
--  uv__queue_init(&stream->write_completed_queue);
-+  QUEUE_INIT(&stream->write_queue);
-+  QUEUE_INIT(&stream->write_completed_queue);
-   stream->write_queue_size = 0;
- 
-   if (loop->emfile_fd == -1) {
-@@ -439,15 +439,15 @@ int uv__stream_open(uv_stream_t* stream, int fd, int flags) {
- 
- void uv__stream_flush_write_queue(uv_stream_t* stream, int error) {
-   uv_write_t* req;
--  struct uv__queue* q;
--  while (!uv__queue_empty(&stream->write_queue)) {
--    q = uv__queue_head(&stream->write_queue);
--    uv__queue_remove(q);
-+  QUEUE* q;
-+  while (!QUEUE_EMPTY(&stream->write_queue)) {
-+    q = QUEUE_HEAD(&stream->write_queue);
-+    QUEUE_REMOVE(q);
- 
--    req = uv__queue_data(q, uv_write_t, queue);
-+    req = QUEUE_DATA(q, uv_write_t, queue);
-     req->error = error;
- 
--    uv__queue_insert_tail(&stream->write_completed_queue, &req->queue);
-+    QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue);
-   }
- }
- 
-@@ -627,7 +627,7 @@ static void uv__drain(uv_stream_t* stream) {
-   uv_shutdown_t* req;
-   int err;
- 
--  assert(uv__queue_empty(&stream->write_queue));
-+  assert(QUEUE_EMPTY(&stream->write_queue));
-   if (!(stream->flags & UV_HANDLE_CLOSING)) {
-     uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT);
-     uv__stream_osx_interrupt_select(stream);
-@@ -714,7 +714,7 @@ static void uv__write_req_finish(uv_write_t* req) {
-   uv_stream_t* stream = req->handle;
- 
-   /* Pop the req off tcp->write_queue. */
--  uv__queue_remove(&req->queue);
-+  QUEUE_REMOVE(&req->queue);
- 
-   /* Only free when there was no error. On error, we touch up write_queue_size
-    * right before making the callback. The reason we don't do that right away
-@@ -731,7 +731,7 @@ static void uv__write_req_finish(uv_write_t* req) {
-   /* Add it to the write_completed_queue where it will have its
-    * callback called in the near future.
-    */
--  uv__queue_insert_tail(&stream->write_completed_queue, &req->queue);
-+  QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue);
-   uv__io_feed(stream->loop, &stream->io_watcher);
- }
- 
-@@ -837,7 +837,7 @@ static int uv__try_write(uv_stream_t* stream,
- }
- 
- static void uv__write(uv_stream_t* stream) {
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv_write_t* req;
-   ssize_t n;
-   int count;
-@@ -851,11 +851,11 @@ static void uv__write(uv_stream_t* stream) {
-   count = 32;
- 
-   for (;;) {
--    if (uv__queue_empty(&stream->write_queue))
-+    if (QUEUE_EMPTY(&stream->write_queue))
-       return;
- 
--    q = uv__queue_head(&stream->write_queue);
--    req = uv__queue_data(q, uv_write_t, queue);
-+    q = QUEUE_HEAD(&stream->write_queue);
-+    req = QUEUE_DATA(q, uv_write_t, queue);
-     assert(req->handle == stream);
- 
-     n = uv__try_write(stream,
-@@ -899,19 +899,19 @@ error:
- 
- static void uv__write_callbacks(uv_stream_t* stream) {
-   uv_write_t* req;
--  struct uv__queue* q;
--  struct uv__queue pq;
-+  QUEUE* q;
-+  QUEUE pq;
- 
--  if (uv__queue_empty(&stream->write_completed_queue))
-+  if (QUEUE_EMPTY(&stream->write_completed_queue))
-     return;
- 
--  uv__queue_move(&stream->write_completed_queue, &pq);
-+  QUEUE_MOVE(&stream->write_completed_queue, &pq);
- 
--  while (!uv__queue_empty(&pq)) {
-+  while (!QUEUE_EMPTY(&pq)) {
-     /* Pop a req off write_completed_queue. */
--    q = uv__queue_head(&pq);
--    req = uv__queue_data(q, uv_write_t, queue);
--    uv__queue_remove(q);
-+    q = QUEUE_HEAD(&pq);
-+    req = QUEUE_DATA(q, uv_write_t, queue);
-+    QUEUE_REMOVE(q);
-     uv__req_unregister(stream->loop, req);
- 
-     if (req->bufs != NULL) {
-@@ -1174,7 +1174,7 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) {
-   stream->shutdown_req = req;
-   stream->flags &= ~UV_HANDLE_WRITABLE;
- 
--  if (uv__queue_empty(&stream->write_queue))
-+  if (QUEUE_EMPTY(&stream->write_queue))
-     uv__io_feed(stream->loop, &stream->io_watcher);
- 
-   return 0;
-@@ -1227,7 +1227,7 @@ static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
-     uv__write_callbacks(stream);
- 
-     /* Write queue drained. */
--    if (uv__queue_empty(&stream->write_queue))
-+    if (QUEUE_EMPTY(&stream->write_queue))
-       uv__drain(stream);
-   }
- }
-@@ -1270,7 +1270,7 @@ static void uv__stream_connect(uv_stream_t* stream) {
-   stream->connect_req = NULL;
-   uv__req_unregister(stream->loop, req);
- 
--  if (error < 0 || uv__queue_empty(&stream->write_queue)) {
-+  if (error < 0 || QUEUE_EMPTY(&stream->write_queue)) {
-     uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT);
-   }
- 
-@@ -1352,7 +1352,7 @@ int uv_write2(uv_write_t* req,
-   req->handle = stream;
-   req->error = 0;
-   req->send_handle = send_handle;
--  uv__queue_init(&req->queue);
-+  QUEUE_INIT(&req->queue);
- 
-   req->bufs = req->bufsml;
-   if (nbufs > ARRAY_SIZE(req->bufsml))
-@@ -1367,7 +1367,7 @@ int uv_write2(uv_write_t* req,
-   stream->write_queue_size += uv__count_bufs(bufs, nbufs);
- 
-   /* Append the request to write_queue. */
--  uv__queue_insert_tail(&stream->write_queue, &req->queue);
-+  QUEUE_INSERT_TAIL(&stream->write_queue, &req->queue);
- 
-   /* If the queue was empty when this function began, we should attempt to
-    * do the write immediately. Otherwise start the write_watcher and wait
-diff --git a/deps/uv/src/unix/sunos.c b/deps/uv/src/unix/sunos.c
-index 2d6bae79604..75b6fbad493 100644
---- a/deps/uv/src/unix/sunos.c
-+++ b/deps/uv/src/unix/sunos.c
-@@ -148,7 +148,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   struct port_event events[1024];
-   struct port_event* pe;
-   struct timespec spec;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__io_t* w;
-   sigset_t* pset;
-   sigset_t set;
-@@ -166,16 +166,16 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int reset_timeout;
- 
-   if (loop->nfds == 0) {
--    assert(uv__queue_empty(&loop->watcher_queue));
-+    assert(QUEUE_EMPTY(&loop->watcher_queue));
-     return;
-   }
- 
--  while (!uv__queue_empty(&loop->watcher_queue)) {
--    q = uv__queue_head(&loop->watcher_queue);
--    uv__queue_remove(q);
--    uv__queue_init(q);
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
- 
--    w = uv__queue_data(q, uv__io_t, watcher_queue);
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
-     assert(w->pevents != 0);
- 
-     if (port_associate(loop->backend_fd,
-@@ -316,8 +316,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-         continue;  /* Disabled by callback. */
- 
-       /* Events Ports operates in oneshot mode, rearm timer on next run. */
--      if (w->pevents != 0 && uv__queue_empty(&w->watcher_queue))
--        uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
-+      if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue))
-+        QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
-     }
- 
-     uv__metrics_inc_events(loop, nevents);
-diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c
-index d6c848f4610..ab4e06c2f67 100644
---- a/deps/uv/src/unix/tcp.c
-+++ b/deps/uv/src/unix/tcp.c
-@@ -124,7 +124,7 @@ int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* tcp, unsigned int flags) {
-   if (domain != AF_UNSPEC) {
-     err = new_socket(tcp, domain, 0);
-     if (err) {
--      uv__queue_remove(&tcp->handle_queue);
-+      QUEUE_REMOVE(&tcp->handle_queue);
-       if (tcp->io_watcher.fd != -1)
-         uv__close(tcp->io_watcher.fd);
-       tcp->io_watcher.fd = -1;
-@@ -252,7 +252,7 @@ out:
-   uv__req_init(handle->loop, req, UV_CONNECT);
-   req->cb = cb;
-   req->handle = (uv_stream_t*) handle;
--  uv__queue_init(&req->queue);
-+  QUEUE_INIT(&req->queue);
-   handle->connect_req = req;
- 
-   uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
-diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c
-index d099bdb3b67..7a5390c1a8b 100644
---- a/deps/uv/src/unix/tty.c
-+++ b/deps/uv/src/unix/tty.c
-@@ -222,7 +222,7 @@ skip:
-     int rc = r;
-     if (newfd != -1)
-       uv__close(newfd);
--    uv__queue_remove(&tty->handle_queue);
-+    QUEUE_REMOVE(&tty->handle_queue);
-     do
-       r = fcntl(fd, F_SETFL, saved_flags);
-     while (r == -1 && errno == EINTR);
-diff --git a/deps/uv/src/unix/udp.c b/deps/uv/src/unix/udp.c
-index c2814512a5f..f556808fbae 100644
---- a/deps/uv/src/unix/udp.c
-+++ b/deps/uv/src/unix/udp.c
-@@ -62,18 +62,18 @@ void uv__udp_close(uv_udp_t* handle) {
- 
- void uv__udp_finish_close(uv_udp_t* handle) {
-   uv_udp_send_t* req;
--  struct uv__queue* q;
-+  QUEUE* q;
- 
-   assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT));
-   assert(handle->io_watcher.fd == -1);
- 
--  while (!uv__queue_empty(&handle->write_queue)) {
--    q = uv__queue_head(&handle->write_queue);
--    uv__queue_remove(q);
-+  while (!QUEUE_EMPTY(&handle->write_queue)) {
-+    q = QUEUE_HEAD(&handle->write_queue);
-+    QUEUE_REMOVE(q);
- 
--    req = uv__queue_data(q, uv_udp_send_t, queue);
-+    req = QUEUE_DATA(q, uv_udp_send_t, queue);
-     req->status = UV_ECANCELED;
--    uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
-+    QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
-   }
- 
-   uv__udp_run_completed(handle);
-@@ -90,16 +90,16 @@ void uv__udp_finish_close(uv_udp_t* handle) {
- 
- static void uv__udp_run_completed(uv_udp_t* handle) {
-   uv_udp_send_t* req;
--  struct uv__queue* q;
-+  QUEUE* q;
- 
-   assert(!(handle->flags & UV_HANDLE_UDP_PROCESSING));
-   handle->flags |= UV_HANDLE_UDP_PROCESSING;
- 
--  while (!uv__queue_empty(&handle->write_completed_queue)) {
--    q = uv__queue_head(&handle->write_completed_queue);
--    uv__queue_remove(q);
-+  while (!QUEUE_EMPTY(&handle->write_completed_queue)) {
-+    q = QUEUE_HEAD(&handle->write_completed_queue);
-+    QUEUE_REMOVE(q);
- 
--    req = uv__queue_data(q, uv_udp_send_t, queue);
-+    req = QUEUE_DATA(q, uv_udp_send_t, queue);
-     uv__req_unregister(handle->loop, req);
- 
-     handle->send_queue_size -= uv__count_bufs(req->bufs, req->nbufs);
-@@ -121,7 +121,7 @@ static void uv__udp_run_completed(uv_udp_t* handle) {
-       req->send_cb(req, req->status);
-   }
- 
--  if (uv__queue_empty(&handle->write_queue)) {
-+  if (QUEUE_EMPTY(&handle->write_queue)) {
-     /* Pending queue and completion queue empty, stop watcher. */
-     uv__io_stop(handle->loop, &handle->io_watcher, POLLOUT);
-     if (!uv__io_active(&handle->io_watcher, POLLIN))
-@@ -280,20 +280,20 @@ static void uv__udp_sendmsg(uv_udp_t* handle) {
-   uv_udp_send_t* req;
-   struct mmsghdr h[20];
-   struct mmsghdr* p;
--  struct uv__queue* q;
-+  QUEUE* q;
-   ssize_t npkts;
-   size_t pkts;
-   size_t i;
- 
--  if (uv__queue_empty(&handle->write_queue))
-+  if (QUEUE_EMPTY(&handle->write_queue))
-     return;
- 
- write_queue_drain:
--  for (pkts = 0, q = uv__queue_head(&handle->write_queue);
-+  for (pkts = 0, q = QUEUE_HEAD(&handle->write_queue);
-        pkts < ARRAY_SIZE(h) && q != &handle->write_queue;
--       ++pkts, q = uv__queue_head(q)) {
-+       ++pkts, q = QUEUE_HEAD(q)) {
-     assert(q != NULL);
--    req = uv__queue_data(q, uv_udp_send_t, queue);
-+    req = QUEUE_DATA(q, uv_udp_send_t, queue);
-     assert(req != NULL);
- 
-     p = &h[pkts];
-@@ -325,16 +325,16 @@ write_queue_drain:
-   if (npkts < 1) {
-     if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS)
-       return;
--    for (i = 0, q = uv__queue_head(&handle->write_queue);
-+    for (i = 0, q = QUEUE_HEAD(&handle->write_queue);
-          i < pkts && q != &handle->write_queue;
--         ++i, q = uv__queue_head(&handle->write_queue)) {
-+         ++i, q = QUEUE_HEAD(&handle->write_queue)) {
-       assert(q != NULL);
--      req = uv__queue_data(q, uv_udp_send_t, queue);
-+      req = QUEUE_DATA(q, uv_udp_send_t, queue);
-       assert(req != NULL);
- 
-       req->status = UV__ERR(errno);
--      uv__queue_remove(&req->queue);
--      uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
-+      QUEUE_REMOVE(&req->queue);
-+      QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
-     }
-     uv__io_feed(handle->loop, &handle->io_watcher);
-     return;
-@@ -343,11 +343,11 @@ write_queue_drain:
-   /* Safety: npkts known to be >0 below. Hence cast from ssize_t
-    * to size_t safe.
-    */
--  for (i = 0, q = uv__queue_head(&handle->write_queue);
-+  for (i = 0, q = QUEUE_HEAD(&handle->write_queue);
-        i < (size_t)npkts && q != &handle->write_queue;
--       ++i, q = uv__queue_head(&handle->write_queue)) {
-+       ++i, q = QUEUE_HEAD(&handle->write_queue)) {
-     assert(q != NULL);
--    req = uv__queue_data(q, uv_udp_send_t, queue);
-+    req = QUEUE_DATA(q, uv_udp_send_t, queue);
-     assert(req != NULL);
- 
-     req->status = req->bufs[0].len;
-@@ -357,25 +357,25 @@ write_queue_drain:
-      * why we don't handle partial writes. Just pop the request
-      * off the write queue and onto the completed queue, done.
-      */
--    uv__queue_remove(&req->queue);
--    uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
-+    QUEUE_REMOVE(&req->queue);
-+    QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
-   }
- 
-   /* couldn't batch everything, continue sending (jump to avoid stack growth) */
--  if (!uv__queue_empty(&handle->write_queue))
-+  if (!QUEUE_EMPTY(&handle->write_queue))
-     goto write_queue_drain;
-   uv__io_feed(handle->loop, &handle->io_watcher);
- #else  /* __linux__ || ____FreeBSD__ */
-   uv_udp_send_t* req;
-   struct msghdr h;
--  struct uv__queue* q;
-+  QUEUE* q;
-   ssize_t size;
- 
--  while (!uv__queue_empty(&handle->write_queue)) {
--    q = uv__queue_head(&handle->write_queue);
-+  while (!QUEUE_EMPTY(&handle->write_queue)) {
-+    q = QUEUE_HEAD(&handle->write_queue);
-     assert(q != NULL);
- 
--    req = uv__queue_data(q, uv_udp_send_t, queue);
-+    req = QUEUE_DATA(q, uv_udp_send_t, queue);
-     assert(req != NULL);
- 
-     memset(&h, 0, sizeof h);
-@@ -414,8 +414,8 @@ write_queue_drain:
-      * why we don't handle partial writes. Just pop the request
-      * off the write queue and onto the completed queue, done.
-      */
--    uv__queue_remove(&req->queue);
--    uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
-+    QUEUE_REMOVE(&req->queue);
-+    QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
-     uv__io_feed(handle->loop, &handle->io_watcher);
-   }
- #endif  /* __linux__ || ____FreeBSD__ */
-@@ -729,7 +729,7 @@ int uv__udp_send(uv_udp_send_t* req,
-   memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0]));
-   handle->send_queue_size += uv__count_bufs(req->bufs, req->nbufs);
-   handle->send_queue_count++;
--  uv__queue_insert_tail(&handle->write_queue, &req->queue);
-+  QUEUE_INSERT_TAIL(&handle->write_queue, &req->queue);
-   uv__handle_start(handle);
- 
-   if (empty_queue && !(handle->flags & UV_HANDLE_UDP_PROCESSING)) {
-@@ -739,7 +739,7 @@ int uv__udp_send(uv_udp_send_t* req,
-      * away. In such cases the `io_watcher` has to be queued for asynchronous
-      * write.
-      */
--    if (!uv__queue_empty(&handle->write_queue))
-+    if (!QUEUE_EMPTY(&handle->write_queue))
-       uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
-   } else {
-     uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
-@@ -1007,8 +1007,8 @@ int uv__udp_init_ex(uv_loop_t* loop,
-   handle->send_queue_size = 0;
-   handle->send_queue_count = 0;
-   uv__io_init(&handle->io_watcher, uv__udp_io, fd);
--  uv__queue_init(&handle->write_queue);
--  uv__queue_init(&handle->write_completed_queue);
-+  QUEUE_INIT(&handle->write_queue);
-+  QUEUE_INIT(&handle->write_completed_queue);
- 
-   return 0;
- }
-diff --git a/deps/uv/src/uv-common.c b/deps/uv/src/uv-common.c
-index 916f3f4e006..cec771fab21 100644
---- a/deps/uv/src/uv-common.c
-+++ b/deps/uv/src/uv-common.c
-@@ -533,17 +533,17 @@ int uv_udp_recv_stop(uv_udp_t* handle) {
- 
- 
- void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
--  struct uv__queue queue;
--  struct uv__queue* q;
-+  QUEUE queue;
-+  QUEUE* q;
-   uv_handle_t* h;
- 
--  uv__queue_move(&loop->handle_queue, &queue);
--  while (!uv__queue_empty(&queue)) {
--    q = uv__queue_head(&queue);
--    h = uv__queue_data(q, uv_handle_t, handle_queue);
-+  QUEUE_MOVE(&loop->handle_queue, &queue);
-+  while (!QUEUE_EMPTY(&queue)) {
-+    q = QUEUE_HEAD(&queue);
-+    h = QUEUE_DATA(q, uv_handle_t, handle_queue);
- 
--    uv__queue_remove(q);
--    uv__queue_insert_tail(&loop->handle_queue, q);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INSERT_TAIL(&loop->handle_queue, q);
- 
-     if (h->flags & UV_HANDLE_INTERNAL) continue;
-     walk_cb(h, arg);
-@@ -553,14 +553,14 @@ void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
- 
- static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) {
-   const char* type;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv_handle_t* h;
- 
-   if (loop == NULL)
-     loop = uv_default_loop();
- 
--  uv__queue_foreach(q, &loop->handle_queue) {
--    h = uv__queue_data(q, uv_handle_t, handle_queue);
-+  QUEUE_FOREACH(q, &loop->handle_queue) {
-+    h = QUEUE_DATA(q, uv_handle_t, handle_queue);
- 
-     if (only_active && !uv__is_active(h))
-       continue;
-@@ -846,7 +846,7 @@ uv_loop_t* uv_loop_new(void) {
- 
- 
- int uv_loop_close(uv_loop_t* loop) {
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv_handle_t* h;
- #ifndef NDEBUG
-   void* saved_data;
-@@ -855,8 +855,8 @@ int uv_loop_close(uv_loop_t* loop) {
-   if (uv__has_active_reqs(loop))
-     return UV_EBUSY;
- 
--  uv__queue_foreach(q, &loop->handle_queue) {
--    h = uv__queue_data(q, uv_handle_t, handle_queue);
-+  QUEUE_FOREACH(q, &loop->handle_queue) {
-+    h = QUEUE_DATA(q, uv_handle_t, handle_queue);
-     if (!(h->flags & UV_HANDLE_INTERNAL))
-       return UV_EBUSY;
-   }
-diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
-index cd57e5a3515..decde5362c8 100644
---- a/deps/uv/src/uv-common.h
-+++ b/deps/uv/src/uv-common.h
-@@ -323,7 +323,7 @@ void uv__threadpool_cleanup(void);
-     (h)->loop = (loop_);                                                      \
-     (h)->type = (type_);                                                      \
-     (h)->flags = UV_HANDLE_REF;  /* Ref the loop when active. */              \
--    uv__queue_insert_tail(&(loop_)->handle_queue, &(h)->handle_queue);        \
-+    QUEUE_INSERT_TAIL(&(loop_)->handle_queue, &(h)->handle_queue);            \
-     uv__handle_platform_init(h);                                              \
-   }                                                                           \
-   while (0)
-@@ -415,7 +415,6 @@ struct uv__iou {
-   size_t sqelen;
-   int ringfd;
-   uint32_t in_flight;
--  uint32_t flags;
- };
- #endif  /* __linux__ */
- 
-diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
-index e9885a0f1ff..9a3be58849a 100644
---- a/deps/uv/src/win/core.c
-+++ b/deps/uv/src/win/core.c
-@@ -255,8 +255,8 @@ int uv_loop_init(uv_loop_t* loop) {
-   loop->time = 0;
-   uv_update_time(loop);
- 
--  uv__queue_init(&loop->wq);
--  uv__queue_init(&loop->handle_queue);
-+  QUEUE_INIT(&loop->wq);
-+  QUEUE_INIT(&loop->handle_queue);
-   loop->active_reqs.count = 0;
-   loop->active_handles = 0;
- 
-@@ -358,7 +358,7 @@ void uv__loop_close(uv_loop_t* loop) {
-   }
- 
-   uv_mutex_lock(&loop->wq_mutex);
--  assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
-+  assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
-   assert(!uv__has_active_reqs(loop));
-   uv_mutex_unlock(&loop->wq_mutex);
-   uv_mutex_destroy(&loop->wq_mutex);
-diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c
-index fc209c54f47..deb9438d689 100644
---- a/deps/uv/src/win/fs.c
-+++ b/deps/uv/src/win/fs.c
-@@ -144,97 +144,26 @@ void uv__fs_init(void) {
- }
- 
- 
--static int32_t fs__decode_wtf8_char(const char** input) {
--  uint32_t code_point;
--  uint8_t b1;
--  uint8_t b2;
--  uint8_t b3;
--  uint8_t b4;
--
--  b1 = **input;
--  if (b1 <= 0x7F)
--    return b1; /* ASCII code point */
--  if (b1 < 0xC2)
--    return -1; /* invalid: continuation byte */
--  code_point = b1;
--
--  b2 = *++*input;
--  if ((b2 & 0xC0) != 0x80)
--    return -1; /* invalid: not a continuation byte */
--  code_point = (code_point << 6) | (b2 & 0x3F);
--  if (b1 <= 0xDF)
--    return 0x7FF & code_point; /* two-byte character */
--
--  b3 = *++*input;
--  if ((b3 & 0xC0) != 0x80)
--    return -1; /* invalid: not a continuation byte */
--  code_point = (code_point << 6) | (b3 & 0x3F);
--  if (b1 <= 0xEF)
--    return 0xFFFF & code_point; /* three-byte character */
--
--  b4 = *++*input;
--  if ((b4 & 0xC0) != 0x80)
--    return -1; /* invalid: not a continuation byte */
--  code_point = (code_point << 6) | (b4 & 0x3F);
--  if (b1 <= 0xF4)
--    if (code_point <= 0x10FFFF)
--      return code_point; /* four-byte character */
--
--  /* code point too large */
--  return -1;
--}
--
--
--static ssize_t fs__get_length_wtf8(const char* source_ptr) {
--  size_t w_target_len = 0;
--  int32_t code_point;
--
--  do {
--    code_point = fs__decode_wtf8_char(&source_ptr);
--    if (code_point < 0)
--      return -1;
--    if (code_point > 0xFFFF)
--      w_target_len++;
--    w_target_len++;
--  } while (*source_ptr++);
--  return w_target_len;
--}
--
--
--static void fs__wtf8_to_wide(const char* source_ptr, WCHAR* w_target) {
--  int32_t code_point;
--
--  do {
--    code_point = fs__decode_wtf8_char(&source_ptr);
--    /* fs__get_length_wtf8 should have been called and checked first. */
--    assert(code_point >= 0);
--    if (code_point > 0x10000) {
--      assert(code_point < 0x10FFFF);
--      *w_target++ = (((code_point - 0x10000) >> 10) + 0xD800);
--      *w_target++ = ((code_point - 0x10000) & 0x3FF) + 0xDC00;
--    } else {
--      *w_target++ = code_point;
--    }
--  } while (*source_ptr++);
--}
--
--
- INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
-     const char* new_path, const int copy_path) {
--  WCHAR* buf;
--  WCHAR* pos;
--  size_t buf_sz = 0;
--  size_t path_len = 0;
--  ssize_t pathw_len = 0;
--  ssize_t new_pathw_len = 0;
-+  char* buf;
-+  char* pos;
-+  ssize_t buf_sz = 0, path_len = 0, pathw_len = 0, new_pathw_len = 0;
- 
-   /* new_path can only be set if path is also set. */
-   assert(new_path == NULL || path != NULL);
- 
-   if (path != NULL) {
--    pathw_len = fs__get_length_wtf8(path);
--    if (pathw_len < 0)
--      return ERROR_INVALID_NAME;
-+    pathw_len = MultiByteToWideChar(CP_UTF8,
-+                                    0,
-+                                    path,
-+                                    -1,
-+                                    NULL,
-+                                    0);
-+    if (pathw_len == 0) {
-+      return GetLastError();
-+    }
-+
-     buf_sz += pathw_len * sizeof(WCHAR);
-   }
- 
-@@ -244,9 +173,16 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
-   }
- 
-   if (new_path != NULL) {
--    new_pathw_len = fs__get_length_wtf8(new_path);
--    if (new_pathw_len < 0)
--      return ERROR_INVALID_NAME;
-+    new_pathw_len = MultiByteToWideChar(CP_UTF8,
-+                                        0,
-+                                        new_path,
-+                                        -1,
-+                                        NULL,
-+                                        0);
-+    if (new_pathw_len == 0) {
-+      return GetLastError();
-+    }
-+
-     buf_sz += new_pathw_len * sizeof(WCHAR);
-   }
- 
-@@ -258,7 +194,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
-     return 0;
-   }
- 
--  buf = uv__malloc(buf_sz);
-+  buf = (char*) uv__malloc(buf_sz);
-   if (buf == NULL) {
-     return ERROR_OUTOFMEMORY;
-   }
-@@ -266,17 +202,29 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
-   pos = buf;
- 
-   if (path != NULL) {
--    fs__wtf8_to_wide(path, pos);
--    req->file.pathw = pos;
--    pos += pathw_len;
-+    DWORD r = MultiByteToWideChar(CP_UTF8,
-+                                  0,
-+                                  path,
-+                                  -1,
-+                                  (WCHAR*) pos,
-+                                  pathw_len);
-+    assert(r == (DWORD) pathw_len);
-+    req->file.pathw = (WCHAR*) pos;
-+    pos += r * sizeof(WCHAR);
-   } else {
-     req->file.pathw = NULL;
-   }
- 
-   if (new_path != NULL) {
--    fs__wtf8_to_wide(new_path, pos);
--    req->fs.info.new_pathw = pos;
--    pos += new_pathw_len;
-+    DWORD r = MultiByteToWideChar(CP_UTF8,
-+                                  0,
-+                                  new_path,
-+                                  -1,
-+                                  (WCHAR*) pos,
-+                                  new_pathw_len);
-+    assert(r == (DWORD) new_pathw_len);
-+    req->fs.info.new_pathw = (WCHAR*) pos;
-+    pos += r * sizeof(WCHAR);
-   } else {
-     req->fs.info.new_pathw = NULL;
-   }
-@@ -284,8 +232,8 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
-   req->path = path;
-   if (path != NULL && copy_path) {
-     memcpy(pos, path, path_len);
--    assert(path_len == buf_sz - (pos - buf) * sizeof(WCHAR));
--    req->path = (char*) pos;
-+    assert(path_len == buf_sz - (pos - buf));
-+    req->path = pos;
-   }
- 
-   req->flags |= UV_FS_FREE_PATHS;
-@@ -311,115 +259,57 @@ INLINE static void uv__fs_req_init(uv_loop_t* loop, uv_fs_t* req,
- }
- 
- 
--static int32_t fs__get_surrogate_value(const WCHAR* w_source_ptr,
--                                       size_t w_source_len) {
--  WCHAR u;
--  WCHAR next;
--
--  u = w_source_ptr[0];
--  if (u >= 0xD800 && u <= 0xDBFF && w_source_len > 1) {
--    next = w_source_ptr[1];
--    if (next >= 0xDC00 && next <= 0xDFFF)
--      return 0x10000 + ((u - 0xD800) << 10) + (next - 0xDC00);
--  }
--  return u;
--}
--
--
--static size_t fs__get_length_wide(const WCHAR* w_source_ptr,
--                                  size_t w_source_len) {
--  size_t target_len;
--  int32_t code_point;
-+static int fs__wide_to_utf8(WCHAR* w_source_ptr,
-+                               DWORD w_source_len,
-+                               char** target_ptr,
-+                               uint64_t* target_len_ptr) {
-+  int r;
-+  int target_len;
-+  char* target;
-+  target_len = WideCharToMultiByte(CP_UTF8,
-+                                   0,
-+                                   w_source_ptr,
-+                                   w_source_len,
-+                                   NULL,
-+                                   0,
-+                                   NULL,
-+                                   NULL);
- 
--  target_len = 0;
--  for (; w_source_len; w_source_len--, w_source_ptr++) {
--    code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
--    /* Can be invalid UTF-8 but must be valid WTF-8. */
--    assert(code_point >= 0);
--    if (code_point < 0x80)
--      target_len += 1;
--    else if (code_point < 0x800)
--      target_len += 2;
--    else if (code_point < 0x10000)
--      target_len += 3;
--    else {
--      target_len += 4;
--      w_source_ptr++;
--      w_source_len--;
--    }
-+  if (target_len == 0) {
-+    return -1;
-   }
--  return target_len;
--}
- 
--
--static int fs__wide_to_wtf8(WCHAR* w_source_ptr,
--                            size_t w_source_len,
--                            char** target_ptr,
--                            size_t* target_len_ptr) {
--  size_t target_len;
--  char* target;
--  int32_t code_point;
--
--  /* If *target_ptr is provided, then *target_len_ptr must be its length
--   * (excluding space for null), otherwise we will compute the target_len_ptr
--   * length and may return a new allocation in *target_ptr if target_ptr is
--   * provided. */
--  if (target_ptr == NULL || *target_ptr == NULL) {
--    target_len = fs__get_length_wide(w_source_ptr, w_source_len);
--    if (target_len_ptr != NULL)
--      *target_len_ptr = target_len;
--  } else {
--    target_len = *target_len_ptr;
-+  if (target_len_ptr != NULL) {
-+    *target_len_ptr = target_len;
-   }
- 
--  if (target_ptr == NULL)
-+  if (target_ptr == NULL) {
-     return 0;
--
--  if (*target_ptr == NULL) {
--    target = uv__malloc(target_len + 1);
--    if (target == NULL) {
--      SetLastError(ERROR_OUTOFMEMORY);
--      return -1;
--    }
--    *target_ptr = target;
--  } else {
--    target = *target_ptr;
--  }
--
--  for (; w_source_len; w_source_len--, w_source_ptr++) {
--    code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
--    /* Can be invalid UTF-8 but must be valid WTF-8. */
--    assert(code_point >= 0);
--
--    if (code_point < 0x80) {
--      *target++ = code_point;
--    } else if (code_point < 0x800) {
--      *target++ = 0xC0 | (code_point >> 6);
--      *target++ = 0x80 | (code_point & 0x3F);
--    } else if (code_point < 0x10000) {
--      *target++ = 0xE0 | (code_point >> 12);
--      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
--      *target++ = 0x80 | (code_point & 0x3F);
--    } else {
--      *target++ = 0xF0 | (code_point >> 18);
--      *target++ = 0x80 | ((code_point >> 12) & 0x3F);
--      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
--      *target++ = 0x80 | (code_point & 0x3F);
--      w_source_ptr++;
--      w_source_len--;
--    }
-   }
--  assert((size_t) (target - *target_ptr) == target_len);
- 
--  *target++ = '\0';
-+  target = uv__malloc(target_len + 1);
-+  if (target == NULL) {
-+    SetLastError(ERROR_OUTOFMEMORY);
-+    return -1;
-+  }
- 
-+  r = WideCharToMultiByte(CP_UTF8,
-+                          0,
-+                          w_source_ptr,
-+                          w_source_len,
-+                          target,
-+                          target_len,
-+                          NULL,
-+                          NULL);
-+  assert(r == target_len);
-+  target[target_len] = '\0';
-+  *target_ptr = target;
-   return 0;
- }
- 
- 
--INLINE static int fs__readlink_handle(HANDLE handle,
--                                      char** target_ptr,
--                                      size_t* target_len_ptr) {
-+INLINE static int fs__readlink_handle(HANDLE handle, char** target_ptr,
-+    uint64_t* target_len_ptr) {
-   char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
-   REPARSE_DATA_BUFFER* reparse_data = (REPARSE_DATA_BUFFER*) buffer;
-   WCHAR* w_target;
-@@ -549,8 +439,7 @@ INLINE static int fs__readlink_handle(HANDLE handle,
-     return -1;
-   }
- 
--  assert(target_ptr == NULL || *target_ptr == NULL);
--  return fs__wide_to_wtf8(w_target, w_target_len, target_ptr, target_len_ptr);
-+  return fs__wide_to_utf8(w_target, w_target_len, target_ptr, target_len_ptr);
- }
- 
- 
-@@ -1540,8 +1429,7 @@ void fs__scandir(uv_fs_t* req) {
-       uv__dirent_t* dirent;
- 
-       size_t wchar_len;
--      size_t wtf8_len;
--      char* wtf8;
-+      size_t utf8_len;
- 
-       /* Obtain a pointer to the current directory entry. */
-       position += next_entry_offset;
-@@ -1568,8 +1456,11 @@ void fs__scandir(uv_fs_t* req) {
-           info->FileName[1] == L'.')
-         continue;
- 
--      /* Compute the space required to store the filename as WTF-8. */
--      wtf8_len = fs__get_length_wide(&info->FileName[0], wchar_len);
-+      /* Compute the space required to store the filename as UTF-8. */
-+      utf8_len = WideCharToMultiByte(
-+          CP_UTF8, 0, &info->FileName[0], wchar_len, NULL, 0, NULL, NULL);
-+      if (utf8_len == 0)
-+        goto win32_error;
- 
-       /* Resize the dirent array if needed. */
-       if (dirents_used >= dirents_size) {
-@@ -1589,17 +1480,26 @@ void fs__scandir(uv_fs_t* req) {
-        * includes room for the first character of the filename, but `utf8_len`
-        * doesn't count the NULL terminator at this point.
-        */
--      dirent = uv__malloc(sizeof *dirent + wtf8_len);
-+      dirent = uv__malloc(sizeof *dirent + utf8_len);
-       if (dirent == NULL)
-         goto out_of_memory_error;
- 
-       dirents[dirents_used++] = dirent;
- 
-       /* Convert file name to UTF-8. */
--      wtf8 = &dirent->d_name[0];
--      if (fs__wide_to_wtf8(&info->FileName[0], wchar_len, &wtf8, &wtf8_len) == -1)
-+      if (WideCharToMultiByte(CP_UTF8,
-+                              0,
-+                              &info->FileName[0],
-+                              wchar_len,
-+                              &dirent->d_name[0],
-+                              utf8_len,
-+                              NULL,
-+                              NULL) == 0)
-         goto win32_error;
- 
-+      /* Add a null terminator to the filename. */
-+      dirent->d_name[utf8_len] = '\0';
-+
-       /* Fill out the type field. */
-       if (info->FileAttributes & FILE_ATTRIBUTE_DEVICE)
-         dirent->d_type = UV__DT_CHAR;
-@@ -1808,7 +1708,6 @@ void fs__closedir(uv_fs_t* req) {
- 
- INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
-     int do_lstat) {
--  size_t target_length = 0;
-   FILE_FS_DEVICE_INFORMATION device_info;
-   FILE_ALL_INFORMATION file_info;
-   FILE_FS_VOLUME_INFORMATION volume_info;
-@@ -1904,10 +1803,9 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
-      * to be treated as a regular file. The higher level lstat function will
-      * detect this failure and retry without do_lstat if appropriate.
-      */
--    if (fs__readlink_handle(handle, NULL, &target_length) != 0)
-+    if (fs__readlink_handle(handle, NULL, &statbuf->st_size) != 0)
-       return -1;
-     statbuf->st_mode |= S_IFLNK;
--    statbuf->st_size = target_length;
-   }
- 
-   if (statbuf->st_mode == 0) {
-@@ -2763,7 +2661,6 @@ static void fs__readlink(uv_fs_t* req) {
-     return;
-   }
- 
--  assert(req->ptr == NULL);
-   if (fs__readlink_handle(handle, (char**) &req->ptr, NULL) != 0) {
-     DWORD error = GetLastError();
-     SET_REQ_WIN32_ERROR(req, error);
-@@ -2823,8 +2720,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
-     return -1;
-   }
- 
--  assert(*realpath_ptr == NULL);
--  r = fs__wide_to_wtf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
-+  r = fs__wide_to_utf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
-   uv__free(w_realpath_buf);
-   return r;
- }
-@@ -2844,7 +2740,6 @@ static void fs__realpath(uv_fs_t* req) {
-     return;
-   }
- 
--  assert(req->ptr == NULL);
-   if (fs__realpath_handle(handle, (char**) &req->ptr) == -1) {
-     CloseHandle(handle);
-     SET_REQ_WIN32_ERROR(req, GetLastError());
-diff --git a/deps/uv/src/win/handle-inl.h b/deps/uv/src/win/handle-inl.h
-index 4722e85790a..5c843c241ef 100644
---- a/deps/uv/src/win/handle-inl.h
-+++ b/deps/uv/src/win/handle-inl.h
-@@ -75,7 +75,7 @@
- 
- #define uv__handle_close(handle)                                        \
-   do {                                                                  \
--    uv__queue_remove(&(handle)->handle_queue);                          \
-+    QUEUE_REMOVE(&(handle)->handle_queue);                              \
-     uv__active_handle_rm((uv_handle_t*) (handle));                      \
-                                                                         \
-     (handle)->flags |= UV_HANDLE_CLOSED;                                \
-diff --git a/deps/uv/src/win/pipe.c b/deps/uv/src/win/pipe.c
-index f0cac382256..5e4276387ac 100644
---- a/deps/uv/src/win/pipe.c
-+++ b/deps/uv/src/win/pipe.c
-@@ -55,7 +55,7 @@ static const int pipe_prefix_len = sizeof(pipe_prefix) - 1;
- typedef struct {
-   uv__ipc_socket_xfer_type_t xfer_type;
-   uv__ipc_socket_xfer_info_t xfer_info;
--  struct uv__queue member;
-+  QUEUE member;
- } uv__ipc_xfer_queue_item_t;
- 
- /* IPC frame header flags. */
-@@ -111,7 +111,7 @@ int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) {
-   handle->name = NULL;
-   handle->pipe.conn.ipc_remote_pid = 0;
-   handle->pipe.conn.ipc_data_frame.payload_remaining = 0;
--  uv__queue_init(&handle->pipe.conn.ipc_xfer_queue);
-+  QUEUE_INIT(&handle->pipe.conn.ipc_xfer_queue);
-   handle->pipe.conn.ipc_xfer_queue_length = 0;
-   handle->ipc = ipc;
-   handle->pipe.conn.non_overlapped_writes_tail = NULL;
-@@ -637,13 +637,13 @@ void uv__pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) {
- 
-   if (handle->flags & UV_HANDLE_CONNECTION) {
-     /* Free pending sockets */
--    while (!uv__queue_empty(&handle->pipe.conn.ipc_xfer_queue)) {
--      struct uv__queue* q;
-+    while (!QUEUE_EMPTY(&handle->pipe.conn.ipc_xfer_queue)) {
-+      QUEUE* q;
-       SOCKET socket;
- 
--      q = uv__queue_head(&handle->pipe.conn.ipc_xfer_queue);
--      uv__queue_remove(q);
--      xfer_queue_item = uv__queue_data(q, uv__ipc_xfer_queue_item_t, member);
-+      q = QUEUE_HEAD(&handle->pipe.conn.ipc_xfer_queue);
-+      QUEUE_REMOVE(q);
-+      xfer_queue_item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member);
- 
-       /* Materialize socket and close it */
-       socket = WSASocketW(FROM_PROTOCOL_INFO,
-@@ -1124,20 +1124,20 @@ int uv__pipe_accept(uv_pipe_t* server, uv_stream_t* client) {
-   uv_loop_t* loop = server->loop;
-   uv_pipe_t* pipe_client;
-   uv_pipe_accept_t* req;
--  struct uv__queue* q;
-+  QUEUE* q;
-   uv__ipc_xfer_queue_item_t* item;
-   int err;
- 
-   if (server->ipc) {
--    if (uv__queue_empty(&server->pipe.conn.ipc_xfer_queue)) {
-+    if (QUEUE_EMPTY(&server->pipe.conn.ipc_xfer_queue)) {
-       /* No valid pending sockets. */
-       return WSAEWOULDBLOCK;
-     }
- 
--    q = uv__queue_head(&server->pipe.conn.ipc_xfer_queue);
--    uv__queue_remove(q);
-+    q = QUEUE_HEAD(&server->pipe.conn.ipc_xfer_queue);
-+    QUEUE_REMOVE(q);
-     server->pipe.conn.ipc_xfer_queue_length--;
--    item = uv__queue_data(q, uv__ipc_xfer_queue_item_t, member);
-+    item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member);
- 
-     err = uv__tcp_xfer_import(
-         (uv_tcp_t*) client, item->xfer_type, &item->xfer_info);
-@@ -1891,7 +1891,7 @@ static void uv__pipe_queue_ipc_xfer_info(
-   item->xfer_type = xfer_type;
-   item->xfer_info = *xfer_info;
- 
--  uv__queue_insert_tail(&handle->pipe.conn.ipc_xfer_queue, &item->member);
-+  QUEUE_INSERT_TAIL(&handle->pipe.conn.ipc_xfer_queue, &item->member);
-   handle->pipe.conn.ipc_xfer_queue_length++;
- }
- 
-diff --git a/deps/uv/src/win/tcp.c b/deps/uv/src/win/tcp.c
-index 187f36e2a61..6b282e0b501 100644
---- a/deps/uv/src/win/tcp.c
-+++ b/deps/uv/src/win/tcp.c
-@@ -175,14 +175,14 @@ int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) {
-     sock = socket(domain, SOCK_STREAM, 0);
-     if (sock == INVALID_SOCKET) {
-       err = WSAGetLastError();
--      uv__queue_remove(&handle->handle_queue);
-+      QUEUE_REMOVE(&handle->handle_queue);
-       return uv_translate_sys_error(err);
-     }
- 
-     err = uv__tcp_set_socket(handle->loop, handle, sock, domain, 0);
-     if (err) {
-       closesocket(sock);
--      uv__queue_remove(&handle->handle_queue);
-+      QUEUE_REMOVE(&handle->handle_queue);
-       return uv_translate_sys_error(err);
-     }
- 
-diff --git a/deps/uv/src/win/udp.c b/deps/uv/src/win/udp.c
-index eab53842d4f..8a982d1907d 100644
---- a/deps/uv/src/win/udp.c
-+++ b/deps/uv/src/win/udp.c
-@@ -146,14 +146,14 @@ int uv__udp_init_ex(uv_loop_t* loop,
-     sock = socket(domain, SOCK_DGRAM, 0);
-     if (sock == INVALID_SOCKET) {
-       err = WSAGetLastError();
--      uv__queue_remove(&handle->handle_queue);
-+      QUEUE_REMOVE(&handle->handle_queue);
-       return uv_translate_sys_error(err);
-     }
- 
-     err = uv__udp_set_socket(handle->loop, handle, sock, domain);
-     if (err) {
-       closesocket(sock);
--      uv__queue_remove(&handle->handle_queue);
-+      QUEUE_REMOVE(&handle->handle_queue);
-       return uv_translate_sys_error(err);
-     }
-   }
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-deps-disable-io_uring-support-in-libuv.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-deps-disable-io_uring-support-in-libuv.patch
new file mode 100644
index 0000000..f11cd08
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-deps-disable-io_uring-support-in-libuv.patch
@@ -0,0 +1,35 @@
+From 9838be9c710ab4249df86726fa390232a3b6a6e7 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Fri, 1 Mar 2024 15:46:11 +0800
+Subject: [PATCH] deps: disable io_uring support in libuv
+
+Refer [1], Pseudo fails to intercept some of the syscalls when io_uring
+enabled. Refer [2], always disable io_uring support in libuv to fix
+issue in [1].
+
+[1] https://git.openembedded.org/meta-openembedded/commit/?id=d08453978c31ee41d28206c6ff198d7d9d701d88
+[2] https://github.com/nodejs/node/commit/686da19abb
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ deps/uv/src/unix/linux.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
+index 0c997185..7508409d 100644
+--- a/deps/uv/src/unix/linux.c
++++ b/deps/uv/src/unix/linux.c
+@@ -433,7 +433,7 @@ static int uv__use_io_uring(void) {
+   if (use == 0) {
+     /* Disable io_uring by default due to CVE-2024-22017. */
+     val = getenv("UV_USE_IO_URING");
+-    use = val != NULL && atoi(val) ? 1 : -1;
++    use = 0;
+     atomic_store_explicit(&use_io_uring, use, memory_order_relaxed);
+   }
+ 
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch
deleted file mode 100644
index 77cd53b..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch
+++ /dev/null
@@ -1,1803 +0,0 @@
-From 6d2ef4c8ba2304ee4941a6719b3ad9bd63e415a9 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <martin.jansa@gmail.com>
-Date: Wed, 18 Oct 2023 21:09:44 +0200
-Subject: [PATCH] Revert io_uring changes from libuv-1.45.0
-
-This reverts https://github.com/libuv/libuv/pull/3952/commits/26c79a942b92573a1388c0ee8a6ad4397f009318
-
-Included in nodejs-20.3.0 with the libuv upgrade to 1.45.0 in:
-https://github.com/nodejs/node/commit/bfcb3d1d9a876f399013d326bd65804f9eda77e4
-
-Reverted libuv commits:
-Revert "linux: fix WRITEV with lots of bufs using io_uring (#4004)"
-This reverts commit ef6a9a624df0a00687037474025a3608472f722a.
-Revert "linux: work around EOWNERDEAD io_uring kernel bug (#4002)"
-This reverts commit d23a20f62cc50b9fd7694992263f1d296d8f5cb4.
-Revert "unix: handle CQ overflow in iou ring (#3991)"
-This reverts commit 30fc896cc1b5822e9f1eb462587fe4b368a6215c.
-Revert "unix: constrained_memory should return UINT64_MAX (#3753)"
-This reverts commit 6ad347fae4520f39520d34bd7c7f5ddafab13a69.
-Revert "linux: use io_uring to batch epoll_ctl calls (#3979)"
-This reverts commit 6e073ef5daf93b708a654008959b823b58029e88.
-Revert "linux: fix logic bug in sqe ring space check (#3980)"
-This reverts commit f27208224084fc972b9d2802486d97ef31b51a39.
-Revert "src: fix events/events_waiting metrics counter (#3957)"
-This reverts commit e02642cf3b768b2c58a41f97fa38507e032ae415.
-Revert "linux: remove bug workaround for obsolete kernels (#3965)"
-This reverts commit 1c935a34454167b23f8eef7f0f63d7119f0de747.
-Revert "linux: add IORING_OP_CLOSE support (#3964)"
-This reverts commit dfae365f844e127621128a76bce7165e3f99a8d9.
-Revert "linux: add IORING_OP_OPENAT support (#3963)"
-This reverts commit 5ca5e475bb1711e65323ef1594a31818e5a1a9eb.
-Revert "linux: fix academic valgrind warning (#3960)"
-This reverts commit a7ff759ca1deacb2e0e6ae3c2d3dce91cc637dfe.
-Revert "linux: introduce io_uring support (#3952)"
-This reverts commit d2c31f429b87b476a7f1344d145dad4752a406d4.
-
-Dropped deps/uv/docs deps/uv/test changes as these dirs aren't included
-in nodejs tarballs.
-
-Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
----
-Upstream-Status: Inappropriate [OE specific]
-
- deps/uv/docs/src/fs.rst               |   6 -
- deps/uv/docs/src/misc.rst             |   5 +-
- deps/uv/src/threadpool.c              |  21 -
- deps/uv/src/unix/aix.c                |  11 +-
- deps/uv/src/unix/fs.c                 |  57 +-
- deps/uv/src/unix/internal.h           |  23 -
- deps/uv/src/unix/kqueue.c             |  10 +-
- deps/uv/src/unix/linux.c              | 998 +++-----------------------
- deps/uv/src/unix/os390.c              |  11 +-
- deps/uv/src/unix/posix-poll.c         |  11 +-
- deps/uv/src/uv-common.h               |  28 -
- deps/uv/src/win/core.c                |  20 +-
- deps/uv/test/test-fs.c                |  33 -
- deps/uv/test/test-list.h              |   4 -
- deps/uv/test/test-metrics.c           | 151 ----
- deps/uv/test/test-threadpool-cancel.c |  34 +-
- 16 files changed, 138 insertions(+), 1285 deletions(-)
-
-diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c
-index 51962bf0021..a3da53026f9 100644
---- a/deps/uv/src/threadpool.c
-+++ b/deps/uv/src/threadpool.c
-@@ -275,13 +275,9 @@ void uv__work_submit(uv_loop_t* loop,
- }
- 
- 
--/* TODO(bnoordhuis) teach libuv how to cancel file operations
-- * that go through io_uring instead of the thread pool.
-- */
- static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
-   int cancelled;
- 
--  uv_once(&once, init_once);  /* Ensure |mutex| is initialized. */
-   uv_mutex_lock(&mutex);
-   uv_mutex_lock(&w->loop->wq_mutex);
- 
-@@ -311,15 +307,12 @@ void uv__work_done(uv_async_t* handle) {
-   QUEUE* q;
-   QUEUE wq;
-   int err;
--  int nevents;
- 
-   loop = container_of(handle, uv_loop_t, wq_async);
-   uv_mutex_lock(&loop->wq_mutex);
-   QUEUE_MOVE(&loop->wq, &wq);
-   uv_mutex_unlock(&loop->wq_mutex);
- 
--  nevents = 0;
--
-   while (!QUEUE_EMPTY(&wq)) {
-     q = QUEUE_HEAD(&wq);
-     QUEUE_REMOVE(q);
-@@ -327,20 +320,6 @@ void uv__work_done(uv_async_t* handle) {
-     w = container_of(q, struct uv__work, wq);
-     err = (w->work == uv__cancelled) ? UV_ECANCELED : 0;
-     w->done(w, err);
--    nevents++;
--  }
--
--  /* This check accomplishes 2 things:
--   * 1. Even if the queue was empty, the call to uv__work_done() should count
--   *    as an event. Which will have been added by the event loop when
--   *    calling this callback.
--   * 2. Prevents accidental wrap around in case nevents == 0 events == 0.
--   */
--  if (nevents > 1) {
--    /* Subtract 1 to counter the call to uv__work_done(). */
--    uv__metrics_inc_events(loop, nevents - 1);
--    if (uv__get_internal_fields(loop)->current_timeout == 0)
--      uv__metrics_inc_events_waiting(loop, nevents - 1);
-   }
- }
- 
-diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
-index f1afbed49ec..b855282ebc8 100644
---- a/deps/uv/src/unix/aix.c
-+++ b/deps/uv/src/unix/aix.c
-@@ -131,7 +131,6 @@ int uv__io_check_fd(uv_loop_t* loop, int fd) {
- 
- 
- void uv__io_poll(uv_loop_t* loop, int timeout) {
--  uv__loop_internal_fields_t* lfields;
-   struct pollfd events[1024];
-   struct pollfd pqry;
-   struct pollfd* pe;
-@@ -155,8 +154,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     return;
-   }
- 
--  lfields = uv__get_internal_fields(loop);
--
-   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-     q = QUEUE_HEAD(&loop->watcher_queue);
-     QUEUE_REMOVE(q);
-@@ -220,7 +217,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   base = loop->time;
-   count = 48; /* Benchmarks suggest this gives the best throughput. */
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -235,12 +232,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     if (timeout != 0)
-       uv__metrics_set_provider_entry_time(loop);
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
--     */
--    lfields->current_timeout = timeout;
--
-     nfds = pollset_poll(loop->backend_fd,
-                         events,
-                         ARRAY_SIZE(events),
-diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
-index 00d385c24b7..c696a8d5500 100644
---- a/deps/uv/src/unix/fs.c
-+++ b/deps/uv/src/unix/fs.c
-@@ -61,11 +61,10 @@
- #endif
- 
- #if defined(__linux__)
--# include <sys/sendfile.h>
--# include <sys/utsname.h>
-+# include "sys/utsname.h"
- #endif
- 
--#if defined(__sun)
-+#if defined(__linux__) || defined(__sun)
- # include <sys/sendfile.h>
- # include <sys/sysmacros.h>
- #endif
-@@ -1554,7 +1553,26 @@ static int uv__fs_statx(int fd,
-     return UV_ENOSYS;
-   }
- 
--  uv__statx_to_stat(&statxbuf, buf);
-+  buf->st_dev = makedev(statxbuf.stx_dev_major, statxbuf.stx_dev_minor);
-+  buf->st_mode = statxbuf.stx_mode;
-+  buf->st_nlink = statxbuf.stx_nlink;
-+  buf->st_uid = statxbuf.stx_uid;
-+  buf->st_gid = statxbuf.stx_gid;
-+  buf->st_rdev = makedev(statxbuf.stx_rdev_major, statxbuf.stx_rdev_minor);
-+  buf->st_ino = statxbuf.stx_ino;
-+  buf->st_size = statxbuf.stx_size;
-+  buf->st_blksize = statxbuf.stx_blksize;
-+  buf->st_blocks = statxbuf.stx_blocks;
-+  buf->st_atim.tv_sec = statxbuf.stx_atime.tv_sec;
-+  buf->st_atim.tv_nsec = statxbuf.stx_atime.tv_nsec;
-+  buf->st_mtim.tv_sec = statxbuf.stx_mtime.tv_sec;
-+  buf->st_mtim.tv_nsec = statxbuf.stx_mtime.tv_nsec;
-+  buf->st_ctim.tv_sec = statxbuf.stx_ctime.tv_sec;
-+  buf->st_ctim.tv_nsec = statxbuf.stx_ctime.tv_nsec;
-+  buf->st_birthtim.tv_sec = statxbuf.stx_btime.tv_sec;
-+  buf->st_birthtim.tv_nsec = statxbuf.stx_btime.tv_nsec;
-+  buf->st_flags = 0;
-+  buf->st_gen = 0;
- 
-   return 0;
- #else
-@@ -1798,9 +1816,6 @@ int uv_fs_chown(uv_loop_t* loop,
- int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
-   INIT(CLOSE);
-   req->file = file;
--  if (cb != NULL)
--    if (uv__iou_fs_close(loop, req))
--      return 0;
-   POST;
- }
- 
-@@ -1848,9 +1863,6 @@ int uv_fs_lchown(uv_loop_t* loop,
- int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
-   INIT(FDATASYNC);
-   req->file = file;
--  if (cb != NULL)
--    if (uv__iou_fs_fsync_or_fdatasync(loop, req, /* IORING_FSYNC_DATASYNC */ 1))
--      return 0;
-   POST;
- }
- 
-@@ -1858,9 +1870,6 @@ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
- int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
-   INIT(FSTAT);
-   req->file = file;
--  if (cb != NULL)
--    if (uv__iou_fs_statx(loop, req, /* is_fstat */ 1, /* is_lstat */ 0))
--      return 0;
-   POST;
- }
- 
-@@ -1868,9 +1877,6 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
- int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
-   INIT(FSYNC);
-   req->file = file;
--  if (cb != NULL)
--    if (uv__iou_fs_fsync_or_fdatasync(loop, req, /* no flags */ 0))
--      return 0;
-   POST;
- }
- 
-@@ -1917,9 +1923,6 @@ int uv_fs_lutime(uv_loop_t* loop,
- int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
-   INIT(LSTAT);
-   PATH;
--  if (cb != NULL)
--    if (uv__iou_fs_statx(loop, req, /* is_fstat */ 0, /* is_lstat */ 1))
--      return 0;
-   POST;
- }
- 
-@@ -1981,9 +1984,6 @@ int uv_fs_open(uv_loop_t* loop,
-   PATH;
-   req->flags = flags;
-   req->mode = mode;
--  if (cb != NULL)
--    if (uv__iou_fs_open(loop, req))
--      return 0;
-   POST;
- }
- 
-@@ -2012,11 +2012,6 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
-   memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
- 
-   req->off = off;
--
--  if (cb != NULL)
--    if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 1))
--      return 0;
--
-   POST;
- }
- 
-@@ -2124,9 +2119,6 @@ int uv_fs_sendfile(uv_loop_t* loop,
- int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
-   INIT(STAT);
-   PATH;
--  if (cb != NULL)
--    if (uv__iou_fs_statx(loop, req, /* is_fstat */ 0, /* is_lstat */ 0))
--      return 0;
-   POST;
- }
- 
-@@ -2190,11 +2182,6 @@ int uv_fs_write(uv_loop_t* loop,
-   memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
- 
-   req->off = off;
--
--  if (cb != NULL)
--    if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 0))
--      return 0;
--
-   POST;
- }
- 
-diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
-index 6c5822e6a0d..d439ae6dd3d 100644
---- a/deps/uv/src/unix/internal.h
-+++ b/deps/uv/src/unix/internal.h
-@@ -329,28 +329,6 @@ int uv__random_getentropy(void* buf, size_t buflen);
- int uv__random_readpath(const char* path, void* buf, size_t buflen);
- int uv__random_sysctl(void* buf, size_t buflen);
- 
--/* io_uring */
--#ifdef __linux__
--int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req);
--int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
--                                  uv_fs_t* req,
--                                  uint32_t fsync_flags);
--int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req);
--int uv__iou_fs_read_or_write(uv_loop_t* loop,
--                             uv_fs_t* req,
--                             int is_read);
--int uv__iou_fs_statx(uv_loop_t* loop,
--                     uv_fs_t* req,
--                     int is_fstat,
--                     int is_lstat);
--#else
--#define uv__iou_fs_close(loop, req) 0
--#define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0
--#define uv__iou_fs_open(loop, req) 0
--#define uv__iou_fs_read_or_write(loop, req, is_read) 0
--#define uv__iou_fs_statx(loop, req, is_fstat, is_lstat) 0
--#endif
--
- #if defined(__APPLE__)
- int uv___stream_fd(const uv_stream_t* handle);
- #define uv__stream_fd(handle) (uv___stream_fd((const uv_stream_t*) (handle)))
-@@ -427,7 +405,6 @@ int uv__statx(int dirfd,
-               int flags,
-               unsigned int mask,
-               struct uv__statx* statxbuf);
--void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf);
- ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags);
- #endif
- 
-diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
-index 82916d65933..deb486bae7a 100644
---- a/deps/uv/src/unix/kqueue.c
-+++ b/deps/uv/src/unix/kqueue.c
-@@ -127,7 +127,6 @@ static void uv__kqueue_delete(int kqfd, const struct kevent *ev) {
- 
- 
- void uv__io_poll(uv_loop_t* loop, int timeout) {
--  uv__loop_internal_fields_t* lfields;
-   struct kevent events[1024];
-   struct kevent* ev;
-   struct timespec spec;
-@@ -156,7 +155,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     return;
-   }
- 
--  lfields = uv__get_internal_fields(loop);
-   nevents = 0;
- 
-   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-@@ -224,7 +222,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   base = loop->time;
-   count = 48; /* Benchmarks suggest this gives the best throughput. */
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -247,12 +245,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     if (pset != NULL)
-       pthread_sigmask(SIG_BLOCK, pset, NULL);
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
--     */
--    lfields->current_timeout = timeout;
--
-     nfds = kevent(loop->backend_fd,
-                   events,
-                   nevents,
-diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
-index 5f84ad0eea3..343e37f2527 100644
---- a/deps/uv/src/unix/linux.c
-+++ b/deps/uv/src/unix/linux.c
-@@ -27,8 +27,6 @@
- #include "internal.h"
- 
- #include <inttypes.h>
--#include <stdatomic.h>
--#include <stddef.h>  /* offsetof */
- #include <stdint.h>
- #include <stdio.h>
- #include <stdlib.h>
-@@ -40,29 +38,15 @@
- #include <net/if.h>
- #include <sys/epoll.h>
- #include <sys/inotify.h>
--#include <sys/mman.h>
- #include <sys/param.h>
- #include <sys/prctl.h>
- #include <sys/stat.h>
- #include <sys/syscall.h>
- #include <sys/sysinfo.h>
--#include <sys/sysmacros.h>
- #include <sys/types.h>
- #include <time.h>
- #include <unistd.h>
- 
--#ifndef __NR_io_uring_setup
--# define __NR_io_uring_setup 425
--#endif
--
--#ifndef __NR_io_uring_enter
--# define __NR_io_uring_enter 426
--#endif
--
--#ifndef __NR_io_uring_register
--# define __NR_io_uring_register 427
--#endif
--
- #ifndef __NR_copy_file_range
- # if defined(__x86_64__)
- #  define __NR_copy_file_range 326
-@@ -132,129 +116,6 @@
- # include <netpacket/packet.h>
- #endif /* HAVE_IFADDRS_H */
- 
--enum {
--  UV__IORING_SETUP_SQPOLL = 2u,
--};
--
--enum {
--  UV__IORING_FEAT_SINGLE_MMAP = 1u,
--  UV__IORING_FEAT_NODROP = 2u,
--  UV__IORING_FEAT_RSRC_TAGS = 1024u,  /* linux v5.13 */
--};
--
--enum {
--  UV__IORING_OP_READV = 1,
--  UV__IORING_OP_WRITEV = 2,
--  UV__IORING_OP_FSYNC = 3,
--  UV__IORING_OP_OPENAT = 18,
--  UV__IORING_OP_CLOSE = 19,
--  UV__IORING_OP_STATX = 21,
--  UV__IORING_OP_EPOLL_CTL = 29,
--};
--
--enum {
--  UV__IORING_ENTER_GETEVENTS = 1u,
--  UV__IORING_ENTER_SQ_WAKEUP = 2u,
--};
--
--enum {
--  UV__IORING_SQ_NEED_WAKEUP = 1u,
--  UV__IORING_SQ_CQ_OVERFLOW = 2u,
--};
--
--struct uv__io_cqring_offsets {
--  uint32_t head;
--  uint32_t tail;
--  uint32_t ring_mask;
--  uint32_t ring_entries;
--  uint32_t overflow;
--  uint32_t cqes;
--  uint64_t reserved0;
--  uint64_t reserved1;
--};
--
--STATIC_ASSERT(40 == sizeof(struct uv__io_cqring_offsets));
--
--struct uv__io_sqring_offsets {
--  uint32_t head;
--  uint32_t tail;
--  uint32_t ring_mask;
--  uint32_t ring_entries;
--  uint32_t flags;
--  uint32_t dropped;
--  uint32_t array;
--  uint32_t reserved0;
--  uint64_t reserved1;
--};
--
--STATIC_ASSERT(40 == sizeof(struct uv__io_sqring_offsets));
--
--struct uv__io_uring_cqe {
--  uint64_t user_data;
--  int32_t res;
--  uint32_t flags;
--};
--
--STATIC_ASSERT(16 == sizeof(struct uv__io_uring_cqe));
--
--struct uv__io_uring_sqe {
--  uint8_t opcode;
--  uint8_t flags;
--  uint16_t ioprio;
--  int32_t fd;
--  union {
--    uint64_t off;
--    uint64_t addr2;
--  };
--  union {
--    uint64_t addr;
--  };
--  uint32_t len;
--  union {
--    uint32_t rw_flags;
--    uint32_t fsync_flags;
--    uint32_t open_flags;
--    uint32_t statx_flags;
--  };
--  uint64_t user_data;
--  union {
--    uint16_t buf_index;
--    uint64_t pad[3];
--  };
--};
--
--STATIC_ASSERT(64 == sizeof(struct uv__io_uring_sqe));
--STATIC_ASSERT(0 == offsetof(struct uv__io_uring_sqe, opcode));
--STATIC_ASSERT(1 == offsetof(struct uv__io_uring_sqe, flags));
--STATIC_ASSERT(2 == offsetof(struct uv__io_uring_sqe, ioprio));
--STATIC_ASSERT(4 == offsetof(struct uv__io_uring_sqe, fd));
--STATIC_ASSERT(8 == offsetof(struct uv__io_uring_sqe, off));
--STATIC_ASSERT(16 == offsetof(struct uv__io_uring_sqe, addr));
--STATIC_ASSERT(24 == offsetof(struct uv__io_uring_sqe, len));
--STATIC_ASSERT(28 == offsetof(struct uv__io_uring_sqe, rw_flags));
--STATIC_ASSERT(32 == offsetof(struct uv__io_uring_sqe, user_data));
--STATIC_ASSERT(40 == offsetof(struct uv__io_uring_sqe, buf_index));
--
--struct uv__io_uring_params {
--  uint32_t sq_entries;
--  uint32_t cq_entries;
--  uint32_t flags;
--  uint32_t sq_thread_cpu;
--  uint32_t sq_thread_idle;
--  uint32_t features;
--  uint32_t reserved[4];
--  struct uv__io_sqring_offsets sq_off;  /* 40 bytes */
--  struct uv__io_cqring_offsets cq_off;  /* 40 bytes */
--};
--
--STATIC_ASSERT(40 + 40 + 40 == sizeof(struct uv__io_uring_params));
--STATIC_ASSERT(40 == offsetof(struct uv__io_uring_params, sq_off));
--STATIC_ASSERT(80 == offsetof(struct uv__io_uring_params, cq_off));
--
--STATIC_ASSERT(EPOLL_CTL_ADD < 4);
--STATIC_ASSERT(EPOLL_CTL_DEL < 4);
--STATIC_ASSERT(EPOLL_CTL_MOD < 4);
--
- struct watcher_list {
-   RB_ENTRY(watcher_list) entry;
-   QUEUE watchers;
-@@ -276,17 +137,6 @@ static int compare_watchers(const struct watcher_list* a,
- static void maybe_free_watcher_list(struct watcher_list* w,
-                                     uv_loop_t* loop);
- 
--static void uv__epoll_ctl_flush(int epollfd,
--                                struct uv__iou* ctl,
--                                struct epoll_event (*events)[256]);
--
--static void uv__epoll_ctl_prep(int epollfd,
--                               struct uv__iou* ctl,
--                               struct epoll_event (*events)[256],
--                               int op,
--                               int fd,
--                               struct epoll_event* e);
--
- RB_GENERATE_STATIC(watcher_root, watcher_list, entry, compare_watchers)
- 
- 
-@@ -356,187 +206,7 @@ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags) {
- }
- 
- 
--int uv__io_uring_setup(int entries, struct uv__io_uring_params* params) {
--  return syscall(__NR_io_uring_setup, entries, params);
--}
--
--
--int uv__io_uring_enter(int fd,
--                       unsigned to_submit,
--                       unsigned min_complete,
--                       unsigned flags) {
--  /* io_uring_enter used to take a sigset_t but it's unused
--   * in newer kernels unless IORING_ENTER_EXT_ARG is set,
--   * in which case it takes a struct io_uring_getevents_arg.
--   */
--  return syscall(__NR_io_uring_enter,
--                 fd,
--                 to_submit,
--                 min_complete,
--                 flags,
--                 NULL,
--                 0L);
--}
--
--
--int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
--  return syscall(__NR_io_uring_register, fd, opcode, arg, nargs);
--}
--
--
--static int uv__use_io_uring(void) {
--  /* Ternary: unknown=0, yes=1, no=-1 */
--  static _Atomic int use_io_uring;
--  char* val;
--  int use;
--
--  use = atomic_load_explicit(&use_io_uring, memory_order_relaxed);
--
--  if (use == 0) {
--    val = getenv("UV_USE_IO_URING");
--    use = val == NULL || atoi(val) ? 1 : -1;
--    atomic_store_explicit(&use_io_uring, use, memory_order_relaxed);
--  }
--
--  return use > 0;
--}
--
--
--static void uv__iou_init(int epollfd,
--                         struct uv__iou* iou,
--                         uint32_t entries,
--                         uint32_t flags) {
--  struct uv__io_uring_params params;
--  struct epoll_event e;
--  size_t cqlen;
--  size_t sqlen;
--  size_t maxlen;
--  size_t sqelen;
--  uint32_t i;
--  char* sq;
--  char* sqe;
--  int ringfd;
--
--  sq = MAP_FAILED;
--  sqe = MAP_FAILED;
--
--  if (!uv__use_io_uring())
--    return;
--
--  /* SQPOLL required CAP_SYS_NICE until linux v5.12 relaxed that requirement.
--   * Mostly academic because we check for a v5.13 kernel afterwards anyway.
--   */
--  memset(&params, 0, sizeof(params));
--  params.flags = flags;
--
--  if (flags & UV__IORING_SETUP_SQPOLL)
--    params.sq_thread_idle = 10;  /* milliseconds */
--
--  /* Kernel returns a file descriptor with O_CLOEXEC flag set. */
--  ringfd = uv__io_uring_setup(entries, &params);
--  if (ringfd == -1)
--    return;
--
--  /* IORING_FEAT_RSRC_TAGS is used to detect linux v5.13 but what we're
--   * actually detecting is whether IORING_OP_STATX works with SQPOLL.
--   */
--  if (!(params.features & UV__IORING_FEAT_RSRC_TAGS))
--    goto fail;
--
--  /* Implied by IORING_FEAT_RSRC_TAGS but checked explicitly anyway. */
--  if (!(params.features & UV__IORING_FEAT_SINGLE_MMAP))
--    goto fail;
--
--  /* Implied by IORING_FEAT_RSRC_TAGS but checked explicitly anyway. */
--  if (!(params.features & UV__IORING_FEAT_NODROP))
--    goto fail;
--
--  sqlen = params.sq_off.array + params.sq_entries * sizeof(uint32_t);
--  cqlen =
--      params.cq_off.cqes + params.cq_entries * sizeof(struct uv__io_uring_cqe);
--  maxlen = sqlen < cqlen ? cqlen : sqlen;
--  sqelen = params.sq_entries * sizeof(struct uv__io_uring_sqe);
--
--  sq = mmap(0,
--            maxlen,
--            PROT_READ | PROT_WRITE,
--            MAP_SHARED | MAP_POPULATE,
--            ringfd,
--            0);  /* IORING_OFF_SQ_RING */
--
--  sqe = mmap(0,
--             sqelen,
--             PROT_READ | PROT_WRITE,
--             MAP_SHARED | MAP_POPULATE,
--             ringfd,
--             0x10000000ull);  /* IORING_OFF_SQES */
--
--  if (sq == MAP_FAILED || sqe == MAP_FAILED)
--    goto fail;
--
--  if (flags & UV__IORING_SETUP_SQPOLL) {
--    /* Only interested in completion events. To get notified when
--     * the kernel pulls items from the submission ring, add POLLOUT.
--     */
--    memset(&e, 0, sizeof(e));
--    e.events = POLLIN;
--    e.data.fd = ringfd;
--
--    if (epoll_ctl(epollfd, EPOLL_CTL_ADD, ringfd, &e))
--      goto fail;
--  }
--
--  iou->sqhead = (uint32_t*) (sq + params.sq_off.head);
--  iou->sqtail = (uint32_t*) (sq + params.sq_off.tail);
--  iou->sqmask = *(uint32_t*) (sq + params.sq_off.ring_mask);
--  iou->sqarray = (uint32_t*) (sq + params.sq_off.array);
--  iou->sqflags = (uint32_t*) (sq + params.sq_off.flags);
--  iou->cqhead = (uint32_t*) (sq + params.cq_off.head);
--  iou->cqtail = (uint32_t*) (sq + params.cq_off.tail);
--  iou->cqmask = *(uint32_t*) (sq + params.cq_off.ring_mask);
--  iou->sq = sq;
--  iou->cqe = sq + params.cq_off.cqes;
--  iou->sqe = sqe;
--  iou->sqlen = sqlen;
--  iou->cqlen = cqlen;
--  iou->maxlen = maxlen;
--  iou->sqelen = sqelen;
--  iou->ringfd = ringfd;
--  iou->in_flight = 0;
--
--  for (i = 0; i <= iou->sqmask; i++)
--    iou->sqarray[i] = i;  /* Slot -> sqe identity mapping. */
--
--  return;
--
--fail:
--  if (sq != MAP_FAILED)
--    munmap(sq, maxlen);
--
--  if (sqe != MAP_FAILED)
--    munmap(sqe, sqelen);
--
--  uv__close(ringfd);
--}
--
--
--static void uv__iou_delete(struct uv__iou* iou) {
--  if (iou->ringfd != -1) {
--    munmap(iou->sq, iou->maxlen);
--    munmap(iou->sqe, iou->sqelen);
--    uv__close(iou->ringfd);
--    iou->ringfd = -1;
--  }
--}
--
--
- int uv__platform_loop_init(uv_loop_t* loop) {
--  uv__loop_internal_fields_t* lfields;
--
--  lfields = uv__get_internal_fields(loop);
--  lfields->ctl.ringfd = -1;
--  lfields->iou.ringfd = -1;
--
-   loop->inotify_watchers = NULL;
-   loop->inotify_fd = -1;
-   loop->backend_fd = epoll_create1(O_CLOEXEC);
-@@ -544,9 +214,6 @@ int uv__platform_loop_init(uv_loop_t* loop) {
-   if (loop->backend_fd == -1)
-     return UV__ERR(errno);
- 
--  uv__iou_init(loop->backend_fd, &lfields->iou, 64, UV__IORING_SETUP_SQPOLL);
--  uv__iou_init(loop->backend_fd, &lfields->ctl, 256, 0);
--
-   return 0;
- }
- 
-@@ -559,8 +226,6 @@ int uv__io_fork(uv_loop_t* loop) {
- 
-   uv__close(loop->backend_fd);
-   loop->backend_fd = -1;
--
--  /* TODO(bnoordhuis) Loses items from the submission and completion rings. */
-   uv__platform_loop_delete(loop);
- 
-   err = uv__platform_loop_init(loop);
-@@ -572,62 +237,42 @@ int uv__io_fork(uv_loop_t* loop) {
- 
- 
- void uv__platform_loop_delete(uv_loop_t* loop) {
--  uv__loop_internal_fields_t* lfields;
--
--  lfields = uv__get_internal_fields(loop);
--  uv__iou_delete(&lfields->ctl);
--  uv__iou_delete(&lfields->iou);
--
--  if (loop->inotify_fd != -1) {
--    uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN);
--    uv__close(loop->inotify_fd);
--    loop->inotify_fd = -1;
--  }
-+  if (loop->inotify_fd == -1) return;
-+  uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN);
-+  uv__close(loop->inotify_fd);
-+  loop->inotify_fd = -1;
- }
- 
- 
--struct uv__invalidate {
--  struct epoll_event (*prep)[256];
--  struct epoll_event* events;
--  int nfds;
--};
--
--
- void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
--  uv__loop_internal_fields_t* lfields;
--  struct uv__invalidate* inv;
-+  struct epoll_event* events;
-   struct epoll_event dummy;
--  int i;
-+  uintptr_t i;
-+  uintptr_t nfds;
- 
--  lfields = uv__get_internal_fields(loop);
--  inv = lfields->inv;
-+  assert(loop->watchers != NULL);
-+  assert(fd >= 0);
- 
--  /* Invalidate events with same file descriptor */
--  if (inv != NULL)
--    for (i = 0; i < inv->nfds; i++)
--      if (inv->events[i].data.fd == fd)
--        inv->events[i].data.fd = -1;
-+  events = (struct epoll_event*) loop->watchers[loop->nwatchers];
-+  nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1];
-+  if (events != NULL)
-+    /* Invalidate events with same file descriptor */
-+    for (i = 0; i < nfds; i++)
-+      if (events[i].data.fd == fd)
-+        events[i].data.fd = -1;
- 
-   /* Remove the file descriptor from the epoll.
-    * This avoids a problem where the same file description remains open
-    * in another process, causing repeated junk epoll events.
-    *
-    * We pass in a dummy epoll_event, to work around a bug in old kernels.
--   *
--   * Work around a bug in kernels 3.10 to 3.19 where passing a struct that
--   * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
-    */
--  memset(&dummy, 0, sizeof(dummy));
--
--  if (inv == NULL) {
-+  if (loop->backend_fd >= 0) {
-+    /* Work around a bug in kernels 3.10 to 3.19 where passing a struct that
-+     * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
-+     */
-+    memset(&dummy, 0, sizeof(dummy));
-     epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy);
--  } else {
--    uv__epoll_ctl_prep(loop->backend_fd,
--                       &lfields->ctl,
--                       inv->prep,
--                       EPOLL_CTL_DEL,
--                       fd,
--                       &dummy);
-   }
- }
- 
-@@ -653,454 +298,27 @@ int uv__io_check_fd(uv_loop_t* loop, int fd) {
- }
- 
- 
--/* Caller must initialize SQE and call uv__iou_submit(). */
--static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
--                                                uv_loop_t* loop,
--                                                uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  uint32_t head;
--  uint32_t tail;
--  uint32_t mask;
--  uint32_t slot;
--
--  if (iou->ringfd == -1)
--    return NULL;
--
--  head = atomic_load_explicit((_Atomic uint32_t*) iou->sqhead,
--                              memory_order_acquire);
--  tail = *iou->sqtail;
--  mask = iou->sqmask;
--
--  if ((head & mask) == ((tail + 1) & mask))
--    return NULL;  /* No room in ring buffer. TODO(bnoordhuis) maybe flush it? */
--
--  slot = tail & mask;
--  sqe = iou->sqe;
--  sqe = &sqe[slot];
--  memset(sqe, 0, sizeof(*sqe));
--  sqe->user_data = (uintptr_t) req;
--
--  /* Pacify uv_cancel(). */
--  req->work_req.loop = loop;
--  req->work_req.work = NULL;
--  req->work_req.done = NULL;
--  QUEUE_INIT(&req->work_req.wq);
--
--  uv__req_register(loop, req);
--  iou->in_flight++;
--
--  return sqe;
--}
--
--
--static void uv__iou_submit(struct uv__iou* iou) {
--  uint32_t flags;
--
--  atomic_store_explicit((_Atomic uint32_t*) iou->sqtail,
--                        *iou->sqtail + 1,
--                        memory_order_release);
--
--  flags = atomic_load_explicit((_Atomic uint32_t*) iou->sqflags,
--                               memory_order_acquire);
--
--  if (flags & UV__IORING_SQ_NEED_WAKEUP)
--    if (uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_SQ_WAKEUP))
--      if (errno != EOWNERDEAD)  /* Kernel bug. Harmless, ignore. */
--        perror("libuv: io_uring_enter(wakeup)");  /* Can't happen. */
--}
--
--
--int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->fd = req->file;
--  sqe->opcode = UV__IORING_OP_CLOSE;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
--                                  uv_fs_t* req,
--                                  uint32_t fsync_flags) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  /* Little known fact: setting seq->off and seq->len turns
--   * it into an asynchronous sync_file_range() operation.
--   */
--  sqe->fd = req->file;
--  sqe->fsync_flags = fsync_flags;
--  sqe->opcode = UV__IORING_OP_FSYNC;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->fd = AT_FDCWD;
--  sqe->len = req->mode;
--  sqe->opcode = UV__IORING_OP_OPENAT;
--  sqe->open_flags = req->flags | O_CLOEXEC;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_read_or_write(uv_loop_t* loop,
--                             uv_fs_t* req,
--                             int is_read) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__iou* iou;
--
--  /* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
--   * threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
--  if (req->nbufs > IOV_MAX)
--    return 0;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL)
--    return 0;
--
--  sqe->addr = (uintptr_t) req->bufs;
--  sqe->fd = req->file;
--  sqe->len = req->nbufs;
--  sqe->off = req->off < 0 ? -1 : req->off;
--  sqe->opcode = is_read ? UV__IORING_OP_READV : UV__IORING_OP_WRITEV;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--int uv__iou_fs_statx(uv_loop_t* loop,
--                     uv_fs_t* req,
--                     int is_fstat,
--                     int is_lstat) {
--  struct uv__io_uring_sqe* sqe;
--  struct uv__statx* statxbuf;
--  struct uv__iou* iou;
--
--  statxbuf = uv__malloc(sizeof(*statxbuf));
--  if (statxbuf == NULL)
--    return 0;
--
--  iou = &uv__get_internal_fields(loop)->iou;
--
--  sqe = uv__iou_get_sqe(iou, loop, req);
--  if (sqe == NULL) {
--    uv__free(statxbuf);
--    return 0;
--  }
--
--  req->ptr = statxbuf;
--
--  sqe->addr = (uintptr_t) req->path;
--  sqe->addr2 = (uintptr_t) statxbuf;
--  sqe->fd = AT_FDCWD;
--  sqe->len = 0xFFF; /* STATX_BASIC_STATS + STATX_BTIME */
--  sqe->opcode = UV__IORING_OP_STATX;
--
--  if (is_fstat) {
--    sqe->addr = (uintptr_t) "";
--    sqe->fd = req->file;
--    sqe->statx_flags |= 0x1000; /* AT_EMPTY_PATH */
--  }
--
--  if (is_lstat)
--    sqe->statx_flags |= AT_SYMLINK_NOFOLLOW;
--
--  uv__iou_submit(iou);
--
--  return 1;
--}
--
--
--void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf) {
--  buf->st_dev = makedev(statxbuf->stx_dev_major, statxbuf->stx_dev_minor);
--  buf->st_mode = statxbuf->stx_mode;
--  buf->st_nlink = statxbuf->stx_nlink;
--  buf->st_uid = statxbuf->stx_uid;
--  buf->st_gid = statxbuf->stx_gid;
--  buf->st_rdev = makedev(statxbuf->stx_rdev_major, statxbuf->stx_rdev_minor);
--  buf->st_ino = statxbuf->stx_ino;
--  buf->st_size = statxbuf->stx_size;
--  buf->st_blksize = statxbuf->stx_blksize;
--  buf->st_blocks = statxbuf->stx_blocks;
--  buf->st_atim.tv_sec = statxbuf->stx_atime.tv_sec;
--  buf->st_atim.tv_nsec = statxbuf->stx_atime.tv_nsec;
--  buf->st_mtim.tv_sec = statxbuf->stx_mtime.tv_sec;
--  buf->st_mtim.tv_nsec = statxbuf->stx_mtime.tv_nsec;
--  buf->st_ctim.tv_sec = statxbuf->stx_ctime.tv_sec;
--  buf->st_ctim.tv_nsec = statxbuf->stx_ctime.tv_nsec;
--  buf->st_birthtim.tv_sec = statxbuf->stx_btime.tv_sec;
--  buf->st_birthtim.tv_nsec = statxbuf->stx_btime.tv_nsec;
--  buf->st_flags = 0;
--  buf->st_gen = 0;
--}
--
--
--static void uv__iou_fs_statx_post(uv_fs_t* req) {
--  struct uv__statx* statxbuf;
--  uv_stat_t* buf;
--
--  buf = &req->statbuf;
--  statxbuf = req->ptr;
--  req->ptr = NULL;
--
--  if (req->result == 0) {
--    uv__msan_unpoison(statxbuf, sizeof(*statxbuf));
--    uv__statx_to_stat(statxbuf, buf);
--    req->ptr = buf;
--  }
--
--  uv__free(statxbuf);
--}
--
--
--static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
--  struct uv__io_uring_cqe* cqe;
--  struct uv__io_uring_cqe* e;
--  uv_fs_t* req;
--  uint32_t head;
--  uint32_t tail;
--  uint32_t mask;
--  uint32_t i;
--  uint32_t flags;
--  int nevents;
--  int rc;
--
--  head = *iou->cqhead;
--  tail = atomic_load_explicit((_Atomic uint32_t*) iou->cqtail,
--                              memory_order_acquire);
--  mask = iou->cqmask;
--  cqe = iou->cqe;
--  nevents = 0;
--
--  for (i = head; i != tail; i++) {
--    e = &cqe[i & mask];
--
--    req = (uv_fs_t*) (uintptr_t) e->user_data;
--    assert(req->type == UV_FS);
--
--    uv__req_unregister(loop, req);
--    iou->in_flight--;
--
--    /* io_uring stores error codes as negative numbers, same as libuv. */
--    req->result = e->res;
--
--    switch (req->fs_type) {
--      case UV_FS_FSTAT:
--      case UV_FS_LSTAT:
--      case UV_FS_STAT:
--        uv__iou_fs_statx_post(req);
--        break;
--      default:  /* Squelch -Wswitch warnings. */
--        break;
--    }
--
--    uv__metrics_update_idle_time(loop);
--    req->cb(req);
--    nevents++;
--  }
--
--  atomic_store_explicit((_Atomic uint32_t*) iou->cqhead,
--                        tail,
--                        memory_order_release);
--
--  /* Check whether CQE's overflowed, if so enter the kernel to make them
--   * available. Don't grab them immediately but in the next loop iteration to
--   * avoid loop starvation. */
--  flags = atomic_load_explicit((_Atomic uint32_t*) iou->sqflags,
--                               memory_order_acquire);
--
--  if (flags & UV__IORING_SQ_CQ_OVERFLOW) {
--    do
--      rc = uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_GETEVENTS);
--    while (rc == -1 && errno == EINTR);
--
--    if (rc < 0)
--      perror("libuv: io_uring_enter(getevents)");  /* Can't happen. */
--  }
--
--  uv__metrics_inc_events(loop, nevents);
--  if (uv__get_internal_fields(loop)->current_timeout == 0)
--    uv__metrics_inc_events_waiting(loop, nevents);
--}
--
--
--static void uv__epoll_ctl_prep(int epollfd,
--                               struct uv__iou* ctl,
--                               struct epoll_event (*events)[256],
--                               int op,
--                               int fd,
--                               struct epoll_event* e) {
--  struct uv__io_uring_sqe* sqe;
--  struct epoll_event* pe;
--  uint32_t mask;
--  uint32_t slot;
--
--  if (ctl->ringfd == -1) {
--    if (!epoll_ctl(epollfd, op, fd, e))
--      return;
--
--    if (op == EPOLL_CTL_DEL)
--      return;  /* Ignore errors, may be racing with another thread. */
--
--    if (op != EPOLL_CTL_ADD)
--      abort();
--
--    if (errno != EEXIST)
--      abort();
--
--    /* File descriptor that's been watched before, update event mask. */
--    if (!epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, e))
--      return;
--
--    abort();
--  } else {
--    mask = ctl->sqmask;
--    slot = (*ctl->sqtail)++ & mask;
--
--    pe = &(*events)[slot];
--    *pe = *e;
--
--    sqe = ctl->sqe;
--    sqe = &sqe[slot];
--
--    memset(sqe, 0, sizeof(*sqe));
--    sqe->addr = (uintptr_t) pe;
--    sqe->fd = epollfd;
--    sqe->len = op;
--    sqe->off = fd;
--    sqe->opcode = UV__IORING_OP_EPOLL_CTL;
--    sqe->user_data = op | slot << 2 | (int64_t) fd << 32;
--
--    if ((*ctl->sqhead & mask) == (*ctl->sqtail & mask))
--      uv__epoll_ctl_flush(epollfd, ctl, events);
--  }
--}
--
--
--static void uv__epoll_ctl_flush(int epollfd,
--                                struct uv__iou* ctl,
--                                struct epoll_event (*events)[256]) {
--  struct epoll_event oldevents[256];
--  struct uv__io_uring_cqe* cqe;
--  uint32_t oldslot;
--  uint32_t slot;
--  uint32_t n;
--  int fd;
--  int op;
--  int rc;
--
--  STATIC_ASSERT(sizeof(oldevents) == sizeof(*events));
--  assert(ctl->ringfd != -1);
--  assert(*ctl->sqhead != *ctl->sqtail);
--
--  n = *ctl->sqtail - *ctl->sqhead;
--  do
--    rc = uv__io_uring_enter(ctl->ringfd, n, n, UV__IORING_ENTER_GETEVENTS);
--  while (rc == -1 && errno == EINTR);
--
--  if (rc < 0)
--    perror("libuv: io_uring_enter(getevents)");  /* Can't happen. */
--
--  if (rc != (int) n)
--    abort();
--
--  assert(*ctl->sqhead == *ctl->sqtail);
--
--  memcpy(oldevents, *events, sizeof(*events));
--
--  /* Failed submissions are either EPOLL_CTL_DEL commands for file descriptors
--   * that have been closed, or EPOLL_CTL_ADD commands for file descriptors
--   * that we are already watching. Ignore the former and retry the latter
--   * with EPOLL_CTL_MOD.
--   */
--  while (*ctl->cqhead != *ctl->cqtail) {
--    slot = (*ctl->cqhead)++ & ctl->cqmask;
--
--    cqe = ctl->cqe;
--    cqe = &cqe[slot];
--
--    if (cqe->res == 0)
--      continue;
--
--    fd = cqe->user_data >> 32;
--    op = 3 & cqe->user_data;
--    oldslot = 255 & (cqe->user_data >> 2);
--
--    if (op == EPOLL_CTL_DEL)
--      continue;
--
--    if (op != EPOLL_CTL_ADD)
--      abort();
--
--    if (cqe->res != -EEXIST)
--      abort();
--
--    uv__epoll_ctl_prep(epollfd,
--                       ctl,
--                       events,
--                       EPOLL_CTL_MOD,
--                       fd,
--                       &oldevents[oldslot]);
--  }
--}
--
--
- void uv__io_poll(uv_loop_t* loop, int timeout) {
--  uv__loop_internal_fields_t* lfields;
-+  /* A bug in kernels < 2.6.37 makes timeouts larger than ~30 minutes
-+   * effectively infinite on 32 bits architectures.  To avoid blocking
-+   * indefinitely, we cap the timeout and poll again if necessary.
-+   *
-+   * Note that "30 minutes" is a simplification because it depends on
-+   * the value of CONFIG_HZ.  The magic constant assumes CONFIG_HZ=1200,
-+   * that being the largest value I have seen in the wild (and only once.)
-+   */
-+  static const int max_safe_timeout = 1789569;
-   struct epoll_event events[1024];
--  struct epoll_event prep[256];
--  struct uv__invalidate inv;
-   struct epoll_event* pe;
-   struct epoll_event e;
--  struct uv__iou* ctl;
--  struct uv__iou* iou;
-   int real_timeout;
-   QUEUE* q;
-   uv__io_t* w;
-   sigset_t* sigmask;
-   sigset_t sigset;
-   uint64_t base;
--  int have_iou_events;
-   int have_signals;
-   int nevents;
--  int epollfd;
-   int count;
-   int nfds;
-   int fd;
-@@ -1109,9 +327,47 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int user_timeout;
-   int reset_timeout;
- 
--  lfields = uv__get_internal_fields(loop);
--  ctl = &lfields->ctl;
--  iou = &lfields->iou;
-+  if (loop->nfds == 0) {
-+    assert(QUEUE_EMPTY(&loop->watcher_queue));
-+    return;
-+  }
-+
-+  memset(&e, 0, sizeof(e));
-+
-+  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-+    q = QUEUE_HEAD(&loop->watcher_queue);
-+    QUEUE_REMOVE(q);
-+    QUEUE_INIT(q);
-+
-+    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
-+    assert(w->pevents != 0);
-+    assert(w->fd >= 0);
-+    assert(w->fd < (int) loop->nwatchers);
-+
-+    e.events = w->pevents;
-+    e.data.fd = w->fd;
-+
-+    if (w->events == 0)
-+      op = EPOLL_CTL_ADD;
-+    else
-+      op = EPOLL_CTL_MOD;
-+
-+    /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching
-+     * events, skip the syscall and squelch the events after epoll_wait().
-+     */
-+    if (epoll_ctl(loop->backend_fd, op, w->fd, &e)) {
-+      if (errno != EEXIST)
-+        abort();
-+
-+      assert(op == EPOLL_CTL_ADD);
-+
-+      /* We've reactivated a file descriptor that's been watched before. */
-+      if (epoll_ctl(loop->backend_fd, EPOLL_CTL_MOD, w->fd, &e))
-+        abort();
-+    }
-+
-+    w->events = w->pevents;
-+  }
- 
-   sigmask = NULL;
-   if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
-@@ -1125,7 +381,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   count = 48; /* Benchmarks suggest this gives the best throughput. */
-   real_timeout = timeout;
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -1134,56 +390,24 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     user_timeout = 0;
-   }
- 
--  epollfd = loop->backend_fd;
--
--  memset(&e, 0, sizeof(e));
--
--  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
--    q = QUEUE_HEAD(&loop->watcher_queue);
--    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
--    QUEUE_REMOVE(q);
--    QUEUE_INIT(q);
--
--    op = EPOLL_CTL_MOD;
--    if (w->events == 0)
--      op = EPOLL_CTL_ADD;
--
--    w->events = w->pevents;
--    e.events = w->pevents;
--    e.data.fd = w->fd;
--
--    uv__epoll_ctl_prep(epollfd, ctl, &prep, op, w->fd, &e);
--  }
--
--  inv.events = events;
--  inv.prep = &prep;
--  inv.nfds = -1;
--
-   for (;;) {
--    if (loop->nfds == 0)
--      if (iou->in_flight == 0)
--        break;
--
--    /* All event mask mutations should be visible to the kernel before
--     * we enter epoll_pwait().
--     */
--    if (ctl->ringfd != -1)
--      while (*ctl->sqhead != *ctl->sqtail)
--        uv__epoll_ctl_flush(epollfd, ctl, &prep);
--
-     /* Only need to set the provider_entry_time if timeout != 0. The function
-      * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME.
-      */
-     if (timeout != 0)
-       uv__metrics_set_provider_entry_time(loop);
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
-+    /* See the comment for max_safe_timeout for an explanation of why
-+     * this is necessary.  Executive summary: kernel bug workaround.
-      */
--    lfields->current_timeout = timeout;
-+    if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
-+      timeout = max_safe_timeout;
- 
--    nfds = epoll_pwait(epollfd, events, ARRAY_SIZE(events), timeout, sigmask);
-+    nfds = epoll_pwait(loop->backend_fd,
-+                       events,
-+                       ARRAY_SIZE(events),
-+                       timeout,
-+                       sigmask);
- 
-     /* Update loop->time unconditionally. It's tempting to skip the update when
-      * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the
-@@ -1203,7 +427,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-         continue;
- 
-       if (timeout == 0)
--        break;
-+        return;
- 
-       /* We may have been inside the system call for longer than |timeout|
-        * milliseconds so we need to update the timestamp to avoid drift.
-@@ -1224,18 +448,27 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-         continue;
- 
-       if (timeout == 0)
--        break;
-+        return;
- 
-       /* Interrupted by a signal. Update timeout and poll again. */
-       goto update_timeout;
-     }
- 
--    have_iou_events = 0;
-     have_signals = 0;
-     nevents = 0;
- 
--    inv.nfds = nfds;
--    lfields->inv = &inv;
-+    {
-+      /* Squelch a -Waddress-of-packed-member warning with gcc >= 9. */
-+      union {
-+        struct epoll_event* events;
-+        uv__io_t* watchers;
-+      } x;
-+
-+      x.events = events;
-+      assert(loop->watchers != NULL);
-+      loop->watchers[loop->nwatchers] = x.watchers;
-+      loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds;
-+    }
- 
-     for (i = 0; i < nfds; i++) {
-       pe = events + i;
-@@ -1245,12 +478,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-       if (fd == -1)
-         continue;
- 
--      if (fd == iou->ringfd) {
--        uv__poll_io_uring(loop, iou);
--        have_iou_events = 1;
--        continue;
--      }
--
-       assert(fd >= 0);
-       assert((unsigned) fd < loop->nwatchers);
- 
-@@ -1262,7 +489,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-          * Ignore all errors because we may be racing with another thread
-          * when the file descriptor is closed.
-          */
--        uv__epoll_ctl_prep(epollfd, ctl, &prep, EPOLL_CTL_DEL, fd, pe);
-+        epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, pe);
-         continue;
-       }
- 
-@@ -1319,13 +546,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-       loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN);
-     }
- 
--    lfields->inv = NULL;
--
--    if (have_iou_events != 0)
--      break;  /* Event loop should cycle now so don't poll again. */
-+    loop->watchers[loop->nwatchers] = NULL;
-+    loop->watchers[loop->nwatchers + 1] = NULL;
- 
-     if (have_signals != 0)
--      break;  /* Event loop should cycle now so don't poll again. */
-+      return;  /* Event loop should cycle now so don't poll again. */
- 
-     if (nevents != 0) {
-       if (nfds == ARRAY_SIZE(events) && --count != 0) {
-@@ -1333,11 +558,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-         timeout = 0;
-         continue;
-       }
--      break;
-+      return;
-     }
- 
-     if (timeout == 0)
--      break;
-+      return;
- 
-     if (timeout == -1)
-       continue;
-@@ -1347,14 +572,10 @@ update_timeout:
- 
-     real_timeout -= (loop->time - base);
-     if (real_timeout <= 0)
--      break;
-+      return;
- 
-     timeout = real_timeout;
-   }
--
--  if (ctl->ringfd != -1)
--    while (*ctl->sqhead != *ctl->sqtail)
--      uv__epoll_ctl_flush(epollfd, ctl, &prep);
- }
- 
- uint64_t uv__hrtime(uv_clocktype_t type) {
-@@ -1867,7 +1088,7 @@ static uint64_t uv__read_uint64(const char* filename) {
-   if (0 == uv__slurp(filename, buf, sizeof(buf)))
-     if (1 != sscanf(buf, "%" PRIu64, &rc))
-       if (0 == strcmp(buf, "max\n"))
--        rc = UINT64_MAX;
-+        rc = ~0ull;
- 
-   return rc;
- }
-@@ -1903,7 +1124,6 @@ static void uv__get_cgroup1_memory_limits(char buf[static 1024], uint64_t* high,
-   char filename[4097];
-   char* p;
-   int n;
--  uint64_t cgroup1_max;
- 
-   /* Find out where the controller is mounted. */
-   p = uv__cgroup1_find_memory_controller(buf, &n);
-@@ -1920,22 +1140,12 @@ static void uv__get_cgroup1_memory_limits(char buf[static 1024], uint64_t* high,
-      * as indicated by uv__read_uint64 returning 0.
-      */
-      if (*high != 0 && *max != 0)
--       goto update_limits;
-+       return;
-   }
- 
-   /* Fall back to the limits of the global memory controller. */
-   *high = uv__read_uint64("/sys/fs/cgroup/memory/memory.soft_limit_in_bytes");
-   *max = uv__read_uint64("/sys/fs/cgroup/memory/memory.limit_in_bytes");
--
--  /* uv__read_uint64 detects cgroup2's "max", so we need to separately detect
--   * cgroup1's maximum value (which is derived from LONG_MAX and PAGE_SIZE).
--   */
--update_limits:
--  cgroup1_max = LONG_MAX & ~(sysconf(_SC_PAGESIZE) - 1);
--  if (*high == cgroup1_max)
--    *high = UINT64_MAX;
--  if (*max == cgroup1_max)
--    *max = UINT64_MAX;
- }
- 
- static void uv__get_cgroup2_memory_limits(char buf[static 1024], uint64_t* high,
-diff --git a/deps/uv/src/unix/os390.c b/deps/uv/src/unix/os390.c
-index a87c2d77faf..3954b2c2753 100644
---- a/deps/uv/src/unix/os390.c
-+++ b/deps/uv/src/unix/os390.c
-@@ -808,7 +808,6 @@ static int os390_message_queue_handler(uv__os390_epoll* ep) {
- 
- void uv__io_poll(uv_loop_t* loop, int timeout) {
-   static const int max_safe_timeout = 1789569;
--  uv__loop_internal_fields_t* lfields;
-   struct epoll_event events[1024];
-   struct epoll_event* pe;
-   struct epoll_event e;
-@@ -831,8 +830,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     return;
-   }
- 
--  lfields = uv__get_internal_fields(loop);
--
-   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-     uv_stream_t* stream;
- 
-@@ -880,7 +877,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   int nevents = 0;
-   have_signals = 0;
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -899,12 +896,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
-       timeout = max_safe_timeout;
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
--     */
--    lfields->current_timeout = timeout;
--
-     nfds = epoll_wait(loop->ep, events,
-                       ARRAY_SIZE(events), timeout);
- 
-diff --git a/deps/uv/src/unix/posix-poll.c b/deps/uv/src/unix/posix-poll.c
-index 7e7de86845d..711780ece8d 100644
---- a/deps/uv/src/unix/posix-poll.c
-+++ b/deps/uv/src/unix/posix-poll.c
-@@ -132,7 +132,6 @@ static void uv__pollfds_del(uv_loop_t* loop, int fd) {
- 
- 
- void uv__io_poll(uv_loop_t* loop, int timeout) {
--  uv__loop_internal_fields_t* lfields;
-   sigset_t* pset;
-   sigset_t set;
-   uint64_t time_base;
-@@ -153,8 +152,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     return;
-   }
- 
--  lfields = uv__get_internal_fields(loop);
--
-   /* Take queued watchers and add their fds to our poll fds array.  */
-   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
-     q = QUEUE_HEAD(&loop->watcher_queue);
-@@ -182,7 +179,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-   assert(timeout >= -1);
-   time_base = loop->time;
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -201,12 +198,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
-     if (timeout != 0)
-       uv__metrics_set_provider_entry_time(loop);
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
--     */
--    lfields->current_timeout = timeout;
--
-     if (pset != NULL)
-       if (pthread_sigmask(SIG_BLOCK, pset, NULL))
-         abort();
-diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
-index decde5362c8..2720121addc 100644
---- a/deps/uv/src/uv-common.h
-+++ b/deps/uv/src/uv-common.h
-@@ -396,37 +396,9 @@ struct uv__loop_metrics_s {
- void uv__metrics_update_idle_time(uv_loop_t* loop);
- void uv__metrics_set_provider_entry_time(uv_loop_t* loop);
- 
--#ifdef __linux__
--struct uv__iou {
--  uint32_t* sqhead;
--  uint32_t* sqtail;
--  uint32_t* sqarray;
--  uint32_t sqmask;
--  uint32_t* sqflags;
--  uint32_t* cqhead;
--  uint32_t* cqtail;
--  uint32_t cqmask;
--  void* sq;   /* pointer to munmap() on event loop teardown */
--  void* cqe;  /* pointer to array of struct uv__io_uring_cqe */
--  void* sqe;  /* pointer to array of struct uv__io_uring_sqe */
--  size_t sqlen;
--  size_t cqlen;
--  size_t maxlen;
--  size_t sqelen;
--  int ringfd;
--  uint32_t in_flight;
--};
--#endif  /* __linux__ */
--
- struct uv__loop_internal_fields_s {
-   unsigned int flags;
-   uv__loop_metrics_t loop_metrics;
--  int current_timeout;
--#ifdef __linux__
--  struct uv__iou ctl;
--  struct uv__iou iou;
--  void* inv;  /* used by uv__platform_invalidate_fd() */
--#endif  /* __linux__ */
- };
- 
- #endif /* UV_COMMON_H_ */
-diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
-index 9a3be58849a..e4041ec86a6 100644
---- a/deps/uv/src/win/core.c
-+++ b/deps/uv/src/win/core.c
-@@ -424,7 +424,6 @@ int uv_backend_timeout(const uv_loop_t* loop) {
- 
- 
- static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
--  uv__loop_internal_fields_t* lfields;
-   DWORD bytes;
-   ULONG_PTR key;
-   OVERLAPPED* overlapped;
-@@ -434,10 +433,9 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
-   uint64_t user_timeout;
-   int reset_timeout;
- 
--  lfields = uv__get_internal_fields(loop);
-   timeout_time = loop->time + timeout;
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -452,12 +450,6 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
-     if (timeout != 0)
-       uv__metrics_set_provider_entry_time(loop);
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
--     */
--    lfields->current_timeout = timeout;
--
-     GetQueuedCompletionStatus(loop->iocp,
-                               &bytes,
-                               &key,
-@@ -515,7 +507,6 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
- 
- 
- static void uv__poll(uv_loop_t* loop, DWORD timeout) {
--  uv__loop_internal_fields_t* lfields;
-   BOOL success;
-   uv_req_t* req;
-   OVERLAPPED_ENTRY overlappeds[128];
-@@ -527,10 +518,9 @@ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
-   uint64_t actual_timeout;
-   int reset_timeout;
- 
--  lfields = uv__get_internal_fields(loop);
-   timeout_time = loop->time + timeout;
- 
--  if (lfields->flags & UV_METRICS_IDLE_TIME) {
-+  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
-     reset_timeout = 1;
-     user_timeout = timeout;
-     timeout = 0;
-@@ -547,12 +537,6 @@ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
-     if (timeout != 0)
-       uv__metrics_set_provider_entry_time(loop);
- 
--    /* Store the current timeout in a location that's globally accessible so
--     * other locations like uv__work_done() can determine whether the queue
--     * of events in the callback were waiting when poll was called.
--     */
--    lfields->current_timeout = timeout;
--
-     success = pGetQueuedCompletionStatusEx(loop->iocp,
-                                            overlappeds,
-                                            ARRAY_SIZE(overlappeds),
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.11.0.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.11.1.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.11.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.11.1.bb
index cc51354..e2e2f5a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.11.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.11.1.bb
@@ -24,8 +24,7 @@
            file://0004-v8-don-t-override-ARM-CFLAGS.patch \
            file://system-c-ares.patch \
            file://0001-liftoff-Correct-function-signatures.patch \
-           file://0001-Revert-io_uring-changes-from-libuv-1.46.0.patch \
-           file://0002-Revert-io_uring-changes-from-libuv-1.45.0.patch \
+           file://0001-deps-disable-io_uring-support-in-libuv.patch \
            file://run-ptest \
            "
 
@@ -38,7 +37,7 @@
 SRC_URI:append:toolchain-clang:powerpc64le = " \
            file://0001-ppc64-Do-not-use-mminimal-toc-with-clang.patch \
            "
-SRC_URI[sha256sum] = "31807ebeeeb049c53f1765e4a95aed69476a4b696dd100cb539ab668d7950b40"
+SRC_URI[sha256sum] = "77813edbf3f7f16d2d35d3353443dee4e61d5ee84d9e3138c7538a3c0ca5209e"
 
 S = "${WORKDIR}/node-v${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch
deleted file mode 100644
index 732c8ff..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115/py3.12.patch
+++ /dev/null
@@ -1,2496 +0,0 @@
-From 7293cfae4fd68004901825ad1cabb83424d8729a Mon Sep 17 00:00:00 2001
-From: serge-sans-paille <sguelton@mozilla.com>
-Date: Mon, 16 Oct 2023 13:35:24 +0000
-Subject: [PATCH] Bug 1857492 - Upgrade vendored version of six and urllib3
- r=saschanaz
-
-six -> 1.16
-urllib3 -> 1.26.17
-
-Differential Revision: https://phabricator.services.mozilla.com/D190288
-Upstream-Status: Backport [https://github.com/mozilla/gecko-dev/commit/7293cfae4fd68004901825ad1cabb83424d8729a]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- third_party/python/poetry.lock                |  22 +--
- third_party/python/requirements.in            |   4 +-
- third_party/python/requirements.txt           |  12 +-
- .../python/six/six-1.13.0.dist-info/RECORD    |   6 -
- .../LICENSE                                   |   2 +-
- .../METADATA                                  |   9 +-
- .../python/six/six-1.16.0.dist-info/RECORD    |   6 +
- .../six-1.16.0.dist-info}/WHEEL               |   2 +-
- .../top_level.txt                             |   0
- third_party/python/six/six.py                 |  91 ++++++---
- .../urllib3/urllib3-1.26.0.dist-info/RECORD   |  44 -----
- .../LICENSE.txt                               |   0
- .../METADATA                                  | 177 ++++++++++++++++--
- .../urllib3/urllib3-1.26.17.dist-info/RECORD  |  44 +++++
- .../urllib3-1.26.17.dist-info}/WHEEL          |   2 +-
- .../top_level.txt                             |   0
- .../python/urllib3/urllib3/__init__.py        |  17 ++
- .../python/urllib3/urllib3/_version.py        |   2 +-
- .../python/urllib3/urllib3/connection.py      |  62 ++++--
- .../python/urllib3/urllib3/connectionpool.py  |  97 ++++++++--
- .../contrib/_securetransport/bindings.py      |   2 +-
- .../contrib/_securetransport/low_level.py     |   1 +
- .../urllib3/urllib3/contrib/appengine.py      |   4 +-
- .../urllib3/urllib3/contrib/ntlmpool.py       |  13 +-
- .../urllib3/urllib3/contrib/pyopenssl.py      |  19 +-
- .../urllib3/contrib/securetransport.py        |   5 +-
- .../python/urllib3/urllib3/contrib/socks.py   |   2 +-
- .../python/urllib3/urllib3/exceptions.py      |  12 +-
- .../urllib3/urllib3/packages/__init__.py      |   5 -
- .../packages/backports/weakref_finalize.py    | 155 +++++++++++++++
- .../python/urllib3/urllib3/packages/six.py    | 125 +++++++++----
- .../packages/ssl_match_hostname/__init__.py   |  22 ---
- .../python/urllib3/urllib3/poolmanager.py     |   3 +-
- third_party/python/urllib3/urllib3/request.py |  21 +++
- .../python/urllib3/urllib3/response.py        |  72 ++++++-
- .../python/urllib3/urllib3/util/connection.py |   5 +-
- .../python/urllib3/urllib3/util/proxy.py      |   1 +
- .../python/urllib3/urllib3/util/request.py    |   5 +-
- .../python/urllib3/urllib3/util/retry.py      |  37 +++-
- .../python/urllib3/urllib3/util/ssl_.py       |  53 ++++--
- .../ssl_match_hostname.py}                    |  15 +-
- .../urllib3/urllib3/util/ssltransport.py      |   6 +-
- .../python/urllib3/urllib3/util/timeout.py    |   9 +-
- .../python/urllib3/urllib3/util/url.py        |  17 +-
- .../python/urllib3/urllib3/util/wait.py       |   1 -
- 45 files changed, 934 insertions(+), 275 deletions(-)
- delete mode 100644 third_party/python/six/six-1.13.0.dist-info/RECORD
- rename third_party/python/six/{six-1.13.0.dist-info => six-1.16.0.dist-info}/LICENSE (96%)
- rename third_party/python/six/{six-1.13.0.dist-info => six-1.16.0.dist-info}/METADATA (85%)
- create mode 100644 third_party/python/six/six-1.16.0.dist-info/RECORD
- rename third_party/python/{urllib3/urllib3-1.26.0.dist-info => six/six-1.16.0.dist-info}/WHEEL (70%)
- rename third_party/python/six/{six-1.13.0.dist-info => six-1.16.0.dist-info}/top_level.txt (100%)
- delete mode 100644 third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD
- rename third_party/python/urllib3/{urllib3-1.26.0.dist-info => urllib3-1.26.17.dist-info}/LICENSE.txt (100%)
- rename third_party/python/urllib3/{urllib3-1.26.0.dist-info => urllib3-1.26.17.dist-info}/METADATA (86%)
- create mode 100644 third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD
- rename third_party/python/{six/six-1.13.0.dist-info => urllib3/urllib3-1.26.17.dist-info}/WHEEL (70%)
- rename third_party/python/urllib3/{urllib3-1.26.0.dist-info => urllib3-1.26.17.dist-info}/top_level.txt (100%)
- create mode 100644 third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py
- delete mode 100644 third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py
- rename third_party/python/urllib3/urllib3/{packages/ssl_match_hostname/_implementation.py => util/ssl_match_hostname.py} (92%)
-
-diff --git a/third_party/python/poetry.lock b/third_party/python/poetry.lock
-index 3d50174e58bcb..b4a8455d20fb4 100644
---- a/third_party/python/poetry.lock
-+++ b/third_party/python/poetry.lock
-@@ -1333,14 +1333,14 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
- 
- [[package]]
- name = "six"
--version = "1.13.0"
-+version = "1.16.0"
- description = "Python 2 and 3 compatibility utilities"
- category = "main"
- optional = false
--python-versions = ">=2.6, !=3.0.*, !=3.1.*"
-+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
- files = [
--    {file = "six-1.13.0-py2.py3-none-any.whl", hash = "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd"},
--    {file = "six-1.13.0.tar.gz", hash = "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"},
-+    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
-+    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
- ]
- 
- [[package]]
-@@ -1491,19 +1491,19 @@ files = [
- 
- [[package]]
- name = "urllib3"
--version = "1.26.0"
-+version = "1.26.17"
- description = "HTTP library with thread-safe connection pooling, file post, and more."
- category = "main"
- optional = false
--python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
-+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
- files = [
--    {file = "urllib3-1.26.0-py2.py3-none-any.whl", hash = "sha256:bad31cb622ceee0ab46c4c884cf61957def0ff2e644de0a7a093678844c9ccac"},
--    {file = "urllib3-1.26.0.tar.gz", hash = "sha256:4849f132941d68144df0a3785ccc4fe423430ba5db0108d045c8cadbc90f517a"},
-+    {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"},
-+    {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"},
- ]
- 
- [package.extras]
--brotli = ["brotlipy (>=0.6.0)"]
--secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"]
-+brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
- socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
- 
- [[package]]
-diff --git a/third_party/python/six/six-1.13.0.dist-info/RECORD b/third_party/python/six/six-1.13.0.dist-info/RECORD
-deleted file mode 100644
-index a0e6c1fd4bd99..0000000000000
---- a/third_party/python/six/six-1.13.0.dist-info/RECORD
-+++ /dev/null
-@@ -1,6 +0,0 @@
--six.py,sha256=bsEzSFTZTx49wQttLORmSZTrpjGc8UbXt-HBa_LZX7Q,33045
--six-1.13.0.dist-info/LICENSE,sha256=t1KbjAcXGniow2wyg5BVKOSBKUXZd9El65JujMvyRbY,1066
--six-1.13.0.dist-info/METADATA,sha256=hxS4rSPRfO8ewbcLS30anoFi6LFgUQ3mk_xknZ8RV4w,1940
--six-1.13.0.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110
--six-1.13.0.dist-info/top_level.txt,sha256=_iVH_iYEtEXnD8nYGQYpYFUvkUW9sEO1GYbkeKSAais,4
--six-1.13.0.dist-info/RECORD,,
-diff --git a/third_party/python/six/six-1.13.0.dist-info/LICENSE b/third_party/python/six/six-1.16.0.dist-info/LICENSE
-similarity index 96%
-rename from third_party/python/six/six-1.13.0.dist-info/LICENSE
-rename to third_party/python/six/six-1.16.0.dist-info/LICENSE
-index 4b05a545261c0..de6633112c1f9 100644
---- a/third_party/python/six/six-1.13.0.dist-info/LICENSE
-+++ b/third_party/python/six/six-1.16.0.dist-info/LICENSE
-@@ -1,4 +1,4 @@
--Copyright (c) 2010-2019 Benjamin Peterson
-+Copyright (c) 2010-2020 Benjamin Peterson
- 
- Permission is hereby granted, free of charge, to any person obtaining a copy of
- this software and associated documentation files (the "Software"), to deal in
-diff --git a/third_party/python/six/six-1.13.0.dist-info/METADATA b/third_party/python/six/six-1.16.0.dist-info/METADATA
-similarity index 85%
-rename from third_party/python/six/six-1.13.0.dist-info/METADATA
-rename to third_party/python/six/six-1.16.0.dist-info/METADATA
-index b0c8f51e1f366..6d7525c2ebcfe 100644
---- a/third_party/python/six/six-1.13.0.dist-info/METADATA
-+++ b/third_party/python/six/six-1.16.0.dist-info/METADATA
-@@ -1,6 +1,6 @@
- Metadata-Version: 2.1
- Name: six
--Version: 1.13.0
-+Version: 1.16.0
- Summary: Python 2 and 3 compatibility utilities
- Home-page: https://github.com/benjaminp/six
- Author: Benjamin Peterson
-@@ -14,7 +14,7 @@ Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: MIT License
- Classifier: Topic :: Software Development :: Libraries
- Classifier: Topic :: Utilities
--Requires-Python: >=2.6, !=3.0.*, !=3.1.*
-+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*
- 
- .. image:: https://img.shields.io/pypi/v/six.svg
-    :target: https://pypi.org/project/six/
-@@ -37,7 +37,7 @@ for smoothing over the differences between the Python versions with the goal of
- writing Python code that is compatible on both Python versions.  See the
- documentation for more information on what is provided.
- 
--Six supports every Python version since 2.6.  It is contained in only one Python
-+Six supports Python 2.7 and 3.3+.  It is contained in only one Python
- file, so it can be easily copied into your project. (The copyright and license
- notice must be retained.)
- 
-@@ -46,7 +46,4 @@ Online documentation is at https://six.readthedocs.io/.
- Bugs can be reported to https://github.com/benjaminp/six.  The code can also
- be found there.
- 
--For questions about six or porting in general, email the python-porting mailing
--list: https://mail.python.org/mailman/listinfo/python-porting
--
- 
-diff --git a/third_party/python/six/six-1.16.0.dist-info/RECORD b/third_party/python/six/six-1.16.0.dist-info/RECORD
-new file mode 100644
-index 0000000000000..8de4af79fae0b
---- /dev/null
-+++ b/third_party/python/six/six-1.16.0.dist-info/RECORD
-@@ -0,0 +1,6 @@
-+six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549
-+six-1.16.0.dist-info/LICENSE,sha256=i7hQxWWqOJ_cFvOkaWWtI9gq3_YPI5P8J2K2MYXo5sk,1066
-+six-1.16.0.dist-info/METADATA,sha256=VQcGIFCAEmfZcl77E5riPCN4v2TIsc_qtacnjxKHJoI,1795
-+six-1.16.0.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
-+six-1.16.0.dist-info/top_level.txt,sha256=_iVH_iYEtEXnD8nYGQYpYFUvkUW9sEO1GYbkeKSAais,4
-+six-1.16.0.dist-info/RECORD,,
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/WHEEL b/third_party/python/six/six-1.16.0.dist-info/WHEEL
-similarity index 70%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/WHEEL
-rename to third_party/python/six/six-1.16.0.dist-info/WHEEL
-index 6d38aa0601b31..01b8fc7d4a10c 100644
---- a/third_party/python/urllib3/urllib3-1.26.0.dist-info/WHEEL
-+++ b/third_party/python/six/six-1.16.0.dist-info/WHEEL
-@@ -1,5 +1,5 @@
- Wheel-Version: 1.0
--Generator: bdist_wheel (0.35.1)
-+Generator: bdist_wheel (0.36.2)
- Root-Is-Purelib: true
- Tag: py2-none-any
- Tag: py3-none-any
-diff --git a/third_party/python/six/six-1.13.0.dist-info/top_level.txt b/third_party/python/six/six-1.16.0.dist-info/top_level.txt
-similarity index 100%
-rename from third_party/python/six/six-1.13.0.dist-info/top_level.txt
-rename to third_party/python/six/six-1.16.0.dist-info/top_level.txt
-diff --git a/third_party/python/six/six.py b/third_party/python/six/six.py
-index 357e624abc6c9..4e15675d8b5ca 100644
---- a/third_party/python/six/six.py
-+++ b/third_party/python/six/six.py
-@@ -1,4 +1,4 @@
--# Copyright (c) 2010-2019 Benjamin Peterson
-+# Copyright (c) 2010-2020 Benjamin Peterson
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
-@@ -29,7 +29,7 @@
- import types
- 
- __author__ = "Benjamin Peterson <benjamin@python.org>"
--__version__ = "1.13.0"
-+__version__ = "1.16.0"
- 
- 
- # Useful for very coarse version differentiation.
-@@ -71,6 +71,11 @@ def __len__(self):
-             MAXSIZE = int((1 << 63) - 1)
-         del X
- 
-+if PY34:
-+    from importlib.util import spec_from_loader
-+else:
-+    spec_from_loader = None
-+
- 
- def _add_doc(func, doc):
-     """Add documentation to a function."""
-@@ -186,6 +191,11 @@ def find_module(self, fullname, path=None):
-             return self
-         return None
- 
-+    def find_spec(self, fullname, path, target=None):
-+        if fullname in self.known_modules:
-+            return spec_from_loader(fullname, self)
-+        return None
-+
-     def __get_module(self, fullname):
-         try:
-             return self.known_modules[fullname]
-@@ -223,6 +233,12 @@ def get_code(self, fullname):
-         return None
-     get_source = get_code  # same as get_code
- 
-+    def create_module(self, spec):
-+        return self.load_module(spec.name)
-+
-+    def exec_module(self, module):
-+        pass
-+
- _importer = _SixMetaPathImporter(__name__)
- 
- 
-@@ -259,7 +275,7 @@ class _MovedItems(_LazyModule):
-     MovedModule("copyreg", "copy_reg"),
-     MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
-     MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"),
--    MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"),
-+    MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"),
-     MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
-     MovedModule("http_cookies", "Cookie", "http.cookies"),
-     MovedModule("html_entities", "htmlentitydefs", "html.entities"),
-@@ -644,9 +660,11 @@ def u(s):
-     if sys.version_info[1] <= 1:
-         _assertRaisesRegex = "assertRaisesRegexp"
-         _assertRegex = "assertRegexpMatches"
-+        _assertNotRegex = "assertNotRegexpMatches"
-     else:
-         _assertRaisesRegex = "assertRaisesRegex"
-         _assertRegex = "assertRegex"
-+        _assertNotRegex = "assertNotRegex"
- else:
-     def b(s):
-         return s
-@@ -668,6 +686,7 @@ def indexbytes(buf, i):
-     _assertCountEqual = "assertItemsEqual"
-     _assertRaisesRegex = "assertRaisesRegexp"
-     _assertRegex = "assertRegexpMatches"
-+    _assertNotRegex = "assertNotRegexpMatches"
- _add_doc(b, """Byte literal""")
- _add_doc(u, """Text literal""")
- 
-@@ -684,6 +703,10 @@ def assertRegex(self, *args, **kwargs):
-     return getattr(self, _assertRegex)(*args, **kwargs)
- 
- 
-+def assertNotRegex(self, *args, **kwargs):
-+    return getattr(self, _assertNotRegex)(*args, **kwargs)
-+
-+
- if PY3:
-     exec_ = getattr(moves.builtins, "exec")
- 
-@@ -719,16 +742,7 @@ def exec_(_code_, _globs_=None, _locs_=None):
- """)
- 
- 
--if sys.version_info[:2] == (3, 2):
--    exec_("""def raise_from(value, from_value):
--    try:
--        if from_value is None:
--            raise value
--        raise value from from_value
--    finally:
--        value = None
--""")
--elif sys.version_info[:2] > (3, 2):
-+if sys.version_info[:2] > (3,):
-     exec_("""def raise_from(value, from_value):
-     try:
-         raise value from from_value
-@@ -808,13 +822,33 @@ def print_(*args, **kwargs):
- _add_doc(reraise, """Reraise an exception.""")
- 
- if sys.version_info[0:2] < (3, 4):
-+    # This does exactly the same what the :func:`py3:functools.update_wrapper`
-+    # function does on Python versions after 3.2. It sets the ``__wrapped__``
-+    # attribute on ``wrapper`` object and it doesn't raise an error if any of
-+    # the attributes mentioned in ``assigned`` and ``updated`` are missing on
-+    # ``wrapped`` object.
-+    def _update_wrapper(wrapper, wrapped,
-+                        assigned=functools.WRAPPER_ASSIGNMENTS,
-+                        updated=functools.WRAPPER_UPDATES):
-+        for attr in assigned:
-+            try:
-+                value = getattr(wrapped, attr)
-+            except AttributeError:
-+                continue
-+            else:
-+                setattr(wrapper, attr, value)
-+        for attr in updated:
-+            getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
-+        wrapper.__wrapped__ = wrapped
-+        return wrapper
-+    _update_wrapper.__doc__ = functools.update_wrapper.__doc__
-+
-     def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS,
-               updated=functools.WRAPPER_UPDATES):
--        def wrapper(f):
--            f = functools.wraps(wrapped, assigned, updated)(f)
--            f.__wrapped__ = wrapped
--            return f
--        return wrapper
-+        return functools.partial(_update_wrapper, wrapped=wrapped,
-+                                 assigned=assigned, updated=updated)
-+    wraps.__doc__ = functools.wraps.__doc__
-+
- else:
-     wraps = functools.wraps
- 
-@@ -872,12 +906,11 @@ def ensure_binary(s, encoding='utf-8', errors='strict'):
-       - `str` -> encoded to `bytes`
-       - `bytes` -> `bytes`
-     """
-+    if isinstance(s, binary_type):
-+        return s
-     if isinstance(s, text_type):
-         return s.encode(encoding, errors)
--    elif isinstance(s, binary_type):
--        return s
--    else:
--        raise TypeError("not expecting type '%s'" % type(s))
-+    raise TypeError("not expecting type '%s'" % type(s))
- 
- 
- def ensure_str(s, encoding='utf-8', errors='strict'):
-@@ -891,12 +924,15 @@ def ensure_str(s, encoding='utf-8', errors='strict'):
-       - `str` -> `str`
-       - `bytes` -> decoded to `str`
-     """
--    if not isinstance(s, (text_type, binary_type)):
--        raise TypeError("not expecting type '%s'" % type(s))
-+    # Optimization: Fast return for the common case.
-+    if type(s) is str:
-+        return s
-     if PY2 and isinstance(s, text_type):
--        s = s.encode(encoding, errors)
-+        return s.encode(encoding, errors)
-     elif PY3 and isinstance(s, binary_type):
--        s = s.decode(encoding, errors)
-+        return s.decode(encoding, errors)
-+    elif not isinstance(s, (text_type, binary_type)):
-+        raise TypeError("not expecting type '%s'" % type(s))
-     return s
- 
- 
-@@ -919,10 +955,9 @@ def ensure_text(s, encoding='utf-8', errors='strict'):
-         raise TypeError("not expecting type '%s'" % type(s))
- 
- 
--
- def python_2_unicode_compatible(klass):
-     """
--    A decorator that defines __unicode__ and __str__ methods under Python 2.
-+    A class decorator that defines __unicode__ and __str__ methods under Python 2.
-     Under Python 3 it does nothing.
- 
-     To support Python 2 and 3 with a single code base, define a __str__ method
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD b/third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD
-deleted file mode 100644
-index ec9088a111a41..0000000000000
---- a/third_party/python/urllib3/urllib3-1.26.0.dist-info/RECORD
-+++ /dev/null
-@@ -1,44 +0,0 @@
--urllib3/__init__.py,sha256=j3yzHIbmW7CS-IKQJ9-PPQf_YKO8EOAey_rMW0UR7us,2763
--urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811
--urllib3/_version.py,sha256=H0vLQ8PY350EPZlZQa8ri0tEjVS-xhGdQOHcU360-0A,63
--urllib3/connection.py,sha256=BdaUSNpGzO0zq28i9MhOXb6QZspeVdVrYtjnkk2Eqg4,18396
--urllib3/connectionpool.py,sha256=IKoeuJZY9YAYm0GK4q-MXAhyXW0M_FnvabYaNsDIR-E,37133
--urllib3/exceptions.py,sha256=lNrKC5J8zeBXIu9SSKSNb7cLi8iXl9ARu9DHD2SflZM,7810
--urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
--urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
--urllib3/poolmanager.py,sha256=whzlX6UTEgODMOCy0ZDMUONRBCz5wyIM8Z9opXAY-Lk,19763
--urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985
--urllib3/response.py,sha256=hGhGBh7TkEkh_IQg5C1W_xuPNrgIKv5BUXPyE-q0LuE,28203
--urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
--urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
--urllib3/contrib/appengine.py,sha256=7Pxb0tKfDB_LTGPERiswH0qomhDoUUOo5kwybAKLQyE,11010
--urllib3/contrib/ntlmpool.py,sha256=6I95h1_71fzxmoMSNtY0gB8lnyCoVtP_DpqFGj14fdU,4160
--urllib3/contrib/pyopenssl.py,sha256=vgh6j52w9xgwq-3R2kfB5M2JblQATJfKAK3lIAc1kSg,16778
--urllib3/contrib/securetransport.py,sha256=KxGPZk8d4YepWm7Rc-SBt1XrzIfnLKc8JkUVV75XzgE,34286
--urllib3/contrib/socks.py,sha256=DcRjM2l0rQMIyhYrN6r-tnVkY6ZTDxHJlM8_usAkGCA,7097
--urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
--urllib3/contrib/_securetransport/bindings.py,sha256=E1_7ScsgOchfxneozbAueK7ziCwF35fna4DuDCYJ9_o,17637
--urllib3/contrib/_securetransport/low_level.py,sha256=lgIdsSycqfB0Xm5BiJzXGeIKT7ybCQMFPJAgkcwPa1s,13908
--urllib3/packages/__init__.py,sha256=h4BLhD4tLaBx1adaDtKXfupsgqY0wWLXb_f1_yVlV6A,108
--urllib3/packages/six.py,sha256=adx4z-eM_D0Vvu0IIqVzFACQ_ux9l64y7DkSEfbxCDs,32536
--urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
--urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
--urllib3/packages/ssl_match_hostname/__init__.py,sha256=zppezdEQdpGsYerI6mV6MfUYy495JV4mcOWC_GgbljU,757
--urllib3/packages/ssl_match_hostname/_implementation.py,sha256=6dZ-q074g7XhsJ27MFCgkct8iVNZB3sMZvKhf-KUVy0,5679
--urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
--urllib3/util/connection.py,sha256=21B-LX0c8fkxPDssyHCaK0pCnmrKmhltg5EoouHiAPU,4910
--urllib3/util/proxy.py,sha256=FGipAEnvZteyldXNjce4DEB7YzwU-a5lep8y5S0qHQg,1604
--urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
--urllib3/util/request.py,sha256=NnzaEKQ1Pauw5MFMV6HmgEMHITf0Aua9fQuzi2uZzGc,4123
--urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
--urllib3/util/retry.py,sha256=tn168HDMUynFmXRP-uVaLRUOlbTEJikoB1RuZdwfCes,21366
--urllib3/util/ssl_.py,sha256=cUsmU604z2zAOZcaXDpINXOokQ1RtlJMe96TBDkaJp0,16199
--urllib3/util/ssltransport.py,sha256=IvGQvs9YWkf4jzfqVjTu_UWjwAUgPn5ActajW8VLz6A,6908
--urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003
--urllib3/util/url.py,sha256=LWfLSlI4l2FmUMKfCkElCaW10-0N-sJDT9bxaDZJkjs,13964
--urllib3/util/wait.py,sha256=3MUKRSAUJDB2tgco7qRUskW0zXGAWYvRRE4Q1_6xlLs,5404
--urllib3-1.26.0.dist-info/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115
--urllib3-1.26.0.dist-info/METADATA,sha256=Wghdt6nLf9HfZHhWj8Dpgz4n9vGRqXYhdIwJRPgki6M,42629
--urllib3-1.26.0.dist-info/WHEEL,sha256=ADKeyaGyKF5DwBNE0sRE5pvW-bSkFMJfBuhzZ3rceP4,110
--urllib3-1.26.0.dist-info/top_level.txt,sha256=EMiXL2sKrTcmrMxIHTqdc3ET54pQI2Y072LexFEemvo,8
--urllib3-1.26.0.dist-info/RECORD,,
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/LICENSE.txt b/third_party/python/urllib3/urllib3-1.26.17.dist-info/LICENSE.txt
-similarity index 100%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/LICENSE.txt
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/LICENSE.txt
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/METADATA b/third_party/python/urllib3/urllib3-1.26.17.dist-info/METADATA
-similarity index 86%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/METADATA
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/METADATA
-index 39869aafada8a..9493faee66c01 100644
---- a/third_party/python/urllib3/urllib3-1.26.0.dist-info/METADATA
-+++ b/third_party/python/urllib3/urllib3-1.26.17.dist-info/METADATA
-@@ -1,6 +1,6 @@
- Metadata-Version: 2.1
- Name: urllib3
--Version: 1.26.0
-+Version: 1.26.17
- Summary: HTTP library with thread-safe connection pooling, file post, and more.
- Home-page: https://urllib3.readthedocs.io/
- Author: Andrey Petrov
-@@ -10,7 +10,6 @@ Project-URL: Documentation, https://urllib3.readthedocs.io/
- Project-URL: Code, https://github.com/urllib3/urllib3
- Project-URL: Issue tracker, https://github.com/urllib3/urllib3/issues
- Keywords: urllib httplib threadsafe filepost http https ssl pooling
--Platform: UNKNOWN
- Classifier: Environment :: Web Environment
- Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: MIT License
-@@ -19,27 +18,33 @@ Classifier: Programming Language :: Python
- Classifier: Programming Language :: Python :: 2
- Classifier: Programming Language :: Python :: 2.7
- Classifier: Programming Language :: Python :: 3
--Classifier: Programming Language :: Python :: 3.5
- Classifier: Programming Language :: Python :: 3.6
- Classifier: Programming Language :: Python :: 3.7
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
-+Classifier: Programming Language :: Python :: 3.10
-+Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: Implementation :: CPython
- Classifier: Programming Language :: Python :: Implementation :: PyPy
- Classifier: Topic :: Internet :: WWW/HTTP
- Classifier: Topic :: Software Development :: Libraries
--Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
-+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*
- Description-Content-Type: text/x-rst
-+License-File: LICENSE.txt
- Provides-Extra: brotli
--Requires-Dist: brotlipy (>=0.6.0) ; extra == 'brotli'
-+Requires-Dist: brotlicffi >=0.8.0 ; ((os_name != "nt" or python_version >= "3") and platform_python_implementation != "CPython") and extra == 'brotli'
-+Requires-Dist: brotli ==1.0.9 ; (os_name != "nt" and python_version < "3" and platform_python_implementation == "CPython") and extra == 'brotli'
-+Requires-Dist: brotlipy >=0.6.0 ; (os_name == "nt" and python_version < "3") and extra == 'brotli'
-+Requires-Dist: brotli >=1.0.9 ; (python_version >= "3" and platform_python_implementation == "CPython") and extra == 'brotli'
- Provides-Extra: secure
--Requires-Dist: pyOpenSSL (>=0.14) ; extra == 'secure'
--Requires-Dist: cryptography (>=1.3.4) ; extra == 'secure'
--Requires-Dist: idna (>=2.0.0) ; extra == 'secure'
-+Requires-Dist: pyOpenSSL >=0.14 ; extra == 'secure'
-+Requires-Dist: cryptography >=1.3.4 ; extra == 'secure'
-+Requires-Dist: idna >=2.0.0 ; extra == 'secure'
- Requires-Dist: certifi ; extra == 'secure'
-+Requires-Dist: urllib3-secure-extra ; extra == 'secure'
- Requires-Dist: ipaddress ; (python_version == "2.7") and extra == 'secure'
- Provides-Extra: socks
--Requires-Dist: PySocks (!=1.5.7,<2.0,>=1.5.6) ; extra == 'socks'
-+Requires-Dist: PySocks !=1.5.7,<2.0,>=1.5.6 ; extra == 'socks'
- 
- 
- urllib3 is a powerful, *user-friendly* HTTP client for Python. Much of the
-@@ -78,8 +83,10 @@ urllib3 can be installed with `pip <https://pip.pypa.io>`_::
- 
- Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_::
- 
--    $ git clone git://github.com/urllib3/urllib3.git
--    $ python setup.py install
-+    $ git clone https://github.com/urllib3/urllib3.git
-+    $ cd urllib3
-+    $ git checkout 1.26.x
-+    $ pip install .
- 
- 
- Documentation
-@@ -148,6 +155,152 @@ For Enterprise
- Changes
- =======
- 
-+1.26.17 (2023-10-02)
-+--------------------
-+
-+* Added the ``Cookie`` header to the list of headers to strip from requests when redirecting to a different host. As before, different headers can be set via ``Retry.remove_headers_on_redirect``.
-+
-+
-+1.26.16 (2023-05-23)
-+--------------------
-+
-+* Fixed thread-safety issue where accessing a ``PoolManager`` with many distinct origins
-+  would cause connection pools to be closed while requests are in progress (`#2954 <https://github.com/urllib3/urllib3/pull/2954>`_)
-+
-+
-+1.26.15 (2023-03-10)
-+--------------------
-+
-+* Fix socket timeout value when ``HTTPConnection`` is reused (`#2645 <https://github.com/urllib3/urllib3/issues/2645>`__)
-+* Remove "!" character from the unreserved characters in IPv6 Zone ID parsing
-+  (`#2899 <https://github.com/urllib3/urllib3/issues/2899>`__)
-+* Fix IDNA handling of '\x80' byte (`#2901 <https://github.com/urllib3/urllib3/issues/2901>`__)
-+
-+1.26.14 (2023-01-11)
-+--------------------
-+
-+* Fixed parsing of port 0 (zero) returning None, instead of 0. (`#2850 <https://github.com/urllib3/urllib3/issues/2850>`__)
-+* Removed deprecated getheaders() calls in contrib module.
-+
-+1.26.13 (2022-11-23)
-+--------------------
-+
-+* Deprecated the ``HTTPResponse.getheaders()`` and ``HTTPResponse.getheader()`` methods.
-+* Fixed an issue where parsing a URL with leading zeroes in the port would be rejected
-+  even when the port number after removing the zeroes was valid.
-+* Fixed a deprecation warning when using cryptography v39.0.0.
-+* Removed the ``<4`` in the ``Requires-Python`` packaging metadata field.
-+
-+
-+1.26.12 (2022-08-22)
-+--------------------
-+
-+* Deprecated the `urllib3[secure]` extra and the `urllib3.contrib.pyopenssl` module.
-+  Both will be removed in v2.x. See this `GitHub issue <https://github.com/urllib3/urllib3/issues/2680>`_
-+  for justification and info on how to migrate.
-+
-+
-+1.26.11 (2022-07-25)
-+--------------------
-+
-+* Fixed an issue where reading more than 2 GiB in a call to ``HTTPResponse.read`` would
-+  raise an ``OverflowError`` on Python 3.9 and earlier.
-+
-+
-+1.26.10 (2022-07-07)
-+--------------------
-+
-+* Removed support for Python 3.5
-+* Fixed an issue where a ``ProxyError`` recommending configuring the proxy as HTTP
-+  instead of HTTPS could appear even when an HTTPS proxy wasn't configured.
-+
-+
-+1.26.9 (2022-03-16)
-+-------------------
-+
-+* Changed ``urllib3[brotli]`` extra to favor installing Brotli libraries that are still
-+  receiving updates like ``brotli`` and ``brotlicffi`` instead of ``brotlipy``.
-+  This change does not impact behavior of urllib3, only which dependencies are installed.
-+* Fixed a socket leaking when ``HTTPSConnection.connect()`` raises an exception.
-+* Fixed ``server_hostname`` being forwarded from ``PoolManager`` to ``HTTPConnectionPool``
-+  when requesting an HTTP URL. Should only be forwarded when requesting an HTTPS URL.
-+
-+
-+1.26.8 (2022-01-07)
-+-------------------
-+
-+* Added extra message to ``urllib3.exceptions.ProxyError`` when urllib3 detects that
-+  a proxy is configured to use HTTPS but the proxy itself appears to only use HTTP.
-+* Added a mention of the size of the connection pool when discarding a connection due to the pool being full.
-+* Added explicit support for Python 3.11.
-+* Deprecated the ``Retry.MAX_BACKOFF`` class property in favor of ``Retry.DEFAULT_MAX_BACKOFF``
-+  to better match the rest of the default parameter names. ``Retry.MAX_BACKOFF`` is removed in v2.0.
-+* Changed location of the vendored ``ssl.match_hostname`` function from ``urllib3.packages.ssl_match_hostname``
-+  to ``urllib3.util.ssl_match_hostname`` to ensure Python 3.10+ compatibility after being repackaged
-+  by downstream distributors.
-+* Fixed absolute imports, all imports are now relative.
-+
-+
-+1.26.7 (2021-09-22)
-+-------------------
-+
-+* Fixed a bug with HTTPS hostname verification involving IP addresses and lack
-+  of SNI. (Issue #2400)
-+* Fixed a bug where IPv6 braces weren't stripped during certificate hostname
-+  matching. (Issue #2240)
-+
-+
-+1.26.6 (2021-06-25)
-+-------------------
-+
-+* Deprecated the ``urllib3.contrib.ntlmpool`` module. urllib3 is not able to support
-+  it properly due to `reasons listed in this issue <https://github.com/urllib3/urllib3/issues/2282>`_.
-+  If you are a user of this module please leave a comment.
-+* Changed ``HTTPConnection.request_chunked()`` to not erroneously emit multiple
-+  ``Transfer-Encoding`` headers in the case that one is already specified.
-+* Fixed typo in deprecation message to recommend ``Retry.DEFAULT_ALLOWED_METHODS``.
-+
-+
-+1.26.5 (2021-05-26)
-+-------------------
-+
-+* Fixed deprecation warnings emitted in Python 3.10.
-+* Updated vendored ``six`` library to 1.16.0.
-+* Improved performance of URL parser when splitting
-+  the authority component.
-+
-+
-+1.26.4 (2021-03-15)
-+-------------------
-+
-+* Changed behavior of the default ``SSLContext`` when connecting to HTTPS proxy
-+  during HTTPS requests. The default ``SSLContext`` now sets ``check_hostname=True``.
-+
-+
-+1.26.3 (2021-01-26)
-+-------------------
-+
-+* Fixed bytes and string comparison issue with headers (Pull #2141)
-+
-+* Changed ``ProxySchemeUnknown`` error message to be
-+  more actionable if the user supplies a proxy URL without
-+  a scheme. (Pull #2107)
-+
-+
-+1.26.2 (2020-11-12)
-+-------------------
-+
-+* Fixed an issue where ``wrap_socket`` and ``CERT_REQUIRED`` wouldn't
-+  be imported properly on Python 2.7.8 and earlier (Pull #2052)
-+
-+
-+1.26.1 (2020-11-11)
-+-------------------
-+
-+* Fixed an issue where two ``User-Agent`` headers would be sent if a
-+  ``User-Agent`` header key is passed as ``bytes`` (Pull #2047)
-+
-+
- 1.26.0 (2020-11-10)
- -------------------
- 
-@@ -1331,5 +1484,3 @@ Changes
- ----------------
- 
- * First release.
--
--
-diff --git a/third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD b/third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD
-new file mode 100644
-index 0000000000000..1afc6580589c0
---- /dev/null
-+++ b/third_party/python/urllib3/urllib3-1.26.17.dist-info/RECORD
-@@ -0,0 +1,44 @@
-+urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
-+urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811
-+urllib3/_version.py,sha256=azoM7M7BUADl2kBhMVR6PPf2GhBDI90me1fcnzTwdcw,64
-+urllib3/connection.py,sha256=92k9td_y4PEiTIjNufCUa1NzMB3J3w0LEdyokYgXnW8,20300
-+urllib3/connectionpool.py,sha256=ItVDasDnPRPP9R8bNxY7tPBlC724nJ9nlxVgXG_SLbI,39990
-+urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
-+urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
-+urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
-+urllib3/poolmanager.py,sha256=0i8cJgrqupza67IBPZ_u9jXvnSxr5UBlVEiUqdkPtYI,19752
-+urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691
-+urllib3/response.py,sha256=UPgLmnHj4z71ZnH8ivYOyncATifTOw9FQukUqDnckCc,30761
-+urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
-+urllib3/contrib/appengine.py,sha256=6IBW6lPOoVUxASPwtn6IH1AATe5DK3lLJCfwyWlLKAE,11012
-+urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528
-+urllib3/contrib/pyopenssl.py,sha256=4AJAlo9NmjWofY4dJwRa4kbZuRuHfNJxu8Pv6yQk1ss,17055
-+urllib3/contrib/securetransport.py,sha256=QOhVbWrFQTKbmV-vtyG69amekkKVxXkdjk9oymaO0Ag,34416
-+urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
-+urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
-+urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
-+urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
-+urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-+urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
-+urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343
-+urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
-+urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
-+urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
-+urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
-+urllib3/util/request.py,sha256=fWiAaa8pwdLLIqoTLBxCC2e4ed80muzKU3e3HWWTzFQ,4225
-+urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
-+urllib3/util/retry.py,sha256=Z6WEf518eTOXP5jr5QSQ9gqJI0DVYt3Xs3EKnYaTmus,22013
-+urllib3/util/ssl_.py,sha256=c0sYiSC6272r6uPkxQpo5rYPP9QC1eR6oI7004gYqZo,17165
-+urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
-+urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
-+urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168
-+urllib3/util/url.py,sha256=kMxL1k0d-aQm_iZDw_zMmnyYyjrIA_DbsMy3cm3V55M,14279
-+urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
-+urllib3-1.26.17.dist-info/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115
-+urllib3-1.26.17.dist-info/METADATA,sha256=swEiQKmb2m5Vl4fygmy4aLSzZjxDjD8q2-_XzuhO9pA,48743
-+urllib3-1.26.17.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
-+urllib3-1.26.17.dist-info/top_level.txt,sha256=EMiXL2sKrTcmrMxIHTqdc3ET54pQI2Y072LexFEemvo,8
-+urllib3-1.26.17.dist-info/RECORD,,
-diff --git a/third_party/python/six/six-1.13.0.dist-info/WHEEL b/third_party/python/urllib3/urllib3-1.26.17.dist-info/WHEEL
-similarity index 70%
-rename from third_party/python/six/six-1.13.0.dist-info/WHEEL
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/WHEEL
-index 8b701e93c2315..c34f1162ef9a5 100644
---- a/third_party/python/six/six-1.13.0.dist-info/WHEEL
-+++ b/third_party/python/urllib3/urllib3-1.26.17.dist-info/WHEEL
-@@ -1,5 +1,5 @@
- Wheel-Version: 1.0
--Generator: bdist_wheel (0.33.6)
-+Generator: bdist_wheel (0.41.2)
- Root-Is-Purelib: true
- Tag: py2-none-any
- Tag: py3-none-any
-diff --git a/third_party/python/urllib3/urllib3-1.26.0.dist-info/top_level.txt b/third_party/python/urllib3/urllib3-1.26.17.dist-info/top_level.txt
-similarity index 100%
-rename from third_party/python/urllib3/urllib3-1.26.0.dist-info/top_level.txt
-rename to third_party/python/urllib3/urllib3-1.26.17.dist-info/top_level.txt
-diff --git a/third_party/python/urllib3/urllib3/__init__.py b/third_party/python/urllib3/urllib3/__init__.py
-index fe86b59d782bd..c6fa38212fb55 100644
---- a/third_party/python/urllib3/urllib3/__init__.py
-+++ b/third_party/python/urllib3/urllib3/__init__.py
-@@ -19,6 +19,23 @@
- from .util.timeout import Timeout
- from .util.url import get_host
- 
-+# === NOTE TO REPACKAGERS AND VENDORS ===
-+# Please delete this block, this logic is only
-+# for urllib3 being distributed via PyPI.
-+# See: https://github.com/urllib3/urllib3/issues/2680
-+try:
-+    import urllib3_secure_extra  # type: ignore # noqa: F401
-+except ImportError:
-+    pass
-+else:
-+    warnings.warn(
-+        "'urllib3[secure]' extra is deprecated and will be removed "
-+        "in a future release of urllib3 2.x. Read more in this issue: "
-+        "https://github.com/urllib3/urllib3/issues/2680",
-+        category=DeprecationWarning,
-+        stacklevel=2,
-+    )
-+
- __author__ = "Andrey Petrov (andrey.petrov@shazow.net)"
- __license__ = "MIT"
- __version__ = __version__
-diff --git a/third_party/python/urllib3/urllib3/_version.py b/third_party/python/urllib3/urllib3/_version.py
-index cee465f88a931..cad75fb5df82a 100644
---- a/third_party/python/urllib3/urllib3/_version.py
-+++ b/third_party/python/urllib3/urllib3/_version.py
-@@ -1,2 +1,2 @@
- # This file is protected via CODEOWNERS
--__version__ = "1.26.0"
-+__version__ = "1.26.17"
-diff --git a/third_party/python/urllib3/urllib3/connection.py b/third_party/python/urllib3/urllib3/connection.py
-index 52487417c946b..54b96b19154cc 100644
---- a/third_party/python/urllib3/urllib3/connection.py
-+++ b/third_party/python/urllib3/urllib3/connection.py
-@@ -43,6 +43,7 @@ class BrokenPipeError(Exception):
-         pass
- 
- 
-+from ._collections import HTTPHeaderDict  # noqa (historical, removed in v2)
- from ._version import __version__
- from .exceptions import (
-     ConnectTimeoutError,
-@@ -50,15 +51,16 @@ class BrokenPipeError(Exception):
-     SubjectAltNameWarning,
-     SystemTimeWarning,
- )
--from .packages.ssl_match_hostname import CertificateError, match_hostname
- from .util import SKIP_HEADER, SKIPPABLE_HEADERS, connection
- from .util.ssl_ import (
-     assert_fingerprint,
-     create_urllib3_context,
-+    is_ipaddress,
-     resolve_cert_reqs,
-     resolve_ssl_version,
-     ssl_wrap_socket,
- )
-+from .util.ssl_match_hostname import CertificateError, match_hostname
- 
- log = logging.getLogger(__name__)
- 
-@@ -66,7 +68,7 @@ class BrokenPipeError(Exception):
- 
- # When it comes time to update this value as a part of regular maintenance
- # (ie test_recent_date is failing) update it to ~6 months before the current date.
--RECENT_DATE = datetime.date(2019, 1, 1)
-+RECENT_DATE = datetime.date(2022, 1, 1)
- 
- _CONTAINS_CONTROL_CHAR_RE = re.compile(r"[^-!#$%&'*+.^_`|~0-9a-zA-Z]")
- 
-@@ -106,6 +108,10 @@ class HTTPConnection(_HTTPConnection, object):
-     #: Whether this connection verifies the host's certificate.
-     is_verified = False
- 
-+    #: Whether this proxy connection (if used) verifies the proxy host's
-+    #: certificate.
-+    proxy_is_verified = None
-+
-     def __init__(self, *args, **kw):
-         if not six.PY2:
-             kw.pop("strict", None)
-@@ -200,7 +206,7 @@ def connect(self):
-         self._prepare_conn(conn)
- 
-     def putrequest(self, method, url, *args, **kwargs):
--        """"""
-+        """ """
-         # Empty docstring because the indentation of CPython's implementation
-         # is broken but we don't want this method in our documentation.
-         match = _CONTAINS_CONTROL_CHAR_RE.search(method)
-@@ -213,8 +219,8 @@ def putrequest(self, method, url, *args, **kwargs):
-         return _HTTPConnection.putrequest(self, method, url, *args, **kwargs)
- 
-     def putheader(self, header, *values):
--        """"""
--        if SKIP_HEADER not in values:
-+        """ """
-+        if not any(isinstance(v, str) and v == SKIP_HEADER for v in values):
-             _HTTPConnection.putheader(self, header, *values)
-         elif six.ensure_str(header.lower()) not in SKIPPABLE_HEADERS:
-             raise ValueError(
-@@ -223,12 +229,17 @@ def putheader(self, header, *values):
-             )
- 
-     def request(self, method, url, body=None, headers=None):
-+        # Update the inner socket's timeout value to send the request.
-+        # This only triggers if the connection is re-used.
-+        if getattr(self, "sock", None) is not None:
-+            self.sock.settimeout(self.timeout)
-+
-         if headers is None:
-             headers = {}
-         else:
-             # Avoid modifying the headers passed into .request()
-             headers = headers.copy()
--        if "user-agent" not in (k.lower() for k in headers):
-+        if "user-agent" not in (six.ensure_str(k.lower()) for k in headers):
-             headers["User-Agent"] = _get_default_user_agent()
-         super(HTTPConnection, self).request(method, url, body=body, headers=headers)
- 
-@@ -248,7 +259,7 @@ def request_chunked(self, method, url, body=None, headers=None):
-             self.putheader("User-Agent", _get_default_user_agent())
-         for header, value in headers.items():
-             self.putheader(header, value)
--        if "transfer-encoding" not in headers:
-+        if "transfer-encoding" not in header_keys:
-             self.putheader("Transfer-Encoding", "chunked")
-         self.endheaders()
- 
-@@ -349,17 +360,15 @@ def set_cert(
- 
-     def connect(self):
-         # Add certificate verification
--        conn = self._new_conn()
-+        self.sock = conn = self._new_conn()
-         hostname = self.host
-         tls_in_tls = False
- 
-         if self._is_using_tunnel():
-             if self.tls_in_tls_required:
--                conn = self._connect_tls_proxy(hostname, conn)
-+                self.sock = conn = self._connect_tls_proxy(hostname, conn)
-                 tls_in_tls = True
- 
--            self.sock = conn
--
-             # Calls self._set_hostport(), so self.host is
-             # self._tunnel_host below.
-             self._tunnel()
-@@ -492,7 +501,7 @@ def _connect_tls_proxy(self, hostname, conn):
- 
-         # If no cert was provided, use only the default options for server
-         # certificate validation
--        return ssl_wrap_socket(
-+        socket = ssl_wrap_socket(
-             sock=conn,
-             ca_certs=self.ca_certs,
-             ca_cert_dir=self.ca_cert_dir,
-@@ -501,8 +510,37 @@ def _connect_tls_proxy(self, hostname, conn):
-             ssl_context=ssl_context,
-         )
- 
-+        if ssl_context.verify_mode != ssl.CERT_NONE and not getattr(
-+            ssl_context, "check_hostname", False
-+        ):
-+            # While urllib3 attempts to always turn off hostname matching from
-+            # the TLS library, this cannot always be done. So we check whether
-+            # the TLS Library still thinks it's matching hostnames.
-+            cert = socket.getpeercert()
-+            if not cert.get("subjectAltName", ()):
-+                warnings.warn(
-+                    (
-+                        "Certificate for {0} has no `subjectAltName`, falling back to check for a "
-+                        "`commonName` for now. This feature is being removed by major browsers and "
-+                        "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 "
-+                        "for details.)".format(hostname)
-+                    ),
-+                    SubjectAltNameWarning,
-+                )
-+            _match_hostname(cert, hostname)
-+
-+        self.proxy_is_verified = ssl_context.verify_mode == ssl.CERT_REQUIRED
-+        return socket
-+
- 
- def _match_hostname(cert, asserted_hostname):
-+    # Our upstream implementation of ssl.match_hostname()
-+    # only applies this normalization to IP addresses so it doesn't
-+    # match DNS SANs so we do the same thing!
-+    stripped_hostname = asserted_hostname.strip("u[]")
-+    if is_ipaddress(stripped_hostname):
-+        asserted_hostname = stripped_hostname
-+
-     try:
-         match_hostname(cert, asserted_hostname)
-     except CertificateError as e:
-diff --git a/third_party/python/urllib3/urllib3/connectionpool.py b/third_party/python/urllib3/urllib3/connectionpool.py
-index 4708c5bfc7862..96844d933745d 100644
---- a/third_party/python/urllib3/urllib3/connectionpool.py
-+++ b/third_party/python/urllib3/urllib3/connectionpool.py
-@@ -2,6 +2,7 @@
- 
- import errno
- import logging
-+import re
- import socket
- import sys
- import warnings
-@@ -35,7 +36,6 @@
- )
- from .packages import six
- from .packages.six.moves import queue
--from .packages.ssl_match_hostname import CertificateError
- from .request import RequestMethods
- from .response import HTTPResponse
- from .util.connection import is_connection_dropped
-@@ -44,11 +44,19 @@
- from .util.request import set_file_position
- from .util.response import assert_header_parsing
- from .util.retry import Retry
-+from .util.ssl_match_hostname import CertificateError
- from .util.timeout import Timeout
- from .util.url import Url, _encode_target
- from .util.url import _normalize_host as normalize_host
- from .util.url import get_host, parse_url
- 
-+try:  # Platform-specific: Python 3
-+    import weakref
-+
-+    weakref_finalize = weakref.finalize
-+except AttributeError:  # Platform-specific: Python 2
-+    from .packages.backports.weakref_finalize import weakref_finalize
-+
- xrange = six.moves.xrange
- 
- log = logging.getLogger(__name__)
-@@ -219,6 +227,16 @@ def __init__(
-             self.conn_kw["proxy"] = self.proxy
-             self.conn_kw["proxy_config"] = self.proxy_config
- 
-+        # Do not pass 'self' as callback to 'finalize'.
-+        # Then the 'finalize' would keep an endless living (leak) to self.
-+        # By just passing a reference to the pool allows the garbage collector
-+        # to free self if nobody else has a reference to it.
-+        pool = self.pool
-+
-+        # Close all the HTTPConnections in the pool before the
-+        # HTTPConnectionPool object is garbage collected.
-+        weakref_finalize(self, _close_pool_connections, pool)
-+
-     def _new_conn(self):
-         """
-         Return a fresh :class:`HTTPConnection`.
-@@ -301,8 +319,11 @@ def _put_conn(self, conn):
-             pass
-         except queue.Full:
-             # This should never happen if self.block == True
--            log.warning("Connection pool is full, discarding connection: %s", self.host)
--
-+            log.warning(
-+                "Connection pool is full, discarding connection: %s. Connection pool size: %s",
-+                self.host,
-+                self.pool.qsize(),
-+            )
-         # Connection never got put back into the pool, close it.
-         if conn:
-             conn.close()
-@@ -318,7 +339,7 @@ def _prepare_proxy(self, conn):
-         pass
- 
-     def _get_timeout(self, timeout):
--        """ Helper that always returns a :class:`urllib3.util.Timeout` """
-+        """Helper that always returns a :class:`urllib3.util.Timeout`"""
-         if timeout is _Default:
-             return self.timeout.clone()
- 
-@@ -375,7 +396,7 @@ def _make_request(
- 
-         timeout_obj = self._get_timeout(timeout)
-         timeout_obj.start_connect()
--        conn.timeout = timeout_obj.connect_timeout
-+        conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout)
- 
-         # Trigger any extra validation we need to do.
-         try:
-@@ -485,14 +506,8 @@ def close(self):
-         # Disable access to the pool
-         old_pool, self.pool = self.pool, None
- 
--        try:
--            while True:
--                conn = old_pool.get(block=False)
--                if conn:
--                    conn.close()
--
--        except queue.Empty:
--            pass  # Done.
-+        # Close all the HTTPConnections in the pool.
-+        _close_pool_connections(old_pool)
- 
-     def is_same_host(self, url):
-         """
-@@ -745,7 +760,35 @@ def urlopen(
-             # Discard the connection for these exceptions. It will be
-             # replaced during the next _get_conn() call.
-             clean_exit = False
--            if isinstance(e, (BaseSSLError, CertificateError)):
-+
-+            def _is_ssl_error_message_from_http_proxy(ssl_error):
-+                # We're trying to detect the message 'WRONG_VERSION_NUMBER' but
-+                # SSLErrors are kinda all over the place when it comes to the message,
-+                # so we try to cover our bases here!
-+                message = " ".join(re.split("[^a-z]", str(ssl_error).lower()))
-+                return (
-+                    "wrong version number" in message or "unknown protocol" in message
-+                )
-+
-+            # Try to detect a common user error with proxies which is to
-+            # set an HTTP proxy to be HTTPS when it should be 'http://'
-+            # (ie {'http': 'http://proxy', 'https': 'https://proxy'})
-+            # Instead we add a nice error message and point to a URL.
-+            if (
-+                isinstance(e, BaseSSLError)
-+                and self.proxy
-+                and _is_ssl_error_message_from_http_proxy(e)
-+                and conn.proxy
-+                and conn.proxy.scheme == "https"
-+            ):
-+                e = ProxyError(
-+                    "Your proxy appears to only use HTTP and not HTTPS, "
-+                    "try changing your proxy URL to be HTTP. See: "
-+                    "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-+                    "#https-proxy-error-http-proxy",
-+                    SSLError(e),
-+                )
-+            elif isinstance(e, (BaseSSLError, CertificateError)):
-                 e = SSLError(e)
-             elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy:
-                 e = ProxyError("Cannot connect to proxy.", e)
-@@ -830,7 +873,7 @@ def urlopen(
-             )
- 
-         # Check if we should retry the HTTP response.
--        has_retry_after = bool(response.getheader("Retry-After"))
-+        has_retry_after = bool(response.headers.get("Retry-After"))
-         if retries.is_retry(method, response.status, has_retry_after):
-             try:
-                 retries = retries.increment(method, url, response=response, _pool=self)
-@@ -1014,12 +1057,23 @@ def _validate_conn(self, conn):
-                 (
-                     "Unverified HTTPS request is being made to host '%s'. "
-                     "Adding certificate verification is strongly advised. See: "
--                    "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
-+                    "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-                     "#ssl-warnings" % conn.host
-                 ),
-                 InsecureRequestWarning,
-             )
- 
-+        if getattr(conn, "proxy_is_verified", None) is False:
-+            warnings.warn(
-+                (
-+                    "Unverified HTTPS connection done to an HTTPS proxy. "
-+                    "Adding certificate verification is strongly advised. See: "
-+                    "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-+                    "#ssl-warnings"
-+                ),
-+                InsecureRequestWarning,
-+            )
-+
- 
- def connection_from_url(url, **kw):
-     """
-@@ -1065,3 +1119,14 @@ def _normalize_host(host, scheme):
-     if host.startswith("[") and host.endswith("]"):
-         host = host[1:-1]
-     return host
-+
-+
-+def _close_pool_connections(pool):
-+    """Drains a queue of connections and closes each one."""
-+    try:
-+        while True:
-+            conn = pool.get(block=False)
-+            if conn:
-+                conn.close()
-+    except queue.Empty:
-+        pass  # Done.
-diff --git a/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py b/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py
-index 11524d400bab2..264d564dbda67 100644
---- a/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py
-+++ b/third_party/python/urllib3/urllib3/contrib/_securetransport/bindings.py
-@@ -48,7 +48,7 @@
- )
- from ctypes.util import find_library
- 
--from urllib3.packages.six import raise_from
-+from ...packages.six import raise_from
- 
- if platform.system() != "Darwin":
-     raise ImportError("Only macOS is supported")
-diff --git a/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py b/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py
-index ed8120190c06f..fa0b245d279e9 100644
---- a/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py
-+++ b/third_party/python/urllib3/urllib3/contrib/_securetransport/low_level.py
-@@ -188,6 +188,7 @@ def _cert_array_from_pem(pem_bundle):
-         # We only want to do that if an error occurs: otherwise, the caller
-         # should free.
-         CoreFoundation.CFRelease(cert_array)
-+        raise
- 
-     return cert_array
- 
-diff --git a/third_party/python/urllib3/urllib3/contrib/appengine.py b/third_party/python/urllib3/urllib3/contrib/appengine.py
-index aa64a0914c601..a5a6d91035f0a 100644
---- a/third_party/python/urllib3/urllib3/contrib/appengine.py
-+++ b/third_party/python/urllib3/urllib3/contrib/appengine.py
-@@ -111,7 +111,7 @@ def __init__(
-         warnings.warn(
-             "urllib3 is using URLFetch on Google App Engine sandbox instead "
-             "of sockets. To use sockets directly instead of URLFetch see "
--            "https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html.",
-+            "https://urllib3.readthedocs.io/en/1.26.x/reference/urllib3.contrib.html.",
-             AppEnginePlatformWarning,
-         )
- 
-@@ -224,7 +224,7 @@ def urlopen(
-                 )
- 
-         # Check if we should retry the HTTP response.
--        has_retry_after = bool(http_response.getheader("Retry-After"))
-+        has_retry_after = bool(http_response.headers.get("Retry-After"))
-         if retries.is_retry(method, http_response.status, has_retry_after):
-             retries = retries.increment(method, url, response=http_response, _pool=self)
-             log.debug("Retry: %s", url)
-diff --git a/third_party/python/urllib3/urllib3/contrib/ntlmpool.py b/third_party/python/urllib3/urllib3/contrib/ntlmpool.py
-index b2df45dcf6065..471665754e9f1 100644
---- a/third_party/python/urllib3/urllib3/contrib/ntlmpool.py
-+++ b/third_party/python/urllib3/urllib3/contrib/ntlmpool.py
-@@ -5,6 +5,7 @@
- """
- from __future__ import absolute_import
- 
-+import warnings
- from logging import getLogger
- 
- from ntlm import ntlm
-@@ -12,6 +13,14 @@
- from .. import HTTPSConnectionPool
- from ..packages.six.moves.http_client import HTTPSConnection
- 
-+warnings.warn(
-+    "The 'urllib3.contrib.ntlmpool' module is deprecated and will be removed "
-+    "in urllib3 v2.0 release, urllib3 is not able to support it properly due "
-+    "to reasons listed in issue: https://github.com/urllib3/urllib3/issues/2282. "
-+    "If you are a user of this module please comment in the mentioned issue.",
-+    DeprecationWarning,
-+)
-+
- log = getLogger(__name__)
- 
- 
-@@ -60,7 +69,7 @@ def _new_conn(self):
-         log.debug("Request headers: %s", headers)
-         conn.request("GET", self.authurl, None, headers)
-         res = conn.getresponse()
--        reshdr = dict(res.getheaders())
-+        reshdr = dict(res.headers)
-         log.debug("Response status: %s %s", res.status, res.reason)
-         log.debug("Response headers: %s", reshdr)
-         log.debug("Response data: %s [...]", res.read(100))
-@@ -92,7 +101,7 @@ def _new_conn(self):
-         conn.request("GET", self.authurl, None, headers)
-         res = conn.getresponse()
-         log.debug("Response status: %s %s", res.status, res.reason)
--        log.debug("Response headers: %s", dict(res.getheaders()))
-+        log.debug("Response headers: %s", dict(res.headers))
-         log.debug("Response data: %s [...]", res.read()[:100])
-         if res.status != 200:
-             if res.status == 401:
-diff --git a/third_party/python/urllib3/urllib3/contrib/pyopenssl.py b/third_party/python/urllib3/urllib3/contrib/pyopenssl.py
-index 0cabab1aed14a..1ed214b1d78fc 100644
---- a/third_party/python/urllib3/urllib3/contrib/pyopenssl.py
-+++ b/third_party/python/urllib3/urllib3/contrib/pyopenssl.py
-@@ -47,10 +47,10 @@
- """
- from __future__ import absolute_import
- 
-+import OpenSSL.crypto
- import OpenSSL.SSL
- from cryptography import x509
- from cryptography.hazmat.backends.openssl import backend as openssl_backend
--from cryptography.hazmat.backends.openssl.x509 import _Certificate
- 
- try:
-     from cryptography.x509 import UnsupportedExtension
-@@ -73,9 +73,19 @@ class UnsupportedExtension(Exception):
- import logging
- import ssl
- import sys
-+import warnings
- 
- from .. import util
- from ..packages import six
-+from ..util.ssl_ import PROTOCOL_TLS_CLIENT
-+
-+warnings.warn(
-+    "'urllib3.contrib.pyopenssl' module is deprecated and will be removed "
-+    "in a future release of urllib3 2.x. Read more in this issue: "
-+    "https://github.com/urllib3/urllib3/issues/2680",
-+    category=DeprecationWarning,
-+    stacklevel=2,
-+)
- 
- __all__ = ["inject_into_urllib3", "extract_from_urllib3"]
- 
-@@ -85,6 +95,7 @@ class UnsupportedExtension(Exception):
- # Map from urllib3 to PyOpenSSL compatible parameter-values.
- _openssl_versions = {
-     util.PROTOCOL_TLS: OpenSSL.SSL.SSLv23_METHOD,
-+    PROTOCOL_TLS_CLIENT: OpenSSL.SSL.SSLv23_METHOD,
-     ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
- }
- 
-@@ -217,9 +228,8 @@ def get_subj_alt_name(peer_cert):
-     if hasattr(peer_cert, "to_cryptography"):
-         cert = peer_cert.to_cryptography()
-     else:
--        # This is technically using private APIs, but should work across all
--        # relevant versions before PyOpenSSL got a proper API for this.
--        cert = _Certificate(openssl_backend, peer_cert._x509)
-+        der = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, peer_cert)
-+        cert = x509.load_der_x509_certificate(der, openssl_backend)
- 
-     # We want to find the SAN extension. Ask Cryptography to locate it (it's
-     # faster than looping in Python)
-@@ -404,7 +414,6 @@ def makefile(self, mode, bufsize=-1):
-         self._makefile_refs += 1
-         return _fileobject(self, mode, bufsize, close=True)
- 
--
- else:  # Platform-specific: Python 3
-     makefile = backport_makefile
- 
-diff --git a/third_party/python/urllib3/urllib3/contrib/securetransport.py b/third_party/python/urllib3/urllib3/contrib/securetransport.py
-index ab092de67a57c..6c46a3b9f0375 100644
---- a/third_party/python/urllib3/urllib3/contrib/securetransport.py
-+++ b/third_party/python/urllib3/urllib3/contrib/securetransport.py
-@@ -67,6 +67,7 @@
- import six
- 
- from .. import util
-+from ..util.ssl_ import PROTOCOL_TLS_CLIENT
- from ._securetransport.bindings import CoreFoundation, Security, SecurityConst
- from ._securetransport.low_level import (
-     _assert_no_error,
-@@ -154,7 +155,8 @@
- # TLSv1 and a high of TLSv1.2. For everything else, we pin to that version.
- # TLSv1 to 1.2 are supported on macOS 10.8+
- _protocol_to_min_max = {
--    util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12)
-+    util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12),
-+    PROTOCOL_TLS_CLIENT: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12),
- }
- 
- if hasattr(ssl, "PROTOCOL_SSLv2"):
-@@ -768,7 +770,6 @@ def makefile(self, mode, bufsize=-1):
-         self._makefile_refs += 1
-         return _fileobject(self, mode, bufsize, close=True)
- 
--
- else:  # Platform-specific: Python 3
- 
-     def makefile(self, mode="r", buffering=None, *args, **kwargs):
-diff --git a/third_party/python/urllib3/urllib3/contrib/socks.py b/third_party/python/urllib3/urllib3/contrib/socks.py
-index 93df8325d59c4..c326e80dd1174 100644
---- a/third_party/python/urllib3/urllib3/contrib/socks.py
-+++ b/third_party/python/urllib3/urllib3/contrib/socks.py
-@@ -51,7 +51,7 @@
-         (
-             "SOCKS support in urllib3 requires the installation of optional "
-             "dependencies: specifically, PySocks.  For more information, see "
--            "https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies"
-+            "https://urllib3.readthedocs.io/en/1.26.x/contrib.html#socks-proxies"
-         ),
-         DependencyWarning,
-     )
-diff --git a/third_party/python/urllib3/urllib3/exceptions.py b/third_party/python/urllib3/urllib3/exceptions.py
-index d69958d5dfc29..cba6f3f560f71 100644
---- a/third_party/python/urllib3/urllib3/exceptions.py
-+++ b/third_party/python/urllib3/urllib3/exceptions.py
-@@ -289,7 +289,17 @@ class ProxySchemeUnknown(AssertionError, URLSchemeUnknown):
-     # TODO(t-8ch): Stop inheriting from AssertionError in v2.0.
- 
-     def __init__(self, scheme):
--        message = "Not supported proxy scheme %s" % scheme
-+        # 'localhost' is here because our URL parser parses
-+        # localhost:8080 -> scheme=localhost, remove if we fix this.
-+        if scheme == "localhost":
-+            scheme = None
-+        if scheme is None:
-+            message = "Proxy URL had no scheme, should start with http:// or https://"
-+        else:
-+            message = (
-+                "Proxy URL had unsupported scheme %s, should use http:// or https://"
-+                % scheme
-+            )
-         super(ProxySchemeUnknown, self).__init__(message)
- 
- 
-diff --git a/third_party/python/urllib3/urllib3/packages/__init__.py b/third_party/python/urllib3/urllib3/packages/__init__.py
-index fce4caa65d2ee..e69de29bb2d1d 100644
---- a/third_party/python/urllib3/urllib3/packages/__init__.py
-+++ b/third_party/python/urllib3/urllib3/packages/__init__.py
-@@ -1,5 +0,0 @@
--from __future__ import absolute_import
--
--from . import ssl_match_hostname
--
--__all__ = ("ssl_match_hostname",)
-diff --git a/third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py b/third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py
-new file mode 100644
-index 0000000000000..a2f2966e54966
---- /dev/null
-+++ b/third_party/python/urllib3/urllib3/packages/backports/weakref_finalize.py
-@@ -0,0 +1,155 @@
-+# -*- coding: utf-8 -*-
-+"""
-+backports.weakref_finalize
-+~~~~~~~~~~~~~~~~~~
-+
-+Backports the Python 3 ``weakref.finalize`` method.
-+"""
-+from __future__ import absolute_import
-+
-+import itertools
-+import sys
-+from weakref import ref
-+
-+__all__ = ["weakref_finalize"]
-+
-+
-+class weakref_finalize(object):
-+    """Class for finalization of weakrefable objects
-+    finalize(obj, func, *args, **kwargs) returns a callable finalizer
-+    object which will be called when obj is garbage collected. The
-+    first time the finalizer is called it evaluates func(*arg, **kwargs)
-+    and returns the result. After this the finalizer is dead, and
-+    calling it just returns None.
-+    When the program exits any remaining finalizers for which the
-+    atexit attribute is true will be run in reverse order of creation.
-+    By default atexit is true.
-+    """
-+
-+    # Finalizer objects don't have any state of their own.  They are
-+    # just used as keys to lookup _Info objects in the registry.  This
-+    # ensures that they cannot be part of a ref-cycle.
-+
-+    __slots__ = ()
-+    _registry = {}
-+    _shutdown = False
-+    _index_iter = itertools.count()
-+    _dirty = False
-+    _registered_with_atexit = False
-+
-+    class _Info(object):
-+        __slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index")
-+
-+    def __init__(self, obj, func, *args, **kwargs):
-+        if not self._registered_with_atexit:
-+            # We may register the exit function more than once because
-+            # of a thread race, but that is harmless
-+            import atexit
-+
-+            atexit.register(self._exitfunc)
-+            weakref_finalize._registered_with_atexit = True
-+        info = self._Info()
-+        info.weakref = ref(obj, self)
-+        info.func = func
-+        info.args = args
-+        info.kwargs = kwargs or None
-+        info.atexit = True
-+        info.index = next(self._index_iter)
-+        self._registry[self] = info
-+        weakref_finalize._dirty = True
-+
-+    def __call__(self, _=None):
-+        """If alive then mark as dead and return func(*args, **kwargs);
-+        otherwise return None"""
-+        info = self._registry.pop(self, None)
-+        if info and not self._shutdown:
-+            return info.func(*info.args, **(info.kwargs or {}))
-+
-+    def detach(self):
-+        """If alive then mark as dead and return (obj, func, args, kwargs);
-+        otherwise return None"""
-+        info = self._registry.get(self)
-+        obj = info and info.weakref()
-+        if obj is not None and self._registry.pop(self, None):
-+            return (obj, info.func, info.args, info.kwargs or {})
-+
-+    def peek(self):
-+        """If alive then return (obj, func, args, kwargs);
-+        otherwise return None"""
-+        info = self._registry.get(self)
-+        obj = info and info.weakref()
-+        if obj is not None:
-+            return (obj, info.func, info.args, info.kwargs or {})
-+
-+    @property
-+    def alive(self):
-+        """Whether finalizer is alive"""
-+        return self in self._registry
-+
-+    @property
-+    def atexit(self):
-+        """Whether finalizer should be called at exit"""
-+        info = self._registry.get(self)
-+        return bool(info) and info.atexit
-+
-+    @atexit.setter
-+    def atexit(self, value):
-+        info = self._registry.get(self)
-+        if info:
-+            info.atexit = bool(value)
-+
-+    def __repr__(self):
-+        info = self._registry.get(self)
-+        obj = info and info.weakref()
-+        if obj is None:
-+            return "<%s object at %#x; dead>" % (type(self).__name__, id(self))
-+        else:
-+            return "<%s object at %#x; for %r at %#x>" % (
-+                type(self).__name__,
-+                id(self),
-+                type(obj).__name__,
-+                id(obj),
-+            )
-+
-+    @classmethod
-+    def _select_for_exit(cls):
-+        # Return live finalizers marked for exit, oldest first
-+        L = [(f, i) for (f, i) in cls._registry.items() if i.atexit]
-+        L.sort(key=lambda item: item[1].index)
-+        return [f for (f, i) in L]
-+
-+    @classmethod
-+    def _exitfunc(cls):
-+        # At shutdown invoke finalizers for which atexit is true.
-+        # This is called once all other non-daemonic threads have been
-+        # joined.
-+        reenable_gc = False
-+        try:
-+            if cls._registry:
-+                import gc
-+
-+                if gc.isenabled():
-+                    reenable_gc = True
-+                    gc.disable()
-+                pending = None
-+                while True:
-+                    if pending is None or weakref_finalize._dirty:
-+                        pending = cls._select_for_exit()
-+                        weakref_finalize._dirty = False
-+                    if not pending:
-+                        break
-+                    f = pending.pop()
-+                    try:
-+                        # gc is disabled, so (assuming no daemonic
-+                        # threads) the following is the only line in
-+                        # this function which might trigger creation
-+                        # of a new finalizer
-+                        f()
-+                    except Exception:
-+                        sys.excepthook(*sys.exc_info())
-+                    assert f not in cls._registry
-+        finally:
-+            # prevent any more finalizers from executing during shutdown
-+            weakref_finalize._shutdown = True
-+            if reenable_gc:
-+                gc.enable()
-diff --git a/third_party/python/urllib3/urllib3/packages/six.py b/third_party/python/urllib3/urllib3/packages/six.py
-index 314424099f624..f099a3dcd28d2 100644
---- a/third_party/python/urllib3/urllib3/packages/six.py
-+++ b/third_party/python/urllib3/urllib3/packages/six.py
-@@ -1,4 +1,4 @@
--# Copyright (c) 2010-2019 Benjamin Peterson
-+# Copyright (c) 2010-2020 Benjamin Peterson
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
-@@ -29,7 +29,7 @@
- import types
- 
- __author__ = "Benjamin Peterson <benjamin@python.org>"
--__version__ = "1.12.0"
-+__version__ = "1.16.0"
- 
- 
- # Useful for very coarse version differentiation.
-@@ -71,6 +71,11 @@ def __len__(self):
-             MAXSIZE = int((1 << 63) - 1)
-         del X
- 
-+if PY34:
-+    from importlib.util import spec_from_loader
-+else:
-+    spec_from_loader = None
-+
- 
- def _add_doc(func, doc):
-     """Add documentation to a function."""
-@@ -182,6 +187,11 @@ def find_module(self, fullname, path=None):
-             return self
-         return None
- 
-+    def find_spec(self, fullname, path, target=None):
-+        if fullname in self.known_modules:
-+            return spec_from_loader(fullname, self)
-+        return None
-+
-     def __get_module(self, fullname):
-         try:
-             return self.known_modules[fullname]
-@@ -220,6 +230,12 @@ def get_code(self, fullname):
- 
-     get_source = get_code  # same as get_code
- 
-+    def create_module(self, spec):
-+        return self.load_module(spec.name)
-+
-+    def exec_module(self, module):
-+        pass
-+
- 
- _importer = _SixMetaPathImporter(__name__)
- 
-@@ -260,9 +276,19 @@ class _MovedItems(_LazyModule):
-     ),
-     MovedModule("builtins", "__builtin__"),
-     MovedModule("configparser", "ConfigParser"),
-+    MovedModule(
-+        "collections_abc",
-+        "collections",
-+        "collections.abc" if sys.version_info >= (3, 3) else "collections",
-+    ),
-     MovedModule("copyreg", "copy_reg"),
-     MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
--    MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"),
-+    MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"),
-+    MovedModule(
-+        "_dummy_thread",
-+        "dummy_thread",
-+        "_dummy_thread" if sys.version_info < (3, 9) else "_thread",
-+    ),
-     MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
-     MovedModule("http_cookies", "Cookie", "http.cookies"),
-     MovedModule("html_entities", "htmlentitydefs", "html.entities"),
-@@ -307,7 +333,9 @@ class _MovedItems(_LazyModule):
- ]
- # Add windows specific modules.
- if sys.platform == "win32":
--    _moved_attributes += [MovedModule("winreg", "_winreg")]
-+    _moved_attributes += [
-+        MovedModule("winreg", "_winreg"),
-+    ]
- 
- for attr in _moved_attributes:
-     setattr(_MovedItems, attr.name, attr)
-@@ -476,7 +504,7 @@ class Module_six_moves_urllib_robotparser(_LazyModule):
- 
- 
- _urllib_robotparser_moved_attributes = [
--    MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser")
-+    MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"),
- ]
- for attr in _urllib_robotparser_moved_attributes:
-     setattr(Module_six_moves_urllib_robotparser, attr.name, attr)
-@@ -678,9 +706,11 @@ def u(s):
-     if sys.version_info[1] <= 1:
-         _assertRaisesRegex = "assertRaisesRegexp"
-         _assertRegex = "assertRegexpMatches"
-+        _assertNotRegex = "assertNotRegexpMatches"
-     else:
-         _assertRaisesRegex = "assertRaisesRegex"
-         _assertRegex = "assertRegex"
-+        _assertNotRegex = "assertNotRegex"
- else:
- 
-     def b(s):
-@@ -707,6 +737,7 @@ def indexbytes(buf, i):
-     _assertCountEqual = "assertItemsEqual"
-     _assertRaisesRegex = "assertRaisesRegexp"
-     _assertRegex = "assertRegexpMatches"
-+    _assertNotRegex = "assertNotRegexpMatches"
- _add_doc(b, """Byte literal""")
- _add_doc(u, """Text literal""")
- 
-@@ -723,6 +754,10 @@ def assertRegex(self, *args, **kwargs):
-     return getattr(self, _assertRegex)(*args, **kwargs)
- 
- 
-+def assertNotRegex(self, *args, **kwargs):
-+    return getattr(self, _assertNotRegex)(*args, **kwargs)
-+
-+
- if PY3:
-     exec_ = getattr(moves.builtins, "exec")
- 
-@@ -737,7 +772,6 @@ def reraise(tp, value, tb=None):
-             value = None
-             tb = None
- 
--
- else:
- 
-     def exec_(_code_, _globs_=None, _locs_=None):
-@@ -750,7 +784,7 @@ def exec_(_code_, _globs_=None, _locs_=None):
-             del frame
-         elif _locs_ is None:
-             _locs_ = _globs_
--        exec("""exec _code_ in _globs_, _locs_""")
-+        exec ("""exec _code_ in _globs_, _locs_""")
- 
-     exec_(
-         """def reraise(tp, value, tb=None):
-@@ -762,18 +796,7 @@ def exec_(_code_, _globs_=None, _locs_=None):
-     )
- 
- 
--if sys.version_info[:2] == (3, 2):
--    exec_(
--        """def raise_from(value, from_value):
--    try:
--        if from_value is None:
--            raise value
--        raise value from from_value
--    finally:
--        value = None
--"""
--    )
--elif sys.version_info[:2] > (3, 2):
-+if sys.version_info[:2] > (3,):
-     exec_(
-         """def raise_from(value, from_value):
-     try:
-@@ -863,19 +886,41 @@ def print_(*args, **kwargs):
- _add_doc(reraise, """Reraise an exception.""")
- 
- if sys.version_info[0:2] < (3, 4):
-+    # This does exactly the same what the :func:`py3:functools.update_wrapper`
-+    # function does on Python versions after 3.2. It sets the ``__wrapped__``
-+    # attribute on ``wrapper`` object and it doesn't raise an error if any of
-+    # the attributes mentioned in ``assigned`` and ``updated`` are missing on
-+    # ``wrapped`` object.
-+    def _update_wrapper(
-+        wrapper,
-+        wrapped,
-+        assigned=functools.WRAPPER_ASSIGNMENTS,
-+        updated=functools.WRAPPER_UPDATES,
-+    ):
-+        for attr in assigned:
-+            try:
-+                value = getattr(wrapped, attr)
-+            except AttributeError:
-+                continue
-+            else:
-+                setattr(wrapper, attr, value)
-+        for attr in updated:
-+            getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
-+        wrapper.__wrapped__ = wrapped
-+        return wrapper
-+
-+    _update_wrapper.__doc__ = functools.update_wrapper.__doc__
- 
-     def wraps(
-         wrapped,
-         assigned=functools.WRAPPER_ASSIGNMENTS,
-         updated=functools.WRAPPER_UPDATES,
-     ):
--        def wrapper(f):
--            f = functools.wraps(wrapped, assigned, updated)(f)
--            f.__wrapped__ = wrapped
--            return f
--
--        return wrapper
-+        return functools.partial(
-+            _update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated
-+        )
- 
-+    wraps.__doc__ = functools.wraps.__doc__
- 
- else:
-     wraps = functools.wraps
-@@ -888,7 +933,15 @@ def with_metaclass(meta, *bases):
-     # the actual metaclass.
-     class metaclass(type):
-         def __new__(cls, name, this_bases, d):
--            return meta(name, bases, d)
-+            if sys.version_info[:2] >= (3, 7):
-+                # This version introduced PEP 560 that requires a bit
-+                # of extra care (we mimic what is done by __build_class__).
-+                resolved_bases = types.resolve_bases(bases)
-+                if resolved_bases is not bases:
-+                    d["__orig_bases__"] = bases
-+            else:
-+                resolved_bases = bases
-+            return meta(name, resolved_bases, d)
- 
-         @classmethod
-         def __prepare__(cls, name, this_bases):
-@@ -928,12 +981,11 @@ def ensure_binary(s, encoding="utf-8", errors="strict"):
-       - `str` -> encoded to `bytes`
-       - `bytes` -> `bytes`
-     """
-+    if isinstance(s, binary_type):
-+        return s
-     if isinstance(s, text_type):
-         return s.encode(encoding, errors)
--    elif isinstance(s, binary_type):
--        return s
--    else:
--        raise TypeError("not expecting type '%s'" % type(s))
-+    raise TypeError("not expecting type '%s'" % type(s))
- 
- 
- def ensure_str(s, encoding="utf-8", errors="strict"):
-@@ -947,12 +999,15 @@ def ensure_str(s, encoding="utf-8", errors="strict"):
-       - `str` -> `str`
-       - `bytes` -> decoded to `str`
-     """
--    if not isinstance(s, (text_type, binary_type)):
--        raise TypeError("not expecting type '%s'" % type(s))
-+    # Optimization: Fast return for the common case.
-+    if type(s) is str:
-+        return s
-     if PY2 and isinstance(s, text_type):
--        s = s.encode(encoding, errors)
-+        return s.encode(encoding, errors)
-     elif PY3 and isinstance(s, binary_type):
--        s = s.decode(encoding, errors)
-+        return s.decode(encoding, errors)
-+    elif not isinstance(s, (text_type, binary_type)):
-+        raise TypeError("not expecting type '%s'" % type(s))
-     return s
- 
- 
-@@ -977,7 +1032,7 @@ def ensure_text(s, encoding="utf-8", errors="strict"):
- 
- def python_2_unicode_compatible(klass):
-     """
--    A decorator that defines __unicode__ and __str__ methods under Python 2.
-+    A class decorator that defines __unicode__ and __str__ methods under Python 2.
-     Under Python 3 it does nothing.
- 
-     To support Python 2 and 3 with a single code base, define a __str__ method
-diff --git a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py b/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py
-deleted file mode 100644
-index 6b12fd90aadec..0000000000000
---- a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/__init__.py
-+++ /dev/null
-@@ -1,22 +0,0 @@
--import sys
--
--try:
--    # Our match_hostname function is the same as 3.5's, so we only want to
--    # import the match_hostname function if it's at least that good.
--    if sys.version_info < (3, 5):
--        raise ImportError("Fallback to vendored code")
--
--    from ssl import CertificateError, match_hostname
--except ImportError:
--    try:
--        # Backport of the function from a pypi module
--        from backports.ssl_match_hostname import (  # type: ignore
--            CertificateError,
--            match_hostname,
--        )
--    except ImportError:
--        # Our vendored copy
--        from ._implementation import CertificateError, match_hostname  # type: ignore
--
--# Not needed, but documenting what we provide.
--__all__ = ("CertificateError", "match_hostname")
-diff --git a/third_party/python/urllib3/urllib3/poolmanager.py b/third_party/python/urllib3/urllib3/poolmanager.py
-index 3a31a285bf648..14b10daf3a962 100644
---- a/third_party/python/urllib3/urllib3/poolmanager.py
-+++ b/third_party/python/urllib3/urllib3/poolmanager.py
-@@ -34,6 +34,7 @@
-     "ca_cert_dir",
-     "ssl_context",
-     "key_password",
-+    "server_hostname",
- )
- 
- # All known keyword arguments that could be provided to the pool manager, its
-@@ -170,7 +171,7 @@ class PoolManager(RequestMethods):
-     def __init__(self, num_pools=10, headers=None, **connection_pool_kw):
-         RequestMethods.__init__(self, headers)
-         self.connection_pool_kw = connection_pool_kw
--        self.pools = RecentlyUsedContainer(num_pools, dispose_func=lambda p: p.close())
-+        self.pools = RecentlyUsedContainer(num_pools)
- 
-         # Locally set the pool classes and keys so other PoolManagers can
-         # override them.
-diff --git a/third_party/python/urllib3/urllib3/request.py b/third_party/python/urllib3/urllib3/request.py
-index 398386a5b9f61..3b4cf999225b8 100644
---- a/third_party/python/urllib3/urllib3/request.py
-+++ b/third_party/python/urllib3/urllib3/request.py
-@@ -1,6 +1,9 @@
- from __future__ import absolute_import
- 
-+import sys
-+
- from .filepost import encode_multipart_formdata
-+from .packages import six
- from .packages.six.moves.urllib.parse import urlencode
- 
- __all__ = ["RequestMethods"]
-@@ -168,3 +171,21 @@ def request_encode_body(
-         extra_kw.update(urlopen_kw)
- 
-         return self.urlopen(method, url, **extra_kw)
-+
-+
-+if not six.PY2:
-+
-+    class RequestModule(sys.modules[__name__].__class__):
-+        def __call__(self, *args, **kwargs):
-+            """
-+            If user tries to call this module directly urllib3 v2.x style raise an error to the user
-+            suggesting they may need urllib3 v2
-+            """
-+            raise TypeError(
-+                "'module' object is not callable\n"
-+                "urllib3.request() method is not supported in this release, "
-+                "upgrade to urllib3 v2 to use it\n"
-+                "see https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html"
-+            )
-+
-+    sys.modules[__name__].__class__ = RequestModule
-diff --git a/third_party/python/urllib3/urllib3/response.py b/third_party/python/urllib3/urllib3/response.py
-index 38693f4fc6e33..0bd13d40b8ac7 100644
---- a/third_party/python/urllib3/urllib3/response.py
-+++ b/third_party/python/urllib3/urllib3/response.py
-@@ -2,16 +2,22 @@
- 
- import io
- import logging
-+import sys
-+import warnings
- import zlib
- from contextlib import contextmanager
- from socket import error as SocketError
- from socket import timeout as SocketTimeout
- 
- try:
--    import brotli
-+    try:
-+        import brotlicffi as brotli
-+    except ImportError:
-+        import brotli
- except ImportError:
-     brotli = None
- 
-+from . import util
- from ._collections import HTTPHeaderDict
- from .connection import BaseSSLError, HTTPException
- from .exceptions import (
-@@ -478,6 +484,54 @@ def _error_catcher(self):
-             if self._original_response and self._original_response.isclosed():
-                 self.release_conn()
- 
-+    def _fp_read(self, amt):
-+        """
-+        Read a response with the thought that reading the number of bytes
-+        larger than can fit in a 32-bit int at a time via SSL in some
-+        known cases leads to an overflow error that has to be prevented
-+        if `amt` or `self.length_remaining` indicate that a problem may
-+        happen.
-+
-+        The known cases:
-+          * 3.8 <= CPython < 3.9.7 because of a bug
-+            https://github.com/urllib3/urllib3/issues/2513#issuecomment-1152559900.
-+          * urllib3 injected with pyOpenSSL-backed SSL-support.
-+          * CPython < 3.10 only when `amt` does not fit 32-bit int.
-+        """
-+        assert self._fp
-+        c_int_max = 2 ** 31 - 1
-+        if (
-+            (
-+                (amt and amt > c_int_max)
-+                or (self.length_remaining and self.length_remaining > c_int_max)
-+            )
-+            and not util.IS_SECURETRANSPORT
-+            and (util.IS_PYOPENSSL or sys.version_info < (3, 10))
-+        ):
-+            buffer = io.BytesIO()
-+            # Besides `max_chunk_amt` being a maximum chunk size, it
-+            # affects memory overhead of reading a response by this
-+            # method in CPython.
-+            # `c_int_max` equal to 2 GiB - 1 byte is the actual maximum
-+            # chunk size that does not lead to an overflow error, but
-+            # 256 MiB is a compromise.
-+            max_chunk_amt = 2 ** 28
-+            while amt is None or amt != 0:
-+                if amt is not None:
-+                    chunk_amt = min(amt, max_chunk_amt)
-+                    amt -= chunk_amt
-+                else:
-+                    chunk_amt = max_chunk_amt
-+                data = self._fp.read(chunk_amt)
-+                if not data:
-+                    break
-+                buffer.write(data)
-+                del data  # to reduce peak memory usage by `max_chunk_amt`.
-+            return buffer.getvalue()
-+        else:
-+            # StringIO doesn't like amt=None
-+            return self._fp.read(amt) if amt is not None else self._fp.read()
-+
-     def read(self, amt=None, decode_content=None, cache_content=False):
-         """
-         Similar to :meth:`http.client.HTTPResponse.read`, but with two additional
-@@ -510,13 +564,11 @@ def read(self, amt=None, decode_content=None, cache_content=False):
-         fp_closed = getattr(self._fp, "closed", False)
- 
-         with self._error_catcher():
-+            data = self._fp_read(amt) if not fp_closed else b""
-             if amt is None:
--                # cStringIO doesn't like amt=None
--                data = self._fp.read() if not fp_closed else b""
-                 flush_decoder = True
-             else:
-                 cache_content = False
--                data = self._fp.read(amt) if not fp_closed else b""
-                 if (
-                     amt != 0 and not data
-                 ):  # Platform-specific: Buggy versions of Python.
-@@ -612,9 +664,21 @@ def from_httplib(ResponseCls, r, **response_kw):
- 
-     # Backwards-compatibility methods for http.client.HTTPResponse
-     def getheaders(self):
-+        warnings.warn(
-+            "HTTPResponse.getheaders() is deprecated and will be removed "
-+            "in urllib3 v2.1.0. Instead access HTTPResponse.headers directly.",
-+            category=DeprecationWarning,
-+            stacklevel=2,
-+        )
-         return self.headers
- 
-     def getheader(self, name, default=None):
-+        warnings.warn(
-+            "HTTPResponse.getheader() is deprecated and will be removed "
-+            "in urllib3 v2.1.0. Instead use HTTPResponse.headers.get(name, default).",
-+            category=DeprecationWarning,
-+            stacklevel=2,
-+        )
-         return self.headers.get(name, default)
- 
-     # Backwards compatibility for http.cookiejar
-diff --git a/third_party/python/urllib3/urllib3/util/connection.py b/third_party/python/urllib3/urllib3/util/connection.py
-index cd57455748be0..6af1138f260e4 100644
---- a/third_party/python/urllib3/urllib3/util/connection.py
-+++ b/third_party/python/urllib3/urllib3/util/connection.py
-@@ -2,9 +2,8 @@
- 
- import socket
- 
--from urllib3.exceptions import LocationParseError
--
- from ..contrib import _appengine_environ
-+from ..exceptions import LocationParseError
- from ..packages import six
- from .wait import NoWayToWaitForSocketError, wait_for_read
- 
-@@ -118,7 +117,7 @@ def allowed_gai_family():
- 
- 
- def _has_ipv6(host):
--    """ Returns True if the system can bind an IPv6 address. """
-+    """Returns True if the system can bind an IPv6 address."""
-     sock = None
-     has_ipv6 = False
- 
-diff --git a/third_party/python/urllib3/urllib3/util/proxy.py b/third_party/python/urllib3/urllib3/util/proxy.py
-index 34f884d5b314d..2199cc7b7f004 100644
---- a/third_party/python/urllib3/urllib3/util/proxy.py
-+++ b/third_party/python/urllib3/urllib3/util/proxy.py
-@@ -45,6 +45,7 @@ def create_proxy_ssl_context(
-         ssl_version=resolve_ssl_version(ssl_version),
-         cert_reqs=resolve_cert_reqs(cert_reqs),
-     )
-+
-     if (
-         not ca_certs
-         and not ca_cert_dir
-diff --git a/third_party/python/urllib3/urllib3/util/request.py b/third_party/python/urllib3/urllib3/util/request.py
-index 25103383ec7ab..b574b081e98a0 100644
---- a/third_party/python/urllib3/urllib3/util/request.py
-+++ b/third_party/python/urllib3/urllib3/util/request.py
-@@ -14,7 +14,10 @@
- 
- ACCEPT_ENCODING = "gzip,deflate"
- try:
--    import brotli as _unused_module_brotli  # noqa: F401
-+    try:
-+        import brotlicffi as _unused_module_brotli  # noqa: F401
-+    except ImportError:
-+        import brotli as _unused_module_brotli  # noqa: F401
- except ImportError:
-     pass
- else:
-diff --git a/third_party/python/urllib3/urllib3/util/retry.py b/third_party/python/urllib3/urllib3/util/retry.py
-index ee51f922f8452..60ef6c4f3f9d0 100644
---- a/third_party/python/urllib3/urllib3/util/retry.py
-+++ b/third_party/python/urllib3/urllib3/util/retry.py
-@@ -37,7 +37,7 @@ class _RetryMeta(type):
-     def DEFAULT_METHOD_WHITELIST(cls):
-         warnings.warn(
-             "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and "
--            "will be removed in v2.0. Use 'Retry.DEFAULT_METHODS_ALLOWED' instead",
-+            "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead",
-             DeprecationWarning,
-         )
-         return cls.DEFAULT_ALLOWED_METHODS
-@@ -69,6 +69,24 @@ def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls, value):
-         )
-         cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT = value
- 
-+    @property
-+    def BACKOFF_MAX(cls):
-+        warnings.warn(
-+            "Using 'Retry.BACKOFF_MAX' is deprecated and "
-+            "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead",
-+            DeprecationWarning,
-+        )
-+        return cls.DEFAULT_BACKOFF_MAX
-+
-+    @BACKOFF_MAX.setter
-+    def BACKOFF_MAX(cls, value):
-+        warnings.warn(
-+            "Using 'Retry.BACKOFF_MAX' is deprecated and "
-+            "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead",
-+            DeprecationWarning,
-+        )
-+        cls.DEFAULT_BACKOFF_MAX = value
-+
- 
- @six.add_metaclass(_RetryMeta)
- class Retry(object):
-@@ -181,7 +199,7 @@ class Retry(object):
- 
-         seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep
-         for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer
--        than :attr:`Retry.BACKOFF_MAX`.
-+        than :attr:`Retry.DEFAULT_BACKOFF_MAX`.
- 
-         By default, backoff is disabled (set to 0).
- 
-@@ -217,10 +235,10 @@ class Retry(object):
-     RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503])
- 
-     #: Default headers to be used for ``remove_headers_on_redirect``
--    DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(["Authorization"])
-+    DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(["Cookie", "Authorization"])
- 
-     #: Maximum backoff time.
--    BACKOFF_MAX = 120
-+    DEFAULT_BACKOFF_MAX = 120
- 
-     def __init__(
-         self,
-@@ -253,6 +271,7 @@ def __init__(
-                 "Using 'method_whitelist' with Retry is deprecated and "
-                 "will be removed in v2.0. Use 'allowed_methods' instead",
-                 DeprecationWarning,
-+                stacklevel=2,
-             )
-             allowed_methods = method_whitelist
-         if allowed_methods is _Default:
-@@ -320,7 +339,7 @@ def new(self, **kw):
- 
-     @classmethod
-     def from_int(cls, retries, redirect=True, default=None):
--        """ Backwards-compatibility for the old retries format."""
-+        """Backwards-compatibility for the old retries format."""
-         if retries is None:
-             retries = default if default is not None else cls.DEFAULT
- 
-@@ -347,7 +366,7 @@ def get_backoff_time(self):
-             return 0
- 
-         backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1))
--        return min(self.BACKOFF_MAX, backoff_value)
-+        return min(self.DEFAULT_BACKOFF_MAX, backoff_value)
- 
-     def parse_retry_after(self, retry_after):
-         # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4
-@@ -373,9 +392,9 @@ def parse_retry_after(self, retry_after):
-         return seconds
- 
-     def get_retry_after(self, response):
--        """ Get the value of Retry-After in seconds. """
-+        """Get the value of Retry-After in seconds."""
- 
--        retry_after = response.getheader("Retry-After")
-+        retry_after = response.headers.get("Retry-After")
- 
-         if retry_after is None:
-             return None
-@@ -467,7 +486,7 @@ def is_retry(self, method, status_code, has_retry_after=False):
-         )
- 
-     def is_exhausted(self):
--        """ Are we out of retries? """
-+        """Are we out of retries?"""
-         retry_counts = (
-             self.total,
-             self.connect,
-diff --git a/third_party/python/urllib3/urllib3/util/ssl_.py b/third_party/python/urllib3/urllib3/util/ssl_.py
-index 1cb5e7cdc1c0c..8f867812a5eb3 100644
---- a/third_party/python/urllib3/urllib3/util/ssl_.py
-+++ b/third_party/python/urllib3/urllib3/util/ssl_.py
-@@ -44,13 +44,21 @@ def _const_compare_digest_backport(a, b):
- 
- try:  # Test for SSL features
-     import ssl
--    from ssl import HAS_SNI  # Has SNI?
-     from ssl import CERT_REQUIRED, wrap_socket
-+except ImportError:
-+    pass
-+
-+try:
-+    from ssl import HAS_SNI  # Has SNI?
-+except ImportError:
-+    pass
- 
-+try:
-     from .ssltransport import SSLTransport
- except ImportError:
-     pass
- 
-+
- try:  # Platform-specific: Python 3.6
-     from ssl import PROTOCOL_TLS
- 
-@@ -63,6 +71,11 @@ def _const_compare_digest_backport(a, b):
-     except ImportError:
-         PROTOCOL_SSLv23 = PROTOCOL_TLS = 2
- 
-+try:
-+    from ssl import PROTOCOL_TLS_CLIENT
-+except ImportError:
-+    PROTOCOL_TLS_CLIENT = PROTOCOL_TLS
-+
- 
- try:
-     from ssl import OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3
-@@ -151,7 +164,7 @@ def wrap_socket(self, socket, server_hostname=None, server_side=False):
-                 "urllib3 from configuring SSL appropriately and may cause "
-                 "certain SSL connections to fail. You can upgrade to a newer "
-                 "version of Python to solve this. For more information, see "
--                "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
-+                "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-                 "#ssl-warnings",
-                 InsecurePlatformWarning,
-             )
-@@ -270,7 +283,11 @@ def create_urllib3_context(
-         Constructed SSLContext object with specified options
-     :rtype: SSLContext
-     """
--    context = SSLContext(ssl_version or PROTOCOL_TLS)
-+    # PROTOCOL_TLS is deprecated in Python 3.10
-+    if not ssl_version or ssl_version == PROTOCOL_TLS:
-+        ssl_version = PROTOCOL_TLS_CLIENT
-+
-+    context = SSLContext(ssl_version)
- 
-     context.set_ciphers(ciphers or DEFAULT_CIPHERS)
- 
-@@ -305,13 +322,25 @@ def create_urllib3_context(
-     ) is not None:
-         context.post_handshake_auth = True
- 
--    context.verify_mode = cert_reqs
--    if (
--        getattr(context, "check_hostname", None) is not None
--    ):  # Platform-specific: Python 3.2
--        # We do our own verification, including fingerprints and alternative
--        # hostnames. So disable it here
--        context.check_hostname = False
-+    def disable_check_hostname():
-+        if (
-+            getattr(context, "check_hostname", None) is not None
-+        ):  # Platform-specific: Python 3.2
-+            # We do our own verification, including fingerprints and alternative
-+            # hostnames. So disable it here
-+            context.check_hostname = False
-+
-+    # The order of the below lines setting verify_mode and check_hostname
-+    # matter due to safe-guards SSLContext has to prevent an SSLContext with
-+    # check_hostname=True, verify_mode=NONE/OPTIONAL. This is made even more
-+    # complex because we don't know whether PROTOCOL_TLS_CLIENT will be used
-+    # or not so we don't know the initial state of the freshly created SSLContext.
-+    if cert_reqs == ssl.CERT_REQUIRED:
-+        context.verify_mode = cert_reqs
-+        disable_check_hostname()
-+    else:
-+        disable_check_hostname()
-+        context.verify_mode = cert_reqs
- 
-     # Enable logging of TLS session keys via defacto standard environment variable
-     # 'SSLKEYLOGFILE', if the feature is available (Python 3.8+). Skip empty values.
-@@ -393,7 +422,7 @@ def ssl_wrap_socket(
-     try:
-         if hasattr(context, "set_alpn_protocols"):
-             context.set_alpn_protocols(ALPN_PROTOCOLS)
--    except NotImplementedError:
-+    except NotImplementedError:  # Defensive: in CI, we always have set_alpn_protocols
-         pass
- 
-     # If we detect server_hostname is an IP address then the SNI
-@@ -411,7 +440,7 @@ def ssl_wrap_socket(
-             "This may cause the server to present an incorrect TLS "
-             "certificate, which can cause validation failures. You can upgrade to "
-             "a newer version of Python to solve this. For more information, see "
--            "https://urllib3.readthedocs.io/en/latest/advanced-usage.html"
-+            "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
-             "#ssl-warnings",
-             SNIMissingWarning,
-         )
-diff --git a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/_implementation.py b/third_party/python/urllib3/urllib3/util/ssl_match_hostname.py
-similarity index 92%
-rename from third_party/python/urllib3/urllib3/packages/ssl_match_hostname/_implementation.py
-rename to third_party/python/urllib3/urllib3/util/ssl_match_hostname.py
-index 689208d3c63f1..1dd950c489607 100644
---- a/third_party/python/urllib3/urllib3/packages/ssl_match_hostname/_implementation.py
-+++ b/third_party/python/urllib3/urllib3/util/ssl_match_hostname.py
-@@ -9,7 +9,7 @@
- # ipaddress has been backported to 2.6+ in pypi.  If it is installed on the
- # system, use it to handle IPAddress ServerAltnames (this was added in
- # python-3.5) otherwise only do DNS matching.  This allows
--# backports.ssl_match_hostname to continue to be used in Python 2.7.
-+# util.ssl_match_hostname to continue to be used in Python 2.7.
- try:
-     import ipaddress
- except ImportError:
-@@ -78,7 +78,8 @@ def _dnsname_match(dn, hostname, max_wildcards=1):
- 
- def _to_unicode(obj):
-     if isinstance(obj, str) and sys.version_info < (3,):
--        obj = unicode(obj, encoding="ascii", errors="strict")
-+        # ignored flake8 # F821 to support python 2.7 function
-+        obj = unicode(obj, encoding="ascii", errors="strict")  # noqa: F821
-     return obj
- 
- 
-@@ -111,11 +112,9 @@ def match_hostname(cert, hostname):
-     try:
-         # Divergence from upstream: ipaddress can't handle byte str
-         host_ip = ipaddress.ip_address(_to_unicode(hostname))
--    except ValueError:
--        # Not an IP address (common case)
--        host_ip = None
--    except UnicodeError:
--        # Divergence from upstream: Have to deal with ipaddress not taking
-+    except (UnicodeError, ValueError):
-+        # ValueError: Not an IP address (common case)
-+        # UnicodeError: Divergence from upstream: Have to deal with ipaddress not taking
-         # byte strings.  addresses should be all ascii, so we consider it not
-         # an ipaddress in this case
-         host_ip = None
-@@ -123,7 +122,7 @@ def match_hostname(cert, hostname):
-         # Divergence from upstream: Make ipaddress library optional
-         if ipaddress is None:
-             host_ip = None
--        else:
-+        else:  # Defensive
-             raise
-     dnsnames = []
-     san = cert.get("subjectAltName", ())
-diff --git a/third_party/python/urllib3/urllib3/util/ssltransport.py b/third_party/python/urllib3/urllib3/util/ssltransport.py
-index 1e41354f5d458..4a7105d17916a 100644
---- a/third_party/python/urllib3/urllib3/util/ssltransport.py
-+++ b/third_party/python/urllib3/urllib3/util/ssltransport.py
-@@ -2,8 +2,8 @@
- import socket
- import ssl
- 
--from urllib3.exceptions import ProxySchemeUnsupported
--from urllib3.packages import six
-+from ..exceptions import ProxySchemeUnsupported
-+from ..packages import six
- 
- SSL_BLOCKSIZE = 16384
- 
-@@ -193,7 +193,7 @@ def _wrap_ssl_read(self, len, buffer=None):
-                 raise
- 
-     def _ssl_io_loop(self, func, *args):
--        """ Performs an I/O loop between incoming/outgoing and the socket."""
-+        """Performs an I/O loop between incoming/outgoing and the socket."""
-         should_loop = True
-         ret = None
- 
-diff --git a/third_party/python/urllib3/urllib3/util/timeout.py b/third_party/python/urllib3/urllib3/util/timeout.py
-index ff69593b05b5e..78e18a6272482 100644
---- a/third_party/python/urllib3/urllib3/util/timeout.py
-+++ b/third_party/python/urllib3/urllib3/util/timeout.py
-@@ -2,9 +2,8 @@
- 
- import time
- 
--# The default socket timeout, used by httplib to indicate that no timeout was
--# specified by the user
--from socket import _GLOBAL_DEFAULT_TIMEOUT
-+# The default socket timeout, used by httplib to indicate that no timeout was; specified by the user
-+from socket import _GLOBAL_DEFAULT_TIMEOUT, getdefaulttimeout
- 
- from ..exceptions import TimeoutStateError
- 
-@@ -116,6 +115,10 @@ def __repr__(self):
-     # __str__ provided for backwards compatibility
-     __str__ = __repr__
- 
-+    @classmethod
-+    def resolve_default_timeout(cls, timeout):
-+        return getdefaulttimeout() if timeout is cls.DEFAULT_TIMEOUT else timeout
-+
-     @classmethod
-     def _validate_timeout(cls, value, name):
-         """Check that a timeout attribute is valid.
-diff --git a/third_party/python/urllib3/urllib3/util/url.py b/third_party/python/urllib3/urllib3/util/url.py
-index 6ff238fe3cbd0..e5682d3be4293 100644
---- a/third_party/python/urllib3/urllib3/util/url.py
-+++ b/third_party/python/urllib3/urllib3/util/url.py
-@@ -50,7 +50,7 @@
-     "(?:(?:%(hex)s:){0,6}%(hex)s)?::",
- ]
- 
--UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~"
-+UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~"
- IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")"
- ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+"
- IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]"
-@@ -63,12 +63,12 @@
- BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT[2:-2] + "$")
- ZONE_ID_RE = re.compile("(" + ZONE_ID_PAT + r")\]$")
- 
--SUBAUTHORITY_PAT = (u"^(?:(.*)@)?(%s|%s|%s)(?::([0-9]{0,5}))?$") % (
-+_HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % (
-     REG_NAME_PAT,
-     IPV4_PAT,
-     IPV6_ADDRZ_PAT,
- )
--SUBAUTHORITY_RE = re.compile(SUBAUTHORITY_PAT, re.UNICODE | re.DOTALL)
-+_HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL)
- 
- UNRESERVED_CHARS = set(
-     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~"
-@@ -279,6 +279,9 @@ def _normalize_host(host, scheme):
-         if scheme in NORMALIZABLE_SCHEMES:
-             is_ipv6 = IPV6_ADDRZ_RE.match(host)
-             if is_ipv6:
-+                # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as
-+                # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID
-+                # separator as necessary to return a valid RFC 4007 scoped IP.
-                 match = ZONE_ID_RE.search(host)
-                 if match:
-                     start, end = match.span(1)
-@@ -300,7 +303,7 @@ def _normalize_host(host, scheme):
- 
- 
- def _idna_encode(name):
--    if name and any([ord(x) > 128 for x in name]):
-+    if name and any(ord(x) >= 128 for x in name):
-         try:
-             import idna
-         except ImportError:
-@@ -331,7 +334,7 @@ def parse_url(url):
-     """
-     Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
-     performed to parse incomplete urls. Fields not provided will be None.
--    This parser is RFC 3986 compliant.
-+    This parser is RFC 3986 and RFC 6874 compliant.
- 
-     The parser logic and helper functions are based heavily on
-     work done in the ``rfc3986`` module.
-@@ -365,7 +368,9 @@ def parse_url(url):
-             scheme = scheme.lower()
- 
-         if authority:
--            auth, host, port = SUBAUTHORITY_RE.match(authority).groups()
-+            auth, _, host_port = authority.rpartition("@")
-+            auth = auth or None
-+            host, port = _HOST_PORT_RE.match(host_port).groups()
-             if auth and normalize_uri:
-                 auth = _encode_invalid_chars(auth, USERINFO_CHARS)
-             if port == "":
-diff --git a/third_party/python/urllib3/urllib3/util/wait.py b/third_party/python/urllib3/urllib3/util/wait.py
-index c280646c7be0b..21b4590b3dc9b 100644
---- a/third_party/python/urllib3/urllib3/util/wait.py
-+++ b/third_party/python/urllib3/urllib3/util/wait.py
-@@ -42,7 +42,6 @@ class NoWayToWaitForSocketError(Exception):
-     def _retry_on_intr(fn, timeout):
-         return fn(timeout)
- 
--
- else:
-     # Old and broken Pythons.
-     def _retry_on_intr(fn, timeout):
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.6.0.bb b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.8.0.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.6.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.8.0.bb
index 4d9bb0e..4e36aca 100644
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.6.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs-115_115.8.0.bb
@@ -15,10 +15,9 @@
            file://0001-rewrite-cargo-host-linker-in-python3.patch  \
            file://musl-disable-stackwalk.patch \
            file://0001-add-arm-to-list-of-mozinline.patch \
-           file://py3.12.patch \
            file://armv5.patch \
            "
-SRC_URI[sha256sum] = "66d7e6e5129ac8e6fe83e24227dc7bb8dc42650bc53b21838e614de80d22bc66"
+SRC_URI[sha256sum] = "af8086f23efc8492d286671f6035b1a915de6f4ed5c7897e40be0e1cb6b895ea"
 
 S = "${WORKDIR}/firefox-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-jsauthority-Bump-mozjs-to-115.patch b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-jsauthority-Bump-mozjs-to-115.patch
deleted file mode 100644
index 163a03cf..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-jsauthority-Bump-mozjs-to-115.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 2f0de2a831ab106fce210c1d65baef041256bc18 Mon Sep 17 00:00:00 2001
-From: Xi Ruoyao <xry111@xry111.site>
-Date: Mon, 18 Sep 2023 01:53:04 +0800
-Subject: [PATCH] jsauthority: Bump mozjs to 115
-
-No code change is needed!
-
-Upstream-Status: Backport [https://gitlab.freedesktop.org/polkit/polkit/-/commit/b340f50b7bb963863ede7c63f9a0b5c50c80c1e1]
-Signed-off-by: Alexander Kanavin <alex@linutronix.de>
----
- meson.build | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/meson.build b/meson.build
-index 3b96562..92b68fd 100644
---- a/meson.build
-+++ b/meson.build
-@@ -153,7 +153,7 @@ if js_engine == 'duktape'
-   func = 'pthread_condattr_setclock'
-   config_h.set('HAVE_' + func.to_upper(), cc.has_function(func, prefix : '#include <pthread.h>'))
- elif js_engine == 'mozjs'
--  js_dep = dependency('mozjs-102')
-+  js_dep = dependency('mozjs-115')
- 
-   _system = host_machine.system().to_lower()
-   if _system.contains('freebsd')
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch
index 9a09727..4f008f7 100644
--- a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit/0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch
@@ -1,4 +1,4 @@
-From 046d853818f18bac5df4dfc007151e06fd64a5b3 Mon Sep 17 00:00:00 2001
+From 95148a804be66092564f81306a02f625d5b8a5d0 Mon Sep 17 00:00:00 2001
 From: Markus Volk <f_l_k@t-online.de>
 Date: Sun, 17 Sep 2023 23:26:59 +0200
 Subject: [PATCH] polkit.service.in: disable MemoryDenyWriteExecute
@@ -16,11 +16,11 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/data/polkit.service.in b/data/polkit.service.in
-index 2113ff7..42dfd90 100644
+index e6db351..4390cce 100644
 --- a/data/polkit.service.in
 +++ b/data/polkit.service.in
-@@ -14,7 +14,7 @@ Group=@polkitd_user@
- IPAddressDeny=any
+@@ -12,7 +12,7 @@ ExecStart=@libprivdir@/polkitd --no-debug
+ User=@polkitd_user@
  LimitMEMLOCK=0
  LockPersonality=yes
 -MemoryDenyWriteExecute=yes
@@ -28,6 +28,3 @@
  NoNewPrivileges=yes
  PrivateDevices=yes
  PrivateNetwork=yes
--- 
-2.41.0
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_123.bb b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_124.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-extended/polkit/polkit_123.bb
rename to meta-openembedded/meta-oe/recipes-extended/polkit/polkit_124.bb
index df9d25e..3eb0d52 100644
--- a/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_123.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/polkit/polkit_124.bb
@@ -6,11 +6,10 @@
 
 SRC_URI = "git://gitlab.freedesktop.org/polkit/polkit.git;protocol=https;branch=master \
            file://0001-polkit.service.in-disable-MemoryDenyWriteExecute.patch \
-           file://0001-jsauthority-Bump-mozjs-to-115.patch \
            "
 
 S = "${WORKDIR}/git"
-SRCREV = "fc8b07e71d99f88a29258cde99b913b44da1846d"
+SRCREV = "82f0924dc0eb23b9df68e88dbaf9e07c81940a5a"
 
 DEPENDS = "expat glib-2.0"
 
@@ -51,4 +50,12 @@
 	chown polkitd:root ${D}/${sysconfdir}/polkit-1/rules.d
 }
 
-FILES:${PN} += "${libdir}/polkit-1 ${nonarch_libdir}/polkit-1 ${datadir}"
+FILES:${PN} += " \
+	${libdir}/pam.d/polkit-1 \
+	${libdir}/sysusers.d \
+	${libdir}/polkit-1 \
+	${nonarch_libdir}/pam.d/polkit-1 \
+	${nonarch_libdir}/sysusers.d \
+	${nonarch_libdir}/polkit-1 \
+	${datadir} \
+"
diff --git a/meta-openembedded/meta-oe/recipes-security/keyutils/keyutils_1.6.3.bb b/meta-openembedded/meta-oe/recipes-security/keyutils/keyutils_1.6.3.bb
index 6cdfef9..7b3d728 100644
--- a/meta-openembedded/meta-oe/recipes-security/keyutils/keyutils_1.6.3.bb
+++ b/meta-openembedded/meta-oe/recipes-security/keyutils/keyutils_1.6.3.bb
@@ -55,7 +55,7 @@
 }
 
 
-RDEPENDS:${PN}-ptest += "bash lsb-release make"
+RDEPENDS:${PN}-ptest += "bash file lsb-release make"
 RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils"
 RDEPENDS:${PN}-ptest:append:libc-musl = " musl-utils"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb b/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
index 339bb35..d53e1a2 100644
--- a/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
+++ b/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
@@ -9,8 +9,9 @@
     ${GO_IMPORT}/cmd/crucible \
     ${GO_IMPORT}/cmd/habtool \
 "
-SRCREV = "358b5e7adb7f101f870f2b42fe5371460a3cccb6"
+SRCREV = "dec27cd4e0e0db106c0a21d429c04ca8d36bbdd5"
 
+export GOPROXY = "https://proxy.golang.org,direct"
 # Workaround for network access issue during compile step.
 # This needs to be fixed in the recipes buildsystem so that
 # it can be accomplished during do_fetch task.
diff --git a/meta-openembedded/meta-oe/recipes-support/emacs/emacs_29.1.bb b/meta-openembedded/meta-oe/recipes-support/emacs/emacs_29.1.bb
index ae35367..5cbe455 100644
--- a/meta-openembedded/meta-oe/recipes-support/emacs/emacs_29.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/emacs/emacs_29.1.bb
@@ -18,6 +18,7 @@
 PACKAGECONFIG[gnutls] = "--with-gnutls=yes,--with-gnutls=no,gnutls"
 PACKAGECONFIG[kerberos] = "--with-kerberos=yes,--with-kerberos=no,krb5"
 PACKAGECONFIG[libgmp] = "--with-libgmp=yes,--with-libgmp=no,gmp"
+PACKAGECONFIG[selinux] = "--with-selinux=yes,--with-selinux=no,libselinux"
 
 PACKAGECONFIG ??= "gnutls kerberos libgmp"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
index 1e92d00..33df709 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
@@ -24,7 +24,7 @@
     bash \
     ${@bb.utils.contains('PTEST_ENABLED', '1', 'shunit2', '', d)} \
 "
-RRECOMMENDS:${PN}-ptest += "kernel-module-gpio-sim"
+RRECOMMENDS:${PN}-ptest += "kernel-module-gpio-sim kernel-module-configfs"
 
 do_install_ptest:append() {
     install -m 0755 ${S}/tools/gpio-tools-test.bash ${D}${PTEST_PATH}/tests/
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-RH-fixup-udev-rules-for-redhat.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-RH-fixup-udev-rules-for-redhat.patch
new file mode 100644
index 0000000..0ec5b5b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-RH-fixup-udev-rules-for-redhat.patch
@@ -0,0 +1,74 @@
+From 1e1ba9ecc16895bf472eae345d44631b65629611 Mon Sep 17 00:00:00 2001
+From: Benjamin Marzinski <bmarzins@redhat.com>
+Date: Thu, 13 Apr 2017 07:22:23 -0500
+Subject: [PATCH 01/12] RH: fixup udev rules for redhat
+
+The multipath rules need to run after scsi_id is run. This means moving
+them after 60-persistent-storage.rules for redhat. Redhat also uses a
+different naming scheme for partitions than SuSE. Also, there are some
+false warnings that gcc throws because of the changed options. Fix these
+too.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+[OP: Rebase to 0.9.3]
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ Makefile.inc        | 2 +-
+ kpartx/kpartx.rules | 2 +-
+ multipath/Makefile  | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.inc b/Makefile.inc
+index 5668e638..de89b21f 100644
+--- a/Makefile.inc
++++ b/Makefile.inc
+@@ -59,7 +59,7 @@ tmpfilesdir	:= $(systemd_prefix)lib/tmpfiles.d
+ modulesloaddir	:= $(systemd_prefix)lib/modules-load.d
+ libudevdir	:= $(systemd_prefix)lib/udev
+ udevrulesdir	:= $(libudevdir)/rules.d
+-bindir		:= $(exec_prefix)sbin
++bindir		:= $(exec_prefix)/usr/sbin
+ mandir		:= $(usr_prefix)share/man
+ LIB		:= $(if $(shell test -d /lib64 && echo 1),lib64,lib)
+ syslibdir	:= $(prefix)$(LIB)
+diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
+index 1969dee0..d2b28233 100644
+--- a/kpartx/kpartx.rules
++++ b/kpartx/kpartx.rules
+@@ -39,6 +39,6 @@ LABEL="mpath_kpartx_end"
+ GOTO="kpartx_end"
+ 
+ LABEL="run_kpartx"
+-RUN+="/sbin/kpartx -un -p -part /dev/$name"
++RUN+="/sbin/kpartx -un /dev/$name"
+ 
+ LABEL="kpartx_end"
+diff --git a/multipath/Makefile b/multipath/Makefile
+index 67fb5e62..2ea9e528 100644
+--- a/multipath/Makefile
++++ b/multipath/Makefile
+@@ -27,7 +27,7 @@ install:
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 99-z-dm-mpath-late.rules $(DESTDIR)$(udevrulesdir)
+-	$(Q)$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/56-multipath.rules
++	$(Q)$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(tmpfilesdir)
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 tmpfiles.conf $(DESTDIR)$(tmpfilesdir)/multipath.conf
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man8
+@@ -50,7 +50,7 @@ uninstall:
+ 	$(Q)$(RM) $(DESTDIR)$(udevrulesdir)/99-z-dm-mpath-late.rules
+ 	$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
+ 	$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
+-	$(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
++	$(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
+ 	$(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8
+ 	$(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5
+ 	$(Q)$(RM) $(DESTDIR)$(tmpfilesdir)/multipath.conf
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-Remove-the-property-blacklist-exception-builtin.patch
similarity index 61%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-Remove-the-property-blacklist-exception-builtin.patch
index c15444a..a24c827 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-RH-Remove-the-property-blacklist-exception-builtin.patch
@@ -1,7 +1,7 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17
-00:00:00 2001 From:Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, 2 Jul
-2014 12:49:53 -0500 Subject: [PATCH] RH: Remove the property blacklist
-exception builtin
+From bb6db01cc19940bb5162c1cc0c9b5f8e4c209822 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Fri, 1 Mar 2024 10:34:06 +0800
+Subject: [PATCH 02/12] RH: Remove the property blacklist exception builtin
 
 Multipath set the default property blacklist exceptions to
 (ID_SCSI_VPD|ID_WWN).  This has the effect of blacklisting some internal
@@ -15,31 +15,36 @@
 
 Upsteam-Status: Pending
 
-Update patch to 0.8.2
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
 [OP: Rebase to 0.9.3]
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
-Upstream-Status: Pending
 
- libmultipath/blacklist.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ libmultipath/blacklist.c | 16 +++++-----------
+ 1 file changed, 5 insertions(+), 11 deletions(-)
 
 diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c
-index 8d15d2ea..820b0d68 100644
+index 75100b20..4fdaca76 100644
 --- a/libmultipath/blacklist.c
 +++ b/libmultipath/blacklist.c
-@@ -198,9 +198,6 @@ setup_default_blist (struct config * conf)
+@@ -221,15 +221,6 @@ setup_default_blist (struct config * conf)
  	struct hwentry *hwe;
  	int i;
  
--	if (store_ble(conf->blist_devnode, "!^(sd[a-z]|dasd[a-z]|nvme[0-9])", ORIGIN_DEFAULT))
--		return 1;
--
+-	if (nvme_multipath_enabled()) {
+-		if (store_ble(conf->blist_devnode, "!^(sd[a-z]|dasd[a-z])",
+-			      ORIGIN_DEFAULT))
+-			return 1;
+-	} else {
+-		if (store_ble(conf->blist_devnode, "!^(sd[a-z]|dasd[a-z]|nvme[0-9])",
+-			      ORIGIN_DEFAULT))
+-			return 1;
+-	}
  	if (store_ble(conf->elist_property, "(SCSI_IDENT_|ID_WWN)", ORIGIN_DEFAULT))
  		return 1;
  
-@@ -435,8 +432,11 @@ filter_property(const struct config *conf, struct udev_device *udev,
+@@ -464,8 +455,11 @@ filter_property(const struct config *conf, struct udev_device *udev,
  			r = MATCH_NOTHING;
  	}
  
@@ -54,5 +59,5 @@
  
  static void free_ble(struct blentry *ble)
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-don-t-start-without-a-config-file.patch
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-don-t-start-without-a-config-file.patch
index 840b000..54b3bdc 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-RH-don-t-start-without-a-config-file.patch
@@ -1,10 +1,7 @@
-From 056fdaece0f1a3a5ca92e8c08912730faa89875d Mon Sep 17 00:00:00 2001
+From de8ee3480ec7479ed014c197a9d747403f6e0237 Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 Date: Fri, 23 Nov 2018 17:25:15 +0800
-Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
- 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, 15
- Oct 2014 10:39:30 -0500 Subject: [PATCH] RH: don't start without a config
- file
+Subject: [PATCH 03/12] RH: don't start without a config file
 
 If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist
 all devices when running multipath.  A completely blank configuration file
@@ -17,20 +14,21 @@
 
 Upstream-Status: Pending
 
-update this patch to new version
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
 [OP: Rebase to 0.9.3]
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- libmultipath/config.c         | 18 ++++++++++++++++++
- libmultipath/config.h         |  1 +
- multipath/multipath.rules.in  |  1 +
- multipathd/multipathd.8       |  2 ++
- multipathd/multipathd.service |  1 +
+ libmultipath/config.c            | 18 ++++++++++++++++++
+ libmultipath/config.h            |  1 +
+ multipath/multipath.rules.in     |  1 +
+ multipathd/multipathd.8.in       |  2 ++
+ multipathd/multipathd.service.in |  1 +
  5 files changed, 23 insertions(+)
 
 diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 5c5c0726..31894810 100644
+index 83fa7369..8a3a8f37 100644
 --- a/libmultipath/config.c
 +++ b/libmultipath/config.c
 @@ -26,6 +26,7 @@
@@ -41,7 +39,7 @@
  
  /*
   * We don't support re-initialization after
-@@ -966,6 +967,23 @@ int _init_config (const char *file, struct config *conf)
+@@ -959,6 +960,23 @@ int _init_config (const char *file, struct config *conf)
  		}
  		factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
  		validate_pctable(conf->overrides, 0, file);
@@ -66,7 +64,7 @@
  
  	conf->processed_main_config = 1;
 diff --git a/libmultipath/config.h b/libmultipath/config.h
-index 87947469..0dc89c16 100644
+index 384193ab..158cebf0 100644
 --- a/libmultipath/config.h
 +++ b/libmultipath/config.h
 @@ -10,6 +10,7 @@
@@ -78,7 +76,7 @@
  enum devtypes {
  	DEV_NONE,
 diff --git a/multipath/multipath.rules.in b/multipath/multipath.rules.in
-index 8d3cf33a..5c4447a2 100644
+index 780bf852..2c518378 100644
 --- a/multipath/multipath.rules.in
 +++ b/multipath/multipath.rules.in
 @@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath"
@@ -89,11 +87,11 @@
  
  ENV{DEVTYPE}!="partition", GOTO="test_dev"
  IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
-diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
-index bdf102eb..a16a0bd5 100644
---- a/multipathd/multipathd.8
-+++ b/multipathd/multipathd.8
-@@ -48,6 +48,8 @@ map regains its maximum performance and redundancy.
+diff --git a/multipathd/multipathd.8.in b/multipathd/multipathd.8.in
+index f1cab3ff..5ae21db1 100644
+--- a/multipathd/multipathd.8.in
++++ b/multipathd/multipathd.8.in
+@@ -49,6 +49,8 @@ map regains its maximum performance and redundancy.
  With the \fB-k\fR option, \fBmultipathd\fR acts as a client utility that
  sends commands to a running instance of the multipathd daemon (see
  \fBCOMMANDS\fR below).
@@ -102,18 +100,18 @@
  .
  .
  .\" ----------------------------------------------------------------------------
-diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service
-index aec62dbb..ab7585de 100644
---- a/multipathd/multipathd.service
-+++ b/multipathd/multipathd.service
+diff --git a/multipathd/multipathd.service.in b/multipathd/multipathd.service.in
+index 6d03ff71..0cd85102 100644
+--- a/multipathd/multipathd.service.in
++++ b/multipathd/multipathd.service.in
 @@ -5,6 +5,7 @@ Before=local-fs-pre.target blk-availability.service shutdown.target
- Wants=systemd-udevd-kernel.socket
- After=systemd-udevd-kernel.socket
+ Wants=systemd-udevd-kernel.socket @MODPROBE_UNIT@
+ After=systemd-udevd-kernel.socket @MODPROBE_UNIT@
  After=multipathd.socket systemd-remount-fs.service
 +ConditionPathExists=/etc/multipath.conf
  Before=initrd-cleanup.service
  DefaultDependencies=no
  Conflicts=shutdown.target
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-use-rpm-optflags-if-present.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-use-rpm-optflags-if-present.patch
new file mode 100644
index 0000000..91477a4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-RH-use-rpm-optflags-if-present.patch
@@ -0,0 +1,55 @@
+From f1b74f21875d6d9f0a5ac3d67df40a28b167052a Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 26 Nov 2018 09:19:17 +0800
+Subject: [PATCH 04/12] RH: use rpm optflags if present
+
+Use the passed in optflags when compiling as an RPM, and keep the
+default flags as close as possible to the current fedora flags, while
+still being generic.
+
+Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+[OP: Rebase to 0.9.3]
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ Makefile.inc | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.inc b/Makefile.inc
+index de89b21f..6ac632ff 100644
+--- a/Makefile.inc
++++ b/Makefile.inc
+@@ -95,7 +95,15 @@ SYSTEMD_LIBDEPS := $(if $(SYSTEMD),$(if $(shell test $(SYSTEMD) -gt 209 && echo
+ MODPROBE_UNIT := $(shell test "0$(SYSTEMD)" -lt 245 2>/dev/null || \
+ 			echo "modprobe@dm_multipath.service")
+ 
+-OPTFLAGS	:= -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
++ifndef RPM_OPT_FLAGS
++	OPTFLAGS	:= -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
++else
++	OPTFLAGS = $(RPM_OPT_FLAGS)
++endif
++OPTFLAGS       += -Wextra -Wstrict-prototypes -Wformat=0 -Werror=implicit-int \
++                  -Werror=implicit-function-declaration -Wno-sign-compare \
++                  -Wno-unused-parameter -Werror=cast-qual \
++                  -Werror=discarded-qualifiers
+ WARNFLAGS	:= -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
+ 		  -Werror=implicit-function-declaration -Werror=format-security \
+ 		  $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) $(W_URCU_TYPE_LIMITS)
+@@ -105,7 +113,7 @@ CPPFLAGS	:= $(FORTIFY_OPT) $(CPPFLAGS) $(D_URCU_VERSION) \
+ 		   -DRUNTIME_DIR=\"$(runtimedir)\" -DCONFIG_DIR=\"$(configdir)\" \
+ 		   -DDEFAULT_CONFIGFILE=\"$(configfile)\" -DSTATE_DIR=\"$(statedir)\" \
+ 		   -DEXTRAVERSION=\"$(EXTRAVERSION)\" -MMD -MP
+-CFLAGS		:= -std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe
++CFLAGS		:= -std=gnu99 $(CFLAGS) $(OPTFLAGS) -pipe
+ BIN_CFLAGS	:= -fPIE -DPIE
+ LIB_CFLAGS	:= -fPIC
+ SHARED_FLAGS	:= -shared
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch
index 471ff09..c608961 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-RH-add-mpathconf.patch
@@ -1,9 +1,7 @@
-From b0b4cca566e3e0c3a232b3754555c41d4e0c1273 Mon Sep 17 00:00:00 2001
+From 8f52504859704466667e042baf437c2b6272ffb9 Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 Date: Mon, 26 Nov 2018 09:55:12 +0800
-Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
- 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Thu, 16
- Oct 2014 15:49:01 -0500 Subject: [PATCH] RH: add mpathconf
+Subject: [PATCH 05/12] RH: add mpathconf
 
 mpathconf is a program (largely based on lvmcomf) to help users
 configure /etc/multipath.conf and enable or disable multipathing.  It
@@ -16,11 +14,11 @@
 
 Upstream-Status: Pending
 
-update this patch to new version
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
 [OP: Rebase to 0.9.3]
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/config.c |   1 +
  multipath/Makefile    |   4 +
@@ -31,10 +29,10 @@
  create mode 100644 multipath/mpathconf.8
 
 diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 31894810..af59dd3c 100644
+index 8a3a8f37..a40b41ab 100644
 --- a/libmultipath/config.c
 +++ b/libmultipath/config.c
-@@ -969,6 +969,7 @@ int _init_config (const char *file, struct config *conf)
+@@ -962,6 +962,7 @@ int _init_config (const char *file, struct config *conf)
  		validate_pctable(conf->overrides, 0, file);
  	} else {
  		condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
@@ -43,36 +41,36 @@
  			conf->blist_devnode = vector_alloc();
  			if (!conf->blist_devnode) {
 diff --git a/multipath/Makefile b/multipath/Makefile
-index 8482de6a..780b1b73 100644
+index 2ea9e528..6b1fa09e 100644
 --- a/multipath/Makefile
 +++ b/multipath/Makefile
-@@ -21,6 +21,7 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so
+@@ -24,6 +24,7 @@ $(EXEC): $(OBJS) $(multipathdir)/libmultipath.so $(mpathcmddir)/libmpathcmd.so
  install:
- 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
- 	$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
-+	$(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
- 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
- 	$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
- 	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules
-@@ -32,6 +33,7 @@ install:
- 	$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(man8dir)
- 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
- 	$(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(man5dir)
-+	$(INSTALL_PROGRAM) -m 644 mpathconf.8 $(DESTDIR)$(man8dir)
- ifneq ($(SCSI_DH_MODULES_PRELOAD),)
- 	$(INSTALL_PROGRAM) -m 644 scsi_dh.conf $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
- 	for _x in $(SCSI_DH_MODULES_PRELOAD); do echo "$$_x"; done \
-@@ -44,8 +46,10 @@ uninstall:
- 	$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
- 	$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
- 	$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
-+	$(RM) $(DESTDIR)$(bindir)/mpathconf
- 	$(RM) $(DESTDIR)$(man8dir)/$(EXEC).8
- 	$(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5
-+	$(RM) $(DESTDIR)$(man8dir)/mpathconf.8
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
+ 	$(Q)$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
++	$(Q)$(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 99-z-dm-mpath-late.rules $(DESTDIR)$(udevrulesdir)
+@@ -34,6 +35,7 @@ install:
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).8 $(DESTDIR)$(mandir)/man8
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)/man5
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 $(EXEC).conf.5 $(DESTDIR)$(mandir)/man5
++	$(Q)$(INSTALL_PROGRAM) -m 644 mpathconf.8 $(DESTDIR)$(mandir)/man8
+ 	$(Q)$(INSTALL_PROGRAM) -d $(DESTDIR)$(modulesloaddir)
+ ifeq ($(MODPROBE_UNIT),)
+ 	$(Q)$(INSTALL_PROGRAM) -m 644 modules-load.conf $(DESTDIR)$(modulesloaddir)/multipath.conf
+@@ -51,8 +53,10 @@ uninstall:
+ 	$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
+ 	$(Q)$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
+ 	$(Q)$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
++	$(Q)$(RM) $(DESTDIR)$(bindir)/mpathconf
+ 	$(Q)$(RM) $(DESTDIR)$(mandir)/man8/$(EXEC).8
+ 	$(Q)$(RM) $(DESTDIR)$(mandir)/man5/$(EXEC).conf.5
++	$(Q)$(RM) $(DESTDIR)$(mandir)/man8/mpathconf.8
+ 	$(Q)$(RM) $(DESTDIR)$(tmpfilesdir)/multipath.conf
  
  clean: dep_clean
- 	$(RM) core *.o $(EXEC) multipath.rules tmpfiles.conf
 diff --git a/multipath/mpathconf b/multipath/mpathconf
 new file mode 100644
 index 00000000..e8391347
@@ -651,5 +649,5 @@
 +.SH AUTHOR
 +Benjamin Marzinski <bmarzins@redhat.com>
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
index 17c36e8..8df7de3 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
@@ -1,14 +1,7 @@
-From 262de33671ede81e424344ea9125d9e546cf8612 Mon Sep 17 00:00:00 2001
+From f93248d8e3598ccdc42b6d639107917c9cda268c Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 Date: Thu, 26 Sep 2019 16:29:48 +0800
-Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep
-
-17
- 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Fri,
-17
- Oct 2014 11:20:34 -0500 Subject: [PATCH] RH: add wwids from kernel
-cmdline
- mpath.wwids with -A
+Subject: [PATCH 06/12] RH: add wwids from kernel cmdline mpath.wwids with -A
 
 This patch adds another option to multipath, "-A", which reads
 /proc/cmdline for mpath.wwid=<WWID> options, and adds any wwids it finds
@@ -23,21 +16,21 @@
 
 Upstream-Status: Pending
 
-Update this patch to new version 0.8.2
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
 [OP: Rebase to 0.9.3]
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/wwids.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
  libmultipath/wwids.h |  1 +
  2 files changed, 45 insertions(+)
 
 diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
-index 89bb60ca..bab9aa85 100644
+index 591cd09b..b01f1b85 100644
 --- a/libmultipath/wwids.c
 +++ b/libmultipath/wwids.c
-@@ -451,3 +451,47 @@ int unmark_failed_wwid(const char *wwid)
+@@ -439,3 +439,47 @@ int unmark_failed_wwid(const char *wwid)
  	print_failed_wwid_result("unmark_failed", wwid, r);
  	return r;
  }
@@ -98,5 +91,5 @@
  enum {
  	WWID_IS_NOT_FAILED = 0,
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-warn-on-invalid-regex-instead-of-failing.patch
similarity index 76%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-warn-on-invalid-regex-instead-of-failing.patch
index 22cb4be..c64b8ae 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-RH-warn-on-invalid-regex-instead-of-failing.patch
@@ -1,7 +1,7 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17
-00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Mon, 6 Nov
-2017 21:39:28 -0600 Subject: [PATCH] RH: warn on invalid regex instead of
-failing
+From 49d0b0279f54ceb96878e8e72e828efbb84a534c Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Fri, 1 Mar 2024 11:45:10 +0800
+Subject: [PATCH 07/12] RH: warn on invalid regex instead of failing
 
 multipath.conf used to allow "*" as a match everything regular expression,
 instead of requiring ".*". Instead of erroring when the old style
@@ -12,21 +12,21 @@
 
 Upstream-Status: Pending
 
-update this patch to 0.8.2
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
 [OP: Rebase to 0.9.3]
 [OP: adjusted FREE() -> free(), made set_regex_value() static]
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- libmultipath/dict.c | 42 +++++++++++++++++++++++++++++++++++-------
- 1 file changed, 35 insertions(+), 7 deletions(-)
+ libmultipath/dict.c | 40 ++++++++++++++++++++++++++++++++++------
+ 1 file changed, 34 insertions(+), 6 deletions(-)
 
 diff --git a/libmultipath/dict.c b/libmultipath/dict.c
-index aa93fe43..55a22d32 100644
+index 5af036b7..e494419d 100644
 --- a/libmultipath/dict.c
 +++ b/libmultipath/dict.c
-@@ -155,6 +155,34 @@ set_str_noslash(vector strvec, void *ptr, const char *file, int line_nr)
+@@ -189,6 +189,34 @@ set_str_noslash(vector strvec, void *ptr, const char *file, int line_nr)
  	return 0;
  }
  
@@ -61,18 +61,7 @@
  static int
  set_yes_no(vector strvec, void *ptr, const char *file, int line_nr)
  {
-@@ -1679,8 +1707,8 @@ ble_ ## option ## _handler (struct config *conf, vector strvec,		\
- 									\
- 	if (!conf->option)						\
- 		return 1;						\
--									\
--	buff = set_value(strvec);					\
-+									\	
-+	buff = set_regex_value(strvec);					\
- 	if (!buff)							\
- 		return 1;						\
- 									\
-@@ -1700,7 +1728,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec, \
+@@ -1798,7 +1826,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec,		\
  	if (!conf->option)						\
  		return 1;						\
  									\
@@ -81,7 +70,16 @@
  	if (!buff)							\
  		return 1;						\
  									\
-@@ -1806,16 +1834,16 @@ device_handler(struct config *conf, vector strvec, const char *file,
+@@ -1818,7 +1846,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec, \
+ 	if (!conf->option)						\
+ 		return 1;						\
+ 									\
+-	buff = set_value(strvec);					\
++	buff = set_regex_value(strvec);					\
+ 	if (!buff)							\
+ 		return 1;						\
+ 									\
+@@ -1924,16 +1952,16 @@ device_handler(struct config *conf, vector strvec, const char *file,
  	return 0;
  }
  
@@ -101,7 +99,7 @@
 +declare_hw_handler(bl_product, set_regex)
  declare_hw_snprint(bl_product, print_str)
  
- declare_hw_handler(hwhandler, set_str)
+ declare_hw_arg_str_handler(hwhandler, 0)
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-RH-reset-default-find_mutipaths-value-to-off.patch
similarity index 70%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-RH-reset-default-find_mutipaths-value-to-off.patch
index ad03b8a..1fa1f3b 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-RH-reset-default-find_mutipaths-value-to-off.patch
@@ -1,10 +1,7 @@
-From 16900150e02e5b367a8b33621b393975ad011130 Mon Sep 17 00:00:00 2001
+From fcba3e0d4c8448a2510025acb255c7335413bf56 Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
 Date: Mon, 26 Nov 2018 11:12:01 +0800
-Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
- 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Thu, 7 Jun
- 2018 17:43:52 -0500 Subject: [PATCH] RH: reset default find_mutipaths value
- to off
+Subject: [PATCH 08/12] RH: reset default find_mutipaths value to off
 
 Upstream has changed to default find_multipaths to "strict". For now
 Redhat will retain the previous default of "off".
@@ -13,18 +10,17 @@
 
 Upstream-Status: Pending
 
-Update this patch to new version
-
+Rebase to 0.9.8
 Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/defaults.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
-index 6576939..a2404b2 100644
+index 64b633f2..a06a8a41 100644
 --- a/libmultipath/defaults.h
 +++ b/libmultipath/defaults.h
-@@ -17,7 +17,7 @@
+@@ -23,7 +23,7 @@
  #define DEFAULT_NO_PATH_RETRY	NO_PATH_RETRY_UNDEF
  #define DEFAULT_VERBOSITY	2
  #define DEFAULT_REASSIGN_MAPS	0
@@ -34,5 +30,5 @@
  #define DEFAULT_DEV_LOSS_TMO	600
  #define DEFAULT_RETAIN_HWHANDLER RETAIN_HWHANDLER_ON
 -- 
-2.7.4
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-modify-create-config.mk-for-cross-co.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-modify-create-config.mk-for-cross-co.patch
new file mode 100644
index 0000000..041b79a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-modify-create-config.mk-for-cross-co.patch
@@ -0,0 +1,40 @@
+From 7452549e572b1c40aefe25524bf4bbbf34c952e5 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Tue, 4 Jun 2019 11:39:39 +0800
+Subject: [PATCH 09/12] multipath-tools: modify create-config.mk for
+ cross-compilation
+
+Do not look for systemd info on the host, and allow us to pass in CFLAGS
+using the OPTFLAGS variable.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+[OP: Rebase to 0.9.3]
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ create-config.mk | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/create-config.mk b/create-config.mk
+index 4d318b96..a65975ba 100644
+--- a/create-config.mk
++++ b/create-config.mk
+@@ -127,10 +127,6 @@ ifeq ($(ENABLE_DMEVENTS_POLL),0)
+ 	DEFINES += -DNO_DMEVENTS_POLL
+ endif
+ 
+-SYSTEMD := $(strip $(or $(shell $(PKG_CONFIG) --modversion libsystemd 2>/dev/null | awk '{print $$1}'), \
+-			$(shell systemctl --version 2>/dev/null | sed -n 's/systemd \([0-9]*\).*/\1/p')))
+-
+-
+ # $(call TEST_CC_OPTION,option,fallback)
+ # Test if the C compiler supports the option.
+ # Evaluates to "option" if yes, and "fallback" otherwise.
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-Subject-PATCH-Always-use-devmapper.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-Subject-PATCH-Always-use-devmapper.patch
new file mode 100644
index 0000000..b48720b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-Subject-PATCH-Always-use-devmapper.patch
@@ -0,0 +1,72 @@
+From 5d2fa3c5975266a6c02214afa6254e6eeeb1baad Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 26 Nov 2018 11:17:41 +0800
+Subject: [PATCH 10/12] Subject: [PATCH] Always use devmapper
+
+Do not try to compute several _API_ make variables
+from host information when cross-compiling.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+[OP: Rebase to 0.9.3]
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
+
+Rebase to 0.9.8
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ create-config.mk | 36 ++++++++----------------------------
+ 1 file changed, 8 insertions(+), 28 deletions(-)
+
+diff --git a/create-config.mk b/create-config.mk
+index a65975ba..8ba592f4 100644
+--- a/create-config.mk
++++ b/create-config.mk
+@@ -79,34 +79,14 @@ URCU_VERSION = $(shell \
+ 
+ DEFINES :=
+ 
+-ifneq ($(call check_func,dm_task_no_flush,$(devmapper_incdir)/libdevmapper.h),0)
+-	DEFINES += LIBDM_API_FLUSH
+-endif
+-
+-ifneq ($(call check_func,dm_task_get_errno,$(devmapper_incdir)/libdevmapper.h),0)
+-	DEFINES += LIBDM_API_GET_ERRNO
+-endif
+-
+-ifneq ($(call check_func,dm_task_set_cookie,$(devmapper_incdir)/libdevmapper.h),0)
+-	DEFINES += LIBDM_API_COOKIE
+-endif
+-
+-ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(libudev_incdir)/libudev.h),0)
+-	DEFINES += LIBUDEV_API_RECVBUF
+-endif
+-
+-ifneq ($(call check_func,dm_task_deferred_remove,$(devmapper_incdir)/libdevmapper.h),0)
+-	DEFINES += LIBDM_API_DEFERRED
+-endif
+-
+-ifneq ($(call check_func,dm_hold_control_dev,$(devmapper_incdir)/libdevmapper.h),0)
+-	DEFINES += LIBDM_API_HOLD_CONTROL
+-endif
+-
+-ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(kernel_incdir)/scsi/fc/fc_els.h),0)
+-	DEFINES += FPIN_EVENT_HANDLER
+-	FPIN_SUPPORT = 1
+-endif
++DEFINES += LIBDM_API_FLUSH
++DEFINES += LIBDM_API_GET_ERRNO
++DEFINES += LIBDM_API_COOKIE
++DEFINES += LIBUDEV_API_RECVBUF
++DEFINES += LIBDM_API_DEFERRED
++DEFINES += LIBDM_API_HOLD_CONTROL
++DEFINES += FPIN_EVENT_HANDLER
++FPIN_SUPPORT = 1
+ 
+ libmount_h := $(shell $(PKG_CONFIG) --variable=includedir mount)/libmount/libmount.h
+ ifneq ($(call check_func,mnt_unref_cache,$(libmount_h)),0)
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-fix-bug-of-do_compile-and-do_install.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-fix-bug-of-do_compile-and-do_install.patch
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-fix-bug-of-do_compile-and-do_install.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-fix-bug-of-do_compile-and-do_install.patch
index bc07d75..f32d789 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-fix-bug-of-do_compile-and-do_install.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-fix-bug-of-do_compile-and-do_install.patch
@@ -1,7 +1,7 @@
-From 51f1f351262a31d94c10504e4d135526c6a7caeb Mon Sep 17 00:00:00 2001
+From 949070286692dfff89213792571da233fe82e440 Mon Sep 17 00:00:00 2001
 From: Wang Mingyu <wangmy@cn.fujitsu.com>
 Date: Sun, 10 May 2020 21:22:53 +0800
-Subject: [PATCH] fix bug of do_compile and do_install
+Subject: [PATCH 11/12] fix bug of do_compile and do_install
 
 when multiple processes make run in parallel,
 because of dependency error will occur.
@@ -12,16 +12,14 @@
 [OP: Drop dependencies that are already present in the 0.9.3 Makefile]
 Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
 ---
-Upstream-Status: Pending
-
  Makefile | 10 ++++++++++
  1 file changed, 10 insertions(+)
 
 diff --git a/Makefile b/Makefile
-index 27b4641f..f195b570 100644
+index 4df5f161..065249c2 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -79,6 +79,16 @@ libmpathpersist libmpathvalid multipath multipathd: libmultipath
+@@ -91,6 +91,16 @@ libmpathpersist libmpathvalid multipath multipathd: libmultipath
  libmultipath/prioritizers libmultipath/checkers libmultipath/foreign: libmultipath
  mpathpersist multipathd:  libmpathpersist
  
@@ -39,5 +37,5 @@
  	libmultipath/prioritizers.install \
  	libmultipath/foreign.install: libmultipath.install
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-add-explicit-dependency-on-libraries.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-add-explicit-dependency-on-libraries.patch
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-add-explicit-dependency-on-libraries.patch
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-add-explicit-dependency-on-libraries.patch
index 3b0a704..2f77494 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-add-explicit-dependency-on-libraries.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-add-explicit-dependency-on-libraries.patch
@@ -1,7 +1,7 @@
-From ee9f7b6e764be5668bc958f8bb97a46e5056d050 Mon Sep 17 00:00:00 2001
+From 7a46f43682641436464579d8bf76c382e71ea557 Mon Sep 17 00:00:00 2001
 From: Hongxu Jia <hongxu.jia@windriver.com>
 Date: Mon, 25 May 2020 23:22:55 -0700
-Subject: [PATCH] add explicit dependency on libraries
+Subject: [PATCH 12/12] add explicit dependency on libraries
 
 [snip]
 gcc/i686-overc-linux/10.1.0/ld: cannot find -lmpathpersist
@@ -24,10 +24,10 @@
  1 file changed, 1 insertion(+)
 
 diff --git a/Makefile b/Makefile
-index f195b570..2d22881c 100644
+index 065249c2..0444c2ea 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -78,6 +78,7 @@ libmultipath: libmpathutil
+@@ -90,6 +90,7 @@ libmultipath: libmpathutil
  libmpathpersist libmpathvalid multipath multipathd: libmultipath
  libmultipath/prioritizers libmultipath/checkers libmultipath/foreign: libmultipath
  mpathpersist multipathd:  libmpathpersist
@@ -36,5 +36,5 @@
  DEPS_ON_MULTIPATH := \
  	multipath \
 -- 
-2.38.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch
deleted file mode 100644
index 395f9a9..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 9a941729d3c0d19d30d65e16b291c380e589eeb3 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Thu, 13 Apr 2017 07:22:23 -0500
-Subject: [PATCH] RH: fixup udev rules for redhat
-
-The multipath rules need to run after scsi_id is run. This means moving
-them after 60-persistent-storage.rules for redhat. Redhat also uses a
-different naming scheme for partitions than SuSE. Also, there are some
-false warnings that gcc throws because of the changed options. Fix these
-too.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
-
-Update patch to 0.8.0
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-[OP: Rebase to 0.9.3]
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
-Upstream-Status: Pending
-
- Makefile.inc        | 2 +-
- kpartx/kpartx.rules | 2 +-
- multipath/Makefile  | 4 ++--
- 3 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/Makefile.inc b/Makefile.inc
-index 4d843ce5..57779fd8 100644
---- a/Makefile.inc
-+++ b/Makefile.inc
-@@ -81,7 +81,7 @@ endif
- prefix		=
- exec_prefix	= $(prefix)
- usr_prefix	= $(prefix)
--bindir		= $(exec_prefix)/sbin
-+bindir		= $(exec_prefix)/usr/sbin
- libudevdir	= $(prefix)/$(SYSTEMDPATH)/udev
- tmpfilesdir	= $(prefix)/$(SYSTEMDPATH)/tmpfiles.d
- udevrulesdir	= $(libudevdir)/rules.d
-diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
-index 1969dee0..d2b28233 100644
---- a/kpartx/kpartx.rules
-+++ b/kpartx/kpartx.rules
-@@ -39,6 +39,6 @@ LABEL="mpath_kpartx_end"
- GOTO="kpartx_end"
- 
- LABEL="run_kpartx"
--RUN+="/sbin/kpartx -un -p -part /dev/$name"
-+RUN+="/sbin/kpartx -un /dev/$name"
- 
- LABEL="kpartx_end"
-diff --git a/multipath/Makefile b/multipath/Makefile
-index 116348e2..8482de6a 100644
---- a/multipath/Makefile
-+++ b/multipath/Makefile
-@@ -23,7 +23,7 @@ install:
- 	$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
- 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(udevrulesdir)
- 	$(INSTALL_PROGRAM) -m 644 11-dm-mpath.rules $(DESTDIR)$(udevrulesdir)
--	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/56-multipath.rules
-+	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)$(udevrulesdir)/62-multipath.rules
- 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(modulesloaddir)
- 	$(INSTALL_PROGRAM) -m 644 modules-load.conf $(DESTDIR)$(modulesloaddir)/multipath.conf
- 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(tmpfilesdir)
-@@ -43,7 +43,7 @@ uninstall:
- 	$(RM) $(DESTDIR)$(udevrulesdir)/11-dm-mpath.rules
- 	$(RM) $(DESTDIR)$(modulesloaddir)/multipath.conf
- 	$(RM) $(DESTDIR)$(modulesloaddir)/scsi_dh.conf
--	$(RM) $(DESTDIR)$(libudevdir)/rules.d/56-multipath.rules
-+	$(RM) $(DESTDIR)$(libudevdir)/rules.d/62-multipath.rules
- 	$(RM) $(DESTDIR)$(man8dir)/$(EXEC).8
- 	$(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5
- 
--- 
-2.38.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch
deleted file mode 100644
index e7b3e12..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From cc38276a5d3926fd96e58366e15ba887d7d02ed0 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 26 Nov 2018 09:19:17 +0800
-Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep
-
-17
- 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Wed,
-19
- Apr 2017 06:10:01 -0500 Subject: [PATCH] RH: use rpm optflags if
-present
-
-Use the passed in optflags when compiling as an RPM, and keep the
-default flags as close as possible to the current fedora flags, while
-still being generic.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
-
-Upstream-Status: Pending
-
-update this patch to new version
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-[OP: Rebase to 0.9.3]
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
- Makefile.inc | 28 ++++++++++++++++++----------
- 1 file changed, 18 insertions(+), 10 deletions(-)
-
-diff --git a/Makefile.inc b/Makefile.inc
-index 57779fd8..34f2cc6d 100644
---- a/Makefile.inc
-+++ b/Makefile.inc
-@@ -140,20 +140,28 @@ FORTIFY_OPT := $(shell \
- 		echo "-D_FORTIFY_SOURCE=2"; \
- 	fi)
- 
--STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
--ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
--WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)
--WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)
--
--OPTFLAGS	:= -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
--WARNFLAGS	:= -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
--		  -Werror=implicit-function-declaration -Werror=format-security \
--		  $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
-+ifndef RPM_OPT_FLAGS
-+       STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
-+       OPTFLAGS        = -O2 -g -pipe -Wall -Werror=format-security \
-+                         -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \
-+                         $(STACKPROT) --param=ssp-buffer-size=4 \
-+                         -grecord-gcc-switches
-+       ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1)
-+               OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-+       endif
-+else
-+       OPTFLAGS = $(RPM_OPT_FLAGS)
-+endif
-+OPTFLAGS       += -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \
-+                  -Werror=implicit-function-declaration -Wno-sign-compare \
-+                  -Wno-unused-parameter -Werror=cast-qual \
-+                  -Werror=discarded-qualifiers
-+
- CPPFLAGS	:= $(FORTIFY_OPT) \
- 		   -DBIN_DIR=\"$(bindir)\" -DMULTIPATH_DIR=\"$(plugindir)\" -DRUN_DIR=\"${RUN}\" \
- 		   -DRUNTIME_DIR=\"$(runtimedir)\" \
- 		   -DCONFIG_DIR=\"$(configdir)\" -DEXTRAVERSION=\"$(EXTRAVERSION)\" -MMD -MP
--CFLAGS		:= --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe
-+CFLAGS		:= --std=gnu99 $(CFLAGS) $(OPTFLAGS) -pipe
- BIN_CFLAGS	= -fPIE -DPIE
- LIB_CFLAGS	= -fPIC
- SHARED_FLAGS	= -shared
--- 
-2.38.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
deleted file mode 100644
index 952009b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From d139474f2a6d87c1cd20dfbb916fe650bfcce968 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Tue, 4 Jun 2019 11:39:39 +0800
-Subject: [PATCH] multipath-tools: modify Makefile.inc for cross-compilation
-
-Do not look for systemd info on the host, and allow us to pass in CFLAGS
-using the OPTFLAGS variable.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
-Update for version 0.5.0-144-g770e6d0
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-Update for version 0.7.1
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
-update for version 0.7.7
-
-remove change about CFLAGS part, since patch 0024 already have similar function.
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
-update for version 0.8.1
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-[OP: Rebase to 0.9.3]
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
- Makefile.inc | 11 -----------
- 1 file changed, 11 deletions(-)
-
-diff --git a/Makefile.inc b/Makefile.inc
-index 34f2cc6d..ee6a4c9f 100644
---- a/Makefile.inc
-+++ b/Makefile.inc
-@@ -42,17 +42,6 @@ ifndef RUN
- 	endif
- endif
- 
--ifndef SYSTEMD
--	ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1)
--		SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}')
--	else
--		ifeq ($(shell systemctl --version >/dev/null 2>&1 && echo 1), 1)
--			SYSTEMD = $(shell systemctl --version 2> /dev/null | \
--				sed -n 's/systemd \([0-9]*\).*/\1/p')
--		endif
--	endif
--endif
--
- ifndef SYSTEMDPATH
- 	SYSTEMDPATH=usr/lib
- endif
--- 
-2.38.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch
deleted file mode 100644
index c2025ed..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From f20d7651a62efff818ebd0d1bc920f6f362c890d Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 26 Nov 2018 11:17:41 +0800
-Subject: [PATCH] Subject: [PATCH] Always use devmapper
-
-Do not try to compute several _API_ make variables
-from host information when cross-compiling.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
-Rebase to 0.7.1
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
-Rebase to 0.7.7
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
-Rebase to 0.7.9
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-[OP: Rebase to 0.9.3]
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
- libmultipath/Makefile | 34 +++++++---------------------------
- 1 file changed, 7 insertions(+), 27 deletions(-)
-
-diff --git a/libmultipath/Makefile b/libmultipath/Makefile
-index 3b60a525..72aca7ca 100644
---- a/libmultipath/Makefile
-+++ b/libmultipath/Makefile
-@@ -22,33 +22,13 @@ ifdef SYSTEMD
- 	endif
- endif
- 
--ifneq ($(call check_func,dm_task_no_flush,$(DEVMAPPER_INCDIR)/libdevmapper.h),0)
--	CPPFLAGS += -DLIBDM_API_FLUSH
--endif
--
--ifneq ($(call check_func,dm_task_get_errno,$(DEVMAPPER_INCDIR)/libdevmapper.h),0)
--	CPPFLAGS += -DLIBDM_API_GET_ERRNO
--endif
--
--ifneq ($(call check_func,dm_task_set_cookie,$(DEVMAPPER_INCDIR)/libdevmapper.h),0)
--	CPPFLAGS += -DLIBDM_API_COOKIE
--endif
--
--ifneq ($(call check_func,udev_monitor_set_receive_buffer_size,$(LIBUDEV_INCDIR)/libudev.h),0)
--	CPPFLAGS += -DLIBUDEV_API_RECVBUF
--endif
--
--ifneq ($(call check_func,dm_task_deferred_remove,$(DEVMAPPER_INCDIR)/libdevmapper.h),0)
--	CPPFLAGS += -DLIBDM_API_DEFERRED
--endif
--
--ifneq ($(call check_func,dm_hold_control_dev,$(DEVMAPPER_INCDIR)/libdevmapper.h),0)
--	CPPFLAGS += -DLIBDM_API_HOLD_CONTROL
--endif
--
--ifneq ($(call check_var,ELS_DTAG_LNK_INTEGRITY,$(LINUX_HEADERS_INCDIR)/scsi/fc/fc_els.h),0)
--	CPPFLAGS += -DFPIN_EVENT_HANDLER
--endif
-+CPPFLAGS += -DLIBDM_API_FLUSH
-+CPPFLAGS += -DLIBDM_API_GET_ERRNO
-+CPPFLAGS += -DLIBDM_API_COOKIE
-+CPPFLAGS += -DLIBUDEV_API_RECVBUF
-+CPPFLAGS += -DLIBDM_API_DEFERRED
-+CPPFLAGS += -DLIBDM_API_HOLD_CONTROL
-+CPPFLAGS += -DFPIN_EVENT_HANDLER
- 
- # object files referencing MULTIPATH_DIR or CONFIG_DIR
- # they need to be recompiled for unit tests
--- 
-2.38.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch
deleted file mode 100644
index 2d043c3..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 820d2ef3596189041da43d1139da8689336bb918 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 26 Nov 2018 11:19:45 +0800
-Subject: [PATCH] Subject: [PATCH] Always use devmapper for kpartx
-
-Do not try to compute the LIBDM_API_COOKIE make variable
-from host information when cross-compiling.
-
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
-Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
-Rebase to 0.7.1
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
-Rebase to 0.7.7
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-
-Rebase to 0.7.9
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-[OP: Rebase to 0.9.3]
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
- kpartx/Makefile | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/kpartx/Makefile b/kpartx/Makefile
-index 742d3bcd..d886483d 100644
---- a/kpartx/Makefile
-+++ b/kpartx/Makefile
-@@ -9,9 +9,7 @@ LDFLAGS += $(BIN_LDFLAGS)
- 
- LIBDEPS += -ldevmapper
- 
--ifneq ($(call check_func,dm_task_set_cookie,$(DEVMAPPER_INCDIR)/libdevmapper.h),0)
--	CPPFLAGS += -DLIBDM_API_COOKIE
--endif
-+CPPFLAGS += -DLIBDM_API_COOKIE
- 
- OBJS = bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \
- 	gpt.o mac.o ps3.o crc32.o lopart.o xstrncpy.o devmapper.o
--- 
-2.38.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0032-libdmmp-Makefile-replace-perl-with-sed-in-install-ta.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0032-libdmmp-Makefile-replace-perl-with-sed-in-install-ta.patch
deleted file mode 100644
index ec123b2..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0032-libdmmp-Makefile-replace-perl-with-sed-in-install-ta.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 21a8680b7bd436867ac689a0b4b1b18a3359e208 Mon Sep 17 00:00:00 2001
-From: Geoff Parker <geoffrey.parker@arthrex.com>
-Date: Fri, 9 Oct 2020 17:48:47 +0000
-Subject: [PATCH] libdmmp/Makefile: replace perl with sed in install target to
- work with pseudo
-
-The multipath-tools libdmmp/Makefile install target uses 'perl -i' instead
-of 'sed -i' for string substitutions. The perl method creates a temporary file
-and overwrites the original which changes the inodes and corrupts the pseudo
-db. Changes to pseduo cause a build abort rather than allow possible bad
-ownership or permissions settings on the files. 'sed -i' is compatible
-with pseudo.
-
-Signed-off-by: Geoff Parker <geoffrey.parker@arthrex.com>
-[OP: Rebase to 0.9.3]
-Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
----
-Upstream-Status: Pending
-
- libdmmp/Makefile | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/libdmmp/Makefile b/libdmmp/Makefile
-index e4589250..34e06425 100644
---- a/libdmmp/Makefile
-+++ b/libdmmp/Makefile
-@@ -39,11 +39,11 @@ install:
- 	$(LN) $(LIBS) $(DESTDIR)$(usrlibdir)/$(DEVLIB)
- 	$(INSTALL_PROGRAM) -m 644 -D \
- 		$(PKGFILE).in $(DESTDIR)$(pkgconfdir)/$(PKGFILE)
--	perl -i -pe 's|__VERSION__|$(LIBDMMP_VERSION)|g' \
-+	sed -i 's|__VERSION__|$(LIBDMMP_VERSION)|g' \
- 		$(DESTDIR)$(pkgconfdir)/$(PKGFILE)
--	perl -i -pe 's|__LIBDIR__|$(usrlibdir)|g' \
-+	sed -i 's|__LIBDIR__|$(usrlibdir)|g' \
- 		$(DESTDIR)$(pkgconfdir)/$(PKGFILE)
--	perl -i -pe 's|__INCLUDEDIR__|$(includedir)|g' \
-+	sed -i 's|__INCLUDEDIR__|$(includedir)|g' \
- 		$(DESTDIR)$(pkgconfdir)/$(PKGFILE)
- 	$(INSTALL_PROGRAM) -d 755 $(DESTDIR)$(man3dir)
- 	$(INSTALL_PROGRAM) -m 644 -t $(DESTDIR)$(man3dir) docs/man/*.3
--- 
-2.38.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.8.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.8.bb
index a7a9019..df95df6 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.8.bb
@@ -32,25 +32,23 @@
 SRC_URI = "git://github.com/opensvc/multipath-tools.git;protocol=https;branch=master \
            file://multipathd.oe \
            file://multipath.conf.example \
-           file://0021-RH-fixup-udev-rules-for-redhat.patch \
-           file://0022-RH-Remove-the-property-blacklist-exception-builtin.patch \
-           file://0023-RH-don-t-start-without-a-config-file.patch \
-           file://0024-RH-use-rpm-optflags-if-present.patch \
-           file://0025-RH-add-mpathconf.patch \
-           file://0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch \
-           file://0027-RH-warn-on-invalid-regex-instead-of-failing.patch \
-           file://0028-RH-reset-default-find_mutipaths-value-to-off.patch \
-           file://0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch \
-           file://0030-Always-use-devmapper.patch \
-           file://0031-Always-use-devmapper-for-kpartx.patch \
-           file://0032-libdmmp-Makefile-replace-perl-with-sed-in-install-ta.patch \
-           file://0001-fix-bug-of-do_compile-and-do_install.patch \
-           file://0001-add-explicit-dependency-on-libraries.patch \
+           file://0001-RH-fixup-udev-rules-for-redhat.patch \
+           file://0002-RH-Remove-the-property-blacklist-exception-builtin.patch \
+           file://0003-RH-don-t-start-without-a-config-file.patch \
+           file://0004-RH-use-rpm-optflags-if-present.patch \
+           file://0005-RH-add-mpathconf.patch \
+           file://0006-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch \
+           file://0007-RH-warn-on-invalid-regex-instead-of-failing.patch \
+           file://0008-RH-reset-default-find_mutipaths-value-to-off.patch \
+           file://0009-multipath-tools-modify-create-config.mk-for-cross-co.patch \
+           file://0010-Subject-PATCH-Always-use-devmapper.patch \
+           file://0011-fix-bug-of-do_compile-and-do_install.patch \
+           file://0012-add-explicit-dependency-on-libraries.patch \
            "
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
 
-SRCREV = "1332947447133fdf26246012b836868a3d974f0e"
+SRCREV = "3daacfdfd110b24a3a7d5a276dcf8512b7039199"
 
 S = "${WORKDIR}/git"
 
@@ -103,6 +101,7 @@
     ${D}${sysconfdir}/multipath.conf.example
 }
 
+FILES:${PN} += "${systemd_system_unitdir}"
 FILES:${PN}-dbg += "${base_libdir}/multipath/.debug"
 
 PACKAGES =+ "${PN}-libs"
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.16.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.6.7.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.16.bb
rename to meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.6.7.bb
index 8d13a4d..e807fde 100644
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.5.16.bb
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.6.7.bb
@@ -21,7 +21,7 @@
     file://0001-build-top.mk-unset-STRIP_OPTS.patch \
 "
 
-SRC_URI[sha256sum] = "546ba591822e8bb0e467d40c4d4a30f89d937c3a507fe83a578f582f6a211327"
+SRC_URI[sha256sum] = "cd775f625c944ed78a3da18a03b03b08eea73c8aabc97b41bb336e9a10954930"
 
 DEPENDS = "util-linux groff-native"
 
@@ -62,7 +62,7 @@
 # The backend must be set by the configuration.  This controls the
 # required database.
 #
-# Backends="asyncmeta dnssrv ldap mdb meta ndb null passwd perl relay sock sql wt"
+# Backends="asyncmeta dnssrv ldap mdb meta null passwd perl relay sock sql wt"
 #
 # Note that multiple backends can be built.  The ldbm backend requires a
 # build-time choice of database API. To use the gdbm (or other) API the 
@@ -85,9 +85,6 @@
 #--enable-meta         enable metadirectory backend no|yes|mod no
 PACKAGECONFIG[meta] = "--enable-meta=mod,--enable-meta=no,"
 
-#--enable-ndb          enable MySQL NDB Cluster backend no|yes|mod [no]
-PACKAGECONFIG[ndb] = "--enable-ndb=mod,--enable-ndb=no,"
-
 #--enable-null         enable null backend no|yes|mod no
 PACKAGECONFIG[null] = "--enable-null=mod,--enable-null=no,"
 
@@ -122,7 +119,7 @@
 
 #--enable-proxycache   Proxy Cache overlay no|yes|mod no
 PACKAGECONFIG[proxycache] = "--enable-proxycache=mod,--enable-proxycache=no,"
-FILES:${PN}-overlay-proxycache = "${md}/pcache-*.so.*"
+FILES:${PN}-overlay-proxycache = "${md}/pcache.so.*"
 PACKAGES += "${PN}-overlay-proxycache"
 
 # Append URANDOM_DEVICE='/dev/urandom' to CPPFLAGS:
@@ -215,7 +212,7 @@
 python populate_packages:prepend () {
     backend_dir    = d.expand('${libexecdir}/openldap')
     do_split_packages(d, backend_dir, r'back_([a-z]*)\.so$', 'openldap-backend-%s', 'OpenLDAP %s backend', prepend=True, extra_depends='', allow_links=True)
-    do_split_packages(d, backend_dir, r'back_([a-z]*)\-.*\.so\..*$', 'openldap-backend-%s', 'OpenLDAP %s backend', extra_depends='', allow_links=True)
+    do_split_packages(d, backend_dir, r'back_([a-z]*)\.so\..*$', 'openldap-backend-%s', 'OpenLDAP %s backend', extra_depends='', allow_links=True)
 
     metapkg = "${PN}-backends"
     d.setVar('ALLOW_EMPTY:' + metapkg, "1")
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_4.0.1.bb b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_4.6.0.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_4.0.1.bb
rename to meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_4.6.0.bb
index 77a5e67..4cc5d84 100644
--- a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_4.0.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_4.6.0.bb
@@ -10,10 +10,10 @@
 HOMEPAGE = "http://www.balabit.com/network-security/syslog-ng/opensource-logging-system"
 
 LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=71d15c2fb22f43e1a380f3f799ebde30"
+LIC_FILES_CHKSUM = "file://COPYING;md5=924958cefc9f7de3e0b818832b8a1cec"
 
 # util-linux added to get libuuid
-DEPENDS = "libpcre flex glib-2.0 openssl util-linux bison-native"
+DEPENDS = "libpcre flex glib-2.0 openssl util-linux bison-native curl"
 
 SRC_URI = "https://github.com/balabit/syslog-ng/releases/download/${BP}/${BP}.tar.gz \
            file://syslog-ng.conf.systemd \
@@ -26,7 +26,7 @@
 "
 SRC_URI:append:powerpc64le = " file://0001-plugin.c-workaround-powerpc64le-segfaults-error.patch"
 
-SRC_URI[sha256sum] = "c16eafe447191c079f471846182876b7919d3d789af8c1f9fe55ab14521ceb2c"
+SRC_URI[sha256sum] = "b69e3360dfb96a754a4e1cbead4daef37128b1152a23572356db4ab64a475d4f"
 
 UPSTREAM_CHECK_URI = "https://github.com/balabit/syslog-ng/releases"
 
diff --git a/meta-openembedded/meta-oe/recipes-test/googletest/googletest_1.14.0.bb b/meta-openembedded/meta-oe/recipes-test/googletest/googletest_1.14.0.bb
index 8c75f93..1b05f3d 100644
--- a/meta-openembedded/meta-oe/recipes-test/googletest/googletest_1.14.0.bb
+++ b/meta-openembedded/meta-oe/recipes-test/googletest/googletest_1.14.0.bb
@@ -10,11 +10,17 @@
 SRCREV = "f8d7d77c06936315286eb55f8de22cd23c188571"
 SRC_URI = "git://github.com/google/googletest.git;branch=main;protocol=https"
 
-inherit cmake
+inherit cmake pkgconfig
+
+# allow for shared libraries, but do not default to them
+#
+PACKAGECONFIG[shared] = "-DBUILD_SHARED_LIBS=ON,-DBUILD_SHARED_LIBS=OFF,,"
+
 
 ALLOW_EMPTY:${PN} = "1"
 ALLOW_EMPTY:${PN}-dbg = "1"
 
+ALLOW_EMPTY:${PN}-staticdev = "1"
 RDEPENDS:${PN}-dev += "${PN}-staticdev"
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-test/syzkaller/syzkaller_git.bb b/meta-openembedded/meta-oe/recipes-test/syzkaller/syzkaller_git.bb
index 2adc06a..b43207f 100644
--- a/meta-openembedded/meta-oe/recipes-test/syzkaller/syzkaller_git.bb
+++ b/meta-openembedded/meta-oe/recipes-test/syzkaller/syzkaller_git.bb
@@ -10,7 +10,13 @@
            file://0001-sys-targets-targets.go-allow-users-to-override-hardc.patch;patchdir=src/${GO_IMPORT} \
            file://0001-executor-Include-missing-linux-falloc.h.patch;patchdir=src/${GO_IMPORT} \
            "
-SRCREV = "6d01f20890edf11b99bb54573025b11c1acd2d52"
+SRCREV = "25905f5d0a2a7883bd33491997556193582c6059"
+
+export GOPROXY = "https://proxy.golang.org,direct"
+# Workaround for network access issue during compile step.
+# This needs to be fixed in the recipes buildsystem so that
+# it can be accomplished during do_fetch task.
+do_compile[network] = "1"
 
 COMPATIBLE_HOST = "(x86_64|i.86|arm|aarch64).*-linux"
 
@@ -26,6 +32,8 @@
 
 CGO_ENABLED = "1"
 
+LDFLAGS:append:class-target = "${@bb.utils.contains_any("TC_CXX_RUNTIME", "llvm android", " -lc++", " -lstdc++", d)}"
+
 DEPENDS:class-native += "qemu-system-native"
 
 do_compile:class-native() {
@@ -46,7 +54,7 @@
     unset GOOS
     unset GOARCH
 
-    oe_runmake GO="${GO}" CC="${CXX}" CFLAGS="${CXXFLAGS} ${LDFLAGS}" REV=${SRCREV} target
+    oe_runmake GO="${GO}" CFLAGS="${CXXFLAGS} ${LDFLAGS}" REV=${SRCREV} target
 }
 
 do_install:class-native() {
