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.94.2) (envelope-from ) id 1rbM4l-00F2Xq-W6 for pgsql-hackers@arkaria.postgresql.org; Sat, 17 Feb 2024 14:54:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rbM4h-006r7R-Nj for pgsql-hackers@arkaria.postgresql.org; Sat, 17 Feb 2024 14:53:55 +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.94.2) (envelope-from ) id 1rbM4g-006r7J-Sk for pgsql-hackers@lists.postgresql.org; Sat, 17 Feb 2024 14:53:55 +0000 Received: from mail-cpzbra01olkn2106.outbound.protection.outlook.com ([40.92.97.106] helo=BRA01-CPZ-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rbM4c-007DtA-Gt for pgsql-hackers@postgresql.org; Sat, 17 Feb 2024 14:53:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eS47RCNsVUqu20oHnXI7Ik/n7IeREKnih/KqhAa9a1P3DWqwRp7+Nw4BGUAlaED28FDetu4xlmUAtYO/V0mpLTWqttivPfGnGC6q9tdtkrEvE/8DMG+zD8u/3lS7XwkH0gR+R4XHkIKETiEkmcv1UJlTYXLLigsLgwntqqmVCJCeNMxwfGIgh+Mcu3NLxDyOYV/q6eYS+OzyqSbCxSWcKRMZnr5yAu6zaqPVusdQCH24Eg58xz3JmGUuNHk97dvqptkpSIFEHwJZlNThEdwfwn/WxJnkwPdvnQd0MjfjUD9hsGxoYv/0B97hGxYkGGApe5f45DAS8cEEQeVXCVYfUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=SoPf/3qdXvEYm4MXn79KHJ/+bPqgcgWXvf6wJWLwTmg=; b=HLA1Zm4yjb1teNQIabxav4WwA3uD7RT1BCtTzlMNAXR24AVl4LnvjfN/yUjLGun5TvBVQrauDzusXcqTJUo5ZzZ3FjJxKldKv9QvE+EQoNEK6GzE8N9CbNHmzJCz+LqKfbYzfrDCp0/i2VQje4iQfx5l4+2s65ifgw+6Hu9UkPkbXuQd2hYrHtlYZd5Fy2mzJS5oFniL0kgj5yP02aLwUBoiHcVQnRDG9f285KmyZDKtX/dPo8rpps07A4z7hrtnhE5xUjzKHO2SlTxko2d4/uEere9sYAhd+vuVdThxXugCERyj5BvYUPchVxrwZKq21fgbH/k66qLrQAQUwHlVHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from CP8P284MB2496.BRAP284.PROD.OUTLOOK.COM (2603:10d6:103:2dc::11) by CP5P284MB2491.BRAP284.PROD.OUTLOOK.COM (2603:10d6:103:2a0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.32; Sat, 17 Feb 2024 14:53:43 +0000 Received: from CP8P284MB2496.BRAP284.PROD.OUTLOOK.COM ([fe80::ce6:bf75:3d4a:97cf]) by CP8P284MB2496.BRAP284.PROD.OUTLOOK.COM ([fe80::ce6:bf75:3d4a:97cf%6]) with mapi id 15.20.7292.029; Sat, 17 Feb 2024 14:53:43 +0000 From: Maiquel Grassi To: Nathan Bossart , Jim Jones CC: Pavel Luzanov , Erik Wienhold , "pgsql-hackers@postgresql.org" Subject: RE: Psql meta-command conninfo+ Thread-Topic: Psql meta-command conninfo+ Thread-Index: AQHaWRQuU7L2MD2CX0quiO/hLxQK8bD9n9eAgAAOagCAABlrgoAABsOAgAABrYCAAAkRMoAAAaIAgABfmwKAAJe3AIAAHVoLgAAnEwCAADA+O4ABA4CAgAA4UGOAASa0gIAFGF5sgAMAW4CAAhkLZoAAKvw7gADbloCAAE0igIABWfsI Date: Sat, 17 Feb 2024 14:53:43 +0000 Message-ID: References: <49edac91-d47f-4cac-ae12-d51cabbd87c9@postgrespro.ru> <49635a5b-3d32-4f05-8ce4-c55c70181888@uni-muenster.de> <8a93f6c0-795f-4260-a5fd-07ccbddbc88f@uni-muenster.de> <20240216155449.GA1236054@nathanxps13> In-Reply-To: <20240216155449.GA1236054@nathanxps13> Accept-Language: pt-BR, en-US Content-Language: pt-BR X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [VRsHrRWFNCMsNesCUZ6nfeWV7JRboSGB286iP8d33x0QPoXC+UQCtT0ZCMBBtB6Q] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CP8P284MB2496:EE_|CP5P284MB2491:EE_ x-ms-office365-filtering-correlation-id: ad298285-579b-4eaa-1a1f-08dc2fc83c87 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uuxlTOfdXcRlLemKh5hTCAD8fMcJdNSIMIs3rbJIpGHwZQbbniJS25dulQlNwafgMXbnLhWAiz9XX3BCJymtks10YvjRnVvwPQhAtxdxjM0M6wHu+HY8rnnTnGeBIQkBreqwW13u0MseJ/LnNt3fgGJ7cXAPAb6kuwALCWGl+zdd4B/AapjysTYdNk0X4FCCEP0hutaGfVx3cgXBNTk/Uk8naGCq6MoI6K5t9wFjV98qrB4kkSkco9teXCEIaRvkxpKV6aX72hAb+h9eeqJ724rVpBfQw8AwRGj/OZgZNkDTM3XulFICCIAh0px4dzw/H6B/lhpPTnKvcLvMM+WCEqJXxoBpJk3Bl+FjCAKF9MExdIyUM6l3EeI1OtcpHNYtakw/GhybYmAorvip7siL7x0HZDRmFyG1KITbuUi/UBTyCREXquSX8nxUbyqxKQKVUtHOVH3tg/yB4SuiEz9sOkdfGb66M9amxd5jd9MqCpYb8cDi2tSeYHjJgCaGr9JCmlgaV94bM3MbgXZ2KvAsCeEs2uGE/idpwcUy5E5lulpzU3PkJmdolK4e2g/TW7AAaXtVl7T2Lj5PafzUwwyy+X7kJoRI3tRv3s2kUfWwOUtF8bPA1MLbWW6qo/ZkI+bb x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?Sau9WN3JVngXy2OB7FvjJN+iMN5WH4zJXTIXYRzaXp/GNMSwMM5GCK9NcX?= =?iso-8859-1?Q?ftjRY73A2Vgw8zzgpZqWwYozvVkOB7Dv2xc9KIFTRwtcuaKvGUFOoSpMMV?= =?iso-8859-1?Q?zJMjgZXJsrtaRCe4cC9wp/amjihOQ+1lhkNZFY6VX6kAFIlmLZB1uX8v9l?= =?iso-8859-1?Q?XOWhe30v45odFad4VxmwagO06U8puKZEA9GTqRAfVkKP5+xUi97Fki15qy?= =?iso-8859-1?Q?pbedpPNFw9AbDuVkMf05jUJ0zK1MnJfuXMVqfkMt5rDiiYJZvhDTEtyhM6?= =?iso-8859-1?Q?82qAJDMDVkhIW+QztGRSCJFR1SWSSX/bFH7PGweSuxW5dTL4vl/ssOyizQ?= =?iso-8859-1?Q?AmOQo0cLsgrUm0i//2erEcKVZVMo/BeYeYPgdTqyV+y/Hv1rzP0rc3gjWF?= =?iso-8859-1?Q?GXfOVcAuot53ssK11bNk3bYKaAIEIo1OVt2ICpDBnmK1C221mg62bDk7dn?= =?iso-8859-1?Q?yxX20baGoskkXwwNJ/lx4p2S3JssyiRxqpQ1KUl7YB14Eb6/x7pRWV316E?= =?iso-8859-1?Q?7b7dM5oJPL5nq1P0IjCDkdJd8aGwirDPTp1gERtWBKLkiiZ/uTx2HI/pCc?= =?iso-8859-1?Q?Ev7l2Im3RNnu3ATocM8nR13BFbN0iNxXzM0ISdKGwLU8XMM8PLQiXghhGN?= =?iso-8859-1?Q?lAXLqDXFTGBEg4wTn4s5LqbFldixhEsszBFhkrmnlam+8VZ+fVDi5OeE6O?= =?iso-8859-1?Q?xp2nfjRzuxxOILLLLcgwU4QSZ5ZWL8Rhz5+osxPQpp4Cd9JIqpdlIEkH3n?= =?iso-8859-1?Q?VZfIjgMjjkFf01sK6hMEzRHxNQizvAWuU5pjXRkyAd2r+1vJKcwiisiu42?= =?iso-8859-1?Q?HLGO/QuvXR6RZuny/p1XmIWxqQvWMHJovHXQeGAJRK2TYYOfPi93tcVlmn?= =?iso-8859-1?Q?cOUMnwwPflzDgeC4bP6SlxPMoZkepaE4zjuDP2EsKBjDbEKIKryPYIp1Yy?= =?iso-8859-1?Q?ha1nfPVa3SYFUMK9w6HCv38fQcNI2lRzUv6eLnj7YMj8coHU3WJgGB5udb?= =?iso-8859-1?Q?9AJIl/xhL8XDFU8aExm3gDbdfip36vOvvqRXRxglIE1SLzZGOYZ7f4CNOP?= =?iso-8859-1?Q?ACF064yhiadYefaB5RaXw6WM7sM+CVAA5e5172sKcjvtP1gCAuAIF3g2oz?= =?iso-8859-1?Q?awyHNROX17oYZ4ShM2XpdzNywgjgutxdADFlEvFgnZgWRa7eKjbI/9fjDl?= =?iso-8859-1?Q?woNczjjiBTGnws1L1KO39/8SBkeDlry/vVYNJ5+7ng7goQN+B7v6hfTNEz?= =?iso-8859-1?Q?rnOz1M0sBZyI4xffU6vCsJQ8amhf7ERwRu4oZQyPst3HJ9+aMvIOMrdpc8?= =?iso-8859-1?Q?OSd8CEtVgZkx/ATxAF2ZjTdL37p+pAUTWGszSMWwbIgl3R0=3D?= Content-Type: multipart/mixed; boundary="_004_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_" MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-7dc52.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CP8P284MB2496.BRAP284.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: ad298285-579b-4eaa-1a1f-08dc2fc83c87 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2024 14:53:43.4797 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CP5P284MB2491 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_ Content-Type: multipart/alternative; boundary="_000_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_" --_000_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Nathan! (v18) >I might be alone on this, but I think this command should output the same >columns regardless of the version, whether it's using SSL, etc. and just >put NULL in any that do not apply. IMHO that would simplify the code and >help prevent confusion. Plus, I'm not aware of any existing meta-commands >that provide certain columns conditionally. I implemented your suggestion. Now, whenever the \conninfo+ command is invoked, all columns will appear. Contextually inappropriate cases will ret= urn NULL. I also adjusted the names of the columns related to SSL to make this information clearer for the user. I haven't focused on documenting the columns yet. I will do that soon. >Could we pull some of this information from pg_stat_ssl instead of from >libpq? The reason I suggest this is because I think it would be nice if >the query that \conninfo+ uses could be copy/pasted as needed and not rely >on hard-coded values chosen by the client. I've been considering using the views "pg_stat_ssl" and "pg_stat_gssapi"; h= owever, I realized that dealing with version-related cases using them is more compl= icated. Let me explain the reasons: The "pg_stat_ssl" view is available from >=3D PG 9.5, and the "pg_stat_gssa= pi" view is available from >=3D PG 12. The "compression" column was removed from the "pg_stat_ssl" from >=3D PG 14. All of these cases introduce greater complex= ity in maintaining the SQL. The central idea from the beginning has always been to= show the user all the information from \conninfo and extend it in \conninfo+. Th= e absence of the "compression" column in version 14 and above makes dealing with this= even more complicated, and not showing it seems to contradict \conninfo. SSL support has been available since version 7.1 (see documentation); if th= ere was support before that, I can't say. In this regard, it may seem strange, but = there are still many legacy systems running older versions of PostgreSQL. Just yesterday, I= assisted a client who is still using PG 8.2. In these cases, using the "pg_stat_ssl"= and "pg_stat_gssapi" views would not be possible because they don't exist on th= e server. I believe that psql should cover as many cases as possible when it comes to= compatibility with older versions (even those no longer supported). In this case, concern= ing SSL and GSS, I think libpq is better prepared to handle this. I may be mistaken in my statement and I welcome any better suggestions. For= now, I've maintained the implementation using libpq as it seems to be working well an= d is not contradicting \conninfo. If you have any suggestions on how to work around = the absence of the "compression" column, we can reconsider how to implement it without = using libpq. Tests: [postgres@localhost bin]$ ./psql -x -h 127.0.0.1 -p 5432 Password for user postgres: psql (17devel) Type "help" for help. postgres=3D# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.= 0.1" at port "5432". postgres=3D# \conninfo+ Current Connection Information -[ RECORD 1 ]------+----------------------- Database | postgres Authenticated User | postgres System User | scram-sha-256:postgres Current User | postgres Session User | postgres Backend PID | 22431 Server Address | 127.0.0.1 Server Port | 5432 Client Address | 127.0.0.1 Client Port | 51300 Socket Directory | Host | 127.0.0.1 SSL Connection | f SSL Protocol | SSL Cipher | SSL Compression | GSSAPI | f [postgres@localhost bin]$ ./psql -x -h 127.0.0.1 -p 5433 Password for user postgres: psql (17devel, server 15.6) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, com= pression: off) Type "help" for help. postgres=3D# \conninfo You are connected to database "postgres" as user "postgres" on host "127.0.= 0.1" at port "5433". SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, com= pression: off) postgres=3D# \conninfo+ Current Connection Information -[ RECORD 1 ]------+---------------------------- Database | postgres Authenticated User | postgres System User | Current User | postgres Session User | postgres Backend PID | 22438 Server Address | 127.0.0.1 Server Port | 5433 Client Address | 127.0.0.1 Client Port | 36016 Socket Directory | Host | 127.0.0.1 SSL Connection | t SSL Protocol | TLSv1.2 SSL Cipher | ECDHE-RSA-AES256-GCM-SHA384 SSL Compression | off GSSAPI | f Thank you very much for your sugestions and help! Maiquel Grassi. --_000_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

Hi Nathan!

(v18)

>I might be alon= e on this, but I think this command should output the same
>columns regardless of the version, whether it's using SSL, etc. and jus= t
>put NULL in any that do not apply. IMHO that would simplify the code an= d
>help prevent confusion. Plus, I'm not aware of any existing meta-comman= ds
>that provide certain columns conditionally.

I implemented your suggestion. Now, whenever the \conninfo+ command is
invoked, all columns will appear. Contextually inappropriate cases will ret= urn
NULL. I also adjusted the names of the columns related to SSL to make this<= br> information clearer for the user. I haven't focused on documenting the
columns yet. I will do that soon.

>Could we pull some of this information from pg_stat_ssl instead of from=
>libpq? The reason I suggest this is because I think it would be nice if=
>the query that \conninfo+ uses could be copy/pasted as needed and not r= ely
>on hard-coded values chosen by the client.

I've been considering using the views "pg_stat_ssl" and "pg_= stat_gssapi"; however,
I realized that dealing with version-related cases using them is more compl= icated.

= Let me explain the reasons:


The "pg_stat_ssl" view is available from >=3D PG 9.5, and the = "pg_stat_gssapi" view is
available from >=3D PG 12. The "compression" column was remove= d from the
"pg_stat_ssl" from >=3D PG 14. All of these cases introduce gr= eater complexity in
maintaining the SQL. The central idea from the beginning has always been to= show
the user all the information from \conninfo and extend it in \conninfo+. Th= e absence
of the "compression" column in version 14 and above makes dealing= with this even
more complicated, and not showing it seems to contradict \conninfo.

SSL support has been av= ailable since version 7.1 (see documentation); if there was

support before that, I = can't say. In this regard, it may seem strange, but there are still
many legacy systems running older versions of PostgreSQL. Just yesterday, I= assisted
a client who is still using PG 8.2. In these cases, using the "pg_stat= _ssl" and
"pg_stat_gssapi" views would not be possible because they don't e= xist on the server.
I believe that psql should cover as many cases as possible when it comes to= compatibility
with older versions (even those no longer supported). In this case, concern= ing SSL and
GSS, I think libpq is better prepared to handle this.


I may be mistaken in my statement and I welcome any better suggestions. For= now, I've
maintained the implementation using libpq as it seems to be working well an= d is not
contradicting \conninfo. If you have any suggestions on how to work around = the absence
of the "compression" column, we can reconsider how to implement i= t without using libpq.

Tests:

[postgres@localhost bin]$ ./psql -x -h 127.0.0.1 -p 5432

Password for user pos= tgres:
psql (17devel)=
Type "help" for help.

postgres=3D# \conninf= o
You are connected to = database "postgres" as user "postgres" on host "12= 7.0.0.1" at port "5432".
postgres=3D# \conninfo+
Current Connection In= formation
-[ RECORD 1 ]------+-= ----------------------
Database           | = postgres
Authenticated User | = postgres
System User   &n= bsp;    | scram-sha-256:postgres
Current User       | postgres
Session User       | postgres
Backend PID        | 22431=
Server Address     | 127.0.0.1
Server Port        | 5432<= /span>
Client Address     | 127.0.0.1
Client Port   &n= bsp;    | 51300
Socket Directory &nbs= p; |
Host            =   | 127.0.0.1
SSL Connection  =   | f
SSL Protocol       |
SSL Cipher   &nb= sp;     |
SSL Compression  = ;  |
GSSAPI     =         | f


[postgres@localhost bin]$ ./psql -x -h 127.0.0.1 -p 5433
Password for user postgres:
psql (17devel, server= 15.6)
SSL connection (protocol: TLSv1.2, cipher: ECD= HE-RSA-AES256-GCM-SHA384, compression: off)
Type "help" for help.

postgres=3D# \conninfo
You are connected to database "postgres&q= uot; as user "postgres" on host "127.0.0.1" at port &qu= ot;5433".
SSL connection (proto= col: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off)=
postgres=3D# \conninfo+
Current Connection In= formation
-[ RECORD 1 ]------+--------------------------= --
Database    = ;       | postgres
Authenticated User | = postgres
System User        |
Current User       | postgres
Session User   &= nbsp;   | postgres
Backend PID        | 22438=
Server Address     | 127.0.0.1
Server Port        | 5433<= /span>
Client Address  =   | 127.0.0.1
Client Port        | 36016=
Socket Directory   |
Host            =   | 127.0.0.1
SSL Connection     | t
SSL Protocol   &= nbsp;   | TLSv1.2
SSL Cipher   &nb= sp;     | ECDHE-RSA-AES256-GCM-SHA384
SSL Compression    | off
GSSAPI     =         | f

Thank you very much for your sugestions and help!
Maiquel Grassi.
--_000_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_-- --_004_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_ Content-Type: application/octet-stream; name="v18-0001-psql-meta-command-conninfo-plus.patch" Content-Description: v18-0001-psql-meta-command-conninfo-plus.patch Content-Disposition: attachment; filename="v18-0001-psql-meta-command-conninfo-plus.patch"; size=11875; creation-date="Sat, 17 Feb 2024 14:53:35 GMT"; modification-date="Sat, 17 Feb 2024 14:53:43 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbAppbmRleCBjYzdkNzk3Li5kNmI5MmZiIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sCkBAIC0xMDI5LDExICsxMDI5LDg0IEBAIElOU0VSVCBJTlRPIHRibDEgVkFMVUVT ICgkMSwgJDIpIFxiaW5kICdmaXJzdCB2YWx1ZScgJ3NlY29uZCB2YWx1ZScgXGcKICAgICAgIDwv dmFybGlzdGVudHJ5PgogCiAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcHAtcHNxbC1tZXRhLWNv bW1hbmQtY29ubmluZm8iPgotICAgICAgICA8dGVybT48bGl0ZXJhbD5cY29ubmluZm88L2xpdGVy YWw+PC90ZXJtPgorICAgICAgICA8dGVybT48bGl0ZXJhbD5cY29ubmluZm9bK108L2xpdGVyYWw+ PC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgogICAgICAgICBPdXRw dXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGRhdGFiYXNlIGNvbm5lY3Rpb24uCisg ICAgICAgIFdoZW4gbm8gPGxpdGVyYWw+KzwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQsIGl0IHNpbXBs eSBwcmludHMKKyAgICAgICAgYSB0ZXh0dWFsIChzdHJpbmcpIGRlc2NyaXB0aW9uIG9mIGEgZmV3 IGNvbm5lY3Rpb24gb3B0aW9ucy4KKyAgICAgICAgV2hlbiA8bGl0ZXJhbD4rPC9saXRlcmFsPiBp cyBnaXZlbiwgbW9yZSBjb21wbGV0ZSBpbmZvcm1hdGlvbgorICAgICAgICBpcyBkaXNwbGF5ZWQg YXMgYSB0YWJsZSBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKICAgICAgICAgPC9w YXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5EYXRhYmFzZTo8L2xpdGVy YWw+IGJsYWggYmxhaCBibGFoCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAg ICAgICAgPGxpdGVyYWw+QXV0aGVudGljYXRlZCBVc2VyOjwvbGl0ZXJhbD4gYmxhaCBibGFoIGJs YWgKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5T eXN0ZW0gVXNlcjo8L2xpdGVyYWw+IGJsYWggYmxhaCBibGFoCisgICAgICAgIDwvcGFyYT4KKwor ICAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+Q3VycmVudCBVc2VyOjwvbGl0ZXJhbD4g YmxhaCBibGFoIGJsYWgKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAg ICA8bGl0ZXJhbD5TZXNzaW9uIFVzZXI6PC9saXRlcmFsPiBibGFoIGJsYWggYmxhaAorICAgICAg ICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPkJhY2tlbmQgUElE OjwvbGl0ZXJhbD4gYmxhaCBibGFoIGJsYWgKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxw YXJhPgorICAgICAgICA8bGl0ZXJhbD5TZXJ2ZXIgQWRkcmVzczo8L2xpdGVyYWw+IGJsYWggYmxh aCBibGFoCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVy YWw+U2VydmVyIFBvcnQ6PC9saXRlcmFsPiBibGFoIGJsYWggYmxhaAorICAgICAgICA8L3BhcmE+ CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPkNsaWVudCBBZGRyZXNzOjwvbGl0 ZXJhbD4gYmxhaCBibGFoIGJsYWgKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgor ICAgICAgICA8bGl0ZXJhbD5DbGllbnQgUG9ydDo8L2xpdGVyYWw+IGJsYWggYmxhaCBibGFoCisg ICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+U29ja2V0 IERpcmVjdG9yeTo8L2xpdGVyYWw+IGJsYWggYmxhaCBibGFoCisgICAgICAgIDwvcGFyYT4KKwor ICAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+SG9zdDo8L2xpdGVyYWw+IGJsYWggYmxh aCBibGFoCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVy YWw+U1NMIENvbm5lY3Rpb246PC9saXRlcmFsPiBibGFoIGJsYWggYmxhaAorICAgICAgICA8L3Bh cmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPlNTTCBQcm90b2NvbDo8L2xp dGVyYWw+IGJsYWggYmxhaCBibGFoCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4K KyAgICAgICAgPGxpdGVyYWw+U1NMIENpcGhlcjo8L2xpdGVyYWw+IGJsYWggYmxhaCBibGFoCisg ICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+U0xMIENv bXByZXNzaW9uOjwvbGl0ZXJhbD4gYmxhaCBibGFoIGJsYWgKKyAgICAgICAgPC9wYXJhPgorCisg ICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5HU1NBUEk6PC9saXRlcmFsPiBibGFoIGJs YWggYmxhaAorICAgICAgICA8L3BhcmE+CisKICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwv dmFybGlzdGVudHJ5PgogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbWFuZC5jIGIvc3Jj L2Jpbi9wc3FsL2NvbW1hbmQuYwppbmRleCA1YzkwNmU0Li5jYjU0MjlmIDEwMDY0NAotLS0gYS9z cmMvYmluL3BzcWwvY29tbWFuZC5jCisrKyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKQEAgLTY4 LDcgKzY4LDggQEAgc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfQyhQc3FsU2Nh blN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW4KIHN0YXRpYyBiYWNrc2xhc2hSZXN1 bHQgZXhlY19jb21tYW5kX2Nvbm5lY3QoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFj dGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfY2QoUHNx bFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsCiAJCQkJCQkJCQkgICBj b25zdCBjaGFyICpjbWQpOwotc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfY29u bmluZm8oUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOworc3Rh dGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfY29ubmluZm8oUHNxbFNjYW5TdGF0ZSBz Y2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsCisJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpj bWQpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfY29weShQc3FsU2NhblN0 YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBzdGF0aWMgYmFja3NsYXNoUmVz dWx0IGV4ZWNfY29tbWFuZF9jb3B5cmlnaHQoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29s IGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfY3Jv c3N0YWJ2aWV3KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsK QEAgLTMxNyw4ICszMTgsOCBAQCBleGVjX2NvbW1hbmQoY29uc3QgY2hhciAqY21kLAogCQlzdGF0 dXMgPSBleGVjX2NvbW1hbmRfY29ubmVjdChzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAll bHNlIGlmIChzdHJjbXAoY21kLCAiY2QiKSA9PSAwKQogCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRf Y2Qoc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCwgY21kKTsKLQllbHNlIGlmIChzdHJjbXAoY21k LCAiY29ubmluZm8iKSA9PSAwKQotCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfY29ubmluZm8oc2Nh bl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCk7CisJZWxzZSBpZiAoc3RyY21wKGNtZCwgImNvbm5pbmZv IikgPT0gMCB8fCBzdHJjbXAoY21kLCAiY29ubmluZm8rIikgPT0gMCkKKwkJc3RhdHVzID0gZXhl Y19jb21tYW5kX2Nvbm5pbmZvKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gsIGNtZCk7CiAJZWxz ZSBpZiAocGdfc3RyY2FzZWNtcChjbWQsICJjb3B5IikgPT0gMCkKIAkJc3RhdHVzID0gZXhlY19j b21tYW5kX2NvcHkoc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21w KGNtZCwgImNvcHlyaWdodCIpID09IDApCkBAIC02NDMsNDcgKzY0NCw4MCBAQCBleGVjX2NvbW1h bmRfY2QoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsIGNvbnN0 IGNoYXIgKmNtZCkKIH0KIAogLyoKLSAqIFxjb25uaW5mbyAtLSBkaXNwbGF5IGluZm9ybWF0aW9u IGFib3V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24KKyAqIFxjb25uaW5mbywgXGNvbm5pbmZvKyAt LSBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24KICAqLwog c3RhdGljIGJhY2tzbGFzaFJlc3VsdAotZXhlY19jb21tYW5kX2Nvbm5pbmZvKFBzcWxTY2FuU3Rh dGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQorZXhlY19jb21tYW5kX2Nvbm5pbmZv KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoLCBjb25zdCBjaGFy ICpjbWQpCiB7CisJYm9vbAkJc3VjY2VzcyA9IHRydWU7CisKIAlpZiAoYWN0aXZlX2JyYW5jaCkK IAl7CiAJCWNoYXIJICAgKmRiID0gUFFkYihwc2V0LmRiKTsKKwkJYm9vbAkJc2hvd192ZXJib3Nl OworCisJCXNob3dfdmVyYm9zZSA9IHN0cmNocihjbWQsICcrJykgPyB0cnVlIDogZmFsc2U7CiAK LQkJaWYgKGRiID09IE5VTEwpCi0JCQlwcmludGYoXygiWW91IGFyZSBjdXJyZW50bHkgbm90IGNv bm5lY3RlZCB0byBhIGRhdGFiYXNlLlxuIikpOworCQkvKgorCQkgKiBcY29ubmluZm8rCisJCSAq LworCQlpZiAoc2hvd192ZXJib3NlKQorCQkJc3VjY2VzcyA9IGxpc3RDb25uZWN0aW9uSW5mb3Jt YXRpb24oKTsKKworCQkvKgorCQkgKiBcY29ubmluZm8KKwkJICovCiAJCWVsc2UKIAkJewotCQkJ Y2hhcgkgICAqaG9zdCA9IFBRaG9zdChwc2V0LmRiKTsKLQkJCWNoYXIJICAgKmhvc3RhZGRyID0g UFFob3N0YWRkcihwc2V0LmRiKTsKKwkJCVBHcmVzdWx0ICAgKnJlczsKKwkJCVBRRXhwQnVmZmVy RGF0YSBidWY7CiAKLQkJCWlmIChpc191bml4c29ja19wYXRoKGhvc3QpKQotCQkJewotCQkJCS8q IGhvc3RhZGRyIG92ZXJyaWRlcyBob3N0ICovCi0JCQkJaWYgKGhvc3RhZGRyICYmICpob3N0YWRk cikKLQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVkIHRvIGRhdGFiYXNlIFwiJXNcIiBh cyB1c2VyIFwiJXNcIiBvbiBhZGRyZXNzIFwiJXNcIiBhdCBwb3J0IFwiJXNcIi5cbiIpLAotCQkJ CQkJICAgZGIsIFBRdXNlcihwc2V0LmRiKSwgaG9zdGFkZHIsIFBRcG9ydChwc2V0LmRiKSk7Ci0J CQkJZWxzZQotCQkJCQlwcmludGYoXygiWW91IGFyZSBjb25uZWN0ZWQgdG8gZGF0YWJhc2UgXCIl c1wiIGFzIHVzZXIgXCIlc1wiIHZpYSBzb2NrZXQgaW4gXCIlc1wiIGF0IHBvcnQgXCIlc1wiLlxu IiksCi0JCQkJCQkgICBkYiwgUFF1c2VyKHBzZXQuZGIpLCBob3N0LCBQUXBvcnQocHNldC5kYikp OwotCQkJfQorCQkJaW5pdFBRRXhwQnVmZmVyKCZidWYpOworCisJCQlwcmludGZQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkJCSAgIlNFTEVDVFxuIgorCQkJCQkJCSAgIiAgaW5ldF9zZXJ2ZXJfYWRk cigpOyIpOworCisJCQlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisKKwkJCXRlcm1QUUV4cEJ1 ZmZlcigmYnVmKTsKKworCQkJaWYgKCFyZXMpCisJCQkJcmV0dXJuIFBTUUxfQ01EX0VSUk9SOwog CQkJZWxzZQogCQkJewotCQkJCWlmIChob3N0YWRkciAmJiAqaG9zdGFkZHIgJiYgc3RyY21wKGhv c3QsIGhvc3RhZGRyKSAhPSAwKQotCQkJCQlwcmludGYoXygiWW91IGFyZSBjb25uZWN0ZWQgdG8g ZGF0YWJhc2UgXCIlc1wiIGFzIHVzZXIgXCIlc1wiIG9uIGhvc3QgXCIlc1wiIChhZGRyZXNzIFwi JXNcIikgYXQgcG9ydCBcIiVzXCIuXG4iKSwKLQkJCQkJCSAgIGRiLCBQUXVzZXIocHNldC5kYiks IGhvc3QsIGhvc3RhZGRyLCBQUXBvcnQocHNldC5kYikpOworCQkJCWNoYXIJICAgKmhvc3QgPSBQ UWhvc3QocHNldC5kYik7CisJCQkJY2hhcgkgICAqaG9zdGFkZHIgPSBQUWhvc3RhZGRyKHBzZXQu ZGIpOworCisJCQkJaWYgKGlzX3VuaXhzb2NrX3BhdGgoaG9zdCkpCisJCQkJeworCQkJCQkvKiBo b3N0YWRkciBvdmVycmlkZXMgaG9zdCAqLworCQkJCQlpZiAoaG9zdGFkZHIgJiYgKmhvc3RhZGRy KQorCQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVkIHRvIGRhdGFiYXNlIFwiJXNcIiBh cyB1c2VyIFwiJXNcIiBvbiBhZGRyZXNzIFwiJXNcIiBhdCBwb3J0IFwiJXNcIi5cbiIpLAorCQkJ CQkJCSAgIGRiLCBQUXVzZXIocHNldC5kYiksIFBRZ2V0dmFsdWUocmVzLCAwLCAwKSwgUFFwb3J0 KHBzZXQuZGIpKTsKKwkJCQkJZWxzZQorCQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVk IHRvIGRhdGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiB2aWEgc29ja2V0IGluIFwiJXNcIiBh dCBwb3J0IFwiJXNcIi5cbiIpLAorCQkJCQkJCSAgIGRiLCBQUXVzZXIocHNldC5kYiksIGhvc3Qs IFBRcG9ydChwc2V0LmRiKSk7CisJCQkJfQogCQkJCWVsc2UKLQkJCQkJcHJpbnRmKF8oIllvdSBh cmUgY29ubmVjdGVkIHRvIGRhdGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiBvbiBob3N0IFwi JXNcIiBhdCBwb3J0IFwiJXNcIi5cbiIpLAotCQkJCQkJICAgZGIsIFBRdXNlcihwc2V0LmRiKSwg aG9zdCwgUFFwb3J0KHBzZXQuZGIpKTsKKwkJCQl7CisJCQkJCWlmIChob3N0YWRkciAmJiAqaG9z dGFkZHIgJiYgc3RyY21wKGhvc3QsIGhvc3RhZGRyKSAhPSAwKQorCQkJCQkJcHJpbnRmKF8oIllv dSBhcmUgY29ubmVjdGVkIHRvIGRhdGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiBvbiBob3N0 IFwiJXNcIiAoYWRkcmVzcyBcIiVzXCIpIGF0IHBvcnQgXCIlc1wiLlxuIiksCisJCQkJCQkJICAg ZGIsIFBRdXNlcihwc2V0LmRiKSwgaG9zdCwgUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBQUXBvcnQo cHNldC5kYikpOworCQkJCQllbHNlCisJCQkJCQlwcmludGYoXygiWW91IGFyZSBjb25uZWN0ZWQg dG8gZGF0YWJhc2UgXCIlc1wiIGFzIHVzZXIgXCIlc1wiIG9uIGhvc3QgXCIlc1wiIGF0IHBvcnQg XCIlc1wiLlxuIiksCisJCQkJCQkJICAgZGIsIFBRdXNlcihwc2V0LmRiKSwgaG9zdCwgUFFwb3J0 KHBzZXQuZGIpKTsKKwkJCQl9CisJCQkJUFFjbGVhcihyZXMpOworCQkJCXByaW50U1NMSW5mbygp OworCQkJCXByaW50R1NTSW5mbygpOwogCQkJfQotCQkJcHJpbnRTU0xJbmZvKCk7Ci0JCQlwcmlu dEdTU0luZm8oKTsKIAkJfQogCX0KKwllbHNlCisJCWlnbm9yZV9zbGFzaF9vcHRpb25zKHNjYW5f c3RhdGUpOwogCi0JcmV0dXJuIFBTUUxfQ01EX1NLSVBfTElORTsKKwlyZXR1cm4gc3VjY2VzcyA/ IFBTUUxfQ01EX1NLSVBfTElORSA6IFBTUUxfQ01EX0VSUk9SOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRl eCBiNmE0ZWIxLi45YTgzNTkyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwor KysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg ImZlX3V0aWxzL21icHJpbnQuaCIKICNpbmNsdWRlICJmZV91dGlscy9wcmludC5oIgogI2luY2x1 ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgorI2luY2x1ZGUgImxpYnBxL3BxY29tbS5oIgog I2luY2x1ZGUgInNldHRpbmdzLmgiCiAjaW5jbHVkZSAidmFyaWFibGVzLmgiCiAKQEAgLTkwMSw2 ICs5MDIsMTA1IEBAIGVycm9yX3JldHVybjoKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBs aXN0Q29ubmVjdGlvbkluZm9ybWF0aW9uCisgKgorICogZm9yIFxjb25uaW5mbysKKyAqLworYm9v bAorbGlzdENvbm5lY3Rpb25JbmZvcm1hdGlvbih2b2lkKQoreworCVBHcmVzdWx0ICAgKnJlczsK KwlQUUV4cEJ1ZmZlckRhdGEgYnVmOworCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7 CisKKwljaGFyCSAgICpob3N0ID0gUFFob3N0KHBzZXQuZGIpOworCWNoYXIJICAgKmhvc3RhZGRy ID0gUFFob3N0YWRkcihwc2V0LmRiKTsKKworCWNvbnN0IGNoYXIgKnByb3RvY29sOworCWNvbnN0 IGNoYXIgKmNpcGhlcjsKKwljb25zdCBjaGFyICpjb21wcmVzc2lvbjsKKworCWluaXRQUUV4cEJ1 ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVDVFxu IgorCQkJCQkgICIgIHBnX2NhdGFsb2cuY3VycmVudF9kYXRhYmFzZSgpIEFTIFwiRGF0YWJhc2Vc IixcbiIKKwkJCQkJICAiICAnJXMnIEFTIFwiQXV0aGVudGljYXRlZCBVc2VyXCIsXG4iLAorCQkJ CQkgIFBRdXNlcihwc2V0LmRiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKQorCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiICBwZ19jYXRhbG9nLnN5c3RlbV91c2Vy KCkgQVMgXCJTeXN0ZW0gVXNlclwiLFxuIik7CisJZWxzZQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLAorCQkJCQkJICAiICBOVUxMIEFTIFwiU3lzdGVtIFVzZXJcIixcbiIpOworCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIiAgcGdfY2F0YWxvZy5jdXJyZW50X3VzZXIoKSBBUyBc IkN1cnJlbnQgVXNlclwiLFxuIgorCQkJCQkgICIgIHBnX2NhdGFsb2cuc2Vzc2lvbl91c2VyKCkg QVMgXCJTZXNzaW9uIFVzZXJcIixcbiIKKwkJCQkJICAiICBwZ19jYXRhbG9nLnBnX2JhY2tlbmRf cGlkKCkgQVMgXCJCYWNrZW5kIFBJRFwiLFxuIgorCQkJCQkgICIgIHBnX2NhdGFsb2cuaW5ldF9z ZXJ2ZXJfYWRkcigpIEFTIFwiU2VydmVyIEFkZHJlc3NcIixcbiIKKwkJCQkJICAiICBwZ19jYXRh bG9nLmN1cnJlbnRfc2V0dGluZygncG9ydCcpIEFTIFwiU2VydmVyIFBvcnRcIixcbiIKKwkJCQkJ ICAiICBwZ19jYXRhbG9nLmluZXRfY2xpZW50X2FkZHIoKSBBUyBcIkNsaWVudCBBZGRyZXNzXCIs XG4iCisJCQkJCSAgIiAgcGdfY2F0YWxvZy5pbmV0X2NsaWVudF9wb3J0KCkgQVMgXCJDbGllbnQg UG9ydFwiLFxuIik7CisJaWYgKGlzX3VuaXhzb2NrX3BhdGgoaG9zdCkgJiYgIShob3N0YWRkciAm JiAqaG9zdGFkZHIpKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiICAnJXMn IEFTIFwiU29ja2V0IERpcmVjdG9yeVwiLFxuIiwKKwkJCQkJCSAgaG9zdCk7CisJZWxzZQorCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiICBOVUxMIEFTIFwiU29ja2V0IERpcmVj dG9yeVwiLFxuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiICBDQVNFXG4i CisJCQkJCSAgIiAgICBXSEVOXG4iCisJCQkJCSAgIiAgICAgIHBnX2NhdGFsb2cuaW5ldF9zZXJ2 ZXJfYWRkcigpIElTIE5VTExcbiIKKwkJCQkJICAiICAgICAgQU5EIHBnX2NhdGFsb2cuaW5ldF9j bGllbnRfYWRkcigpIElTIE5VTExcbiIKKwkJCQkJICAiICAgIFRIRU4gTlVMTFxuIgorCQkJCQkg ICIgICAgRUxTRSAnJXMnXG4iCisJCQkJCSAgIiAgRU5EIEFTIFwiSG9zdFwiLFxuIiwKKwkJCQkJ ICBob3N0KTsKKwlpZiAoUFFzc2xJblVzZShwc2V0LmRiKSkKKwl7CisJCXByb3RvY29sID0gUFFz c2xBdHRyaWJ1dGUocHNldC5kYiwgInByb3RvY29sIik7CisJCWNpcGhlciA9IFBRc3NsQXR0cmli dXRlKHBzZXQuZGIsICJjaXBoZXIiKTsKKwkJY29tcHJlc3Npb24gPSBQUXNzbEF0dHJpYnV0ZShw c2V0LmRiLCAiY29tcHJlc3Npb24iKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJ CQkJICAiICB0cnVlIEFTIFwiU1NMIENvbm5lY3Rpb25cIixcbiIKKwkJCQkJCSAgIiAgJyVzJyBB UyBcIlNTTCBQcm90b2NvbFwiLFxuIgorCQkJCQkJICAiICAnJXMnIEFTIFwiU1NMIENpcGhlclwi LFxuIgorCQkJCQkJICAiICAnJXMnIEFTIFwiU1NMIENvbXByZXNzaW9uXCIsXG4iLAorCQkJCQkJ ICBwcm90b2NvbCA/IHByb3RvY29sIDogXygidW5rbm93biIpLAorCQkJCQkJICBjaXBoZXIgPyBj aXBoZXIgOiBfKCJ1bmtub3duIiksCisJCQkJCQkgIChjb21wcmVzc2lvbiAmJiBzdHJjbXAoY29t cHJlc3Npb24sICJvZmYiKSAhPSAwKSA/IF8oIm9uIikgOiBfKCJvZmYiKSk7CisJfQorCWVsc2UK KwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIiAgZmFsc2UgQVMgXCJTU0wgQ29u bmVjdGlvblwiLFxuIgorCQkJCQkJICAiICBOVUxMIEFTIFwiU1NMIFByb3RvY29sXCIsXG4iCisJ CQkJCQkgICIgIE5VTEwgQVMgXCJTU0wgQ2lwaGVyXCIsXG4iCisJCQkJCQkgICIgIE5VTEwgQVMg XCJTU0wgQ29tcHJlc3Npb25cIixcbiIpOworCWlmIChQUWdzc0VuY0luVXNlKHBzZXQuZGIpKQor CQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiICB0cnVlIEFTIFwiR1NTQVBJXCJc biIpOworCWVsc2UKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIiAgZmFsc2Ug QVMgXCJHU1NBUElcIlxuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiOyIp OworCisJcmVzID0gUFNRTGV4ZWMoYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsK KwlpZiAoIXJlcykKKwkJcmV0dXJuIGZhbHNlOworCisJbXlvcHQudGl0bGUgPSBfKCJDdXJyZW50 IENvbm5lY3Rpb24gSW5mb3JtYXRpb24iKTsKKwlteW9wdC50cmFuc2xhdGVfaGVhZGVyID0gdHJ1 ZTsKKworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNl dC5sb2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsKK30KIAogLyoKICAq IGxpc3RBbGxEYnMKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oIGIvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmgKaW5kZXggMjczZjk3NC4uOGE0ZTgzZiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmgKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmgKQEAgLTY0 LDYgKzY0LDkgQEAgZXh0ZXJuIGJvb2wgbGlzdFRTRGljdGlvbmFyaWVzKGNvbnN0IGNoYXIgKnBh dHRlcm4sIGJvb2wgdmVyYm9zZSk7CiAvKiBcZEZ0ICovCiBleHRlcm4gYm9vbCBsaXN0VFNUZW1w bGF0ZXMoY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKTsKIAorLyogXGNvbm5pbmZv ICovCitleHRlcm4gYm9vbCBsaXN0Q29ubmVjdGlvbkluZm9ybWF0aW9uKHZvaWQpOworCiAvKiBc bCAqLwogZXh0ZXJuIGJvb2wgbGlzdEFsbERicyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZl cmJvc2UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvaGVscC5jIGIvc3JjL2Jpbi9wc3Fs L2hlbHAuYwppbmRleCA0ZTc5YTgxLi4yYzU0MjZkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwv aGVscC5jCisrKyBiL3NyYy9iaW4vcHNxbC9oZWxwLmMKQEAgLTMxMCw3ICszMTAsNyBAQCBzbGFz aFVzYWdlKHVuc2lnbmVkIHNob3J0IGludCBwYWdlcikKIAllbHNlCiAJCUhFTFAwKCIgIFxcY1tv bm5lY3RdIHtbREJOQU1FfC0gVVNFUnwtIEhPU1R8LSBQT1JUfC1dIHwgY29ubmluZm99XG4iCiAJ CQkgICIgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdCB0byBuZXcgZGF0YWJhc2UgKGN1 cnJlbnRseSBubyBjb25uZWN0aW9uKVxuIik7Ci0JSEVMUDAoIiAgXFxjb25uaW5mbyAgICAgICAg ICAgICAgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGNvbm5lY3Rpb25cbiIpOwor CUhFTFAwKCIgIFxcY29ubmluZm9bK10gICAgICAgICAgIGRpc3BsYXkgaW5mb3JtYXRpb24gYWJv dXQgY3VycmVudCBjb25uZWN0aW9uXG4iKTsKIAlIRUxQMCgiICBcXGVuY29kaW5nIFtFTkNPRElO R10gICBzaG93IG9yIHNldCBjbGllbnQgZW5jb2RpbmdcbiIpOwogCUhFTFAwKCIgIFxccGFzc3dv cmQgW1VTRVJOQU1FXSAgIHNlY3VyZWx5IGNoYW5nZSB0aGUgcGFzc3dvcmQgZm9yIGEgdXNlclxu Iik7CiAJSEVMUDAoIlxuIik7Cg== --_004_CP8P284MB2496AAFB879ABC5B1CD01CF4EC532CP8P284MB2496BRAP_--