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 1wAekT-000C1C-23 for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Apr 2026 02:04:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAekR-0031r0-1C for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Apr 2026 02:04:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAekQ-0031qp-37 for pgsql-hackers@lists.postgresql.org; Thu, 09 Apr 2026 02:03:59 +0000 Received: from mail-vk1-xa33.google.com ([2607:f8b0:4864:20::a33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAekO-000000005cf-3qo2 for pgsql-hackers@lists.postgresql.org; Thu, 09 Apr 2026 02:03:59 +0000 Received: by mail-vk1-xa33.google.com with SMTP id 71dfb90a1353d-56ee0e0305cso116785e0c.2 for ; Wed, 08 Apr 2026 19:03:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775700236; cv=none; d=google.com; s=arc-20240605; b=GQT1Vnb75sGIjQ8RX4sucVfjJ6OHwwTHClgoIpK+3WL515GJ9EXA+Vk94uIwJhCxhy kDJoKHfL3Bin9qVEhdPNS7ymSFzDf+VOAP3xnP1H6DJJKLJqx0DORxCUvKXEKDbBInxx tGb3VtZ11+Nsck2PFrAW3WThj0YS9uTppLaOXireTPl8egmgHgPj/PXQKl1rygGJkVV6 KG+a6m1YZcKIPkbW2CV3ORSykQhIfB9BGl8hqtH4cO4mHIYzpj7u6243m5r8kTHzwEo2 /re67WWc0CYhBH6C4vhrmnk+Sv3FDcgh8SvxJpZv+py7IbnEg1/Zw4FO4E7L8ZkGEgK9 +paA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=ZJiP+PR5gwLpW/LbyB3zueVd6rSIYPwrieDEwFOG3Ak=; fh=2dSuZaJtJpzaPaGZnvXfsRvKcqhfZTgbbBHmdlNX0vw=; b=D+8bvKT09IpQkGrsoVf4in7qB3cYuRwIxwY8vUh2mdYmPkFQS54xrwMIDdeV0mFKZH 8dIcUt9Nxama27Nkn0LcI/TjEuEk6HkvpqjnKlHDa1cWRWji4KNRQfj/LWoNgsZtxEjh A5377MNNJsmZZSgptRp2uWhJSD6xBuZdxF1BPj/stL/S3LsCVRvW6B79trhDYS2SSOSK +m4LnEmemzEvQuE5VuA4bzf4jSXgglWY5f/mpdNK6i1mboY1Jfahsbspy51LfjZk5/rg 2e9K2LpAgUBfsjeFu7eKipR4FMKf4fVgNxTcn6E/1qzTYYTcbjm6EDrbb4/4C5iFRiv4 /wHg==; 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=gmail.com; s=20251104; t=1775700236; x=1776305036; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ZJiP+PR5gwLpW/LbyB3zueVd6rSIYPwrieDEwFOG3Ak=; b=FQ4mGjh82zm6mg8Pq61ou2iitYpuiqcKMGFjjpMr/IM1baDm9FmleSr3cr+SsRUsnG 4a3cdhkdFuRPlWWk+Y0TeTb5euKjbaSBhZA1YeL8r/YlhZzGtrHC+NE769ocaYBsNcrZ 2mGnUVYy+bfvfaw8g/h3KjIxDJos3xNCa5QlXridRw+UaZe5ghfI7mwwi4AzqoBCxoi7 NbxoV3sCrkvPZebkvjJ3P6E2XmRqc5Zh++qIESyt40ZFP7jBMLLaJ/o4x4dNp2XNVFoi nP43V3wyJTPFe9mIb9z+PUktGHRuQWNGnhh3yxjW/7McGnws41N2RMDBrpi9DK8Au5Yt CFyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775700236; x=1776305036; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZJiP+PR5gwLpW/LbyB3zueVd6rSIYPwrieDEwFOG3Ak=; b=W4kp1PGXfmuN8zmsLqcX3uyva9AbVYO0gVAzydf7LOepDUKS67aMB1m6FKrGKryPp7 WtwDMNkgQDKsuXAyXNWiZ2g3TqYpak6P1owoPxAg2mps5gNDi/TtABCMAg6Zo6XQKnp1 UScwqXOsFSKby3tuBGm9codhFCnP0/4c6b1wOeBwgzhIC0s3FoEKelQrWdB7Ujgr0np0 HCtpcYI7Y7NhPlYe4RCia6b3A+UUkKopjLnnzAvt/2JBf8GobeWzgCj9q4xAvQbx3q4Q 3ki1pFsZQLdklAZfEm3ln0JJL0P8jw4M88F3tBdUgik5HnEruYax/BX29BPkKh4Bbmfq Gmxg== X-Forwarded-Encrypted: i=1; AJvYcCVDyuCbeWdS2qKT0iuTduWOAyy3RGVTeuQVoxm8vEAaofFW+J74kaKYcALt4DGNZzrQyhg44xA3KI3JX1qJ@lists.postgresql.org X-Gm-Message-State: AOJu0Yx70tu/Ga11U1YfIZxtWaTsyGOKNNZUozi5ezAg7ic5YyjDzA2E BSdW8HXdThaMBOAEuljzMPJKlppcOPjnnv6l4h4PvRaSMtIrD/Y2NBR/TG+BFIGwrfCBK6MlafE 1Tvlk7zYCBXy35E5oNw2VBgVUA0XcGLc= X-Gm-Gg: AeBDieuCBiJBSZbRaY3+EQ4r1o26jE3efhP0IrJ6BLUJFQtV5QSKrbJ9sjbM5Vao4gw PwH4SxuvO2frZQPe8qI+J1tuiL8iLIpfYB20rrnNprTvjGH1B/3rzYwBwBjxzvwha8XChZZLRye I6Qo+xFvk4BXKRuCDUYdO+XD+K63hE+WAPEtaxbKdJex2NW++0cT07JV+xdtePxC4r04+2i/wda bBp6VW+RMSEa0DAL/TGFzrZukFSgblJZ8KOb+s4zahcqGE9eTOhjXny0/zQftHcSslmg8l3GK6d 3pXVF8tSVEIlzNnwGg== X-Received: by 2002:a05:6122:8b0a:b0:56c:da4f:6e79 with SMTP id 71dfb90a1353d-56daba46d95mr9811600e0c.15.1775700236242; Wed, 08 Apr 2026 19:03:56 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Wed, 8 Apr 2026 19:03:31 -0700 X-Gm-Features: AQROBzCwlSoOtiuNa1sZZpDMIdEpIBS2kPIIx7Bk7Cc56LKifWORUh71-Iw5EzE Message-ID: Subject: Bug: WAIT FOR LSN crashes with assertion failure inside PL/pgSQL DO blocks and procedures To: Alexander Korotkov , PostgreSQL Hackers , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000cf2e70064efd6d31" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cf2e70064efd6d31 Content-Type: multipart/alternative; boundary="000000000000cf2e6f064efd6d2f" --000000000000cf2e6f064efd6d2f Content-Type: text/plain; charset="UTF-8" Hi hackers, Alexander, An assertion failure (server crash in assert-enabled builds) occurs when WAIT FOR LSN ... INTO is used inside PL/pgSQL DO blocks or within void procedures. Repro: -- Run this on a standby CREATE PROCEDURE test_wait() LANGUAGE plpgsql AS $$ DECLARE result text; BEGIN WAIT FOR LSN '0/1234' INTO result; RAISE NOTICE '%', result; END; $$; CALL test_wait(); The WAIT FOR itself succeeds, but the very next PL/pgSQL statement that requires a snapshot crashes the backend with: TRAP: failed Assert("portal->portalSnapshot == NULL"), File: "pquery.c", Line: 1776 Attached patches for both the test case and a potential fix. Please review. Thanks, Satya --000000000000cf2e6f064efd6d2f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers, Alexander,

An assertion fai= lure (server crash in assert-enabled builds) occurs when WAIT FOR LSN ... I= NTO is used inside PL/pgSQL DO blocks or within void procedures.
=
Repro:

-- Run this on a standby

CREATE PROCEDURE test_wait()
=C2=A0 LANGUAGE plpgs= ql AS $$
=C2=A0 DECLARE
=C2=A0 =C2=A0 result text;
=C2=A0 BEGIN=C2=A0 =C2=A0 WAIT FOR LSN '0/1234' INTO result;
=C2=A0 =C2=A0 = RAISE NOTICE '%', result;
=C2=A0 END;
=C2=A0 $$;
=C2=A0 CA= LL test_wait();


The WAIT FOR itself= succeeds, but the very next PL/pgSQL statement that requires a snapshot cr= ashes the backend with:

=C2=A0 TRAP: failed Assert("portal->= portalSnapshot =3D=3D NULL"),
=C2=A0 File: "pquery.c", Li= ne: 1776

Attached patches for both the test case and a po= tential fix. Please review.

Thanks,
Saty= a

--000000000000cf2e6f064efd6d2f-- --000000000000cf2e70064efd6d31 Content-Type: application/octet-stream; name="0002-Add-regression-tests-for-WAIT-FOR-LSN-inside-PL-pgSQ.patch" Content-Disposition: attachment; filename="0002-Add-regression-tests-for-WAIT-FOR-LSN-inside-PL-pgSQ.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqtze761 RnJvbSBkODJjMGYwZDIwNzUzN2RlZmFkYzI1ZThlZjhmNjljZDNkYzI4YjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBUaHUsIDkgQXByIDIwMjYgMDA6NTA6NDMgKzAwMDAKU3ViamVjdDogW1BB VENIIHYxIDIvMl0gQWRkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFdBSVQgRk9SIExTTiBpbnNpZGUg UEwvcGdTUUwKCkFkZCB0ZXN0IHNlY3Rpb24gN2YgdG8gMDQ5X3dhaXRfZm9yX2xzbi5wbCBjb3Zl cmluZyBXQUlUIEZPUiBMU04gLi4uCklOVE8gaW5zaWRlIFBML3BnU1FMIERPIGJsb2NrcyBhbmQg cHJvY2VkdXJlcy4KCi0tLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDlfd2FpdF9mb3JfbHNuLnBs IHwgMzUgKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDM1IGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA0OV93YWl0X2Zvcl9s c24ucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA0OV93YWl0X2Zvcl9sc24ucGwKaW5kZXggYmY2 MWI4YzQuLjExZDM2MTFkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA0OV93YWl0 X2Zvcl9sc24ucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDlfd2FpdF9mb3JfbHNuLnBs CkBAIC01ODcsNiArNTg3LDQxIEBAICRvdXRwdXQgPSAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKIG9rKCRvdXRwdXQgPj0gMCwKIAkibXVsdGlwbGUgcHJpbWFyeV9mbHVzaCB3 YWl0ZXJzOiBwcmltYXJ5IGZsdXNoZWQgV0FMIHVwIHRvIHRhcmdldCBMU04iKTsKIAorIyBVc2Ug YW4gYWxyZWFkeS1yZXBsYXllZCBMU04gc28gdGhlIFdBSVQgcmV0dXJucyBpbW1lZGlhdGVseSBv biBzdGFuZGJ5LgorbXkgJHdhaXRfaW50b19sc24gPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xhc3Rfd2FsX3JlcGxheV9sc24oKSIpOworCisjIDdm LiBUZXN0IERPIGJsb2NrIHdpdGggV0FJVCBGT1IgSU5UTyBmb2xsb3dlZCBieSBSQUlTRSBOT1RJ Q0Ugb24gc3RhbmRieS4KKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBx cVsKKwlETyBcJFwkCisJREVDTEFSRQorCSAgcmVzdWx0IHRleHQ7CisJQkVHSU4KKwkgIFdBSVQg Rk9SIExTTiAnJHt3YWl0X2ludG9fbHNufScgSU5UTyByZXN1bHQ7CisJICBSQUlTRSBOT1RJQ0Ug J2dvdDogJScsIHJlc3VsdDsKKwlFTkQ7CisJXCRcJDtdKTsKK29rKDEsICJXQUlUIEZPUiBJTlRP IGluIERPIGJsb2NrIGRvZXMgbm90IGNyYXNoIG9uIHN0YW5kYnkiKTsKKworIyBUZXN0IHZvaWQg cHJvY2VkdXJlIHdpdGggV0FJVCBGT1IgSU5UTyBmb2xsb3dlZCBieSBSQUlTRSBvbiBzdGFuZGJ5 LgorJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCUNSRUFURSBQ Uk9DRURVUkUgdGVzdF93YWl0X2ludG9fcmFpc2UoKQorCUxBTkdVQUdFIHBscGdzcWwgQVMgXCRc JAorCURFQ0xBUkUKKwkgIHJlc3VsdCB0ZXh0OworCUJFR0lOCisJICBXQUlUIEZPUiBMU04gJyR7 d2FpdF9pbnRvX2xzbn0nIElOVE8gcmVzdWx0OworCSAgUkFJU0UgTk9USUNFICd3YWl0IHJlc3Vs dDogJScsIHJlc3VsdDsKKwlFTkQ7CisJXCRcJDtdKTsKKyRub2RlX3ByaW1hcnktPndhaXRfZm9y X2NhdGNodXAoJG5vZGVfc3RhbmRieSk7CisKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDQUxMIHRlc3Rfd2FpdF9pbnRvX3JhaXNlKCkiKTsKK29rKDEsICJXQUlUIEZP UiBJTlRPIGluIHZvaWQgcHJvY2VkdXJlIGRvZXMgbm90IGNyYXNoIG9uIHN0YW5kYnkiKTsKKwog IyA4LiBDaGVjayB0aGF0IHRoZSBzdGFuZGJ5IHByb21vdGlvbiB0ZXJtaW5hdGVzIGFsbCBzdGFu ZGJ5IHdhaXQgbW9kZXMuICBTdGFydAogIyB3YWl0aW5nIGZvciB1bnJlYWNoYWJsZSBMU05zIHdp dGggc3RhbmRieV9yZXBsYXksIHN0YW5kYnlfd3JpdGUsIGFuZAogIyBzdGFuZGJ5X2ZsdXNoIG1v ZGVzLCB0aGVuIHByb21vdGUuICBDaGVjayB0aGUgbG9nIGZvciB0aGUgcmVsZXZhbnQgZXJyb3IK LS0gCjIuNDMuMAoK --000000000000cf2e70064efd6d31 Content-Type: application/octet-stream; name="0001-Fix-assertion-failure-in-WAIT-FOR-LSN-when-used-insi.patch" Content-Disposition: attachment; filename="0001-Fix-assertion-failure-in-WAIT-FOR-LSN-when-used-insi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqtze6z0 RnJvbSAxNmFjZTYwZjgyMDYyZjBmMTNmYzE4MTQwODViMDQ1YWVkZDZmMjAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBUaHUsIDkgQXByIDIwMjYgMDA6NTA6MjAgKzAwMDAKU3ViamVjdDogW1BB VENIIHYxIDEvMl0gRml4IGFzc2VydGlvbiBmYWlsdXJlIGluIFdBSVQgRk9SIExTTiB3aGVuIHVz ZWQgaW5zaWRlCiBQTC9wZ1NRTAoKV0FJVCBGT1IgTFNOIC4uLiBJTlRPIGluc2lkZSBhIERPIGJs b2NrIGNyYXNoZWQgd2l0aCBhbiBhc3NlcnRpb24gZmFpbHVyZSBpbiAKRW5zdXJlUG9ydGFsU25h cHNob3RFeGlzdHMoKToKCiAgVFJBUDogZmFpbGVkIEFzc2VydCgicG9ydGFsLT5wb3J0YWxTbmFw c2hvdCA9PSBOVUxMIiksCiAgRmlsZTogInBxdWVyeS5jIiwgTGluZTogMTc3NgoKVGhlIHJvb3Qg Y2F1c2Ugd2FzIHRoYXQgRXhlY1dhaXRTdG10KCkgY2FsbGVkIFBvcEFjdGl2ZVNuYXBzaG90KCkg dG8KcmVsZWFzZSB0aGUgc25hcHNob3QgYmVmb3JlIHdhaXRpbmcsIGJ1dCBkaWQgbm90IGNsZWFy IHRoZSBhY3RpdmUKcG9ydGFsJ3MgcG9ydGFsU25hcHNob3QgcG9pbnRlci4gIFdoZW4gdGhlIG5l eHQgUEwvcGdTUUwgc3RhdGVtZW50CnJlcXVpcmluZyBhIHNuYXBzaG90IGNhbGxlZCBFbnN1cmVQ b3J0YWxTbmFwc2hvdEV4aXN0cygpLCBpdCBmb3VuZAphIHN0YWxlIG5vbi1OVUxMIHBvcnRhbFNu YXBzaG90IGFuZCBoaXQgdGhlIGFzc2VydGlvbi4KClBvcnRhbFJ1blV0aWxpdHkoKSBub3JtYWxs eSBoYW5kbGVzIHRoaXMgY2xlYW51cCBpbiB0aGUgdG9wLWxldmVsCmV4ZWN1dGlvbiBwYXRoLCBi dXQgd2hlbiBXQUlUIEZPUiBydW5zIHRocm91Z2ggU1BJIChQTC9wZ1NRTCksClByb2Nlc3NVdGls aXR5IGlzIGNhbGxlZCBkaXJlY3RseSB3aXRob3V0IHRoZSBQb3J0YWxSdW5VdGlsaXR5CndyYXBw ZXIsIHNvIHRoZSBwb3J0YWxTbmFwc2hvdCB3YXMgbmV2ZXIgY2xlYXJlZC4KCkZpeCBieSBjbGVh cmluZyBBY3RpdmVQb3J0YWwtPnBvcnRhbFNuYXBzaG90IGFmdGVyIFBvcEFjdGl2ZVNuYXBzaG90 KCkKaW4gRXhlY1dhaXRTdG10KCksIG1hdGNoaW5nIHdoYXQgUG9ydGFsUnVuVXRpbGl0eSgpIGRv ZXMuCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYyB8IDExICsrKysrKysrKysrCiAx IGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3dhaXQuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwppbmRleCA4NWZj ZDQ2My4uOGQyNDVkYmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs dWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1 ZGUgInV0aWxzL3BnX2xzbi5oIgpAQCAtMTQ2LDEwICsxNDcsMjAgQEAgRXhlY1dhaXRTdG10KFBh cnNlU3RhdGUgKnBzdGF0ZSwgV2FpdFN0bXQgKnN0bXQsIERlc3RSZWNlaXZlciAqZGVzdCkKIAkg KiBQbGFubmVkU3RtdFJlcXVpcmVzU25hcHNob3QoKSwgZXZlbiBpbiBhbiBhdG9taWMgY29udGV4 dCwgQ2FsbFN0bXQgaXMKIAkgKiBwcm9jZXNzZWQgd2l0aCBhIHNuYXBzaG90LiAgVGhhbmtmdWxs eSwgd2UgY2FuIHBvcCB0aGlzIHNuYXBzaG90LAogCSAqIGJlY2F1c2UgUG9ydGFsUnVuVXRpbGl0 eSgpIGNhbiB0b2xlcmF0ZSB0aGlzLgorCSAqCisJICogV2hlbiBydW5uaW5nIGluc2lkZSBQTC9w Z1NRTCwgdGhlIGFjdGl2ZQorCSAqIHBvcnRhbCBtYXkgaG9sZCBhIHBvaW50ZXIgdG8gdGhpcyBz bmFwc2hvdCBpbiBwb3J0YWxTbmFwc2hvdC4gIFdlIG11c3QKKwkgKiBjbGVhciBpdCBzbyB0aGF0 IEVuc3VyZVBvcnRhbFNuYXBzaG90RXhpc3RzKCkgZG9lc24ndCB0cmlwIGFuIGFzc2VydGlvbgor CSAqIHdoZW4gdGhlIG5leHQgUEwvcGdTUUwgc3RhdGVtZW50IHRyaWVzIHRvIHJlLWVzdGFibGlz aCBhIHNuYXBzaG90LgogCSAqLwogCWlmIChBY3RpdmVTbmFwc2hvdFNldCgpKQorCXsKIAkJUG9w QWN0aXZlU25hcHNob3QoKTsKIAorCQlpZiAoQWN0aXZlUG9ydGFsICYmIEFjdGl2ZVBvcnRhbC0+ cG9ydGFsU25hcHNob3QgIT0gTlVMTCkKKwkJCUFjdGl2ZVBvcnRhbC0+cG9ydGFsU25hcHNob3Qg PSBOVUxMOworCX0KKwogCS8qCiAJICogQXQgc2Vjb25kLCBpbnZhbGlkYXRlIGEgY2F0YWxvZyBz bmFwc2hvdCBpZiBhbnkuICBBbmQgd2Ugc2hvdWxkIGJlIGRvbmUKIAkgKiB3aXRoIHRoZSBwcmVw YXJhdGlvbi4KLS0gCjIuNDMuMAoK --000000000000cf2e70064efd6d31--