Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wEEvr-003oLv-0q for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Apr 2026 23:18:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wEEvp-00Dx1S-2N for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Apr 2026 23:18:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wEEvp-00Dx1I-0q for pgsql-hackers@lists.postgresql.org; Sat, 18 Apr 2026 23:18:33 +0000 Received: from mail-ot1-x32e.google.com ([2607:f8b0:4864:20::32e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wEEvk-00000001tZx-3JjW for pgsql-hackers@lists.postgresql.org; Sat, 18 Apr 2026 23:18:31 +0000 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7dbcb467f2bso1942387a34.3 for ; Sat, 18 Apr 2026 16:18:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776554306; cv=none; d=google.com; s=arc-20240605; b=ayFbyY9kQ4Bi9EnrmF3kCV0+3ZfY0N2MqqDIBqoIpZN2gWHqUeAuputYyT+rC6HsB3 qKpoTnX2NhKoRYNPefjrs7h7MUDVlnq5+V64viMetdpd1R6yC5334s+9LkazxXOzCLbH BYncPU6PDCEyL/14bPBOskZ3b3r2B62rz2oRpV5XVXxr26f2BLQjRX1SCTaFB3Oy4T2A yVW3xdiSmd4KlGeNGAtvSpumnw8I7RiOMPOKQzkz3KR0Svd461zXpK7fLVHiZYPtRZYI whNec1Nsiuqp9dq/RKr83II0LTyonKVe70BsSeFbasK/0+q6vIIHclQ0smuNX8KKExCu lq9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=pP2ry/mDsUSg5oCTTwzvt3qGMzuzX8uYlEeZ1Ab4jew=; fh=cbiHFvGxr5kSusOwUh8/dODHvQ/yjLQjTyURAqR7L/M=; b=YH2igPvc2jXulRe0DOXA3aCA590Va+EWZcZ00q6iLSTlFQscnBiYikHI94d2tH7Es+ zlbLHu+sv7r/Fg8DRUzQP1irURUeuU710O+gVBiRAKxbjgDrn74n58ib+ZwjCB5cr2fo 5NDsJCK02AFCANeJmtNo9mNWIltEgE6Zkw4OTigMTjNengHSZeC7uK4fuvQc/KWqE8Rv 10TmpBwD+RQ5E2FYGlnJqBVNec3FPnV6Q4o4bScW576VN0B7WX6iZk5RNlIIWHHKhRbf JHLmuqX3yKEfRgiX11P6bNJLjfuFnm7ec4/iLCwpGWoTfUg6Nao1svTCoZBYW3KcwBGO 6FpQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1776554306; x=1777159106; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pP2ry/mDsUSg5oCTTwzvt3qGMzuzX8uYlEeZ1Ab4jew=; b=zTcVzG9zuqsUhPIpUnI9e0D+Cy5BIkFYGYqIDm5C271oLv25I9eGvJ8pLtFA4MOHZ5 UuYbYH00tyigvWBYkZvLgj5NY5v64R5BLv6VDrij0Vpk2QU4xTDbSgvtk0JoIT9BVzLX jvO65Kb6lpe+NEPZWwVRxszItwh9th3SM+KXypureQZNJw4aPgkC8v5uX9qcbTGykfHD k6cMzZ/TziIynxgMkoF8NnJi+Yf47bCEb5cOLvi2nnCHBkV9e49sPNa8Z2e6fZZjAQSR 1Fd4RsbTV+Pjy9KcMiN1y6mFNtw2zjUKtrw4Qbum8SNXe9ZaIg9qZ16IbMVta6FMHuvh i7TQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776554306; x=1777159106; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=pP2ry/mDsUSg5oCTTwzvt3qGMzuzX8uYlEeZ1Ab4jew=; b=dGcAU1aFUKPC03sTaAEtPwgJy5QA9Zq7xvZnxS3dI4YKHEBEM0ydIQVY5DkRmeVsAT 4Bk7PsFV3+j9+42mkmTyZSLi4doZYtzGF6XtAn79+0lAvco1mqZGIuRnG3FScNW+f44Y D4RWKXdQCQzg2HLjFJOrtu+bhNCMXcPp3Qqdm5BG/swfABObvJxFZ8LIjQqOOqj1IIIk t+/pzP7nwgbaupEc3R7j/2AQE5g53QN54MWLMdCgqbjq7zhTppdGoBAXwjk0PL7o7Eg4 AdGbtNGswWSprRlw36QcBjusqcw4x3vXyBTeu05IAopJR0CvxNohDOB+joeCHlhOiQFG 1vdA== X-Forwarded-Encrypted: i=1; AFNElJ+fI9tEfpV0haO1gOyq/qZEjEiC8pfyMvRKKdO+SAk+i1srr06oRgnjxydpWdF+OymvXebVW0yLT2hLrTsw@lists.postgresql.org X-Gm-Message-State: AOJu0YzBiLamAO18uvGwaT/CNX2QrP667xOP5ACuk43KYPVqCoYI7jdi T4fvbSABRcxQJdRjZhnfcetEkHZzV25pdRxbHjcebWKbeQM9KP1gF0GCrt8X7sJHCOTKx0+FAqS j2v1sslm6/mys4Jmm92qEWIv0Xky9OEZmQQJBwqYSlg== X-Gm-Gg: AeBDietnAfAQuj6nEU0EcrWzFVrkM+7id5WKZsRyQ9Go//IT0pV0KMQcdqQy7AV8tWd iNzSPUi6lQJJ90dMm3vmqQ4PGvC/vgWWWZier7t+Lb/CIu6dh9wJKC5S0LOz3ICPicPr7DD/g7c MUARwhIsGR0EDXekEZdBEn6Fv4RvoBY5BTJu0oSGjNEdDMTqJ0Znl/GT67ESbhH/fTkFIFgKZzR ypf0xDOLe3VEkscTh6TqDERrCAr+WMNT+VH8OTTVoJNW2Ju7XmHgQgUiMr86n0HTrbIxH5CzVsp LwRFaKFwvWhvH89j25g= X-Received: by 2002:a05:6820:604:b0:689:7cd7:259e with SMTP id 006d021491bc7-69462f44c08mr4953634eaf.57.1776554306193; Sat, 18 Apr 2026 16:18:26 -0700 (PDT) MIME-Version: 1.0 References: <85ac7f0e-d95f-4377-ade0-8941fd328012@eisentraut.org> <7d63ddfa-c735-4dfe-8c7a-4f1e2a621058@eisentraut.org> <4606deaa-7d65-4f22-8a78-356c3180be9d@eisentraut.org> <53f1c094-3c29-4ef6-a9bd-dc2e7894ceb0@eisentraut.org> In-Reply-To: From: Paul A Jungwirth Date: Sat, 18 Apr 2026 16:18:13 -0700 X-Gm-Features: AQROBzB3a0wF6oXmQSAd-z-5M04NzwTRQVVWH0S6DCQ2bsPYORU7lAy5Yh40zdw Message-ID: Subject: Re: SQL:2011 Application Time Update & Delete To: SATYANARAYANA NARLAPURAM Cc: Peter Eisentraut , Chao Li , PostgreSQL Hackers , jian he Content-Type: multipart/mixed; boundary="0000000000005874ee064fc448b2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005874ee064fc448b2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 15, 2026 at 10:30=E2=80=AFAM Paul A Jungwirth wrote: > > On Tue, Apr 14, 2026 at 10:34=E2=80=AFPM Paul A Jungwirth > wrote: > > > > > A BEFORE UPDATE trigger that modifies the range column creates overl= apping rows. The trigger widening the range doesn't affect leftover computa= tion, which uses the original FPO bounds. Result: updated row overlaps both= leftovers. > > > > I'm working on a fix for this. It's not quite ready, but I can finish > > it in the morning. . . . > > Actually I think the proper behavior here is to raise an error. We > forbid setting the application-time column when using FOR PORTION OF > (per the standard), so why should we allow a BEFORE trigger to set it? > I think it has the same inconsistency problems. We could support it, > but then why not support both? > > Assuming we want to raise an error, I think the best way is to check > the tuple in ExecForPortionOfLeftovers to see if a trigger has > modified it, and in that case raise an error. What do you think? Here is a patch that forbids changing the valid_at column in a BEFORE trigger. It works by capturing the value before triggers run, then checking afterwards if it is still the same (using the default btree equality operator; probably a simple binary comparison is good enough). This copy+check only happens if the table has BEFORE UPDATE row triggers, so there is no cost in most cases. I'm raising ERRCODE_TRIGGERED_DATA_CHANGE_VIOLATION, which is what we use when (basically) a trigger & UPDATE both change a row in a way that leaves the user intent unclear. I think that's a very close fit here, but you could argue we should use the same errcode as SETing valid_at. That is ERRCODE_SYNTAX_ERROR. That strikes me as a questionable choice, actually. Personally I think using different errcodes is correct though. In ExecForPortionOfSaveRange there is a lot of code duplication copying the structure for child partitions, but I think we could cut that by first adding jian he's helper function (ExecInitForPortionOf) from another bugfix patch [1]. [1] https://www.postgresql.org/message-id/CA%2BrenyWD%2BXXifwswE74vhjooqbiV= Ku4qVhLvpMcUQBzrjVjT7A%40mail.gmail.com Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com --0000000000005874ee064fc448b2 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Forbid-BEFORE-UPDATE-triggers-changing-the-FOR-PO.patch" Content-Disposition: attachment; filename="v1-0001-Forbid-BEFORE-UPDATE-triggers-changing-the-FOR-PO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo4yiinn0 RnJvbSBkMWY5M2NiYzUwMThjNDFiMDk0OGVjZTVlYWRlMDg1ODNhZmU2YWUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IFRodSwgMTYgQXByIDIwMjYgMTM6MDA6NTkgLTA3MDAKU3ViamVj dDogW1BBVENIIHYxXSBGb3JiaWQgQkVGT1JFIFVQREFURSB0cmlnZ2VycyBjaGFuZ2luZyB0aGUg Rk9SIFBPUlRJT04gT0YKIGNvbHVtbgoKSnVzdCBhcyB3ZSBmb3JiaWQgVVBEQVRFIHQgRk9SIFBP UlRJT04gT0YgdmFsaWRfYXQgLi4uIFNFVCB2YWxpZF9hdCwgd2UKc2hvdWxkIGZvcmJpZCBzZXR0 aW5nIHRoZSBhcHBsaWNhdGlvbi10aW1lIGNvbHVtbiB3aXRoIGEgQkVGT1JFIHRyaWdnZXIuCgpX ZSByZWNvcmQgdGhlIHZhbHVlIGJlZm9yZSB0cmlnZ2VycyBmaXJlLCBhbmQgdGhlbiB3ZSBjb21w YXJlCmFmdGVyd2FyZHMgdG8gbWFrZSBzdXJlIGl0IGhhc24ndCBiZWVuIGFsdGVyZWQuIElmIHNv IHdlIHJhaXNlIGFuIGVycm9yLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jICAgICAgIHwgMTU5ICsrKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0IHwgIDIwICsrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv Zm9yX3BvcnRpb25fb2Yuc3FsICAgICAgfCAgMjQgKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE5NiBp bnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jCmluZGV4IGVmMmE2YmM2ZTlkLi5jODJkZWEyZWZmMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTE3MSw3ICsxNzEsMTEgQEAgc3RhdGljIGJvb2wg RXhlY09uQ29uZmxpY3RTZWxlY3QoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogc3RhdGlj IHZvaWQgRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRl eHQsCiAJCQkJCQkJCQkgIEVTdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQkJICBSZXN1bHRSZWxJbmZv ICpyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJICBJdGVtUG9pbnRlciB0dXBsZWlkKTsKKwkJCQkJ CQkJCSAgSXRlbVBvaW50ZXIgdHVwbGVpZCwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKm5l d1Nsb3QpOworc3RhdGljIHZvaWQgRXhlY0ZvclBvcnRpb25PZlNhdmVSYW5nZShNb2RpZnlUYWJs ZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIHN0YXRpYyBUdXBsZVRhYmxl U2xvdCAqRXhlY1ByZXBhcmVUdXBsZVJvdXRpbmcoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwK IAkJCQkJCQkJCQkJICAgRVN0YXRlICplc3RhdGUsCiAJCQkJCQkJCQkJCSAgIFBhcnRpdGlvblR1 cGxlUm91dGluZyAqcHJvdXRlLApAQCAtMTQwMywxNCArMTQwNywxNCBAQCBzdGF0aWMgdm9pZAog RXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJ CQkJCQkgIEVTdGF0ZSAqZXN0YXRlLAogCQkJCQkJICBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLAotCQkJCQkJICBJdGVtUG9pbnRlciB0dXBsZWlkKQorCQkJCQkJICBJdGVtUG9pbnRlciB0 dXBsZWlkLAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqbmV3U2xvdCkKIHsKIAlNb2RpZnlUYWJs ZVN0YXRlICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsKIAlNb2RpZnlUYWJsZSAqbm9kZSA9 IChNb2RpZnlUYWJsZSAqKSBtdHN0YXRlLT5wcy5wbGFuOwogCUZvclBvcnRpb25PZkV4cHIgKmZv clBvcnRpb25PZiA9IChGb3JQb3J0aW9uT2ZFeHByICopIG5vZGUtPmZvclBvcnRpb25PZjsKIAlB dHRyTnVtYmVyCXJhbmdlQXR0bm87CiAJRGF0dW0JCW9sZFJhbmdlOwotCVR5cGVDYWNoZUVudHJ5 ICp0eXBjYWNoZTsKIAlGb3JQb3J0aW9uT2ZTdGF0ZSAqZnBvU3RhdGU7CiAJVHVwbGVUYWJsZVNs b3QgKm9sZHR1cGxlU2xvdDsKIAlUdXBsZVRhYmxlU2xvdCAqbGVmdG92ZXJTbG90OwpAQCAtMTQ5 MCwxNSArMTQ5NCw1MSBAQCBFeGVjRm9yUG9ydGlvbk9mTGVmdG92ZXJzKE1vZGlmeVRhYmxlQ29u dGV4dCAqY29udGV4dCwKIAlvbGRSYW5nZSA9IG9sZHR1cGxlU2xvdC0+dHRzX3ZhbHVlc1tyYW5n ZUF0dG5vIC0gMV07CiAKIAkvKgotCSAqIEdldCB0aGUgcmFuZ2UncyB0eXBlIGNhY2hlIGVudHJ5 LiBUaGlzIGlzIHdvcnRoIGNhY2hpbmcgZm9yIHRoZSB3aG9sZQotCSAqIFVQREFURS9ERUxFVEUg YXMgcmFuZ2UgZnVuY3Rpb25zIGRvLgorCSAqIElmIEJFRk9SRSBVUERBVEUgdHJpZ2dlcnMgZmly ZWQsIHRoZXkgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSByYW5nZQorCSAqIGNvbHVtbiwgd2hpY2gg d291bGQgYnJlYWsgdGhlIHRlbXBvcmFsIHNlbWFudGljcyBvZiBGT1IgUE9SVElPTiBPRi4KKwkg KiBXZSBjYXB0dXJlZCB0aGUgY29sdW1uIHZhbHVlIGluIEV4ZWNGb3JQb3J0aW9uT2ZTYXZlUmFu Z2UsIHNvIG5vdworCSAqIGNvbXBhcmUgaXQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSB0byBkZXRl Y3QgdGFtcGVyaW5nLiBUaGlzIHBhcmFsbGVscworCSAqIGhvdyBpbiBhbmFseXNpcyB3ZSByZWpl Y3QgU0VUdGluZyB0aGUgcmFuZ2UgY29sdW1uIGRpcmVjdGx5LgogCSAqLwotCi0JdHlwY2FjaGUg PSBmcG9TdGF0ZS0+ZnBfbGVmdG92ZXJzdHlwY2FjaGU7Ci0JaWYgKHR5cGNhY2hlID09IE5VTEwp CisJaWYgKG5ld1Nsb3QgIT0gTlVMTCAmJiBmcG9TdGF0ZS0+ZnBfb3JpZ05ld1JhbmdlVmFsaWQp CiAJewotCQl0eXBjYWNoZSA9IGxvb2t1cF90eXBlX2NhY2hlKGZvclBvcnRpb25PZi0+cmFuZ2VU eXBlLCAwKTsKLQkJZnBvU3RhdGUtPmZwX2xlZnRvdmVyc3R5cGNhY2hlID0gdHlwY2FjaGU7CisJ CWJvb2wJCW5ld0lzTnVsbDsKKwkJRGF0dW0JCW5ld1JhbmdlOworCQlUeXBlQ2FjaGVFbnRyeSAq dHlwY2FjaGU7CisKKwkJLyoKKwkJICogR2V0IHRoZSByYW5nZSdzIHR5cGUgY2FjaGUgZW50cnku IFRoaXMgaXMgd29ydGggY2FjaGluZyBmb3IgdGhlIHdob2xlCisJCSAqIFVQREFURS9ERUxFVEUg YXMgcmFuZ2UgZnVuY3Rpb25zIGRvLgorCQkgKi8KKworCQl0eXBjYWNoZSA9IGZwb1N0YXRlLT5m cF9sZWZ0b3ZlcnN0eXBjYWNoZTsKKwkJaWYgKHR5cGNhY2hlID09IE5VTEwpCisJCXsKKwkJCXR5 cGNhY2hlID0gbG9va3VwX3R5cGVfY2FjaGUoZm9yUG9ydGlvbk9mLT5yYW5nZVR5cGUsCisJCQkJ CQkJCQkJIFRZUEVDQUNIRV9FUV9PUFJfRklORk8pOworCQkJZnBvU3RhdGUtPmZwX2xlZnRvdmVy c3R5cGNhY2hlID0gdHlwY2FjaGU7CisJCX0KKworCQlzbG90X2dldGFsbGF0dHJzKG5ld1Nsb3Qp OworCQluZXdJc051bGwgPSBuZXdTbG90LT50dHNfaXNudWxsW3JhbmdlQXR0bm8gLSAxXTsKKwkJ bmV3UmFuZ2UgPSBuZXdTbG90LT50dHNfdmFsdWVzW3JhbmdlQXR0bm8gLSAxXTsKKworCQlpZiAo IU9pZElzVmFsaWQodHlwY2FjaGUtPmVxX29wcl9maW5mby5mbl9vaWQpKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9GVU5DVElPTiksCisJCQkJCWVy cm1zZygiY291bGQgbm90IGlkZW50aWZ5IGFuIGVxdWFsaXR5IG9wZXJhdG9yIGZvciB0eXBlICVz IiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKGZvclBvcnRpb25PZi0+cmFuZ2VUeXBlKSkpOwor CisJCWlmIChuZXdJc051bGwgIT0gZnBvU3RhdGUtPmZwX29yaWdOZXdSYW5nZUlzTnVsbCB8fAor CQkJKCFuZXdJc051bGwgJiYKKwkJCSAhRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZ0 eXBjYWNoZS0+ZXFfb3ByX2ZpbmZvLAorCQkJCQkJCQkJCQkgSW52YWxpZE9pZCwKKwkJCQkJCQkJ CQkJIG5ld1JhbmdlLAorCQkJCQkJCQkJCQkgZnBvU3RhdGUtPmZwX29yaWdOZXdSYW5nZSkpKSkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9UUklHR0VSRURfREFUQV9D SEFOR0VfVklPTEFUSU9OKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgY2hhbmdlIGNvbHVtbiBcIiVz XCIgZnJvbSBhIEJFRk9SRSB0cmlnZ2VyIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiBGT1IgUE9SVElP TiBPRiIsCisJCQkJCQkgICBmb3JQb3J0aW9uT2YtPnJhbmdlX25hbWUpKTsKIAl9CiAKIAkvKgpA QCAtMTYxNyw2ICsxNjU3LDkyIEBAIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoTW9kaWZ5VGFi bGVDb250ZXh0ICpjb250ZXh0LAogCX0KIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWNGb3JQb3J0 aW9uT2ZTYXZlUmFuZ2UKKyAqCisgKgkJQ2FwdHVyZSB0aGUgRk9SIFBPUlRJT04gT0YgcmFuZ2Ug Y29sdW1uIHZhbHVlIGZyb20gdGhlIG5ldyB0dXBsZQorICoJCXNsb3QganVzdCBiZWZvcmUgQkVG T1JFIFVQREFURSB0cmlnZ2VycyBydW4uIEV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMKKyAqCQls YXRlciBjb21wYXJlcyB0aGUgc2F2ZWQgdmFsdWUgd2l0aCB0aGUgcG9zdC10cmlnZ2VyIHZhbHVl IHRvIGRldGVjdAorICoJCXdoZXRoZXIgYSB0cmlnZ2VyIGNoYW5nZWQgdGhlIHJhbmdlIGNvbHVt biwgd2hpY2ggaXMgbm90IGFsbG93ZWQuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitF eGVjRm9yUG9ydGlvbk9mU2F2ZVJhbmdlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKKwkJ CQkJCSAgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJCSAgVHVwbGVUYWJsZVNs b3QgKnNsb3QpCit7CisJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGNvbnRleHQtPm10c3Rh dGU7CisJTW9kaWZ5VGFibGUgKm5vZGUgPSAoTW9kaWZ5VGFibGUgKikgbXRzdGF0ZS0+cHMucGxh bjsKKwlGb3JQb3J0aW9uT2ZFeHByICpmb3JQb3J0aW9uT2YgPSAoRm9yUG9ydGlvbk9mRXhwciAq KSBub2RlLT5mb3JQb3J0aW9uT2Y7CisJRm9yUG9ydGlvbk9mU3RhdGUgKmZwb1N0YXRlOworCUF0 dHJOdW1iZXIJcmFuZ2VBdHRubzsKKwlUdXBsZUNvbnZlcnNpb25NYXAgKm1hcCA9IE5VTEw7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyoKKwkgKiBMYXppbHkgaW5pdGlhbGl6ZSB0 aGUgcGFydGl0aW9uIGNoaWxkJ3MgRm9yUG9ydGlvbk9mU3RhdGUsIG1pcnJvcmluZworCSAqIEV4 ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMgc28gdGhlIHNhdmVkIHZhbHVlIGxpdmVzIG9uIHRoZSBz YW1lIHN0cnVjdAorCSAqIHRoZSBjaGVjayB3aWxsIHJlYWQgZnJvbS4KKwkgKi8KKwlpZiAoIXJl c3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZikKKwl7CisJCUZvclBvcnRpb25PZlN0YXRlICps ZWFmU3RhdGUgPSBtYWtlTm9kZShGb3JQb3J0aW9uT2ZTdGF0ZSk7CisJCUZvclBvcnRpb25PZlN0 YXRlICpyb290RnBvU3RhdGU7CisKKwkJaWYgKCFtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbykK KwkJCWVsb2coRVJST1IsICJubyByb290IHJlbGF0aW9uIGJ1dCByaV9mb3JQb3J0aW9uT2YgaXMg dW5pbml0aWFsaXplZCIpOworCQlyb290RnBvU3RhdGUgPSBtdHN0YXRlLT5yb290UmVzdWx0UmVs SW5mby0+cmlfZm9yUG9ydGlvbk9mOworCQlBc3NlcnQocm9vdEZwb1N0YXRlKTsKKworCQlsZWFm U3RhdGUtPmZwX3JhbmdlTmFtZSA9IHJvb3RGcG9TdGF0ZS0+ZnBfcmFuZ2VOYW1lOworCQlsZWFm U3RhdGUtPmZwX3JhbmdlVHlwZSA9IHJvb3RGcG9TdGF0ZS0+ZnBfcmFuZ2VUeXBlOworCQlsZWFm U3RhdGUtPmZwX3JhbmdlQXR0bm8gPSByb290RnBvU3RhdGUtPmZwX3JhbmdlQXR0bm87CisJCWxl YWZTdGF0ZS0+ZnBfdGFyZ2V0UmFuZ2UgPSByb290RnBvU3RhdGUtPmZwX3RhcmdldFJhbmdlOwor CQlsZWFmU3RhdGUtPmZwX0xlZnRvdmVyID0gcm9vdEZwb1N0YXRlLT5mcF9MZWZ0b3ZlcjsKKwkJ bGVhZlN0YXRlLT5mcF9FeGlzdGluZyA9CisJCQl0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJ bmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJICAmbXRzdGF0ZS0+cHMuc3RhdGUtPmVzX3R1 cGxlVGFibGUpOworCisJCXJlc3VsdFJlbEluZm8tPnJpX2ZvclBvcnRpb25PZiA9IGxlYWZTdGF0 ZTsKKwl9CisJZnBvU3RhdGUgPSByZXN1bHRSZWxJbmZvLT5yaV9mb3JQb3J0aW9uT2Y7CisKKwly YW5nZUF0dG5vID0gZm9yUG9ydGlvbk9mLT5yYW5nZVZhci0+dmFyYXR0bm87CisJaWYgKHJlc3Vs dFJlbEluZm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvKQorCQltYXAgPSBFeGVjR2V0Q2hpbGRUb1Jv b3RNYXAocmVzdWx0UmVsSW5mbyk7CisJaWYgKG1hcCAhPSBOVUxMKQorCQlyYW5nZUF0dG5vID0g bWFwLT5hdHRyTWFwLT5hdHRudW1zW3JhbmdlQXR0bm8gLSAxXTsKKworCXNsb3RfZ2V0YWxsYXR0 cnMoc2xvdCk7CisKKwkvKiBSZWxlYXNlIGFueSB2YWx1ZSBzYXZlZCBmcm9tIGEgcHJpb3Igcm93 LiAqLworCWlmIChmcG9TdGF0ZS0+ZnBfb3JpZ05ld1JhbmdlVmFsaWQpCisJeworCQlmcG9TdGF0 ZS0+ZnBfb3JpZ05ld1JhbmdlVmFsaWQgPSBmYWxzZTsKKwkJaWYgKCFmcG9TdGF0ZS0+ZnBfb3Jp Z05ld1JhbmdlSXNOdWxsKQorCQkJcGZyZWUoRGF0dW1HZXRQb2ludGVyKGZwb1N0YXRlLT5mcF9v cmlnTmV3UmFuZ2UpKTsKKwl9CisKKwlpZiAoc2xvdC0+dHRzX2lzbnVsbFtyYW5nZUF0dG5vIC0g MV0pCisJeworCQlmcG9TdGF0ZS0+ZnBfb3JpZ05ld1JhbmdlID0gKERhdHVtKSAwOworCQlmcG9T dGF0ZS0+ZnBfb3JpZ05ld1JhbmdlSXNOdWxsID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJLyoK KwkJICogTWFrZSBzdXJlIHdlIGNvcHkgZXZlcnl0aGluZyBmb3IgcGFzcy1ieS1yZWZlcmVuY2Ug dHlwZXMKKwkJICogKGxpa2UgcmFuZ2UgYW5kIG11bHRpcmFuZ2UpLgorCQkgKi8KKwkJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhtdHN0YXRlLT5wcy5zdGF0ZS0+ZXNfcXVlcnlf Y3h0KTsKKwkJZnBvU3RhdGUtPmZwX29yaWdOZXdSYW5nZSA9IGRhdHVtQ29weShzbG90LT50dHNf dmFsdWVzW3JhbmdlQXR0bm8gLSAxXSwKKwkJCQkJCQkJCQkJICBmYWxzZSwgLTEpOworCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCWZwb1N0YXRlLT5mcF9vcmlnTmV3UmFu Z2VJc051bGwgPSBmYWxzZTsKKwl9CisJZnBvU3RhdGUtPmZwX29yaWdOZXdSYW5nZVZhbGlkID0g dHJ1ZTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNCYXRjaEluc2VydAogICoKQEAgLTE4MTAs NyArMTkzNiw4IEBAIEV4ZWNEZWxldGVFcGlsb2d1ZShNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRl eHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAKIAkvKiBDb21wdXRlIHRlbXBvcmFs IGxlZnRvdmVycyBpbiBGT1IgUE9SVElPTiBPRiAqLwogCWlmICgoKE1vZGlmeVRhYmxlICopIGNv bnRleHQtPm10c3RhdGUtPnBzLnBsYW4pLT5mb3JQb3J0aW9uT2YpCi0JCUV4ZWNGb3JQb3J0aW9u T2ZMZWZ0b3ZlcnMoY29udGV4dCwgZXN0YXRlLCByZXN1bHRSZWxJbmZvLCB0dXBsZWlkKTsKKwkJ RXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhjb250ZXh0LCBlc3RhdGUsIHJlc3VsdFJlbEluZm8s IHR1cGxlaWQsCisJCQkJCQkJCSAgTlVMTCk7CiAKIAkvKiBBRlRFUiBST1cgREVMRVRFIFRyaWdn ZXJzICovCiAJRXhlY0FSRGVsZXRlVHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLCB0dXBs ZWlkLCBvbGR0dXBsZSwKQEAgLTIzOTAsNiArMjUxNywxMyBAQCBFeGVjVXBkYXRlUHJvbG9ndWUo TW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZv LAogCQlpZiAoY29udGV4dC0+ZXN0YXRlLT5lc19pbnNlcnRfcGVuZGluZ19yZXN1bHRfcmVsYXRp b25zICE9IE5JTCkKIAkJCUV4ZWNQZW5kaW5nSW5zZXJ0cyhjb250ZXh0LT5lc3RhdGUpOwogCisJ CS8qCisJCSAqIEZvciBGT1IgUE9SVElPTiBPRiwgcmVtZW1iZXIgdGhlIHJhbmdlIGNvbHVtbiB2 YWx1ZSBzbyB3ZSBjYW4KKwkJICogbGF0ZXIgZGV0ZWN0IHdoZXRoZXIgYSBCRUZPUkUgdHJpZ2dl ciBjaGFuZ2VkIGl0LgorCQkgKi8KKwkJaWYgKCgoTW9kaWZ5VGFibGUgKikgY29udGV4dC0+bXRz dGF0ZS0+cHMucGxhbiktPmZvclBvcnRpb25PZikKKwkJCUV4ZWNGb3JQb3J0aW9uT2ZTYXZlUmFu Z2UoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgc2xvdCk7CisKIAkJcmV0dXJuIEV4ZWNCUlVwZGF0 ZVRyaWdnZXJzKGNvbnRleHQtPmVzdGF0ZSwgY29udGV4dC0+ZXBxc3RhdGUsCiAJCQkJCQkJCQly ZXN1bHRSZWxJbmZvLCB0dXBsZWlkLCBvbGR0dXBsZSwgc2xvdCwKIAkJCQkJCQkJCXJlc3VsdCwg JmNvbnRleHQtPnRtZmQsCkBAIC0yNjE1LDcgKzI3NDksOCBAQCBFeGVjVXBkYXRlRXBpbG9ndWUo TW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQsCiAK IAkvKiBDb21wdXRlIHRlbXBvcmFsIGxlZnRvdmVycyBpbiBGT1IgUE9SVElPTiBPRiAqLwogCWlm ICgoKE1vZGlmeVRhYmxlICopIGNvbnRleHQtPm10c3RhdGUtPnBzLnBsYW4pLT5mb3JQb3J0aW9u T2YpCi0JCUV4ZWNGb3JQb3J0aW9uT2ZMZWZ0b3ZlcnMoY29udGV4dCwgY29udGV4dC0+ZXN0YXRl LCByZXN1bHRSZWxJbmZvLCB0dXBsZWlkKTsKKwkJRXhlY0ZvclBvcnRpb25PZkxlZnRvdmVycyhj b250ZXh0LCBjb250ZXh0LT5lc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCSAgdHVwbGVp ZCwgc2xvdCk7CiAKIAkvKiBBRlRFUiBST1cgVVBEQVRFIFRyaWdnZXJzICovCiAJRXhlY0FSVXBk YXRlVHJpZ2dlcnMoY29udGV4dC0+ZXN0YXRlLCByZXN1bHRSZWxJbmZvLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaAppbmRleCAxMzM1OTE4MGQyNS4uZWZjZDUyNDExYWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CkBAIC00ODMsNiArNDgzLDExIEBAIHR5cGVkZWYgc3RydWN0IEZvclBvcnRpb25PZlN0YXRlCiAJ VHlwZUNhY2hlRW50cnkgKmZwX2xlZnRvdmVyc3R5cGNhY2hlOwkvKiB0eXBlIGNhY2hlIGVudHJ5 IG9mIHRoZSByYW5nZSAqLwogCVR1cGxlVGFibGVTbG90ICpmcF9FeGlzdGluZzsJLyogc2xvdCB0 byBzdG9yZSBvbGQgdHVwbGUgKi8KIAlUdXBsZVRhYmxlU2xvdCAqZnBfTGVmdG92ZXI7CS8qIHNs b3QgdG8gc3RvcmUgbGVmdG92ZXIgKi8KKwlEYXR1bQkJZnBfb3JpZ05ld1JhbmdlOwkvKiByYW5n ZSBjb2x1bW4gdmFsdWUgY2FwdHVyZWQganVzdCBiZWZvcmUKKwkJCQkJCQkJCSAqIEJFRk9SRSBV UERBVEUgdHJpZ2dlcnMgZmlyZSwgc28gd2UgY2FuCisJCQkJCQkJCQkgKiBkZXRlY3Qgd2hldGhl ciB0aGV5IGNoYW5nZWQgaXQgKi8KKwlib29sCQlmcF9vcmlnTmV3UmFuZ2VJc051bGw7CisJYm9v bAkJZnBfb3JpZ05ld1JhbmdlVmFsaWQ7CS8qIGlzIGZwX29yaWdOZXdSYW5nZSBtZWFuaW5nZnVs PyAqLwogfSBGb3JQb3J0aW9uT2ZTdGF0ZTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQKaW5kZXggMzFmNzcyYzcyM2QuLmY5YjljMWQwZDZkIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dApAQCAtMTc5 Myw2ICsxNzkzLDI2IEBAIFNFTEVDVCAqIEZST00gZm9yX3BvcnRpb25fb2ZfdGVzdCBXSEVSRSBp ZCA9ICdbNCw1KScgT1JERVIgQlkgaWQsIHZhbGlkX2F0OwogKDMgcm93cykKIAogRFJPUCBUUklH R0VSIGZwb19hZnRlcl9kZWxldGVfcm93IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3Q7CistLSBBIEJF Rk9SRSBVUERBVEUgdHJpZ2dlciB0aGF0IGNoYW5nZXMgdGhlIGFwcGxpY2F0aW9uLXRpbWUgY29s dW1uIG11c3QKKy0tIHJhaXNlIGFuIGVycm9yLCBqdXN0IGFzIGFuIGV4cGxpY2l0IFNFVCBvbiB0 aGF0IGNvbHVtbiBkb2VzLgorQ1JFQVRFIEZVTkNUSU9OIHRyZ19mcG9fY2hhbmdlX3ZhbGlkX2F0 KCkKK1JFVFVSTlMgVFJJR0dFUiBMQU5HVUFHRSBwbHBnc3FsIEFTCiskJAorQkVHSU4KKyAgTkVX LnZhbGlkX2F0ID0gZGF0ZXJhbmdlKCcyMDE4LTAxLTAxJywgJzIwMTktMDEtMDEnKTsKKyAgUkVU VVJOIE5FVzsKK0VORDsKKyQkOworQ1JFQVRFIFRSSUdHRVIgZnBvX2JlZm9yZV91cGRhdGVfcm93 CisgIEJFRk9SRSBVUERBVEUgT04gZm9yX3BvcnRpb25fb2ZfdGVzdAorICBGT1IgRUFDSCBST1cg RVhFQ1VURSBQUk9DRURVUkUgdHJnX2Zwb19jaGFuZ2VfdmFsaWRfYXQoKTsKK1VQREFURSBmb3Jf cG9ydGlvbl9vZl90ZXN0CisgIEZPUiBQT1JUSU9OIE9GIHZhbGlkX2F0IEZST00gJzIwMTgtMDUt MDEnIFRPICcyMDE4LTA2LTAxJworICBTRVQgbmFtZSA9IENPTkNBVChuYW1lLCAnIScpCisgIFdI RVJFIGlkID0gJ1sxLDIpJzsKK0VSUk9SOiAgY2Fubm90IGNoYW5nZSBjb2x1bW4gInZhbGlkX2F0 IiBmcm9tIGEgQkVGT1JFIHRyaWdnZXIgYmVjYXVzZSBpdCBpcyB1c2VkIGluIEZPUiBQT1JUSU9O IE9GCitEUk9QIFRSSUdHRVIgZnBvX2JlZm9yZV91cGRhdGVfcm93IE9OIGZvcl9wb3J0aW9uX29m X3Rlc3Q7CitEUk9QIEZVTkNUSU9OIHRyZ19mcG9fY2hhbmdlX3ZhbGlkX2F0KCk7CiAtLSBUZXN0 IHdpdGggbXVsdGlyYW5nZXMKIENSRUFURSBUQUJMRSBmb3JfcG9ydGlvbl9vZl90ZXN0MiAoCiAg IGlkIGludDRyYW5nZSBOT1QgTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2Zvcl9wb3J0aW9uX29mLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29m LnNxbAppbmRleCBkNDA2MmFjZjFkMS4uMzliYjE3YTk0MDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9mb3JfcG9ydGlvbl9vZi5zcWwKQEAgLTExNjksNiArMTE2OSwzMCBAQCBTRUxFQ1QgKiBGUk9N IGZvcl9wb3J0aW9uX29mX3Rlc3QgV0hFUkUgaWQgPSAnWzQsNSknIE9SREVSIEJZIGlkLCB2YWxp ZF9hdDsKIAogRFJPUCBUUklHR0VSIGZwb19hZnRlcl9kZWxldGVfcm93IE9OIGZvcl9wb3J0aW9u X29mX3Rlc3Q7CiAKKy0tIEEgQkVGT1JFIFVQREFURSB0cmlnZ2VyIHRoYXQgY2hhbmdlcyB0aGUg YXBwbGljYXRpb24tdGltZSBjb2x1bW4gbXVzdAorLS0gcmFpc2UgYW4gZXJyb3IsIGp1c3QgYXMg YW4gZXhwbGljaXQgU0VUIG9uIHRoYXQgY29sdW1uIGRvZXMuCisKK0NSRUFURSBGVU5DVElPTiB0 cmdfZnBvX2NoYW5nZV92YWxpZF9hdCgpCitSRVRVUk5TIFRSSUdHRVIgTEFOR1VBR0UgcGxwZ3Nx bCBBUworJCQKK0JFR0lOCisgIE5FVy52YWxpZF9hdCA9IGRhdGVyYW5nZSgnMjAxOC0wMS0wMScs ICcyMDE5LTAxLTAxJyk7CisgIFJFVFVSTiBORVc7CitFTkQ7CiskJDsKKworQ1JFQVRFIFRSSUdH RVIgZnBvX2JlZm9yZV91cGRhdGVfcm93CisgIEJFRk9SRSBVUERBVEUgT04gZm9yX3BvcnRpb25f b2ZfdGVzdAorICBGT1IgRUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgdHJnX2Zwb19jaGFuZ2Vf dmFsaWRfYXQoKTsKKworVVBEQVRFIGZvcl9wb3J0aW9uX29mX3Rlc3QKKyAgRk9SIFBPUlRJT04g T0YgdmFsaWRfYXQgRlJPTSAnMjAxOC0wNS0wMScgVE8gJzIwMTgtMDYtMDEnCisgIFNFVCBuYW1l ID0gQ09OQ0FUKG5hbWUsICchJykKKyAgV0hFUkUgaWQgPSAnWzEsMiknOworCitEUk9QIFRSSUdH RVIgZnBvX2JlZm9yZV91cGRhdGVfcm93IE9OIGZvcl9wb3J0aW9uX29mX3Rlc3Q7CitEUk9QIEZV TkNUSU9OIHRyZ19mcG9fY2hhbmdlX3ZhbGlkX2F0KCk7CisKIC0tIFRlc3Qgd2l0aCBtdWx0aXJh bmdlcwogCiBDUkVBVEUgVEFCTEUgZm9yX3BvcnRpb25fb2ZfdGVzdDIgKAotLSAKMi40Ny4zCgo= --0000000000005874ee064fc448b2--