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 1wCtzL-002Pdo-1q for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 06:44:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCtzJ-00F1jV-2A for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 06:44:38 +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 1wCtzJ-00F1jM-0P for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 06:44:38 +0000 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCtzH-0000000167Z-2c1g for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 06:44:36 +0000 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-56a86f0a23bso6504738e0c.0 for ; Tue, 14 Apr 2026 23:44:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776235475; cv=none; d=google.com; s=arc-20240605; b=DS2XwWMrhp7z1DpOOgMBHgEuKt2/4pRVytXkRz0hzwe3W13aPu6DCGAILSiucmc9VP lOzvzfFiNw+XUnIwAORXCkisBPEQvPj/sBN2rjdCYGpflc0CROLQgTfbOc0Sd9f1p88g P9mYwPrywAKjQxduH9zSTgf7T6ls3NutdpaznD1eavXDx28cbK14qT4LmfPQq8hf2BXw 06VRDcGp1H3qx1od908CBCSqLvpSRBY8ycwjnJq/BFu55vNuGXkHKmUNJfr90fGwsZEt Ocu+2JlzH+OOygqKI7ntsvc66OYGPaHiNDrrgYlKbukaEMw3SL/zb9RkRy409FEAksY5 1+Uw== 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=d1cxVQXdnwuwRrkMIQ6y1SZNL2q/a0S050fowutH3OU=; fh=SOjylmeS9V+fJqh+q2n0OOXlEkBAhf/DVm6NcO6aFgw=; b=chKsXaYNg4FAEEYi/jhr/4KrLGjXSaUpzbS0FhWM1ytb/x6qkjMdREKv7Wm7YvaFA6 JCwx3sg2oiEhFOTRMIB1cZoOf2UAXqOQSSczx2ZfvSz/hVNgSlq0itlpHyPsaLxgc7F4 RSrniJCZW/Dh6TNCRb3ukW+5XjnuEgveqg5cioKUh5qItxuG0DSglFw7EkU/DXmruUwi HoJ4paLGzJJoWLELitV1yfK+e4lTf8ObCmLvtDWAX670uQdome1VCK7fFxz43UfvEzPi b0K2tTdxFDG/jihTi/xQaEbAHDL77eG0HMeM401Vt5JZN6rcl+uWS1nJSYmg2XMm36ZS Um/g==; 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=1776235475; x=1776840275; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=d1cxVQXdnwuwRrkMIQ6y1SZNL2q/a0S050fowutH3OU=; b=P5zReSaca6jBwTd8WobfzHJBurEuV1s0Ql+FS+ZAkzjWOWRNP3QHqjK3Th2WVVzGYx mvEpEbdqGeJCLo+EpVdpwfJy4Z5z+TNGTZ25c5koqFVguDX6q76lD8eGAubg05AqNIGQ ErXfXcSOKwzZcwh6xIW2/IAe25XJbFTOF10DTq2HIYM/fQq1/uMwCRm/ZGa7qI/RmkXv sBm14zV/SxVFEKRb7YN/9ahlhAGCGRqmKgzV6zydK6APeg0HUZ5vtC9USE/RtXchyJf6 d8cqf/WPwbH+54x5/OFlb+IJUN8LjKzVwaueWzIfRfde8CExrw00QI7Ztb/kLGEhVE5U /NmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776235475; x=1776840275; 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=d1cxVQXdnwuwRrkMIQ6y1SZNL2q/a0S050fowutH3OU=; b=jmCCNjMv/X55A0NMTYhRDee8ZGD4RJHsgYglvK/1dJzK2v021djvit0YzqhM5u5cEk KIyHDFd6OV9/4+Acq1BZ5YX3pUo8/eQ1rMQ0vYIRTrpZcUjId5s1vtmKpVzCIuWNtlmR JCYpBxOnEda8ry52iL/RpFmDx4sTwVfHF0O+4HBMPYSPfJSOf7OgbGXsk/SL6TXes/7K PPg1bnnqAaDQqjZ/qmmFz5qPcCSvlDEIiuDi8x47nUS0qTQO0Wkn6eRbn2pY4ji3cA3L FuchqO6hrh9JdBsem5rpUao8UFjoU2H8bSTzsx75nlktTe0FySYojmWWWEdfyl9O6Pwn 7nxw== X-Gm-Message-State: AOJu0Yznhojpm2T900vbGUzVuxZDRPRoFODb4WyDs4KqhEeK3+i4xxqI D1QkSdPx4ffHyj8QrHy/M5/waucKUhguo3XRv76qrWxnW+EowsAZ39+1So+BVJ7fuOiKM2JEUzT g5UKRcjh88ebFLqmFHJugErzMC67sKhu7gT5l X-Gm-Gg: AeBDieu4xbj777Ge9DC8S/oJypvs1xXqrVdkYYRg5ejlAirsyDRhpVnjEa49kD6LLcD yxVNf2AVbLPyni2IZ8UQpquNT8LIaNkUsAWWrjQJEbfXYPqdkK+or9RMXDwaTAVFzMlFNAenHYc 96jsC4Gz0WO+3YaD9Po0yVVy+V5n7HlcjWKOE5U+mz0L3ULyFdpt2cVxunDjUjqjmK3VFEQyMVX Vq7MhjVW4JfUy5pVfXbr8X7XYFqwNBMu40pugHkkNfqxFJlokxgdHL+PTHFmyTd4VIly4uFdpoN M0tRll0MOav93A/cSw== X-Received: by 2002:a05:6122:4594:b0:56f:8f5:b135 with SMTP id 71dfb90a1353d-56f3bcf7b11mr10250733e0c.14.1776235474936; Tue, 14 Apr 2026 23:44:34 -0700 (PDT) MIME-Version: 1.0 From: SATYANARAYANA NARLAPURAM Date: Tue, 14 Apr 2026 23:44:23 -0700 X-Gm-Features: AQROBzC4aagngc_KPsNcIA37wrSj4VC45ORmuGWOrIUbxwSX21tOaUjs09OpJ6g Message-ID: Subject: [PATCH] Fix WAIT FOR LSN standby_write/standby_flush for archive recovery cases To: PostgreSQL Hackers , Alexander Korotkov Content-Type: multipart/mixed; boundary="000000000000858f4e064f7a0c22" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000858f4e064f7a0c22 Content-Type: multipart/alternative; boundary="000000000000858f4c064f7a0c20" --000000000000858f4c064f7a0c20 Content-Type: text/plain; charset="UTF-8" Hi Alexnader, Hackers, GetCurrentLSNForWaitType() for WAIT_LSN_TYPE_STANDBY_WRITE and WAIT_LSN_TYPE_STANDBY_FLUSH previously relied on the WAL receiver's tracked write/flush positions (GetWalRcvWriteRecPtr/GetWalRcvFlushRecPtr). There are two scenarios where WAIT FOR LSN queries can be stalled though replay is making progress. Breaking it down to two to give clarity on setups but the underlying problem is the same. There are two scenarios here: (1). When the standby is disconnected from the primary and switched to WAL archive mode, it continues to be in that mode until no more WAL is available to replay and then switch to streaming mode. Until then WAIT FOR LSN calls get stuck on the standby though replay catches up beyond the stale WAL receiver position. Switching XLog source from archive to streaming is separately tracked in [1]. (2). In the case of Archive recovery, no WAL receiver process exists, so these functions return InvalidXLogRecPtr (0/0). WAIT FOR LSN with standby_flush or standby_write modes would always time out, even for WAL that has been fully replayed. Fix by falling back to the replay LSN (GetXLogReplayRecPtr) when the WAL receiver position is invalid or behind replay. This is correct because any WAL that has been replayed has necessarily already been written and flushed to disk. Attached the repro test case. [1]: https://www.postgresql.org/message-id/CAHg+QDdLmfpS0n0U3U+e+dw7X7jjEOsJJ0aLEsrtxs-tUyf5Ag@mail.gmail.com Thanks, Satya --000000000000858f4c064f7a0c20 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Alexnader, Hackers,=C2=A0=C2=A0

GetC= urrentLSNForWaitType() for WAIT_LSN_TYPE_STANDBY_WRITE and
WAIT_LSN_TYPE= _STANDBY_FLUSH previously relied on the WAL receiver's
tracked write= /flush positions (GetWalRcvWriteRecPtr/GetWalRcvFlushRecPtr).
The= re are two scenarios where WAIT FOR LSN queries can be stalled though
=
replay is making progress. Breaking it down to two to give clarity on = setups but
the underlying problem is the same.

Ther= e are two scenarios here:

(1). When the standby is disconnect= ed from the primary and switched to WAL=C2=A0
archive mode, it co= ntinues to be in that mode until no more WAL is available to replay=C2=A0
and then switch to streaming mode. Until=C2=A0then WAIT FOR LSN ca= lls get stuck on the
standby though replay catches up beyond the= =C2=A0stale WAL receiver position. Switching
XLog source from arc= hive to streaming is separately tracked in [1].

(2). In the c= ase of Archive recovery, no WAL receiver process exists, so these
functi= ons return InvalidXLogRecPtr (0/0). WAIT FOR LSN with standby_flush or
s= tandby_write modes would always time out, even for WAL that has been
ful= ly replayed.

Fix by falling back to the replay LSN (GetXLogRe= playRecPtr) when the WAL
receiver position is invalid or behind replay. = This is correct because any
WAL that has been replayed has necessarily a= lready been written and flushed
to disk. Attached the repro test case.


Thanks,
Satya
--000000000000858f4c064f7a0c20-- --000000000000858f4e064f7a0c22 Content-Type: application/octet-stream; name="0001-Fix-WAIT-FOR-LSN-standby_write-standby_flush-for-arc.patch" Content-Disposition: attachment; filename="0001-Fix-WAIT-FOR-LSN-standby_write-standby_flush-for-arc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnzo81o10 RnJvbSBiYTc5ZjI1OTE3N2IxMzdiOTY5NjYwZjAzMTFlN2JlZjM3ZWZjMWNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBXZWQsIDE1IEFwciAyMDI2IDA2OjI0OjM1ICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gRml4IFdBSVQgRk9SIExTTiBzdGFuZGJ5X3dyaXRlL3N0YW5kYnlfZmx1c2ggZm9yIGFy Y2hpdmUKIHJlY292ZXJ5CgpHZXRDdXJyZW50TFNORm9yV2FpdFR5cGUoKSBmb3IgV0FJVF9MU05f VFlQRV9TVEFOREJZX1dSSVRFIGFuZApXQUlUX0xTTl9UWVBFX1NUQU5EQllfRkxVU0ggcHJldmlv dXNseSByZWxpZWQgc29sZWx5IG9uIHRoZSBXQUwgcmVjZWl2ZXIncwp0cmFja2VkIHdyaXRlL2Zs dXNoIHBvc2l0aW9ucyAoR2V0V2FsUmN2V3JpdGVSZWNQdHIvR2V0V2FsUmN2Rmx1c2hSZWNQdHIp LgoKSW4gY2FzZSBvZiBBcmNoaXZlIHJlY292ZXJ5LCBubyBXQUwgcmVjZWl2ZXIgcHJvY2VzcyBl eGlzdHMsIHNvIHRoZXNlCmZ1bmN0aW9ucyByZXR1cm4gSW52YWxpZFhMb2dSZWNQdHIgKDAvMCku IFdBSVQgRk9SIExTTiB3aXRoIHN0YW5kYnlfZmx1c2ggb3IKc3RhbmRieV93cml0ZSBtb2RlcyB3 b3VsZCBhbHdheXMgdGltZSBvdXQsIGV2ZW4gZm9yIFdBTCB0aGF0IGhhcyBiZWVuCmZ1bGx5IHJl cGxheWVkLgoKRml4IGJ5IGZhbGxpbmcgYmFjayB0byB0aGUgcmVwbGF5IExTTiAoR2V0WExvZ1Jl cGxheVJlY1B0cikgd2hlbiB0aGUgV0FMCnJlY2VpdmVyIHBvc2l0aW9uIGlzIGludmFsaWQgb3Ig YmVoaW5kIHJlcGxheS4gVGhpcyBpcyBjb3JyZWN0IGJlY2F1c2UgYW55CldBTCB0aGF0IGhhcyBi ZWVuIHJlcGxheWVkIGhhcyBuZWNlc3NhcmlseSBhbHJlYWR5IGJlZW4gd3JpdHRlbiBhbmQgZmx1 c2hlZAp0byBkaXNrLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMg fCAzMCArKysrKysrKysrKysrKysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNl cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2d3YWl0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2Fp dC5jCmluZGV4IDJlMzFjMGQ2Li5kNzg0NGU4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3dhaXQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nd2FpdC5jCkBAIC05Myw2ICs5MywxMyBAQCBTdGF0aWNBc3NlcnREZWNsKGxlbmd0aG9mKFdh aXRMU05XYWl0RXZlbnRzKSA9PSBXQUlUX0xTTl9UWVBFX0NPVU5ULAogCiAvKgogICogR2V0IHRo ZSBjdXJyZW50IExTTiBmb3IgdGhlIHNwZWNpZmllZCB3YWl0IHR5cGUuCisgKgorICogRm9yIHN0 YW5kYnkgd3JpdGUgYW5kIGZsdXNoIHR5cGVzLCB3ZSBmaXJzdCBjb25zdWx0IHRoZSBXQUwgcmVj ZWl2ZXIncworICogdHJhY2tlZCBwb3NpdGlvbi4gSG93ZXZlciwgZHVyaW5nIGFyY2hpdmUgcmVj b3ZlcnkgKG9yIGFmdGVyIHBnX3Jld2luZAorICogd2hlbiB0aGUgV0FMIHJlY2VpdmVyIGhhc24n dCBjYXVnaHQgdXApLCB0aGUgV0FMIHJlY2VpdmVyIG1heSByZXBvcnQgMC8wCisgKiBvciBhIHBv c2l0aW9uIGJlaGluZCB0aGUgcmVwbGF5IExTTi4gSW4gdGhvc2UgY2FzZXMsIHdlIGZhbGwgYmFj ayB0byB0aGUKKyAqIHJlcGxheSBMU04sIGJlY2F1c2UgYW55IFdBTCB0aGF0IGhhcyBiZWVuIHJl cGxheWVkIGhhcyBuZWNlc3NhcmlseSBhbHJlYWR5CisgKiBiZWVuIHdyaXR0ZW4gYW5kIGZsdXNo ZWQgdG8gZGlzay4KICAqLwogWExvZ1JlY1B0cgogR2V0Q3VycmVudExTTkZvcldhaXRUeXBlKFdh aXRMU05UeXBlIGxzblR5cGUpCkBAIC0xMDUsMTAgKzExMiwyNyBAQCBHZXRDdXJyZW50TFNORm9y V2FpdFR5cGUoV2FpdExTTlR5cGUgbHNuVHlwZSkKIAkJCXJldHVybiBHZXRYTG9nUmVwbGF5UmVj UHRyKE5VTEwpOwogCiAJCWNhc2UgV0FJVF9MU05fVFlQRV9TVEFOREJZX1dSSVRFOgotCQkJcmV0 dXJuIEdldFdhbFJjdldyaXRlUmVjUHRyKCk7Ci0KIAkJY2FzZSBXQUlUX0xTTl9UWVBFX1NUQU5E QllfRkxVU0g6Ci0JCQlyZXR1cm4gR2V0V2FsUmN2Rmx1c2hSZWNQdHIoTlVMTCwgTlVMTCk7CisJ CQl7CisJCQkJWExvZ1JlY1B0cgl3YWxyY3ZQdHI7CisJCQkJWExvZ1JlY1B0cglyZXBsYXlQdHI7 CisKKwkJCQlpZiAobHNuVHlwZSA9PSBXQUlUX0xTTl9UWVBFX1NUQU5EQllfV1JJVEUpCisJCQkJ CXdhbHJjdlB0ciA9IEdldFdhbFJjdldyaXRlUmVjUHRyKCk7CisJCQkJZWxzZQorCQkJCQl3YWxy Y3ZQdHIgPSBHZXRXYWxSY3ZGbHVzaFJlY1B0cihOVUxMLCBOVUxMKTsKKworCQkJCXJlcGxheVB0 ciA9IEdldFhMb2dSZXBsYXlSZWNQdHIoTlVMTCk7CisKKwkJCQkvKgorCQkJCSAqIFVzZSB0aGUg V0FMIHJlY2VpdmVyIHBvc2l0aW9uIGlmIGl0IGlzIHZhbGlkIGFuZCBhaGVhZCBvZgorCQkJCSAq IHRoZSByZXBsYXkgcG9zaXRpb24uIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIHRoZSByZXBsYXkK KwkJCQkgKiBMU04uIFRoaXMgaGFuZGxlcyBhcmNoaXZlIHJlY292ZXJ5IChubyBXQUwgcmVjZWl2 ZXIpLgorCQkJCSAqLworCQkJCWlmICh3YWxyY3ZQdHIgIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYg d2FscmN2UHRyID4gcmVwbGF5UHRyKQorCQkJCQlyZXR1cm4gd2FscmN2UHRyOworCQkJCXJldHVy biByZXBsYXlQdHI7CisJCQl9CiAKIAkJY2FzZSBXQUlUX0xTTl9UWVBFX1BSSU1BUllfRkxVU0g6 CiAJCQlyZXR1cm4gR2V0Rmx1c2hSZWNQdHIoTlVMTCk7Ci0tIAoyLjQzLjAKCg== --000000000000858f4e064f7a0c22 Content-Type: application/octet-stream; name="0001-Add-TAP-test-for-WAIT-FOR-LSN-during-archive-recover.patch" Content-Disposition: attachment; filename="0001-Add-TAP-test-for-WAIT-FOR-LSN-during-archive-recover.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnzooq4j1 RnJvbSA3OWEyNzM5MTNjZDBkODhlN2I5ODBlZjE5OGUwMWM0NjU1MzJiMDhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXR5YSBOYXJsYXB1cmFtIDxzYXR5YW5hcmxhcHVyYW1AZ21h aWwuY29tPgpEYXRlOiBXZWQsIDE1IEFwciAyMDI2IDA2OjI5OjEyICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gQWRkIFRBUCB0ZXN0IGZvciBXQUlUIEZPUiBMU04gZHVyaW5nIGFyY2hpdmUgcmVjb3Zl cnkKCkFkZCBhIGRlZGljYXRlZCB0ZXN0ICgwNTBfd2FpdF9mb3JfbHNuX2FyY2hpdmUucGwpIHRo YXQgdmVyaWZpZXMgV0FJVCBGT1IKTFNOIHN0YW5kYnlfd3JpdGUsIHN0YW5kYnlfZmx1c2gsIGFu ZCBzdGFuZGJ5X3JlcGxheSBtb2RlcyB3b3JrIGNvcnJlY3RseQpvbiBhbiBhcmNoaXZlLW9ubHkg c3RhbmRieSAobm8gV0FMIHJlY2VpdmVyIC8gbm8gc3RyZWFtaW5nIHJlcGxpY2F0aW9uKS4KClRl c3RzIGNvdmVyOgogLSBBbGwgdGhyZWUgc3RhbmRieSBtb2RlcyByZXR1cm4gc3VjY2VzcyBmb3Ig YWxyZWFkeS1yZXBsYXllZCBMU05zCiAtIERhdGEgdmlzaWJpbGl0eSBhZnRlciBXQUlUIEZPUiBv biBhcmNoaXZlIHN0YW5kYnkKIC0gQ29ycmVjdCB0aW1lb3V0IGZvciB1bnJlYWNoYWJsZSBMU05z CiAtIEluY3JlbWVudGFsbHkgYXJjaGl2ZWQgV0FMIChub3QganVzdCBpbml0aWFsIHJlY292ZXJ5 KQogLSBwcmltYXJ5X2ZsdXNoIGNvcnJlY3RseSBlcnJvcnMgb24gc3RhbmRieQogLSBDb25maXJt cyBubyBXQUwgcmVjZWl2ZXIgaXMgcHJlc2VudCB0aHJvdWdob3V0IHRoZSB0ZXN0Ci0tLQogLi4u L3JlY292ZXJ5L3QvMDUwX3dhaXRfZm9yX2xzbl9hcmNoaXZlLnBsICAgIHwgMTY5ICsrKysrKysr KysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDE2OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTBfd2FpdF9mb3JfbHNuX2FyY2hpdmUucGwK CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1MF93YWl0X2Zvcl9sc25fYXJjaGl2 ZS5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUwX3dhaXRfZm9yX2xzbl9hcmNoaXZlLnBsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wNTBmY2U2NAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUwX3dhaXRfZm9yX2xzbl9hcmNoaXZlLnBsCkBA IC0wLDAgKzEsMTY5IEBACisjIENoZWNrcyB0aGF0IFdBSVQgRk9SIExTTiB3b3JrcyBjb3JyZWN0 bHkgZHVyaW5nIGFyY2hpdmUgcmVjb3ZlcnksCisjIHdoZXJlIG5vIFdBTCByZWNlaXZlciBwcm9j ZXNzIGV4aXN0cy4gIFdpdGhvdXQgdGhlIGZpeCBpbgorIyBHZXRDdXJyZW50TFNORm9yV2FpdFR5 cGUoKSwgc3RhbmRieV93cml0ZSBhbmQgc3RhbmRieV9mbHVzaCBtb2RlcworIyB3b3VsZCBhbHdh eXMgdGltZSBvdXQgYmVjYXVzZSBHZXRXYWxSY3ZXcml0ZVJlY1B0cigpLworIyBHZXRXYWxSY3ZG bHVzaFJlY1B0cigpIHJldHVybiBJbnZhbGlkWExvZ1JlY1B0ciAoMC8wKSB3aGVuIHRoZXJlCisj IGlzIG5vIFdBTCByZWNlaXZlci4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4g J2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6UGF0aCBxdyhtYWtlX3Bh dGgpOworCisjIEluaXRpYWxpemUgcHJpbWFyeSBub2RlIHdpdGggYXJjaGl2aW5nIGVuYWJsZWQK K215ICRub2RlX3ByaW1hcnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1h cnknKTsKKyRub2RlX3ByaW1hcnktPmluaXQoaGFzX2FyY2hpdmluZyA9PiAxLCBhbGxvd3Nfc3Ry ZWFtaW5nID0+IDEpOworJG5vZGVfcHJpbWFyeS0+c3RhcnQ7CisKKyMgQ3JlYXRlIHRlc3QgdGFi bGUgYW5kIGluc2VydCBpbml0aWFsIGRhdGEKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgd2FpdF90ZXN0IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgQVMgYSIpOworCisjIFRha2UgYSBiYWNrdXAgZm9yIHRoZSBhcmNoaXZlIHN0YW5k YnkKK215ICRiYWNrdXBfbmFtZSA9ICdhcmNoaXZlX2JhY2t1cCc7Ciskbm9kZV9wcmltYXJ5LT5i YWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgYW4gYXJjaGl2ZS1vbmx5IHN0YW5kYnkg KG5vIHN0cmVhbWluZyByZXBsaWNhdGlvbikuCisjIFdlIGV4cGxpY2l0bHkgZGlzYWJsZSBwcmlt YXJ5X2Nvbm5pbmZvIHNvIHRoYXQgbm8gV0FMIHJlY2VpdmVyCisjIGlzIHN0YXJ0ZWQ7IFdBTCBp cyBvYnRhaW5lZCBzb2xlbHkgdmlhIHJlc3RvcmVfY29tbWFuZC4KK215ICRub2RlX3N0YW5kYnkg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnknKTsKKyRub2RlX3N0YW5k YnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfcHJpbWFyeSwgJGJhY2t1cF9uYW1lLAorCWhhc19y ZXN0b3JpbmcgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5LT5zdGFydDsKKworIyBDb25maXJtIHRoYXQg dGhlIHN0YW5kYnkgaXMgaW4gcmVjb3ZlcnkgYW5kIGhhcyBubyBXQUwgcmVjZWl2ZXIKK215ICRp bl9yZWNvdmVyeSA9CisgICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIHBnX2lzX2luX3JlY292ZXJ5KCkiKTsKK2lzKCRpbl9yZWNvdmVyeSwgJ3QnLCAiYXJjaGl2 ZSBzdGFuZGJ5IGlzIGluIHJlY292ZXJ5Iik7CisKK215ICR3YWxyY3ZfY291bnQgPSAkbm9kZV9z dGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopIEZST00gcGdf c3RhdF93YWxfcmVjZWl2ZXIiKTsKK2lzKCR3YWxyY3ZfY291bnQsICcwJywgImFyY2hpdmUgc3Rh bmRieSBoYXMgbm8gV0FMIHJlY2VpdmVyIik7CisKKyMgSW5zZXJ0IGRhdGEgb24gcHJpbWFyeSBh bmQgc3dpdGNoIFdBTCB0byBmb3JjZSBhcmNoaXZpbmcKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5lcmF0ZV9z ZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0KKyAgJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpIik7Ciskbm9k ZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19zd2l0Y2hfd2FsKCki KTsKKworIyBXYWl0IGZvciBhcmNoaXZlIHN0YW5kYnkgdG8gcmVwbGF5IHVwIHRvIHRoZSB0YXJn ZXQgTFNOCiskbm9kZV9zdGFuZGJ5LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19sYXN0X3dhbF9yZXBsYXlfbHNuKCkgPj0gJyR7bHNuMX0nOjpwZ19sc24iKTsKKwor IyAxLiBUZXN0IHN0YW5kYnlfcmVwbGF5IG1vZGUgLSBzaG91bGQgc3VjY2VlZCAodGhpcyBhbHdh eXMgd29ya2VkKQorbXkgJG91dHB1dCA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLCBxcVsKKwlXQUlUIEZPUiBMU04gJyR7bHNuMX0nIFdJVEggKE1PREUgJ3N0YW5kYnlf cmVwbGF5JywgVElNRU9VVCAnNXMnLCBOT19USFJPVyk7CitdKTsKK2lzKCRvdXRwdXQsICdzdWNj ZXNzJywKKwkiYXJjaGl2ZSBzdGFuZGJ5OiBzdGFuZGJ5X3JlcGxheSByZXR1cm5zIHN1Y2Nlc3Mg Zm9yIHJlcGxheWVkIExTTiIpOworCisjIDIuIFRlc3Qgc3RhbmRieV9mbHVzaCBtb2RlIC0gdGhp cyB3YXMgYnJva2VuIGJlZm9yZSB0aGUgZml4Ciskb3V0cHV0ID0gJG5vZGVfc3RhbmRieS0+c2Fm ZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCVdBSVQgRk9SIExTTiAnJHtsc24xfScgV0lUSCAo TU9ERSAnc3RhbmRieV9mbHVzaCcsIFRJTUVPVVQgJzVzJywgTk9fVEhST1cpOworXSk7Citpcygk b3V0cHV0LCAnc3VjY2VzcycsCisJImFyY2hpdmUgc3RhbmRieTogc3RhbmRieV9mbHVzaCByZXR1 cm5zIHN1Y2Nlc3MgZm9yIHJlcGxheWVkIExTTiIpOworCisjIDMuIFRlc3Qgc3RhbmRieV93cml0 ZSBtb2RlIC0gdGhpcyB3YXMgYnJva2VuIGJlZm9yZSB0aGUgZml4Ciskb3V0cHV0ID0gJG5vZGVf c3RhbmRieS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCVdBSVQgRk9SIExTTiAnJHts c24xfScgV0lUSCAoTU9ERSAnc3RhbmRieV93cml0ZScsIFRJTUVPVVQgJzVzJywgTk9fVEhST1cp OworXSk7Citpcygkb3V0cHV0LCAnc3VjY2VzcycsCisJImFyY2hpdmUgc3RhbmRieTogc3RhbmRi eV93cml0ZSByZXR1cm5zIHN1Y2Nlc3MgZm9yIHJlcGxheWVkIExTTiIpOworCisjIDQuIFZlcmlm eSBkYXRhIHZpc2liaWxpdHkgYWZ0ZXIgV0FJVCBGT1Igb24gdGhlIGFyY2hpdmUgc3RhbmRieQor JG91dHB1dCA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlX QUlUIEZPUiBMU04gJyR7bHNuMX0nIFdJVEggKE1PREUgJ3N0YW5kYnlfZmx1c2gnLCBUSU1FT1VU ICc1cycpOworCVNFTEVDVCBjb3VudCgqKSBGUk9NIHdhaXRfdGVzdDsKK10pOworaXMoKHNwbGl0 KCJcbiIsICRvdXRwdXQpKVstMV0sCisJJzIwJywgImFyY2hpdmUgc3RhbmRieTogZGF0YSBpcyB2 aXNpYmxlIGFmdGVyIFdBSVQgRk9SIHN0YW5kYnlfZmx1c2giKTsKKworIyA1LiBUZXN0IHRoYXQg YW4gdW5yZWFjaGFibGUgTFNOIHN0aWxsIHRpbWVzIG91dCBjb3JyZWN0bHkKK215ICR1bnJlYWNo YWJsZV9sc24gPQorICAkbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKSArIDEwMDAwMDAwMDAwIik7CisKKyRvdXRw dXQgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisJV0FJVCBG T1IgTFNOICcke3VucmVhY2hhYmxlX2xzbn0nIFdJVEggKE1PREUgJ3N0YW5kYnlfZmx1c2gnLCBU SU1FT1VUICcxMDBtcycsIE5PX1RIUk9XKTsKK10pOworaXMoJG91dHB1dCwgJ3RpbWVvdXQnLAor CSJhcmNoaXZlIHN0YW5kYnk6IHN0YW5kYnlfZmx1c2ggY29ycmVjdGx5IHRpbWVzIG91dCBmb3Ig dW5yZWFjaGFibGUgTFNOIik7CisKKyRvdXRwdXQgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXFbCisJV0FJVCBGT1IgTFNOICcke3VucmVhY2hhYmxlX2xzbn0nIFdJ VEggKE1PREUgJ3N0YW5kYnlfd3JpdGUnLCBUSU1FT1VUICcxMDBtcycsIE5PX1RIUk9XKTsKK10p OworaXMoJG91dHB1dCwgJ3RpbWVvdXQnLAorCSJhcmNoaXZlIHN0YW5kYnk6IHN0YW5kYnlfd3Jp dGUgY29ycmVjdGx5IHRpbWVzIG91dCBmb3IgdW5yZWFjaGFibGUgTFNOIik7CisKKyRvdXRwdXQg PSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisJV0FJVCBGT1Ig TFNOICcke3VucmVhY2hhYmxlX2xzbn0nIFdJVEggKE1PREUgJ3N0YW5kYnlfcmVwbGF5JywgVElN RU9VVCAnMTAwbXMnLCBOT19USFJPVyk7CitdKTsKK2lzKCRvdXRwdXQsICd0aW1lb3V0JywKKwki YXJjaGl2ZSBzdGFuZGJ5OiBzdGFuZGJ5X3JlcGxheSBjb3JyZWN0bHkgdGltZXMgb3V0IGZvciB1 bnJlYWNoYWJsZSBMU04iKTsKKworIyA2LiBUZXN0IHdpdGggYSBzZWNvbmQgYmF0Y2ggb2YgV0FM IC0gdmVyaWZ5IHRoZSBmaXggd29ya3MgZm9yCisjIGluY3JlbWVudGFsbHkgYXJjaGl2ZWQgYW5k IHJlc3RvcmVkIFdBTCwgbm90IGp1c3QgaW5pdGlhbCByZWNvdmVyeS4KKyRub2RlX3ByaW1hcnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChn ZW5lcmF0ZV9zZXJpZXMoMjEsIDMwKSkiKTsKK215ICRsc24yID0KKyAgJG5vZGVfcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigp Iik7Ciskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19zd2l0 Y2hfd2FsKCkiKTsKKworIyBXYWl0IGZvciBhcmNoaXZlIHN0YW5kYnkgdG8gY2F0Y2ggdXAKKyRu b2RlX3N0YW5kYnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xh c3Rfd2FsX3JlcGxheV9sc24oKSA+PSAnJHtsc24yfSc6OnBnX2xzbiIpOworCiskb3V0cHV0ID0g JG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCVdBSVQgRk9SIExT TiAnJHtsc24yfScgV0lUSCAoTU9ERSAnc3RhbmRieV9mbHVzaCcsIFRJTUVPVVQgJzVzJywgTk9f VEhST1cpOworXSk7Citpcygkb3V0cHV0LCAnc3VjY2VzcycsCisJImFyY2hpdmUgc3RhbmRieTog c3RhbmRieV9mbHVzaCB3b3JrcyBmb3IgaW5jcmVtZW50YWxseSBhcmNoaXZlZCBXQUwiKTsKKwor JG91dHB1dCA9ICRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlX QUlUIEZPUiBMU04gJyR7bHNuMn0nIFdJVEggKE1PREUgJ3N0YW5kYnlfd3JpdGUnLCBUSU1FT1VU ICc1cycsIE5PX1RIUk9XKTsKK10pOworaXMoJG91dHB1dCwgJ3N1Y2Nlc3MnLAorCSJhcmNoaXZl IHN0YW5kYnk6IHN0YW5kYnlfd3JpdGUgd29ya3MgZm9yIGluY3JlbWVudGFsbHkgYXJjaGl2ZWQg V0FMIik7CisKKyRvdXRwdXQgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVz JywgcXFbCisJV0FJVCBGT1IgTFNOICcke2xzbjJ9JyBXSVRIIChNT0RFICdzdGFuZGJ5X3JlcGxh eScsIFRJTUVPVVQgJzVzJyk7CisJU0VMRUNUIGNvdW50KCopIEZST00gd2FpdF90ZXN0OworXSk7 Citpcygoc3BsaXQoIlxuIiwgJG91dHB1dCkpWy0xXSwKKwknMzAnLAorCSJhcmNoaXZlIHN0YW5k Ynk6IGFsbCAzMCByb3dzIHZpc2libGUgYWZ0ZXIgaW5jcmVtZW50YWwgYXJjaGl2ZSByZWNvdmVy eSIKKyk7CisKKyMgNy4gVGVzdCB0aGF0IHByaW1hcnlfZmx1c2ggY29ycmVjdGx5IGVycm9ycyBv biB0aGUgYXJjaGl2ZSBzdGFuZGJ5CitteSAkc3RkZXJyOworJG5vZGVfc3RhbmRieS0+cHNxbCgK KwkncG9zdGdyZXMnLAorCSJXQUlUIEZPUiBMU04gJyR7bHNuMn0nIFdJVEggKE1PREUgJ3ByaW1h cnlfZmx1c2gnKTsiLAorCXN0ZGVyciA9PiBcJHN0ZGVycik7Citvaygkc3RkZXJyID1+IC9yZWNv dmVyeSBpcyBpbiBwcm9ncmVzcy8sCisJImFyY2hpdmUgc3RhbmRieTogcHJpbWFyeV9mbHVzaCBj b3JyZWN0bHkgZXJyb3JzIG9uIHN0YW5kYnkiKTsKKworIyA4LiBWZXJpZnkgbm8gV0FMIHJlY2Vp dmVyIGFwcGVhcmVkIGR1cmluZyB0aGUgdGVzdHMKKyR3YWxyY3ZfY291bnQgPSAkbm9kZV9zdGFu ZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3Rh dF93YWxfcmVjZWl2ZXIiKTsKK2lzKCR3YWxyY3ZfY291bnQsICcwJywKKwkiYXJjaGl2ZSBzdGFu ZGJ5OiBzdGlsbCBubyBXQUwgcmVjZWl2ZXIgYWZ0ZXIgYWxsIHRlc3RzIik7CisKKyRub2RlX3N0 YW5kYnktPnN0b3A7Ciskbm9kZV9wcmltYXJ5LT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0g CjIuNDMuMAoK --000000000000858f4e064f7a0c22--