diff options
author | Thorsten Leemhuis <fedora@leemhuis.info> | 2018-04-13 20:00:38 +0200 |
---|---|---|
committer | Thorsten Leemhuis <fedora@leemhuis.info> | 2018-04-13 20:00:38 +0200 |
commit | b752298355854041051b59db67c5e9d5c2e25ce2 (patch) | |
tree | caf9a2f4b1a8b79053ca71e21d4b1579abfd4a02 | |
parent | 9197b3f4350f8707d905acb031bf68d3532cdebc (diff) | |
parent | a242ace4292cab0b80878551cbe385a0dbd30548 (diff) | |
download | kernel-b752298355854041051b59db67c5e9d5c2e25ce2.tar.gz kernel-b752298355854041051b59db67c5e9d5c2e25ce2.tar.xz kernel-b752298355854041051b59db67c5e9d5c2e25ce2.zip |
Merge remote-tracking branch 'origin/master' into rawhide-user-thl-vanilla-fedorakernel-4.17.0-0.rc0.git9.1.vanilla.knurd.1.fc29kernel-4.17.0-0.rc0.git9.1.vanilla.knurd.1.fc28kernel-4.17.0-0.rc0.git9.1.vanilla.knurd.1.fc27kernel-4.17.0-0.rc0.git9.1.vanilla.knurd.1.fc26
-rw-r--r-- | bcm2837-lan78xx-fixes.patch | 29 | ||||
-rw-r--r-- | clk-ti-fix-flag-space-conflict-with-clkctrl-clocks.patch | 58 | ||||
-rw-r--r-- | configs/fedora/generic/arm/armv7/armv7/CONFIG_CHARGER_TPS65217 | 2 | ||||
-rw-r--r-- | configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TPS65217 | 1 | ||||
-rw-r--r-- | configs/fedora/generic/x86/i686/CONFIG_MFD_CS5535 | 2 | ||||
-rw-r--r-- | configs/fedora/generic/x86/i686PAE/CONFIG_MFD_CS5535 | 2 | ||||
-rw-r--r-- | crypto-testmgr-Allow-different-compression-results.patch | 163 | ||||
-rw-r--r-- | gitrev | 2 | ||||
-rw-r--r-- | kernel-armv7hl-debug.config | 4 | ||||
-rw-r--r-- | kernel-armv7hl.config | 4 | ||||
-rw-r--r-- | kernel-i686-PAE.config | 2 | ||||
-rw-r--r-- | kernel-i686-PAEdebug.config | 2 | ||||
-rw-r--r-- | kernel-i686-debug.config | 2 | ||||
-rw-r--r-- | kernel-i686.config | 2 | ||||
-rw-r--r-- | kernel.spec | 16 | ||||
-rw-r--r-- | sources | 2 |
16 files changed, 248 insertions, 45 deletions
diff --git a/bcm2837-lan78xx-fixes.patch b/bcm2837-lan78xx-fixes.patch index f877ac15b..0ca7852c6 100644 --- a/bcm2837-lan78xx-fixes.patch +++ b/bcm2837-lan78xx-fixes.patch @@ -28,35 +28,6 @@ index a21039852f8d..cd20ce4ed87d 100644 ret = lan78xx_write_reg(dev, HW_CFG, buf); ret = lan78xx_read_reg(dev, USB_CFG0, &buf); -From f8a798bb45ae15cbec980c8e921eb377fd1a3df6 Mon Sep 17 00:00:00 2001 -From: Phil Elwell <phil@raspberrypi.org> -Date: Tue, 28 Nov 2017 12:02:37 +0000 -Subject: [PATCH] lan78xx: Correctly indicate invalid OTP - -lan78xx_read_otp tries to return -EINVAL in the event of invalid OTP -content, but the value gets overwritten before it is returned and the -read goes ahead anyway. Make the read conditional as it should be -and preserve the error code. - -Signed-off-by: Phil Elwell <phil@raspberrypi.org> ---- - drivers/net/usb/lan78xx.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index cd20ce4ed87d..b270935f3f8d 100644 ---- a/drivers/net/usb/lan78xx.c -+++ b/drivers/net/usb/lan78xx.c -@@ -929,7 +929,8 @@ static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset, - offset += 0x100; - else - ret = -EINVAL; -- ret = lan78xx_read_raw_otp(dev, offset, length, data); -+ if (!ret) -+ ret = lan78xx_read_raw_otp(dev, offset, length, data); - } - - return ret; From 4a4710f3847cd087e150f83382dffd92e09d9914 Mon Sep 17 00:00:00 2001 From: Phil Elwell <phil@raspberrypi.org> Date: Sat, 17 Mar 2018 00:10:02 +0100 diff --git a/clk-ti-fix-flag-space-conflict-with-clkctrl-clocks.patch b/clk-ti-fix-flag-space-conflict-with-clkctrl-clocks.patch new file mode 100644 index 000000000..c1ef68279 --- /dev/null +++ b/clk-ti-fix-flag-space-conflict-with-clkctrl-clocks.patch @@ -0,0 +1,58 @@ +From patchwork Tue Mar 27 17:47:04 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: clk: ti: fix flag space conflict with clkctrl clocks +From: Tero Kristo <t-kristo@ti.com> +X-Patchwork-Id: 10311335 +Message-Id: <1522172824-14094-1-git-send-email-t-kristo@ti.com> +To: <sboyd@kernel.org>, <mturquette@baylibre.com>, + <linux-omap@vger.kernel.org>, <linux-clk@vger.kernel.org>, + <tony@atomide.com> +Cc: <arnd@arndb.de>, <linux-arm-kernel@lists.infradead.org> +Date: Tue, 27 Mar 2018 20:47:04 +0300 + +The introduction of support for CLK_SET_RATE_PARENT flag for clkctrl +clocks used a generic clock flag, which causes a conflict with the +rest of the clkctrl flags, namely the NO_IDLEST flag. This can cause +boot failures on certain platforms where this flag is introduced, by +omitting the wait for the clockctrl module to be fully enabled before +proceeding with rest of the code. + +Fix this by moving all the clkctrl specific flags to their own bit-range. + +Signed-off-by: Tero Kristo <t-kristo@ti.com> +Fixes: 49159a9dc3da ("clk: ti: add support for CLK_SET_RATE_PARENT flag") +Reported-by: Christophe Lyon <christophe.lyon@linaro.org> +Tested-by: Tony Lindgren <tony@atomide.com> +--- + drivers/clk/ti/clock.h | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/drivers/clk/ti/clock.h b/drivers/clk/ti/clock.h +index 90b86aa..b582780 100644 +--- a/drivers/clk/ti/clock.h ++++ b/drivers/clk/ti/clock.h +@@ -76,6 +76,11 @@ enum { + #define CLKF_CORE (1 << 9) + #define CLKF_J_TYPE (1 << 10) + ++/* CLKCTRL flags */ ++#define CLKF_SW_SUP BIT(5) ++#define CLKF_HW_SUP BIT(6) ++#define CLKF_NO_IDLEST BIT(7) ++ + #define CLK(dev, con, ck) \ + { \ + .lk = { \ +@@ -185,10 +190,6 @@ struct omap_clkctrl_data { + extern const struct omap_clkctrl_data dm814_clkctrl_data[]; + extern const struct omap_clkctrl_data dm816_clkctrl_data[]; + +-#define CLKF_SW_SUP BIT(0) +-#define CLKF_HW_SUP BIT(1) +-#define CLKF_NO_IDLEST BIT(2) +- + typedef void (*ti_of_clk_init_cb_t)(void *, struct device_node *); + + struct clk *ti_clk_register(struct device *dev, struct clk_hw *hw, diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_CHARGER_TPS65217 b/configs/fedora/generic/arm/armv7/armv7/CONFIG_CHARGER_TPS65217 index e77c2fc05..629b8503c 100644 --- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_CHARGER_TPS65217 +++ b/configs/fedora/generic/arm/armv7/armv7/CONFIG_CHARGER_TPS65217 @@ -1 +1 @@ -CONFIG_CHARGER_TPS65217=m +# CONFIG_CHARGER_TPS65217 is not set diff --git a/configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TPS65217 b/configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TPS65217 deleted file mode 100644 index 54a061854..000000000 --- a/configs/fedora/generic/arm/armv7/armv7/CONFIG_MFD_TPS65217 +++ /dev/null @@ -1 +0,0 @@ -CONFIG_MFD_TPS65217=y diff --git a/configs/fedora/generic/x86/i686/CONFIG_MFD_CS5535 b/configs/fedora/generic/x86/i686/CONFIG_MFD_CS5535 index ac2f3c2fc..e3d240387 100644 --- a/configs/fedora/generic/x86/i686/CONFIG_MFD_CS5535 +++ b/configs/fedora/generic/x86/i686/CONFIG_MFD_CS5535 @@ -1 +1 @@ -CONFIG_MFD_CS5535=m +CONFIG_MFD_CS5535=y diff --git a/configs/fedora/generic/x86/i686PAE/CONFIG_MFD_CS5535 b/configs/fedora/generic/x86/i686PAE/CONFIG_MFD_CS5535 index ac2f3c2fc..e3d240387 100644 --- a/configs/fedora/generic/x86/i686PAE/CONFIG_MFD_CS5535 +++ b/configs/fedora/generic/x86/i686PAE/CONFIG_MFD_CS5535 @@ -1 +1 @@ -CONFIG_MFD_CS5535=m +CONFIG_MFD_CS5535=y diff --git a/crypto-testmgr-Allow-different-compression-results.patch b/crypto-testmgr-Allow-different-compression-results.patch new file mode 100644 index 000000000..c752770ef --- /dev/null +++ b/crypto-testmgr-Allow-different-compression-results.patch @@ -0,0 +1,163 @@ +From patchwork Wed Apr 11 18:28:32 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: crypto: testmgr: Allow different compression results +From: Jan Glauber <jglauber@cavium.com> +X-Patchwork-Id: 10336001 +Message-Id: <20180411182832.27761-1-jglauber@cavium.com> +To: Herbert Xu <herbert@gondor.apana.org.au> +Cc: "David S . Miller" <davem@davemloft.net>, + linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, + Mahipal Challa <mchalla@cavium.com>, + Balakrishna Bhamidipati <bbhamidipati@cavium.com>, + Jan Glauber <jglauber@cavium.com> +Date: Wed, 11 Apr 2018 20:28:32 +0200 + +From: Mahipal Challa <mchalla@cavium.com> + +The following error is triggered by the ThunderX ZIP driver +if the testmanager is enabled: + +[ 199.069437] ThunderX-ZIP 0000:03:00.0: Found ZIP device 0 177d:a01a on Node 0 +[ 199.073573] alg: comp: Compression test 1 failed for deflate-generic: output len = 37 + +The reason for this error is the verification of the compression +results. Verifying the compression result only works if all +algorithm parameters are identical, in this case to the software +implementation. + +Different compression engines like the ThunderX ZIP coprocessor +might yield different compression results by tuning the +algorithm parameters. In our case the compressed result is +shorter than the test vector. + +We should not forbid different compression results but only +check that compression -> decompression yields the same +result. This is done already in the acomp test. Do something +similar for test_comp(). + +Signed-off-by: Mahipal Challa <mchalla@cavium.com> +Signed-off-by: Balakrishna Bhamidipati <bbhamidipati@cavium.com> +[jglauber@cavium.com: removed unrelated printk changes, rewrote commit msg, + fixed whitespace and unneeded initialization] +Signed-off-by: Jan Glauber <jglauber@cavium.com> +--- + crypto/testmgr.c | 50 +++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 37 insertions(+), 13 deletions(-) + +diff --git a/crypto/testmgr.c b/crypto/testmgr.c +index af4a01c..627e82e 100644 +--- a/crypto/testmgr.c ++++ b/crypto/testmgr.c +@@ -1342,19 +1342,30 @@ static int test_comp(struct crypto_comp *tfm, + int ctcount, int dtcount) + { + const char *algo = crypto_tfm_alg_driver_name(crypto_comp_tfm(tfm)); ++ char *output, *decomp_output; + unsigned int i; +- char result[COMP_BUF_SIZE]; + int ret; + ++ output = kmalloc(COMP_BUF_SIZE, GFP_KERNEL); ++ if (!output) ++ return -ENOMEM; ++ ++ decomp_output = kmalloc(COMP_BUF_SIZE, GFP_KERNEL); ++ if (!decomp_output) { ++ kfree(output); ++ return -ENOMEM; ++ } ++ + for (i = 0; i < ctcount; i++) { + int ilen; + unsigned int dlen = COMP_BUF_SIZE; + +- memset(result, 0, sizeof (result)); ++ memset(output, 0, sizeof(COMP_BUF_SIZE)); ++ memset(decomp_output, 0, sizeof(COMP_BUF_SIZE)); + + ilen = ctemplate[i].inlen; + ret = crypto_comp_compress(tfm, ctemplate[i].input, +- ilen, result, &dlen); ++ ilen, output, &dlen); + if (ret) { + printk(KERN_ERR "alg: comp: compression failed " + "on test %d for %s: ret=%d\n", i + 1, algo, +@@ -1362,7 +1373,17 @@ static int test_comp(struct crypto_comp *tfm, + goto out; + } + +- if (dlen != ctemplate[i].outlen) { ++ ilen = dlen; ++ dlen = COMP_BUF_SIZE; ++ ret = crypto_comp_decompress(tfm, output, ++ ilen, decomp_output, &dlen); ++ if (ret) { ++ pr_err("alg: comp: compression failed: decompress: on test %d for %s failed: ret=%d\n", ++ i + 1, algo, -ret); ++ goto out; ++ } ++ ++ if (dlen != ctemplate[i].inlen) { + printk(KERN_ERR "alg: comp: Compression test %d " + "failed for %s: output len = %d\n", i + 1, algo, + dlen); +@@ -1370,10 +1391,11 @@ static int test_comp(struct crypto_comp *tfm, + goto out; + } + +- if (memcmp(result, ctemplate[i].output, dlen)) { +- printk(KERN_ERR "alg: comp: Compression test %d " +- "failed for %s\n", i + 1, algo); +- hexdump(result, dlen); ++ if (memcmp(decomp_output, ctemplate[i].input, ++ ctemplate[i].inlen)) { ++ pr_err("alg: comp: compression failed: output differs: on test %d for %s\n", ++ i + 1, algo); ++ hexdump(decomp_output, dlen); + ret = -EINVAL; + goto out; + } +@@ -1383,11 +1405,11 @@ static int test_comp(struct crypto_comp *tfm, + int ilen; + unsigned int dlen = COMP_BUF_SIZE; + +- memset(result, 0, sizeof (result)); ++ memset(decomp_output, 0, sizeof(COMP_BUF_SIZE)); + + ilen = dtemplate[i].inlen; + ret = crypto_comp_decompress(tfm, dtemplate[i].input, +- ilen, result, &dlen); ++ ilen, decomp_output, &dlen); + if (ret) { + printk(KERN_ERR "alg: comp: decompression failed " + "on test %d for %s: ret=%d\n", i + 1, algo, +@@ -1403,10 +1425,10 @@ static int test_comp(struct crypto_comp *tfm, + goto out; + } + +- if (memcmp(result, dtemplate[i].output, dlen)) { ++ if (memcmp(decomp_output, dtemplate[i].output, dlen)) { + printk(KERN_ERR "alg: comp: Decompression test %d " + "failed for %s\n", i + 1, algo); +- hexdump(result, dlen); ++ hexdump(decomp_output, dlen); + ret = -EINVAL; + goto out; + } +@@ -1415,11 +1437,13 @@ static int test_comp(struct crypto_comp *tfm, + ret = 0; + + out: ++ kfree(decomp_output); ++ kfree(output); + return ret; + } + + static int test_acomp(struct crypto_acomp *tfm, +- const struct comp_testvec *ctemplate, ++ const struct comp_testvec *ctemplate, + const struct comp_testvec *dtemplate, + int ctcount, int dtcount) + { @@ -1 +1 @@ -e241e3f2bf975788a1b70dff2eb5180ca395b28e +16e205cf42da1f497b10a4a24f563e6c0d574eec diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config index 20c123d6e..a036d4594 100644 --- a/kernel-armv7hl-debug.config +++ b/kernel-armv7hl-debug.config @@ -883,7 +883,7 @@ CONFIG_CHARGER_QCOM_SMBB=m # CONFIG_CHARGER_SBS is not set CONFIG_CHARGER_SMB347=m CONFIG_CHARGER_TPS65090=m -CONFIG_CHARGER_TPS65217=m +# CONFIG_CHARGER_TPS65217 is not set CONFIG_CHARGER_TWL4030=m # CONFIG_CHASH_SELFTEST is not set # CONFIG_CHASH_STATS is not set @@ -3333,7 +3333,7 @@ CONFIG_MFD_TI_LMU=m # CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TPS65086 is not set CONFIG_MFD_TPS65090=y -CONFIG_MFD_TPS65217=y +# CONFIG_MFD_TPS65217 is not set CONFIG_MFD_TPS65218=m CONFIG_MFD_TPS6586X=y CONFIG_MFD_TPS65910=y diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config index e79bc3e44..e0428c8b9 100644 --- a/kernel-armv7hl.config +++ b/kernel-armv7hl.config @@ -882,7 +882,7 @@ CONFIG_CHARGER_QCOM_SMBB=m # CONFIG_CHARGER_SBS is not set CONFIG_CHARGER_SMB347=m CONFIG_CHARGER_TPS65090=m -CONFIG_CHARGER_TPS65217=m +# CONFIG_CHARGER_TPS65217 is not set CONFIG_CHARGER_TWL4030=m # CONFIG_CHASH_SELFTEST is not set # CONFIG_CHASH_STATS is not set @@ -3312,7 +3312,7 @@ CONFIG_MFD_TI_LMU=m # CONFIG_MFD_TIMBERDALE is not set # CONFIG_MFD_TPS65086 is not set CONFIG_MFD_TPS65090=y -CONFIG_MFD_TPS65217=y +# CONFIG_MFD_TPS65217 is not set CONFIG_MFD_TPS65218=m CONFIG_MFD_TPS6586X=y CONFIG_MFD_TPS65910=y diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config index 8034b533c..3a69c9329 100644 --- a/kernel-i686-PAE.config +++ b/kernel-i686-PAE.config @@ -2955,7 +2955,7 @@ CONFIG_MFD_BD9571MWV=m CONFIG_MFD_CORE=y # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_CROS_EC is not set -CONFIG_MFD_CS5535=m +CONFIG_MFD_CS5535=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9055 is not set diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config index f63457072..95aaed21a 100644 --- a/kernel-i686-PAEdebug.config +++ b/kernel-i686-PAEdebug.config @@ -2976,7 +2976,7 @@ CONFIG_MFD_BD9571MWV=m CONFIG_MFD_CORE=y # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_CROS_EC is not set -CONFIG_MFD_CS5535=m +CONFIG_MFD_CS5535=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9055 is not set diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config index 9bacbf714..440887c14 100644 --- a/kernel-i686-debug.config +++ b/kernel-i686-debug.config @@ -2976,7 +2976,7 @@ CONFIG_MFD_BD9571MWV=m CONFIG_MFD_CORE=y # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_CROS_EC is not set -CONFIG_MFD_CS5535=m +CONFIG_MFD_CS5535=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9055 is not set diff --git a/kernel-i686.config b/kernel-i686.config index 7f6abb026..5a528effb 100644 --- a/kernel-i686.config +++ b/kernel-i686.config @@ -2955,7 +2955,7 @@ CONFIG_MFD_BD9571MWV=m CONFIG_MFD_CORE=y # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_CROS_EC is not set -CONFIG_MFD_CS5535=m +CONFIG_MFD_CS5535=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9055 is not set diff --git a/kernel.spec b/kernel.spec index 961bfb904..c8bd8afff 100644 --- a/kernel.spec +++ b/kernel.spec @@ -77,7 +77,7 @@ Summary: The Linux kernel # The rc snapshot level %global rcrev 0 # The git snapshot level -%define gitrev 8 +%define gitrev 9 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -600,7 +600,13 @@ Patch304: arm-dts-imx6qdl-udoo-Disable-usbh1-to-avoid-kernel-hang.patch # https://marc.info/?l=linux-kernel&m=152328880417846&w=2 Patch308: arm64-thunderx-crypto-zip-fixes.patch -Patch309: arm-tegra-fix-nouveau-crash.patch +# https://www.spinics.net/lists/linux-crypto/msg32725.html +Patch309: crypto-testmgr-Allow-different-compression-results.patch + +Patch310: arm-tegra-fix-nouveau-crash.patch + +# https://patchwork.kernel.org/patch/10311335/ +Patch312: clk-ti-fix-flag-space-conflict-with-clkctrl-clocks.patch # Fix USB on the RPi https://patchwork.kernel.org/patch/9879371/ Patch320: bcm283x-dma-mapping-skip-USB-devices-when-configuring-DMA-during-probe.patch @@ -1878,12 +1884,18 @@ fi # # %changelog +* Fri Apr 13 2018 Justin M. Forbes <jforbes@fedoraproject.org> - 4.17.0-0.rc0.git9.1 +- Linux v4.16-11958-g16e205cf42da + * Thu Apr 12 2018 Justin M. Forbes <jforbes@fedoraproject.org> - 4.17.0-0.rc0.git8.1 - Linux v4.16-11766-ge241e3f2bf97 * Thu Apr 12 2018 Peter Robinson <pbrobinson@fedoraproject.org> - Patch to fix nouveau on Tegra platforms - Enable IOMMU on Exynos now upstream does +- Disable tps65217-charger on BeagleBone to fix USB-OTG port rhbz 1487399 +- Add fix for the BeagleBone boot failure +- Further fix for ThunderX ZIP driver * Wed Apr 11 2018 Laura Abbott <labbott@redhat.com> - Enable JFFS2 and some MTD modules (rhbz 1474493) @@ -1,2 +1,2 @@ SHA512 (linux-4.16.tar.xz) = ab47849314b177d0eec9dbf261f33972b0d89fb92fb0650130ffa7abc2f36c0fab2d06317dc1683c51a472a9a631573a9b1e7258d6281a2ee189897827f14662 -SHA512 (patch-4.16-git8.xz) = 2da7db8d3f99426947242f1e978f536bb9a175ee4a249f7bc1350e13a6144d8ce753051a7cc2c178aaa1bec371d37a7fa076384a04fb8c5853a473db1c7d25d9 +SHA512 (patch-4.16-git9.xz) = 2a78f7fd091aa2e7af1cb53537efc7d73a98068b1a98e47d77aa4673a8c0d874a60181cd888cf431011dff726ebb52e81d4983cc5ce65f1a5e2697d04d5490e4 |