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 1wFnr3-005ZHJ-1b for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Apr 2026 06:48:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wFnr2-00HYcu-2C for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Apr 2026 06:48:04 +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 1wFnr2-00HYcm-10 for pgsql-hackers@lists.postgresql.org; Thu, 23 Apr 2026 06:48:04 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wFnqz-00000002bUs-4BU5 for pgsql-hackers@lists.postgresql.org; Thu, 23 Apr 2026 06:48:04 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-ba3115fe0d5so1211507566b.1 for ; Wed, 22 Apr 2026 23:48:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776926875; cv=none; d=google.com; s=arc-20240605; b=lRBOqJXIACSutw1lL7jnEPAHadPunbzwtiqhiVJEeadPf4fMPWcW7XEE0bu1o8QAQg dWTNO+iJgLL+Yy1zwJBBxGznOPfWruEQ0+WuzjV/i+bE5SawkwCNfTi2cyhzq1UNFXVM KJqJe3ibrW5J1gZ7d0eoJ8ohX0PFV+s4KA5WCmUAbqG8gt/L+RPFcGNX+s6Yt90fbadZ G1So8arK7wG8kBsF+baTOH8sz72Lc38KCcE7MKt4pIVJd25wKA7sLyF1+2LUnWzuWkvS kyQwTc8jAPunSdMtTmNx43ncXBsAUvrRoCeAMG+MlnA7nW/pcoqsiVKYw1dxeNiZ3CcI 9mkg== 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=W+r52+qVAnqsH6g5v4z3soeqMJecdelgWeAd+zxBMgY=; fh=Tne3SGm9xnUnPjLDcqrSsUWZgKf6Yr+gANUgkz7VCYY=; b=adgjHFJ2LhoCeRUWbFHc0FuQjo3JWO4P3pBDUeF2KSlPeX6QDur77C285XNfsdp39q wb0AFCPzZb3PJPskWUBywAF9FIHgILmrbqOdYkx2sIg37nQSBm9jGNmthTGhCK6GKi0h m74+AOt/Nc8BxlqlDArFZlK8+GSMfvZH9gZfz6/aZM4bonqDBoB3FzCW75+AbSsVc8Az xUTMbWkucRAy16x8gouEaV2sE8pPush6Dl1UNLjOjw+AFBNrEbtN3ph7Ebfc0P4a8tL9 Ip8TBXrTU32TQtMOj4/3eYSwNvMQ94nPzs3FHpXxqnoX6ezWsxqpkzAcS//I9Q2yZJ4H EElw==; 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=1776926875; x=1777531675; 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=W+r52+qVAnqsH6g5v4z3soeqMJecdelgWeAd+zxBMgY=; b=kQLR5U6kHxi5sXsvo4Y54Eog37G22FreUuo+v/ry3zMbXp0k+X8hs13ZOyxbKYbMYq Jin0E0yiEeU8iFeK1WlImfQcGkqTy4RUtBNIwZaLX2TvFJABB7QvnHC4dBnc9KXTTqsH 6hdAdF8GFuxlq7cI7ZwZQYHig9NZbVnEMhR+rzBCdwn1J+gNbYh17dUiPW30EzDeYk5L X+Hi2tWG+EPjRqFEaAS6W/KL7sI5K6wMvMMX+NQ/bCiJyMf9fFH3k19F0ShvXKKOn1/k u78T+0i2BMdTeh8NzOIV/kiAoNM/oWGZ3XyKeZveMM+DjiCkD+DCYVj1tN0gK48Ui2Cu jjdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776926875; x=1777531675; 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=W+r52+qVAnqsH6g5v4z3soeqMJecdelgWeAd+zxBMgY=; b=DOzg7jCV6Ulo89NVR750gXU2peBt48k53+J0X8fGPfBh1cd7dUsfhu1a3TG5rOZil0 yF+IIYdJS2DSqDihsGTaauHHns7/kpbpn+PsB2CIR5f7EoXP4r3MTXGIdgywWZMd2Uss Buo6j3tb0ddNrhSzN/U6oAAFmEGvI3J3MEUSMjxWBbuo1+NJiPMHlENiO5mvMas3JWRv 0u437WVGDnjzbRf8Rwpx2ilHeT3FUccljprVNJn2A5A825XUX6DbMRCo/c9vcUZuo75g ysOEsmDMUShIbQHRxxtHDyEWMY5ix43JtHPrp17fTU11yPhDglTgU85HUrKg2CpxeK+N M5zQ== X-Forwarded-Encrypted: i=1; AFNElJ/AlcwUD+GTitvZEOsKzc94R+amlSi1fccj/5dm3cPldEuQJslcJIFf4f0U0LI6HlH6dRtDpStAhVx91nnZ@lists.postgresql.org X-Gm-Message-State: AOJu0YzUFnLZhH2NvqkSmHezWNuZ4tu8vnjo+KQo43KSfq0NdOi+38Ed VwIcXHqtH0awxaF3O6WEkHlLiiZxfFBkiKEUobukwigcZZmtWv0+PaUIVrd4REhqX6jqgwmzxpO zgMF1d/mim+hmcCq48Cowb4dPwA0I0a4= X-Gm-Gg: AeBDieseWFJXUFPIc11U9yDKfAO8S7A/gBicanGUmo9a+Ev7oemMgHT80kSX2CJFwxT 1Tiyn2ozaHVqhnE4/Pk3+pEHbfzk/FIObSMPeLMTerUaXUfOYaNnXXg3IyryOd9maZc5OXNwkfi dJ1Bm2tBOXmO8kr9Gh7onJAkgdG/ihqnj40LlJOrAneQS1agMJ1NQX9c+05PBilgBzQr3YwO3b1 /srEPlvrHSb0PfaUJnuCJAN+BBvm0gcObhvbMfKxwG7riSo/oJXtxvThzKbISjoEcKUv3A9Zwq6 VorRsnfT9+X5dIIP/w== X-Received: by 2002:a17:906:c102:b0:b97:b88c:386b with SMTP id a640c23a62f3a-ba4229d7784mr1167491066b.29.1776926874688; Wed, 22 Apr 2026 23:47:54 -0700 (PDT) MIME-Version: 1.0 References: <573E45C1-31A4-4885-A00C-1A2171159A2A@gmail.com> <28b82ab2-5721-4e7c-bf71-979c3f198a2e@app.fastmail.com> <634F4A5D-9D38-4F9D-BC1C-70815CBB5089@gmail.com> In-Reply-To: <634F4A5D-9D38-4F9D-BC1C-70815CBB5089@gmail.com> From: SATYANARAYANA NARLAPURAM Date: Wed, 22 Apr 2026 23:47:39 -0700 X-Gm-Features: AQROBzClBPZ25I9_1FjK8IMhtzZ9AIO6tdhbNoKyoB9CvvHqQ6BIEfsMFeMZXWk Message-ID: Subject: Re: Fix a server crash problem from pg_get_database_ddl To: Chao Li , Tom Lane Cc: Japin Li , Jack Bonatakis , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000028a51f06501b076a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000028a51f06501b076a Content-Type: multipart/alternative; boundary="00000000000028a51d06501b0768" --00000000000028a51d06501b0768 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Adding Tom to the thread explicitly to seek his opinion. On Wed, Apr 15, 2026 at 6:36=E2=80=AFPM Chao Li wr= ote: > > > > On Apr 16, 2026, at 09:23, Japin Li wrote: > > > > On Wed, 15 Apr 2026 at 20:44, "Jack Bonatakis" wrote: > >> I have reproduced this error against the current master: > >> > >> ``` > >> CREATE TABLESPACE ts1 LOCATION '/workspace/tablespaces/pg_bug_ts1'; > >> CREATE DATABASE db1 TABLESPACE ts1; > >> DELETE FROM pg_tablespace WHERE spcname =3D 'ts1'; > >> SELECT * FROM pg_get_database_ddl('db1'::regdatabase); > >> > >> server closed the connection unexpectedly > >> This probably means the server terminated abnormally > >> before or while processing the request. > >> The connection to the server was lost. Attempting reset: Failed. > >> ``` > >> Backend logs show: > >> > >> ``` > >> [1] LOG: client backend (PID 15420) was terminated by signal 11: > Segmentation fault > >> [1] DETAIL: Failed process was running: SELECT * FROM > pg_get_database_ddl('db1'::regdatabase); > >> [1] LOG: terminating any other active server processes > >> ``` > >> After applying the patch: > >> > >> ``` > >> SELECT * FROM pg_get_database_ddl('db1'::regdatabase); > >> ERROR: tablespace with OID 16393 does not exist > >> HINT: To recover, try ALTER DATABASE ... SET TABLESPACE ... to a vali= d > tablespace. > >> ``` > >> and backend logs show: > >> > >> ``` > >> [56] ERROR: tablespace with OID 16393 does not exist > >> [56] HINT: To recover, try ALTER DATABASE ... SET TABLESPACE ... to a > valid tablespace. > >> [56] STATEMENT: SELECT * FROM pg_get_database_ddl('db1'::regdatabase)= ; > >> ``` > >> All tests pass. > >> > >> The only note I'd have on the code change is that there is no > accompanying test. It seems like a TAP test would be > >> reasonable, but I am quite new and will defer to whether you think > that's the right call or even necessary. > >> > >> Jack > > > > This seems similar to [1]. Could you please confirm? > > > > [1] > https://www.postgresql.org/message-id/CAJTYsWXcd324VELk%3D9KdsfTsua9So3Ye= xqv7N3B23h9zAUD40g%40mail.gmail.com > . > > > > -- > > Regards, > > Japin Li > > ChengDu WenWu Information Technology Co., Ltd. > > > > > > Thanks for printing out that. Yes, they are similar. > > I agree with what Tom said in [2]: > ``` > This is not a bug. This is a superuser intentionally breaking > the system by corrupting the catalogs. There are any number > of ways to cause trouble with ill-advised manual updates to a > catalog table. Try, eg, "DELETE FROM pg_proc" (... but not in > a database you care about). > ``` > > So, let me take back this patch. > > [2] https://www.postgresql.org/message-id/1538113.1768921841@sss.pgh.pa.u= s In this case, it is a very corner case but not something superuser intentionally breaks. For example, a concurrent tablespace drop + database ddl to assign a different tablespace or default. We aren't acquiring Access Share lock on the DB in this function (intentional) so it is a good practice to do the null checks. Of course, it makes more sense to add this comment while doing a code review. I will let Tom and others chime in with their thoughts on fixing this. Attached an injection point test to show the race. Not intended to commit. Thanks, Satya --00000000000028a51d06501b0768 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Adding Tom to the= =C2=A0thread explicitly to seek his opinion.

On = Wed, Apr 15, 2026 at 6:36=E2=80=AFPM Chao Li <li.evan.chao@gmail.com> wrote:


> On Apr 16, 2026, at 09:23, Japin Li <japinli@hotmail.com> wrote:
>
> On Wed, 15 Apr 2026 at 20:44, "Jack Bonatakis" <jack@bonatak.is> wrote= :
>> I have reproduced this error against the current master:
>>
>> ```
>> CREATE TABLESPACE ts1 LOCATION '/workspace/tablespaces/pg_bug_= ts1';
>> CREATE DATABASE db1 TABLESPACE ts1;
>> DELETE FROM pg_tablespace WHERE spcname =3D 'ts1';
>> SELECT * FROM pg_get_database_ddl('db1'::regdatabase);
>>
>> server closed the connection unexpectedly
>> This probably means the server terminated abnormally
>> before or while processing the request.
>> The connection to the server was lost. Attempting reset: Failed. >> ```
>> Backend logs show:
>>
>> ```
>> [1] LOG:=C2=A0 client backend (PID 15420) was terminated by signal= 11: Segmentation fault
>> [1] DETAIL:=C2=A0 Failed process was running: SELECT * FROM pg_get= _database_ddl('db1'::regdatabase);
>> [1] LOG:=C2=A0 terminating any other active server processes
>> ```
>> After applying the patch:
>>
>> ```
>> SELECT * FROM pg_get_database_ddl('db1'::regdatabase);
>> ERROR:=C2=A0 tablespace with OID 16393 does not exist
>> HINT:=C2=A0 To recover, try ALTER DATABASE ... SET TABLESPACE ... = to a valid tablespace.
>> ```
>> and backend logs show:
>>
>> ```
>> [56] ERROR:=C2=A0 tablespace with OID 16393 does not exist
>> [56] HINT:=C2=A0 To recover, try ALTER DATABASE ... SET TABLESPACE= ... to a valid tablespace.
>> [56] STATEMENT:=C2=A0 SELECT * FROM pg_get_database_ddl('db1&#= 39;::regdatabase);
>> ```
>> All tests pass.
>>
>> The only note I'd have on the code change is that there is no = accompanying test. It seems like a TAP test would be
>> reasonable, but I am quite new and will defer to whether you think= that's the right call or even necessary.
>>
>> Jack
>
> This seems similar to [1]. Could you please confirm?
>
> [1] https://www.postgresql.org/message-id/CAJTYsWXcd324VELk%3D= 9KdsfTsua9So3Yexqv7N3B23h9zAUD40g%40mail.gmail.com.
>
> --
> Regards,
> Japin Li
> ChengDu WenWu Information Technology Co., Ltd.
>
>

Thanks for printing out that. Yes, they are similar.

I agree with what Tom said in [2]:
```
This is not a bug. This is a superuser intentionally breaking
the system by corrupting the catalogs. There are any number
of ways to cause trouble with ill-advised manual updates to a
catalog table. Try, eg, "DELETE FROM pg_proc" (... but not in
a database you care about).
```

So, let me take back this patch.

[2] https://www.postgresql.org= /message-id/1538113.1768921841@sss.pgh.pa.us

In this case, it is a very corner case but not something superuser in= tentionally breaks.
For example, a concurrent tablespace drop=C2= =A0+ database ddl to assign a different tablespace or default.
We= aren't acquiring Access Share lock on the DB in this function (intenti= onal) so it is a good practice
to do the null checks. Of course, = it makes more sense to add this comment while doing a code review.
I will let Tom and others chime in with their thoughts on fixing this.

Attached an injection point test to show the race. N= ot intended to commit.

Thanks,
Satya
--00000000000028a51d06501b0768-- --00000000000028a51f06501b076a Content-Type: application/octet-stream; name="0002-Test-pg_get_database_ddl-race-with-concurrent-tablespace-drop.patch" Content-Disposition: attachment; filename="0002-Test-pg_get_database_ddl-race-with-concurrent-tablespace-drop.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mob4cfhd0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMKaW5kZXggZDgzY2RhMzMuLmI1N2U3ZDI3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZGRsdXRpbHMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9k YXRldGltZS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCkBAIC05ODQsOSArOTg1LDEzIEBAIHBnX2dldF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwo T2lkIGRiaWQsIGJvb2wgcHJldHR5LAogCS8qIFRBQkxFU1BBQ0UgKi8KIAlpZiAoIW5vX3RhYmxl c3BhY2UgJiYgT2lkSXNWYWxpZChkYmZvcm0tPmRhdHRhYmxlc3BhY2UpKQogCXsKLQkJY2hhcgkg ICAqc3BjbmFtZSA9IGdldF90YWJsZXNwYWNlX25hbWUoZGJmb3JtLT5kYXR0YWJsZXNwYWNlKTsK KwkJY2hhcgkgICAqc3BjbmFtZTsKIAotCQlpZiAocGdfc3RyY2FzZWNtcChzcGNuYW1lLCAicGdf ZGVmYXVsdCIpICE9IDApCisJCUlOSkVDVElPTl9QT0lOVCgicGdfZ2V0X2RhdGFiYXNlX2RkbC1i ZWZvcmUtZ2V0X3RhYmxlc3BhY2VfbmFtZSIsIE5VTEwpOworCQlzcGNuYW1lID0gZ2V0X3RhYmxl c3BhY2VfbmFtZShkYmZvcm0tPmRhdHRhYmxlc3BhY2UpOworCisJCWlmIChzcGNuYW1lICE9IE5V TEwgJiYKKwkJCXBnX3N0cmNhc2VjbXAoc3BjbmFtZSwgInBnX2RlZmF1bHQiKSAhPSAwKQogCQkJ YXBwZW5kX2RkbF9vcHRpb24oJmJ1ZiwgcHJldHR5LCA0LCAiVEFCTEVTUEFDRSA9ICVzIiwKIAkJ CQkJCQkgIHF1b3RlX2lkZW50aWZpZXIoc3BjbmFtZSkpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEyX2RkbHV0aWxzX3RhYmxlc3BhY2VfcmFjZS5wbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEyX2RkbHV0aWxzX3RhYmxlc3BhY2VfcmFj ZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNzZkMzFhZmIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMl9kZGx1dGlsc190 YWJsZXNwYWNlX3JhY2UucGwKQEAgLTAsMCArMSwxMTEgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIw MjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBmb3IgcmFj ZSBjb25kaXRpb24gaW4gcGdfZ2V0X2RhdGFiYXNlX2RkbCgpIHdoZW4gYSB0YWJsZXNwYWNlCisj IGlzIGRyb3BwZWQgY29uY3VycmVudGx5LgorIworIyBwZ19nZXRfZGF0YWJhc2VfZGRsKCkgcmVh ZHMgdGhlIGRhdGFiYXNlJ3MgZGF0dGFibGVzcGFjZSBPSUQgZnJvbSB0aGUKKyMgc3lzY2FjaGUs IHRoZW4gbGF0ZXIgY2FsbHMgZ2V0X3RhYmxlc3BhY2VfbmFtZSgpIHdoaWNoIGRvZXMgYSBmcmVz aAorIyBjYXRhbG9nIHNjYW4uICBJZiB0aGUgdGFibGVzcGFjZSBpcyBkcm9wcGVkIGJldHdlZW4g dGhlc2UgdHdvIG9wZXJhdGlvbnMsCisjIGdldF90YWJsZXNwYWNlX25hbWUoKSByZXR1cm5zIE5V TEwgYW5kIHRoZSB1bnBhdGNoZWQgY29kZSBwYXNzZXMgTlVMTAorIyB0byBwZ19zdHJjYXNlY21w KCksIGNhdXNpbmcgYSBTSUdTRUdWLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitwbGFuIHNraXBfYWxsID0+ICdJ bmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCcKKyAgdW5sZXNzICRF TlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMnOworCisjIE5vZGUgaW5pdGlhbGl6 YXRpb24KK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7 Ciskbm9kZS0+aW5pdCgpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAor CSJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSAnaW5qZWN0aW9uX3BvaW50cyciKTsKKyRub2Rl LT5zdGFydCgpOworCisjIENoZWNrIGlmIHRoZSBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBp cyBhdmFpbGFibGUKK3BsYW4gc2tpcF9hbGwgPT4gJ0V4dGVuc2lvbiBpbmplY3Rpb25fcG9pbnRz IG5vdCBpbnN0YWxsZWQnCisgIHVubGVzcyAkbm9kZS0+Y2hlY2tfZXh0ZW5zaW9uKCdpbmplY3Rp b25fcG9pbnRzJyk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRF TlNJT04gaW5qZWN0aW9uX3BvaW50czsnKTsKKworIyBDcmVhdGUgdGFibGVzcGFjZSBhbmQgZGF0 YWJhc2UgdXNpbmcgaXQKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcVsKK1NFVCBhbGxv d19pbl9wbGFjZV90YWJsZXNwYWNlcyA9IG9uOworQ1JFQVRFIFRBQkxFU1BBQ0UgcmFjZV90cyBM T0NBVElPTiAnJzsKK10pOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUg REFUQUJBU0UgcmFjZV9kYiBUQUJMRVNQQUNFIHJhY2VfdHM7Iik7CisKKyMgVmVyaWZ5IHNldHVw CitteSAkcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc3Bj bmFtZSBGUk9NIHBnX2RhdGFiYXNlIGQgSk9JTiBwZ190YWJsZXNwYWNlIHQgIgorCS4gIk9OIGQu ZGF0dGFibGVzcGFjZSA9IHQub2lkIFdIRVJFIGRhdG5hbWUgPSAncmFjZV9kYic7Iik7Citpcygk cmVzdWx0LCAncmFjZV90cycsICdyYWNlX2RiIGlzIG9uIHJhY2VfdHMgdGFibGVzcGFjZScpOwor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitub3RlKCdUZXN0OiBwZ19nZXRfZGF0YWJhc2VfZGRsIHdp dGggY29uY3VycmVudCB0YWJsZXNwYWNlIGRyb3AnKTsKKworIyBBdHRhY2ggaW5qZWN0aW9uIHBv aW50IHRoYXQgcGF1c2VzIGJlZm9yZSBnZXRfdGFibGVzcGFjZV9uYW1lKCkKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCIKKwku ICIncGdfZ2V0X2RhdGFiYXNlX2RkbC1iZWZvcmUtZ2V0X3RhYmxlc3BhY2VfbmFtZScsICd3YWl0 Jyk7Iik7CisKKyMgU2Vzc2lvbiBBOiBjYWxsIHBnX2dldF9kYXRhYmFzZV9kZGwgLSB3aWxsIGJs b2NrIGF0IGluamVjdGlvbiBwb2ludAorbXkgJHNlc3Npb25fYSA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJ3Bvc3RncmVzJyk7CisKKyRzZXNzaW9uX2EtPnF1ZXJ5X3VudGlsKAorCXFyLy8sIHFb CitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmFjZV9kYic6OnJlZ2RhdGFiYXNlKTsKK1xn CitdKTsKKworIyBXYWl0IGZvciBTZXNzaW9uIEEgdG8gcmVhY2ggdGhlIGluamVjdGlvbiBwb2lu dAorJG5vZGUtPndhaXRfZm9yX2V2ZW50KCdjbGllbnQgYmFja2VuZCcsCisJJ3BnX2dldF9kYXRh YmFzZV9kZGwtYmVmb3JlLWdldF90YWJsZXNwYWNlX25hbWUnKTsKKworbm90ZSgnU2Vzc2lvbiBB IGlzIHBhdXNlZCBiZWZvcmUgZ2V0X3RhYmxlc3BhY2VfbmFtZSgpJyk7CisKKyMgU2Vzc2lvbiBC OiBtb3ZlIGRhdGFiYXNlIG9mZiB0aGUgdGFibGVzcGFjZSBhbmQgZHJvcCBpdAorJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBEQVRBQkFTRSByYWNlX2RiIFNFVCBUQUJMRVNQ QUNFIHBnX2RlZmF1bHQ7Iik7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFU1BBQ0UgcmFjZV90czsiKTsKKworIyBWZXJpZnkgdGhlIHRhYmxlc3BhY2UgaXMgZ29uZQor JHJlc3VsdCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfdGFibGVzcGFjZSBXSEVSRSBzcGNuYW1lID0gJ3JhY2VfdHMnOyIpOworaXMoJHJl c3VsdCwgJzAnLCAndGFibGVzcGFjZSByYWNlX3RzIGhhcyBiZWVuIGRyb3BwZWQnKTsKKworbm90 ZSgnV2FraW5nIHVwIFNlc3Npb24gQSAtIGdldF90YWJsZXNwYWNlX25hbWUoKSB3aWxsIHJldHVy biBOVUxMJyk7CisKKyMgV2FrZSB1cCBTZXNzaW9uIEEgLSBpdCB3aWxsIG5vdyBjYWxsIGdldF90 YWJsZXNwYWNlX25hbWUoKSB3aXRoIGEKKyMgc3RhbGUgT0lEIHRoYXQgbm8gbG9uZ2VyIGV4aXN0 cy4gIFdpdGhvdXQgdGhlIE5VTEwgY2hlY2sgZml4LCB0aGlzCisjIGNyYXNoZXMgd2l0aCBTSUdT RUdWIGluIHBnX3N0cmNhc2VjbXAoTlVMTCwgInBnX2RlZmF1bHQiKS4KKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCIKKwkuICIn cGdfZ2V0X2RhdGFiYXNlX2RkbC1iZWZvcmUtZ2V0X3RhYmxlc3BhY2VfbmFtZScpOyIpOworCisj IENvbGxlY3QgcmVzdWx0IGZyb20gU2Vzc2lvbiBBCitteSAkb3V0cHV0ID0gJHNlc3Npb25fYS0+ cXVlcnlfc2FmZShxW1xnXSk7Ciskc2Vzc2lvbl9hLT5xdWl0KCk7CisKKyMgVGhlIERETCBzaG91 bGQgc3VjY2VlZCBhbmQgTk9UIGluY2x1ZGUgVEFCTEVTUEFDRSAoc2luY2UgdGhlIGRhdGFiYXNl CisjIGlzIG5vdyBvbiBwZ19kZWZhdWx0KQorbGlrZSgkb3V0cHV0LCBxci9DUkVBVEUgREFUQUJB U0UgcmFjZV9kYi8sCisJJ3BnX2dldF9kYXRhYmFzZV9kZGwgY29tcGxldGVkIHdpdGhvdXQgY3Jh c2gnKTsKK3VubGlrZSgkb3V0cHV0LCBxci9UQUJMRVNQQUNFLywKKwknRERMIG91dHB1dCBkb2Vz IG5vdCBpbmNsdWRlIGRyb3BwZWQgdGFibGVzcGFjZScpOworCisjIERldGFjaCBpbmplY3Rpb24g cG9pbnQKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9w b2ludHNfZGV0YWNoKCIKKwkuICIncGdfZ2V0X2RhdGFiYXNlX2RkbC1iZWZvcmUtZ2V0X3RhYmxl c3BhY2VfbmFtZScpOyIpOworCisjIENsZWFuIHVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIERBVEFCQVNFIHJhY2VfZGI7Iik7CisKK2RvbmVfdGVzdGluZygpOwo= --00000000000028a51f06501b076a--