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 1wPfrI-000wTa-0i for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 12:17:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wPfrG-007ZLW-0V for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 12:17:07 +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 1wPfrF-007ZLI-2O for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 12:17:06 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wPfrD-00000000U9O-3caP for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 12:17:05 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-67e24b8ef55so8063385a12.1 for ; Wed, 20 May 2026 05:17:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779279422; cv=none; d=google.com; s=arc-20240605; b=OxK00PJnYloe+tBi7qI3LrNw9jB+14za+zjIoIMuorfZQM28728k6MMT6NW2A+i1cM rglCLL8REvnJrhsVIwGy/QPiNOL1rjSKIh5XngCQta15MxETlvZzhjN8pRcXTq0sCCs1 wfBz2NLRpO3wxSgXD5FUO0HuTEUlHPbdgtvMELcSgjh5sGLoiGeJ+xVjqSNsy9U1TjzX zGCs8nY4hQUo1vMftPI+SZnAl3Ut24Q/m0OXpjXsJmQx6xoW2APnNIePLQv8jqjlrlo6 emg7OOCzUlF/hh3Aivf0bWA3DzJuvpMXUYz3dRJXMTnm3n6ej11fQqnCk7R83iItF/mu Jckg== 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=tBvXPuVq5/5qrYgdCLdmtNi3gFFBO8EqGxLpMfEFZw0=; fh=EmVy6xj7C0NJyxNevFBudJ6C2y07QhlGT5OU6sJ8gRk=; b=NE/MqROoFsNg5hvtJJdhSD01fN4vpn0wfvOrDMVnLhQu7Xfs9rjFT5+GeWlgz6d1qB NemHgl1/j4SuxPGgQeMhDxNqcGAxxi+yWfWIa56F8XMotXSyWboUWgOBg82lY7M4Ca47 RG6CNIStaLhhVrtZUFiNCCGxBZnWQNdB+PvV1YTo/qDUE7pkeoJyWoh63BeTLPbdcrK5 Zv779JjkK4Q0muhC5mFeKavtMbwTsyKsv/j0kLbIxcAh1xSdcXMge7szeZTA6YJ3+gYS l2HSyq0KyUsDriG5tM8YMmNoL4iSW2aNYZa2p6GTqFrWGwpl0ZbKQUaj8LW8a7m0wLCE F0UA==; 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=1779279422; x=1779884222; 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=tBvXPuVq5/5qrYgdCLdmtNi3gFFBO8EqGxLpMfEFZw0=; b=C3mhX5UtzY2rPEr42X4qwwlg+B0S46Y9JM50bsqUrt0AyrecLoSxrmhs2HWEssP7se 2QCKU+Ri6zB+pYzYtdyNfd1NklNF58C7+eQDBgobANzjtTV+0qIBXItcfYUmoTW4oNLf xPOzccv1wDYVZ2LGdJ/ARt4qD8eQztuvgJyiygKf28GSezOXQ3uHjJ7xQUC2SmAGeTqk UD3ClEWOas8zWCrGkdETm5BGMjtVPZNjqXRawyLMciKCxhiBcJulk1XNusI6er27uAG5 rjGHkJQF/YtiOp5UdW15KmuTK+LibER2Pedlul7iXVeCf/QiHJUxeXZpCLvGIltzOt4F akIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779279422; x=1779884222; 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=tBvXPuVq5/5qrYgdCLdmtNi3gFFBO8EqGxLpMfEFZw0=; b=gcxAdQV8ujnXBwkIOx3Zf+k1K6deQ1JSLvBcNT5IKE8hsZBYFq9TPW6tU3Vqczb9nz kwAr4y5F+IPIeddwdkSDGaGLYgC7fiknhCo1QZWff8bxpGBaFKxgMH6APOVoT4wtpeis UcS33C7IhX5GbxCFt960i6LXg1ZhlWz9Fs6BeoCE5rXe/fW1bWyJzy731scKJa9jSR+5 MnfOCslJxZ6JEuG0jMcXwzvNexeFRlGIlQbJ0qAnH1qqxnNuPQUs/sBf6ZXsLtCvgQhr B6O0IOTghKiTMhgXj/AxmIsIj8nQE5r1RjcaCDTDupMUh2flsDQ8gBb/Rtvv7PKduGZX Pb4Q== X-Forwarded-Encrypted: i=1; AFNElJ83QAv3B7RNvQKIzrr7GTcd5pHOymGefbY5l/hE4XbeLKR0594Oi2BXx9lmia81slzGxChQFcUWeCkZcCMd@lists.postgresql.org X-Gm-Message-State: AOJu0YxTMGZnNjlKNttLBh91JHLeb9hIO9zK6AnuUFsxxKuWoCkEnKq7 LMYXWGIzfhOPynzq4fs24iMf4v2MQK3EgWjccZG5JoPHdTbh+6OWo4VDxaScn0Cjusp6esjKjkz Eaq5EIxdHq2x3bf21R/95b2Kx1SuicrU= X-Gm-Gg: Acq92OFbrCnAILW9bKhZxiGNpEjytrPjyfidKFFu6++uOKAfKY5tyck6G2b80S3KLpI OvoRkw0JfiNPuLmyzme/IU7y6j8BOuWHIjEMXyXBhZXPrE6MlSBHyVGDBlZgd6Z/LFgJKUGtZo1 qnDarouThc3T1/icX4myab/W5Vl1w6mdihmlSztQbODGchSsxdCawD9EkB/gGoh0KC5hSilf/37 VUSBZISEfT6UnM0ttckG2tHw1ds495591f2LnHLiJY1nfUVQKfrFyL1JWen8CL7gGghMLeqzk1S LoP5QlV7biOk+ImtVwiNG0xyD9UrESDcUT5gEgRVw4ZbxZP8XAwvpR+2Mspd7HJDCscGOFH297T a9wKyBpbp7t4ECTjqzxnf1z2Ho/0DepOFjt0jNaBg X-Received: by 2002:a05:6402:3583:b0:66f:2ea5:c269 with SMTP id 4fb4d7f45d1cf-683bcd9e4ddmr12776316a12.15.1779279421289; Wed, 20 May 2026 05:17:01 -0700 (PDT) MIME-Version: 1.0 References: <63f6abc9-c0ae-465d-a4e6-667eca6ea008@gmail.com> In-Reply-To: From: Alexander Korotkov Date: Wed, 20 May 2026 15:16:45 +0300 X-Gm-Features: AVHnY4IcJkfPSI3MgvvmCQ2FMeGdc14Li8VHW7_QBwa2wmyswSvQ0zGvZAI0Rrk Message-ID: Subject: Re: Implement waiting for wal lsn replay: reloaded To: Xuneng Zhou Cc: Alexander Lakhin , Heikki Linnakangas , Peter Eisentraut , Andres Freund , Thomas Munro , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Chao Li , pgsql-hackers , Michael Paquier , jian he , Tomas Vondra , Yura Sokolov Content-Type: multipart/mixed; boundary="000000000000dd3ce506523ec55d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd3ce506523ec55d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Xuneng! On Wed, May 20, 2026 at 8:18=E2=80=AFAM Xuneng Zhou = wrote: > On Tue, May 19, 2026 at 8:30=E2=80=AFPM Xuneng Zhou wrote: > > > > Hi, > > > > On Tue, May 19, 2026 at 1:00=E2=80=AFPM Alexander Lakhin wrote: > > > > > > Hello Alexander and Xuneng, > > > > > > 06.04.2026 22:49, Alexander Korotkov wrote: > > > > > > Thank you, I've pushed your version of patchset. I made two minor > > > corrections for patch #2: mention default mode value in the header > > > comment, and fallback to polling on has_wal_read_bug sparc64+ext4 bug= . > > > > > > > > > I discovered a new test failure, that is apparently caused by new > > > wait_for_catchup() implementation [1]: > > > [06:20:23.110](1.069s) not ok 8 - check that the slot state changes t= o "extended" > > > [06:20:23.110](0.001s) # Failed test 'check that the slot state cha= nges to "extended"' > > > # at /Users/ec2-user/bf/goldfish/HEAD/pgsql/src/test/recovery/t/019= _replslot_limit.pl line 140. > > > [06:20:23.111](0.000s) # got: 'unreserved' > > > # expected: 'extended' > > > [06:20:23.231](0.120s) not ok 9 - check that the slot state changes t= o "unreserved" > > > [06:20:23.231](0.000s) # Failed test 'check that the slot state cha= nges to "unreserved"' > > > # at /Users/ec2-user/bf/goldfish/HEAD/pgsql/src/test/recovery/t/019= _replslot_limit.pl line 152. > > > [06:20:23.231](0.000s) # got: 'lost|' > > > # expected: 'unreserved|t' > > > > > > I've managed to reproduce such failures with: > > > diff --git a/src/backend/replication/walreceiver.c b/src/backend/repl= ication/walreceiver.c > > > index 07eac07b9ce..493ce92674e 100644 > > > --- a/src/backend/replication/walreceiver.c > > > +++ b/src/backend/replication/walreceiver.c > > > @@ -1143,2 +1143,3 @@ XLogWalRcvSendReply(bool force, bool requestRep= ly, bool checkApply) > > > > > > +pg_usleep(10000); > > > /* Get current timestamp. */ > > > diff --git a/src/backend/replication/walsender.c b/src/backend/replic= ation/walsender.c > > > index 04aa770d981..19cda3a6b51 100644 > > > --- a/src/backend/replication/walsender.c > > > +++ b/src/backend/replication/walsender.c > > > @@ -2521,2 +2521,3 @@ ProcessStandbyReplyMessage(void) > > > > > > +pg_usleep(100000); > > > /* the caller already consumed the msgtype byte */ > > > > > > Concretely, a loop: > > > for i in {1..100}; do echo "ITERATION $i"; PROVE_TESTS=3D"t/019*" mak= e -s check -C src/test/recovery/ || break; done > > > failed for me on iterations 2, 1, 7: > > > ITERATION 7 > > > # +++ tap check in src/test/recovery +++ > > > t/019_replslot_limit.pl .. 8/? > > > # Failed test 'check that the slot state changes to "extended"' > > > # at t/019_replslot_limit.pl line 140. > > > # got: 'unreserved' > > > # expected: 'extended' > > > t/019_replslot_limit.pl .. 26/? # Looks like you failed 1 test of 26. > > > t/019_replslot_limit.pl .. Dubious, test returned 1 (wstat 256, 0x100= ) > > > Failed 1/26 subtests > > > > > > With "WAIT FOR LSN" in wait_for_catchup() disabled, 100 iterations > > > passed. > > > > > > Having extra logging added, I could see the key difference. > > > Failed run: > > > 2026-05-19 22:01:37.968 EEST client backend[3632148] 019_replslot_lim= it.pl LOG: !!!GetWALAvailability| targetLSN: 0/016C0000, targetSeg: 22, ol= destSlotSeg: 23, oldestSegMaxWalSize: 24, oldestSeg: 22 > > > 2026-05-19 22:01:37.968 EEST client backend[3632148] 019_replslot_lim= it.pl STATEMENT: SELECT wal_status FROM pg_replication_slots WHERE slot_na= me =3D 'rep1' > > > vs > > > Successful run: > > > 2026-05-19 22:04:18.102 EEST client backend[3633761] 019_replslot_lim= it.pl LOG: !!!GetWALAvailability| targetLSN: 0/01700000, targetSeg: 23, ol= destSlotSeg: 23, oldestSegMaxWalSize: 24, oldestSeg: 23 > > > 2026-05-19 22:04:18.102 EEST client backend[3633761] 019_replslot_lim= it.pl STATEMENT: SELECT wal_status FROM pg_replication_slots WHERE slot_na= me =3D 'rep1' > > > > > > That is, with WAIT FOR LSN, primary in this test may advance > > > slot->data.restart_lsn to the expected position after wait_for_catchu= p() > > > returns. > > > > > > [1] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=3Dgoldfis= h&dt=3D2026-05-13%2006%3A15%3A03 > > > > Thanks for reporting this issue. > > > > I think this is related to the semantic change made earlier: > > wait_for_catchup() now returns once the standby itself has reached the > > target LSN, rather than waiting until the primary observes that > > position via pg_stat_replication. > > > > As a result, the primary may not yet have processed the standby > > feedback needed to advance the slot's restart_lsn when > > wait_for_catchup() returns. > > > > Actually, I was aware of this semantic change and previously thought > > it might be harmless. But this failure appears to disprove that. I'll > > prepare a patch to fix this shortly. > > After some consideration, 019_replslot_limit.pl appears to the better > place to place the fix rather than by restoring the old primary-side > polling barrier in wait_for_catchup(). > > The new wait_for_catchup() behavior is closer to its natural > semantics: for replay/write/flush modes, it waits until the standby > itself has reached the requested LSN. The old implementation used > pg_stat_replication on the primary, which also implied that the > primary had received and processed standby feedback. That was a useful > side effect for this test, but it is not required by most callers. > > 019_replslot_limit.pl is different because it checks primary-side slot > state. For a physical slot, restart_lsn advances only after the > primary's walsender processes standby feedback. So the test needs an > extra condition beyond ordinary standby catchup. > > The patch makes that dependency explicit: wait for the standby to > replay the target LSN, then wait for the slot's restart_lsn on the > primary to pass the same LSN. This keeps wait_for_catchup() focused on > standby catchup while making the slot-specific synchronization visible > in the test that needs it. I agree with you. But do we actually need a wait_for_standby_and_slot_catchup() wrapper. I think we can call $node->wait_for_slot_catchup() directly and simplify the fix. Check the attached patch. ------ Regards, Alexander Korotkov Supabase --000000000000dd3ce506523ec55d Content-Type: application/octet-stream; name="v2-0001-Stabilize-019_replslot_limit.pl-after-wait_for_ca.patch" Content-Disposition: attachment; filename="v2-0001-Stabilize-019_replslot_limit.pl-after-wait_for_ca.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpe10l2s0 RnJvbSA2MjMzNTU0NWU2OGFjMTQzMzU0NjdkM2NmZTVmNGIzZmRkMmQ1ZDI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogV2VkLCAyMCBNYXkgMjAyNiAxNToxMjozNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIFN0YWJpbGl6ZSAwMTlfcmVwbHNsb3RfbGltaXQucGwgYWZ0ZXIgd2FpdF9mb3Jf Y2F0Y2h1cCgpCiBzZW1hbnRpYyBjaGFuZ2UKCndhaXRfZm9yX2NhdGNodXAoKSBub3cgcmV0dXJu cyBhcyBzb29uIGFzIHRoZSBzdGFuZGJ5IGhhcyByZXBsYXllZCB0aGUKdGFyZ2V0IExTTiBsb2Nh bGx5LCByYXRoZXIgdGhhbiB3YWl0aW5nIHVudGlsIHRoZSBwcmltYXJ5IG9ic2VydmVzIHRoYXQK cG9zaXRpb24gdmlhIHBnX3N0YXRfcmVwbGljYXRpb24uICAwMTlfcmVwbHNsb3RfbGltaXQucGws IGhvd2V2ZXIsCmNoZWNrcyBwcmltYXJ5LXNpZGUgcGdfcmVwbGljYXRpb25fc2xvdHMgc3RhdGUs IHdoaWNoIGRlcGVuZHMgb24gdGhlCnNsb3QncyByZXN0YXJ0X2xzbiAtLSBhbmQgcmVzdGFydF9s c24gYWR2YW5jZXMgb25seSBhZnRlciB0aGUgcHJpbWFyeSdzCndhbHNlbmRlciBwcm9jZXNzZXMg YSBzdGFuZGJ5IHJlcGx5LiAgVGhlIHByZXZpb3VzIHBvbGxpbmcKd2FpdF9mb3JfY2F0Y2h1cCgp IGltcGxpY2l0bHkgd2FpdGVkIGZvciB0aGF0IHJvdW5kIHRyaXA7IHRoZQpXQUlUIEZPUiBMU04t YmFzZWQgb25lIGRvZXMgbm90LCBzbyB0aGUgc3VidGVzdHMgImNoZWNrIHRoYXQgdGhlIHNsb3QK c3RhdGUgY2hhbmdlcyB0byAnZXh0ZW5kZWQnIC8gJ3VucmVzZXJ2ZWQnIiBiZWNvbWUgZmxhcHB5 IChyZXByb2R1Y2libGUKd2l0aCBzbWFsbCBhcnRpZmljaWFsIGRlbGF5cyBpbiBYTG9nV2FsUmN2 U2VuZFJlcGx5IC8KUHJvY2Vzc1N0YW5kYnlSZXBseU1lc3NhZ2UpLgoKUmVwbGFjZSBlYWNoIHdh aXRfZm9yX2NhdGNodXAoKSBpbiB0aGlzIHRlc3Qgd2l0aAp3YWl0X2Zvcl9zbG90X2NhdGNodXAo J3JlcDEnLCAncmVzdGFydCcsIHByaW1hcnktPmxzbignd3JpdGUnKSkuCnJlc3RhcnRfbHNuIGNh bm5vdCBtb3ZlIGFoZWFkIG9mIHRoZSBzdGFuZGJ5J3MgcmVwbGF5ZWQgcG9zaXRpb24sIHNvCnRo aXMgc2luZ2xlIHdhaXQgdHJhbnNpdGl2ZWx5IGNvdmVycyBib3RoIHRoZSBzdGFuZGJ5IHJlcGxh eSBhbmQgdGhlCnByaW1hcnkncyBvYnNlcnZhdGlvbiBvZiBpdCwgd2hpY2ggaXMgZXhhY3RseSB0 aGUgcHJlY29uZGl0aW9uIHRoZQpzbG90LXN0YXRlIGFzc2VydGlvbnMgcmVxdWlyZS4KClJlcG9y dGVkLWJ5OiBBbGV4YW5kZXIgTGFraGluIDxleGNsdXNpb25AZ21haWwuY29tPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLzYzZjZhYmM5LWMwYWUtNDY1ZC1hNGU2LTY2N2VjYTZlYTAw OEBnbWFpbC5jb20KQXV0aG9yOiBYdW5lbmcgWmhvdSA8eHVuZW5nemhvdUBnbWFpbC5jb20+CkF1 dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KLS0tCiBzcmMv dGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCB8IDIwICsrKysrKysrKysrKysr LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbCBi L3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCmluZGV4IDdiMjUzZTY0 ZDljLi40NzJhYTA3NTg3ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVw bHNsb3RfbGltaXQucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGlt aXQucGwKQEAgLTQ0LDggKzQ0LDEyIEBAICRub2RlX3N0YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLCAicHJpbWFyeV9zbG90X25hbWUgPSAncmVwMSciKTsKIAogJG5vZGVfc3Rh bmRieS0+c3RhcnQ7CiAKLSMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2gg ZGF0YQotJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKKyMg V2FpdCB1bnRpbCB0aGUgcHJpbWFyeSBoYXMgcHJvY2Vzc2VkIHN0YW5kYnkgZmVlZGJhY2sgYW5k IGFkdmFuY2VkCisjIHRoZSBzbG90J3MgcmVzdGFydF9sc24uICByZXN0YXJ0X2xzbiBtb3ZlcyBv bmx5IGFmdGVyIHRoZSBzdGFuZGJ5J3MKKyMgcmVwbHkgcmVhY2hlcyB0aGUgd2Fsc2VuZGVyLCBz byB0aGlzIHRyYW5zaXRpdmVseSBndWFyYW50ZWVzIHRoYXQKKyMgdGhlIHN0YW5kYnkgaXRzZWxm IGhhcyByZXBsYXllZCBwYXN0IHRoZSB0YXJnZXQgTFNOLgorJG5vZGVfcHJpbWFyeS0+d2FpdF9m b3Jfc2xvdF9jYXRjaHVwKCdyZXAxJywgJ3Jlc3RhcnQnLAorCSRub2RlX3ByaW1hcnktPmxzbign d3JpdGUnKSk7CiAKICMgU3RvcCBzdGFuZGJ5CiAkbm9kZV9zdGFuZGJ5LT5zdG9wOwpAQCAtNzks NyArODMsOCBAQCBpcygkcmVzdWx0LCAicmVzZXJ2ZWR8dCIsICdjaGVjayB0aGF0IHNsb3QgaXMg d29ya2luZycpOwogIyBUaGUgc3RhbmRieSBjYW4gcmVjb25uZWN0IHRvIHByaW1hcnkKICRub2Rl X3N0YW5kYnktPnN0YXJ0OwogCi0kbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRub2Rl X3N0YW5kYnkpOworJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3Jfc2xvdF9jYXRjaHVwKCdyZXAxJywg J3Jlc3RhcnQnLAorCSRub2RlX3ByaW1hcnktPmxzbignd3JpdGUnKSk7CiAKICRub2RlX3N0YW5k YnktPnN0b3A7CiAKQEAgLTEwOSw3ICsxMTQsOCBAQCBpcygkcmVzdWx0LCAicmVzZXJ2ZWQiLAog CiAjIFRoZSBzdGFuZGJ5IGNhbiByZWNvbm5lY3QgdG8gcHJpbWFyeQogJG5vZGVfc3RhbmRieS0+ c3RhcnQ7Ci0kbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRub2RlX3N0YW5kYnkpOwor JG5vZGVfcHJpbWFyeS0+d2FpdF9mb3Jfc2xvdF9jYXRjaHVwKCdyZXAxJywgJ3Jlc3RhcnQnLAor CSRub2RlX3ByaW1hcnktPmxzbignd3JpdGUnKSk7CiAkbm9kZV9zdGFuZGJ5LT5zdG9wOwogCiAj IHdhbF9rZWVwX3NpemUgb3ZlcnJpZGVzIG1heF9zbG90X3dhbF9rZWVwX3NpemUKQEAgLTEyOCw3 ICsxMzQsOCBAQCAkcmVzdWx0ID0gJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CiAKICMgVGhlIHN0YW5kYnkgY2FuIHJlY29ubmVjdCB0byBwcmltYXJ5CiAkbm9kZV9zdGFuZGJ5 LT5zdGFydDsKLSRub2RlX3ByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJG5vZGVfc3RhbmRieSk7 Ciskbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9zbG90X2NhdGNodXAoJ3JlcDEnLCAncmVzdGFydCcs CisJJG5vZGVfcHJpbWFyeS0+bHNuKCd3cml0ZScpKTsKICRub2RlX3N0YW5kYnktPnN0b3A7CiAK ICMgQWR2YW5jZSBXQUwgYWdhaW4gd2l0aG91dCBjaGVja3BvaW50LCByZWR1Y2luZyByZW1haW4g YnkgNiBNQi4KQEAgLTE1NSw3ICsxNjIsOCBAQCBpcygkcmVzdWx0LCAidW5yZXNlcnZlZHx0IiwK ICMgVGhlIHN0YW5kYnkgc3RpbGwgY2FuIGNvbm5lY3QgdG8gcHJpbWFyeSBiZWZvcmUgYSBjaGVj a3BvaW50CiAkbm9kZV9zdGFuZGJ5LT5zdGFydDsKIAotJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3Jf Y2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKKyRub2RlX3ByaW1hcnktPndhaXRfZm9yX3Nsb3RfY2F0 Y2h1cCgncmVwMScsICdyZXN0YXJ0JywKKwkkbm9kZV9wcmltYXJ5LT5sc24oJ3dyaXRlJykpOwog CiAkbm9kZV9zdGFuZGJ5LT5zdG9wOwogCi0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000dd3ce506523ec55d--