From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 28540 invoked from network); 26 Nov 2022 03:36:28 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 26 Nov 2022 03:36:28 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1669433788; b=XQxKsKNgUvGCVZCL3o3Y8NbsAS7k8fFOyzO60Vsg1/NdoT1y3WNNUrsAzUzmiSfGO7CuyZzxxY vKl+i3W/OE77IQI4h/Yitk61cRWd19mMxpH9lhG6sgbPSLSJkgFxAvRAEvb9jCWfUFjqU/To11 Z59J8yckLD4oSGbxaiSoFiT1/5Oh47jn5GfbsqY1EWWOBmxHDg7pdxfC1NMVhe81ECLvqR313S c0YBwZfy/2y/KsglQmsE5CA9tfwq2c+DhOY3KU4vtm6bTSo1vgC6zVE7F9L8FWsVPRNi9LcGFL EPJ0qcO+CDynojq2hqJHv99XUuFDJU893007dPfGsrIxHg==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-vk1-f180.google.com) smtp.remote-ip=209.85.221.180; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1669433788; bh=enKxNezCE2NJM+benvwI4HVkjqFfeCbpwwk1TuuqLd0=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=q6EzizGbvT2UM452zojXJSdyWEnXg7fXwZZ5JxSLtri/E1/HCIoh04SxTeoB6ZK78+jM9ilmf5 DGF7rrduSkpg0P+b4hQAj0/znuUdiyYz4b0ecm/iEv4P/IiV6fU42Ks56lC6xvuWS0StG6s3UT ONI1DDhyfjHPBAX0jN/t15JH6Hrb9E80WosAOshyEvFboFg29oZ0BrDmUZHnm/ZS4VZty3X0PD QVwN8G8SlK8j2vjdagPwu4G7c3gsj9jM+zqtWxoJNJau/hTC0P8JLwggjuCqfpiacQC8WDGy0A vc/AVcSFen4z9oO1UTTFKiwqqWB6t4TwlWq9dy2tP3C6/w==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID :Date:From:MIME-Version:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=p0MxrslDr8r4xeHquc8SRI7u2DCbZCbz9OpNFp1xPAo=; b=PT6CbDtwnDF5qeGuApWPG7KX2s 4Sjtged/yo+7WP0XfYYVBfc0ePhbdk7YhUjq47ewhJRZNZCfGY80eyYrFqp+aGfDc19fzkYUNwpP4 aE9LMkPKAkCBFlZG69CC0oKLh0nj31Vo1yAc3WTvejTg0/uRGkkBbeHbwjC/VjmDaOooa8hGiQV9j 6b32YBvqGXv9DquMChmD2M/39mPx8Q63x+eYqWhIdol6dJIw06V/B2c8djKKKAZc/nNDuZelxQuCu 8m+drgnk85sERUedPrzdSGgKTNPpRathDsXX5gXp2+shJEozJGRhKBPbCMrFJBkf8uJ0KLyA4irJt 1PGKpemg==; Received: by zero.zsh.org with local id 1oylzP-000OpA-EM; Sat, 26 Nov 2022 03:36:27 +0000 Authentication-Results: zsh.org; iprev=pass (mail-vk1-f180.google.com) smtp.remote-ip=209.85.221.180; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-vk1-f180.google.com ([209.85.221.180]:35703) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1oylz5-000OUE-KE; Sat, 26 Nov 2022 03:36:08 +0000 Received: by mail-vk1-f180.google.com with SMTP id r13so2900157vkf.2 for ; Fri, 25 Nov 2022 19:36:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=p0MxrslDr8r4xeHquc8SRI7u2DCbZCbz9OpNFp1xPAo=; b=YXFGlbeDGCBuZ8Zz5t4nqYlDDnQdRvR1UAmSi6r352cFzGrnsGXQ2zRdiO9Sap5ETB 0fRpr544XihiW844euSRQHr8J45hLaZIXEB6QuGVrSLyUl5Pb98yi6a+cwZj5dvh8Nlr lq/Ug5drnCpHJMSaqvXy5CD7AZThTUPUYHsryM6erEXFh03/wjZ2Ph+373DgSUBChLuA E1iy/PbQ5xzOhVm92f/i5zUg+ZAQFUYjMupxSwjx0HHLfyVl9i9wpqupxEiK7Nxxsr/a 2yVHTFYSMyTMMz5b8A3QWXBjLyyT8tj+L2RJGNPXAfjx2h5uwFHG//9Wj6yDfwGX1CNP d4hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=p0MxrslDr8r4xeHquc8SRI7u2DCbZCbz9OpNFp1xPAo=; b=b4n4RPg2tfgB0J8OoLgyuNTiRCiKf3v039x3We/ixfgMj7Me6EhM8yTCbe9RjyHDAu CcdsmG+4pBPfrMYJppqzxHRC2GcAjEOr3CkZ148s/pJod+lXBlomqWoKkTPeyDgZj0h8 arE1JeMBeA8unGQVJ4eqbF/6UGn/PAVlURMdHx8EfKbH0JH2yeS/Zx2x6NlJLcDopkMx KqhFr9QMnbNNR69ktSYRYp+a9GEs3WTdVPhOg6Rw3Kipggb82X8HnDJJGcf2jijoDg8w RSmkDYeajos4+pfSmRGbrBH06gx7thyXuFWmpaApDxcUg+dFBTFJA+l5qdxJ4jY6QsI6 f0nA== X-Gm-Message-State: ANoB5pnCdWLKyYwnxbLZo8pAOHtnbu44MWh4dDc5kBD13UAchxkeQkoC PsxbggnGq2BuS3agLXJYR01VdkQxK7qNziEm4gPTx9Nt7Ks= X-Google-Smtp-Source: AA0mqf7M/GSS3bySUplR457T4iUEfKSPGFG2iL9bq4kv4x2xIh1sWTwAhRis57KCWQUqMWShYRxBR7UG+wV9ZnTbBY4= X-Received: by 2002:a1f:b693:0:b0:3bc:7ad1:1e2e with SMTP id g141-20020a1fb693000000b003bc7ad11e2emr14335726vkf.7.1669433765835; Fri, 25 Nov 2022 19:36:05 -0800 (PST) MIME-Version: 1.0 From: Philippe Altherr Date: Sat, 26 Nov 2022 04:35:54 +0100 Message-ID: Subject: [PATCH] Fix ERR_EXIT behavior in eval and source statements and better document the noerrexit variables To: Zsh hackers list Cc: Bart Schaefer Content-Type: multipart/mixed; boundary="000000000000970f8e05ee5756f6" X-Seq: 51076 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: --000000000000970f8e05ee5756f6 Content-Type: multipart/alternative; boundary="000000000000970f8c05ee5756f4" --000000000000970f8c05ee5756f4 Content-Type: text/plain; charset="UTF-8" ATTENTION: This patch depends on the following patches described here : - patch-01-revert-mistaken-errexit-patches.txt - patch-03-fix-negation-statement.txt - patch-04-fix-function-call.txt After quite some thinking and code studying, I realized that what is really missing/wrong is a lack of this_noerrexit resetting in the execlist function. Adding that fixes the problems for the eval and source statements. It also makes my previous fix for function calls, in patch patch-04-fix-function-call.txt, redundant. Therefore, the patch below reverts that fix. Since that other patch isn't submitted yet, it could be combined with the one below into a single patch. If you prefer that, let me know and I will prepare a combined patch. The patch also significantly expands the description of the variables noerrexit and this_noerrexit. Since I spent so much time understanding the role and correct usage of these variables, I figured that writing down my findings might prove useful to future developers. For the record, here are examples of eval and source statements that don't behave correctly in the current Zsh: set -e > eval "{ false && true; }" > echo done The eval statement should trigger an exit but the current Zsh keeps going. set -e > source <(echo '{ false && true; }') > echo done The source statement should trigger an exit but the current Zsh keeps going. While working on the patch I discovered yet another case where the current Zsh misbehaves: set -e > { false && true; } || false; > echo done The second "false" should trigger and exit but the current Zsh keeps going. I was expecting that the current Zsh would also misbehave for the following case. Interestingly, it doesn't. set -e > x=$({ false && true; }) > echo done The assignment correctly triggers an exit. Why is this working while the similar examples with eval and source statements don't? The reason is that in this case the "{ false && true; }" is evaluated in a sub-shell. Technically, the evaluation in the sub-shell ends with an incorrect value of this_noerrexit. However, that doesn't impact the evaluation of the assignment, which happens in the parent shell, where this_noerrexit remains unchanged. Philippe --000000000000970f8c05ee5756f4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
ATTENTION: This patch depends on the following patches des= cribed here:
-=C2=A0patch-0= 1-revert-mistaken-errexit-patches.txt
-=C2=A0patch-03-fix-negatio= n-statement.txt
-=C2=A0patch-04-fix-function-call.txt
<= br>
After quite some thinking and code studying, I realized that = what is really missing/wrong is a lack of this_noerrexit resetting in the e= xeclist function. Adding that fixes the problems for the eval and source st= atements. It also makes my previous fix for function calls, in patch patch-= 04-fix-function-call.txt, redundant. Therefore, the patch below reverts tha= t fix. Since that other patch isn't submitted yet, it could be combined= with the one below into a single patch. If you prefer that, let me know an= d I will prepare a combined patch.

The patch also = significantly expands the description of the variables noerrexit and this_n= oerrexit. Since I spent so much time understanding the role and correct usa= ge of these variables, I figured that writing down my findings might prove = useful to future developers.

For the record, here = are examples of eval and source statements that don't behave correctly = in the current Zsh:

set -e
eval "{ false && true; }"
ech= o done

The eval statement should trigger an= exit but the current Zsh keeps going.

set -e
source <(echo '{ false &= amp;& true; }')
echo done

T= he source statement should trigger an exit but the current Zsh keeps going.=

While working on the patch I discovered yet= another case where the current Zsh misbehaves:

set -e
{ false && tru= e; } || false;
echo done

The second &quo= t;false" should trigger and exit but the current Zsh keeps going.

I was expecting that the current Zsh would also misbeh= ave for the following case. Interestingly, it doesn't.

set -e
x=3D$({ fal= se && true; })
echo done

The ass= ignment correctly triggers an exit. Why is this working while the similar e= xamples with eval and source statements don't? The reason is that in th= is case the "{ false && true; }" is evaluated in a sub-sh= ell. Technically, the evaluation in the sub-shell ends with an incorrect va= lue of this_noerrexit. However, that doesn't impact the evaluation of t= he assignment, which happens in the parent shell, where this_noerrexit rema= ins unchanged.

Philippe

--000000000000970f8c05ee5756f4-- --000000000000970f8e05ee5756f6 Content-Type: text/plain; charset="US-ASCII"; name="patch-06-fix-eval-and-source-statements.txt" Content-Disposition: attachment; filename="patch-06-fix-eval-and-source-statements.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_laxdfqdd0 ZGlmZiAtLWdpdCBhL1NyYy9leGVjLmMgYi9TcmMvZXhlYy5jCmluZGV4IDcxMWQ4ZjM3NC4uOGZm NjQ4OWVjIDEwMDY0NAotLS0gYS9TcmMvZXhlYy5jCisrKyBiL1NyYy9leGVjLmMKQEAgLTU2LDcg KzU2LDE3IEBAIHN0cnVjdCBmdW5jc2F2ZSB7CiB0eXBlZGVmIHN0cnVjdCBmdW5jc2F2ZSAqRnVu Y3NhdmU7CiAKIC8qCi0gKiB1c2VkIHRvIHN1cHByZXNzIEVSUkVYSVQgYW5kIHRyYXBwaW5nIG9m IFNJR1pFUlIsIFNJR0VYSVQuCisgKiBVc2VkIHRvIHN1cHByZXNzIEVSUkVYSVQgYW5kIHRyYXBw aW5nIG9mIFNJR1pFUlIsIFNJR0VYSVQgaW4gdGhlCisgKiBldmFsdWF0aW9uIG9mIHN1Yi1jb21t YW5kcyBvZiB0aGUgY29tbWFuZCB1bmRlciBldmFsdWF0aW9uLiBUaGUKKyAqIHZhcmlhYmxlIG11 c3QgYmUgdXBkYXRlZCBiZWZvcmUgdGhlIGV2YWx1YXRpb24gb2YgdGhlIHN1Yi1jb21tYW5kcwor ICogc3RhcnRzIGFuZCByZXN0b3JlZCB0byBpdHMgcHJldmlvdXMgc3RhdGUgcmlnaHQgYWZ0ZXIg dGhhdAorICogZXZhbHVhdGlvbiBlbmRzLiBUaGUgdmFyaWFibGUgaXMgcmVhZCBhbmQgYWN0ZWQg dXBvbiBpbiBleGVjbGlzdC4KKyAqCisgKiBBIGdvb2QgdXNhZ2UgZXhhbXBsZSBjYW4gYmUgZm91 bmQgaW4gZXhlY3doaWxlIGluIGxvb3AuYywgd2hpY2gKKyAqIGV2YWx1YXRlcyB3aGlsZSBzdGF0 ZW1lbnRzLiBUaGUgdmFyaWFibGUgaXMgdXBkYXRlZCB0byBkaXNhYmxlCisgKiBFUlJFWElUIGp1 c3QgYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHdoaWxlJ3MgY29uZGl0aW9uIGFuZCByZXN0b3JlZAor ICogdG8gaXRzIHByZXZpb3VzIHN0YXRlIHJpZ2h0IGFmdGVyIHRoZSBldmFsdWF0aW9uIG9mIHRo ZSBjb25kaXRpb24uCisgKgogICogQml0cyBmcm9tIG5vZXJyZXhpdF9iaXRzLgogICovCiAKQEAg LTY0LDcgKzc0LDM2IEBAIHR5cGVkZWYgc3RydWN0IGZ1bmNzYXZlICpGdW5jc2F2ZTsKIGludCBu b2VycmV4aXQ7CiAKIC8qCi0gKiB1c2VkIHRvIHN1cHByZXNzIEVSUkVYSVQgYW5kIEVSUlJFVFVS TiBmb3IgdGhlIGNvbW1hbmQgdW5kZXIgZXZhbHVhdGlvbi4KKyAqIFVzZWQgdG8gc3VwcHJlc3Mg RVJSRVhJVCBhbmQgRVJSUkVUVVJOIGZvciB0aGUgY29tbWFuZCB1bmRlcgorICogZXZhbHVhdGlv bi4gIFRoZSB2YXJpYWJsZSBtdXN0IGJlIGVuYWJsZWQgKHNldCB0byAxKSBhdCB0aGUgdmVyeQor ICogZW5kIG9mIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb21tYW5kLiBJdCBtdXN0IGNvbWUgYWZ0 ZXIgdGhlCisgKiBldmFsdWF0aW9uIG9mIGFueSBzdWItY29tbWFuZHMgb2YgdGhlIGNvbW1hbmQg dW5kZXIgZXZhbHVhdGlvbi4gVGhlCisgKiB2YXJpYWJsZSBpcyByZWFkIGFuZCBhY3RlZCB1cG9u IGluIGV4ZWNsaXN0LCB3aGljaCBhbHNvIHRha2VzIGNhcmUKKyAqIG9mIGluaXRpYWxpc2luZyBh bmQgcmVzZXR0aW5nIGl0IHRvIDAuCisgKgorICogVW5saWtlIHRoZSB2YXJpYWJsZSBub2VycmV4 aXQsIHdob3NlIHN0YXRlIGFwcGxpZXMgdG8gdGhlCisgKiBldmFsdWF0aW9uIG9mIHdob2xlIHN1 Yi1jb21tYW5kcyAoYW5kIHRoZWlyIGRpcmVjdCBhbmQgaW5kaXJlY3QKKyAqIHN1Yi1jb21tYW5k cyksIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGUgdGhpc19ub2VycmV4aXQgaXMgbXVjaAorICog bW9yZSBsb2NhbGl6ZWQuIEVSUkVYSVQgYW5kIEVSUlJFVFVSTiBhcmUgdHJpZ2dlcmVkIGF0IHRo ZSBlbmQgb2YKKyAqIHRoZSBmdW5jdGlvbiBleGVjbGlzdCBhZnRlciB0aGUgZXZhbHVhdGlvbiBv ZiBzb21lIG9yIGFsbCBvZiB0aGUKKyAqIGxpc3QncyBzdWItY29tbWFuZHMuIFRoZSByb2xlIG9m IHRoZSB2YXJpYWJsZSB0aGlzX25vZXJyZXhpdCBpcyB0bworICogZ2l2ZSB0byB0aGUgZnVuY3Rp b25zIGV2YWx1YXRpbmcgdGhlIGxpc3QncyBzdWItY29tbWFuZHMgdGhlCisgKiBwb3NzaWJpbGl0 eSB0byB0ZWxsIHRoZSBjYWxsaW5nIGV4ZWNsaXN0IG5vdCB0byB0cmlnZ2VyIEVSUkVYSVQgYW5k CisgKiBFUlJSRVRVUk4uIEluIG90aGVyIHdvcmRzLCB0aGUgdmFyaWFibGUgYWN0cyBhcyBhbiBh ZGRpdGlvbmFsCisgKiByZXR1cm4gdmFsdWUgYmV0d2VlbiB0aGUgY2FsbGVkIGV2YWx1YXRpb24g ZnVuY3Rpb25zIGFuZCB0aGUKKyAqIGNhbGxpbmcgZXhlY2xpc3QuIEZvciB0aGF0IHJlYXNvbiB0 aGUgdmFyaWFibGUgbXVzdCBhbHdheXMgYmUgc2V0CisgKiBhcyBsYXRlIGFzIHBvc3NpYmxlIGFu ZCBpbiBwYXJ0aWN1bGFyIGFmdGVyIGFueSBzdWItY29tbWFuZAorICogZXZhbHVhdGlvbi4gSWYg dGhlIHZhcmlhYmxlIGlzIHNldCBiZWZvcmUgdGhlIGV2YWx1YXRpb24gb2YgYQorICogc3ViLWNv bW1hbmQsIGlmIG1heSBhZmZlY3QgdGhlIHdyb25nIGV4ZWNsaXN0LCBpZiB0aGUgc3ViLWNvbW1h bmQKKyAqIGV2YWx1YXRpb24gaW52b2x2ZXMgYW5vdGhlciBleGVjbGlzdCBjYWxsLCBhbmQvb3Ig dGhlIHZhcmlhYmxlIG1heQorICogZ2V0IG1vZGlmaWVkIGJ5IHRoZSBzdWItY29tbWFuZCBldmFs dWF0aW9uIGFuZCB0aHVzIHdvdWxkbid0IHJldHVybgorICogdGhlIGRlc2lyZWQgdmFsdWUgdG8g dGhlIGNhbGxpbmcgZXhlY2xpc3QuCisgKgorICogR29vZCB1c2FnZSBleGFtcGxlcyBjYW4gYmUg Zm91bmQgaW4gdGhlIGV4ZWMgZnVuY3Rpb25zIGluIGxvb3AuYywKKyAqIHdoaWNoIGV2YWx1YXRl IGNvbXBvdW5kIGNvbW1hbmRzLiBUaGUgdmFyaWFibGUgaXMgZW5hYmxlZCByaWdodAorICogYmVm b3JlIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbnMsIGFmdGVyIGFsbCB0aGUgc3ViLWNvbW1h bmRzIG9mCisgKiB0aGUgY29tcG91bmQgY29tbWFuZHMgaGF2ZSBhbHJlYWR5IGJlZW4gZXZhbHVh dGVkLgorICoKICAqIDAgb3IgMQogICovCiAKQEAgLTE0MjcsNiArMTQ2Niw3IEBAIGV4ZWNsaXN0 KEVzdGF0ZSBzdGF0ZSwgaW50IGRvbnRfY2hhbmdlX2pvYiwgaW50IGV4aXRpbmcpCiAJICAgIGdv dG8gc3VibGlzdF9kb25lOwogCX0KIAl3aGlsZSAod2NfY29kZShjb2RlKSA9PSBXQ19TVUJMSVNU KSB7CisJICAgIHRoaXNfbm9lcnJleGl0ID0gMDsKIAkgICAgaW50IGlzYW5kb3IgPSBXQ19TVUJM SVNUX1RZUEUoY29kZSkgIT0gV0NfU1VCTElTVF9FTkQ7CiAJICAgIGludCBpc25vdCA9IFdDX1NV QkxJU1RfRkxBR1MoY29kZSkgJiBXQ19TVUJMSVNUX05PVDsKIAkgICAgbmV4dCA9IHN0YXRlLT5w YyArIFdDX1NVQkxJU1RfU0tJUChjb2RlKTsKQEAgLTE1ODIsNiArMTYyMiw3IEBAIHN1Ymxpc3Rf ZG9uZToKIAkgICAgYnJlYWs7CiAJY29kZSA9ICpzdGF0ZS0+cGMrKzsKICAgICB9CisgICAgdGhp c19ub2VycmV4aXQgPSAwOwogICAgIHBsaW5lX2xldmVsID0gb2xkX3BsaW5lX2xldmVsOwogICAg IGxpc3RfcGlwZSA9IG9sZF9saXN0X3BpcGU7CiAgICAgbGlzdF9waXBlX2pvYiA9IG9sZF9saXN0 X3BpcGVfam9iOwpAQCAtNTk5OSw3ICs2MDQwLDYgQEAgZG9zaGZ1bmMoU2hmdW5jIHNoZnVuYywg TGlua0xpc3QgZG9zaGFyZ3MsIGludCBub3JldHVybnZhbCkKIAkgICAgdHJhcF9yZXR1cm4rKzsK IAlyZXQgPSBsYXN0dmFsOwogCW5vZXJyZXhpdCA9IGZ1bmNzYXZlLT5ub2VycmV4aXQ7Ci0JdGhp c19ub2VycmV4aXQgPSAwOwogCWlmIChub3JldHVybnZhbCkgewogCSAgICBsYXN0dmFsID0gZnVu Y3NhdmUtPmxhc3R2YWw7CiAJICAgIG51bXBpcGVzdGF0cyA9IGZ1bmNzYXZlLT5udW1waXBlc3Rh dHM7CmRpZmYgLS1naXQgYS9UZXN0L0MwM3RyYXBzLnp0c3QgYi9UZXN0L0MwM3RyYXBzLnp0c3QK aW5kZXggYjcxMzJkYTgxLi5lMGI2YWZiNWYgMTAwNjQ0Ci0tLSBhL1Rlc3QvQzAzdHJhcHMuenRz dAorKysgYi9UZXN0L0MwM3RyYXBzLnp0c3QKQEAgLTk1NCw2ICs5NTQsNDcgQEAgRjpNdXN0IGJl IHRlc3RlZCB3aXRoIGEgdG9wLWxldmVsIHNjcmlwdCByYXRoZXIgdGhhbiBzb3VyY2Ugb3IgZnVu Y3Rpb24KIDE6RVJSX0VYSVQgdHJpZ2dlcmVkIGJ5IHN0YXR1cyAxIGF0IGVuZCBvZiBhbm9uIGZ1 bmMKID5TdGlsbCBmdW5jdGlvbmluZwogCisgIChzZXRvcHQgZXJyX2V4aXQKKyAgbG9vcD10cnVl OyB3aGlsZSBwcmludCBsb29wICQ/ID4mMjsgJGxvb3A7IGRvIGxvb3A9ZmFsc2U7IGZhbHNlICYm IHRydWU7IGRvbmUKKyAgcHJpbnQgZG9uZSAkPyA+JjIKKyAgKQorMDogRVJSX0VYSVQgbmVpdGhl ciB0cmlnZ2VyZWQgaW5zaWRlIGxvb3Agbm9yIHRyaWdnZXJlZCBieSB3aGlsZSBzdGF0ZW1lbnQK Kz9sb29wIDAKKz9sb29wIDEKKz9kb25lIDEKKworICAoc2V0b3B0IGVycl9leGl0CisgIHsgbG9v cD10cnVlOyB3aGlsZSBwcmludCBsb29wICQ/ID4mMjsgJGxvb3A7IGRvIGxvb3A9ZmFsc2U7IGZh bHNlICYmIHRydWU7IGRvbmUgfSB8fCBmYWxzZQorICBwcmludCBkb25lICQ/ID4mMgorICApCisx OiBFUlJfRVhJVCBub3QgdHJpZ2dlcmVkIGluc2lkZSBsb29wIGJ1dCB0cmlnZ2VyZWQgYnkgcmhz IG9mIHx8Cis/bG9vcCAwCis/bG9vcCAxCisKKyAgKHNldG9wdCBlcnJfZXhpdAorICBldmFsICds b29wPXRydWU7IHdoaWxlIHByaW50IGxvb3AgJD8gPiYyOyAkbG9vcDsgZG8gbG9vcD1mYWxzZTsg ZmFsc2UgJiYgdHJ1ZTsgZG9uZScKKyAgcHJpbnQgZG9uZSAkPyA+JjIKKyAgKQorMTogRVJSX0VY SVQgbm90IHRyaWdnZXJlZCBpbnNpZGUgbG9vcCBidXQgdHJpZ2dlcmVkIGJ5IGV2YWwKKz9sb29w IDAKKz9sb29wIDEKKworICAoc2V0b3B0IGVycl9leGl0CisgIHNvdXJjZSA8KGVjaG8gJ2xvb3A9 dHJ1ZTsgd2hpbGUgcHJpbnQgbG9vcCAkPyA+JjI7ICRsb29wOyBkbyBsb29wPWZhbHNlOyBmYWxz ZSAmJiB0cnVlOyBkb25lJykKKyAgcHJpbnQgZG9uZSAkPyA+JjIKKyAgKQorMTogRVJSX0VYSVQg bm90IHRyaWdnZXJlZCBpbnNpZGUgbG9vcCBidXQgdHJpZ2dlcmVkIGJ5IHNvdXJjZQorP2xvb3Ag MAorP2xvb3AgMQorCisgIChzZXRvcHQgZXJyX2V4aXQKKyAgdj0kKGxvb3A9dHJ1ZTsgd2hpbGUg cHJpbnQgbG9vcCAkPyA+JjI7ICRsb29wOyBkbyBsb29wPWZhbHNlOyBmYWxzZSAmJiB0cnVlOyBk b25lKQorICBwcmludCBkb25lICQ/ID4mMgorICApCisxOiBFUlJfRVhJVCBub3QgdHJpZ2dlcmVk IGluc2lkZSBsb29wIGJ1dCB0cmlnZ2VyZWQgYnkgY29tbWFuZCBzdWJzdGl0dXRpb24KKz9sb29w IDAKKz9sb29wIDEKKwogICBpZiB6bW9kbG9hZCB6c2gvc3lzdGVtIDI+L2Rldi9udWxsOyB0aGVu CiAgICgKICAgICB0cmFwICdlY2hvIFRFUk07IGV4aXQgMicgVEVSTQo= --000000000000970f8e05ee5756f6--