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 1rXPE3-00ATvj-NQ for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Feb 2024 17:27:16 +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 1rXPE1-005Tvf-KA for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Feb 2024 17:27:13 +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.94.2) (envelope-from ) id 1rXPE1-005TuW-7E for pgsql-hackers@lists.postgresql.org; Tue, 06 Feb 2024 17:27:13 +0000 Received: from mail-roabra01olkn2039.outbound.protection.outlook.com ([40.92.96.39] helo=BRA01-ROA-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rXPDx-005ngl-6h for pgsql-hackers@postgresql.org; Tue, 06 Feb 2024 17:27:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q22aO7v4q4Ji7hwTw4GVUEwKQcsVRl8ehURs9mU0Eh8zcU1W+KcDC8mcClBh692yKgWzPuMK8gE0vb91NWALxC6SLXBK0nZW19GHSYKjDFO+8z8ZAlBGqSzFQ1/2aAJV92xuOSpF1VJl9IbGJkaqwQfWx07zIEL/naypfiE0nDAwgwFsOlD3sTaVYmcu824I/jHBiouW7L/txcFkBqqhzEIxafyCLJYJv7pIEHML7sX1MIKsNHukGtFG6rLvXu5HxC9NTm7n1Jn7dzcBS7lnifgETfy3yGq9duqZl6ND7ydEKt2BtEBJpOfAQiM6WVb0RKMAxZ9OBiUfaiy47thGXw== 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=P1EO8FMA7yoXTTaoQGZob2bU2W40ImfPneqZgXfF5yM=; b=SquJLnBfa0M+E5evZy5URId7s5QUPaH3CPjnKSvtwyYK4dXHNndfqZx3mVFjAOpPKmp+XUhJ8sS5lDsmKqR5pw2OvuH0TDDcGnmADDj0wAubd4fixk/zuGM58aeDiHDESF8SbvSCsvIKm+IE8q622SnOfAm871Bg/HXhOKwAd1gMYCURmD4VMn0hHT4v5JUVNQEF2WwHOKY9LdiEe0bcL4jq1JdPAGJ5MbJkDWYulDlb/IEWvdawFnkbE9G+ZyWhbScfpUYEm+MfR5uY2QGPLdPeww9q7VZ5BOm5sKf3TB4QyZXm+Etz6bi7gNET8I4SwtmLAG2fyHwLApAMrkwQng== 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 ROAP284MB2331.BRAP284.PROD.OUTLOOK.COM (2603:10d6:10:da::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.36; Tue, 6 Feb 2024 17:27:01 +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.7249.035; Tue, 6 Feb 2024 17:27:01 +0000 From: Maiquel Grassi To: "pgsql-hackers@postgresql.org" Subject: Psql meta-command conninfo+ Thread-Topic: Psql meta-command conninfo+ Thread-Index: AQHaWRQuU7L2MD2CX0quiO/hLxQK8Q== Date: Tue, 6 Feb 2024 17:27:01 +0000 Message-ID: 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: [pG+BdK4O28PMNU8k4iEVO5B3OVdYicM/R822KMVXU8CyDIt14j6Pn2+HCcMDp/mH] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CP8P284MB2496:EE_|ROAP284MB2331:EE_ x-ms-office365-filtering-correlation-id: 176d6746-786b-4e96-8d03-08dc2738d422 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xFkL0ybarbBvnRh+DrZp77MwNwX44yrc1bnU5S0MYSYD55r46pvGzExGTl+5vzaTJhbYHDB5FLmnOVKz6dh3OYTxP9AW7uF4rhA39S8OuKSRXLdLWa9QtnShUXzQ2n893XgjlwuQoTmsBmgYSbaAvzYOxrYP/oT/VZTupu9cPe3qY0nUp+bJoO8lWFCXDTsKzjqS4gUsVfs7+Mu4/5QGS2R2o08SJZvnmrJPxT4DP5mguAD3cyeQLhmaW5Ft2DXfiUncTKJzdEh0y25NHmQvtA0dBgfQO2Br+VC2iV9exhYeTckxCEKUDXxd/UX3sxBnU089MY81+dBZ3UfBbQT1QyGi3puILP0xad7Z3qNGubcm4wtj5s6Avy+h2SVuiH8Nt4VFV1KmbL3mUdSbNMjixT/kL9JAA5Iaq5VxZoVU/mmK4WjaGB/EsuU4S/b7WBey9HO/rhUpoaxp6Z9kusOEBg6CxQXEC2ply0xo1oTfyWIV+2e04HId6RCa9bTtYlp/tpl4hJ5Vxm7tEWEAY2gqdovO3Lo82wLQsi/B+ixcccMqiChnczaVIvairf+61h6Nlfw9TcouNz+wjudPpkxQJX4V7RSfQTEcRJ9deorcy1t3FgOxMIN1J/uHGMCQEmV7 x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?l8lCG5x4po6sH4u+itH3ciNb4OY27GiOtfw0btzxee9UE8sYIO4mBs+nQb?= =?iso-8859-1?Q?gFb1GWGAHU0p9G40JpkHxXtr3sJeEgt9SVxTDl5JvB6Ha8OnPI/bwN8OwI?= =?iso-8859-1?Q?nBhCsUhFK4kL88weDXcY7nH+4/JZlGCeQ8gpXK4HsGVYNKJQR+ZQLRXanp?= =?iso-8859-1?Q?c2RpHV5dk0xEAVAnzDx1GZ4PxPfrXutG8OdeXeCvfgXLGlV0V2LTXQUfxA?= =?iso-8859-1?Q?nHdx1KS+41xPKIGIvxz718bWnDrtA/BdlNMHTSBBvvfgnylJaJ5wX8lQ6h?= =?iso-8859-1?Q?09V4ZSB2SLVZpw3Yo/s3OJYCO7p+6SKdrQNs6grBXDfA0wTqSaO6NHHyXa?= =?iso-8859-1?Q?1dGSVGljlXII+Bc6dMpgFizhwwpvGSFyARmEntka5XGf+MYYVCO7PAljdF?= =?iso-8859-1?Q?M9k6B/HTyJc59xnqvXzIa8C21RMLztT3XXtzefskA13kweBLB6eAPyWYOe?= =?iso-8859-1?Q?ExRMNwXkYvR/V0zn9JsMp781fDIk3C+5Fz1HaCQUqSpRuc9zrcs22haT2D?= =?iso-8859-1?Q?/1lODIKzqAdzVMgXzCNjPfiry616Gjd6G0mX6jgsQVLmwNSE6NtZTk2eKv?= =?iso-8859-1?Q?oMI3ZnZt7lBnBwaLAR3hFWBDFTfgZPqZkL3/8o1Q2jK6J8eY8xP55CAqPo?= =?iso-8859-1?Q?S+dh7GpRmu/jHaGuHn5VRjDQyoh38C27EjQvvNxbFN/4tb3ZuuL7lRO0MY?= =?iso-8859-1?Q?qzmxbGQG83n9p6TIc0ZqnmHYUb6eRlHpVO1BCd3Z+sIPuHzHv+Itz6Em+U?= =?iso-8859-1?Q?zp1aWEqhAyBxH6uxBF7gmm1ldfJpY2cCelN8jLg9HXWWqZ+qV5NReMwDYR?= =?iso-8859-1?Q?is039MXDv4XG8KuSBgVVS1E3Caohn5JEy9xsQPTSsnj/QLyy8IM6crNuXb?= =?iso-8859-1?Q?y2sl7IBfO+/JYi6P02iDzKBhplc4bEVkpHMaP/UVWbSjKSnkiaV1HIvfC+?= =?iso-8859-1?Q?Zn5kK7e75errJF5Ef7/P7TsucsCfPLWPxVk73SsKFfK7KQVBToPctXBzgt?= =?iso-8859-1?Q?VdykEg/mbq5CZgjZXXx1LYQ9ROrRg0TYCHqj1+beNiIKm8ISwO+M/EFezT?= =?iso-8859-1?Q?ou6vkQW8Sm8F89pCn7bvs9trRWHuYxeQMayKu+KSz3y9iMNwrGNnKD1/fu?= =?iso-8859-1?Q?KEOPqAfUvzD3Sh1i7BmQJrLmwjNt/R1ZBeT8mk26qWLFVFpUySbQcBbyeN?= =?iso-8859-1?Q?LxdJJavLxdKubn0GDIjVXoQNwmcV6wm3YOdhMzOasSUQ9xKos4slku4sB/?= =?iso-8859-1?Q?dF/W03xvkL/R7rSeGUTn7etntm8Zk96tvRelEtsOXcHSQHFsdQLiwc7n39?= =?iso-8859-1?Q?bBvTiViXT5J2trJ2PFoJH7o6ag=3D=3D?= Content-Type: multipart/mixed; boundary="_004_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_" 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: 176d6746-786b-4e96-8d03-08dc2738d422 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Feb 2024 17:27:01.0254 (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: ROAP284MB2331 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_ Content-Type: multipart/alternative; boundary="_000_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_" --_000_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, I'm seeking to improve the \conninfo meta-command in psql. Currently, it pr= ovides limited information about the current connection. I believe that exp= anding it using the concept of "plus" [+] could ease the work of DBAs, SysA= dmins, DevOps, etc., who manage a large volume of databases and/or multiple= PostgreSQL servers. The objective of this enhancement is to obtain quick i= nformation about the current connection (session). I believe that for a Pos= tgreSQL administrator, it is not feasible to write a plpgsql function and a= pply it to all databases (for example, imagine managing over 200 databases)= . I have an example on GitHub https://github.com/maiquelgrassi/DBA-toolkit/= blob/main/cluster/dba_whoami_function.sql of a plpgsql function demonstrati= ng exactly what I believe is impractical for the daily routine of a Postgre= SQL professional. I see psql's meta-commands as significant allies in daily= work in productive environments. Note: As this is a prototype, I will adjust the rest (documentation, tests,= etc.) once an agreement is reached. Use cases for both the current and improved command bellow. Connection 1 ("remote server"): [postgres@localhost bin]$ ./psql -h 192.168.0.5 -p 5433 -U postgres -d post= gres psql (17devel, server 16.1) Type "help" for help. postgres=3D# \conninfo You are connected to database "postgres" as user "postgres" on host "192.16= 8.0.5" at port "5433". postgres=3D# \conninfo+ Current Connection Information Attribute | Value ----------------+---------------- Database | postgres User | postgres Server Version | 16.1 Server Address | 192.168.0.5/32 Server Port | 5433 Client Address | 192.168.0.5/32 Client Port | 52716 Session PID | 21624 (8 rows) Connection 2 (socket): [postgres@localhost bin]$ ./psql psql (17devel) Type "help" for help. postgres=3D# \conninfo You are connected to database "postgres" as user "postgres" via socket in "= /tmp" at port "5432". postgres=3D# \conninfo+ Current Connection Information Attribute | Value ------------------+----------------------- Info | Connected via socket! Database | postgres User | postgres Socket Directory | /tmp Server Version | 17devel Server Port | 5432 Session PID | 27586 (7 rows) Connection 3 (localhost): [postgres@localhost bin]$ ./psql -h localhost psql (17devel) Type "help" for help. postgres=3D# \conninfo You are connected to database "postgres" as user "postgres" on host "localh= ost" (address "::1") at port "5432". postgres=3D# \conninfo+ Current Connection Information Attribute | Value ----------------+----------- Database | postgres User | postgres Host | localhost Server Version | 17devel Server Address | ::1/128 Server Port | 5432 Client Address | ::1/128 Client Port | 46824 Session PID | 27598 (9 rows) Connection 4 (127.0.0.1): [postgres@localhost bin]$ ./psql -h 127.0.0.1 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 Attribute | Value ----------------+-------------- Database | postgres User | postgres Server Version | 17devel Server Address | 127.0.0.1/32 Server Port | 5432 Client Address | 127.0.0.1/32 Client Port | 34876 Session PID | 27624 (8 rows) Regards, Maiquel O. Grassi. --_000_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

= Hi,

= I'm seeking to improve the \conninfo meta-command i= n psql. Currently, it provides limited information about the current connection. I believe that expanding it usin= g the concept of "plus" [+] could ease the work of DBAs, SysAdmin= s, DevOps, etc., who manage a large volume of databases and/or multiple Pos= tgreSQL servers. The objective of this enhancement is to obtain quick information about the current connection (session). I b= elieve that for a PostgreSQL administrator, it is not feasible to write a p= lpgsql function and apply it to all databases (for example, imagine managin= g over 200 databases). I have an example on GitHub https://github.com/maiquelgrassi/DBA-toolkit/blob/main/cluster/dba_whoami_f= unction.sql of a plpgsql function demonstrating exactly what I bel= ieve is impractical for the daily routine of a PostgreSQL professional. I s= ee psql's meta-commands as significant allies in daily work in productive environments.

=

Note: As th= is is a prototype, I will adjust the rest (documentation, tests, etc.) once= an agreement is reached.


Use cases for both the current and improved command bellow.

Connection 1 ("remote server"):

[postgres@localhost bin= ]$ ./psql -h 192.168.0.5 -p 5433 -U postgres -d postgres

psql (17devel, server= 16.1)
Type "help"= for help.

postgres=3D# \conninfo
You are connected to database "postgres&q= uot; as user "postgres" on host "192.168.0.5" at port &= quot;5433".
postgres=3D# \conninfo+
 Current Connection Information
   Attribute    |   &= nbsp; Value
----------------+----------------
 Database       | postgres=
 User           = | postgres
 Server Version | 16.1
 Server Address | 192.168.0.5/32
 Server Port    | 5433
 Client Address = | 192.168.0.5/32
 Client Port    | 52716<= /div>
 Session PID    | 21624<= /div>
(8 rows)

Connection 2 (socket= ):

[postgres@localhost bin= ]$ ./psql

psql (17devel)=
Type "help"= for help.

postgres=3D# \conninf= o
You are connected to = database "postgres" as user "postgres" via socket in &q= uot;/tmp" at port "5432".
postgres=3D# \conninf= o+
      = Current Connection Information
    Attribu= te     |         Value
------------------+--= ---------------------
 Info           =   | Connected via socket!
 Database  =       | postgres
 User   &nb= sp;         | postgres
 Socket Director= y | /tmp
 Server Version =   | 17devel
 Server Port &nb= sp;    | 5432
 Session PID &nb= sp;    | 27586
(7 rows)

Connection 3 (loca= lhost):
[postgres@localhost bin]$ ./psql -h localhost<= /span>
psql (17devel)=
Type "help"= for help.

postgres=3D# \conninf= o
You are connected to database "postgres&q= uot; as user "postgres" on host "localhost" (address &q= uot;::1") at port "5432".
postgres=3D# \conninf= o+
Current Connection Information
   Attribut= e    |   Value
----------------+----= -------
 Database       | postgres=
 User           = | postgres
 Host           = | localhost
 Server Version = | 17devel
 Server Address = | ::1/128
 Server Port &nb= sp;  | 5432
 Client Address | ::1/128
 Client Port &nb= sp;  | 46824
 Session PID    | 27598<= /div>
(9 rows)

Connection 4 (127.= 0.0.1):
[postgres@localhost b= in]$ ./psql -h 127.0.0.1
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# \conninf= o+
Current Connection Information
   Attribute    |   &= nbsp;Value
----------------+----= ----------
 Database  =     | postgres
 User   &nb= sp;       | postgres
 Server Version | 17devel
 Server Address | 127.0.0.1/32
 Server Port    | 5432
 Client Address | 127.0.0.1/32
 Client Port    | 34876<= /div>
 Session PID    | 27624<= /div>
(8 rows)

Regards,
Maiquel O. Grassi.
--_000_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_-- --_004_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_ Content-Type: application/octet-stream; name="v1-0001-psql-meta-command-conninfo-plus.patch" Content-Description: v1-0001-psql-meta-command-conninfo-plus.patch Content-Disposition: attachment; filename="v1-0001-psql-meta-command-conninfo-plus.patch"; size=11559; creation-date="Tue, 06 Feb 2024 16:18:37 GMT"; modification-date="Tue, 06 Feb 2024 17:23:17 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9zcmMvYmluL3BzcWwvY29tbWFu ZC5jCmluZGV4IDVjOTA2ZTQuLmFkOGUzNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21t YW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtNjgsNyArNjgsOCBAQCBzdGF0 aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9DKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0 ZSwgYm9vbCBhY3RpdmVfYnJhbgogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRf Y29ubmVjdChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CiBz dGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9jZChQc3FsU2NhblN0YXRlIHNjYW5f c3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwKIAkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNtZCk7 Ci1zdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9jb25uaW5mbyhQc3FsU2NhblN0 YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CitzdGF0aWMgYmFja3NsYXNoUmVz dWx0IGV4ZWNfY29tbWFuZF9jb25uaW5mbyhQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wg YWN0aXZlX2JyYW5jaCwKKwkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmNtZCk7CiBzdGF0aWMgYmFj a3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9jb3B5KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwg Ym9vbCBhY3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5k X2NvcHlyaWdodChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7 CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9jcm9zc3RhYnZpZXcoUHNxbFNj YW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpOwpAQCAtMzE3LDggKzMxOCw4 IEBAIGV4ZWNfY29tbWFuZChjb25zdCBjaGFyICpjbWQsCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFu ZF9jb25uZWN0KHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gpOwogCWVsc2UgaWYgKHN0cmNtcChj bWQsICJjZCIpID09IDApCiAJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9jZChzY2FuX3N0YXRlLCBh Y3RpdmVfYnJhbmNoLCBjbWQpOwotCWVsc2UgaWYgKHN0cmNtcChjbWQsICJjb25uaW5mbyIpID09 IDApCi0JCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9jb25uaW5mbyhzY2FuX3N0YXRlLCBhY3RpdmVf YnJhbmNoKTsKKwllbHNlIGlmIChzdHJjbXAoY21kLCAiY29ubmluZm8iKSA9PSAwIHx8IHN0cmNt cChjbWQsICJjb25uaW5mbysiKSA9PSAwKQorCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfY29ubmlu Zm8oc2Nhbl9zdGF0ZSwgYWN0aXZlX2JyYW5jaCwgY21kKTsKIAllbHNlIGlmIChwZ19zdHJjYXNl Y21wKGNtZCwgImNvcHkiKSA9PSAwKQogCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfY29weShzY2Fu X3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChzdHJjbXAoY21kLCAiY29weXJpZ2h0 IikgPT0gMCkKQEAgLTY0Myw0NyArNjQ0LDc0IEBAIGV4ZWNfY29tbWFuZF9jZChQc3FsU2NhblN0 YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwgY29uc3QgY2hhciAqY21kKQogfQog CiAvKgotICogXGNvbm5pbmZvIC0tIGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJl bnQgY29ubmVjdGlvbgorICogXGNvbm5pbmZvLCBcY29ubmluZm8rIC0tIGRpc3BsYXkgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgY29ubmVjdGlvbgogICovCiBzdGF0aWMgYmFja3NsYXNo UmVzdWx0Ci1leGVjX2NvbW1hbmRfY29ubmluZm8oUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBi b29sIGFjdGl2ZV9icmFuY2gpCitleGVjX2NvbW1hbmRfY29ubmluZm8oUHNxbFNjYW5TdGF0ZSBz Y2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsIGNvbnN0IGNoYXIgKmNtZCkKIHsKKwlib29s CQlzdWNjZXNzID0gdHJ1ZTsKKwogCWlmIChhY3RpdmVfYnJhbmNoKQogCXsKIAkJY2hhcgkgICAq ZGIgPSBQUWRiKHBzZXQuZGIpOworCQljaGFyCSAgICpwYXR0ZXJuOworCQlib29sCQlzaG93X3Zl cmJvc2U7CiAKLQkJaWYgKGRiID09IE5VTEwpCi0JCQlwcmludGYoXygiWW91IGFyZSBjdXJyZW50 bHkgbm90IGNvbm5lY3RlZCB0byBhIGRhdGFiYXNlLlxuIikpOwotCQllbHNlCisJCXBhdHRlcm4g PSBwc3FsX3NjYW5fc2xhc2hfb3B0aW9uKHNjYW5fc3RhdGUsIE9UX05PUk1BTCwgTlVMTCwgdHJ1 ZSk7CisKKwkJc2hvd192ZXJib3NlID0gc3RyY2hyKGNtZCwgJysnKSA/IHRydWUgOiBmYWxzZTsK KworCQkvKgorCQkgKiBcY29ubmluZm8rCisJCSAqLworCQlpZiAoc2hvd192ZXJib3NlKQogCQl7 Ci0JCQljaGFyCSAgICpob3N0ID0gUFFob3N0KHBzZXQuZGIpOwotCQkJY2hhcgkgICAqaG9zdGFk ZHIgPSBQUWhvc3RhZGRyKHBzZXQuZGIpOworCQkJc3VjY2VzcyA9IGxpc3RDb25uZWN0aW9uSW5m b3JtYXRpb24ocGF0dGVybiwgc2hvd192ZXJib3NlKTsKKwkJCWZyZWUocGF0dGVybik7CisJCQlw cmludFNTTEluZm8oKTsKKwkJCXByaW50R1NTSW5mbygpOworCQl9CiAKLQkJCWlmIChpc191bml4 c29ja19wYXRoKGhvc3QpKQotCQkJewotCQkJCS8qIGhvc3RhZGRyIG92ZXJyaWRlcyBob3N0ICov Ci0JCQkJaWYgKGhvc3RhZGRyICYmICpob3N0YWRkcikKLQkJCQkJcHJpbnRmKF8oIllvdSBhcmUg Y29ubmVjdGVkIHRvIGRhdGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiBvbiBhZGRyZXNzIFwi JXNcIiBhdCBwb3J0IFwiJXNcIi5cbiIpLAotCQkJCQkJICAgZGIsIFBRdXNlcihwc2V0LmRiKSwg aG9zdGFkZHIsIFBRcG9ydChwc2V0LmRiKSk7Ci0JCQkJZWxzZQotCQkJCQlwcmludGYoXygiWW91 IGFyZSBjb25uZWN0ZWQgdG8gZGF0YWJhc2UgXCIlc1wiIGFzIHVzZXIgXCIlc1wiIHZpYSBzb2Nr ZXQgaW4gXCIlc1wiIGF0IHBvcnQgXCIlc1wiLlxuIiksCi0JCQkJCQkgICBkYiwgUFF1c2VyKHBz ZXQuZGIpLCBob3N0LCBQUXBvcnQocHNldC5kYikpOwotCQkJfQorCQkvKgorCQkgKiBcY29ubmlu Zm8KKwkJICovCisJCWVsc2UKKwkJeworCQkJaWYgKGRiID09IE5VTEwpCisJCQkJcHJpbnRmKF8o IllvdSBhcmUgY3VycmVudGx5IG5vdCBjb25uZWN0ZWQgdG8gYSBkYXRhYmFzZS5cbiIpKTsKIAkJ CWVsc2UKIAkJCXsKLQkJCQlpZiAoaG9zdGFkZHIgJiYgKmhvc3RhZGRyICYmIHN0cmNtcChob3N0 LCBob3N0YWRkcikgIT0gMCkKLQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVkIHRvIGRh dGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiBvbiBob3N0IFwiJXNcIiAoYWRkcmVzcyBcIiVz XCIpIGF0IHBvcnQgXCIlc1wiLlxuIiksCi0JCQkJCQkgICBkYiwgUFF1c2VyKHBzZXQuZGIpLCBo b3N0LCBob3N0YWRkciwgUFFwb3J0KHBzZXQuZGIpKTsKKwkJCQljaGFyCSAgICpob3N0ID0gUFFo b3N0KHBzZXQuZGIpOworCQkJCWNoYXIJICAgKmhvc3RhZGRyID0gUFFob3N0YWRkcihwc2V0LmRi KTsKKworCQkJCWlmIChpc191bml4c29ja19wYXRoKGhvc3QpKQorCQkJCXsKKwkJCQkJLyogaG9z dGFkZHIgb3ZlcnJpZGVzIGhvc3QgKi8KKwkJCQkJaWYgKGhvc3RhZGRyICYmICpob3N0YWRkcikK KwkJCQkJCXByaW50ZihfKCJZb3UgYXJlIGNvbm5lY3RlZCB0byBkYXRhYmFzZSBcIiVzXCIgYXMg dXNlciBcIiVzXCIgb24gYWRkcmVzcyBcIiVzXCIgYXQgcG9ydCBcIiVzXCIuXG4iKSwKKwkJCQkJ CQkgICBkYiwgUFF1c2VyKHBzZXQuZGIpLCBob3N0YWRkciwgUFFwb3J0KHBzZXQuZGIpKTsKKwkJ CQkJZWxzZQorCQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVkIHRvIGRhdGFiYXNlIFwi JXNcIiBhcyB1c2VyIFwiJXNcIiB2aWEgc29ja2V0IGluIFwiJXNcIiBhdCBwb3J0IFwiJXNcIi5c biIpLAorCQkJCQkJCSAgIGRiLCBQUXVzZXIocHNldC5kYiksIGhvc3QsIFBRcG9ydChwc2V0LmRi KSk7CisJCQkJfQogCQkJCWVsc2UKLQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVkIHRv IGRhdGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiBvbiBob3N0IFwiJXNcIiBhdCBwb3J0IFwi JXNcIi5cbiIpLAotCQkJCQkJICAgZGIsIFBRdXNlcihwc2V0LmRiKSwgaG9zdCwgUFFwb3J0KHBz ZXQuZGIpKTsKKwkJCQl7CisJCQkJCWlmIChob3N0YWRkciAmJiAqaG9zdGFkZHIgJiYgc3RyY21w KGhvc3QsIGhvc3RhZGRyKSAhPSAwKQorCQkJCQkJcHJpbnRmKF8oIllvdSBhcmUgY29ubmVjdGVk IHRvIGRhdGFiYXNlIFwiJXNcIiBhcyB1c2VyIFwiJXNcIiBvbiBob3N0IFwiJXNcIiAoYWRkcmVz cyBcIiVzXCIpIGF0IHBvcnQgXCIlc1wiLlxuIiksCisJCQkJCQkJICAgZGIsIFBRdXNlcihwc2V0 LmRiKSwgaG9zdCwgaG9zdGFkZHIsIFBRcG9ydChwc2V0LmRiKSk7CisJCQkJCWVsc2UKKwkJCQkJ CXByaW50ZihfKCJZb3UgYXJlIGNvbm5lY3RlZCB0byBkYXRhYmFzZSBcIiVzXCIgYXMgdXNlciBc IiVzXCIgb24gaG9zdCBcIiVzXCIgYXQgcG9ydCBcIiVzXCIuXG4iKSwKKwkJCQkJCQkgICBkYiwg UFF1c2VyKHBzZXQuZGIpLCBob3N0LCBQUXBvcnQocHNldC5kYikpOworCQkJCX0KKwkJCQlwcmlu dFNTTEluZm8oKTsKKwkJCQlwcmludEdTU0luZm8oKTsKIAkJCX0KLQkJCXByaW50U1NMSW5mbygp OwotCQkJcHJpbnRHU1NJbmZvKCk7CiAJCX0KIAl9CisJZWxzZQorCQlpZ25vcmVfc2xhc2hfb3B0 aW9ucyhzY2FuX3N0YXRlKTsKIAotCXJldHVybiBQU1FMX0NNRF9TS0lQX0xJTkU7CisJcmV0dXJu IHN1Y2Nlc3MgPyBQU1FMX0NNRF9TS0lQX0xJTkUgOiBQU1FMX0NNRF9FUlJPUjsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKaW5kZXggYjZhNGViMS4uMTE1Mzc2YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rl c2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTI2LDYgKzI2LDcgQEAK ICNpbmNsdWRlICJmZV91dGlscy9tYnByaW50LmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvcHJpbnQu aCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJwcS9w cWNvbW0uaCIKICNpbmNsdWRlICJzZXR0aW5ncy5oIgogI2luY2x1ZGUgInZhcmlhYmxlcy5oIgog CkBAIC05MDEsNiArOTAyLDEyMCBAQCBlcnJvcl9yZXR1cm46CiAJcmV0dXJuIGZhbHNlOwogfQog CisvKgorICogbGlzdENvbm5lY3Rpb25JbmZvcm1hdGlvbgorICoKKyAqIGZvciBcY29ubmluZm8r CisgKi8KK2Jvb2wKK2xpc3RDb25uZWN0aW9uSW5mb3JtYXRpb24oY29uc3QgY2hhciAqcGF0dGVy biwgYm9vbCB2ZXJib3NlKQoreworICAgIFBHcmVzdWx0ICAgKnJlczsKKyAgICBQUUV4cEJ1ZmZl ckRhdGEgYnVmOworICAgIHByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7CisKKyAgICBj aGFyICAgICAgICpob3N0ID0gUFFob3N0KHBzZXQuZGIpOworICAgIGNoYXIgICAgICAgKmhvc3Rh ZGRyID0gUFFob3N0YWRkcihwc2V0LmRiKTsKKworICAgIGluaXRQUUV4cEJ1ZmZlcigmYnVmKTsK KworICAgIGlmIChpc191bml4c29ja19wYXRoKGhvc3QpKQorICAgIHsKKyAgICAgICAgLyogaG9z dGFkZHIgb3ZlcnJpZGVzIGhvc3QgKi8KKyAgICAgICAgaWYgKGhvc3RhZGRyICYmICpob3N0YWRk cikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1RcbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJcIkF0dHJpYnV0ZVwiLFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlwiVmFsdWVcIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZST01cbiIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoXG4iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVkFMVUVTXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdE YXRhYmFzZScscGdfY2F0YWxvZy5jdXJyZW50X2RhdGFiYXNlKCkpLFxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIignVXNlcicscGdfY2F0YWxvZy5jdXJyZW50X3VzZXIoKSksXG4i CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdTZXJ2ZXIgVmVyc2lvbicscGdfY2F0 YWxvZy5jdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uJykpLFxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIignU2VydmVyIEFkZHJlc3MnLHBnX2NhdGFsb2cuaW5ldF9zZXJ2 ZXJfYWRkcigpOjp0ZXh0KSxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJ1Nl cnZlciBQb3J0JyxwZ19jYXRhbG9nLmN1cnJlbnRfc2V0dGluZygncG9ydCcpKSxcbiIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIoJ0NsaWVudCBBZGRyZXNzJyxwZ19jYXRhbG9nLmlu ZXRfY2xpZW50X2FkZHIoKTo6dGV4dCksXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiKCdDbGllbnQgUG9ydCcscGdfY2F0YWxvZy5pbmV0X2NsaWVudF9wb3J0KCk6OnRleHQpLFxu IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIignU2Vzc2lvbiBQSUQnLHBnX2NhdGFs b2cucGdfYmFja2VuZF9waWQoKTo6dGV4dClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIpIEFTIHRhYihcIkF0dHJpYnV0ZVwiLFwiVmFsdWVcIik7Iik7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGZQUUV4cEJ1ZmZlcigmYnVm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVFxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlwiQXR0cmlidXRlXCIsXG4iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiXCJWYWx1ZVwiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi RlJPTVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihcbiIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJWQUxVRVNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIoJ0luZm8nLCdDb25uZWN0ZWQgdmlhIHNvY2tldCEnKSxcbiIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIoJ0RhdGFiYXNlJyxwZ19jYXRhbG9nLmN1cnJlbnRfZGF0YWJhc2Uo KSksXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdVc2VyJyxwZ19jYXRhbG9n LmN1cnJlbnRfdXNlcigpKSxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJ1Nv Y2tldCBEaXJlY3RvcnknLHBnX2NhdGFsb2cuY3VycmVudF9zZXR0aW5nKCd1bml4X3NvY2tldF9k aXJlY3RvcmllcycpKSxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJ1NlcnZl ciBWZXJzaW9uJyxwZ19jYXRhbG9nLmN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb24nKSks XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdTZXJ2ZXIgUG9ydCcscGdfY2F0 YWxvZy5jdXJyZW50X3NldHRpbmcoJ3BvcnQnKSksXG4iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiKCdTZXNzaW9uIFBJRCcscGdfY2F0YWxvZy5wZ19iYWNrZW5kX3BpZCgpOjp0ZXh0 KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgQVMgdGFiKFwiQXR0cmlidXRl XCIsXCJWYWx1ZVwiKTsiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg ICAgICBpZiAoaG9zdGFkZHIgJiYgKmhvc3RhZGRyICYmIHN0cmNtcChob3N0LCBob3N0YWRkcikg IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1RcbiIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJcIkF0dHJpYnV0ZVwiLFxuIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlwiVmFsdWVcIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZST01c biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoXG4iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVkFMVUVTXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi KCdEYXRhYmFzZScscGdfY2F0YWxvZy5jdXJyZW50X2RhdGFiYXNlKCkpLFxuIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIignVXNlcicscGdfY2F0YWxvZy5jdXJyZW50X3VzZXIoKSks XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdIb3N0JywnbG9jYWxob3N0Jyks XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdTZXJ2ZXIgVmVyc2lvbicscGdf Y2F0YWxvZy5jdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uJykpLFxuIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIignU2VydmVyIEFkZHJlc3MnLHBnX2NhdGFsb2cuaW5ldF9z ZXJ2ZXJfYWRkcigpOjp0ZXh0KSxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIo J1NlcnZlciBQb3J0JyxwZ19jYXRhbG9nLmN1cnJlbnRfc2V0dGluZygncG9ydCcpKSxcbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJ0NsaWVudCBBZGRyZXNzJyxwZ19jYXRhbG9n LmluZXRfY2xpZW50X2FkZHIoKTo6dGV4dCksXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKCdDbGllbnQgUG9ydCcscGdfY2F0YWxvZy5pbmV0X2NsaWVudF9wb3J0KCk6OnRleHQp LFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIignU2Vzc2lvbiBQSUQnLHBnX2Nh dGFsb2cucGdfYmFja2VuZF9waWQoKTo6dGV4dClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIpIEFTIHRhYihcIkF0dHJpYnV0ZVwiLFwiVmFsdWVcIik7Iik7CisgICAgICAgIH0K KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGZQUUV4cEJ1ZmZlcigm YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVFxuIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlwiQXR0cmlidXRlXCIsXG4iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiXCJWYWx1ZVwiXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiRlJPTVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihcbiIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJWQUxVRVNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIoJ0RhdGFiYXNlJyxwZ19jYXRhbG9nLmN1cnJlbnRfZGF0YWJhc2UoKSksXG4iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdVc2VyJyxwZ19jYXRhbG9nLmN1cnJlbnRf dXNlcigpKSxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJ1NlcnZlciBWZXJz aW9uJyxwZ19jYXRhbG9nLmN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb24nKSksXG4iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdTZXJ2ZXIgQWRkcmVzcycscGdfY2F0YWxv Zy5pbmV0X3NlcnZlcl9hZGRyKCk6OnRleHQpLFxuIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIignU2VydmVyIFBvcnQnLHBnX2NhdGFsb2cuY3VycmVudF9zZXR0aW5nKCdwb3J0Jykp LFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIignQ2xpZW50IEFkZHJlc3MnLHBn X2NhdGFsb2cuaW5ldF9jbGllbnRfYWRkcigpOjp0ZXh0KSxcbiIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIoJ0NsaWVudCBQb3J0JyxwZ19jYXRhbG9nLmluZXRfY2xpZW50X3BvcnQo KTo6dGV4dCksXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCdTZXNzaW9uIFBJ RCcscGdfY2F0YWxvZy5wZ19iYWNrZW5kX3BpZCgpOjp0ZXh0KVxuIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIikgQVMgdGFiKFwiQXR0cmlidXRlXCIsXCJWYWx1ZVwiKTsiKTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKyAgICB0ZXJt UFFFeHBCdWZmZXIoJmJ1Zik7CisgICAgaWYgKCFyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsK KworICAgIG15b3B0LnRpdGxlID0gXygiQ3VycmVudCBDb25uZWN0aW9uIEluZm9ybWF0aW9uIik7 CisgICAgbXlvcHQudHJhbnNsYXRlX2hlYWRlciA9IHRydWU7CisKKyAgICBwcmludFF1ZXJ5KHJl cywgJm15b3B0LCBwc2V0LnF1ZXJ5Rm91dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7CisKKyAgICBQ UWNsZWFyKHJlcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIC8qCiAgKiBsaXN0QWxsRGJzCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuaCBiL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5oCmluZGV4IDI3M2Y5NzQuLmI2MzhjNzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5oCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCkBAIC0xNDksNCArMTQ5LDcgQEAg ZXh0ZXJuIGJvb2wgbGlzdE9wRmFtaWx5RnVuY3Rpb25zKGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRo b2RfcGF0dGVybiwKIC8qIFxkbCBvciBcbG9fbGlzdCAqLwogZXh0ZXJuIGJvb2wgbGlzdExhcmdl T2JqZWN0cyhib29sIHZlcmJvc2UpOwogCisvKiBcY29ubmluZm8gKi8KK2V4dGVybiBib29sIGxp c3RDb25uZWN0aW9uSW5mb3JtYXRpb24oY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3Nl KTsKKwogI2VuZGlmCQkJCQkJCS8qIERFU0NSSUJFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC9oZWxwLmMgYi9zcmMvYmluL3BzcWwvaGVscC5jCmluZGV4IDRlNzlhODEuLjJjNTQyNmQg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAu YwpAQCAtMzEwLDcgKzMxMCw3IEBAIHNsYXNoVXNhZ2UodW5zaWduZWQgc2hvcnQgaW50IHBhZ2Vy KQogCWVsc2UKIAkJSEVMUDAoIiAgXFxjW29ubmVjdF0ge1tEQk5BTUV8LSBVU0VSfC0gSE9TVHwt IFBPUlR8LV0gfCBjb25uaW5mb31cbiIKIAkJCSAgIiAgICAgICAgICAgICAgICAgICAgICAgICBj b25uZWN0IHRvIG5ldyBkYXRhYmFzZSAoY3VycmVudGx5IG5vIGNvbm5lY3Rpb24pXG4iKTsKLQlI RUxQMCgiICBcXGNvbm5pbmZvICAgICAgICAgICAgICBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0 IGN1cnJlbnQgY29ubmVjdGlvblxuIik7CisJSEVMUDAoIiAgXFxjb25uaW5mb1srXSAgICAgICAg ICAgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGNvbm5lY3Rpb25cbiIpOwogCUhF TFAwKCIgIFxcZW5jb2RpbmcgW0VOQ09ESU5HXSAgIHNob3cgb3Igc2V0IGNsaWVudCBlbmNvZGlu Z1xuIik7CiAJSEVMUDAoIiAgXFxwYXNzd29yZCBbVVNFUk5BTUVdICAgc2VjdXJlbHkgY2hhbmdl IHRoZSBwYXNzd29yZCBmb3IgYSB1c2VyXG4iKTsKIAlIRUxQMCgiXG4iKTsK --_004_CP8P284MB24965CB63DAC00FC0EA4A475EC462CP8P284MB2496BRAP_--