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 1w4qUk-002c3g-1J for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 01:23:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4qUi-003TMc-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 01:23:44 +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 1w4qUi-003TMT-05 for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 01:23:44 +0000 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4qUf-00000000nHS-3VrE for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 01:23:44 +0000 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5a281b091c2so864588e87.0 for ; Mon, 23 Mar 2026 18:23:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774315421; cv=none; d=google.com; s=arc-20240605; b=Dmt0Mf7u6wz7UGvSDuvbXAeQ0xjofKspVeGYpH7V2RBrvNFW0Mt+qBvg4YLcoHy8nB Xq+mKmkwdK9zWGexZ5Pjxw+SR+0KCmHKwa1Be3TgwhgJcjQLiaRJuu3YSyUl2C9odkUD woM9l+IUTmHx2yiiugxGPf56z4jUwPK14K6AFnRGQpPli5S3K+1wNVuX+9iELOgriGcu J43YZC2htgHm77I/DpxrrUJ2phLPF4gcJU5xq247padKi36kowLHEL5G5yfhACPVbd65 acEY6lTn3JLiSn25tmpc1DNJGbjo6KgkQyGo9sKqwcHWTOap+eaBAB4shr49CW+gZ0Bn TyoA== 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=gzOXCru1YIK66kvxqEuTYMB9WtUbM/6txKVQR+xy2zY=; fh=vE0OgdBAHffVRmk8tLZGTOd7qMEWwx7qATDg2yjHHkI=; b=MHxTItAbFMwC3ni1UKmsuTJIYWhmHAkg6/rHQYwK8YCRXjeVY74VhIK97ZGB+cfpmH JT+5E8hakgT7rVPDRbWUq+vC0LTXegVGE5dx/E8O7B5x6Qdup7pUMObki1BcQUOTYOlE utgQ+jbGMHkfA7iFSg6jD3uP6WRFS3HjssN7Ryd7dgp2FU2hC6p0cOZulX2OGJl0YO7K ncAxeqfS11SEHgrAxUfSNSOxXBb7spTPLDE39h3KmZGsoRHd2YhQErYXuew/kxd1RjOU C2xBthf1EzLgxuCh/28C+E5pxE9R7Knwgjbw3PdnBnTxBoy36rGNN2bIJ3VJcBh46j6O jnfw==; 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=1774315421; x=1774920221; 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=gzOXCru1YIK66kvxqEuTYMB9WtUbM/6txKVQR+xy2zY=; b=kH1d62FK82krFJMis91maxn1b/AdbzhKZ6Az5TZc0FRXW70TqCfRX0RM7ZNrzj+N1c feZeeGHbNySbhg1pkDMik+V1cy8k1Sn3r49SP14kFuLkS+bXqfoDbbXNOn0sXB/EUlxa CyGHZuNnBHHKkB1GoiqBBOIC/jgkMUVQD2bpeuLPny5FrG4FQusEfcHVXSWEuvR2c1jG A9jWFAAXrB37AMnI0hP8FRl/K0Ur9nDSA424Mu7KJ8Gt7wIMSjzyDyYPpHFARMoMkM0Z 4LjsYNMze0ZH4TzCVeiQQdG0s/keT31YOtiscfcmsbtdrRwMqgdk5OmZIp5Et2d0h+H9 CyFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774315421; x=1774920221; 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=gzOXCru1YIK66kvxqEuTYMB9WtUbM/6txKVQR+xy2zY=; b=maaFpIOcfYHWQYRKQFYr5UDzhYXm6Wa45hsaQYNaAGVDMjIBceZaahlLbAR0Wz/1Ny Wfh+juMot3mcfAjQq3KgQKQm190ZkulpVX/FZf4L8K/jm1Mo8qplzdaFDEd/pgd27PK/ XDnZ448ct4XBZ905GBzQfEs7MvkC8TP5G+obZgPsY/GxM4l1BU8ke4RV3rpJ11LE6QIl p/ibnZanrYNb9nsbVdF/Vj2aDYcxyHByHIE+5E8tSVNfdkU3Yzx+x7M06ZiNQIwoHizL cusNPD6ZJY3aEFWot9dGsqFsTgUYyWreuoMETrnDFzYPPxTnBChd3cIKRVzdeyuOn2Nh sWLA== X-Forwarded-Encrypted: i=1; AJvYcCULYL9yVbhSJfukjDd7iUrV1pV5Dk7DV8V0kwYXXeWzc7AlbLu/aO311mYRwxJSzjUKmLPBRl9CAAqdzuf9@lists.postgresql.org X-Gm-Message-State: AOJu0YznN3q1DvhO6VFExh/pzjKQ0i+aq72Nscy6w5FDDdBuODwuZdNg hNbVeKRkrVyGXcuKyJvUGbgxpmkck6iwmvll167Xx6wocpLYtj4T0Y7b0Pl9oNBKviUxw7v936g Q8/xWMqV4Yf4yNfiE8gFQBI8bpgcm5XM= X-Gm-Gg: ATEYQzzYMyht+3DhHOeicLVpNDgjDuh9tSXs/ymKjLVGgV6A97JWqBBQ+J3fBCCXL9K Kx5UzbaoDTas9TYmauPppfMlKPeehw6ttTnqzy23TBzZgsHpu3EhmQSrnfR48+LP6MyiEoe5SFG Cm19OykwgGmWz+chDkLMKD65IG66IJb2Xz0HWRPBAiJqLpXppT7IT9SQRxIKm9hhULJ+anu/b/R 539l3LGzx3U65eagbmQjp5ze+sEjCcexOG2Kd0FPwl8kGX3nMWZifxznxQQmDIlb9flboYeB620 zcBg X-Received: by 2002:a05:6512:3ba5:b0:5a1:337b:4af2 with SMTP id 2adb3069b0e04-5a285b20c0bmr4081094e87.10.1774315420671; Mon, 23 Mar 2026 18:23:40 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Gyan Sreejith Date: Mon, 23 Mar 2026 21:23:29 -0400 X-Gm-Features: AaiRm52QwS4bBMzyE_M-H7Bak8t4M3CNiOASY3sWot1ywIsItjVSO-XtG4ll2wM Message-ID: Subject: Re: [Proposal] Adding Log File Capability to pg_createsubscriber To: =?UTF-8?B?S3Vyb2RhLCBIYXlhdG8v6buS55SwIOmavOS6ug==?= Cc: Amit Kapila , shveta malik , Shlok Kyal , vignesh C , Euler Taveira , "pgsql-hackers@lists.postgresql.org" , Peter Smith Content-Type: multipart/mixed; boundary="0000000000005e77a1064dbb0083" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005e77a1064dbb0083 Content-Type: multipart/alternative; boundary="0000000000005e779f064dbb0081" --0000000000005e779f064dbb0081 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 23, 2026 at 2:24=E2=80=AFAM Chao Li wr= ote: + /* Build timestamp directory path */ + len =3D snprintf(logdir, MAXPGPATH, "%s/%s", log_basedir, timestamp= ); + + if (len >=3D MAXPGPATH) + pg_fatal("directory path for log files, %s/%s, is too long"= , + logdir, timestamp); ``` > In the pg_fatal call, I believe logdir should be log_basedir. We are writing into logdir, and the if will be true only if it is too long. Hence we should be checking logdir. > The biggest problem I see with this patch is here. internal_log_file_write doesn=E2=80=99t handle =E2=80=9C%m=E2=80=9D. I thin= k we can check the implementation of pg_log_generic_v how %m is handled. The key code snippet is: ``` > errno =3D save_errno; > va_copy(ap2, ap); > required_len =3D vsnprintf(NULL, 0, fmt, ap2) + 1; > va_end(ap2); ``` > Where, vsnprintf points to pg_vsnprintf, and pg_vsnprintf calls dopr to handle %m. I have saved and restored errno similar to that. The code snippet you pointed out is, as far as I understand, where they are calculating how much space to allocate (including the \0 at the end). I think it will be handled automatically as long as errno is not overwritten - which it will now be. Thank you! >The other problem is, with internal_log_file_write, HINT, DETAIL prefix are no longer printed, is that intentional? I could add a switch-case to print it out. Is that important? What do you think? I have fixed the rest of your suggestions. Thank you, Chao Li! On Mon, Mar 23, 2026 at 5:55=E2=80=AFAM shveta malik wrote: > We can get rid of below alignment related changes in unrelated test parts= . They are added when I run pgperltidy. Anyone else trying to change the file after this would see the same thing if we don't change it. Should I move it into another patch? I have fixed the rest of it. Thank you, Shveta Malik! On Mon, Mar 23, 2026 at 5:55=E2=80=AFAM Kuroda, Hayato/=E9=BB=92=E7=94=B0 = =E9=9A=BC=E4=BA=BA < kuroda.hayato@fujitsu.com> wrote: > 01. > Found that pg_log_generic_v() has some prefix but > internal_log_file_write() does not. > It means output strings are not the same. For example, on terminal: > > ``` > pg_createsubscriber: error: standby server is running > pg_createsubscriber: hint: Stop the standby server and try again. > ``` > > But on log file: > ``` > standby server is running > Stop the standby server and try again. > ``` > > It's because pg_log_generic_v() has the format like below. I.e., the > program name > is printed at the begining, and some prefix also exists in some cases. > > ${program name}: {error: |warning: |detail: |hint: } content > > I cannot find such a difference on pg_upgrade: no prefix exists in any > cases. > So, what should be here? My preference is to basically follow > pg_log_generic_v() > But remove the program name. How about others? > I haven't changed the output of pg_log_generic_v() yet. Shall I add the prefix to the output? I have done the rest of your suggestions. Thank you! Regards, Gyan Sreejith --0000000000005e779f064dbb0081 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Mar 23, 2026 at 2:24=E2=80=AFAM Chao Li <li.evan.chao@gmail.com= > wrote:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Build timestamp dir= ectory path */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0len =3D snprintf(logdir, MAXP= GPATH, "%s/%s", log_basedir, timestamp);
+
+=C2=A0 =C2=A0 = =C2=A0 =C2=A0if (len >=3D MAXPGPATH)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0pg_fatal("directory path for log files, %s/%s,= is too long",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 logdir, time= stamp);
```
> In the pg_fatal call, I believe logdir should be log= _basedir.
We are writing into logdir, and the if will be true onl= y if it is too long. Hence we should be checking logdir.

> The biggest problem I see with this patch is here. internal_log= _file_write doesn=E2=80=99t handle =E2=80=9C%m=E2=80=9D. I think we can che= ck the implementation of pg_log_generic_v how %m is handled. The key code s= nippet is:
```
> errno =3D save_errno;

> va_copy(ap2, ap= );
> required_len =3D vsnprintf(NULL, 0, fmt, ap2) + 1;
> va_en= d(ap2);
```
> Where, vsnprintf points to pg_vsnprintf, and pg_vsnp= rintf calls dopr to handle %m.
I have saved and restored errno si= milar to that. The code snippet you pointed out is, as far as I understand,= where they are calculating how much space to allocate (including the \0 at= the end). I think it will be handled automatically as long as errno is not= overwritten - which it will now be. Thank you!

&g= t;The other problem is, with internal_log_file_write, HINT, DETAIL prefix a= re no longer printed, is that intentional?
I could add a switch-c= ase to print it out. Is that important? What do you think?

I have fixed the rest of your suggestions. Thank you,=C2=A0Chao Li= !

On Mon, Mar 23, 2026 at 5:55=E2=80=AFAM shveta m= alik <shveta= .malik@gmail.com> wrote:

> We can get ri= d of below alignment related changes in unrelated test parts.
The= y are added when I run pgperltidy. Anyone else trying to change the file af= ter this would see the same thing if we don't change it. Should I move = it into another patch?

I have fixed the rest of it= . Thank you, Shveta Malik!

On Mon, Mar 23, 2026 at 5:55=E2=80=AFAM Kuroda, H= ayato/=E9=BB=92=E7=94=B0 =E9=9A=BC=E4=BA=BA <kuroda.hayato@fujitsu.com> wrote= :
01.
Found that pg_log_generic_v() has some prefix but internal_log_file_write()= does not.
It means output strings are not the same. For example, on terminal:

```
pg_createsubscriber: error: standby server is running
pg_createsubscriber: hint: Stop the standby server and try again.
```

But on log file:
```
standby server is running
Stop the standby server and try again.
```

It's because pg_log_generic_v() has the format like below. I.e., the pr= ogram name
is printed at the begining, and some prefix also exists in some cases.

=C2=A0 =C2=A0 =C2=A0 =C2=A0 ${program name}: {error: |warning: |detail: |hi= nt: } content

I cannot find such a difference on pg_upgrade: no prefix exists in any case= s.
So, what should be here? My preference is to basically follow pg_log_generi= c_v()
But remove the program name. How about others?

I haven't changed the output of pg_log_generic_v() yet. Shall I= add the prefix to the output? I have done the rest of your suggestions. Th= ank you!

Regards,
Gyan Sreejith=C2=A0
--0000000000005e779f064dbb0081-- --0000000000005e77a1064dbb0083 Content-Type: application/x-patch; name="v17-0001-Add-a-new-argument-l-logdir-to-pg_createsubscrib.patch" Content-Disposition: attachment; filename="v17-0001-Add-a-new-argument-l-logdir-to-pg_createsubscrib.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3xkhki0 RnJvbSBiODNmOTZlYjI2ZjI2MTYyZTA2NTQyYzRmMDUyMjZjY2E2YjU2MTNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHeWFuIFNyZWVqaXRoIDxneWFuLnNyZWVqaXRoQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyMyBNYXIgMjAyNiAyMToyMTo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djE3XSBBZGQgYSBuZXcgYXJndW1lbnQgLWwgPGxvZ2Rpcj4gdG8gcGdfY3JlYXRlc3Vic2NyaWJl ci4KCkVuYWJsaW5nIHRoZSBvcHRpb24gdG8gd3JpdGUgbWVzc2FnZXMgdG8gbG9nIGZpbGVzIGlu IHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgpBIG5ldyBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpZiBy ZXF1aXJlZC4gQSBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoIHRpbWVzdGFtcCBhcyBpdHMg bmFtZSwgYW5kIGl0IHdpbGwgY29udGFpbiB0d28gbmV3IGxvZ2ZpbGVzOgoxLiBwZ19jcmVhdGVz dWJzY3JpYmVyX3NlcnZlci5sb2cgIC0gY2FwdHVyZXMgbWVzc2FnZXMgcmVsYXRlZCB0byBzdGFy dGluZyBhbmQgc3RvcHBpbmcgdGhlIHN0YW5kYnkgc2VydmVyLgoyLiBwZ19jcmVhdGVzdWJzY3Jp YmVyX2ludGVybmFsLmxvZyAtIGNhcHR1cmVzIGludGVybmFsIGRpYWdub3N0aWMgb3V0cHV0IGZy b20gcGdfY3JlYXRlc3Vic2NyaWJlci4KCkZvciBleGFtcGxlLCBpZiB3ZSBzcGVjaWZ5IC1sIGFi YyBhcyBhbiBhcmd1bWVudCwgYW5kIGlmIHRoZSB0aW1lc3RhbXAgb24gcnVubmluZyBpdCBpcyAy MDI2MDExOVQyMDQzMTcuMjA0LCBhIGRpcmVjdG9yeSBhYmMgaXMgY3JlYXRlZCBpZiBpdCBkb2Vz bid0IGV4aXN0IGFscmVhZHksIHdpdGggMjAyNjAxMTlUMjA0MzE3LjIwNCBhcyBpdHMgc3ViZGly ZWN0b3J5IGFuZCBpdCB3aWxsIGNvbnRhaW4gdGhlIHR3byBsb2cgZmlsZXMgcGdfY3JlYXRlc3Vi c2NyaWJlcl9zZXJ2ZXIubG9nIGFuZCBwZ19jcmVhdGVzdWJzY3JpYmVyX2ludGVybmFsLmxvZwot LS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sICAgICB8ICAyOSAr KysKIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMgICB8IDE3NCAr KysrKysrKysrKysrKysrKy0KIC4uLi90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsICAgICAg ICAgICAgICB8ICA0OCArKysrLQogMyBmaWxlcyBjaGFuZ2VkLCAyMzkgaW5zZXJ0aW9ucygrKSwg MTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVz dWJzY3JpYmVyLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dt bAppbmRleCA2ZTE3Y2VlMThlYi4uNWFjNjFjN2I1NTggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdf Y3JlYXRlc3Vic2NyaWJlci5zZ21sCkBAIC0xMzYsNiArMTM2LDM1IEBAIFBvc3RncmVTUUwgZG9j dW1lbnRhdGlvbgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PG9wdGlvbj4tbCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+ZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAg IDx0ZXJtPjxvcHRpb24+LS1sb2dkaXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRp cmVjdG9yeTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+Cisg ICAgICA8cGFyYT4KKyAgICAgICBTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBsb2cgZGlyZWN0b3J5 LiBBIG5ldyBkaXJlY3RvcnkgaXMgY3JlYXRlZCB3aXRoCisgICAgICAgdGhpcyBuYW1lIGlmIGl0 IGRvZXMgbm90IGV4aXN0LiBBIHN1YmRpcmVjdG9yeSB3aXRoIGEgdGltZXN0YW1wCisgICAgICAg aW5kaWNhdGluZyB0aGUgdGltZSBhdCB3aGljaCA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2Ny aWJlcjwvYXBwbGljYXRpb24+CisgICAgICAgd2FzIHJ1biB3aWxsIGJlIGNyZWF0ZWQuIFRoZSBm b2xsb3dpbmcgdHdvIGxvZyBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQgaW4KKyAgICAgICB0aGUgc3Vi ZGlyZWN0b3J5IHdpdGggYSB1bWFzayBvZiAwNzcgc28gdGhhdCBhY2Nlc3MgaXMgZGlzYWxsb3dl ZCB0bworICAgICAgIG90aGVyIHVzZXJzIGJ5IGRlZmF1bHQuCisgICAgICAgPGl0ZW1pemVkbGlz dD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZpbGVu YW1lPnBnX2NyZWF0ZXN1YnNjcmliZXJfc2VydmVyLmxvZzwvZmlsZW5hbWU+IHdoaWNoIGNhcHR1 cmVzIGxvZ3MKKyAgICAgICAgICByZWxhdGVkIHRvIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0aGUg c3RhbmRieSBzZXJ2ZXIsCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmaWxlbmFtZT5w Z19jcmVhdGVzdWJzY3JpYmVyX2ludGVybmFsLmxvZzwvZmlsZW5hbWU+IHdoaWNoIGNhcHR1cmVz CisgICAgICAgICAgaW50ZXJuYWwgZGlhZ25vc3RpYyBvdXRwdXQgKHZhbGlkYXRpb25zLCBjaGVj a3MsIGV0Yy4pCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg PC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT48b3B0aW9uPi1u PC9vcHRpb24+PC90ZXJtPgogICAgICA8dGVybT48b3B0aW9uPi0tZHJ5LXJ1bjwvb3B0aW9uPjwv dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3Jp YmVyLmMgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jCmluZGV4 IGIyYmM5ZGFlMGI4Li42M2ZmZDMzNzYxMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdf Y3JlYXRlc3Vic2NyaWJlci5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlICJjb21tb24v Y29ubmVjdC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5oIgorI2luY2x1 ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgog I2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3BnX3BybmcuaCIK QEAgLTQ5LDEwICs1MCwxNCBAQAogI2RlZmluZSBJTkNMVURFRF9DT05GX0ZJTEUJCQkicGdfY3Jl YXRlc3Vic2NyaWJlci5jb25mIgogI2RlZmluZSBJTkNMVURFRF9DT05GX0ZJTEVfRElTQUJMRUQJ SU5DTFVERURfQ09ORl9GSUxFICIuZGlzYWJsZWQiCiAKKyNkZWZpbmUgU0VSVkVSX0xPR19GSUxF X05BTUUgInBnX2NyZWF0ZXN1YnNjcmliZXJfc2VydmVyIgorI2RlZmluZSBJTlRFUk5BTF9MT0df RklMRV9OQU1FICJwZ19jcmVhdGVzdWJzY3JpYmVyX2ludGVybmFsIgorCiAvKiBDb21tYW5kLWxp bmUgb3B0aW9ucyAqLwogc3RydWN0IENyZWF0ZVN1YnNjcmliZXJPcHRpb25zCiB7CiAJY2hhcgkg ICAqY29uZmlnX2ZpbGU7CS8qIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworCWNoYXIJICAgKmxvZ19k aXI7CQkvKiBsb2cgZGlyZWN0b3J5IG5hbWUgKi8KIAljaGFyCSAgICpwdWJfY29ubmluZm9fc3Ry OwkvKiBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmcgKi8KIAljaGFyCSAgICpzb2NrZXRfZGly OwkJLyogZGlyZWN0b3J5IGZvciBVbml4LWRvbWFpbiBzb2NrZXQsIGlmIGFueSAqLwogCWNoYXIJ ICAgKnN1Yl9wb3J0OwkJLyogc3Vic2NyaWJlciBwb3J0IG51bWJlciAqLwpAQCAtMTQ5LDggKzE1 NCwxNCBAQCBzdGF0aWMgdm9pZCBnZXRfcHVibGlzaGVyX2RhdGFiYXNlcyhzdHJ1Y3QgQ3JlYXRl U3Vic2NyaWJlck9wdGlvbnMgKm9wdCwKIHN0YXRpYyB2b2lkIHJlcG9ydF9jcmVhdGVzdWJfbG9n KGVudW0gcGdfbG9nX2xldmVsLCBlbnVtIHBnX2xvZ19wYXJ0LAogCQkJCQkJCQkgY29uc3QgY2hh ciAqcGdfcmVzdHJpY3QgZm10LC4uLikKIAkJCXBnX2F0dHJpYnV0ZV9wcmludGYoMywgNCk7Citz dGF0aWMgdm9pZCByZXBvcnRfY3JlYXRlc3ViX2xvZ192KGVudW0gcGdfbG9nX2xldmVsIGxldmVs LCBlbnVtIHBnX2xvZ19wYXJ0IHBhcnQsCisJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBnX3Jlc3Ry aWN0IGZtdCwgdmFfbGlzdCBhcmdzKQorCQkJcGdfYXR0cmlidXRlX3ByaW50ZigzLCAwKTsKIHBn X25vcmV0dXJuIHN0YXRpYyB2b2lkIHJlcG9ydF9jcmVhdGVzdWJfZmF0YWwoY29uc3QgY2hhciAq cGdfcmVzdHJpY3QgZm10LC4uLikKIAkJCXBnX2F0dHJpYnV0ZV9wcmludGYoMSwgMik7CitzdGF0 aWMgdm9pZCBpbnRlcm5hbF9sb2dfZmlsZV93cml0ZShlbnVtIHBnX2xvZ19sZXZlbCBsZXZlbCwK KwkJCQkJCQkJCWNvbnN0IGNoYXIgKnBnX3Jlc3RyaWN0IGZtdCwgdmFfbGlzdCBhcmdzKQorCQkJ cGdfYXR0cmlidXRlX3ByaW50ZigyLCAwKTsKIAogI2RlZmluZQlXQUlUX0lOVEVSVkFMCTEJCS8q IDEgc2Vjb25kICovCiAKQEAgLTE3Miw2ICsxODMsOSBAQCBzdGF0aWMgcGdfcHJuZ19zdGF0ZSBw cm5nX3N0YXRlOwogc3RhdGljIGNoYXIgKnBnX2N0bF9wYXRoID0gTlVMTDsKIHN0YXRpYyBjaGFy ICpwZ19yZXNldHdhbF9wYXRoID0gTlVMTDsKIAorc3RhdGljIEZJTEUgKmludGVybmFsX2xvZ19m aWxlX2ZwID0gTlVMTDsJLyogRmlsZSBwdHIgdG8gbG9nIGFsbCBtZXNzYWdlcyB0byAqLworc3Rh dGljIGNoYXIgbG9nZGlyW01BWFBHUEFUSF07CS8qIERpcmVjdG9yeSBsb2cgZmlsZXMgYXJlIHB1 dCAoaWYgc3BlY2lmaWVkKSAqLworCiAvKiBzdGFuZGJ5IC8gc3Vic2NyaWJlciBkYXRhIGRpcmVj dG9yeSAqLwogc3RhdGljIGNoYXIgKnN1YnNjcmliZXJfZGlyID0gTlVMTDsKIApAQCAtMTgwLDgg KzE5NCwyOSBAQCBzdGF0aWMgYm9vbCBzdGFuZGJ5X3J1bm5pbmcgPSBmYWxzZTsKIHN0YXRpYyBi b29sIHJlY292ZXJ5X3BhcmFtc19zZXQgPSBmYWxzZTsKIAogLyoKLSAqIFJlcG9ydCBhIG1lc3Nh Z2Ugd2l0aCBhIGdpdmVuIGxvZyBsZXZlbAorICogUmVwb3J0IGEgbWVzc2FnZSB3aXRoIGEgZ2l2 ZW4gbG9nIGxldmVsIHRvIHN0ZGVyciBhbmQgbG9nIGZpbGUKKyAqIChpZiBzcGVjaWZpZWQpLgog ICovCitzdGF0aWMgdm9pZAorcmVwb3J0X2NyZWF0ZXN1Yl9sb2dfdihlbnVtIHBnX2xvZ19sZXZl bCBsZXZlbCwgZW51bSBwZ19sb2dfcGFydCBwYXJ0LAorCQkJCQkgICBjb25zdCBjaGFyICpwZ19y ZXN0cmljdCBmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87 CisKKwlpZiAoaW50ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwl7CisJCS8qIE91dHB1dCB0 byBib3RoIHN0ZGVyciBhbmQgdGhlIGxvZyBmaWxlICovCisJCXZhX2xpc3QJCWFyZ19jcHk7CisK KwkJdmFfY29weShhcmdfY3B5LCBhcmdzKTsKKwkJaW50ZXJuYWxfbG9nX2ZpbGVfd3JpdGUobGV2 ZWwsIGZtdCwgYXJnX2NweSk7CisJCXZhX2VuZChhcmdfY3B5KTsKKwkJLyogUmVzdG9yZSBlcnJu byBpbiBjYXNlIGludGVybmFsX2xvZ19maWxlX3dyaXRlIGNoYW5nZWQgaXQgKi8KKwkJZXJybm8g PSBzYXZlX2Vycm5vOworCX0KKwlwZ19sb2dfZ2VuZXJpY192KGxldmVsLCBwYXJ0LCBmbXQsIGFy Z3MpOworfQorCiBzdGF0aWMgdm9pZAogcmVwb3J0X2NyZWF0ZXN1Yl9sb2coZW51bSBwZ19sb2df bGV2ZWwgbGV2ZWwsIGVudW0gcGdfbG9nX3BhcnQgcGFydCwKIAkJCQkJIGNvbnN0IGNoYXIgKnBn X3Jlc3RyaWN0IGZtdCwuLi4pCkBAIC0xOTAsNyArMjI1LDcgQEAgcmVwb3J0X2NyZWF0ZXN1Yl9s b2coZW51bSBwZ19sb2dfbGV2ZWwgbGV2ZWwsIGVudW0gcGdfbG9nX3BhcnQgcGFydCwKIAogCXZh X3N0YXJ0KGFyZ3MsIGZtdCk7CiAKLQlwZ19sb2dfZ2VuZXJpY192KGxldmVsLCBwYXJ0LCBmbXQs IGFyZ3MpOworCXJlcG9ydF9jcmVhdGVzdWJfbG9nX3YobGV2ZWwsIHBhcnQsIGZtdCwgYXJncyk7 CiAKIAl2YV9lbmQoYXJncyk7CiB9CkBAIC0yMDUsNyArMjQwLDcgQEAgcmVwb3J0X2NyZWF0ZXN1 Yl9mYXRhbChjb25zdCBjaGFyICpwZ19yZXN0cmljdCBmbXQsLi4uKQogCiAJdmFfc3RhcnQoYXJn cywgZm10KTsKIAotCXBnX2xvZ19nZW5lcmljX3YoUEdfTE9HX0VSUk9SLCBQR19MT0dfUFJJTUFS WSwgZm10LCBhcmdzKTsKKwlyZXBvcnRfY3JlYXRlc3ViX2xvZ192KFBHX0xPR19FUlJPUiwgUEdf TE9HX1BSSU1BUlksIGZtdCwgYXJncyk7CiAKIAl2YV9lbmQoYXJncyk7CiAKQEAgLTMxMyw2ICsz NDgsMTMgQEAgY2xlYW51cF9vYmplY3RzX2F0ZXhpdCh2b2lkKQogCiAJaWYgKHN0YW5kYnlfcnVu bmluZykKIAkJc3RvcF9zdGFuZGJ5X3NlcnZlcihzdWJzY3JpYmVyX2Rpcik7CisKKwlpZiAoaW50 ZXJuYWxfbG9nX2ZpbGVfZnAgIT0gTlVMTCkKKwl7CisJCWlmIChmY2xvc2UoaW50ZXJuYWxfbG9n X2ZpbGVfZnApICE9IDApCisJCQlyZXBvcnRfY3JlYXRlc3ViX2ZhdGFsKCJjb3VsZCBub3QgY2xv c2UgJXMvJXMubG9nOiAlbSIsIGxvZ2RpciwgSU5URVJOQUxfTE9HX0ZJTEVfTkFNRSk7CisJCWlu dGVybmFsX2xvZ19maWxlX2ZwID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMjcs NiArMzY5LDcgQEAgdXNhZ2Uodm9pZCkKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGFiYXNlcyBhbmQgZGF0YWJhc2VzIHRoYXQgZG9uJ3QgYWxsb3cgY29ubmVjdGlv bnNcbiIpKTsKIAlwcmludGYoXygiICAtZCwgLS1kYXRhYmFzZT1EQk5BTUUgICAgICAgICAgIGRh dGFiYXNlIGluIHdoaWNoIHRvIGNyZWF0ZSBhIHN1YnNjcmlwdGlvblxuIikpOwogCXByaW50Zihf KCIgIC1ELCAtLXBnZGF0YT1EQVRBRElSICAgICAgICAgICAgbG9jYXRpb24gZm9yIHRoZSBzdWJz Y3JpYmVyIGRhdGEgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgLWwsIC0tbG9nZGlyPUxP R0RJUiAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgdGhlIGxvZyBkaXJlY3RvcnlcbiIpKTsKIAlw cmludGYoXygiICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgICAgICAgIGRyeSBydW4sIGp1c3Qg c2hvdyB3aGF0IHdvdWxkIGJlIGRvbmVcbiIpKTsKIAlwcmludGYoXygiICAtcCwgLS1zdWJzY3Jp YmVyLXBvcnQ9UE9SVCAgICAgIHN1YnNjcmliZXIgcG9ydCBudW1iZXIgKGRlZmF1bHQgJXMpXG4i KSwgREVGQVVMVF9TVUJfUE9SVCk7CiAJcHJpbnRmKF8oIiAgLVAsIC0tcHVibGlzaGVyLXNlcnZl cj1DT05OU1RSICBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJpbmdcbiIpKTsKQEAgLTc2MSw2ICs4 MDQsNyBAQCBtb2RpZnlfc3Vic2NyaWJlcl9zeXNpZChjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2Ny aWJlck9wdGlvbnMgKm9wdCkKIAlib29sCQljcmNfb2s7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAK KwljaGFyCSAgICpvdXRfZmlsZTsKIAljaGFyCSAgICpjbWRfc3RyOwogCiAJcmVwb3J0X2NyZWF0 ZXN1Yl9sb2coUEdfTE9HX0lORk8sIFBHX0xPR19QUklNQVJZLApAQCAtNzk5LDggKzg0MywyMCBA QCBtb2RpZnlfc3Vic2NyaWJlcl9zeXNpZChjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9w dGlvbnMgKm9wdCkKIAkJcmVwb3J0X2NyZWF0ZXN1Yl9sb2coUEdfTE9HX0lORk8sIFBHX0xPR19Q UklNQVJZLAogCQkJCQkJCSAicnVubmluZyBwZ19yZXNldHdhbCBvbiB0aGUgc3Vic2NyaWJlciIp OwogCi0JY21kX3N0ciA9IHBzcHJpbnRmKCJcIiVzXCIgLUQgXCIlc1wiID4gXCIlc1wiIiwgcGdf cmVzZXR3YWxfcGF0aCwKLQkJCQkJICAgc3Vic2NyaWJlcl9kaXIsIERFVk5VTEwpOworCS8qCisJ ICogUmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byB0aGUgbG9nZmlsZSBpZiBzcGVjaWZpZWQuIFNp bmNlIHRoZSBvdXRwdXQKKwkgKiB3b3VsZCBiZSB2ZXJ5IHNob3J0LCBhcm91bmQgb25lIGxpbmUs IHdlIGRvIG5vdCBwcm92aWRlIGEgc2VwYXJhdGUgZmlsZQorCSAqIGZvciBpdDsgaXQncyBkb25l IGFzIGEgcGFydCBvZiB0aGUgc2VydmVyIGxvZy4KKwkgKi8KKwlpZiAob3B0LT5sb2dfZGlyKQor CQlvdXRfZmlsZSA9IHBzcHJpbnRmKCIlcy8lcy5sb2ciLCBsb2dkaXIsIFNFUlZFUl9MT0dfRklM RV9OQU1FKTsKKwllbHNlCisJCW91dF9maWxlID0gREVWTlVMTDsKKworCWNtZF9zdHIgPSBwc3By aW50ZigiXCIlc1wiIC1EIFwiJXNcIiA+PiBcIiVzXCIiLCBwZ19yZXNldHdhbF9wYXRoLAorCQkJ CQkgICBzdWJzY3JpYmVyX2Rpciwgb3V0X2ZpbGUpOworCWlmIChvcHQtPmxvZ19kaXIpCisJCXBn X2ZyZWUob3V0X2ZpbGUpOwogCiAJcmVwb3J0X2NyZWF0ZXN1Yl9sb2coUEdfTE9HX0RFQlVHLCBQ R19MT0dfUFJJTUFSWSwKIAkJCQkJCSAicGdfcmVzZXR3YWwgY29tbWFuZCBpczogJXMiLCBjbWRf c3RyKTsKQEAgLTgxNyw2ICs4NzMsNyBAQCBtb2RpZnlfc3Vic2NyaWJlcl9zeXNpZChjb25zdCBz dHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCkKIAl9CiAKIAlwZ19mcmVlKGNmKTsK KwlwZ19mcmVlKGNtZF9zdHIpOwogfQogCiAvKgpAQCAtMTAyMyw2ICsxMDgwLDg5IEBAIHNlcnZl cl9pc19pbl9yZWNvdmVyeShQR2Nvbm4gKmNvbm4pCiAJcmV0dXJuIHJldCA9PSAwOwogfQogCitz dGF0aWMgdm9pZAoraW50ZXJuYWxfbG9nX2ZpbGVfd3JpdGUoZW51bSBwZ19sb2dfbGV2ZWwgbGV2 ZWwsIGNvbnN0IGNoYXIgKnBnX3Jlc3RyaWN0IGZtdCwKKwkJCQkJCXZhX2xpc3QgYXJncykKK3sK KwlBc3NlcnQoaW50ZXJuYWxfbG9nX2ZpbGVfZnApOworCisJLyogRG8gbm90aGluZyBpZiBsb2cg bGV2ZWwgaXMgdG9vIGxvdy4gKi8KKwlpZiAobGV2ZWwgPCBfX3BnX2xvZ19sZXZlbCkKKwkJcmV0 dXJuOworCisJdmZwcmludGYoaW50ZXJuYWxfbG9nX2ZpbGVfZnAsIF8oZm10KSwgYXJncyk7CisK KwlmcHJpbnRmKGludGVybmFsX2xvZ19maWxlX2ZwLCAiXG4iKTsKKwlmZmx1c2goaW50ZXJuYWxf bG9nX2ZpbGVfZnApOworfQorCisvKgorICogT3BlbiBhIG5ldyBsb2dmaWxlIHdpdGggcHJvcGVy IHBlcm1pc3Npb25zLgorICogRnJvbSBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5j CisgKi8KK3N0YXRpYyBGSUxFICoKK2xvZ2ZpbGVfb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwg Y29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFCSAgICpmaDsKKwltb2RlX3QJCW91bWFzazsKKwor CW91bWFzayA9IHVtYXNrKChtb2RlX3QpICgofihTX0lSVVNSIHwgU19JV1VTUikpICYgKFNfSVJX WFUgfCBTX0lSV1hHIHwgU19JUldYTykpKTsKKwlmaCA9IGZvcGVuKGZpbGVuYW1lLCBtb2RlKTsK Kwl1bWFzayhvdW1hc2spOworCisJaWYgKGZoKQorCXsKKwkJc2V0dmJ1ZihmaCwgTlVMTCwgUEdf SU9MQkYsIDApOworCisjaWZkZWYgV0lOMzIKKwkJLyogdXNlIENSTEYgbGluZSBlbmRpbmdzIG9u IFdpbmRvd3MgKi8KKwkJX3NldG1vZGUoX2ZpbGVubyhmaCksIF9PX1RFWFQpOworI2VuZGlmCisJ fQorCWVsc2UKKwkJcmVwb3J0X2NyZWF0ZXN1Yl9mYXRhbCgiY291bGQgbm90IG9wZW4gbG9nIGZp bGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJICAgZmlsZW5hbWUpOworCisJcmV0dXJuIGZoOworfQor CitzdGF0aWMgdm9pZAorbWFrZV9vdXRwdXRfZGlycyhjb25zdCBjaGFyICpsb2dfYmFzZWRpcikK K3sKKwljaGFyCQl0aW1lc3RhbXBbMTI4XTsKKwlzdHJ1Y3QgdGltZXZhbCB0dmFsOworCXRpbWVf dAkJbm93OworCXN0cnVjdCB0bQl0bWJ1ZjsKKwlpbnQJCQlsZW47CisKKwkvKiBHZW5lcmF0ZSB0 aW1lc3RhbXAgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2YWwsIE5VTEwpOworCW5vdyA9IHR2YWwudHZf c2VjOworCisJc3RyZnRpbWUodGltZXN0YW1wLCBzaXplb2YodGltZXN0YW1wKSwgIiVZJW0lZFQl SCVNJVMiLAorCQkJIGxvY2FsdGltZV9yKCZub3csICZ0bWJ1ZikpOworCisJLyogQXBwZW5kIG1p bGxpc2Vjb25kcyAqLworCXNucHJpbnRmKHRpbWVzdGFtcCArIHN0cmxlbih0aW1lc3RhbXApLAor CQkJIHNpemVvZih0aW1lc3RhbXApIC0gc3RybGVuKHRpbWVzdGFtcCksICIuJTAzdSIsCisJCQkg KHVuc2lnbmVkIGludCkgKHR2YWwudHZfdXNlYyAvIDEwMDApKTsKKworCS8qIEJ1aWxkIHRpbWVz dGFtcCBkaXJlY3RvcnkgcGF0aCAqLworCWxlbiA9IHNucHJpbnRmKGxvZ2RpciwgTUFYUEdQQVRI LCAiJXMvJXMiLCBsb2dfYmFzZWRpciwgdGltZXN0YW1wKTsKKworCWlmIChsZW4gPj0gTUFYUEdQ QVRIKQorCQlyZXBvcnRfY3JlYXRlc3ViX2ZhdGFsKCJkaXJlY3RvcnkgcGF0aCBmb3IgbG9nIGZp bGVzLCAlcy8lcywgaXMgdG9vIGxvbmciLAorCQkJCQkJCSAgIGxvZ2RpciwgdGltZXN0YW1wKTsK KworCS8qIENyZWF0ZSBiYXNlIGRpcmVjdG9yeSAoaWdub3JlIGlmIGV4aXN0cykgKi8KKwlpZiAo bWtkaXIobG9nX2Jhc2VkaXIsIHBnX2Rpcl9jcmVhdGVfbW9kZSkgPCAwICYmIGVycm5vICE9IEVF WElTVCkKKwkJcmVwb3J0X2NyZWF0ZXN1Yl9mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rv cnkgXCIlc1wiOiAlbSIsIGxvZ19iYXNlZGlyKTsKKworCS8qIENyZWF0ZSBhIHRpbWVzdGFtcC1u YW1lZCBzdWJkaXJlY3RvcnkgdW5kZXIgdGhlIGJhc2UgZGlyZWN0b3J5ICovCisJaWYgKG1rZGly KGxvZ2RpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSA8IDApCisJCXJlcG9ydF9jcmVhdGVzdWJfZmF0 YWwoImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBsb2dkaXIpOworfQor CiAvKgogICogSXMgdGhlIHByaW1hcnkgc2VydmVyIHJlYWR5IGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uPwogICoKQEAgLTE3ODEsNiArMTkyMSw5IEBAIHN0YXJ0X3N0YW5kYnlfc2VydmVyKGNvbnN0 IHN0cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucyAqb3B0LCBib29sIHJlc3RyaWN0ZWRfCiAJ aWYgKHJlc3RyaWN0X2xvZ2ljYWxfd29ya2VyKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ19j dGxfY21kLCAiIC1vIFwiLWMgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycz0wXCIiKTsK IAorCWlmIChvcHQtPmxvZ19kaXIpCisJCWFwcGVuZFBRRXhwQnVmZmVyKHBnX2N0bF9jbWQsICIg LWwgXCIlcy8lcy5sb2dcIiIsIGxvZ2RpciwgU0VSVkVSX0xPR19GSUxFX05BTUUpOworCiAJcmVw b3J0X2NyZWF0ZXN1Yl9sb2coUEdfTE9HX0RFQlVHLCBQR19MT0dfUFJJTUFSWSwKIAkJCQkJCSAi cGdfY3RsIGNvbW1hbmQgaXM6ICVzIiwgcGdfY3RsX2NtZC0+ZGF0YSk7CiAJcmMgPSBzeXN0ZW0o cGdfY3RsX2NtZC0+ZGF0YSk7CkBAIC0yMzUxLDYgKzI0OTQsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJeyJhbGwiLCBub19hcmd1bWVudCwgTlVMTCwgJ2EnfSwKIAkJeyJkYXRh YmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZCd9LAogCQl7InBnZGF0YSIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAnRCd9LAorCQl7ImxvZ2RpciIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnbCd9LAogCQl7ImRyeS1ydW4iLCBub19hcmd1bWVudCwgTlVMTCwgJ24nfSwKIAkJ eyJzdWJzY3JpYmVyLXBvcnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKIAkJeyJw dWJsaXNoZXItc2VydmVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCkBAIC0yNDA5 LDYgKzI1NTMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKiBEZWZhdWx0IHNl dHRpbmdzICovCiAJc3Vic2NyaWJlcl9kaXIgPSBOVUxMOwogCW9wdC5jb25maWdfZmlsZSA9IE5V TEw7CisJb3B0LmxvZ19kaXIgPSBOVUxMOwogCW9wdC5wdWJfY29ubmluZm9fc3RyID0gTlVMTDsK IAlvcHQuc29ja2V0X2RpciA9IE5VTEw7CiAJb3B0LnN1Yl9wb3J0ID0gREVGQVVMVF9TVUJfUE9S VDsKQEAgLTI0MzksNyArMjU4NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJ Z2V0X3Jlc3RyaWN0ZWRfdG9rZW4oKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2Ms IGFyZ3YsICJhZDpEOm5wOlA6czp0OlRVOnYiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFy Z2MsIGFyZ3YsICJhZDpEOmw6bnA6UDpzOnQ6VFU6diIsCiAJCQkJCQkJbG9uZ19vcHRpb25zLCAm b3B0aW9uX2luZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCkBAIC0yNDYwLDYgKzI2MDUs MTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJc3Vic2NyaWJlcl9kaXIgPSBw Z19zdHJkdXAob3B0YXJnKTsKIAkJCQljYW5vbmljYWxpemVfcGF0aChzdWJzY3JpYmVyX2Rpcik7 CiAJCQkJYnJlYWs7CisJCQljYXNlICdsJzoKKwkJCQlvcHQubG9nX2RpciA9IHBnX3N0cmR1cChv cHRhcmcpOworCQkJCWNhbm9uaWNhbGl6ZV9wYXRoKG9wdC5sb2dfZGlyKTsKKwkJCQlicmVhazsK IAkJCWNhc2UgJ24nOgogCQkJCWRyeV9ydW4gPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMjYwNyw2 ICsyNzU2LDE5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlleGl0KDEpOwogCX0K IAorCWlmIChvcHQubG9nX2RpciAhPSBOVUxMKQorCXsKKwkJY2hhcgkgICAqaW50ZXJuYWxfbG9n X2ZpbGU7CisKKwkJbWFrZV9vdXRwdXRfZGlycyhvcHQubG9nX2Rpcik7CisJCWludGVybmFsX2xv Z19maWxlID0gcHNwcmludGYoIiVzLyVzLmxvZyIsIGxvZ2RpciwKKwkJCQkJCQkJCSBJTlRFUk5B TF9MT0dfRklMRV9OQU1FKTsKKworCQkvKiBsb2dmaWxlX29wZW4oKSB3aWxsIGV4aXQgaWYgdGhl cmUgaXMgYW4gZXJyb3IgKi8KKwkJaW50ZXJuYWxfbG9nX2ZpbGVfZnAgPSBsb2dmaWxlX29wZW4o aW50ZXJuYWxfbG9nX2ZpbGUsICJhIik7CisJCXBnX2ZyZWUoaW50ZXJuYWxfbG9nX2ZpbGUpOwor CX0KKwogCWlmIChkcnlfcnVuKQogCQlyZXBvcnRfY3JlYXRlc3ViX2xvZyhQR19MT0dfSU5GTywg UEdfTE9HX1BSSU1BUlksCiAJCQkJCQkJICJFeGVjdXRpbmcgaW4gZHJ5LXJ1biBtb2RlLlxuIgpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0ZXN1YnNjcmli ZXIucGwgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5w bAppbmRleCAwYzI3ZmNhN2JiNy4uMjM5ZWE1OGQ5YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsCisrKyBiL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC90LzA0MF9wZ19jcmVhdGVzdWJzY3JpYmVyLnBsCkBAIC01LDYgKzUsOCBAQAog CiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIEZpbGU6OkJh c2VuYW1lOwordXNlIEZpbGU6OnN0YXQ7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsK IHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwpAQCAtMTQsNiAr MTYsNyBAQCBwcm9ncmFtX3ZlcnNpb25fb2soJ3BnX2NyZWF0ZXN1YnNjcmliZXInKTsKIHByb2dy YW1fb3B0aW9uc19oYW5kbGluZ19vaygncGdfY3JlYXRlc3Vic2NyaWJlcicpOwogCiBteSAkZGF0 YWRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJGxvZ2RpciA9IFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOwogCiAjIEdlbmVyYXRlIGEgZGF0YWJhc2Ug d2l0aCBhIG5hbWUgbWFkZSBvZiBhIHJhbmdlIG9mIEFTQ0lJIGNoYXJhY3RlcnMuCiAjIEV4dHJh Y3RlZCBmcm9tIDAwMl9wZ191cGdyYWRlLnBsLgpAQCAtMzYyLDkgKzM2NSw0MCBAQCBjb21tYW5k X29rKAogCQknLS1zdWJzY3JpcHRpb24nID0+ICdzdWIyJywKIAkJJy0tZGF0YWJhc2UnID0+ICRk YjEsCiAJCSctLWRhdGFiYXNlJyA9PiAkZGIyLAorCQknLS1sb2dkaXInID0+ICRsb2dkaXIsCiAJ XSwKIAkncnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIgLS1kcnktcnVuIG9uIG5vZGUgUycpOwogCisj IENoZWNrIHRoYXQgdGhlIGxvZyBmaWxlcyB3ZXJlIGNyZWF0ZWQKK215IEBzZXJ2ZXJfbG9nX2Zp bGVzID0gZ2xvYiAiJGxvZ2Rpci8qL3BnX2NyZWF0ZXN1YnNjcmliZXJfc2VydmVyLmxvZyI7Citp cyhzY2FsYXIoQHNlcnZlcl9sb2dfZmlsZXMpLAorCTEsICJwZ19jcmVhdGVzdWJzY3JpYmVyX3Nl cnZlci5sb2cgZmlsZSB3YXMgY3JlYXRlZCIpOworbXkgJHNlcnZlcl9sb2dfZmlsZV9zaXplID0g LXMgJHNlcnZlcl9sb2dfZmlsZXNbMF07Citpc250KCRzZXJ2ZXJfbG9nX2ZpbGVfc2l6ZSwgMCwK KwkicGdfY3JlYXRlc3Vic2NyaWJlcl9zZXJ2ZXIubG9nIGZpbGUgbm90IGVtcHR5Iik7CitteSAk c2VydmVyX2xvZyA9IHNsdXJwX2ZpbGUoJHNlcnZlcl9sb2dfZmlsZXNbMF0pOworbGlrZSgKKwkk c2VydmVyX2xvZywKKwlxci9jb25zaXN0ZW50IHJlY292ZXJ5IHN0YXRlIHJlYWNoZWQvLAorCSJz ZXJ2ZXIgcmVhY2hlZCBjb25zaXN0ZW50IHJlY292ZXJ5IHN0YXRlIik7CisKK215IEBpbnRlcm5h bF9sb2dfZmlsZXMgPSBnbG9iICIkbG9nZGlyLyovcGdfY3JlYXRlc3Vic2NyaWJlcl9pbnRlcm5h bC5sb2ciOworaXMoc2NhbGFyKEBpbnRlcm5hbF9sb2dfZmlsZXMpLAorCTEsICJwZ19jcmVhdGVz dWJzY3JpYmVyX2ludGVybmFsLmxvZyBmaWxlIHdhcyBjcmVhdGVkIik7CitteSAkaW50ZXJuYWxf bG9nX2ZpbGVfc2l6ZSA9IC1zICRpbnRlcm5hbF9sb2dfZmlsZXNbMF07Citpc250KCRpbnRlcm5h bF9sb2dfZmlsZV9zaXplLCAwLAorCSJwZ19jcmVhdGVzdWJzY3JpYmVyX2ludGVybmFsLmxvZyBm aWxlIG5vdCBlbXB0eSIpOworbXkgJGludGVybmFsX2xvZyA9IHNsdXJwX2ZpbGUoJGludGVybmFs X2xvZ19maWxlc1swXSk7CitsaWtlKAorCSRpbnRlcm5hbF9sb2csCisJcXIvdGFyZ2V0IHNlcnZl ciByZWFjaGVkIHRoZSBjb25zaXN0ZW50IHN0YXRlLywKKwkibG9nIHNob3dzIGNvbnNpc3RlbnQg c3RhdGUgcmVhY2hlZCIpOworbXkgJHRpbWVzdGFtcF9kaXIgPSBkaXJuYW1lKCRpbnRlcm5hbF9s b2dfZmlsZXNbMF0pOworbXkgJHRpbWVzdGFtcF9kaXJfc3RhdCA9IHN0YXQoJHRpbWVzdGFtcF9k aXIpOworbXkgJHRpbWVzdGFtcF9kaXJfbW9kZSA9ICR0aW1lc3RhbXBfZGlyX3N0YXQtPm1vZGUg JiAwNzc3NzsKK2lzKCR0aW1lc3RhbXBfZGlyX21vZGUsIDA3MDAsCisJIkRpcmVjdG9yeSB3aXRo IC5sb2cgZmlsZXMgaGFzIHBlcm1pc3Npb25zIFNfSVJXWFUiKTsKKwogIyBDaGVjayBpZiBub2Rl IFMgaXMgc3RpbGwgYSBzdGFuZGJ5CiAkbm9kZV9zLT5zdGFydDsKIGlzKCRub2RlX3MtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHBnX2NhdGFsb2cucGdfaXNfaW5fcmVjb3ZlcnkoKScp LApAQCAtNDQ0LDcgKzQ3OCw4IEBAIGlzKHNjYWxhcigoKSA9ICRzdGRlcnIgPX4gL3dvdWxkIGNy ZWF0ZSBzdWJzY3JpcHRpb24vZyksCiAKICMgQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHB1YmxpY2F0 aW9uLCBhbmQgYSB0YWJsZSB0aGF0IGlzIG5vdCBhIG1lbWJlciBvZiB0aGF0CiAjIHB1YmxpY2F0 aW9uLgotJG5vZGVfcC0+c2FmZV9wc3FsKCRkYjEsIHFxKAorJG5vZGVfcC0+c2FmZV9wc3FsKAor CSRkYjEsIHFxKAogCUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0X3B1YjMgRk9SIFRBQkxFIHRibDE7 CiAJQ1JFQVRFIFRBQkxFIG5vdF9yZXBsaWNhdGVkIChhIGludCk7CiApKTsKQEAgLTU0MCw4ICs1 NzUsNyBAQCBzZWNvbmQgcm93CiB0aGlyZCByb3cpLAogCSJsb2dpY2FsIHJlcGxpY2F0aW9uIHdv cmtzIGluIGRhdGFiYXNlICRkYjEiKTsKICRyZXN1bHQgPSAkbm9kZV9zLT5zYWZlX3BzcWwoJGRi MSwgJ1NFTEVDVCAqIEZST00gbm90X3JlcGxpY2F0ZWQnKTsKLWlzKCRyZXN1bHQsIHFxKCksCi0J InRhYmxlIGlzIG5vdCByZXBsaWNhdGVkIGluIGRhdGFiYXNlICRkYjEiKTsKK2lzKCRyZXN1bHQs IHFxKCksICJ0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBpbiBkYXRhYmFzZSAkZGIxIik7CiAKICMg Q2hlY2sgcmVzdWx0IGluIGRhdGFiYXNlICRkYjIKICRyZXN1bHQgPSAkbm9kZV9zLT5zYWZlX3Bz cWwoJGRiMiwgJ1NFTEVDVCAqIEZST00gdGJsMicpOwpAQCAtNTU1LDggKzU4OSwxMCBAQCBteSAk c3lzaWRfcyA9ICRub2RlX3MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogaXNudCgkc3lzaWRfcCwg JHN5c2lkX3MsICdzeXN0ZW0gaWRlbnRpZmllciB3YXMgY2hhbmdlZCcpOwogCiAjIFZlcmlmeSB0 aGF0IHB1YjIgd2FzIGNyZWF0ZWQgaW4gJGRiMgotaXMoJG5vZGVfcC0+c2FmZV9wc3FsKCRkYjIs ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19wdWJsaWNhdGlvbiBXSEVSRSBwdWJuYW1lID0gJ3B1 YjInIiksCi0JJzEnLCAicHVibGljYXRpb24gcHViMiB3YXMgY3JlYXRlZCBpbiAkZGIyIik7Citp cyggJG5vZGVfcC0+c2FmZV9wc3FsKAorCQkkZGIyLCAiU0VMRUNUIENPVU5UKCopIEZST00gcGdf cHVibGljYXRpb24gV0hFUkUgcHVibmFtZSA9ICdwdWIyJyIpLAorCScxJywKKwkicHVibGljYXRp b24gcHViMiB3YXMgY3JlYXRlZCBpbiAkZGIyIik7CiAKICMgR2V0IHN1YnNjcmlwdGlvbiBhbmQg cHVibGljYXRpb24gbmFtZXMKICRyZXN1bHQgPSAkbm9kZV9zLT5zYWZlX3BzcWwoCkBAIC01ODEs NyArNjE3LDcgQEAgJHJlc3VsdCA9ICRub2RlX3MtPnNhZmVfcHNxbCgKICAgICApCiApOwogCi1p cygkcmVzdWx0LCBxcSgkZGIxfHt0ZXN0X3B1YjN9CitpcyggJHJlc3VsdCwgcXEoJGRiMXx7dGVz dF9wdWIzfQogJGRiMnx7cHViMn0pLAogCSJzdWJzY3JpcHRpb25zIHVzZSB0aGUgY29ycmVjdCBw dWJsaWNhdGlvbnMiKTsKIAotLSAKMi40My4wCgo= --0000000000005e77a1064dbb0083--