From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id YPoxKJbiM2HbFgEAgWs5BA (envelope-from ) for ; Sat, 04 Sep 2021 23:18:14 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id 4Bu9I5biM2EGSAAAbx9fmQ (envelope-from ) for ; Sat, 04 Sep 2021 21:18:14 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id AC2ED190B7 for ; Sat, 4 Sep 2021 23:18:12 +0200 (CEST) Received: from localhost ([::1]:54782 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mMd3D-00085D-Pa for larch@yhetil.org; Sat, 04 Sep 2021 17:18:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33506) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMd34-00084A-FN for guix-patches@gnu.org; Sat, 04 Sep 2021 17:18:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:37253) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mMd34-0005TU-7q for guix-patches@gnu.org; Sat, 04 Sep 2021 17:18:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mMd33-0004Ap-VC for guix-patches@gnu.org; Sat, 04 Sep 2021 17:18:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#50384] [PATCH] Optimise search-patch (reducing I/O) Resent-From: Maxime Devos Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Sep 2021 21:18:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 50384 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 50384@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.163079026116016 (code B ref -1); Sat, 04 Sep 2021 21:18:01 +0000 Received: (at submit) by debbugs.gnu.org; 4 Sep 2021 21:17:41 +0000 Received: from localhost ([127.0.0.1]:48799 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMd2d-0004A7-33 for submit@debbugs.gnu.org; Sat, 04 Sep 2021 17:17:41 -0400 Received: from lists.gnu.org ([209.51.188.17]:58188) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMd2a-00049z-E6 for submit@debbugs.gnu.org; Sat, 04 Sep 2021 17:17:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33482) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMd2Z-00083q-Pf for guix-patches@gnu.org; Sat, 04 Sep 2021 17:17:31 -0400 Received: from michel.telenet-ops.be ([2a02:1800:110:4::f00:18]:54422) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mMd2V-00054j-Ch for guix-patches@gnu.org; Sat, 04 Sep 2021 17:17:31 -0400 Received: from butterfly.local ([188.189.242.219]) by michel.telenet-ops.be with bizsmtp id pxHK250094kjswU06xHLsQ; Sat, 04 Sep 2021 23:17:21 +0200 Message-ID: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@telenet.be> From: Maxime Devos Date: Sat, 04 Sep 2021 23:17:10 +0200 Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-ZXdwdSIZm75bAbTlaqKD" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1630790241; bh=4FgmsEgZZw7uozIaHnfeIECoft4mn5joQfLTPGH+bqI=; h=Subject:From:To:Date; b=sS2gVWDMRuSWHb3TjAuaSmIbDSyMe9hX05oXgF0WwGuk7QdIoY1MXJ9MxtH5Lqa2R tJihf7VcDR3kSk6YG2Ejsst8MN0jHkJQWEVb66ClYBtmAdqHE//OPKbmXSgpTYs3Vq hw0TnCA/cGIOnXK+5btKXGmTVNeNlSq/XTBuPR7DWGTnFzNqaJ3Rk243eu1Jti7YGu 0o3aMhVdC9Zcz8DCdKQEDSjCliDs7mCTLqWsfqe0TqUByM/Va87jPkoHye95E4O7Ed nYl5VMMw+bg4ENdy4mNaUsx2iY/WbPc6fK4wR6hUnfIBhwiz+PslUR4ttvGeDPQpK/ FflKy32xl3xRw== Received-SPF: pass client-ip=2a02:1800:110:4::f00:18; envelope-from=maximedevos@telenet.be; helo=michel.telenet-ops.be X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1630790293; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:list-id:list-help:list-unsubscribe:list-subscribe: list-post:dkim-signature; bh=4FgmsEgZZw7uozIaHnfeIECoft4mn5joQfLTPGH+bqI=; b=evyFbP1+G7ZRJmcChHXWwWZD/5VKI7IPe9OgzodIzX2C4vLpSeczOwW/+AxED1di/pNsFA esizr998nwU2n3jc0zUEeusLUKTAwsiXyfasnDIwySZyT75FrbfTiMVx/+wCcd4IVoAB/4 77q+wZzbpbMeSSGYyClJFj+OWVdRPYbl2Zo+vCQNLmQyFlscPqbBkGZpwlr2mpX2BfOGD0 adfXrkdpWHXuNe0Ou1Ql6Iwx+HIW5yBaSCSIyQ6xmQK/FVr3uQG7BAEreNKn8W1sSTZuyI zIGQqXdpd0jUw/wLXWAkcDPoNQt64mRZSbkr8Y64xeCRBP7AOy2RO4ZXzwEglQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1630790293; a=rsa-sha256; cv=none; b=HYb0GyM1Zmxm/d8YcXW9rCUYdPkgbwsRZCCxxfB3a1/ZWlyEIlQas6+PQ/M/2+Fx+6YCBS SFiv9bB3s7BRxXPmRX4xkKcEoVDLyYmvzO7aR5cI8Rujr2iXujfnVHm1z9RNv4p0/8sTjj UBDm476illQrTpNwtF8LtsY0LYq4Wjf2jyUJypql5myODeqNurmiPv3MPnZoRjFntddjLz gNFUG5WGvrHHzmunJvEAnaauRj4kje6M2evj0j33QlUP8tM3Rn42Qjso0tGnFYHzhetsgw 95Jcm80IwC9SVoPOET6EcReVwhMC0tdHvRndWc8I3+Zl2K+KFjVim0OTvrwKeA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=telenet.be header.s=r21 header.b=sS2gVWDM; dmarc=fail reason="SPF not aligned (relaxed)" header.from=telenet.be (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Spam-Score: -0.82 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=telenet.be header.s=r21 header.b=sS2gVWDM; dmarc=fail reason="SPF not aligned (relaxed)" header.from=telenet.be (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: AC2ED190B7 X-Spam-Score: -0.82 X-Migadu-Scanner: scn1.migadu.com X-TUID: tblKx3LOlB63 --=-ZXdwdSIZm75bAbTlaqKD Content-Type: multipart/mixed; boundary="=-Ed3xbcWsGUAuseKcAI15" --=-Ed3xbcWsGUAuseKcAI15 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi guix! The attached patch series optimises the G-exp compiler for local-file, by avoiding interning the file if it's already in the store, but only if the hash is known in advance. To take advantage of this, 'search-patch' has been modified to compute the hash at expansion time. The cost of this optimisation is a little additional complexity, and computing derivations theoretically becomes a little more expensive when the patch isn't already in the store (1 call to 'stat' per non-yet-interned patch). If you want to test this patch series for performance, do _not_ run ./pre-inst-env guix, instead use "guix pull --url=3D$PWD --branch=3D...", because the guix from the checkout performs more 'lstat' calls than an =E2=80=98user=E2=80=99 guix from "guix pull". I'll show the patch series decreases the number of syscalls below, using the 'strace' command. Use 'strace -c' to gather some statistics: # Run it twice for a hot cache. Ignore the output of the first run. $ strace -c ./the-optimised-guix/bin/guix build -d pigx --no-grafts $ strace -c ./the-optimised-guix/bin/guix build -d pigx --no-grafts # $ strace -c guix build -d pigx --no-grafts $ strace -c guix build -d pigx --no-grafts I've selected some syscalls from the output that seemed relevant and formatted the call count in a table optimised unoptimised result of optimisation: stat 3865 3712 + 4.1% lstat 119 321 -62.9% fstat 59 59 unchanged read 17303 17688 - 2.2% write 6741 6767 - 1.9% openat 885 1076 -17.8% readlink 14 16 -12.5% ------- total 28886 32539 -11.2% Almost all syscalls are now called less (-11.2% in total), which is good. The exception is 'stat'. Because 'search-path' is now being called less often (only when the patch isn't in the store), the number of 'stat' calls decreases. However, 'local-file-compiler' now calls 'stat' more (one or two times per patch). I think it's worth it though, because: (1) the second 'stat' is on the same file as the first 'stat', so presumably the kernel has cached the result, so no need to wait for I/O to complete the second time (there's a context switch though). So ignoring the context switch cost, there are only =E2=80=98effectively=E2=80=99 +2.1% extra calls to 's= tat'. (2) the total decrease of -11.2% syscalls Now, what about the actual "time to derivation"? First, let's time "guix build -d pigx --no-grafts" to get some raw numbers on guix before the optimisation: time guix build -d pigx --no-grafts # repeated four times, first output is discarded # to eliminate hot/cold cache differences /gnu/store/03vmq94ckxfx6c4rc9zh745yy63n5i5m-pigx-0.0.3.drv real 0m13,470s user 0m13,526s sys 0m0,573s /gnu/store/03vmq94ckxfx6c4rc9zh745yy63n5i5m-pigx-0.0.3.drv real 0m13,582s user 0m13,639s sys 0m0,568s /gnu/store/03vmq94ckxfx6c4rc9zh745yy63n5i5m-pigx-0.0.3.drv real 0m13,834s user 0m13,901s sys 0m0,556s Average numbers: real 0m13,629s user 0m13,689s sys 0m0,566s After the optimisation: time ./the-optimised-guix/bin/guix build -d pigx --no-grafts /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv real 0m14,150s user 0m13,979s sys 0m0,685s /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv real 0m13,781s user 0m13,697s sys 0m0,580s /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv real 0m14,247s user 0m14,160s sys 0m0,548s The numbers are higher somehow after the optimisations? Even the 'sys' time is higher, even though there are less syscalls? I re-ran the time commands, and got a decrease in 'real' time this time. /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv real 0m13,304s user 0m13,146s sys 0m0,609s /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv real 0m12,132s user 0m11,940s sys 0m0,589s /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv real 0m13,716s user 0m13,723s sys 0m0,529s The output of "time ..." seems inconclusive (can possibly be attributed to things like CPU frequency changing?), but the decrease in syscall counts seems quite nice to me. Feel free to run your own tests! Greetings, Maxime. --=-Ed3xbcWsGUAuseKcAI15 Content-Disposition: inline; filename="0001-build-self-Implement-basic-hash-algorithm.patch" Content-Type: text/x-patch; name="0001-build-self-Implement-basic-hash-algorithm.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBhOGUyNGE1MjU4YWEwNTY4OWJjYWZhNzBhZjA3MWRhNTI5NmY2M2E0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAyMDowOTowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS82 XSBidWlsZC1zZWxmOiBJbXBsZW1lbnQgYmFzaWMgJ2hhc2gtYWxnb3JpdGhtJy4KTUlNRS1WZXJz aW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQt VHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBtb2R1bGUgKGd1aXggaGFzaCkgdXNlZCBmcm9t ICdzZWFyY2gtcGF0Y2gnIGluIGEgZnV0dXJlCnBhdGNoIG5lZWRzIGl0IHRvIGJlIHByb3Blcmx5 IGRlZmluZWQgd2hlbiAoZ3VpeCBoYXNoKSBpcyBiZWluZwpjb21waWxlZC4gICdzZWFyY2gtcGF0 Y2gnIGlzIHVzZWQgd2hlbiB0aGUgZGVyaXZhdGlvbiBvZiBHdWl4IGlzCmJlaW5nIGNvbXB1dGVk LCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgdGhlIOKAmHdyb25nIHR5cGUgdG8KYXBwbHk6 ICM8c3ludGF4LXRyYW5zZm9ybWVyIGhhc2gtYWxnb3JpdGhtPuKAmSBlcnJvci4KCiogYnVpbGQt YXV4L2J1aWxkLXNlbGYuc2NtCiAgKGJ1aWxkLXByb2dyYW0pW2Zha2UtZ2NyeXB0LWhhc2hdOiBE ZWZpbmUgaGFzaC1hbGdvcml0aG0gZm9yIHNoYTEKICBhbmQgc2hhMjU2LgotLS0KIGJ1aWxkLWF1 eC9idWlsZC1zZWxmLnNjbSB8IDEzICsrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMSBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9idWls ZC1zZWxmLnNjbSBiL2J1aWxkLWF1eC9idWlsZC1zZWxmLnNjbQppbmRleCAzYTJkMTNjYzA5Li4y YzEzZDlkNTMwIDEwMDY0NAotLS0gYS9idWlsZC1hdXgvYnVpbGQtc2VsZi5zY20KKysrIGIvYnVp bGQtYXV4L2J1aWxkLXNlbGYuc2NtCkBAIC0yNTksOCArMjU5LDE3IEBAIGludGVyZmFjZSAoRkZJ KSBvZiBHdWlsZS4iKQogICAoZGVmaW5lIGZha2UtZ2NyeXB0LWhhc2gKICAgICA7OyBGYWtlIChn Y3J5cHQgaGFzaCkgbW9kdWxlOyBzZWUgYmVsb3cuCiAgICAgKHNjaGVtZS1maWxlICJoYXNoLnNj bSIKLSAgICAgICAgICAgICAgICAgI34oZGVmaW5lLW1vZHVsZSAoZ2NyeXB0IGhhc2gpCi0gICAg ICAgICAgICAgICAgICAgICAjOmV4cG9ydCAoc2hhMSBzaGEyNTYpKSkpCisgICAgICAgICAgICAg ICAgICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAoZGVmaW5lLW1vZHVsZSAoZ2NyeXB0 IGhhc2gpCisgICAgICAgICAgICAgICAgICAgICAgICM6ZXhwb3J0IChzaGExIHNoYTI1NiBoYXNo LWFsZ29yaXRobSkpCisgICAgICAgICAgICAgICAgICAgICA7OyBBdm9pZCDigJhXcm9uZyB0eXBl IHRvIGFwcGx5OgorICAgICAgICAgICAgICAgICAgICAgOzsgIzxzeW50YXgtdHJhbnNmb3JtZXIg aGFzaC1hbGdvcml0aG0+4oCZIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUg c2hhMSkKKyAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUgc2hhMjU2KQorICAgICAgICAgICAg ICAgICAgICAgKGRlZmluZS1zeW50YXggaGFzaC1hbGdvcml0aG0KKyAgICAgICAgICAgICAgICAg ICAgICAgKHN5bnRheC1ydWxlcyAoc2hhMSBzaGEyNTYpCisgICAgICAgICAgICAgICAgICAgICAg ICAgKChfIHNoYTEpIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKChfIHNoYTI1NikgOCkp KSkpKQogCiAgIChkZWZpbmUgZmFrZS1naXQKICAgICAoc2NoZW1lLWZpbGUgImdpdC5zY20iICN+ KGRlZmluZS1tb2R1bGUgKGdpdCkpKSkKCmJhc2UtY29tbWl0OiBiNGQxMzJmOThlMDNmYWU1NTlk YjgzMmU4ODg5N2YxZTE2NmM0ZDQ3CnByZXJlcXVpc2l0ZS1wYXRjaC1pZDogOTFhMjZiYTE5Mzcy MTEyYTExYTBlZWEyYjA2NmQyZjYzNjQxZGViMQpwcmVyZXF1aXNpdGUtcGF0Y2gtaWQ6IGE1MzVj MWFlMmExZmJmNzVkN2FjOWEzMTE4ZWQyM2JkNGZhMDNlY2MKcHJlcmVxdWlzaXRlLXBhdGNoLWlk OiAyOWViYTBjZWRlMWMxZTcxNTNhN2M3YjlhNThiMzNiNjdmNjkzYTEzCnByZXJlcXVpc2l0ZS1w YXRjaC1pZDogOGRkMjIzNGZhMGY4NjcwODFjNmNmNjE0YzdhMjJiMDAwMjI3MDJiNApwcmVyZXF1 aXNpdGUtcGF0Y2gtaWQ6IDJmZTBlNWM2N2EzN2VmM2YwZTIyODEzYzk4MDhlYWVlYzgzYmI1NTIK cHJlcmVxdWlzaXRlLXBhdGNoLWlkOiA5MTUxNDU2OGYxZWY0ODcwYWQ3ZWQ3YjNmNjg1ZjA0NzAz ZjljMDkwCi0tIAoyLjMzLjAKCg== --=-Ed3xbcWsGUAuseKcAI15 Content-Disposition: inline; filename="0002-guix-hash-Extract-file-hashing-procedures.patch" Content-Type: text/x-patch; name="0002-guix-hash-Extract-file-hashing-procedures.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5MTlhMDM3NTc4MWZmMGZhYjllNzRkYmFmYzliMWY4OTg5ODA4YTNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXJhaCBNb3JnZW5zZW4gPGlza2FyaWFuQG1nc24uZGV2PgpE YXRlOiBTdW4sIDE1IEF1ZyAyMDIxIDE2OjI1OjI0IC0wNzAwClN1YmplY3Q6IFtQQVRDSCAyLzZd IGd1aXggaGFzaDogRXh0cmFjdCBmaWxlIGhhc2hpbmcgcHJvY2VkdXJlcy4KCiogZ3VpeC9zY3Jp cHRzL2hhc2guc2NtIChndWl4LWhhc2gpW3Zjcy1maWxlPywgZmlsZS1oYXNoXTogRXh0cmFjdCBs b2dpYwp0by4uLgoqIGd1aXgvaGFzaC5zY206IC4uLmhlcmUuIE5ldyBmaWxlLgotLS0KIGd1aXgv aGFzaC5zY20gICAgICAgICB8IDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGd1aXgvc2NyaXB0cy9oYXNoLnNjbSB8IDI5ICsrKysrKy0tLS0tLS0tLS0tLS0t LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBndWl4L2hhc2guc2NtCgpkaWZmIC0tZ2l0IGEvZ3VpeC9oYXNo LnNjbSBiL2d1aXgvaGFzaC5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uOGMyYWI4MTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2d1aXgvaGFzaC5zY20KQEAgLTAsMCAr MSw1MSBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBm b3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgU2FyYWggTW9yZ2Vuc2VuIDxpc2thcmlhbkBt Z3NuLmRldj4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgorOzs7Cis7 OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7OzsgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7OzsgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzs7IE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7 Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAoZ3VpeCBoYXNo KQorICAjOnVzZS1tb2R1bGUgKGdjcnlwdCBoYXNoKQorICAjOnVzZS1tb2R1bGUgKGd1aXggc2Vy aWFsaXphdGlvbikKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkKKyAgIzp1c2UtbW9kdWxl IChzcmZpIHNyZmktMTEpCisgICM6ZXhwb3J0ICh2Y3MtZmlsZT8KKyAgICAgICAgICAgIGZpbGUt aGFzaCopKQorCisoZGVmaW5lICh2Y3MtZmlsZT8gZmlsZSBzdGF0KQorICAiUmV0dXJucyB0cnVl IGlmIEZJTEUgaXMgYSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGZpbGUuIgorICAoY2FzZSAoc3Rh dDp0eXBlIHN0YXQpCisgICAgKChkaXJlY3RvcnkpCisgICAgIChtZW1iZXIgKGJhc2VuYW1lIGZp bGUpICcoIi5ienIiICIuZ2l0IiAiLmhnIiAiLnN2biIgIkNWUyIpKSkKKyAgICAoKHJlZ3VsYXIp CisgICAgIDs7IEdpdCBzdWItbW9kdWxlcyBoYXZlIGEgJy5naXQnIGZpbGUgdGhhdCBpcyBhIHJl Z3VsYXIgdGV4dCBmaWxlLgorICAgICAoc3RyaW5nPT8gKGJhc2VuYW1lIGZpbGUpICIuZ2l0Iikp CisgICAgKGVsc2UKKyAgICAgI2YpKSkKKworKGRlZmluZSogKGZpbGUtaGFzaCogZmlsZSAjOmtl eQorICAgICAgICAgICAgICAgICAgICAgKGFsZ29yaXRobSAoaGFzaC1hbGdvcml0aG0gc2hhMjU2 KSkKKyAgICAgICAgICAgICAgICAgICAgIChyZWN1cnNpdmU/ICN0KQorICAgICAgICAgICAgICAg ICAgICAgKHNlbGVjdD8gKG5lZ2F0ZSB2Y3MtZmlsZT8pKSkKKyAgIkNvbXB1dGUgdGhlIGhhc2gg b2YgRklMRSB3aXRoIEFMR09SSVRITS4gIElmIFJFQ1VSU0lWRT8gaXMgdHJ1ZSwgcmVjdXJzZQor aW50byBzdWJkaXJlY3RvcmllcyBvZiBGSUxFLCBjb21wdXRpbmcgdGhlIGNvbWJpbmVkIGhhc2gg b2YgYWxsIGZpbGVzIGZvcgord2hpY2ggKFNFTEVDVD8gIEZJTEUgU1RBVCkgcmV0dXJucyB0cnVl LiIKKyAgKGlmIHJlY3Vyc2l2ZT8KKyAgICAgIChsZXQtdmFsdWVzICgoKHBvcnQgZ2V0LWhhc2gp CisgICAgICAgICAgICAgICAgICAgIChvcGVuLWhhc2gtcG9ydCBhbGdvcml0aG0pKSkKKyAgICAg ICAgKHdyaXRlLWZpbGUgZmlsZSBwb3J0ICM6c2VsZWN0PyBzZWxlY3Q/KQorICAgICAgICAoZm9y Y2Utb3V0cHV0IHBvcnQpCisgICAgICAgIChnZXQtaGFzaCkpCisgICAgICAoZmlsZS1oYXNoIGFs Z29yaXRobSBmaWxlKSkpCmRpZmYgLS1naXQgYS9ndWl4L3NjcmlwdHMvaGFzaC5zY20gYi9ndWl4 L3NjcmlwdHMvaGFzaC5zY20KaW5kZXggYjg2MjIzNzNjYy4uMzUzY2EzMGMyYyAxMDA2NDQKLS0t IGEvZ3VpeC9zY3JpcHRzL2hhc2guc2NtCisrKyBiL2d1aXgvc2NyaXB0cy9oYXNoLnNjbQpAQCAt Myw2ICszLDcgQEAKIDs7OyBDb3B5cmlnaHQgwqkgMjAxMyBOaWtpdGEgS2FyZXRuaWtvdiA8bmlr aXRhQGthcmV0bmlrb3Yub3JnPgogOzs7IENvcHlyaWdodCDCqSAyMDE2IEphbiBOaWV1d2VuaHVp emVuIDxqYW5uZWtlQGdudS5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTggVGltIEdlc3RodWl6 ZW4gPHRpbS5nZXN0aHVpemVuQHlhaG9vLmRlPgorOzs7IENvcHlyaWdodCDCqSAyMDIxIFNhcmFo IE1vcmdlbnNlbiA8aXNrYXJpYW5AbWdzbi5kZXY+CiA7OzsKIDs7OyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMjMsNiArMjQsNyBAQAogICAjOnVzZS1tb2R1bGUgKGdj cnlwdCBoYXNoKQogICAjOnVzZS1tb2R1bGUgKGd1aXggc2VyaWFsaXphdGlvbikKICAgIzp1c2Ut bW9kdWxlIChndWl4IHVpKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaGFzaCkKICAgIzp1c2UtbW9k dWxlIChndWl4IHNjcmlwdHMpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBiYXNlMTYpCiAgICM6dXNl LW1vZHVsZSAoZ3VpeCBiYXNlMzIpCkBAIC0xMjUsMTYgKzEyNyw2IEBAIGFuZCAnYmFzZTE2JyAo J2hleCcgYW5kICdoZXhhZGVjaW1hbCcgY2FuIGJlIHVzZWQgYXMgd2VsbCkuXG4iKSkKICAgICAo cGFyc2UtY29tbWFuZC1saW5lIGFyZ3MgJW9wdGlvbnMgKGxpc3QgJWRlZmF1bHQtb3B0aW9ucykK ICAgICAgICAgICAgICAgICAgICAgICAgICM6YnVpbGQtb3B0aW9ucz8gI2YpKQogCi0gIChkZWZp bmUgKHZjcy1maWxlPyBmaWxlIHN0YXQpCi0gICAgKGNhc2UgKHN0YXQ6dHlwZSBzdGF0KQotICAg ICAgKChkaXJlY3RvcnkpCi0gICAgICAgKG1lbWJlciAoYmFzZW5hbWUgZmlsZSkgJygiLmJ6ciIg Ii5naXQiICIuaGciICIuc3ZuIiAiQ1ZTIikpKQotICAgICAgKChyZWd1bGFyKQotICAgICAgIDs7 IEdpdCBzdWItbW9kdWxlcyBoYXZlIGEgJy5naXQnIGZpbGUgdGhhdCBpcyBhIHJlZ3VsYXIgdGV4 dCBmaWxlLgotICAgICAgIChzdHJpbmc9PyAoYmFzZW5hbWUgZmlsZSkgIi5naXQiKSkKLSAgICAg IChlbHNlCi0gICAgICAgI2YpKSkKLQogICAobGV0KiAoKG9wdHMgKHBhcnNlLW9wdGlvbnMpKQog ICAgICAgICAgKGFyZ3MgKGZpbHRlci1tYXAgKG1hdGNoLWxhbWJkYQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgoJ2FyZ3VtZW50IC4gdmFsdWUpCkBAIC0xNTAsMTggKzE0MiwxMSBAQCBh bmQgJ2Jhc2UxNicgKCdoZXgnIGFuZCAnaGV4YWRlY2ltYWwnIGNhbiBiZSB1c2VkIGFzIHdlbGwp LlxuIikpCiAgICAgICA7OyBDb21wdXRlIHRoZSBoYXNoIG9mIEZJTEUuCiAgICAgICA7OyBDYXRj aCBhbmQgZ3JhY2VmdWxseSByZXBvcnQgcG9zc2libGUgJyZuYXItZXJyb3InIGNvbmRpdGlvbnMu CiAgICAgICAod2l0aC1lcnJvci1oYW5kbGluZwotICAgICAgICAoaWYgKGFzc29jLXJlZiBvcHRz ICdyZWN1cnNpdmU/KQotICAgICAgICAgICAgKGxldC12YWx1ZXMgKCgocG9ydCBnZXQtaGFzaCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4taGFzaC1wb3J0IChhc3NvYy1yZWYgb3B0 cyAnaGFzaC1hbGdvcml0aG0pKSkpCi0gICAgICAgICAgICAgICh3cml0ZS1maWxlIGZpbGUgcG9y dCAjOnNlbGVjdD8gc2VsZWN0PykKLSAgICAgICAgICAgICAgKGZvcmNlLW91dHB1dCBwb3J0KQot ICAgICAgICAgICAgICAoZ2V0LWhhc2gpKQotICAgICAgICAgICAgKG1hdGNoIGZpbGUKLSAgICAg ICAgICAgICAgKCItIiAocG9ydC1oYXNoIChhc3NvYy1yZWYgb3B0cyAnaGFzaC1hbGdvcml0aG0p Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudC1pbnB1dC1wb3J0KSkpCi0g ICAgICAgICAgICAgIChfICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIGZpbGUKLSAgICAgICAgICAg ICAgICAgICAgIChjdXRlIHBvcnQtaGFzaCAoYXNzb2MtcmVmIG9wdHMgJ2hhc2gtYWxnb3JpdGht KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPD4pKSkpKSkpCisgICAgICAgIChtYXRjaCBm aWxlCisgICAgICAgICAgKCItIiAocG9ydC1oYXNoIChhc3NvYy1yZWYgb3B0cyAnaGFzaC1hbGdv cml0aG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWlucHV0LXBvcnQpKSkK KyAgICAgICAgICAoXyAgIChmaWxlLWhhc2gqICM6YWxnb3JpdGhtIChhc3NvYy1yZWYgb3B0cyAn aGFzaC1hbGdvcml0aG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjOnJlY3Vyc2l2ZT8g KGFzc29jLXJlZiBvcHRzICdyZWN1cnNpdmU/KSkpKSkpCiAKICAgICAobWF0Y2ggYXJncwogICAg ICAgKChmaWxlKQotLSAKMi4zMy4wCgo= --=-Ed3xbcWsGUAuseKcAI15 Content-Disposition: inline; filename*0=0003-gexp-Allow-computing-the-hash-of-the-local-file-in-a.pat; filename*1=ch Content-Type: text/x-patch; name="0003-gexp-Allow-computing-the-hash-of-the-local-file-in-a.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBjYzU0ZTFjNTAyMTExOWJmYWJhMDc4NDllODNlYTMxZjcwOTk5NzBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNTozNTo1MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy82 XSBnZXhwOiBBbGxvdyBjb21wdXRpbmcgdGhlIGhhc2ggb2YgdGhlIGxvY2FsIGZpbGUgaW4KIGFk dmFuY2UuCgpUaGUgbmV3IGZpZWxkIGlzIGN1cnJlbnRseSB1bnVzZWQuICBUaGUgZm9sbG93aW5n IHBhdGNoZXMgd2lsbApwb3B1bGF0ZSBhbmQgdXNlIHRoZSBmaWVsZCB0byByZWR1Y2UgdGhlIHRp bWUtdG8tZGVyaXZhdGlvbgp3aGVuIHRoZSBmaWxlIGlzIGFscmVhZHkgaW50ZXJuZWQgaW4gdGhl IHN0b3JlLgoKKiBndWl4L2dleHAuc2NtCiAgKDxsb2NhbC1maWxlPik6IEFkZCBzaGEyNTYgZmll bGQuCiAgKCVsb2NhbC1maWxlKTogQWRkIHNoYTI1NiBhcmd1bWVudCBmb3IgcG9wdWxhdGluZyB0 aGUgZmllbGQuCiAgKGxvY2FsLWZpbGUtY29tcGlsZXIpOiBBZGp1c3QgJ21hdGNoJyBleHByZXNz aW9uLgotLS0KIGd1aXgvZ2V4cC5zY20gfCAxMiArKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ3VpeC9nZXhw LnNjbSBiL2d1aXgvZ2V4cC5zY20KaW5kZXggZjNkMjc4YjNlNi4uYTYzMzk4NDY4OCAxMDA2NDQK LS0tIGEvZ3VpeC9nZXhwLnNjbQorKysgYi9ndWl4L2dleHAuc2NtCkBAIC00MTksMTMgKzQxOSwx NiBAQCBIZXJlIFRBUkdFVCBpcyBib3VuZCB0byB0aGUgY3Jvc3MtY29tcGlsYXRpb24gdHJpcGxl dCBvciAjZi4iCiA7OyBBIGxvY2FsIGZpbGUgbmFtZS4gIEZJTEUgaXMgdGhlIGZpbGUgbmFtZSB0 aGUgdXNlciBlbnRlcmVkLCB3aGljaCBjYW4gYmUgYQogOzsgcmVsYXRpdmUgZmlsZSBuYW1lLCBh bmQgQUJTT0xVVEUgaXMgYSBwcm9taXNlIHRoYXQgY29tcHV0ZXMgaXRzIGNhbm9uaWNhbAogOzsg YWJzb2x1dGUgZmlsZSBuYW1lLiAgV2Uga2VlcCBpdCBpbiBhIHByb21pc2UgdG8gY29tcHV0ZSBp dCBsYXppbHkgYW5kIGF2b2lkCi07OyByZXBlYXRlZCAnc3RhdCcgY2FsbHMuCis7OyByZXBlYXRl ZCAnc3RhdCcgY2FsbHMuICBBbGxvdyBjb21wdXRpbmcgdGhlIGhhc2ggb2YgdGhlIGZpbGUgaW4g YWR2YW5jZSwKKzs7IHRvIGF2b2lkIGhhdmluZyB0byBzZW5kIHRoZSBmaWxlIHRvIHRoZSBkYWVt b24gd2hlbiBpdCBpcyBhbHJlYWR5IGludGVybmVkCis7OyBpbiB0aGUgc3RvcmUuCiAoZGVmaW5l LXJlY29yZC10eXBlIDxsb2NhbC1maWxlPgotICAoJSVsb2NhbC1maWxlIGZpbGUgYWJzb2x1dGUg bmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pCisgICglJWxvY2FsLWZpbGUgZmlsZSBhYnNvbHV0ZSBu YW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8pCiAgIGxvY2FsLWZpbGU/CiAgIChmaWxlICAg ICAgIGxvY2FsLWZpbGUtZmlsZSkgICAgICAgICAgICAgICAgICAgIDtzdHJpbmcKICAgKGFic29s dXRlICAgJWxvY2FsLWZpbGUtYWJzb2x1dGUtZmlsZS1uYW1lKSAgICAgO3Byb21pc2Ugc3RyaW5n CiAgIChuYW1lICAgICAgIGxvY2FsLWZpbGUtbmFtZSkgICAgICAgICAgICAgICAgICAgIDtzdHJp bmcKKyAgKHNoYTI1NiAgICAgbG9jYWwtZmlsZS1zaGEyNTYpICAgICAgICAgICAgICAgICAgO3No YTI1NiBieXRldmVjdG9yIHwgI2YKICAgKHJlY3Vyc2l2ZT8gbG9jYWwtZmlsZS1yZWN1cnNpdmU/ KSAgICAgICAgICAgICAgO0Jvb2xlYW4KICAgKHNlbGVjdD8gICAgbG9jYWwtZmlsZS1zZWxlY3Q/ KSkgICAgICAgICAgICAgICAgO3N0cmluZyBzdGF0IC0+IEJvb2xlYW4KIApAQCAtNDM0LDYgKzQz Nyw3IEBAIEhlcmUgVEFSR0VUIGlzIGJvdW5kIHRvIHRoZSBjcm9zcy1jb21waWxhdGlvbiB0cmlw bGV0IG9yICNmLiIKIChkZWZpbmUqICglbG9jYWwtZmlsZSBmaWxlIHByb21pc2UgIzpvcHRpb25h bCAobmFtZSAoYmFzZW5hbWUgZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIzprZXkKICAg ICAgICAgICAgICAgICAgICAgICAobGl0ZXJhbD8gI3QpIGxvY2F0aW9uCisgICAgICAgICAgICAg ICAgICAgICAgc2hhMjU2CiAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlPyAoc2VsZWN0 PyB0cnVlKSkKICAgOzsgVGhpcyBpbnRlcm1lZGlhdGUgcHJvY2VkdXJlIGlzIHBhcnQgb2Ygb3Vy IEFCSSwgYnV0IHRoZSB1bmRlcmx5aW5nCiAgIDs7ICUlTE9DQUwtRklMRSBpcyBub3QuCkBAIC00 NDEsNyArNDQ1LDcgQEAgSGVyZSBUQVJHRVQgaXMgYm91bmQgdG8gdGhlIGNyb3NzLWNvbXBpbGF0 aW9uIHRyaXBsZXQgb3IgI2YuIgogICAgICh3YXJuaW5nIChhbmQ9PiBsb2NhdGlvbiBzb3VyY2Ut cHJvcGVydGllcy0+bG9jYXRpb24pCiAgICAgICAgICAgICAgKEdfICJyZXNvbHZpbmcgJ35hJyBy ZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeX4lIikKICAgICAgICAgICAgICBmaWxlKSkKLSAg KCUlbG9jYWwtZmlsZSBmaWxlIHByb21pc2UgbmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pKQorICAo JSVsb2NhbC1maWxlIGZpbGUgcHJvbWlzZSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8p KQogCiAoZGVmaW5lIChhYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSBkaXJlY3RvcnkpCiAgICJSZXR1 cm4gdGhlIGNhbm9uaWNhbCBhYnNvbHV0ZSBmaWxlIG5hbWUgZm9yIEZJTEUsIHdoaWNoIGxpdmVz IGluIHRoZQpAQCAtNTE3LDcgKzUyMSw3IEBAIGFwcGVhcnMuIgogKGRlZmluZS1nZXhwLWNvbXBp bGVyIChsb2NhbC1maWxlLWNvbXBpbGVyIChmaWxlIDxsb2NhbC1maWxlPikgc3lzdGVtIHRhcmdl dCkKICAgOzsgIkNvbXBpbGUiIEZJTEUgYnkgYWRkaW5nIGl0IHRvIHRoZSBzdG9yZS4KICAgKG1h dGNoIGZpbGUKLSAgICAoKCQgPGxvY2FsLWZpbGU+IGZpbGUgKD0gZm9yY2UgYWJzb2x1dGUpIG5h bWUgcmVjdXJzaXZlPyBzZWxlY3Q/KQorICAgICgoJCA8bG9jYWwtZmlsZT4gZmlsZSAoPSBmb3Jj ZSBhYnNvbHV0ZSkgbmFtZSBzaGEyNTYgcmVjdXJzaXZlPyBzZWxlY3Q/KQogICAgICA7OyBDYW5v bmljYWxpemUgRklMRSBzbyB0aGF0IGlmIGl0J3MgYSBzeW1saW5rLCBpdCBpcyByZXNvbHZlZC4g IEZhaWxpbmcKICAgICAgOzsgdG8gZG8gdGhhdCwgd2hlbiBSRUNVUlNJVkU/IGlzICN0LCB3ZSBj b3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBkYW5nbGluZwogICAgICA7OyBzeW1saW5rIGluIHRoZSBz dG9yZSwgYW5kIHdoZW4gUkVDVVJTSVZFPyBpcyAjZiAnYWRkLXRvLXN0b3JlJyB3b3VsZAotLSAK Mi4zMy4wCgo= --=-Ed3xbcWsGUAuseKcAI15 Content-Disposition: inline; filename="0004-gexp-Allow-overriding-the-absolute-file-name.patch" Content-Type: text/x-patch; name="0004-gexp-Allow-overriding-the-absolute-file-name.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxOTM3ZWRkOTA2YjgxN2RkMTU2NDhmYTY4MmQ1NWQzYjNmNzc5ZTQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNjoyNToyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNC82 XSBnZXhwOiBBbGxvdyBvdmVycmlkaW5nIHRoZSBhYnNvbHV0ZSBmaWxlIG5hbWUuCgpUaGlzIHdp bGwgYmUgdXNlZCBieSB0aGUgbmV4dCBwYXRjaCB0byBpbXBsZW1lbnQgc2VhcmNoLXBhdGNoIGlu CnRlcm1zIG9mIGxvY2FsLWZpbGUuCgoqIGd1aXgvZ2V4cC5zY20KICAocHJlY2Fub25pY2FsaXpl ZC1maWxlLW5hbWUpOiBOZXcgbWFjcm8uCiAgKGxvY2FsLWZpbGUpOiBVc2UgdGhlIGFic29sdXRl IGZpbGUgbmFtZSBmcm9tIHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lCiAgd2hlbiBhdmFpbGFi bGUuCi0tLQogZ3VpeC9nZXhwLnNjbSB8IDEyICsrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9ndWl4L2dleHAu c2NtIGIvZ3VpeC9nZXhwLnNjbQppbmRleCBhNjMzOTg0Njg4Li5jNjllNGFhMjk5IDEwMDY0NAot LS0gYS9ndWl4L2dleHAuc2NtCisrKyBiL2d1aXgvZ2V4cC5zY20KQEAgLTUxLDYgKzUxLDcgQEAK ICAgICAgICAgICAgIGdleHAtaW5wdXQtb3V0cHV0CiAgICAgICAgICAgICBnZXhwLWlucHV0LW5h dGl2ZT8KIAorICAgICAgICAgICAgcHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUKICAgICAgICAg ICAgIGFzc3VtZS12YWxpZC1maWxlLW5hbWUKICAgICAgICAgICAgIGxvY2FsLWZpbGUKICAgICAg ICAgICAgIGxvY2FsLWZpbGU/CkBAIC00NjMsNiArNDY0LDEyIEBAIHRoZSBnaXZlbiBmaWxlIG5h bWUgaXMgdmFsaWQsIGV2ZW4gaWYgaXQncyBub3QgYSBzdHJpbmcgbGl0ZXJhbCwgYW5kIHRodXMg bm90CiB3YXJuIGFib3V0IGl0LiIKICAgZmlsZSkKIAorKGRlZmluZS1zeW50YXgtcnVsZSAocHJl Y2Fub25pY2FsaXplZC1maWxlLW5hbWUgZmlsZSBhYnNvbHV0ZSkKKyAgIlRoaXMgaXMgYSBzeW50 YWN0aWMga2V5d29yZCB0byB0ZWxsICdsb2NhbC1maWxlJyB0aGF0IGl0IGNhbiBhc3N1bWUgdGhh dAordGhlIGdpdmVuIGZpbGUgbmFtZSBGSUxFIGhhcyBBQlNPTFVURSBhcyBhYnNvbHV0ZSBmaWxl IG5hbWUgYW5kICdsb2NhbC1maWxlJworZG9lcyBub3QgbmVlZCB0byBjb21wdXRlIHRoZSBhYnNv bHV0ZSBmaWxlIG5hbWUgYnkgaXRzZWxmLiIKKyAgYWJzb2x1dGUpCisKIChkZWZpbmUtc3ludGF4 IGxvY2FsLWZpbGUKICAgKGxhbWJkYSAocykKICAgICAiUmV0dXJuIGFuIG9iamVjdCByZXByZXNl bnRpbmcgbG9jYWwgZmlsZSBGSUxFIHRvIGFkZCB0byB0aGUgc3RvcmU7IHRoaXMKQEAgLTQ4MSw3 ICs0ODgsNyBAQCB3aGVyZSBGSUxFIGlzIHRoZSBlbnRyeSdzIGFic29sdXRlIGZpbGUgbmFtZSBh bmQgU1RBVCBpcyB0aGUgcmVzdWx0IG9mCiBUaGlzIGlzIHRoZSBkZWNsYXJhdGl2ZSBjb3VudGVy cGFydCBvZiB0aGUgJ2ludGVybmVkLWZpbGUnIG1vbmFkaWMgcHJvY2VkdXJlLgogSXQgaXMgaW1w bGVtZW50ZWQgYXMgYSBtYWNybyB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3Rv cnkgd2hlcmUgaXQKIGFwcGVhcnMuIgotICAgIChzeW50YXgtY2FzZSBzIChhc3N1bWUtdmFsaWQt ZmlsZS1uYW1lKQorICAgIChzeW50YXgtY2FzZSBzIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lIHBy ZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lKQogICAgICAgKChfIGZpbGUgcmVzdCAuLi4pCiAgICAg ICAgKHN0cmluZz8gKHN5bnRheC0+ZGF0dW0gIydmaWxlKSkKICAgICAgICA7OyBGSUxFIGlzIGEg bGl0ZXJhbCwgc28gcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeS4K QEAgLTQ5NSw2ICs1MDIsOSBAQCBhcHBlYXJzLiIKICAgICAgICAjJyglbG9jYWwtZmlsZSBmaWxl CiAgICAgICAgICAgICAgICAgICAgICAgKGRlbGF5IChhYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSAo Z2V0Y3dkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgcmVzdCAuLi4pKQorICAgICAgKChfIChw cmVjYW5vbmljYWxpemVkLWZpbGUtbmFtZSBmaWxlIGFic29sdXRlKSByZXN0IC4uLikKKyAgICAg ICA7OyBVc2UgdGhlIGdpdmVuIGZpbGUgbmFtZSBBQlNPTFVURSBhcyBhYnNvbHV0ZSBmaWxlIG5h bWUuCisgICAgICAgIycoJWxvY2FsLWZpbGUgZmlsZSAoZGVsYXkgYWJzb2x1dGUpIHJlc3QgLi4u KSkKICAgICAgICgoXyBmaWxlIHJlc3QgLi4uKQogICAgICAgIDs7IFJlc29sdmUgRklMRSByZWxh dGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgICAgKHdpdGgtc3ludGF4ICgobG9j YXRpb24gKGRhdHVtLT5zeW50YXggcyAoc3ludGF4LXNvdXJjZSBzKSkpKQotLSAKMi4zMy4wCgo= --=-Ed3xbcWsGUAuseKcAI15 Content-Disposition: inline; filename*0=0005-packages-Compute-the-hash-of-patches-in-advance-when.pat; filename*1=ch Content-Type: text/x-patch; name="0005-packages-Compute-the-hash-of-patches-in-advance-when.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBlM2IxNGZkZjYzZTc4YTUwNGE0ZjZlOGE2ZWQ4NWQ1ZjhiMDhhY2I3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNzoyNTo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNS82 XSBwYWNrYWdlczogQ29tcHV0ZSB0aGUgaGFzaCBvZiBwYXRjaGVzIGluIGFkdmFuY2Ugd2hlbgog cG9zc2libGUuCgoqIGdudS9wYWNrYWdlcy5zY20KICAoc2VhcmNoLXBhdGNoKTogUmVuYW1lIHRv IC4uLgogICglc2VhcmNoLXBhdGNoKTogLi4uIHRoaXMuCiAgKHRyeS1zZWFyY2gtcGF0Y2gpOiBO ZXcgcHJvY2VkdXJlLCBleHRyYWN0ZWQgZnJvbSAuLi4KICAoJXNlYXJjaC1wYXRjaCk6IC4uLiB0 aGlzIHByb2NlZHVyZS4KICAoJWxvY2FsLXBhdGNoLWZpbGUpOiBOZXcgcHJvY2VkdXJlLgogICh0 cnVlKTogTmV3IHByb2NlZHVyZS4KICAoc2VhcmNoLXBhdGNoKTogTmV3IG1hY3JvLCBiZWhhdmlu ZyBsaWtlICVzZWFyY2gtcGF0Y2gsIGJ1dCBjb21wdXRpbmcgdGhlCiAgaGFzaCBhdCBleHBhbnNp b24gdGltZSB3aGVuIHBvc3NpYmxlLgoqIGdudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KICAoJWd1 aXgtcGF0Y2hlcyk6IFVzZSBzZWFyY2gtcGF0Y2hlcyBpbnN0ZWFkIG9mIGxvY2FsLWZpbGUgKwog IGFzc3VtZS12YWxpZC1maWxlLW5hbWUgKyBzZWFyY2gtcGF0Y2guCiogZ251L3BhY2thZ2VzL2du dXppbGxhLnNjbQogIChpY2VjYXQtc291cmNlKVtnbnV6aWxsYS1maXhlcy1wYXRjaF06IFVzZSBz ZWFyY2gtcGF0Y2ggaW5zdGVhZCBvZgogIGxvY2FsLWZpbGUgKyBhc3N1bGUtdmFsaWQtZmlsZS1u YW1lICsgc2VhcmNoLXBhdGNoLgogIChpY2VjYXQtc291cmNlKVttYWtlaWNlY2F0LXBhdGNoXTog TGlrZXdpc2UuCiogZ251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQogIChnY2MtYXJtLW5vbmUtZWFi aS00LjkpW3NvdXJjZV17cGF0Y2hlc306IEV4cGVjdCBwYXRjaGVzIHRvIGJlCiAgbG9jYWwtZmls ZSBvYmplY3RzIGluc3RlYWQgb2Ygc3RyaW5ncy4KICBvZiBzdHJpbmdzLgoqIGd1aXgvbGludC5z Y20gKGNoZWNrLXBhdGNoLWZpbGUtbmFtZXMpOiBBbGxvdyBsb2NhbC1maWxlIG9iamVjdHMuCi0t LQogZ251L3BhY2thZ2VzLnNjbSAgICAgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLQogZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbSB8ICA0ICstLS0KIGdu dS9wYWNrYWdlcy9lbWJlZGRlZC5zY20gfCAgMyArKy0KIGdudS9wYWNrYWdlcy9nbnV6aWxsYS5z Y20gfCAgOCArKy0tLS0tLQogZ3VpeC9saW50LnNjbSAgICAgICAgICAgICB8IDI4ICsrKysrKysr KysrKysrKystLS0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyksIDIz IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy5zY20gYi9nbnUvcGFja2Fn ZXMuc2NtCmluZGV4IGNjZmM4M2RkMTEuLmY1NTUyZTVhOWIgMTAwNjQ0Ci0tLSBhL2dudS9wYWNr YWdlcy5zY20KKysrIGIvZ251L3BhY2thZ2VzLnNjbQpAQCAtNCw2ICs0LDcgQEAKIDs7OyBDb3B5 cmlnaHQgwqkgMjAxNCBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgogOzs7IENv cHlyaWdodCDCqSAyMDE2LCAyMDE3IEFsZXggS29zdCA8YWxlem9zdEBnbWFpbC5jb20+CiA7Ozsg Q29weXJpZ2h0IMKpIDIwMTYgTWF0aGlldSBMaXJ6aW4gPG10aGxAZ251Lm9yZz4KKzs7OyBDb3B5 cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+CiA7OzsK IDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMjEsMTEgKzIyLDEz IEBACiA7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KIAogKGRlZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcykKKyAgIzp1 c2UtbW9kdWxlIChndWl4IGdleHApCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBwYWNrYWdlcykKICAg Izp1c2UtbW9kdWxlIChndWl4IHVpKQogICAjOnVzZS1tb2R1bGUgKGd1aXggdXRpbHMpCiAgICM6 dXNlLW1vZHVsZSAoZ3VpeCBkaWFnbm9zdGljcykKICAgIzp1c2UtbW9kdWxlIChndWl4IGRpc2Nv dmVyeSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGhhc2gpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBt ZW1vaXphdGlvbikKICAgIzp1c2UtbW9kdWxlICgoZ3VpeCBidWlsZCB1dGlscykKICAgICAgICAg ICAgICAgICAjOnNlbGVjdCAoKHBhY2thZ2UtbmFtZS0+bmFtZSt2ZXJzaW9uCkBAIC05MCwxMiAr OTMsNDcgQEAKICAgIlNlYXJjaCB0aGUgYXV4aWxpYXJ5IEZJTEUtTkFNRS4gIFJldHVybiAjZiBp ZiBub3QgZm91bmQuIgogICAoc2VhcmNoLXBhdGggKCVhdXhpbGlhcnktZmlsZXMtcGF0aCkgZmls ZS1uYW1lKSkKIAotKGRlZmluZSAoc2VhcmNoLXBhdGNoIGZpbGUtbmFtZSkKKyhkZWZpbmUgKHRy eS1zZWFyY2gtcGF0Y2ggZmlsZS1uYW1lKQorICAiU2VhcmNoIHRoZSBwYXRjaCBGSUxFLU5BTUUu ICBSZXR1cm4gI2YgaWYgbm90IGZvdW5kLiIKKyAgKHNlYXJjaC1wYXRoICglcGF0Y2gtcGF0aCkg ZmlsZS1uYW1lKSkKKworKGRlZmluZSAoJXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpCiAgICJTZWFy Y2ggdGhlIHBhdGNoIEZJTEUtTkFNRS4gIFJhaXNlIGFuIGVycm9yIGlmIG5vdCBmb3VuZC4iCi0g IChvciAoc2VhcmNoLXBhdGggKCVwYXRjaC1wYXRoKSBmaWxlLW5hbWUpCisgIChvciAodHJ5LXNl YXJjaC1wYXRjaCBmaWxlLW5hbWUpCiAgICAgICAocmFpc2UgKGZvcm1hdHRlZC1tZXNzYWdlIChH XyAifmE6IHBhdGNoIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZpbGUtbmFtZSkpKSkKIAorKGRlZmluZSAoJWxvY2FsLXBhdGNoLWZpbGUgZmlsZS1uYW1lIGhh c2gpCisgICJTZWFyY2ggdGhlIHBhdGNoIEZJTEUtTkFNRSwgd2hpY2ggaXMga25vd24gdG8gaGF2 ZSBIQVNILiIKKyAgKGxvY2FsLWZpbGUgKHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lIGZpbGUt bmFtZSAoJXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpKQorICAgICAgICAgICAgICAjOnNoYTI1NiBo YXNoICM6cmVjdXJzaXZlPyAjdCkpCisKKyhkZWZpbmUgdHJ1ZSAoY29uc3QgI3QpKQorCisoZGVm aW5lLXN5bnRheCBzZWFyY2gtcGF0Y2gKKyAgKGxhbWJkYSAocykKKyAgICAiU2VhcmNoIHRoZSBw YXRjaCBGSUxFLU5BTUUgYW5kIGNvbXB1dGUgaXRzIGhhc2ggYXQgZXhwYW5zaW9uIHRpbWUKK2lm IHBvc3NpYmxlLiAgUmV0dXJuICNmIGlmIG5vdCBmb3VuZC4iCisgICAgKHN5bnRheC1jYXNlIHMg KCkKKyAgICAgICgoXyBmaWxlLW5hbWUpCisgICAgICAgKHN0cmluZz8gKHN5bnRheC0+ZGF0dW0g IydmaWxlLW5hbWUpKQorICAgICAgIDs7IEZJTEUtTkFNRSBpcyBhIGNvbnN0YW50IHN0cmluZywg c28gdGhlIGhhc2ggY2FuIGJlIGNvbXB1dGVkCisgICAgICAgOzsgaW4gYWR2YW5jZS4KKyAgICAg ICAobGV0ICgocGF0Y2ggKHRyeS1zZWFyY2gtcGF0Y2ggKHN5bnRheC0+ZGF0dW0gIydmaWxlLW5h bWUpKSkpCisgICAgICAgICAoaWYgcGF0Y2gKKyAgICAgICAgICAgICAjYCglbG9jYWwtcGF0Y2gt ZmlsZSBmaWxlLW5hbWUgIywoZmlsZS1oYXNoKiBwYXRjaCAjOnNlbGVjdD8gdHJ1ZSkpCisgICAg ICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAgICAod2FybmluZyAoc291cmNlLXByb3BlcnRp ZXMtPmxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bnRheC1zb3VyY2UgIydm aWxlLW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgKEdfICJ+YTogcGF0Y2ggbm90IGZv dW5kIGF0IGV4cGFuc2lvbiB0aW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgIChzeW50YXgt PmRhdHVtICMnaWxlLW5hbWUpKQorICAgICAgICAgICAgICAgIycoJXNlYXJjaC1wYXRjaCBmaWxl LW5hbWUpKSkpKQorICAgICAgOzsgRklMRS1OQU1FIGlzIHZhcmlhYmxlLCBzbyB0aGUgaGFzaCBj YW5ub3QgYmUgcHJlLWNvbXB1dGVkLgorICAgICAgKChfIGZpbGUtbmFtZSkgIycoJXNlYXJjaC1w YXRjaCBmaWxlLW5hbWUpKQorICAgICAgOzsgc2VhcmNoLXBhdGNoIGlzIGJlaW5nIHVzZWQgdXNl ZCBpbiBhIGNvbnN0cnVjdCBsaWtlCisgICAgICA7OyAobWFwIHNlYXJjaC1wYXRjaCAuLi4pLgor ICAgICAgKGlkIChpZGVudGlmaWVyPyAjJ2lkKSAjJyVzZWFyY2gtcGF0Y2gpKSkpCisKIChkZWZp bmUtc3ludGF4LXJ1bGUgKHNlYXJjaC1wYXRjaGVzIGZpbGUtbmFtZSAuLi4pCiAgICJSZXR1cm4g dGhlIGxpc3Qgb2YgYWJzb2x1dGUgZmlsZSBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gKIEZJ TEUtTkFNRSBmb3VuZCBpbiAlUEFUQ0gtUEFUSC4iCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMv Y2hyb21pdW0uc2NtIGIvZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbQppbmRleCAyNmFlMWUyNTUw Li5jZjQxOWNmNDFiIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvY2hyb21pdW0uc2NtCisrKyBi L2dudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KQEAgLTM1MSw5ICszNTEsNyBAQAogICAgICAgIjB3 YmNianpoNWFrNG5jaWFocXc0eXZ4YzR4OGlrNHgwaXo5aDRrZnkwbTAxMXN4enkxNzQiKSkpKQog CiAoZGVmaW5lICVndWl4LXBhdGNoZXMKLSAgKGxpc3QgKGxvY2FsLWZpbGUKLSAgICAgICAgIChh c3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgKHNlYXJjaC1wYXRjaCAidW5nb29nbGVk LWNocm9taXVtLWV4dGVuc2lvbi1zZWFyY2gtcGF0aC5wYXRjaCIpKSkpKQorICAoc2VhcmNoLXBh dGNoZXMgInVuZ29vZ2xlZC1jaHJvbWl1bS1leHRlbnNpb24tc2VhcmNoLXBhdGgucGF0Y2giKSkK IAogOzsgVGhpcyBpcyBhIHNvdXJjZSAnc25pcHBldCcgdGhhdCBkb2VzIHRoZSBmb2xsb3dpbmc6 CiA7OyAqKSBBcHBsaWVzIHZhcmlvdXMgcGF0Y2hlcyBmb3IgdW5idW5kbGluZyBwdXJwb3NlcyBh bmQgbGlic3RkYysrIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZW1i ZWRkZWQuc2NtIGIvZ251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQppbmRleCBmMzg4YzExYzNkLi44 MjZmNTY1NWMzIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZW1iZWRkZWQuc2NtCisrKyBiL2du dS9wYWNrYWdlcy9lbWJlZGRlZC5zY20KQEAgLTMwLDYgKzMwLDcgQEAKICAgIzp1c2UtbW9kdWxl IChndWl4IHBhY2thZ2VzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggZG93bmxvYWQpCiAgICM6dXNl LW1vZHVsZSAoZ3VpeCBzdm4tZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnZXhwKQog ICAjOnVzZS1tb2R1bGUgKGd1aXggZ2l0LWRvd25sb2FkKQogICAjOnVzZS1tb2R1bGUgKChndWl4 IGxpY2Vuc2VzKSAjOnByZWZpeCBsaWNlbnNlOikKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxk LXN5c3RlbSBjbWFrZSkKQEAgLTkxLDcgKzkyLDcgQEAKICAgICAgICAgIDs7IFJlbW92ZSB0aGUg b25lIHBhdGNoIHRoYXQgZG9lc24ndCBhcHBseSB0byB0aGlzIDQuOSBzbmFwc2hvdCAodGhlCiAg ICAgICAgICA7OyBwYXRjaCBpcyBmb3IgNC45LjQgYW5kIGxhdGVyIGJ1dCB0aGlzIHN2biBzbmFw c2hvdCBpcyBvbGRlcikuCiAgICAgICAgICAocGF0Y2hlcyAocmVtb3ZlIChsYW1iZGEgKHBhdGNo KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PyAoYmFzZW5hbWUgcGF0Y2gp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0/IChsb2NhbC1maWxlLW5hbWUg cGF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnY2MtYXJtLWJ1 Zy03MTM5OS5wYXRjaCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAob3JpZ2luLXBhdGNo ZXMgKHBhY2thZ2Utc291cmNlIHhnY2MpKSkpKSkKICAgICAgIChuYXRpdmUtaW5wdXRzCmRpZmYg LS1naXQgYS9nbnUvcGFja2FnZXMvZ251emlsbGEuc2NtIGIvZ251L3BhY2thZ2VzL2dudXppbGxh LnNjbQppbmRleCA1NzZiYzI1ODZmLi5iZTY3NGRjZThmIDEwMDY0NAotLS0gYS9nbnUvcGFja2Fn ZXMvZ251emlsbGEuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9nbnV6aWxsYS5zY20KQEAgLTczNiwx NCArNzM2LDEwIEBAIGZyb20gZm9yY2luZyBHRVhQLVBST01JU0UuIgogICAgICAgICAgICAgIChi YXNlMzIKICAgICAgICAgICAgICAgIjAwd3MzNTQweDV3aHBpY2M1Zng0azk0OWZmNzNjcXZhano2 anAxM2FobjQ5d3FkYWRzNDciKSkpKQogCi0gICAgICAgICA7OyAnc2VhcmNoLXBhdGNoJyByZXR1 cm5zIGVpdGhlciBhIHZhbGlkIGZpbGUgbmFtZSBvciAjZiwgc28gd3JhcCBpdAotICAgICAgICAg OzsgaW4gJ2Fzc3VtZS12YWxpZC1maWxlLW5hbWUnIHRvIGF2b2lkICdsb2NhbC1maWxlJyB3YXJu aW5ncy4KICAgICAgICAgIChnbnV6aWxsYS1maXhlcy1wYXRjaAotICAgICAgICAgIChsb2NhbC1m aWxlIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgIChzZWFy Y2gtcGF0Y2ggImljZWNhdC11c2Utb2xkZXItcmV2ZWFsLWhpZGRlbi1odG1sLnBhdGNoIikpKSkK KyAgICAgICAgICAoc2VhcmNoLXBhdGNoICJpY2VjYXQtdXNlLW9sZGVyLXJldmVhbC1oaWRkZW4t aHRtbC5wYXRjaCIpKQogICAgICAgICAgKG1ha2VpY2VjYXQtcGF0Y2gKLSAgICAgICAgICAobG9j YWwtZmlsZSAoYXNzdW1lLXZhbGlkLWZpbGUtbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAo c2VhcmNoLXBhdGNoICJpY2VjYXQtbWFrZWljZWNhdC5wYXRjaCIpKSkpKQorICAgICAgICAgIChz ZWFyY2gtcGF0Y2ggImljZWNhdC1tYWtlaWNlY2F0LnBhdGNoIikpKQogCiAgICAgKG9yaWdpbgog ICAgICAgKG1ldGhvZCBjb21wdXRlZC1vcmlnaW4tbWV0aG9kKQpkaWZmIC0tZ2l0IGEvZ3VpeC9s aW50LnNjbSBiL2d1aXgvbGludC5zY20KaW5kZXggM2E3ZjNiZTMyNy4uYjBhMmZiYzMyNyAxMDA2 NDQKLS0tIGEvZ3VpeC9saW50LnNjbQorKysgYi9ndWl4L2xpbnQuc2NtCkBAIC00Niw2ICs0Niw3 IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdleHAtPmFwcHJveGltYXRlLXNl eHApKQogICAjOnVzZS1tb2R1bGUgKGd1aXggbGljZW5zZXMpCiAgICM6dXNlLW1vZHVsZSAoZ3Vp eCByZWNvcmRzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZ2V4cCkKICAgIzp1c2UtbW9kdWxlIChn dWl4IGdyYWZ0cykKICAgIzp1c2UtbW9kdWxlIChndWl4IHVwc3RyZWFtKQogICAjOnVzZS1tb2R1 bGUgKGd1aXggdXRpbHMpCkBAIC05MjgsNiArOTI5LDggQEAgcGF0Y2ggY291bGQgbm90IGJlIGZv dW5kLiIKICAgICAgICAgICAgICAgICAgICAoc3RhcnRzLXdpdGgtcGFja2FnZS1uYW1lPyAoYmFz ZW5hbWUgcGF0Y2gpKSkKICAgICAgICAgICAgICAgICAgICgoPyBvcmlnaW4/IHBhdGNoKQogICAg ICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChvcmlnaW4tYWN0dWFs LWZpbGUtbmFtZSBwYXRjaCkpKQorICAgICAgICAgICAgICAgICAgKCg/IGxvY2FsLWZpbGU/IHBh dGNoKQorICAgICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChsb2Nh bC1maWxlLW5hbWUgcGF0Y2gpKSkKICAgICAgICAgICAgICAgICAgIChfICAjZikpICAgICA7bXVz dCBiZSBzb21lIG90aGVyIGZpbGUtbGlrZSBvYmplY3QKICAgICAgICAgICAgICAgICBwYXRjaGVz KQogICAgICAgICAgJygpCkBAIC05NDEsMTkgKzk0NCwyMiBAQCBwYXRjaCBjb3VsZCBub3QgYmUg Zm91bmQuIgogICAgICAobGV0ICgocHJlZml4IChzdHJpbmctbGVuZ3RoICglZGlzdHJvLWRpcmVj dG9yeSkpKQogICAgICAgICAgICAobWFyZ2luIChzdHJpbmctbGVuZ3RoICJndWl4LTIuMC4wcmMz LTEwMDAwLTEyMzQ1Njc4OTAvIikpCiAgICAgICAgICAgIChtYXggICAgOTkpKQorICAgICAgIChk ZWZpbmUgKHRlc3QtcGF0Y2gtbmFtZSBmaWxlLW5hbWUpCisgICAgICAgICAoaWYgKD4gKCsgbWFy Z2luIChpZiAoc3RyaW5nLXByZWZpeD8gKCVkaXN0cm8tZGlyZWN0b3J5KSBmaWxlLW5hbWUpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAoc3RyaW5nLWxlbmd0aCBmaWxlLW5hbWUp IHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbGVuZ3RoIGZp bGUtbmFtZSkpKQorICAgICAgICAgICAgICAgIG1heCkKKyAgICAgICAgICAgICAobWFrZS13YXJu aW5nCisgICAgICAgICAgICAgIHBhY2thZ2UKKyAgICAgICAgICAgICAgKEdfICJ+YTogZmlsZSBu YW1lIGlzIHRvbyBsb25nIikKKyAgICAgICAgICAgICAgKGxpc3QgKGJhc2VuYW1lIGZpbGUtbmFt ZSkpCisgICAgICAgICAgICAgICM6ZmllbGQgJ3BhdGNoLWZpbGUtbmFtZXMpCisgICAgICAgICAg ICAgI2YpKQogICAgICAgIChmaWx0ZXItbWFwIChtYXRjaC1sYW1iZGEKICAgICAgICAgICAgICAg ICAgICAgICgoPyBzdHJpbmc/IHBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgIChpZiAoPiAo KyBtYXJnaW4gKGlmIChzdHJpbmctcHJlZml4PyAoJWRpc3Ryby1kaXJlY3RvcnkpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNo KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChzdHJpbmct bGVuZ3RoIHBhdGNoKSBwcmVmaXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHN0cmluZy1sZW5ndGggcGF0Y2gpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAobWFrZS13YXJuaW5nCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAoR18gIn5hOiBmaWxlIG5hbWUgaXMgdG9vIGxvbmciKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxpc3QgKGJhc2VuYW1lIHBhdGNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICM6ZmllbGQgJ3BhdGNoLWZpbGUtbmFtZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICNm KSkKKyAgICAgICAgICAgICAgICAgICAgICAodGVzdC1wYXRjaC1uYW1lIHBhdGNoKSkKKyAgICAg ICAgICAgICAgICAgICAgICgoPyBsb2NhbC1maWxlPyBwYXRjaCkKKyAgICAgICAgICAgICAgICAg ICAgICAodGVzdC1wYXRjaC1uYW1lIChsb2NhbC1maWxlLWFic29sdXRlLWZpbGUtbmFtZSBwYXRj aCkpKQogICAgICAgICAgICAgICAgICAgICAgKF8gI2YpKQogICAgICAgICAgICAgICAgICAgIHBh dGNoZXMpKSkpKQogCi0tIAoyLjMzLjAKCg== --=-Ed3xbcWsGUAuseKcAI15 Content-Disposition: inline; filename*0=0006-gexp-Do-not-intern-if-the-file-is-already-in-the-sto.pat; filename*1=ch Content-Type: text/x-patch; name="0006-gexp-Do-not-intern-if-the-file-is-already-in-the-sto.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAwZmM1NGJkZDljY2M5NzI5ZmZmNTRmNTkzNWE1NTJlNWU2MDhhMWQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxODoxMDozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNi82 XSBnZXhwOiBEbyBub3QgaW50ZXJuIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIHN0b3Jl LgoKKiBndWl4L2dleHAuc2NtIChsb2NhbC1maWxlLWNvbXBpbGVyKTogV2hlbiB0aGUgZmlsZSBp cyBhbHJlYWR5IGluIHRoZQogIHN0b3JlLCByZS11c2UgdGhlIGZpeGVkIG91dHB1dCBwYXRoIGlu c3RlYWQgb2YgaW50ZXJuaW5nIHRoZSBmaWxlCiAgYWdhaW4uCi0tLQogZ3VpeC9nZXhwLnNjbSB8 IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgMzEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ndWl4L2dl eHAuc2NtIGIvZ3VpeC9nZXhwLnNjbQppbmRleCBjNjllNGFhMjk5Li5kYTFlOTE4ODAxIDEwMDY0 NAotLS0gYS9ndWl4L2dleHAuc2NtCisrKyBiL2d1aXgvZ2V4cC5zY20KQEAgLTUzMSwxMyArNTMx LDM3IEBAIGFwcGVhcnMuIgogKGRlZmluZS1nZXhwLWNvbXBpbGVyIChsb2NhbC1maWxlLWNvbXBp bGVyIChmaWxlIDxsb2NhbC1maWxlPikgc3lzdGVtIHRhcmdldCkKICAgOzsgIkNvbXBpbGUiIEZJ TEUgYnkgYWRkaW5nIGl0IHRvIHRoZSBzdG9yZS4KICAgKG1hdGNoIGZpbGUKLSAgICAoKCQgPGxv Y2FsLWZpbGU+IGZpbGUgKD0gZm9yY2UgYWJzb2x1dGUpIG5hbWUgc2hhMjU2IHJlY3Vyc2l2ZT8g c2VsZWN0PykKLSAgICAgOzsgQ2Fub25pY2FsaXplIEZJTEUgc28gdGhhdCBpZiBpdCdzIGEgc3lt bGluaywgaXQgaXMgcmVzb2x2ZWQuICBGYWlsaW5nCi0gICAgIDs7IHRvIGRvIHRoYXQsIHdoZW4g UkVDVVJTSVZFPyBpcyAjdCwgd2UgY291bGQgZW5kIHVwIGNyZWF0aW5nIGEgZGFuZ2xpbmcKLSAg ICAgOzsgc3ltbGluayBpbiB0aGUgc3RvcmUsIGFuZCB3aGVuIFJFQ1VSU0lWRT8gaXMgI2YgJ2Fk ZC10by1zdG9yZScgd291bGQKLSAgICAgOzsganVzdCB0aHJvdyBhbiBlcnJvciwgYm90aCBvZiB3 aGljaCBhcmUgaW5jb252ZW5pZW50LgotICAgICAoaW50ZXJuZWQtZmlsZSBhYnNvbHV0ZSBuYW1l Ci0gICAgICAgICAgICAgICAgICAgICM6cmVjdXJzaXZlPyByZWN1cnNpdmU/ICM6c2VsZWN0PyBz ZWxlY3Q/KSkpKQorICAgIDs7IERlbGF5IGNvbXB1dGluZyB0aGUgYWJzb2x1dGUgZmlsZSBuYW1l IHVudGlsICdpbnRlcm4nLCBhcyB0aGlzCisgICAgOzsgbWlnaHQgYmUgYSByZWxhdGl2ZWx5IGV4 cGVuc2l2ZSBjb21wdXRhdGlvbiAoZS5nLiBpZiBzZWFyY2gtcGF0Y2gKKyAgICA7OyBpcyB1c2Vk KSwgZXNwZWNpYWxseSBvbiBhIHNwaW5uaW5nIGRpc2suCisgICAgKCgkIDxsb2NhbC1maWxlPiBm aWxlIGFic29sdXRlLXByb21pc2UgbmFtZSBzaGEyNTYgcmVjdXJzaXZlPyBzZWxlY3Q/KQorICAg ICAobGV0ICgpCisgICAgICAgKGRlZmluZSAoaW50ZXJuKQorICAgICAgICAgOzsgQ2Fub25pY2Fs aXplIEZJTEUgc28gdGhhdCBpZiBpdCdzIGEgc3ltbGluaywgaXQgaXMgcmVzb2x2ZWQuCisgICAg ICAgICA7OyBGYWlsaW5nIHRvIGRvIHRoYXQsIHdoZW4gUkVDVVJTSVZFPyBpcyAjdCwgd2UgY291 bGQgZW5kIHVwIGNyZWF0aW5nCisgICAgICAgICA7OyBhIGRhbmdsaW5nIHN5bWxpbmsgaW4gdGhl IHN0b3JlLCBhbmQgd2hlbiBSRUNVUlNJVkU/IGlzICNmCisgICAgICAgICA7OyAnYWRkLXRvLXN0 b3JlJyB3b3VsZCBqdXN0IHRocm93IGFuIGVycm9yLCBib3RoIG9mIHdoaWNoIGFyZQorICAgICAg ICAgOzsgaW5jb252ZW5pZW50LgorICAgICAgICAgKGludGVybmVkLWZpbGUgKGZvcmNlIGFic29s dXRlLXByb21pc2UpIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICM6cmVjdXJzaXZlPyBy ZWN1cnNpdmU/ICM6c2VsZWN0PyBzZWxlY3Q/KSkKKyAgICAgICAoaWYgc2hhMjU2CisgICAgICAg ICAgIChsZXQgKChwYXRoIChmaXhlZC1vdXRwdXQtcGF0aCBuYW1lIHNoYTI1NiAjOnJlY3Vyc2l2 ZT8gcmVjdXJzaXZlPykpKQorICAgICAgICAgICAgIDs7IElmIHRoZSBoYXNoIGlzIGtub3duIGlu IGFkdmFuY2UgYW5kIHRoZSBzdG9yZSBhbHJlYWR5IGhhcyB0aGUKKyAgICAgICAgICAgICA7OyBp dGVtLCB0aGVyZSBpcyBubyBuZWVkIHRvIGludGVybiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAo aWYgKGZpbGUtZXhpc3RzPyBwYXRoKQorICAgICAgICAgICAgICAgICAobWJlZ2luICVzdG9yZS1t b25hZAorICAgICAgICAgICAgICAgICAgIDs7IFRlbGwgdGhlIEdDIHRoYXQgUEFUSCB3aWxsIGJl IHVzZWQsIHN1Y2ggdGhhdCBpdCB3b24ndAorICAgICAgICAgICAgICAgICAgIDs7IGJlIGRlbGV0 ZWQuCisgICAgICAgICAgICAgICAgICAgKChzdG9yZS1saWZ0IGFkZC10ZW1wLXJvb3QpIHBhdGgp CisgICAgICAgICAgICAgICAgICAgOzsgVGhlIEdDIGNvdWxkIGhhdmUgZGVsZXRlZCB0aGUgaXRl bSBiZWZvcmUgYWRkLXRlbXAtcm9vdAorICAgICAgICAgICAgICAgICAgIDs7IGNvbXBsZXRlZCwg c28gY2hlY2sgYWdhaW4gaWYgUEFUSCBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgKGlmIChm aWxlLWV4aXN0cz8gcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybiBwYXRoKQor ICAgICAgICAgICAgICAgICAgICAgICA7OyBJZiBpdCBoYXMgYmVlbiByZW1vdmVkLCBmYWxsLWJh Y2sgaW50ZXJuaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJuKSkpCisgICAgICAg ICAgICAgICAgIDs7IElmIFBBVEggZG9lcyBub3QgeWV0IGV4aXN0LCBmYWxsIGJhY2sgdG8gaW50 ZXJuaW5nLgorICAgICAgICAgICAgICAgICAoaW50ZXJuKSkpCisgICAgICAgICAgIChpbnRlcm4p KSkpKSkKIAogKGRlZmluZS1yZWNvcmQtdHlwZSA8cGxhaW4tZmlsZT4KICAgKCVwbGFpbi1maWxl IG5hbWUgY29udGVudCByZWZlcmVuY2VzKQotLSAKMi4zMy4wCgo= --=-Ed3xbcWsGUAuseKcAI15-- --=-ZXdwdSIZm75bAbTlaqKD Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTPiVhccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7mUPAP9Tp6RrxYBG01bX5pGGZjhkUVxB VlrLlALonb/bUSqfwgEA2ICKcwCwWq6gd7PZCTO2sGhtcgFlksT1MzyoNH+KHw0= =D7ID -----END PGP SIGNATURE----- --=-ZXdwdSIZm75bAbTlaqKD--