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 1vMR9S-009jDn-0q for pgsql-hackers@arkaria.postgresql.org; Fri, 21 Nov 2025 13:26:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vMR9Q-007T10-2o for pgsql-hackers@arkaria.postgresql.org; Fri, 21 Nov 2025 13:26:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vMR9Q-007T0l-0M for pgsql-hackers@lists.postgresql.org; Fri, 21 Nov 2025 13:26:12 +0000 Received: from mail-westusazolkn190120001.outbound.protection.outlook.com ([2a01:111:f403:d001::1] helo=SJ2PR03CU001.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vMR9M-000hTu-22 for pgsql-hackers@postgresql.org; Fri, 21 Nov 2025 13:26:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W+wq9Si+W5BdHu5roUm8FIzSEqteFpEv8N+pB/Dme0kNIPJUUgAIdtSfLfrx+4Qdwh7ui4TnYQlD17IYwZ2YUKaaiR5dxj0wvSB51giDWx+Eb32XUimtPJ0d6ueo2dgaWZIXl94LPreYrjKVz+JIkLVZujK3vbY5vE9Tpz4+agcaMYd8HLSd9/+7Ac6foAWJ0OEagEMi2N0JNQ16iWSu4UNR7muohSNee6V4lFkVskuOKR6pYhF2iPj+Uq0IbgP6lzuMJTtTR0i+ZvZ3jkLOIATBZE82b9IEC5UtKiFWiNWcL/Kr79jOPCb0120Tbn/2nqvKbTMyuSrPGdleAaIwkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=OIrPLGPPUx5BPwrINBf0Yg+1hE7UTSWzS6GC/u9xpzQ=; b=av9CfqbcFpkWlAfBZDCLOrluNIQNHWgpWZ1nJipFA74w3DVY5Dgq9gLZ5VDdd1MgmO8cUVEkQAN9399HTP7UB+JBHAHthp9lXq5a9M7rWpxZUkdwK8pjE78rkEBg570iotOxSDcnjmxDfTO6HoWBgrMmDACNoZaxn5HDr/uGoYjfVp0XDfSBvID0lQ8sc8pDYN4uQIqxW8sWQKGqLW4h39z2a+4R6DFjCCFLEMQrCt1GcHD1gzIlpuxbvZgiPLAT4Jp1whJNWqRcKORdK7TAWL+4Yej6v+DaFumm0RIEDGj4F0dqEvZ/5R0sRZy2+Qc0caw5xWWwELiVHT4PvLb1lQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OIrPLGPPUx5BPwrINBf0Yg+1hE7UTSWzS6GC/u9xpzQ=; b=DO8iRa/V1pXAk99ISWgKshrdnyghICmhHYv8zS4dmDKR0chFLljqiByssAxCs6FEKKcvhViYG38u6sIypylmNCktzhG7YvnK81QzaveRrdXzzUfRpM0uqiYLGJHwkDa9IwyhY9+tXnNkXJoB/asLppQGYLePBPEuWLr5Uh5FplwzGokqO6FbNJsDudq4OcpgudSeoeYV2L5b+tlhgyvcZOauXphaky9ocleQIVO0oyZByod8IPfJ8XHl9mNLkM7O9ypU218jjxs0AKhglK6sNOIEsFE3dgbHHYRuBGAwRUhexCE9LjFc06DzAR1m0sibpwJv1sy/w/8l1cpDBIiwMA== Received: from PH0PR08MB7020.namprd08.prod.outlook.com (2603:10b6:510:74::15) by DS4PR08MB10790.namprd08.prod.outlook.com (2603:10b6:8:2a5::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.11; Fri, 21 Nov 2025 13:26:06 +0000 Received: from PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::e38d:5955:b14c:6ebd]) by PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::e38d:5955:b14c:6ebd%4]) with mapi id 15.20.9343.011; Fri, 21 Nov 2025 13:26:06 +0000 From: Boris Mironov To: Ashutosh Bapat CC: "pgsql-hackers@postgresql.org" Subject: Re: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Topic: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Index: AQHcUwuRPlzLCtdZw06GAdoL15fmHbTwZ0aAgAGpzjGAACRkgIAAEcrGgAQQLgCAAG6d+YAGXmPM Date: Fri, 21 Nov 2025 13:26:05 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR08MB7020:EE_|DS4PR08MB10790:EE_ x-ms-office365-filtering-correlation-id: edddcdf0-d1a5-40fc-dc47-08de29018654 x-ms-exchange-slblob-mailprops: vuaKsetfIZlMYX5RvLPegt3aYGMu+jjqw+P5P9LJ511L7Y6r74HwWAEUnH43afcrRWZRqWX2L+y98+7vkRQ0mEp37PM6PFGXUUAK0byoDf2yFzFkil5T9IBwTqjkVoobUw3lSEHyUdr7h5/R2BFIzA6TgKqrp2JHraCFErApAXu2H4DRtBS4rpP1t3+JlnJPRRWva+dFUhw0m6elisiG9+8lcWwQez7smSrgpaQBaGfUnSl1SB+MyRwdsAzqUDIDraoMLPB4BeP8yse2yM/WgUa5TLfYyT4uMwtZsTfmBTH+YEGozZL+7KMs6A8l2dStM6+j0WStTed1YIbz5U9dg2LKKfUf16b3IIYYyy/S14cYWpyrRNFzSQBq5494/+GvVysxZsD99C7VLuRiqi2D3R4uBlZRlI/ZnTO14dxuGdD5s3ybs68lODSrsTgyf0Q39Md2v4qfVLoxUPrBNsf88+uZ60ciWQWRlD5BkxclseXpUhiTG8u6Jg1WalThnMwzrjc2RtJppMNR8yvAylDIyHEVD2yInbxDNePaH1vf3hHkXgrpU2+FeIgCc9y6KZlQe18M/EtgFvkqgFiFjaSw9tqQ0zv5oeAQCd9+zV0+yuEU8RrhdcL1wnlUSA6lKcnnKNNJA+qQfmYp/L5O5yVRebh3ZjihVVJvxMyLNkDJsJcBJ83Dp/lfeN8gvkJzhAAVsAMgEZG05p8ZlcP2TPRBCSrQmdnaG8/5xJiI0Xs/5B9Wt/IS0m1ZBTYKCAEd3qbnWr2dmShBNZJohD4ZdNNb3UFbzugHBq/F5UU8piBLOo0Aw5qi2g5/NNdWGZEAn5qd x-microsoft-antispam: BCL:0;ARA:14566002|19110799012|12121999013|12050799012|8062599012|8060799015|15080799012|15030799006|6092099016|461199028|31061999003|51005399006|9400799040|20055399003|40105399003|3412199025|440099028|102099032; x-microsoft-antispam-message-info: =?iso-8859-1?Q?nTF4waUzac5WOxm6Xrh+k5QAvhChEnvriQZhXwzrxQfXLXSbH/5g0dWCde?= =?iso-8859-1?Q?HUcMiwbf5r1h2tvoqsUvZVhuL0FN7nuVwygolaT0yBMXl2DihmJkb2n9vF?= =?iso-8859-1?Q?S7sAnOLaS6OhhcpthqvpsbYDtr6UYuTUDtCqssT0NQ3W+GyD1wlH+4aYT7?= =?iso-8859-1?Q?2aWs4Kk+R+40S3zTupwm9Ftyjf8a0UI53L1Neo1uRmSjyqDbBFh1M2i4+q?= =?iso-8859-1?Q?89G871ivC1xr9V+RC3SATk/pNTytsr8+KeDW0XAbYLSOxKjlxng0WTSVbK?= =?iso-8859-1?Q?2t3D9rOCvPugBwDeCBncp+ZBOZsXdoXPu610CRDryuXCXgM6YP2LlElcR+?= =?iso-8859-1?Q?NdSmXhx2HF5WpAPHsP2zD5I0c7F6u0++YychU+Uk7yzm70BYBdC2tv8tsP?= =?iso-8859-1?Q?OjLMHGBqa5WLZWWFK1U3gPcgNeSQs/OvUIdn4wmzpjCAvWXicQxBx2G8Iz?= =?iso-8859-1?Q?GdBw2Xrj4ns7rOmlVd8Yzk05wWREapsCJzmB/vlLh9Hg8yrOgnRioI+lUF?= =?iso-8859-1?Q?9jGY7+hrqhA9gS0NWxVzZKLbh8rS7bF1A57+ZAwR0cOVLquSm/d0epGf6O?= =?iso-8859-1?Q?TRGWOxcwhsHeUxWrVAo1iByA8FVtFdZjIp27H7F+sg/MLC+4KkhUt/rMnz?= =?iso-8859-1?Q?m5k95bB+WGGaD7/IdznmO1H/k3tCUmEpbYv3uvFLqCYjuLuNyqB/w9DjLd?= =?iso-8859-1?Q?SXkPMow+nR8D4rZlDDErFK+uNtFNATqqb1JZxdpBsuxcvDtStSr7wQ7YOD?= =?iso-8859-1?Q?twshyXUKv9fAm8sVIe5oASAALRXkfmTMXF2y5iBR4DWF6Q8EUDAups1/lq?= =?iso-8859-1?Q?2DlBQotfFy3sWPOFcOGwvw3CFnKDrJlntHIJm9AX+xN6Q4/yFGHwyI6maM?= =?iso-8859-1?Q?Y0LxOFesMz9kB0uykjXzq0BB08d+Jm4ZZBIhvmm+0xZHpx9BCNR/0MVfLB?= =?iso-8859-1?Q?h4nonGdDuaBb/tDxASwLjSm+mQ5aavVpdEMjZAs9vgRUKtD58Vp2iSGBkI?= =?iso-8859-1?Q?EJnSKKpvQkE4XrcAjZ9CrzQV/OMbiTArPJOEFAjI3TXuVFvKHbunJpCA+B?= =?iso-8859-1?Q?SvapUVWp3Yv9V0ApHziQ82KICX8CBR/x2jsqtKKwsmQdgx25waTGF5baVf?= =?iso-8859-1?Q?NI5VTytXo7W64QbRKJA+yMlg9z0fqZW6IF3I5WcpBJal+ZBAAY/XKCel3T?= =?iso-8859-1?Q?SIzzNl3zgt4uyGx9OO4PGPrcYGya08584GDzIYSy6ch6BDTHtDixKz8ROa?= =?iso-8859-1?Q?Sem4EnD8LpfEwcsDxCDP7dCEgLfM+pnKtDrhXNRJEQX84JAgDABySZvk8s?= =?iso-8859-1?Q?SH70ECFdY460AqHbGqYOiodNUhCXPqJVOGOEuS4gqRy1t6vjXamYmUf4nT?= =?iso-8859-1?Q?a610Um/xRVTe0FBQkB6migdhpAm91RXsiD1ZVnGVWE6fJaKvN9ruUH8Nua?= =?iso-8859-1?Q?uAQZmLHa2iLmHels0GL6lfGsBiMyqzUrRiOwfg=3D=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?olWwWOxlCMa1EV2qOt37QRt6s5APHFoGlAmEGaVGXBULCEWvj0w+EXkR+u?= =?iso-8859-1?Q?xni+9MDxFefVFv1VA33QR+hXT0lCR/cEwncTL33RSFmJkxpPaTw/F1OK/l?= =?iso-8859-1?Q?0z6twEaV9X1Pcd466rJzWPjWHCgZMXORsJr7b5W7Lxt5+mXjVBduhem0Eb?= =?iso-8859-1?Q?/dDss+Z4ujOmHRoQCnxDHF41FrqCNmc9+Da2Olt8dYtJQX6xJKuRvB0Hus?= =?iso-8859-1?Q?rec2hbmbGuFReGdDOIHOwYM3+ROnHmCbOrg0CYXFXhkgmxNT08ZES/edRs?= =?iso-8859-1?Q?75TqB4gtQNUq5qxxIKprF9F8bUO3nvRqv29Lpf3RphHSBionQTr4aGJsqq?= =?iso-8859-1?Q?qmqNJzTqgNVMG4eBLgd7FvF7UrSW3neJz9x+Pp7r2lEAMyGI9SvZX+k+HB?= =?iso-8859-1?Q?6Bw711DzSo2HrE0j5kN46hWMPPqrolvRRwAAy4R5IiReEeiVem4GtxmSjT?= =?iso-8859-1?Q?85Aq/hHijN7bFrnEeD6ZROyC95HF8Vg1JY5+Lv+A8WbktqcBqwS+Y831OS?= =?iso-8859-1?Q?RpFyZv236/MIkKJ7cqsAKfg+W1zszJoCxaiyd+buUp7jPKbNVIzoe1yBRO?= =?iso-8859-1?Q?JUox5gNCzWJ99aiAaxaBrVOQIgqK7fQ1beyXW1DnUr8L1R0KcE/X5wdyjg?= =?iso-8859-1?Q?BzJeq7vcEwq61aRc9iOq0ZjnTR5c2ApG217rcADhD9KxbTs/CnX5Qsbirt?= =?iso-8859-1?Q?Xqaz676irDnmf4Dhfz4gHM7LjedMVPugEe6tnwwjntOXMA6VT9gfqUyqS3?= =?iso-8859-1?Q?bESP60DumggvEL53+y9oVUfuBrCxUMJ3exSDQx9aeuHblb0gFTzGC1vYQ4?= =?iso-8859-1?Q?ZNnswggcSIX9LJk3iFH77/AltB1MyxYJ0t0RVEC+4E3HuScEj84bcjQArA?= =?iso-8859-1?Q?p0+HLJTj/3P5bjDzeHqYU/IWVALT5czPtB+Q00/ShctnHKrlr22a5kYd1h?= =?iso-8859-1?Q?ugMTg+bBcB8L18Crojg52MaGMVv0J2puvyJ7EJoCObdp0G9BQ50NLi/jnz?= =?iso-8859-1?Q?YHkIcLzlg9sb9GYCtFxQ2yXS3ciBiY3RYMZPTfhwALwBpGEa9sCCh6nW52?= =?iso-8859-1?Q?YSToUV5jUJz4LAMqGcS3BK4xvZEOFP+4Vi5aaRv5tLQpky6xyakRDSaTLj?= =?iso-8859-1?Q?zxcwujTaI9SMmJUKwR/8rqlM3wNTXKmvW9P7/PnVCpFO8ziLozD6Wf+bFE?= =?iso-8859-1?Q?QeJCqHFOevfhsYMCaBtA08ucueF6oV3VJpAibha4810scgjrUPghm42dzB?= =?iso-8859-1?Q?3bsa4DH0viJicbAJgAhMkk0uIyMOyXzVsHWZ7GbRQ=3D?= Content-Type: multipart/mixed; boundary="_004_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR08MB7020.namprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: edddcdf0-d1a5-40fc-dc47-08de29018654 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Nov 2025 13:26:05.8303 (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: DS4PR08MB10790 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_ Content-Type: multipart/alternative; boundary="_000_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_" --_000_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Ashutosh, Just wanted to let you know that I've submitted this patch to CommitFest (see https://commitfest.postgresql.org/patch/6245/) Interestingly enough there is one more patch from Mircea Cadariu in the sam= e CommitFest about pgbench (https://commitfest.postgresql.org/patch/6242/) That patch has been submitted few days ago and is proposing to run data generation phase in parallel threads. It shows significant improvements over performance of original single-thread code. Hopefully sooner or later pgbench will get significant performance gains in data generation from these two patches. Original version of my patch failed in GitHub tests. Therefore I have to start posting updated versions here. Attached is updated version that sets default value for filler columns. This trick allows significantly shrink network traffic for COPY FROM BINARY= . Absence of filler column in dataflow has failed my original patch in GitHub pipeline. I also switched from one huge transaction for COPY FROM BINARY to "one per scale". This will simplify merge with multi-threaded data load proposed by Mircea. Unfortunately, it killed possibility to freeze data rig= ht away, which was possible when table truncation and data load was done in the same transaction. I think it would be fair to leave all original modes of data generation until official review in CommitFest. Hence "INSERT SELECT FROM UNNEST" is staying so far as there might be interest in community for benchmarking of columnar tables (eg, for OLAP loads or Timescale DB). Best regards, Boris --_000_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi Ashutosh,

Just wanted to let you know that I've submitted this patch

Interestingly enough there is one more patch from Mircea Cadariu in th= e same
That patch has been submitted few days ago and is proposing to run
data generation phase in parallel threads. It shows significant
improvements over performance of original single-thread code.

Hopefully sooner or later pgbench will get significant performance
gains in data generation from these two patches.

Original version of my patch failed in GitHub tests. Therefore I have
to start posting updated versions here.

Attached is updated version that sets default value for filler columns.
This trick allows significantly shrink network traffic for COPY FROM BINARY= .
Absence of filler column in dataflow has failed my original patch in GitHub=
pipeline.

I also switched from one huge transaction for COPY FROM BINARY to
"one per scale". This will simplify merge with multi-threaded dat= a load
proposed by Mircea. Unfortunately, it killed possibility to freeze data rig= ht
away, which was possible when table truncation and data load was done
in the same transaction.

I think it would be fair to leave all original modes of data generation
until official review in CommitFest. Hence "INSERT SELECT FROM UNNEST&= quot;
is staying so far as there might be interest in community for benchmarking<= /div>
of columnar tables (eg, for OLAP loads or Timescale DB).

Best regards,
Boris
--_000_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_-- --_004_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_ Content-Type: application/octet-stream; name="pgbench.c.diff" Content-Description: pgbench.c.diff Content-Disposition: attachment; filename="pgbench.c.diff"; size=33039; creation-date="Fri, 21 Nov 2025 13:26:00 GMT"; modification-date="Fri, 21 Nov 2025 13:26:05 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCmluZGV4IDE1MTVlZDQwNWJhLi42Yjg5MDA3YTYzYiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBA IC0xNjEsNyArMTYxLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogICogc29tZSBjb25m aWd1cmFibGUgcGFyYW1ldGVycyAqLwogCiAjZGVmaW5lIERFRkFVTFRfSU5JVF9TVEVQUyAiZHRn dnAiCS8qIGRlZmF1bHQgLUkgc2V0dGluZyAqLwotI2RlZmluZSBBTExfSU5JVF9TVEVQUyAiZHRn R3ZwZiIJLyogYWxsIHBvc3NpYmxlIHN0ZXBzICovCisjZGVmaW5lIEFMTF9JTklUX1NURVBTICJk dGdDR2lJdnBmIgkvKiBhbGwgcG9zc2libGUgc3RlcHMgKi8KIAogI2RlZmluZSBMT0dfU1RFUF9T RUNPTkRTCTUJLyogc2Vjb25kcyBiZXR3ZWVuIGxvZyBtZXNzYWdlcyAqLwogI2RlZmluZSBERUZB VUxUX05YQUNUUwkxMAkJLyogZGVmYXVsdCBueGFjdHMgKi8KQEAgLTE3MSw2ICsxNzEsMTQgQEAg dHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3NldAogI2RlZmluZSBNSU5fWklQRklBTl9QQVJBTQkJMS4w MDEJLyogbWluaW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8KICNkZWZpbmUgTUFYX1pJUEZJ QU5fUEFSQU0JCTEwMDAuMAkvKiBtYXhpbXVtIHBhcmFtZXRlciBmb3IgemlwZmlhbiAqLwogCisv KiBvcmlnaW5hbCBzaW5nbGUgdHJhbnNhY3Rpb24gc2VydmVyLXNpZGUgbWV0aG9kICovCisjZGVm aW5lIEdFTl9UWVBFX0lOU0VSVF9PUklHSU5BTAknRycJLyogdXNlIElOU0VSVCAuLiBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzIHRvIGdlbmVyYXRlIGRhdGEgKi8KKy8qICdvbmUgdHJhbnNhY3Rpb24g cGVyIHNjYWxlJyBzZXJ2ZXItc2lkZSBtZXRob2RzICovCisjZGVmaW5lIEdFTl9UWVBFX0lOU0VS VF9TRVJJRVMJCSdpJwkvKiB1c2UgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMgdG8g Z2VuZXJhdGUgZGF0YSAqLworI2RlZmluZSBHRU5fVFlQRV9JTlNFUlRfVU5ORVNUICAJJ0knCS8q IHVzZSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdCB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVmaW5l IEdFTl9UWVBFX0NPUFlfT1JJR0lOQUwJCSdnJyAvKiB1c2UgQ09QWSAuLiBGUk9NIFNURElOIC4u IFRFWFQgdG8gZ2VuZXJhdGUgZGF0YSAqLworI2RlZmluZSBHRU5fVFlQRV9DT1BZX0JJTkFSWQkJ J0MnIC8qIHVzZSBDT1BZIC4uIEZST00gU1RESU4gLi4gQklOQVJZIHRvIGdlbmVyYXRlIGRhdGEg Ki8KKwogc3RhdGljIGludAlueGFjdHMgPSAwOwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMg cGVyIGNsaWVudCAqLwogc3RhdGljIGludAlkdXJhdGlvbiA9IDA7CQkvKiBkdXJhdGlvbiBpbiBz ZWNvbmRzICovCiBzdGF0aWMgaW50NjQgZW5kX3RpbWUgPSAwOwkJLyogd2hlbiB0byBzdG9wIGlu IG1pY3JvIHNlY29uZHMsIHVuZGVyIC1UICovCkBAIC0xODEsNiArMTg5LDE4IEBAIHN0YXRpYyBp bnQ2NCBlbmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25kcywgdW5k ZXIgLVQgKi8KICAqLwogc3RhdGljIGludAlzY2FsZSA9IDE7CiAKKy8qCisgKiBtb2RlIG9mIGRh dGEgZ2VuZXJhdGlvbiB0byB1c2UKKyAqLworc3RhdGljIGNoYXIJZGF0YV9nZW5lcmF0aW9uX3R5 cGUgPSAnPyc7CisKKy8qCisgKiBDT1BZIEZST00gQklOQVJZIGV4ZWN1dGlvbiBidWZmZXIKKyAq LworI2RlZmluZSBCSU5fQ09QWV9CVUZfU0laRQkxMDI0MDAJCQkJLyogbWF4aW11bSBidWZmZXIg c2l6ZSBmb3IgQ09QWSBGUk9NIEJJTkFSWSAqLworc3RhdGljIGNoYXIJCSpiaW5fY29weV9idWZm ZXIgPSBOVUxMOwkJLyogYnVmZmVyIGZvciBDT1BZIEZST00gQklOQVJZICovCitzdGF0aWMgaW50 MzJfdAkgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCA9IDA7CS8qIGN1cnJlbnQgYnVmZmVyIHNpemUg Ki8KKwogLyoKICAqIGZpbGxmYWN0b3IuIGZvciBleGFtcGxlLCBmaWxsZmFjdG9yID0gOTAgd2ls bCB1c2Ugb25seSA5MCBwZXJjZW50CiAgKiBzcGFjZSBkdXJpbmcgaW5zZXJ0cyBhbmQgbGVhdmUg MTAgcGVyY2VudCBmcmVlLgpAQCAtNDAyLDE0ICs0MjIsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Rh dHNEYXRhCiAJICogICBkaXJlY3RseSBzdWNjZXNzZnVsIHRyYW5zYWN0aW9ucyAodGhleSB3ZXJl IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgb24KIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGUgZmlyc3QgdHJ5KS4KIAkgKgotCSAqIEEgZmFpbGVkIHRyYW5zYWN0aW9u IGlzIGRlZmluZWQgYXMgdW5zdWNjZXNzZnVsbHkgcmV0cmllZCB0cmFuc2FjdGlvbnMuCi0JICog SXQgY2FuIGJlIG9uZSBvZiB0d28gdHlwZXM6Ci0JICoKLQkgKiBmYWlsZWQgKHRoZSBudW1iZXIg b2YgZmFpbGVkIHRyYW5zYWN0aW9ucykgPQorCSAqICdmYWlsZWQnICh0aGUgbnVtYmVyIG9mIGZh aWxlZCB0cmFuc2FjdGlvbnMpID0KIAkgKiAgICdzZXJpYWxpemF0aW9uX2ZhaWx1cmVzJyAodGhl eSBnb3QgYSBzZXJpYWxpemF0aW9uIGVycm9yIGFuZCB3ZXJlIG5vdAotCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmllZCkgKworCSAqICAgICAgICAgICAg ICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHJldHJpZWQpICsKIAkgKiAgICdkZWFkbG9ja19mYWls dXJlcycgKHRoZXkgZ290IGEgZGVhZGxvY2sgZXJyb3IgYW5kIHdlcmUgbm90Ci0JICogICAgICAg ICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmllZCkuCisJICogICAgICAgICAgICAg ICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmllZCkgKworCSAqICAgJ290aGVyX3NxbF9mYWls dXJlcycgICh0aGV5IGZhaWxlZCBvbiB0aGUgZmlyc3QgdHJ5IG9yIGFmdGVyIHJldHJpZXMKKwkg KiAgICAgICAgICAgICAgICAgICAgICAgIGR1ZSB0byBhIFNRTCBlcnJvciBvdGhlciB0aGFuIHNl cmlhbGl6YXRpb24gb3IKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsb2NrOyB0aGV5 IGFyZSBjb3VudGVkIGFzIGEgZmFpbGVkIHRyYW5zYWN0aW9uCisJICogICAgICAgICAgICAgICAg ICAgICAgICBvbmx5IHdoZW4gLS1jb250aW51ZS1vbi1lcnJvciBpcyBzcGVjaWZpZWQpLgogCSAq CiAJICogSWYgdGhlIHRyYW5zYWN0aW9uIHdhcyByZXRyaWVkIGFmdGVyIGEgc2VyaWFsaXphdGlv biBvciBhIGRlYWRsb2NrCiAJICogZXJyb3IgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0 aGlzIHJldHJ5IHdhcyBzdWNjZXNzZnVsLiBUaHVzCkBAIC00MjEsNyArNDQyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgU3RhdHNEYXRhCiAJICoKIAkgKiAncmV0cmllZCcgKG51bWJlciBvZiBhbGwgcmV0 cmllZCB0cmFuc2FjdGlvbnMpID0KIAkgKiAgIHN1Y2Nlc3NmdWxseSByZXRyaWVkIHRyYW5zYWN0 aW9ucyArCi0JICogICBmYWlsZWQgdHJhbnNhY3Rpb25zLgorCSAqICAgdW5zdWNjZXNzZnVsIHJl dHJpZWQgdHJhbnNhY3Rpb25zLgogCSAqLS0tLS0tLS0tLQogCSAqLwogCWludDY0CQljbnQ7CQkJ LyogbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgdHJhbnNhY3Rpb25zLCBub3QKQEAgLTQ0MCw2ICs0NjEs MTEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRhCiAJaW50NjQJCWRlYWRsb2NrX2ZhaWx1cmVz OwkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBub3QKIAkJCQkJCQkJCSAqIHN1 Y2Nlc3NmdWxseSByZXRyaWVkIGFmdGVyIGEgZGVhZGxvY2sKIAkJCQkJCQkJCSAqIGVycm9yICov CisJaW50NjQJCW90aGVyX3NxbF9mYWlsdXJlczsgLyogbnVtYmVyIG9mIGZhaWxlZCB0cmFuc2Fj dGlvbnMgZm9yCisJCQkJCQkJCQkgKiByZWFzb25zIG90aGVyIHRoYW4KKwkJCQkJCQkJCSAqIHNl cmlhbGl6YXRpb24vZGVhZGxvY2sgZmFpbHVyZSwgd2hpY2gKKwkJCQkJCQkJCSAqIGlzIGNvdW50 ZWQgaWYgLS1jb250aW51ZS1vbi1lcnJvciBpcworCQkJCQkJCQkJICogc3BlY2lmaWVkICovCiAJ U2ltcGxlU3RhdHMgbGF0ZW5jeTsKIAlTaW1wbGVTdGF0cyBsYWc7CiB9IFN0YXRzRGF0YTsKQEAg LTQ1Nyw2ICs0ODMsNyBAQCB0eXBlZGVmIGVudW0gRVN0YXR1cwogewogCUVTVEFUVVNfTk9fRVJS T1IgPSAwLAogCUVTVEFUVVNfTUVUQV9DT01NQU5EX0VSUk9SLAorCUVTVEFUVVNfQ09OTl9FUlJP UiwKIAogCS8qIFNRTCBlcnJvcnMgKi8KIAlFU1RBVFVTX1NFUklBTElaQVRJT05fRVJST1IsCkBA IC03NzAsNiArNzk3LDcgQEAgc3RhdGljIGludDY0IHRvdGFsX3dlaWdodCA9IDA7CiBzdGF0aWMg Ym9vbCB2ZXJib3NlX2Vycm9ycyA9IGZhbHNlOyAvKiBwcmludCB2ZXJib3NlIG1lc3NhZ2VzIG9m IGFsbCBlcnJvcnMgKi8KIAogc3RhdGljIGJvb2wgZXhpdF9vbl9hYm9ydCA9IGZhbHNlOwkvKiBl eGl0IHdoZW4gYW55IGNsaWVudCBpcyBhYm9ydGVkICovCitzdGF0aWMgYm9vbCBjb250aW51ZV9v bl9lcnJvciA9IGZhbHNlOwkvKiBjb250aW51ZSBhZnRlciBlcnJvcnMgKi8KIAogLyogQnVpbHRp biB0ZXN0IHNjcmlwdHMgKi8KIHR5cGVkZWYgc3RydWN0IEJ1aWx0aW5TY3JpcHQKQEAgLTg0Miw3 ICs4NzAsOCBAQCBzdGF0aWMgaW50CXdhaXRfb25fc29ja2V0X3NldChzb2NrZXRfc2V0ICpzYSwg aW50NjQgdXNlY3MpOwogc3RhdGljIGJvb2wgc29ja2V0X2hhc19pbnB1dChzb2NrZXRfc2V0ICpz YSwgaW50IGZkLCBpbnQgaWR4KTsKIAogLyogY2FsbGJhY2sgdXNlZCB0byBidWlsZCByb3dzIGZv ciBDT1BZIGR1cmluZyBkYXRhIGxvYWRpbmcgKi8KLXR5cGVkZWYgdm9pZCAoKmluaXRSb3dNZXRo b2QpIChQUUV4cEJ1ZmZlckRhdGEgKnNxbCwgaW50NjQgY3Vycik7Cit0eXBlZGVmIHZvaWQgKCpp bml0Um93TWV0aG9kKQkJKFBRRXhwQnVmZmVyRGF0YSAqc3FsLCBpbnQ2NCBjdXJyKTsKK3R5cGVk ZWYgdm9pZCAoKmluaXRSb3dNZXRob2RCaW4pCShQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJlcywg aW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCk7CiAKIC8qIGNhbGxiYWNrIGZ1bmN0aW9ucyBm b3Igb3VyIGZsZXggbGV4ZXIgKi8KIHN0YXRpYyBjb25zdCBQc3FsU2NhbkNhbGxiYWNrcyBwZ2Jl bmNoX2NhbGxiYWNrcyA9IHsKQEAgLTkwNiw3ICs5MzUsMTAgQEAgdXNhZ2Uodm9pZCkKIAkJICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IGRyb3AgYW55IGV4aXN0aW5nIHBnYmVuY2gg dGFibGVzXG4iCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiBjcmVhdGUgdGhl IHRhYmxlcyB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBwZ2JlbmNoIHNjZW5hcmlvXG4iCiAJCSAgICIg ICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBnZW5lcmF0ZSBkYXRhLCBjbGllbnQtc2lkZVxu IgotCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgRzogZ2VuZXJhdGUgZGF0YSwgc2Vy dmVyLXNpZGVcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEM6ICAgY2xpZW50 LXNpZGUgKHNpbmdsZSBUTlgpIENPUFkgLi4gRlJPTSBTVERJTiAuLiBCSU5BUllcbiIKKwkJICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgIEc6IGdlbmVyYXRlIGRhdGEsIHNlcnZlci1zaWRl IGluIHNpbmdsZSB0cmFuc2FjdGlvblxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTogICBzZXJ2ZXItc2lkZSAobXVsdGlwbGUgVFhOcykgSU5TRVJUIC4uIFNFTEVDVCBnZW5l cmF0ZV9zZXJpZXNcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEk6ICAgc2Vy dmVyLXNpZGUgKG11bHRpcGxlIFRYTnMpIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0XG4iCiAJCSAg ICIgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiBpbnZva2UgVkFDVVVNIG9uIHRoZSBzdGFu ZGFyZCB0YWJsZXNcbiIKIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHA6IGNyZWF0 ZSBwcmltYXJ5IGtleSBpbmRleGVzIG9uIHRoZSBzdGFuZGFyZCB0YWJsZXNcbiIKIAkJICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGY6IGNyZWF0ZSBmb3JlaWduIGtleXMgYmV0d2VlbiB0 aGUgc3RhbmRhcmQgdGFibGVzXG4iCkBAIC05NDksNiArOTgxLDcgQEAgdXNhZ2Uodm9pZCkKIAkJ ICAgIiAgLVQsIC0tdGltZT1OVU0gICAgICAgICAgIGR1cmF0aW9uIG9mIGJlbmNobWFyayB0ZXN0 IGluIHNlY29uZHNcbiIKIAkJICAgIiAgLXYsIC0tdmFjdXVtLWFsbCAgICAgICAgIHZhY3V1bSBh bGwgZm91ciBzdGFuZGFyZCB0YWJsZXMgYmVmb3JlIHRlc3RzXG4iCiAJCSAgICIgIC0tYWdncmVn YXRlLWludGVydmFsPU5VTSBhZ2dyZWdhdGUgZGF0YSBvdmVyIE5VTSBzZWNvbmRzXG4iCisJCSAg ICIgIC0tY29udGludWUtb24tZXJyb3IgICAgICBjb250aW51ZSBydW5uaW5nIGFmdGVyIGFuIFNR TCBlcnJvclxuIgogCQkgICAiICAtLWV4aXQtb24tYWJvcnQgICAgICAgICAgZXhpdCB3aGVuIGFu eSBjbGllbnQgaXMgYWJvcnRlZFxuIgogCQkgICAiICAtLWZhaWx1cmVzLWRldGFpbGVkICAgICAg cmVwb3J0IHRoZSBmYWlsdXJlcyBncm91cGVkIGJ5IGJhc2ljIHR5cGVzXG4iCiAJCSAgICIgIC0t bG9nLXByZWZpeD1QUkVGSVggICAgICBwcmVmaXggZm9yIHRyYW5zYWN0aW9uIHRpbWUgbG9nIGZp bGVcbiIKQEAgLTE0NjcsNiArMTUwMCw3IEBAIGluaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCBwZ190 aW1lX3VzZWNfdCBzdGFydCkKIAlzZC0+cmV0cmllZCA9IDA7CiAJc2QtPnNlcmlhbGl6YXRpb25f ZmFpbHVyZXMgPSAwOwogCXNkLT5kZWFkbG9ja19mYWlsdXJlcyA9IDA7CisJc2QtPm90aGVyX3Nx bF9mYWlsdXJlcyA9IDA7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGF0ZW5jeSk7CiAJaW5pdFNp bXBsZVN0YXRzKCZzZC0+bGFnKTsKIH0KQEAgLTE1MTYsNiArMTU1MCw5IEBAIGFjY3VtU3RhdHMo U3RhdHNEYXRhICpzdGF0cywgYm9vbCBza2lwcGVkLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnLAog CQljYXNlIEVTVEFUVVNfREVBRExPQ0tfRVJST1I6CiAJCQlzdGF0cy0+ZGVhZGxvY2tfZmFpbHVy ZXMrKzsKIAkJCWJyZWFrOworCQljYXNlIEVTVEFUVVNfT1RIRVJfU1FMX0VSUk9SOgorCQkJc3Rh dHMtPm90aGVyX3NxbF9mYWlsdXJlcysrOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBp bnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KIAkJCXBnX2ZhdGFsKCJ1 bmV4cGVjdGVkIGVycm9yIHN0YXR1czogJWQiLCBlc3RhdHVzKTsKQEAgLTMyMzEsMTEgKzMyNjgs NDMgQEAgc2VuZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkKIH0KIAogLyoK LSAqIEdldCB0aGUgZXJyb3Igc3RhdHVzIGZyb20gdGhlIGVycm9yIGNvZGUuCisgKiBSZWFkIGFu ZCBkaXNjYXJkIGFsbCBhdmFpbGFibGUgcmVzdWx0cyBmcm9tIHRoZSBjb25uZWN0aW9uLgorICov CitzdGF0aWMgdm9pZAorZGlzY2FyZEF2YWlsYWJsZVJlc3VsdHMoQ1N0YXRlICpzdCkKK3sKKwlQ R3Jlc3VsdCAgICpyZXMgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCXJlcyA9IFBRZ2V0UmVz dWx0KHN0LT5jb24pOworCisJCS8qCisJCSAqIFJlYWQgYW5kIGRpc2NhcmQgcmVzdWx0cyB1bnRp bCBQUWdldFJlc3VsdCgpIHJldHVybnMgTlVMTCAobm8gbW9yZQorCQkgKiByZXN1bHRzKSBvciBh IGNvbm5lY3Rpb24gZmFpbHVyZSBpcyBkZXRlY3RlZC4gSWYgdGhlIHBpcGVsaW5lCisJCSAqIHN0 YXR1cyBpcyBQUV9QSVBFTElORV9BQk9SVEVELCBtb3JlIHJlc3VsdHMgbWF5IHN0aWxsIGJlIGF2 YWlsYWJsZQorCQkgKiBldmVuIGFmdGVyIFBRZ2V0UmVzdWx0KCkgcmV0dXJucyBOVUxMLCBzbyBj b250aW51ZSByZWFkaW5nIGluIHRoYXQKKwkJICogY2FzZS4KKwkJICovCisJCWlmICgocmVzID09 IE5VTEwgJiYgUFFwaXBlbGluZVN0YXR1cyhzdC0+Y29uKSAhPSBQUV9QSVBFTElORV9BQk9SVEVE KSB8fAorCQkJUFFzdGF0dXMoc3QtPmNvbikgPT0gQ09OTkVDVElPTl9CQUQpCisJCQlicmVhazsK KworCQlQUWNsZWFyKHJlcyk7CisJfQorCVBRY2xlYXIocmVzKTsKK30KKworLyoKKyAqIERldGVy bWluZSB0aGUgZXJyb3Igc3RhdHVzIGJhc2VkIG9uIHRoZSBjb25uZWN0aW9uIHN0YXR1cyBhbmQg ZXJyb3IgY29kZS4KICAqLwogc3RhdGljIEVTdGF0dXMKLWdldFNRTEVycm9yU3RhdHVzKGNvbnN0 IGNoYXIgKnNxbFN0YXRlKQorZ2V0U1FMRXJyb3JTdGF0dXMoQ1N0YXRlICpzdCwgY29uc3QgY2hh ciAqc3FsU3RhdGUpCiB7CisJZGlzY2FyZEF2YWlsYWJsZVJlc3VsdHMoc3QpOworCWlmIChQUXN0 YXR1cyhzdC0+Y29uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwkJcmV0dXJuIEVTVEFUVVNfQ09OTl9F UlJPUjsKKwogCWlmIChzcWxTdGF0ZSAhPSBOVUxMKQogCXsKIAkJaWYgKHN0cmNtcChzcWxTdGF0 ZSwgRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSA9PSAwKQpAQCAtMzI1Nyw2ICsz MzI2LDE3IEBAIGNhblJldHJ5RXJyb3IoRVN0YXR1cyBlc3RhdHVzKQogCQkJZXN0YXR1cyA9PSBF U1RBVFVTX0RFQURMT0NLX0VSUk9SKTsKIH0KIAorLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiAtLWNv bnRpbnVlLW9uLWVycm9yIGlzIHNwZWNpZmllZCBhbmQgdGhpcyBlcnJvciBhbGxvd3MKKyAqIHBy b2Nlc3NpbmcgdG8gY29udGludWUuCisgKi8KK3N0YXRpYyBib29sCitjYW5Db250aW51ZU9uRXJy b3IoRVN0YXR1cyBlc3RhdHVzKQoreworCXJldHVybiAoY29udGludWVfb25fZXJyb3IgJiYKKwkJ CWVzdGF0dXMgPT0gRVNUQVRVU19PVEhFUl9TUUxfRVJST1IpOworfQorCiAvKgogICogUHJvY2Vz cyBxdWVyeSByZXNwb25zZSBmcm9tIHRoZSBiYWNrZW5kLgogICoKQEAgLTMzNzUsOSArMzQ1NSw5 IEBAIHJlYWRDb21tYW5kUmVzcG9uc2UoQ1N0YXRlICpzdCwgTWV0YUNvbW1hbmQgbWV0YSwgY2hh ciAqdmFycHJlZml4KQogCiAJCQljYXNlIFBHUkVTX05PTkZBVEFMX0VSUk9SOgogCQkJY2FzZSBQ R1JFU19GQVRBTF9FUlJPUjoKLQkJCQlzdC0+ZXN0YXR1cyA9IGdldFNRTEVycm9yU3RhdHVzKFBR cmVzdWx0RXJyb3JGaWVsZChyZXMsCi0JCQkJCQkJCQkJCQkJCQkJICAgUEdfRElBR19TUUxTVEFU RSkpOwotCQkJCWlmIChjYW5SZXRyeUVycm9yKHN0LT5lc3RhdHVzKSkKKwkJCQlzdC0+ZXN0YXR1 cyA9IGdldFNRTEVycm9yU3RhdHVzKHN0LCBQUXJlc3VsdEVycm9yRmllbGQocmVzLAorCQkJCQkJ CQkJCQkJCQkJCQkgICBQR19ESUFHX1NRTFNUQVRFKSk7CisJCQkJaWYgKGNhblJldHJ5RXJyb3Io c3QtPmVzdGF0dXMpIHx8IGNhbkNvbnRpbnVlT25FcnJvcihzdC0+ZXN0YXR1cykpCiAJCQkJewog CQkJCQlpZiAodmVyYm9zZV9lcnJvcnMpCiAJCQkJCQljb21tYW5kRXJyb3Ioc3QsIFBRcmVzdWx0 RXJyb3JNZXNzYWdlKHJlcykpOwpAQCAtMzQwOSwxMSArMzQ4OSw3IEBAIHJlYWRDb21tYW5kUmVz cG9uc2UoQ1N0YXRlICpzdCwgTWV0YUNvbW1hbmQgbWV0YSwgY2hhciAqdmFycHJlZml4KQogZXJy b3I6CiAJUFFjbGVhcihyZXMpOwogCVBRY2xlYXIobmV4dF9yZXMpOwotCWRvCi0JewotCQlyZXMg PSBQUWdldFJlc3VsdChzdC0+Y29uKTsKLQkJUFFjbGVhcihyZXMpOwotCX0gd2hpbGUgKHJlcyk7 CisJZGlzY2FyZEF2YWlsYWJsZVJlc3VsdHMoc3QpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAt MzUxMSwxNCArMzU4NywxOCBAQCBkb1JldHJ5KENTdGF0ZSAqc3QsIHBnX3RpbWVfdXNlY190ICpu b3cpCiB9CiAKIC8qCi0gKiBSZWFkIHJlc3VsdHMgYW5kIGRpc2NhcmQgaXQgdW50aWwgYSBzeW5j IHBvaW50LgorICogUmVhZCBhbmQgZGlzY2FyZCByZXN1bHRzIHVudGlsIHRoZSBsYXN0IHN5bmMg cG9pbnQuCiAgKi8KIHN0YXRpYyBpbnQKIGRpc2NhcmRVbnRpbFN5bmMoQ1N0YXRlICpzdCkKIHsK IAlib29sCQlyZWNlaXZlZF9zeW5jID0gZmFsc2U7CiAKLQkvKiBzZW5kIGEgc3luYyAqLworCS8q CisJICogU2VuZCBhIFN5bmMgbWVzc2FnZSB0byBlbnN1cmUgYXQgbGVhc3Qgb25lIFBHUkVTX1BJ UEVMSU5FX1NZTkMgaXMKKwkgKiByZWNlaXZlZCBhbmQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9v cCwgc2luY2UgYWxsIGVhcmxpZXIgb25lcyBtYXkgaGF2ZQorCSAqIGFscmVhZHkgYmVlbiByZWNl aXZlZC4KKwkgKi8KIAlpZiAoIVBRcGlwZWxpbmVTeW5jKHN0LT5jb24pKQogCXsKIAkJcGdfbG9n X2Vycm9yKCJjbGllbnQgJWQgYWJvcnRlZDogZmFpbGVkIHRvIHNlbmQgYSBwaXBlbGluZSBzeW5j IiwKQEAgLTM1MjYsMjkgKzM2MDYsNDIgQEAgZGlzY2FyZFVudGlsU3luYyhDU3RhdGUgKnN0KQog CQlyZXR1cm4gMDsKIAl9CiAKLQkvKiByZWNlaXZlIFBHUkVTX1BJUEVMSU5FX1NZTkMgYW5kIG51 bGwgZm9sbG93aW5nIGl0ICovCisJLyoKKwkgKiBDb250aW51ZSByZWFkaW5nIHJlc3VsdHMgdW50 aWwgdGhlIGxhc3Qgc3luYyBwb2ludCwgaS5lLiwgdW50aWwKKwkgKiByZWFjaGluZyBudWxsIGp1 c3QgYWZ0ZXIgUEdSRVNfUElQRUxJTkVfU1lOQy4KKwkgKi8KIAlmb3IgKDs7KQogCXsKIAkJUEdy ZXN1bHQgICAqcmVzID0gUFFnZXRSZXN1bHQoc3QtPmNvbik7CiAKKwkJaWYgKFBRc3RhdHVzKHN0 LT5jb24pID09IENPTk5FQ1RJT05fQkFEKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoImNsaWVudCAl ZCBhYm9ydGVkIHdoaWxlIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgYW4gZXJy b3I7IHBlcmhhcHMgdGhlIGJhY2tlbmQgZGllZCB3aGlsZSBwcm9jZXNzaW5nIiwKKwkJCQkJCSBz dC0+aWQpOworCQkJUFFjbGVhcihyZXMpOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlpZiAoUFFy ZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19QSVBFTElORV9TWU5DKQogCQkJcmVjZWl2ZWRfc3lu YyA9IHRydWU7Ci0JCWVsc2UgaWYgKHJlY2VpdmVkX3N5bmMpCisJCWVsc2UgaWYgKHJlY2VpdmVk X3N5bmMgJiYgcmVzID09IE5VTEwpCiAJCXsKLQkJCS8qCi0JCQkgKiBQR1JFU19QSVBFTElORV9T WU5DIG11c3QgYmUgZm9sbG93ZWQgYnkgYW5vdGhlcgotCQkJICogUEdSRVNfUElQRUxJTkVfU1lO QyBvciBOVUxMOyBvdGhlcndpc2UsIGFzc2VydCBmYWlsdXJlLgotCQkJICovCi0JCQlBc3NlcnQo cmVzID09IE5VTEwpOwotCiAJCQkvKgogCQkJICogUmVzZXQgb25nb2luZyBzeW5jIGNvdW50IHRv IDAgc2luY2UgYWxsIFBHUkVTX1BJUEVMSU5FX1NZTkMKIAkJCSAqIHJlc3VsdHMgaGF2ZSBiZWVu IGRpc2NhcmRlZC4KIAkJCSAqLwogCQkJc3QtPm51bV9zeW5jcyA9IDA7Ci0JCQlQUWNsZWFyKHJl cyk7CiAJCQlicmVhazsKIAkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJZiBhIFBHUkVT X1BJUEVMSU5FX1NZTkMgaXMgZm9sbG93ZWQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4KKwkJCSAq IFBHUkVTX1BJUEVMSU5FX1NZTkMgb3IgTlVMTCwgYW5vdGhlciBQR1JFU19QSVBFTElORV9TWU5D IHdpbGwKKwkJCSAqIGFwcGVhciBsYXRlci4gUmVzZXQgcmVjZWl2ZWRfc3luYyB0byBmYWxzZSB0 byB3YWl0IGZvciBpdC4KKwkJCSAqLworCQkJcmVjZWl2ZWRfc3luYyA9IGZhbHNlOworCQl9CiAJ CVBRY2xlYXIocmVzKTsKIAl9CiAKQEAgLTQwNDEsNyArNDEzNCw3IEBAIGFkdmFuY2VDb25uZWN0 aW9uU3RhdGUoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJ CQlpZiAoUFFwaXBlbGluZVN0YXR1cyhzdC0+Y29uKSAhPSBQUV9QSVBFTElORV9PTikKIAkJCQkJ CXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfQ09NTUFORDsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAoY2Fu UmV0cnlFcnJvcihzdC0+ZXN0YXR1cykpCisJCQkJZWxzZSBpZiAoY2FuUmV0cnlFcnJvcihzdC0+ ZXN0YXR1cykgfHwgY2FuQ29udGludWVPbkVycm9yKHN0LT5lc3RhdHVzKSkKIAkJCQkJc3QtPnN0 YXRlID0gQ1NUQVRFX0VSUk9SOwogCQkJCWVsc2UKIAkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FC T1JURUQ7CkBAIC00NTYyLDcgKzQ2NTUsOCBAQCBzdGF0aWMgaW50NjQKIGdldEZhaWx1cmVzKGNv bnN0IFN0YXRzRGF0YSAqc3RhdHMpCiB7CiAJcmV0dXJuIChzdGF0cy0+c2VyaWFsaXphdGlvbl9m YWlsdXJlcyArCi0JCQlzdGF0cy0+ZGVhZGxvY2tfZmFpbHVyZXMpOworCQkJc3RhdHMtPmRlYWRs b2NrX2ZhaWx1cmVzICsKKwkJCXN0YXRzLT5vdGhlcl9zcWxfZmFpbHVyZXMpOwogfQogCiAvKgpA QCAtNDU4Miw2ICs0Njc2LDggQEAgZ2V0UmVzdWx0U3RyaW5nKGJvb2wgc2tpcHBlZCwgRVN0YXR1 cyBlc3RhdHVzKQogCQkJCXJldHVybiAic2VyaWFsaXphdGlvbiI7CiAJCQljYXNlIEVTVEFUVVNf REVBRExPQ0tfRVJST1I6CiAJCQkJcmV0dXJuICJkZWFkbG9jayI7CisJCQljYXNlIEVTVEFUVVNf T1RIRVJfU1FMX0VSUk9SOgorCQkJCXJldHVybiAib3RoZXIiOwogCQkJZGVmYXVsdDoKIAkJCQkv KiBpbnRlcm5hbCBlcnJvciB3aGljaCBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KIAkJCQlwZ19mYXRh bCgidW5leHBlY3RlZCBlcnJvciBzdGF0dXM6ICVkIiwgZXN0YXR1cyk7CkBAIC00NjM3LDYgKzQ3 MzMsNyBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCWludDY0CQlza2lw cGVkID0gMDsKIAkJCWludDY0CQlzZXJpYWxpemF0aW9uX2ZhaWx1cmVzID0gMDsKIAkJCWludDY0 CQlkZWFkbG9ja19mYWlsdXJlcyA9IDA7CisJCQlpbnQ2NAkJb3RoZXJfc3FsX2ZhaWx1cmVzID0g MDsKIAkJCWludDY0CQlyZXRyaWVkID0gMDsKIAkJCWludDY0CQlyZXRyaWVzID0gMDsKIApAQCAt NDY3NywxMCArNDc3NCwxMiBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJ CXsKIAkJCQlzZXJpYWxpemF0aW9uX2ZhaWx1cmVzID0gYWdnLT5zZXJpYWxpemF0aW9uX2ZhaWx1 cmVzOwogCQkJCWRlYWRsb2NrX2ZhaWx1cmVzID0gYWdnLT5kZWFkbG9ja19mYWlsdXJlczsKKwkJ CQlvdGhlcl9zcWxfZmFpbHVyZXMgPSBhZ2ctPm90aGVyX3NxbF9mYWlsdXJlczsKIAkJCX0KLQkJ CWZwcmludGYobG9nZmlsZSwgIiAiIElOVDY0X0ZPUk1BVCAiICIgSU5UNjRfRk9STUFULAorCQkJ ZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JNQVQgIiAiIElO VDY0X0ZPUk1BVCwKIAkJCQkJc2VyaWFsaXphdGlvbl9mYWlsdXJlcywKLQkJCQkJZGVhZGxvY2tf ZmFpbHVyZXMpOworCQkJCQlkZWFkbG9ja19mYWlsdXJlcywKKwkJCQkJb3RoZXJfc3FsX2ZhaWx1 cmVzKTsKIAogCQkJZnB1dGMoJ1xuJywgbG9nZmlsZSk7CiAKQEAgLTQ4ODYsMjYgKzQ5ODUsMjYg QEAgaW5pdENyZWF0ZVRhYmxlcyhQR2Nvbm4gKmNvbikKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRk bGluZm8gRERMc1tdID0gewogCQl7CiAJCQkicGdiZW5jaF9oaXN0b3J5IiwKLQkJCSJ0aWQgaW50 LGJpZCBpbnQsYWlkICAgIGludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0YW1wLGZpbGxlciBjaGFy KDIyKSIsCi0JCQkidGlkIGludCxiaWQgaW50LGFpZCBiaWdpbnQsZGVsdGEgaW50LG10aW1lIHRp bWVzdGFtcCxmaWxsZXIgY2hhcigyMikiLAorCQkJInRpZCBpbnQsYmlkIGludCxhaWQgICAgaW50 LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAsZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJyciLAor CQkJInRpZCBpbnQsYmlkIGludCxhaWQgYmlnaW50LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAs ZmlsbGVyIGNoYXIoMjIpIGRlZmF1bHQgJyciLAogCQkJMAogCQl9LAogCQl7CiAJCQkicGdiZW5j aF90ZWxsZXJzIiwKLQkJCSJ0aWQgaW50IG5vdCBudWxsLGJpZCBpbnQsdGJhbGFuY2UgaW50LGZp bGxlciBjaGFyKDg0KSIsCi0JCQkidGlkIGludCBub3QgbnVsbCxiaWQgaW50LHRiYWxhbmNlIGlu dCxmaWxsZXIgY2hhcig4NCkiLAorCQkJInRpZCBpbnQgbm90IG51bGwsYmlkIGludCx0YmFsYW5j ZSBpbnQsZmlsbGVyIGNoYXIoODQpIGRlZmF1bHQgJyciLAorCQkJInRpZCBpbnQgbm90IG51bGws YmlkIGludCx0YmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIGRlZmF1bHQgJyciLAogCQkJMQog CQl9LAogCQl7CiAJCQkicGdiZW5jaF9hY2NvdW50cyIsCi0JCQkiYWlkICAgIGludCBub3QgbnVs bCxiaWQgaW50LGFiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkiLAotCQkJImFpZCBiaWdpbnQg bm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODQpIiwKKwkJCSJhaWQg ICAgaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZpbGxlciBjaGFyKDg0KSBkZWZh dWx0ICcnIiwKKwkJCSJhaWQgYmlnaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2UgaW50LGZp bGxlciBjaGFyKDg0KSBkZWZhdWx0ICcnIiwKIAkJCTEKIAkJfSwKIAkJewogCQkJInBnYmVuY2hf YnJhbmNoZXMiLAotCQkJImJpZCBpbnQgbm90IG51bGwsYmJhbGFuY2UgaW50LGZpbGxlciBjaGFy KDg4KSIsCi0JCQkiYmlkIGludCBub3QgbnVsbCxiYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIoODgp IiwKKwkJCSJiaWQgaW50IG5vdCBudWxsLGJiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4OCkgZGVm YXVsdCAnJyIsCisJCQkiYmlkIGludCBub3QgbnVsbCxiYmFsYW5jZSBpbnQsZmlsbGVyIGNoYXIo ODgpIGRlZmF1bHQgJyciLAogCQkJMQogCQl9CiAJfTsKQEAgLTUxMjAsOSArNTIxOSw5IEBAIGlu aXRQb3B1bGF0ZVRhYmxlKFBHY29ubiAqY29uLCBjb25zdCBjaGFyICp0YWJsZSwgaW50NjQgYmFz ZSwKICAqIGEgYmxhbmstcGFkZGVkIHN0cmluZyBpbiBwZ2JlbmNoX2FjY291bnRzLgogICovCiBz dGF0aWMgdm9pZAotaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoUEdjb25uICpjb24pCitpbml0 R2VuZXJhdGVEYXRhQ2xpZW50U2lkZVRleHQoUEdjb25uICpjb24pCiB7Ci0JZnByaW50ZihzdGRl cnIsICJnZW5lcmF0aW5nIGRhdGEgKGNsaWVudC1zaWRlKS4uLlxuIik7CisJZnByaW50ZihzdGRl cnIsICJURVhUIG1vZGUuLi5cbiIpOwogCiAJLyoKIAkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBv bmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxlIHRoZSBiYWNrZW5kJ3MKQEAgLTUxMzgsMjUgKzUyMzcs Mzg5IEBAIGluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29ubiAqY29uKQogCSAqIGFscmVh ZHkgZXhpc3QKIAkgKi8KIAlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2JyYW5jaGVz IiwgbmJyYW5jaGVzLCBpbml0QnJhbmNoKTsKLQlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2Jl bmNoX3RlbGxlcnMiLCBudGVsbGVycywgaW5pdFRlbGxlcik7CisJaW5pdFBvcHVsYXRlVGFibGUo Y29uLCAicGdiZW5jaF90ZWxsZXJzIiwgIG50ZWxsZXJzLCAgaW5pdFRlbGxlcik7CiAJaW5pdFBv cHVsYXRlVGFibGUoY29uLCAicGdiZW5jaF9hY2NvdW50cyIsIG5hY2NvdW50cywgaW5pdEFjY291 bnQpOwogCiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKIH0KIAorCiAvKgotICog RmlsbCB0aGUgc3RhbmRhcmQgdGFibGVzIHdpdGggc29tZSBkYXRhIGdlbmVyYXRlZCBvbiB0aGUg c2VydmVyCi0gKgotICogQXMgYWxyZWFkeSB0aGUgY2FzZSB3aXRoIHRoZSBjbGllbnQtc2lkZSBk YXRhIGdlbmVyYXRpb24sIHRoZSBmaWxsZXIKLSAqIGNvbHVtbiBkZWZhdWx0cyB0byBOVUxMIGlu IHBnYmVuY2hfYnJhbmNoZXMgYW5kIHBnYmVuY2hfdGVsbGVycywKLSAqIGFuZCBpcyBhIGJsYW5r LXBhZGRlZCBzdHJpbmcgaW4gcGdiZW5jaF9hY2NvdW50cy4KKyAqIER1bXBzIGJpbmFyeSBidWZm ZXIgdG8gZmlsZSAocHVyZWx5IGZvciBkZWJ1Z2dpbmcpCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0 R2VuZXJhdGVEYXRhU2VydmVyU2lkZShQR2Nvbm4gKmNvbikKK2R1bXBCdWZmZXJUb0ZpbGUoY2hh ciAqZmlsZW5hbWUpCit7CisJRklMRSAqZmlsZV9wdHI7CisJc2l6ZV90IGJ5dGVzX3dyaXR0ZW47 CisKKwlmaWxlX3B0ciA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsKKwlpZiAoZmlsZV9wdHIgPT0g TlVMTCkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlICVzXG4iLCBm aWxlbmFtZSk7CisJCXJldHVybjsgLy8gRVhJVF9GQUlMVVJFOworCX0KKworCWJ5dGVzX3dyaXR0 ZW4gPSBmd3JpdGUoYmluX2NvcHlfYnVmZmVyLCAxLCBiaW5fY29weV9idWZmZXJfbGVuZ3RoLCBm aWxlX3B0cik7CisKKwlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBiaW5fY29weV9idWZmZXJfbGVuZ3Ro KQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciB3cml0aW5nIHRvIGZpbGUgb3IgaW5jb21w bGV0ZSB3cml0ZVxuIik7CisJCWZjbG9zZShmaWxlX3B0cik7CisJCXJldHVybjsgLy8gRVhJVF9G QUlMVVJFOworCX0KKworCWZjbG9zZShmaWxlX3B0cik7Cit9CisKKy8qCisgKiBTYXZlIGNoYXIg ZGF0YSB0byBidWZmZXIKKyAqLworc3RhdGljIHZvaWQKK2J1ZmZlckNoYXJEYXRhKGNoYXIgKnNy YywgaW50MzJfdCBsZW4pCit7CisJbWVtY3B5KChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJp bl9jb3B5X2J1ZmZlcl9sZW5ndGgsIChjaGFyICopIHNyYywgbGVuKTsKKwliaW5fY29weV9idWZm ZXJfbGVuZ3RoICs9IGxlbjsKK30KKworLyoKKyAqIENvbnZlcnRzIHBsYXRmb3JtIGJ5dGUgb3Jk ZXIgaW50byBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqIFNQQVJDIGRvZXNuJ3QgcmVxaXJlIHRoYXQK KyAqLworc3RhdGljIHZvaWQKK2J1ZmZlckRhdGEodm9pZCAqc3JjLCBpbnQzMl90IGxlbikKK3sK KyNpZmRlZiBfX3NwYXJjX18KKwlidWZmZXJDaGFyRGF0YShzcmMsIGxlbik7CisjZWxzZQorCWlm IChsZW4gPT0gMSkKKwkJYnVmZmVyQ2hhckRhdGEoc3JjLCBsZW4pOworCWVsc2UKKwkJZm9yIChp bnQzMl90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXsKKwkJCSgoY2hhciAqKSBiaW5fY29weV9i dWZmZXIgKyBiaW5fY29weV9idWZmZXJfbGVuZ3RoKVtpXSA9CisJCQkJKChjaGFyICopIHNyYylb bGVuIC0gaSAtIDFdOworCQl9CisKKwliaW5fY29weV9idWZmZXJfbGVuZ3RoICs9IGxlbjsKKyNl bmRpZgorfQorCisvKgorICogYWRkcyBjb2x1bW4gY291bnRlcgorICovCitzdGF0aWMgdm9pZAor YWRkQ29sdW1uQ291bnRlcihpbnQxNl90IG4pCit7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmbiwg c2l6ZW9mKG4pKTsKK30KKworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggTlVMTCB2YWx1ZQorICov CitzdGF0aWMgdm9pZAorYWRkTnVsbENvbHVtbigpCit7CisJaW50MzJfdCBudWxsID0gLTE7CisJ YnVmZmVyRGF0YSgodm9pZCAqKSAmbnVsbCwgc2l6ZW9mKG51bGwpKTsKK30KKworLyoKKyAqIGFk ZHMgY29sdW1uIHdpdGggaW50OCB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50OENvbHVt bihpbnQ4X3QgdmFsdWUpCit7CisJaW50OF90CWRhdGEgPSB2YWx1ZTsKKwlpbnQzMl90CXNpemUg PSBzaXplb2YoZGF0YSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKHNpemUp KTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCisvKgor ICogYWRkcyBjb2x1bW4gd2l0aCBpbnQxNiB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50 MTZDb2x1bW4oaW50MTZfdCB2YWx1ZSkKK3sKKwlpbnQxNl90CWRhdGEgPSB2YWx1ZTsKKwlpbnQz Ml90CXNpemUgPSBzaXplb2YoZGF0YSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmc2l6ZSwgc2l6 ZW9mKHNpemUpKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZkYXRhLCBzaXplb2YoZGF0YSkpOwor fQorCisvKgorICogYWRkcyBjb2x1bW4gd2l0aCBpbnRpMzIgdmFsdWUKKyAqLworc3RhdGljIHZv aWQKK2FkZEludDMyQ29sdW1uKGludDMyX3QgdmFsdWUpCit7CisJaW50MzJfdAlkYXRhID0gdmFs dWU7CisJaW50MzJfdAlzaXplID0gc2l6ZW9mKGRhdGEpOworCWJ1ZmZlckRhdGEoKHZvaWQgKikg JnNpemUsIHNpemVvZihzaXplKSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9m KGRhdGEpKTsKK30KKworLyoKKyAqIGFkZHMgY29sdW1uIHdpdGggaW50aTY0IHZhbHVlCisgKi8K K3N0YXRpYyB2b2lkCithZGRJbnQ2NENvbHVtbihpbnQ2NF90IHZhbHVlKQoreworCWludDY0X3QJ ZGF0YSA9IHZhbHVlOworCWludDMyX3QJc2l6ZSA9IHNpemVvZihkYXRhKTsKKwlidWZmZXJEYXRh KCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJmRh dGEsIHNpemVvZihkYXRhKSk7Cit9CisKKy8qCisgKiBhZGRzIGNvbHVtbiB3aXRoIGNoYXIgdmFs dWUKKyAqLworc3RhdGljIHZvaWQKK2FkZENoYXJDb2x1bW4oY2hhciAqdmFsdWUpCit7CisJaW50 MzJfdAlzaXplID0gc3RybGVuKHZhbHVlKTsKKwlidWZmZXJEYXRhKCh2b2lkICopICZzaXplLCBz aXplb2Yoc2l6ZSkpOworCWJ1ZmZlckNoYXJEYXRhKHZhbHVlLCBzaXplKTsKK30KKworLyoKKyAq IFN0YXJ0cyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZIEZST00gQklOQVJZIHN0 YXRlbWVudAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNvcHlIZWFkZXIoUEdjb25uICpj b24pCit7CisJY2hhciBoZWFkZXJbXSA9IHsnUCcsJ0cnLCdDJywnTycsJ1AnLCdZJywnXG4nLCdc Mzc3JywnXHInLCdcbicsJ1wwJywKKwkJCQkJICdcMCcsJ1wwJywnXDAnLCdcMCcsCisJCQkJCSAn XDAnLCdcMCcsJ1wwJywnXDAnIH07CisKKwlQUXB1dENvcHlEYXRhKGNvbiwgaGVhZGVyLCAxOSk7 Cit9CisKKy8qCisgKiBGaW5pc2hlcyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZ IEZST00gQklOQVJZIHN0YXRlbWVudAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNvcHlU cmFpbGVyKFBHY29ubiAqY29uKQoreworCXN0YXRpYyBjaGFyIHRyYWlsZXJbXSA9IHsgMHhGRiwg MHhGRiB9OworCisJUFFwdXRDb3B5RGF0YShjb24sIHRyYWlsZXIsIDIpOworfQorCisvKgorICog Rmxhc2hlcyBjdXJyZW50IGJ1ZmZlciBvdmVyIG5ldHdvcmsgaWYgbmVlZGVkCisgKi8KK3N0YXRp YyB2b2lkCitmbHVzaEJ1ZmZlcihQR2Nvbm4gKmNvbiwgUEdyZXN1bHQgKnJlcywgaW50MTZfdCBy b3dfbGVuKQoreworCWlmIChiaW5fY29weV9idWZmZXJfbGVuZ3RoICsgcm93X2xlbiA+IEJJTl9D T1BZX0JVRl9TSVpFKQorCXsKKwkJLyogZmx1c2ggY3VycmVudCBidWZmZXIgKi8KKwkJaWYgKFBR cmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfQ09QWV9JTikKKwkJCVBRcHV0Q29weURhdGEoY29u LCAoY2hhciAqKSBiaW5fY29weV9idWZmZXIsIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpOworCQli aW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsKKwl9Cit9CisKKy8qCisgKiBTZW5kcyBjdXJyZW50 IGJyYW5jaCByb3cgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkCitpbml0QnJhbmNoQmluYXJ5 KFBHY29ubiAqY29uLCBQR3Jlc3VsdCAqcmVzLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50 KQoreworCS8qCisJICogRWFjaCByb3cgaGFzIGZvbGxvd2luZyBleHRyYSBieXRlczoKKwkgKiAt IDIgYnl0ZXMgZm9yIG51bWJlciBvZiBjb2x1bW5zCisJICogLSA0IGJ5dGVzIGFzIGxlbmd0aCBm b3IgZWFjaCBjb2x1bW4KKwkgKi8KKwlpbnQxNl90CW1heF9yb3dfbGVuID0gIDM1ICsgMiArIDQq MzsgLyogbWF4IHJvdyBzaXplIGlzIDMyICovCisKKwlmbHVzaEJ1ZmZlcihjb24sIHJlcywgbWF4 X3Jvd19sZW4pOworCisJYWRkQ29sdW1uQ291bnRlcigyKTsKKworCWFkZEludDMyQ29sdW1uKGN1 cnIgKyAxKTsKKwlhZGRJbnQzMkNvbHVtbigwKTsKK30KKworLyoKKyAqIFNlbmRzIGN1cnJlbnQg dGVsbGVyIHJvdyB0byBidWZmZXIKKyAqLworc3RhdGljIHZvaWQKK2luaXRUZWxsZXJCaW5hcnko UEdjb25uICpjb24sIFBHcmVzdWx0ICpyZXMsIGludDY0X3QgY3VyciwgaW50MzJfdCBwYXJlbnQp Cit7CisJLyoKKwkgKiBFYWNoIHJvdyBoYXMgZm9sbG93aW5nIGV4dHJhIGJ5dGVzOgorCSAqIC0g MiBieXRlcyBmb3IgbnVtYmVyIG9mIGNvbHVtbnMKKwkgKiAtIDQgYnl0ZXMgYXMgbGVuZ3RoIGZv ciBlYWNoIGNvbHVtbgorCSAqLworCWludDE2X3QJbWF4X3Jvd19sZW4gPSAgNDAgKyAyICsgNCo0 OyAvKiBtYXggcm93IHNpemUgaXMgNDAgKi8KKworCWZsdXNoQnVmZmVyKGNvbiwgcmVzLCBtYXhf cm93X2xlbik7CisKKwlhZGRDb2x1bW5Db3VudGVyKDMpOworCisJYWRkSW50MzJDb2x1bW4oY3Vy ciArIDEpOworCWFkZEludDMyQ29sdW1uKGN1cnIgLyBwYXJlbnQgKyAxKTsKKwlhZGRJbnQzMkNv bHVtbigwKTsKK30KKworLyoKKyAqIFNlbmRzIGN1cnJlbnQgYWNjb3VudCByb3cgdG8gYnVmZmVy CisgKi8KK3N0YXRpYyB2b2lkCitpbml0QWNjb3VudEJpbmFyeShQR2Nvbm4gKmNvbiwgUEdyZXN1 bHQgKnJlcywgaW50NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKK3sKKwkvKgorCSAqIEVhY2gg cm93IGhhcyBmb2xsb3dpbmcgZXh0cmEgYnl0ZXM6CisJICogLSAyIGJ5dGVzIGZvciBudW1iZXIg b2YgY29sdW1ucworCSAqIC0gNCBieXRlcyBhcyBsZW5ndGggZm9yIGVhY2ggY29sdW1uCisJICov CisJaW50MTZfdAltYXhfcm93X2xlbiA9IDI1MCArIDIgKyA0KjQ7IC8qIG1heCByb3cgc2l6ZSBp cyAyNTAgZm9yIGludDY0ICovCisKKwlmbHVzaEJ1ZmZlcihjb24sIHJlcywgbWF4X3Jvd19sZW4p OworCisJYWRkQ29sdW1uQ291bnRlcigzKTsKKworCWlmIChzY2FsZSA8PSBTQ0FMRV8zMkJJVF9U SFJFU0hPTEQpCisJCWFkZEludDMyQ29sdW1uKGN1cnIgKyAxKTsKKwllbHNlCisJCWFkZEludDY0 Q29sdW1uKGN1cnIpOworCisJYWRkSW50MzJDb2x1bW4oY3VyciAvIHBhcmVudCArIDEpOworCWFk ZEludDMyQ29sdW1uKDApOworfQorCisvKgorICogVW5pdmVyc2FsIHdyYXBwZXIgZm9yIHNlbmRp bmcgZGF0YSBpbiBiaW5hcnkgZm9ybWF0CisgKi8KK3N0YXRpYyB2b2lkCitpbml0UG9wdWxhdGVU YWJsZUJpbmFyeShQR2Nvbm4gKmNvbiwgY2hhciAqdGFibGUsIGNoYXIgKmNvbHVtbnMsCisJCQkJ CQlpbnQgY291bnRlciwgaW50NjRfdCBiYXNlLCBpbml0Um93TWV0aG9kQmluIGluaXRfcm93KQor eworCWludAkJCSBuOworCVBHcmVzdWx0CSpyZXM7CisJY2hhcgkJIGNvcHlfc3RhdGVtZW50WzI1 Nl07CisJY29uc3QgY2hhcgkqY29weV9zdGF0ZW1lbnRfZm10ID0gImNvcHkgJXMgKCVzKSBmcm9t IHN0ZGluIChmb3JtYXQgYmluYXJ5KSI7CisJaW50NjRfdAkJIHN0YXJ0ID0gYmFzZSAqIGNvdW50 ZXI7CisKKwliaW5fY29weV9idWZmZXJfbGVuZ3RoID0gMDsKKworCS8qIFVzZSBDT1BZIHdpdGgg RlJFRVpFIG9uIHYxNCBhbmQgbGF0ZXIgZm9yIGFsbCBvcmRpbmFyeSB0YWJsZXMgKi8KKwlpZiAo KFBRc2VydmVyVmVyc2lvbihjb24pID49IDE0MDAwMCkgJiYKKwkJZ2V0X3RhYmxlX3JlbGtpbmQo Y29uLCB0YWJsZSkgPT0gUkVMS0lORF9SRUxBVElPTikKKwkJY29weV9zdGF0ZW1lbnRfZm10ID0g ImNvcHkgJXMgKCVzKSBmcm9tIHN0ZGluIHdpdGggKGZvcm1hdCBiaW5hcnkpIjsKKworCW4gPSBw Z19zbnByaW50Zihjb3B5X3N0YXRlbWVudCwgc2l6ZW9mKGNvcHlfc3RhdGVtZW50KSwgY29weV9z dGF0ZW1lbnRfZm10LCB0YWJsZSwgY29sdW1ucyk7CisJaWYgKG4gPj0gc2l6ZW9mKGNvcHlfc3Rh dGVtZW50KSkKKwkJcGdfZmF0YWwoImludmFsaWQgYnVmZmVyIHNpemU6IG11c3QgYmUgYXQgbGVh c3QgJWQgY2hhcmFjdGVycyBsb25nIiwgbik7CisJZWxzZSBpZiAobiA9PSAtMSkKKwkJcGdfZmF0 YWwoImludmFsaWQgZm9ybWF0IHN0cmluZyIpOworCisJcmVzID0gUFFleGVjKGNvbiwgY29weV9z dGF0ZW1lbnQpOworCisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09QWV9JTikK KwkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgY29weSBpbiByZXN1bHQ6ICVzIiwgUFFlcnJvck1lc3Nh Z2UoY29uKSk7CisJUFFjbGVhcihyZXMpOworCisKKwlzZW5kQmluYXJ5Q29weUhlYWRlcihjb24p OworCisJZm9yIChpbnQ2NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgYmFzZTsgaSsrKQorCXsK KwkJaW5pdF9yb3coY29uLCByZXMsIGksIGJhc2UpOworCX0KKworCWlmIChQUXJlc3VsdFN0YXR1 cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJCVBRcHV0Q29weURhdGEoY29uLCAoY2hhciAqKSBi aW5fY29weV9idWZmZXIsIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpOworCWVsc2UKKwkJZnByaW50 ZihzdGRlcnIsICJVbmV4cGVjdGVkIG1vZGUgJWQgaW5zdGVhZCBvZiAlZFxuIiwgUFFyZXN1bHRT dGF0dXMocmVzKSwgUEdSRVNfQ09QWV9JTik7CisKKwlzZW5kQmluYXJ5Q29weVRyYWlsZXIoY29u KTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJeworCQlp ZiAoUFFwdXRDb3B5RW5kKGNvbiwgTlVMTCkgPT0gMSkgLyogc3VjY2VzcyAqLworCQl7CisJCQly ZXMgPSBQUWdldFJlc3VsdChjb24pOworCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdS RVNfQ09NTUFORF9PSykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAlc1xuIiwgUFFlcnJv ck1lc3NhZ2UoY29uKSk7CisJCQlQUWNsZWFyKHJlcyk7CisJCX0KKwkJZWxzZQorCQkJZnByaW50 ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOworCX0KK30KKwor LyoKKyAqIFdyYXBwZXIgZm9yIGJpbmFyeSBkYXRhIGxvYWQKKyAqLworc3RhdGljIHZvaWQKK2lu aXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlQmluYXJ5KFBHY29ubiAqY29uKQoreworCisJZnByaW50 ZihzdGRlcnIsICJCSU5BUlkgbW9kZS4uLlxuIik7CisKKwliaW5fY29weV9idWZmZXIgPSBwZ19t YWxsb2MoQklOX0NPUFlfQlVGX1NJWkUpOworCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAwOwor CisJLyoKKwkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxl IHRoZSBiYWNrZW5kJ3MKKwkgKiBkYXRhLWxvYWRpbmcgb3B0aW1pemF0aW9ucworCSAqLworCWV4 ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9s ZCBkYXRhICovCisJaW5pdFRydW5jYXRlVGFibGVzKGNvbik7CisKKwlleGVjdXRlU3RhdGVtZW50 KGNvbiwgImNvbW1pdCIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsgaSsrKQorCXsK KwkJaW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoY29uLCAicGdiZW5jaF9icmFuY2hlcyIsICJiaWQs IGJiYWxhbmNlIiwKKwkJCQkJCQkJaSwgbmJyYW5jaGVzLCBpbml0QnJhbmNoQmluYXJ5KTsKKwkJ aW5pdFBvcHVsYXRlVGFibGVCaW5hcnkoY29uLCAicGdiZW5jaF90ZWxsZXJzIiwgICJ0aWQsIGJp ZCwgdGJhbGFuY2UiLAorCQkJCQkJCQlpLCBudGVsbGVycywgIGluaXRUZWxsZXJCaW5hcnkpOwor CQlpbml0UG9wdWxhdGVUYWJsZUJpbmFyeShjb24sICJwZ2JlbmNoX2FjY291bnRzIiwgImFpZCwg YmlkLCBhYmFsYW5jZSIsCisJCQkJCQkJCWksIG5hY2NvdW50cywgaW5pdEFjY291bnRCaW5hcnkp OworCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisJfQorCisJcGdfZnJlZShi aW5fY29weV9idWZmZXIpOworfQorCisvKgorICogRmlsbCB0aGUgc3RhbmRhcmQgdGFibGVzIHdp dGggc29tZSBkYXRhIGdlbmVyYXRlZCBhbmQgc2VudCBmcm9tIHRoZSBjbGllbnQuCisgKi8KK3N0 YXRpYyB2b2lkCitpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZShQR2Nvbm4gKmNvbikKK3sKKwlm cHJpbnRmKHN0ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAoY2xpZW50LXNpZGUpIGluICIpOworCisJ c3dpdGNoIChkYXRhX2dlbmVyYXRpb25fdHlwZSkKKwl7CisJCWNhc2UgR0VOX1RZUEVfQ09QWV9P UklHSU5BTDoKKwkJCWluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4dChjb24pOworCQkJYnJl YWs7CisJCWNhc2UgR0VOX1RZUEVfQ09QWV9CSU5BUlk6CisJCQlpbml0R2VuZXJhdGVEYXRhQ2xp ZW50U2lkZUJpbmFyeShjb24pOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogR2VuZXJhdGlu ZyBkYXRhIHZpYSBJTlNFUlQgLi4gU0VMRUNUIC4uIEZST00gZ2VuZXJhdGVfc2VyaWVzCisgKiB3 aG9sZSBkYXRhc2V0IGluIHNpbmdsZSB0cmFuc2FjdGlvbgorICovCitzdGF0aWMgdm9pZAorZ2Vu ZXJhdGVEYXRhSW5zZXJ0U2luZ2xlVFhOKFBHY29ubiAqY29uKQogewogCVBRRXhwQnVmZmVyRGF0 YSBzcWw7CiAKLQlmcHJpbnRmKHN0ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAoc2VydmVyLXNpZGUp Li4uXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgInZpYSBJTlNFUlQgLi4gU0VMRUNUIGdlbmVyYXRl X3Nlcmllcy4uLiBpbiBzaW5nbGUgVFhOXG4iKTsKKwogCiAJLyoKIAkgKiB3ZSBkbyBhbGwgb2Yg dGhpcyBpbiBvbmUgdHJhbnNhY3Rpb24gdG8gZW5hYmxlIHRoZSBiYWNrZW5kJ3MKQEAgLTUxNzAs MjcgKzU2MzMsMTY2IEBAIGluaXRHZW5lcmF0ZURhdGFTZXJ2ZXJTaWRlKFBHY29ubiAqY29uKQog CWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKIAogCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJ CSAgImluc2VydCBpbnRvIHBnYmVuY2hfYnJhbmNoZXMoYmlkLGJiYWxhbmNlKSAiCisJCQkJCSAg Imluc2VydCBpbnRvIHBnYmVuY2hfYnJhbmNoZXMoYmlkLCBiYmFsYW5jZSkgIgogCQkJCQkgICJz ZWxlY3QgYmlkLCAwICIKLQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgJWQpIGFzIGJp ZCIsIG5icmFuY2hlcyAqIHNjYWxlKTsKKwkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwg JWQpIGFzIGJpZCIsCisJCQkJCSAgc2NhbGUgKiBuYnJhbmNoZXMpOwogCWV4ZWN1dGVTdGF0ZW1l bnQoY29uLCBzcWwuZGF0YSk7CiAKIAlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAotCQkJCQkgICJp bnNlcnQgaW50byBwZ2JlbmNoX3RlbGxlcnModGlkLGJpZCx0YmFsYW5jZSkgIgotCQkJCQkgICJz ZWxlY3QgdGlkLCAodGlkIC0gMSkgLyAlZCArIDEsIDAgIgotCQkJCQkgICJmcm9tIGdlbmVyYXRl X3NlcmllcygxLCAlZCkgYXMgdGlkIiwgbnRlbGxlcnMsIG50ZWxsZXJzICogc2NhbGUpOworCQkJ CQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX3RlbGxlcnModGlkLCBiaWQsIHRiYWxhbmNlKSAiCisJ CQkJCSAgInNlbGVjdCB0aWQgKyAxLCB0aWQgLyAlZCArIDEsIDAgIgorCQkJCQkgICJmcm9tIGdl bmVyYXRlX3NlcmllcygwLCAlZCkgYXMgdGlkIiwKKwkJCQkJICBudGVsbGVycywgKHNjYWxlICog bnRlbGxlcnMpIC0gMSk7CiAJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKIAogCXBy aW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfYWNjb3Vu dHMoYWlkLGJpZCxhYmFsYW5jZSxmaWxsZXIpICIKLQkJCQkJICAic2VsZWN0IGFpZCwgKGFpZCAt IDEpIC8gJWQgKyAxLCAwLCAnJyAiCi0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICIg SU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCi0JCQkJCSAgbmFjY291bnRzLCAoaW50NjQpIG5hY2Nv dW50cyAqIHNjYWxlKTsKKwkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQs IGJpZCwgYWJhbGFuY2UsICIKKwkJCQkJCQkJICAgImZpbGxlcikgIgorCQkJCQkgICJzZWxlY3Qg YWlkICsgMSwgYWlkIC8gJWQgKyAxLCAwLCAnJyAiCisJCQkJCSAgImZyb20gZ2VuZXJhdGVfc2Vy aWVzKDAsICIgSU5UNjRfRk9STUFUICIpIGFzIGFpZCIsCisJCQkJCSAgbmFjY291bnRzLCAoaW50 NjQpIChzY2FsZSAqIG5hY2NvdW50cykgLSAxKTsKIAlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3Fs LmRhdGEpOwogCisJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwogCXRlcm1QUUV4 cEJ1ZmZlcigmc3FsKTsKK30KKworCisvKgorICogR2VuZXJhdGluZyBkYXRhIHZpYSBJTlNFUlQg Li4gU0VMRUNUIC4uIEZST00gZ2VuZXJhdGVfc2VyaWVzCisgKiBPbmUgdHJhbnNhY3Rpb24gcGVy ICdzY2FsZScKKyAqLworc3RhdGljIHZvaWQKK2dlbmVyYXRlRGF0YUluc2VydFNlcmllcyhQR2Nv bm4gKmNvbikKK3sKKwlQUUV4cEJ1ZmZlckRhdGEgc3FsOworCisJZnByaW50ZihzdGRlcnIsICJ2 aWEgSU5TRVJUIC4uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMuLi4gaW4gbXVsdGlwbGUgVFhOKHMp XG4iKTsKKworCWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKKworCWV4ZWN1dGVTdGF0ZW1lbnQoY29u LCAiYmVnaW4iKTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRy dW5jYXRlVGFibGVzKGNvbik7CiAKIAlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsgaSsrKQorCXsKKwkJZXhlY3V0ZVN0YXRlbWVu dChjb24sICJiZWdpbiIpOworCisJCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJp bnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVzKGJpZCwgYmJhbGFuY2UpICIKKwkJCQkJCSAgInZh bHVlcyglZCwgMCkiLCBpICsgMSk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7 CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVu Y2hfdGVsbGVycyh0aWQsIGJpZCwgdGJhbGFuY2UpICIKKwkJCQkJCSAgInNlbGVjdCB0aWQgKyAx LCB0aWQgLyAlZCArIDEsIDAgIgorCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVk KSBhcyB0aWQiLAorCQkJCQkJICBudGVsbGVycywgaSAqIG50ZWxsZXJzLCAoaSArIDEpICogbnRl bGxlcnMgLSAxKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmlu dGZQUUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50 cyhhaWQsIGJpZCwgYWJhbGFuY2UsICIKKwkJCQkJCQkJCSAgICJmaWxsZXIpICIKKwkJCQkJCSAg InNlbGVjdCBhaWQgKyAxLCBhaWQgLyAlZCArIDEsIDAsICcnICIKKwkJCQkJCSAgImZyb20gZ2Vu ZXJhdGVfc2VyaWVzKCIgSU5UNjRfRk9STUFUICIsICIKKwkJCQkJCQkJSU5UNjRfRk9STUFUICIp IGFzIGFpZCIsCisJCQkJCQkgIG5hY2NvdW50cywgKGludDY0KSBpICogbmFjY291bnRzLAorCQkJ CQkJICAoaW50NjQpIChpICsgMSkgKiBuYWNjb3VudHMgLSAxKTsKKwkJZXhlY3V0ZVN0YXRlbWVu dChjb24sIHNxbC5kYXRhKTsKKworCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOwor CX0KKworCXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKK30KKworLyoKKyAqIEdlbmVyYXRpbmcgZGF0 YSB2aWEgSU5TRVJUIC4uIFNFTEVDVCAuLiBGUk9NIHVubmVzdAorICogT25lIHRyYW5zYWN0aW9u IHBlciAnc2NhbGUnCisgKi8KK3N0YXRpYyB2b2lkCitnZW5lcmF0ZURhdGFJbnNlcnRVbm5lc3Qo UEdjb25uICpjb24pCit7CisJUFFFeHBCdWZmZXJEYXRhIHNxbDsKKworCWZwcmludGYoc3RkZXJy LCAidmlhIElOU0VSVCAuLiBTRUxFQ1QgdW5uZXN0Li4uXG4iKTsKKworCWluaXRQUUV4cEJ1ZmZl cigmc3FsKTsKKworCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKworCS8qIHRydW5j YXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRydW5jYXRlVGFibGVzKGNvbik7CisKKwll eGVjdXRlU3RhdGVtZW50KGNvbiwgImNvbW1pdCIpOworCisJZm9yIChpbnQgcyA9IDA7IHMgPCBz Y2FsZTsgcysrKQorCXsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJCXBy aW50ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5j aGVzKGJpZCxiYmFsYW5jZSkgIgorCQkJCQkJICAidmFsdWVzKCVkLCAwKSIsIHMgKyAxKTsKKwkJ ZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigm c3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF90ZWxsZXJzKHRpZCwgYmlkLCB0YmFs YW5jZSkgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhcnJheV9hZ2cocy5pIG9yZGVyIGJ5IHMu aSkpIGFzIHRpZCwgIgorCQkJCQkJCQkgICIlZCBhcyBiaWQsIDAgYXMgdGJhbGFuY2UgIgorCQkJ CQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyBzKGkpIiwKKwkJCQkJCSAgcyAr IDEsIHMgKiBudGVsbGVycyArIDEsIChzICsgMSkgKiBudGVsbGVycyk7CisJCWV4ZWN1dGVTdGF0 ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJ CSAgIndpdGggZGF0YSBhcyAoIgorCQkJCQkJICAiICAgc2VsZWN0IGdlbmVyYXRlX3Nlcmllcygi IElOVDY0X0ZPUk1BVCAiLCAiCisJCQkJCQkJICBJTlQ2NF9GT1JNQVQgIikgYXMgaSkgIgorCQkJ CQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgIgorCQkJCQkJCQkJ ICAiYWJhbGFuY2UsIGZpbGxlcikgIgorCQkJCQkJICAic2VsZWN0IHVubmVzdChhaWQpLCB1bm5l c3QoYmlkKSwgMCBhcyBhYmFsYW5jZSwgIgorCQkJCQkJCQkgICInJyBhcyBmaWxsZXIgIgorCQkJ CQkJICAiZnJvbSAoc2VsZWN0IGFycmF5X2FnZyhpKzEpIGFpZCwgIgorCQkJCQkJCQkJICAgImFy cmF5X2FnZyhpLyVkICsgMSkgYmlkIGZyb20gZGF0YSkiLAorCQkJCQkJICAoaW50NjQpIHMgKiBu YWNjb3VudHMgKyAxLAorCQkJCQkJICAoaW50NjQpIChzICsgMSkgKiBuYWNjb3VudHMsIG5hY2Nv dW50cyk7CisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJZXhlY3V0ZVN0 YXRlbWVudChjb24sICJjb21taXQiKTsKKwl9CisKKwl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7Cit9 CisKKy8qCisgKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJh dGVkIG9uIHRoZSBzZXJ2ZXIKKyAqCisgKiBBcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggdGhlIGNs aWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbiwgdGhlIGZpbGxlcgorICogY29sdW1uIGRlZmF1bHRz IHRvIE5VTEwgaW4gcGdiZW5jaF9icmFuY2hlcyBhbmQgcGdiZW5jaF90ZWxsZXJzLAorICogYW5k IGlzIGEgYmxhbmstcGFkZGVkIHN0cmluZyBpbiBwZ2JlbmNoX2FjY291bnRzLgorICovCitzdGF0 aWMgdm9pZAoraW5pdEdlbmVyYXRlRGF0YVNlcnZlclNpZGUoUEdjb25uICpjb24pCit7CisJZnBy aW50ZihzdGRlcnIsICJnZW5lcmF0aW5nIGRhdGEgKHNlcnZlci1zaWRlKSAiKTsKKworCXN3aXRj aCAoZGF0YV9nZW5lcmF0aW9uX3R5cGUpCisJeworCQljYXNlIEdFTl9UWVBFX0lOU0VSVF9PUklH SU5BTDoKKwkJCWdlbmVyYXRlRGF0YUluc2VydFNpbmdsZVRYTihjb24pOworCQkJYnJlYWs7CisJ CWNhc2UgR0VOX1RZUEVfSU5TRVJUX1NFUklFUzoKKwkJCWdlbmVyYXRlRGF0YUluc2VydFNlcmll cyhjb24pOworCQkJYnJlYWs7CisJCWNhc2UgR0VOX1RZUEVfSU5TRVJUX1VOTkVTVDoKKwkJCWdl bmVyYXRlRGF0YUluc2VydFVubmVzdChjb24pOworCQkJYnJlYWs7CisJfQogfQogCiAvKgpAQCAt NTI3Niw2ICs1ODc4LDggQEAgaW5pdENyZWF0ZUZLZXlzKFBHY29ubiAqY29uKQogc3RhdGljIHZv aWQKIGNoZWNrSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiB7CisJY2hh cglkYXRhX2luaXRfdHlwZSA9IDA7CisKIAlpZiAoaW5pdGlhbGl6ZV9zdGVwc1swXSA9PSAnXDAn KQogCQlwZ19mYXRhbCgibm8gaW5pdGlhbGl6YXRpb24gc3RlcHMgc3BlY2lmaWVkIik7CiAKQEAg LTUyODcsNyArNTg5MSwyMiBAQCBjaGVja0luaXRTdGVwcyhjb25zdCBjaGFyICppbml0aWFsaXpl X3N0ZXBzKQogCQkJcGdfbG9nX2Vycm9yX2RldGFpbCgiQWxsb3dlZCBzdGVwIGNoYXJhY3RlcnMg YXJlOiBcIiIgQUxMX0lOSVRfU1RFUFMgIlwiLiIpOwogCQkJZXhpdCgxKTsKIAkJfQorCisJCXN3 aXRjaCAoKnN0ZXApCisJCXsKKwkJCWNhc2UgJ2cnOgorCQkJY2FzZSAnQyc6CisJCQljYXNlICdH JzoKKwkJCWNhc2UgJ2knOgorCQkJY2FzZSAnSSc6CisJCQkJZGF0YV9pbml0X3R5cGUrKzsKKwkJ CQlkYXRhX2dlbmVyYXRpb25fdHlwZSA9ICpzdGVwOworCQkJCWJyZWFrOworCQl9CiAJfQorCisJ aWYgKGRhdGFfaW5pdF90eXBlID4gMSkKKwkJcGdfbG9nX2Vycm9yKCJXQVJOSU5HISBNb3JlIHRo YW4gb25lIHR5cGUgb2Ygc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uIGlzIHJlcXVlc3RlZCIp OwogfQogCiAvKgpAQCAtNTMyNiwxMCArNTk0NSwxMyBAQCBydW5Jbml0U3RlcHMoY29uc3QgY2hh ciAqaW5pdGlhbGl6ZV9zdGVwcykKIAkJCQlpbml0Q3JlYXRlVGFibGVzKGNvbik7CiAJCQkJYnJl YWs7CiAJCQljYXNlICdnJzoKKwkJCWNhc2UgJ0MnOgogCQkJCW9wID0gImNsaWVudC1zaWRlIGdl bmVyYXRlIjsKIAkJCQlpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZShjb24pOwogCQkJCWJyZWFr OwogCQkJY2FzZSAnRyc6CisJCQljYXNlICdpJzoKKwkJCWNhc2UgJ0knOgogCQkJCW9wID0gInNl cnZlci1zaWRlIGdlbmVyYXRlIjsKIAkJCQlpbml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShjb24p OwogCQkJCWJyZWFrOwpAQCAtNjMxOSw2ICs2OTQxLDcgQEAgcHJpbnRQcm9ncmVzc1JlcG9ydChU U3RhdGUgKnRocmVhZHMsIGludDY0IHRlc3Rfc3RhcnQsIHBnX3RpbWVfdXNlY190IG5vdywKIAkJ Y3VyLnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgKz0KIAkJCXRocmVhZHNbaV0uc3RhdHMuc2VyaWFs aXphdGlvbl9mYWlsdXJlczsKIAkJY3VyLmRlYWRsb2NrX2ZhaWx1cmVzICs9IHRocmVhZHNbaV0u c3RhdHMuZGVhZGxvY2tfZmFpbHVyZXM7CisJCWN1ci5vdGhlcl9zcWxfZmFpbHVyZXMgKz0gdGhy ZWFkc1tpXS5zdGF0cy5vdGhlcl9zcWxfZmFpbHVyZXM7CiAJfQogCiAJLyogd2UgY291bnQgb25s eSBhY3R1YWxseSBleGVjdXRlZCB0cmFuc2FjdGlvbnMgKi8KQEAgLTY0NjEsNyArNzA4NCw4IEBA IHByaW50UmVzdWx0cyhTdGF0c0RhdGEgKnRvdGFsLAogCiAJLyoKIAkgKiBSZW1haW5pbmcgc3Rh dHMgYXJlIG5vbnNlbnNpY2FsIGlmIHdlIGZhaWxlZCB0byBleGVjdXRlIGFueSB4YWN0cyBkdWUK LQkgKiB0byBvdGhlcnMgdGhhbiBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrIGVycm9ycworCSAq IHRvIG90aGVyIHRoYW4gc2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBlcnJvcnMgYW5kIC0tY29u dGludWUtb24tZXJyb3IKKwkgKiBpcyBub3Qgc2V0LgogCSAqLwogCWlmICh0b3RhbF9jbnQgPD0g MCkKIAkJcmV0dXJuOwpAQCAtNjQ3Nyw2ICs3MTAxLDkgQEAgcHJpbnRSZXN1bHRzKFN0YXRzRGF0 YSAqdG90YWwsCiAJCXByaW50ZigibnVtYmVyIG9mIGRlYWRsb2NrIGZhaWx1cmVzOiAiIElOVDY0 X0ZPUk1BVCAiICglLjNmJSUpXG4iLAogCQkJICAgdG90YWwtPmRlYWRsb2NrX2ZhaWx1cmVzLAog CQkJICAgMTAwLjAgKiB0b3RhbC0+ZGVhZGxvY2tfZmFpbHVyZXMgLyB0b3RhbF9jbnQpOworCQlw cmludGYoIm51bWJlciBvZiBvdGhlciBmYWlsdXJlczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUl KVxuIiwKKwkJCSAgIHRvdGFsLT5vdGhlcl9zcWxfZmFpbHVyZXMsCisJCQkgICAxMDAuMCAqIHRv dGFsLT5vdGhlcl9zcWxfZmFpbHVyZXMgLyB0b3RhbF9jbnQpOwogCX0KIAogCS8qIGl0IGNhbiBi ZSBub24temVybyBvbmx5IGlmIG1heF90cmllcyBpcyBub3QgZXF1YWwgdG8gb25lICovCkBAIC02 NTgwLDYgKzcyMDcsMTAgQEAgcHJpbnRSZXN1bHRzKFN0YXRzRGF0YSAqdG90YWwsCiAJCQkJCQkJ ICAgc3N0YXRzLT5kZWFkbG9ja19mYWlsdXJlcywKIAkJCQkJCQkgICAoMTAwLjAgKiBzc3RhdHMt PmRlYWRsb2NrX2ZhaWx1cmVzIC8KIAkJCQkJCQkJc2NyaXB0X3RvdGFsX2NudCkpOworCQkJCQkJ cHJpbnRmKCIgLSBudW1iZXIgb2Ygb3RoZXIgZmFpbHVyZXM6ICIgSU5UNjRfRk9STUFUICIgKCUu M2YlJSlcbiIsCisJCQkJCQkJICAgc3N0YXRzLT5vdGhlcl9zcWxfZmFpbHVyZXMsCisJCQkJCQkJ ICAgKDEwMC4wICogc3N0YXRzLT5vdGhlcl9zcWxfZmFpbHVyZXMgLworCQkJCQkJCQlzY3JpcHRf dG90YWxfY250KSk7CiAJCQkJCX0KIAogCQkJCQkvKgpAQCAtNjczOSw2ICs3MzcwLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsidmVyYm9zZS1lcnJvcnMiLCBub19hcmd1bWVu dCwgTlVMTCwgMTV9LAogCQl7ImV4aXQtb24tYWJvcnQiLCBub19hcmd1bWVudCwgTlVMTCwgMTZ9 LAogCQl7ImRlYnVnIiwgbm9fYXJndW1lbnQsIE5VTEwsIDE3fSwKKwkJeyJjb250aW51ZS1vbi1l cnJvciIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxOH0sCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07 CiAKQEAgLTcwOTIsNiArNzcyNCwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ CWNhc2UgMTc6CQkJLyogZGVidWcgKi8KIAkJCQlwZ19sb2dnaW5nX2luY3JlYXNlX3ZlcmJvc2l0 eSgpOwogCQkJCWJyZWFrOworCQkJY2FzZSAxODoJCQkvKiBjb250aW51ZS1vbi1lcnJvciAqLwor CQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsKKwkJCQljb250aW51ZV9vbl9lcnJv ciA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFs cmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC03NDQ3 LDYgKzgwODMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc3RhdHMucmV0cmll ZCArPSB0aHJlYWQtPnN0YXRzLnJldHJpZWQ7CiAJCXN0YXRzLnNlcmlhbGl6YXRpb25fZmFpbHVy ZXMgKz0gdGhyZWFkLT5zdGF0cy5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzOwogCQlzdGF0cy5kZWFk bG9ja19mYWlsdXJlcyArPSB0aHJlYWQtPnN0YXRzLmRlYWRsb2NrX2ZhaWx1cmVzOworCQlzdGF0 cy5vdGhlcl9zcWxfZmFpbHVyZXMgKz0gdGhyZWFkLT5zdGF0cy5vdGhlcl9zcWxfZmFpbHVyZXM7 CiAJCWxhdGVuY3lfbGF0ZSArPSB0aHJlYWQtPmxhdGVuY3lfbGF0ZTsKIAkJY29ubl90b3RhbF9k dXJhdGlvbiArPSB0aHJlYWQtPmNvbm5fZHVyYXRpb247CiAK --_004_PH0PR08MB702059D610C7D84594CD3BB388D5APH0PR08MB7020namp_--