Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nbOWx-0007hE-HX for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Apr 2022 15:22:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nbOWv-0007ge-Hc for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Apr 2022 15:22:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nbOWu-0007gF-9R for pgsql-hackers@lists.postgresql.org; Mon, 04 Apr 2022 15:22:09 +0000 Received: from mail-db3eur04on072d.outbound.protection.outlook.com ([2a01:111:f400:fe0c::72d] helo=EUR04-DB3-obe.outbound.protection.outlook.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nbOWl-0004za-RM for pgsql-hackers@lists.postgresql.org; Mon, 04 Apr 2022 15:22:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VLDngJVyT7SpOigZ1ZooFmAPltvM5udI/1RwVKk7FCBtn7a4J4JCZYvhu0Jy4s0XheVxuG+p4XP+korhsll2RPub/J4A98SKakS+CLb9nWt9a6LtdaLK+hgPwbUxw1URsxkdHLZ4h7T2PuFUkJaKf4CjhIBKTdg1pL4nb37BepsXTKgr/3/nzU5MXUEXkHZLPUp6yqrM40CE4hkuSOneTiGLqO+1kpcABXBMq2/ZengHkR5KOBAw3Qsgb1NN3neYNwyPYttOqsTrkZ1TIpNMg5jcYrKeqWhKdDAe6mVY31MB7bUhmShjio+ZoYZKv8pXmFZ+ZI8q1Oc8S+g53wtVkg== 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=HF7/lP5M32gKouu/bD9ACtVnNJ+rYlr46qu415JkS0U=; b=TgAqlNE5Cg5e/GE4+LZTlJLAVSr/d395CQ6AYU1W5HAYlsiHtmArTiCYzRHM6JjNDLMKW0tqdRKCyM87i9ZqjMp4jjJa6Pv8F2iU6l89BdmzW+3sMbQwT+uMToZm4TVcWUceZzVB867mpUu9ef1m9Cd1/btmr3ldDdS9N26joAcSZOvlp7cjgFWZOiFMqWXnsTZ1h/W72vz6PnpBNP4JJ32PDkbStzU9e2A4jy99vjhml3cP+Y5ZeR6pIB/mBHIl8KlSeoAXZXONI+/aIsTHEbPjwiUqDOHmGBjziccsycQ2J+WkDkypBXztLaR3Rrv5wFxZgDnuBMd24ixiiCDQnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HF7/lP5M32gKouu/bD9ACtVnNJ+rYlr46qu415JkS0U=; b=H7ppLie+HWppeaNfM7HaDwBRv1gDz4wu7thS1QLU3xrrslbQczoPdn11UrMZpZBo5vr/MZinTat5pMAlVpoBwMi/uvvpFTFu7YpAMQKEtrHXAo99dwCaXt4Exxpt+QNR1+SFtL+x7U7UciZ8pfqRyN+wKhvTlidUtv7AQKmFfVY= Received: from AM5PR83MB0372.EURPRD83.prod.outlook.com (2603:10a6:206:25::13) by AM5PR83MB0179.EURPRD83.prod.outlook.com (2603:10a6:206:25::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.11; Mon, 4 Apr 2022 15:21:55 +0000 Received: from AM5PR83MB0372.EURPRD83.prod.outlook.com ([fe80::c136:aec7:3e88:5c5e]) by AM5PR83MB0372.EURPRD83.prod.outlook.com ([fe80::c136:aec7:3e88:5c5e%6]) with mapi id 15.20.5144.016; Mon, 4 Apr 2022 15:21:55 +0000 From: Jelte Fennema To: Justin Pryzby CC: Tom Lane , Robert Haas , Andres Freund , Jacob Champion , "pgsql-hackers@lists.postgresql.org" Subject: Re: Add non-blocking version of PQcancel Thread-Topic: Add non-blocking version of PQcancel Thread-Index: AQHYReNf4fx8DGCPWkeBY7c0mwFEGqzf4NS5 Date: Mon, 4 Apr 2022 15:21:54 +0000 Message-ID: References: <3150365.1648158113@sss.pgh.pa.us> <20220324224909.4tnubqv2owmfoyoc@alap3.anarazel.de> <3453535.1648234019@sss.pgh.pa.us> <3457746.1648236890@sss.pgh.pa.us> <20220331054704.GL28503@telsasoft.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2022-04-04T15:21:53.933Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4ee8f7b7-4188-4535-0b85-08da164eda3f x-ms-traffictypediagnostic: AM5PR83MB0179:EE_ x-ms-exchange-atpmessageproperties: SA|SL x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Rvm3muPbuvZJEtyBnt9AtPAf/gxJaz/1Lz02gRx+rAhzjnVkC39/V6PvV+JjRsfW5WkjxHLj7R6d/rrQ8neb2Vyl+hujWmvRygN9LfqFKvvd+y6YAfZcaAapxEwZxUOtSOQ6KC+ZN0rl2onjoLPwN2VpggfOudDoFGSB+pCwLaXGAh72Q3jMzDcILGPUDQxQX04i4r30w6534BpNxn3QRSSMBL9Q1pMWGIoJvEOLhBV/lY+PYp4NabkC+BRpk1ZtQZgq78ci2fc4RLGdXmmmsFr43VWX/bmIeVsMGAqK4fAkH8uagiILG/q/8dT+cwvQdjYxZkeBhnadzYZ/AXfQlZFBOhrZq9Ij1lR7F+vs5xN4CjQ4oi3LjOH8iaorIyt7oYo6cKmmTy0m9otSmlwnFEMFUQJE3sBSyZd1Vb+Cz2ym0OYPjXHOiAZDK4rO7acQ2ubkG9U7rsar7sbqxhaVuWAiXJSN3P3SIXzrfwmf4XaT0Pl3boGY/LR1fvoG8m4bEauEr1qkdpEHotoSXX2wfcHxMgDLGV0OQETCfeT41B4SyRl5+O9ZDq2RpCmamAaY8gpKLkrP1VZSnmVJjGRkXTRI7StuShWrhopo51qy7noO/WLz5KEPcHcXW+6JtssryYUgVqV5tslIllM8OPXzrpU2RxaSq+TF/ctf4iq7A0Yn3lp0tLmKEApoaYoA1c0UcScUW7u4kEntfoJ/hCnJdUsSHXqy+G85KC+TNBykI+ssggGi7myrclv7MCN0jIm5 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM5PR83MB0372.EURPRD83.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(451199009)(6506007)(66446008)(66946007)(76116006)(64756008)(91956017)(4326008)(8676002)(52536014)(2906002)(4744005)(33656002)(9686003)(66556008)(66476007)(8936002)(7696005)(186003)(38070700005)(38100700002)(5660300002)(71200400001)(508600001)(316002)(6916009)(122000001)(8990500004)(99936003)(83380400001)(54906003)(86362001)(55016003)(26005)(10290500003)(82950400001)(82960400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?PgOLtEck4VebZ+DyNeZbM85FO/SMeT4MTUS2f9s/XX+NSXvN3DClqv3y7P?= =?iso-8859-1?Q?W9xNmx2u5S9AYoVFzs8CYsuJ8RSmUsLzHiMM4yTnj9wUh8gxRWS5XPxz4i?= =?iso-8859-1?Q?TVitR2El0zEMJZ5G1ibnvan1OnJ/3U59e7GUFIXtoBlMY/Cz4qDcb/BAnt?= =?iso-8859-1?Q?+mcNhd3cznq9cBElwWUTzcXMwwwLFpxiuLqmxYybaEn06J62J5ykgDS3Wk?= =?iso-8859-1?Q?BQIBrQJWVZFU0jwPniU/sMpsFxFz+eLBbqz0JKfVmU6O+62pKPOJYr0rNL?= =?iso-8859-1?Q?EuAMaQAga44ovyuAS+mS8o73/MaDQNCu5/PVLTf9Yh0dUevM3yIAngu9eE?= =?iso-8859-1?Q?mJZAxupmkWSOCYyUXc/l8avtsdBGyKi0MWPPn5SBJbYUosjKZSVKvy82Ft?= =?iso-8859-1?Q?VACkPgwH5dWLdp1OfJn9BwkE1FQ9DSejsfb4wWdjqoVXAkOLLn/GwQn1R1?= =?iso-8859-1?Q?Ka9+gK/47PGTndnotE8Qr8GFv4hE0wxw6pqr8rVUe2Rahkv2uWAzvn1vBL?= =?iso-8859-1?Q?0BoEQ6QltuhuTjfWYyzhiuF90TYlke8Qjx/svCQig9AiQni4bbcUJrbryY?= =?iso-8859-1?Q?Fcg6RSsWyipnJ3Aqa0ABZEGE0H6QVgnIQwLuEV6QsBqPn4CzY3J7b5pVaC?= =?iso-8859-1?Q?St8Djz3rfM88AB1ZesooqRYXWfOk67/tz74YgZEJ8IcYqZrV6isPIKHO5E?= =?iso-8859-1?Q?5zq+m2mqi7qwNcNbLbXWYswPIXIbFz/teqH0M841oQ5xu3WhZv7A5fLJpK?= =?iso-8859-1?Q?58lyIBGtlBDF1mMc97ipyFvrHkSemEXmfwp+49pdXtIW378v/SS25W4ls1?= =?iso-8859-1?Q?0IWO7xeR6xLPIPlLlZ/OzGwbUGcfOdlrfznOEi/ANt+NZ5qjIdaKpqRFL/?= =?iso-8859-1?Q?+Bm/Og+4i5i01ai+6gp3M5r3Vojw8byhGFQ8COl/gNyBL1AOXOJANqz7i8?= =?iso-8859-1?Q?3dENb9W1JY8rymCbO+xS8O66OXxsyakKY+xif1KqWnEySlH4IqlgG2C2Gz?= =?iso-8859-1?Q?5v33pwSuuPrDE8W6IwtQcTqr4iw5zOhVfsl8wpSud3U0xYSi99UFQjfUns?= =?iso-8859-1?Q?OoYPrCgbc0I1d1XrSSQBJGJkLz/ia7CPZPef8JDmzn6mXZVgCubNOx/19i?= =?iso-8859-1?Q?yhKu2TjS8G9XKA0WJCbch01YUuRrTiOLM2/2/XaMzKisT7ffCnxKM7YRx9?= =?iso-8859-1?Q?v90dTCPpAK/29rx+AnTxr8r1Puoqi19Vvp8Bw8mwGk6CqQj+kn0wFmsP8o?= =?iso-8859-1?Q?hwU/h8hH319dm1+xFuKvWym4oz5Rmziowwn+6I0Gtix/N2MmLaYQW7Y6ji?= =?iso-8859-1?Q?Oa0CyEYdlR4rK6Zbv48B/8eIC3UnUWqPFOUmmv1difiuqBL2VymeAQfHjX?= =?iso-8859-1?Q?mnjVKHFg8fCtp1Pgp0MwbjYDLi4lKAHrDIgJEcSP5k6NoRD1NwbxxnOA77?= =?iso-8859-1?Q?8uX5kcqSyRA03A+Ni45ahcQN1QHcx/kgrx7L4eVZ1mIg617zNP4ueq1QPe?= =?iso-8859-1?Q?em9SgtJ+YhOCiRm45yOJB6?= Content-Type: multipart/mixed; boundary="_002_AM5PR83MB037283BB5E7BE0EEE0016E6BF7E59AM5PR83MB0372EURP_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM5PR83MB0372.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4ee8f7b7-4188-4535-0b85-08da164eda3f X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Apr 2022 15:21:54.8871 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: oxT8bGdKNvETNjxzMWI1XcqUAERhjWBE+6FDyBw0tqjlk2PTT1OkJlFSr6fPOqaC9pFD99+j1kN9JKKuBTA4nA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR83MB0179 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_AM5PR83MB037283BB5E7BE0EEE0016E6BF7E59AM5PR83MB0372EURP_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hereby what I consider the final version of this patch. I don't have any=0A= changes planned myself (except for ones that come up during review). =0A= Things that changed since the previous iteration:=0A= 1. postgres_fdw now uses the non-blocking cancellation API (including test)= .=0A= 2. Added some extra sleeps to the cancellation test, to remove random failu= res on FreeBSD.=0A= --_002_AM5PR83MB037283BB5E7BE0EEE0016E6BF7E59AM5PR83MB0372EURP_ Content-Type: application/octet-stream; name="0002-Add-non-blocking-version-of-PQcancel.patch" Content-Description: 0002-Add-non-blocking-version-of-PQcancel.patch Content-Disposition: attachment; filename="0002-Add-non-blocking-version-of-PQcancel.patch"; size=52322; creation-date="Mon, 04 Apr 2022 15:13:05 GMT"; modification-date="Mon, 04 Apr 2022 15:13:20 GMT" Content-Transfer-Encoding: base64 RnJvbSBlYmI2MTFjYTUyMmE1ZmJhYmY5MzM0ZWQ0NzY4MWU5NDkwNjQ0YWVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hIDxqZWx0ZS5mZW5uZW1hQG1pY3Jvc29m dC5jb20+CkRhdGU6IFdlZCwgMTIgSmFuIDIwMjIgMDk6NTI6MDUgKzAxMDAKU3ViamVjdDogW1BB VENIIDIvMl0gQWRkIG5vbi1ibG9ja2luZyB2ZXJzaW9uIG9mIFBRY2FuY2VsCgpUaGlzIHBhdGNo IGRvZXMgZm91ciB0aGluZ3M6CjEuIENoYW5nZSB0aGUgUFFyZXF1ZXN0Q2FuY2VsIGltcGxlbWVu dGF0aW9uIHRvIHVzZSB0aGUgcmVndWxhcgogICAgY29ubmVjdGlvbiBlc3RhYmxpc2hlbWVudCBj b2RlLCB0byBzdXBwb3J0IGFsbCBjb25uZWN0aW9uIG9wdGlvbnMKICAgIGluY2x1ZGluZyBlbmNy eXB0aW9uLgoyLiBBZGQgUFFyZXF1ZXN0Q2FuY2VsU3RhcnQgd2hpY2ggaXMgYSB0aHJlYWQtc2Fm ZSBhbmQgbm9uLWJsb2NraW5nCiAgICB2ZXJzaW9uIG9mIHRoaXMgbmV3IFBRcmVxdWVzdENhbmNl bCBpbXBsZW1lbnRhdGlvbi4KMy4gQWRkIFBRY29ubmVjdENvbXBsZXRlLCB3aGljaCBjb21wbGV0 ZXMgYSBjb25uZWN0aW9uIHN0YXJ0ZWQgYnkKICAgIFBRcmVxdWVzdENhbmNlbFN0YXJ0LiBUaGlz IGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCBhIHRocmVhZC1zYWZlIGJ1dAogICAgYmxvY2tpbmcgY2Fu Y2VsICh3aXRob3V0IGhhdmluZyBhIG5lZWQgZm9yIHNpZ25hbC1zYWZldHkpLgo0LiBVc2UgdGhp cyBuZXcgY2FuY2VsbGF0aW9uIEFQSSBldmVyeXdoZXJlIGluIHRoZSBjb2RlYmFzZSB3aGVyZQog ICAgc2lnbmFsLXNhZmV0eSBpcyBub3QgYSBuZWNlc3NpdHkuCgpUaGlzIGNoYW5nZSB1bi1kZXBy ZWNhdGVzIFBRcmVxdWVzdENhbmNlbCwgc2luY2Ugbm93IHRoZXJlJ3MgYWN0dWFsbHkgYW4KYWR2 YW50YWdlIHRvIHVzaW5nIGl0IG92ZXIgUFFjYW5jZWwuIEl0IGFsc28gaW5jbHVkZXMgdXNlciBm YWNpbmcKZG9jdW1lbnRhdGlvbiBmb3IgYWxsIHRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMuCgpU aGUgZXhpc3RpbmcgUFFjYW5jZWwgQVBJIGlzIHVzaW5nIGJsb2NraW5nIElPLiBUaGlzIG1ha2Vz IFBRY2FuY2VsCmltcG9zc2libGUgdG8gdXNlIGluIGFuIGV2ZW50IGxvb3AgYmFzZWQgY29kZWJh c2UsIHdpdGhvdXQgYmxvY2tpbmcgdGhlCmV2ZW50IGxvb3AgdW50aWwgdGhlIGNhbGwgcmV0dXJu cy4gUFFyZXF1ZXN0Q2FuY2VsU3RhcnQgY2FuIG5vdyBiZSB1c2VkCmluc3RlYWQsIHRvIGhhdmUg YSBub24tYmxvY2tpbmcgd2F5IG9mIHNlbmRpbmcgY2FuY2VsIHJlcXVlc3RzLiBUaGUKcG9zdGdy ZXNfZmR3IGNhbmNlbGxhdGlvbiBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkIHRvIG1ha2UgdXNlIG9m IHRoaXMuCgpUaGlzIHBhdGNoIGFsc28gaW5jbHVkZXMgYSB0ZXN0IGZvciBhbGwgb2YgbGlicHEg Y2FuY2VsbGF0aW9uIEFQSXMuIFRoZQp0ZXN0IGNhbiBiZSBlYXNpbHkgcnVuIGxpa2UgdGhpczoK CiAgICBjZCBzcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lCiAgICBtYWtlICYmIC4vbGli cHFfcGlwZWxpbmUgY2FuY2VsCi0tLQogY29udHJpYi9kYmxpbmsvZGJsaW5rLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDI4ICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMg ICAgICAgICAgICAgfCAgOTMgKysrKy0KIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dCAgICB8ICAxNSArCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNf ZmR3LnNxbCAgICAgfCAgIDggKwogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgIHwgMjEyICsrKysrKysrKy0tCiBzcmMvZmVfdXRpbHMvY29ubmVjdF91dGlscy5j ICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMu dHh0ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0 LmMgICAgICAgICAgICAgfCAzNDEgKysrKysrKysrKysrKysrLS0tCiBzcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1taXNjLmMgICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMgICAgICB8ICAgMiArLQogc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtc2VjdXJlLmMgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBx L2xpYnBxLWZlLmggICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtaW50LmggICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L2lzb2xhdGlvbi9pc29s YXRpb250ZXN0ZXIuYyAgICAgICAgICB8ICAyOCArLQogLi4uL21vZHVsZXMvbGlicHFfcGlwZWxp bmUvbGlicHFfcGlwZWxpbmUuYyAgIHwgMjI5ICsrKysrKysrKysrLQogMTUgZmlsZXMgY2hhbmdl ZCwgODQ5IGluc2VydGlvbnMoKyksIDE1MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250 cmliL2RibGluay9kYmxpbmsuYyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCmluZGV4IGEwNmQ0 YmQxMmQuLjU1MWRjODYxN2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCisr KyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCkBAIC0xMzgwLDIyICsxMzgwLDMwIEBAIFBHX0ZV TkNUSU9OX0lORk9fVjEoZGJsaW5rX2NhbmNlbF9xdWVyeSk7CiBEYXR1bQogZGJsaW5rX2NhbmNl bF9xdWVyeShQR19GVU5DVElPTl9BUkdTKQogewotCWludAkJCXJlczsKIAlQR2Nvbm4JICAgKmNv bm47Ci0JUEdjYW5jZWwgICAqY2FuY2VsOwotCWNoYXIJCWVycmJ1ZlsyNTZdOworCVBHY29ubgkg ICAqY2FuY2VsQ29ubjsKKwljaGFyCSAgICptc2c7CiAKIAlkYmxpbmtfaW5pdCgpOwogCWNvbm4g PSBkYmxpbmtfZ2V0X25hbWVkX2Nvbm4odGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQ KDApKSk7Ci0JY2FuY2VsID0gUFFnZXRDYW5jZWwoY29ubik7Ci0KLQlyZXMgPSBQUWNhbmNlbChj YW5jZWwsIGVycmJ1ZiwgMjU2KTsKLQlQUWZyZWVDYW5jZWwoY2FuY2VsKTsKKwljYW5jZWxDb25u ID0gUFFyZXF1ZXN0Q2FuY2VsU3RhcnQoY29ubik7CisJaWYgKFBRc3RhdHVzKGNhbmNlbENvbm4p ID09IENPTk5FQ1RJT05fQkFEKQorCXsKKwkJbXNnID0gcGNob21wKFBRZXJyb3JNZXNzYWdlKGNh bmNlbENvbm4pKTsKKwkJUFFmaW5pc2goY2FuY2VsQ29ubik7CisJCVBHX1JFVFVSTl9URVhUX1Ao Y3N0cmluZ190b190ZXh0KG1zZykpOworCX0KIAotCWlmIChyZXMgPT0gMSkKLQkJUEdfUkVUVVJO X1RFWFRfUChjc3RyaW5nX3RvX3RleHQoIk9LIikpOworCWlmIChQUWNvbm5lY3RDb21wbGV0ZShj YW5jZWxDb25uKSkKKwl7CisJCW1zZyA9ICJPSyI7CisJfQogCWVsc2UKLQkJUEdfUkVUVVJOX1RF WFRfUChjc3RyaW5nX3RvX3RleHQoZXJyYnVmKSk7CisJeworCQltc2cgPSBwY2hvbXAoUFFlcnJv ck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCX0KKwlQUWZpbmlzaChjYW5jZWxDb25uKTsKKwlQR19S RVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChtc2cpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9j b250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9j b25uZWN0aW9uLmMKaW5kZXggMTI5Y2E3OTIyMS4uYzI3MGFjM2RkMSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L2Nvbm5lY3Rpb24uYwpAQCAtMTI2MywzNSArMTI2Myw5OCBAQCBwZ2Zkd19yZXNldF94YWN0X3N0 YXRlKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCkKIHN0YXRpYyBib29sCiBw Z2Zkd19jYW5jZWxfcXVlcnkoUEdjb25uICpjb25uKQogewotCVBHY2FuY2VsICAgKmNhbmNlbDsK LQljaGFyCQllcnJidWZbMjU2XTsKIAlQR3Jlc3VsdCAgICpyZXN1bHQgPSBOVUxMOwotCVRpbWVz dGFtcFR6IGVuZHRpbWU7Ci0JYm9vbAkJdGltZWRfb3V0OwogCiAJLyoKIAkgKiBJZiBpdCB0YWtl cyB0b28gbG9uZyB0byBjYW5jZWwgdGhlIHF1ZXJ5IGFuZCBkaXNjYXJkIHRoZSByZXN1bHQsIGFz c3VtZQogCSAqIHRoZSBjb25uZWN0aW9uIGlzIGRlYWQuCiAJICovCi0JZW5kdGltZSA9IFRpbWVz dGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksIDMwMDAwKTsKKwlU aW1lc3RhbXBUeiBlbmR0aW1lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKEdldEN1cnJl bnRUaW1lc3RhbXAoKSwgMzAwMDApOworCWJvb2wJCXRpbWVkX291dCA9IGZhbHNlOworCWJvb2wJ CWZhaWxlZCA9IGZhbHNlOworCVBHY29ubgkgICAqY2FuY2VsX2Nvbm4gPSBQUXJlcXVlc3RDYW5j ZWxTdGFydChjb25uKTsKIAotCS8qCi0JICogSXNzdWUgY2FuY2VsIHJlcXVlc3QuICBVbmZvcnR1 bmF0ZWx5LCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGxpbWl0IHRoZQotCSAqIGFtb3VudCBvZiB0 aW1lIHRoYXQgd2UgbWlnaHQgYmxvY2sgaW5zaWRlIFBRZ2V0Q2FuY2VsKCkuCi0JICovCi0JaWYg KChjYW5jZWwgPSBQUWdldENhbmNlbChjb25uKSkpCisKKwlpZiAoUFFzdGF0dXMoY2FuY2VsX2Nv bm4pID09IENPTk5FQ1RJT05fQkFEKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJj b2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qg c2VuZCBjYW5jZWwgcmVxdWVzdDogJXMiLAorCQkJCQkJcGNob21wKFBRZXJyb3JNZXNzYWdlKGNh bmNlbF9jb25uKSkpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBJbiB3aGF0IGZvbGxv d3MsIGRvIG5vdCBsZWFrIGFueSBQR2Nvbm4gb24gYW4gZXJyb3IuICovCisJUEdfVFJZKCk7CisJ eworCQl3aGlsZSAodHJ1ZSkKKwkJeworCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOworCQkJbG9uZwkJY3VyX3RpbWVvdXQ7CisJCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0 dXNUeXBlIHBvbGxyZXMgPSBQUWNvbm5lY3RQb2xsKGNhbmNlbF9jb25uKTsKKwkJCWludAkJCXdh aXRFdmVudHMgPSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SDsKKworCQkJaWYgKHBvbGxyZXMgPT0gUEdSRVNfUE9MTElOR19PSykKKwkJCXsKKwkJCQlicmVh azsKKwkJCX0KKworCQkJLyogSWYgdGltZW91dCBoYXMgZXhwaXJlZCwgZ2l2ZSB1cCwgZWxzZSBn ZXQgc2xlZXAgdGltZS4gKi8KKwkJCWN1cl90aW1lb3V0ID0gVGltZXN0YW1wRGlmZmVyZW5jZU1p bGxpc2Vjb25kcyhub3csIGVuZHRpbWUpOworCQkJaWYgKGN1cl90aW1lb3V0IDw9IDApCisJCQl7 CisJCQkJdGltZWRfb3V0ID0gdHJ1ZTsKKwkJCQlmYWlsZWQgPSB0cnVlOworCQkJCWdvdG8gZXhp dDsKKwkJCX0KKworCQkJc3dpdGNoIChwb2xscmVzKQorCQkJeworCQkJCWNhc2UgUEdSRVNfUE9M TElOR19SRUFESU5HOgorCQkJCQl3YWl0RXZlbnRzIHw9IFdMX1NPQ0tFVF9SRUFEQUJMRTsKKwkJ CQkJYnJlYWs7CisJCQkJY2FzZSBQR1JFU19QT0xMSU5HX1dSSVRJTkc6CisJCQkJCXdhaXRFdmVu dHMgfD0gV0xfU09DS0VUX1dSSVRFQUJMRTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJ CQkJZmFpbGVkID0gdHJ1ZTsKKwkJCQkJZ290byBleGl0OworCQkJfQorCisJCQkvKiBTbGVlcCB1 bnRpbCB0aGVyZSdzIHNvbWV0aGluZyB0byBkbyAqLworCQkJV2FpdExhdGNoT3JTb2NrZXQoTXlM YXRjaCwgd2FpdEV2ZW50cywgUFFzb2NrZXQoY2FuY2VsX2Nvbm4pLAorCQkJCQkJCSAgY3VyX3Rp bWVvdXQsIFBHX1dBSVRfRVhURU5TSU9OKTsKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KK2V4aXQ6CTsKKwl9CisJUEdfQ0FUQ0goKTsK IAl7Ci0JCWlmICghUFFjYW5jZWwoY2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKSkKKwkJ UFFmaW5pc2goY2FuY2VsX2Nvbm4pOworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZ KCk7CisKKwlpZiAoZmFpbGVkKQorCXsKKwkJaWYgKHRpbWVkX291dCkKKwkJeworCQkJZXJlcG9y dChXQVJOSU5HLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY2FuY2VsIHJlcXVlc3QgZHVlIHRv IHRpbWVvdXQiKSkpOworCQl9CisJCWVsc2UKIAkJewogCQkJZXJlcG9ydChXQVJOSU5HLAogCQkJ CQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCiAJCQkJCSBlcnJtc2coImNv dWxkIG5vdCBzZW5kIGNhbmNlbCByZXF1ZXN0OiAlcyIsCi0JCQkJCQkJZXJyYnVmKSkpOwotCQkJ UFFmcmVlQ2FuY2VsKGNhbmNlbCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQkJCQkJcGNob21wKFBR ZXJyb3JNZXNzYWdlKGNhbmNlbF9jb25uKSkpKSk7CiAJCX0KLQkJUFFmcmVlQ2FuY2VsKGNhbmNl bCk7CisJCVBRZmluaXNoKGNhbmNlbF9jb25uKTsKKwkJcmV0dXJuIGZhaWxlZDsKIAl9CisJUFFm aW5pc2goY2FuY2VsX2Nvbm4pOwogCiAJLyogR2V0IGFuZCBkaXNjYXJkIHRoZSByZXN1bHQgb2Yg dGhlIHF1ZXJ5LiAqLwogCWlmIChwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQoY29ubiwgZW5kdGlt ZSwgJnJlc3VsdCwgJnRpbWVkX291dCkpCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zk dy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0 ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCAxMWU5YjRlOGNjLi4yNjA4ZjYzZDc5IDEwMDY0NAot LS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTI1Njcs NiArMjU2NywyMSBAQCBTRUxFQ1QgdDEuYzEsIHQyLmMyIEZST00gdjQgdDEgTEVGVCBKT0lOIGZ0 NSB0MiBPTiAodDEuYzEgPSB0Mi5jMSkgT1JERVIgQlkgdDEuYwogKDEwIHJvd3MpCiAKIEFMVEVS IFZJRVcgdjQgT1dORVIgVE8gcmVncmVzc192aWV3X293bmVyOworLS0gTWFrZSBzdXJlIHRoaXMg YmlnIENST1NTIEpPSU4gcXVlcnkgaXMgcHVzaGVkIGRvd24KK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikgU0VMRUNUIGNvdW50KCopIEZST00gZnQxIENST1NTIEpPSU4gZnQyIENST1NTIEpP SU4gZnQ0IENST1NTIEpPSU4gZnQ1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBGb3JlaWduIFNjYW4KKyAgIE91dHB1dDogKGNvdW50KCopKQorICAg UmVsYXRpb25zOiBBZ2dyZWdhdGUgb24gKCgoKHB1YmxpYy5mdDEpIElOTkVSIEpPSU4gKHB1Ymxp Yy5mdDIpKSBJTk5FUiBKT0lOIChwdWJsaWMuZnQ0KSkgSU5ORVIgSk9JTiAocHVibGljLmZ0NSkp CisgICBSZW1vdGUgU1FMOiBTRUxFQ1QgY291bnQoKikgRlJPTSAoKCgiUyAxIi4iVCAxIiByMSBJ Tk5FUiBKT0lOICJTIDEiLiJUIDEiIHIyIE9OIChUUlVFKSkgSU5ORVIgSk9JTiAiUyAxIi4iVCAz IiByNCBPTiAoVFJVRSkpIElOTkVSIEpPSU4gIlMgMSIuIlQgNCIgcjYgT04gKFRSVUUpKQorKDQg cm93cykKKworLS0gTWFrZSBzdXJlIHF1ZXJ5IGNhbmNlbGxhdGlvbiB3b3JrcworU0VUIHN0YXRl bWVudF90aW1lb3V0ID0gJzEwbXMnOworc2VsZWN0IGNvdW50KCopIGZyb20gZnQxIENST1NTIEpP SU4gZnQyIENST1NTIEpPSU4gZnQ0IENST1NTIEpPSU4gZnQ1OyAtLSB0aGlzIHRha2VzIHZlcnkg bG9uZworRVJST1I6ICBjYW5jZWxpbmcgc3RhdGVtZW50IGR1ZSB0byBzdGF0ZW1lbnQgdGltZW91 dAorUkVTRVQgc3RhdGVtZW50X3RpbWVvdXQ7CiAtLSBjbGVhbnVwCiBEUk9QIE9XTkVEIEJZIHJl Z3Jlc3Nfdmlld19vd25lcjsKIERST1AgUk9MRSByZWdyZXNzX3ZpZXdfb3duZXI7CmRpZmYgLS1n aXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IDZiNWRlODllMTQuLmUxN2E5 NTY5YjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcu c3FsCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0z MjYsNiArMzI2LDcgQEAgREVMRVRFIEZST00gbG9jdF9lbXB0eTsKIEFOQUxZWkUgZnRfZW1wdHk7 CiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gZnRfZW1wdHkgT1JE RVIgQlkgYzE7CiAKKwogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gV0hFUkUgd2l0aCByZW1vdGVseS1leGVj dXRhYmxlIGNvbmRpdGlvbnMKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTY4MSw2ICs2ODIsMTMgQEAgU0VM RUNUIHQxLmMxLCB0Mi5jMiBGUk9NIHY0IHQxIExFRlQgSk9JTiBmdDUgdDIgT04gKHQxLmMxID0g dDIuYzEpIE9SREVSIEJZIHQxLmMKIFNFTEVDVCB0MS5jMSwgdDIuYzIgRlJPTSB2NCB0MSBMRUZU IEpPSU4gZnQ1IHQyIE9OICh0MS5jMSA9IHQyLmMxKSBPUkRFUiBCWSB0MS5jMSwgdDIuYzEgT0ZG U0VUIDEwIExJTUlUIDEwOwogQUxURVIgVklFVyB2NCBPV05FUiBUTyByZWdyZXNzX3ZpZXdfb3du ZXI7CiAKKy0tIE1ha2Ugc3VyZSB0aGlzIGJpZyBDUk9TUyBKT0lOIHF1ZXJ5IGlzIHB1c2hlZCBk b3duCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIGZ0 MSBDUk9TUyBKT0lOIGZ0MiBDUk9TUyBKT0lOIGZ0NCBDUk9TUyBKT0lOIGZ0NTsKKy0tIE1ha2Ug c3VyZSBxdWVyeSBjYW5jZWxsYXRpb24gd29ya3MKK1NFVCBzdGF0ZW1lbnRfdGltZW91dCA9ICcx MG1zJzsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGZ0MSBDUk9TUyBKT0lOIGZ0MiBDUk9TUyBKT0lO IGZ0NCBDUk9TUyBKT0lOIGZ0NTsgLS0gdGhpcyB0YWtlcyB2ZXJ5IGxvbmcKK1JFU0VUIHN0YXRl bWVudF90aW1lb3V0OworCiAtLSBjbGVhbnVwCiBEUk9QIE9XTkVEIEJZIHJlZ3Jlc3Nfdmlld19v d25lcjsKIERST1AgUk9MRSByZWdyZXNzX3ZpZXdfb3duZXI7CmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvbGlicHEuc2dtbCBiL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCmluZGV4IDFjMjA5MDFj M2MuLjQ1ZjgwMDFmYmQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCkBAIC0yNjUsNyArMjY1LDcgQEAgUEdjb25uICpQUXNl dGRiKGNoYXIgKnBnaG9zdCwKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNvbm5lY3RT dGFydFBhcmFtcyI+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RTdGFydFBhcmFtczwv ZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RTdGFydFBhcmFtczwvcHJpbWFy eT48L2luZGV4dGVybT48L3Rlcm0+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RTdGFy dDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RTdGFydDwvcHJpbWFyeT48 L2luZGV4dGVybT48L3Rlcm0+Ci0gICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RQb2xsPC9m dW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY29ubmVjdFBvbGw8L3ByaW1hcnk+PC9pbmRl eHRlcm0+PC90ZXJtPgorICAgICA8dGVybSBpZD0ibGlicHEtUFFjb25uZWN0UG9sbCI+PGZ1bmN0 aW9uPlBRY29ubmVjdFBvbGw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25uZWN0 UG9sbDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAg IDxwYXJhPgogICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+bm9uYmxvY2tpbmcgY29ubmVjdGlv bjwvcHJpbWFyeT48L2luZGV4dGVybT4KQEAgLTQ5OSw2ICs0OTksMzAgQEAgc3dpdGNoKFBRc3Rh dHVzKGNvbm4pKQogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg PHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFjb25uZWN0Q29tcGxldGUiPgorICAgICA8dGVybT48 ZnVuY3Rpb24+UFFjb25uZWN0Q29tcGxldGU8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+ UFFjb25uZWN0Q29tcGxldGU8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgorICAgICA8bGlz dGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBDb21wbGV0ZSB0aGUgY29ubmVjdGlvbiBhdHRl bXB0IG9uIGEgbm9uYmxvY2tpbmcgY29ubmVjdGlvbiBhbmQgYmxvY2sKKyAgICAgICB1bnRpbCBp dCBpcyBjb21wbGV0ZWQuCisKKzxzeW5vcHNpcz4KK2ludCBQUWNvbm5lY3RQb2xsKFBHY29ubiAq Y29ubik7Cis8L3N5bm9wc2lzPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAg ICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YKKyAgICAgICA8eHJlZiBsaW5r ZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+CisgICAgICAgdG8gY29tcGxldGUgYSBjb25uZWN0 aW9uIHRoYXQgd2FzIGluaXRpYWxseSBzdGFydGVkIGluIGEgbm9uIGJsb2NraW5nCisgICAgICAg bWFubmVyLiBIb3dldmVyLCBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgdG8gY29tcGxldGUgdGhlIGNv bm5lY3Rpb24gaW4gYQorICAgICAgIG5vbiBibG9ja2luZyB3YXksIGNhbGxpbmcgdGhpcyBmdW5j dGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBjb25uZWN0aW9uCisgICAgICAgaXMgY29tcGxldGVk LiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRvIGNvbXBsZXRlIGNvbm5lY3Rpb25zIHRoYXQg d2VyZQorICAgICAgIHN0YXJ0ZWQgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2Fu Y2VsU3RhcnQiLz4uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJs aXN0ZW50cnk+CisKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNvbm5kZWZhdWx0cyI+ CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5kZWZhdWx0czwvZnVuY3Rpb24+PGluZGV4dGVy bT48cHJpbWFyeT5QUWNvbm5kZWZhdWx0czwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAg ICAgIDxsaXN0aXRlbT4KQEAgLTY2MCw3ICs2ODQsNyBAQCB2b2lkIFBRcmVzZXQoUEdjb25uICpj b25uKTsKIAogICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRcmVzZXRTdGFydCI+CiAgICAg IDx0ZXJtPjxmdW5jdGlvbj5QUXJlc2V0U3RhcnQ8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1h cnk+UFFyZXNldFN0YXJ0PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KLSAgICAgPHRlcm0+ PGZ1bmN0aW9uPlBRcmVzZXRQb2xsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVz ZXRQb2xsPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKyAgICAgPHRlcm0gaWQ9ImxpYnBx LVBRcmVzZXRQb2xsIj48ZnVuY3Rpb24+UFFyZXNldFBvbGw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+ PHByaW1hcnk+UFFyZXNldFBvbGw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgogICAgICA8 bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KICAgICAgICBSZXNldCB0aGUgY29tbXVuaWNhdGlvbiBj aGFubmVsIHRvIHRoZSBzZXJ2ZXIsIGluIGEgbm9uYmxvY2tpbmcgbWFubmVyLgpAQCAtNTYxNywx MyArNTY0MSwxMzcgQEAgaW50IFBRc2V0U2luZ2xlUm93TW9kZShQR2Nvbm4gKmNvbm4pOwogICAg dGhpcyBzZWN0aW9uLgogCiAgICA8dmFyaWFibGVsaXN0PgorICAgIDx2YXJsaXN0ZW50cnkgaWQ9 ImxpYnBxLVBRcmVxdWVzdENhbmNlbCI+CisgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUXJlcXVlc3RD YW5jZWw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFyZXF1ZXN0Q2FuY2VsPC9wcmlt YXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgICBSZXF1ZXN0cyB0aGF0IHRoZSBzZXJ2ZXIgYWJhbmRvbnMgcHJvY2Vzc2luZyBvZiB0 aGUgY3VycmVudCBjb21tYW5kLgorPHN5bm9wc2lzPgoraW50IFBRcmVxdWVzdENhbmNlbChQR2Nv bm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+Cisg ICAgICAgVGhpcyByZXF1ZXN0IGlzIG1hZGUgb3ZlciBhIGNvbm5lY3Rpb24gdGhhdCB1c2VzIHRo ZSBzYW1lIGNvbm5lY3Rpb24KKyAgICAgICBvcHRpb25zIGFzIHRoZSB0aGUgb3JpZ2luYWwgPHN0 cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPi4gU28gd2hlbiB0aGUKKyAgICAgICBvcmlnaW5h bCBjb25uZWN0aW9uIGlzIGVuY3J5cHRlZCAodXNpbmcgVExTIG9yIEdTUyksIHRoZSBjb25uZWN0 aW9uIGZvcgorICAgICAgIHRoZSBjYW5jZWwgcmVxdWVzdCBjb25uZWN0aW9uIGlzIGVuY3J5cHRl ZCBpbiB0aGUgc2FtZS4gQW55IGNvbm5lY3Rpb24KKyAgICAgICBvcHRpb25zIHRoYXQgb25seSBt YWtlIHNlbnNlIGZvciBhdXRoZW50aWNhdGlvbiBvciBhZnRlciBhdXRoZW50aWNhdGlvbgorICAg ICAgIGFyZSBpZ25vcmVkIHRob3VnaCwgYmVjYXVzZSBjYW5jZWxsYXRpb24gcmVxdWVzdHMgZG8g bm90IHJlcXVpcmUKKyAgICAgICBhdXRoZW50aWNhdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAg ICAgPHBhcmE+CisgICAgICAgVGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGUg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPgorICAgICAgIG9iamVjdCwgYW5kIGluIGNh c2Ugb2YgZmFpbHVyZSBzdG9yZXMgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlCisgICAgICAgPHN0 cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmplY3QgKHdoZW5jZSBpdCBjYW4gYmUgcmV0 cmlldmVkCisgICAgICAgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1lc3NhZ2UiLz4p LiBUaGlzIGJlaGF2aW91ciBtYWtlcyB0aGlzCisgICAgICAgZnVuY3Rpb24gdW5zYWZlIHRvIGNh bGwgZnJvbSB3aXRoaW4gbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgb3IKKyAgICAgICBzaWduYWwg aGFuZGxlcnMsIHNpbmNlIGl0IGlzIHBvc3NpYmxlIHRoYXQgb3ZlcndyaXRpbmcgdGhlCisgICAg ICAgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPidzIGVycm9yIG1lc3NhZ2Ugd2lsbAor ICAgICAgIG1lc3MgdXAgdGhlIG9wZXJhdGlvbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3Mgb24gdGhl IGNvbm5lY3Rpb24gaW4gYW5vdGhlcgorICAgICAgIHRocmVhZC4KKyAgICAgIDwvcGFyYT4KKwor ICAgICAgPHBhcmE+CisgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyAxIGlmIHRoZSBjYW5jZWwg cmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5CisgICAgICAgZGlzcGF0Y2hlZCBhbmQgMCBpZiBub3Qu IFN1Y2Nlc3NmdWwgZGlzcGF0Y2ggaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlCisgICAgICAgcmVx dWVzdCB3aWxsIGhhdmUgYW55IGVmZmVjdCwgaG93ZXZlci4gSWYgdGhlIGNhbmNlbGxhdGlvbiBp cyBlZmZlY3RpdmUsCisgICAgICAgdGhlIGN1cnJlbnQgY29tbWFuZCB3aWxsIHRlcm1pbmF0ZSBl YXJseSBhbmQgcmV0dXJuIGFuIGVycm9yIHJlc3VsdC4gSWYKKyAgICAgICB0aGUgY2FuY2VsbGF0 aW9uIGZhaWxzIChzYXksIGJlY2F1c2UgdGhlIHNlcnZlciB3YXMgYWxyZWFkeSBkb25lCisgICAg ICAgcHJvY2Vzc2luZyB0aGUgY29tbWFuZCksIHRoZW4gdGhlcmUgd2lsbCBiZSBubyB2aXNpYmxl IHJlc3VsdCBhdAorICAgICAgIGFsbC4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4K KyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRcmVx dWVzdENhbmNlbFN0YXJ0Ij4KKyAgICAgPHRlcm0+PGZ1bmN0aW9uPlBRcmVxdWVzdENhbmNlbFN0 YXJ0PC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRcmVxdWVzdENhbmNlbFN0YXJ0PC9w cmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICBBIHZlcnNpb24gb2YKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJl cXVlc3RDYW5jZWwiLz4KKyAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGluIHRocmVhZC1zYWZlIGFu ZC9vciBub24tYmxvY2tpbmcgbWFubmVyLgorPHN5bm9wc2lzPgorUEdjb25uICpQUXJlcXVlc3RD YW5jZWxTdGFydChQR2Nvbm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKwor ICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IDxzdHJ1Y3Ru YW1lPlBHY29ubjwvc3RydWN0bmFtZT4uIFRoaXMKKyAgICAgICBjb25uZWN0aW9uIG9iamVjdCBj YW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIHF1ZXJ5IHRoYXQncyBydW5uaW5nIG9uIHRoZQorICAg ICAgIG9yaWdpbmFsIGNvbm5lY3Rpb24gaW4gYSB0aHJlYWQtc2FmZSB3YXkuIFRvIGRvIHNvCisg ICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+CisgICAgICAgbXVz dCBiZSBjYWxsZWQgd2hpbGUgbm8gb3RoZXIgdGhyZWFkIGlzIHVzaW5nIHRoZSBvcmlnaW5hbCBQ R2Nvbm4uIFRoZW4KKyAgICAgICB0aGUgcmV0dXJuZWQgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1 Y3RuYW1lPgorICAgICAgIGNhbiBiZSB1c2VkIGF0IGEgbGF0ZXIgcG9pbnQgaW4gYW55IHRocmVh ZCB0byBzZW5kIGEgY2FuY2VsIHJlcXVlc3QuCisgICAgICAgQSBjYW5jZWwgcmVxdWVzdCBjYW4g YmUgc2VudCB1c2luZyB0aGUgcmV0dXJuZWQgUEdjb25uIGluIHR3byB3YXlzLAorICAgICAgIG5v bi1ibG9ja2luZyB1c2luZyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+Cisg ICAgICAgb3IgYmxvY2tpbmcgdXNpbmcgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY29ubmVjdENv bXBsZXRlIi8+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBJbiBhZGRp dGlvbiB0byBhbGwgdGhlIHN0YXR1c2VzIHRoYXQgYSByZWd1bGFyCisgICAgICAgPHN0cnVjdG5h bWU+UEdjb25uPC9zdHJ1Y3RuYW1lPgorICAgICAgIGNhbiBoYXZlIHJldHVybmVkIGNvbm5lY3Rp b24gY2FuIGhhdmUgdHdvIGFkZGl0aW9uYWwgc3RhdHVzZXM6CisKKyAgICAgICA8dmFyaWFibGVs aXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1jb25uZWN0aW9uLXN0YXJ0aW5n Ij4KKyAgICAgICAgIDx0ZXJtPjxzeW1ib2w+Q09OTkVDVElPTl9TVEFSVElORzwvc3ltYm9sPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg V2FpdGluZyBmb3IgdGhlIGZpcnN0IGNhbGwgdG8gPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjb25u ZWN0UG9sbCIvPiwKKyAgICAgICAgICAgdG8gYWN0dWFsbHkgb3BlbiB0aGUgc29ja2V0LiBUaGlz IGlzIHRoZSBjb25uZWN0aW9uIHN0YXRlIHJpZ2h0IGFmdGVyCisgICAgICAgICAgIGNhbGxpbmcg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+LiBObyBjb25uZWN0aW9uIHRv IHRoZQorICAgICAgICAgICBzZXJ2ZXIgaGFzIGJlZW4gaW5pdGlhdGVkIHlldCBhdCB0aGlzIHBv aW50LiBUbyBzdGFydCBjYW5jZWwgcmVxdWVzdAorICAgICAgICAgICBpbml0aWF0aW9uIHVzZSA8 eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+CisgICAgICAgICAgIGZvciBub24t YmxvY2tpbmcgYmVoYXZpb3VyIGFuZCA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RDb21w bGV0ZSIvPgorICAgICAgICAgICBmb3IgYmxvY2tpbmcgYmVoYXZpb3VyLgorICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisg ICAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLWNvbm5lY3Rpb24tY2FuY2VsLWZpbmlzaGVk Ij4KKyAgICAgICAgIDx0ZXJtPjxzeW1ib2w+Q09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQ8L3N5 bWJvbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIENhbmNlbCByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4gSXQncyBub3QgcG9z c2libGUgdG8gY29udGludWUKKyAgICAgICAgICAgdXNpbmcgdGhlIGNhbmNlbGxhdGlvbiBjb25u ZWN0aW9uIG5vdywgc28gaXQgc2hvdWxkIGJlIGZyZWVkIHVzaW5nCisgICAgICAgICAgIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRZmluaXNoIi8+LiBJdCdzIGFsc28gcG9zc2libGUgdG8gcmVzZXQg dGhlCisgICAgICAgICAgIGNhbmNlbGxhdGlvbiBjb25uZWN0aW9uIGluc3RlYWQgdXNpbmcKKyAg ICAgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXNldFN0YXJ0Ii8+LCB0aGF0IHdheSBp dCBjYW4gYmUgcmV1c2VkIHRvCisgICAgICAgICAgIGNhbmNlbCBhIGZ1dHVyZSBxdWVyeSBvbiB0 aGUgc2FtZSBjb25uZWN0aW9uLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAg ICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBTaW5jZSB0aGlzIG9iamVjdCByZXBy ZXNlbnRzIGEgY29ubmVjdGlvbiBvbmx5IG1lYW50IGZvciBjYW5jZWxsYXRpb25zIGl0CisgICAg ICAgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGEgbGltaXRlZCBzdWJzZXQgb2YgdGhlIGZ1bmN0aW9u cyB0aGF0IGNhbiBiZSB1c2VkCisgICAgICAgZm9yIGEgcmVndWxhciA8c3RydWN0bmFtZT5QR2Nv bm48L3N0cnVjdG5hbWU+IG9iamVjdC4gVGhlIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgdGhpcyBv YmplY3QgY2FuIGJlIHBhc3NlZCB0byBhcmUKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1Q UXN0YXR1cyIvPiwKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWVycm9yTWVzc2FnZSIv PiwKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RDb21wbGV0ZSIvPiwKKyAg ICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNvbm5lY3RQb2xsIi8+LAorICAgICAgIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRc29ja2V0Ii8+LAorICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBx LVBRcmVzZXRTdGFydCIvPiwgYW5kCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFmaW5p c2giLz4uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWdldENhbmNlbCI+CiAgICAgIDx0 ZXJtPjxmdW5jdGlvbj5QUWdldENhbmNlbDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5Q UWdldENhbmNlbDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAKICAgICAgPGxpc3RpdGVt PgogICAgICAgPHBhcmE+CiAgICAgICAgQ3JlYXRlcyBhIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5p bmcgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjYW5jZWwKLSAgICAgICBhIGNvbW1hbmQgaXNz dWVkIHRocm91Z2ggYSBwYXJ0aWN1bGFyIGRhdGFiYXNlIGNvbm5lY3Rpb24uCisgICAgICAgYSBj b21tYW5kIHVzaW5nIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+LgogPHN5bm9wc2lz PgogUEdjYW5jZWwgKlBRZ2V0Q2FuY2VsKFBHY29ubiAqY29ubik7CiA8L3N5bm9wc2lzPgpAQCAt NTY2NSw3ICs1ODEzLDkgQEAgdm9pZCBQUWZyZWVDYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCk7CiAK ICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgUmVxdWVzdHMgdGhhdCB0aGUg c2VydmVyIGFiYW5kb24gcHJvY2Vzc2luZyBvZiB0aGUgY3VycmVudCBjb21tYW5kLgorICAgICAg IEEgbGVzcyBzZWN1cmUgdmVyc2lvbiBvZgorICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBR cmVxdWVzdENhbmNlbCIvPgorICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgc2FmZWx5IGZyb20gd2l0 aGluIGEgc2lnbmFsIGhhbmRsZXIuCiA8c3lub3BzaXM+CiBpbnQgUFFjYW5jZWwoUEdjYW5jZWwg KmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiA8L3N5bm9wc2lzPgpAQCAt NTY3OSwxNSArNTgyOSw2IEBAIGludCBQUWNhbmNlbChQR2NhbmNlbCAqY2FuY2VsLCBjaGFyICpl cnJidWYsIGludCBlcnJidWZzaXplKTsKICAgICAgICByZWNvbW1lbmRlZCBzaXplIGlzIDI1NiBi eXRlcykuCiAgICAgICA8L3BhcmE+CiAKLSAgICAgIDxwYXJhPgotICAgICAgIFN1Y2Nlc3NmdWwg ZGlzcGF0Y2ggaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHJlcXVlc3Qgd2lsbCBoYXZlCi0gICAg ICAgYW55IGVmZmVjdCwgaG93ZXZlci4gIElmIHRoZSBjYW5jZWxsYXRpb24gaXMgZWZmZWN0aXZl LCB0aGUgY3VycmVudAotICAgICAgIGNvbW1hbmQgd2lsbCB0ZXJtaW5hdGUgZWFybHkgYW5kIHJl dHVybiBhbiBlcnJvciByZXN1bHQuICBJZiB0aGUKLSAgICAgICBjYW5jZWxsYXRpb24gZmFpbHMg KHNheSwgYmVjYXVzZSB0aGUgc2VydmVyIHdhcyBhbHJlYWR5IGRvbmUKLSAgICAgICBwcm9jZXNz aW5nIHRoZSBjb21tYW5kKSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIHZpc2libGUgcmVzdWx0IGF0 Ci0gICAgICAgYWxsLgotICAgICAgPC9wYXJhPgotCiAgICAgICA8cGFyYT4KICAgICAgICA8eHJl ZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPiBjYW4gc2FmZWx5IGJlIGludm9rZWQgZnJvbSBh IHNpZ25hbAogICAgICAgIGhhbmRsZXIsIGlmIHRoZSA8cGFyYW1ldGVyPmVycmJ1ZjwvcGFyYW1l dGVyPiBpcyBhIGxvY2FsIHZhcmlhYmxlIGluIHRoZQpAQCAtNTY5NiwzMyArNTgzNywyNCBAQCBp bnQgUFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6 ZSk7CiAgICAgICAgYWxzbyBiZSBpbnZva2VkIGZyb20gYSB0aHJlYWQgdGhhdCBpcyBzZXBhcmF0 ZSBmcm9tIHRoZSBvbmUKICAgICAgICBtYW5pcHVsYXRpbmcgdGhlIDxzdHJ1Y3RuYW1lPlBHY29u bjwvc3RydWN0bmFtZT4gb2JqZWN0LgogICAgICAgPC9wYXJhPgotICAgICA8L2xpc3RpdGVtPgot ICAgIDwvdmFybGlzdGVudHJ5PgotICAgPC92YXJpYWJsZWxpc3Q+Ci0KLSAgIDx2YXJpYWJsZWxp c3Q+Ci0gICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIj4KLSAgICAg PHRlcm0+PGZ1bmN0aW9uPlBRcmVxdWVzdENhbmNlbDwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJp bWFyeT5QUXJlcXVlc3RDYW5jZWw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgotCi0gICAg IDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBR cmVxdWVzdENhbmNlbCIvPiBpcyBhIGRlcHJlY2F0ZWQgdmFyaWFudCBvZgotICAgICAgIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+LgotPHN5bm9wc2lzPgotaW50IFBRcmVxdWVzdENh bmNlbChQR2Nvbm4gKmNvbm4pOwotPC9zeW5vcHNpcz4KLSAgICAgIDwvcGFyYT4KIAogICAgICAg PHBhcmE+Ci0gICAgICAgUmVxdWVzdHMgdGhhdCB0aGUgc2VydmVyIGFiYW5kb24gcHJvY2Vzc2lu ZyBvZiB0aGUgY3VycmVudAotICAgICAgIGNvbW1hbmQuICBJdCBvcGVyYXRlcyBkaXJlY3RseSBv biB0aGUKLSAgICAgICA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+IG9iamVjdCwgYW5k IGluIGNhc2Ugb2YgZmFpbHVyZSBzdG9yZXMgdGhlCi0gICAgICAgZXJyb3IgbWVzc2FnZSBpbiB0 aGUgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvYmplY3QgKHdoZW5jZSBpdCBjYW4K LSAgICAgICBiZSByZXRyaWV2ZWQgYnkgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1lc3Nh Z2UiLz4pLiAgQWx0aG91Z2gKLSAgICAgICB0aGUgZnVuY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSwg dGhpcyBhcHByb2FjaCBpcyBub3Qgc2FmZSB3aXRoaW4KLSAgICAgICBtdWx0aXBsZS10aHJlYWQg cHJvZ3JhbXMgb3Igc2lnbmFsIGhhbmRsZXJzLCBzaW5jZSBpdCBpcyBwb3NzaWJsZQotICAgICAg IHRoYXQgb3ZlcndyaXRpbmcgdGhlIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4ncyBl cnJvciBtZXNzYWdlIHdpbGwKLSAgICAgICBtZXNzIHVwIHRoZSBvcGVyYXRpb24gY3VycmVudGx5 IGluIHByb2dyZXNzIG9uIHRoZSBjb25uZWN0aW9uLgorICAgICAgIFRvIGFjaGlldmUgc2lnbmFs LXNhZmV0eSwgc29tZSBjb25jZXNzaW9ucyBuZWVkZWQgdG8gYmUgbWFkZSBpbiB0aGUKKyAgICAg ICBpbXBsZW1lbnRhdGlvbiBvZiA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPi4gTm90 IGFsbCBjb25uZWN0aW9uCisgICAgICAgb3B0aW9ucyBvZiB0aGUgb3JpZ2luYWwgY29ubmVjdGlv biBhcmUgdXNlZCB3aGVuIGVzdGFibGlzaGluZyBhCisgICAgICAgY29ubmVjdGlvbiBmb3IgdGhl IGNhbmNlbGxhdGlvbiByZXF1ZXN0LiBXaGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhCisgICAg ICAgY29ubmVjdGlvbiBpcyBtYWRlIHRvIHRoZSBwb3N0Z3JlcyBob3N0IHVzaW5nIHRoZSBzYW1l IHBvcnQuIFRoZSBvbmx5CisgICAgICAgY29ubmVjdGlvbiBvcHRpb25zIHRoYXQgYXJlIGhvbm9y ZWQgZHVyaW5nIHRoaXMgY29ubmVjdGlvbiBhcmUKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVz PC92YXJuYW1lPiwKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVzX2lkbGU8L3Zhcm5hbWU+LAor ICAgICAgIDx2YXJuYW1lPmtlZXBhbGl2ZXNfaW50ZXJ2YWw8L3Zhcm5hbWU+LAorICAgICAgIDx2 YXJuYW1lPmtlZXBhbGl2ZXNfY291bnQ8L3Zhcm5hbWU+LCBhbmQKKyAgICAgICA8dmFybmFtZT50 Y3BfdXNlcl90aW1lb3V0PC92YXJuYW1lPi4KKyAgICAgICBTbywgZm9yIGV4YW1wbGUKKyAgICAg ICA8dmFybmFtZT5jb25uZWN0X3RpbWVvdXQ8L3Zhcm5hbWU+LAorICAgICAgIDx2YXJuYW1lPmdz c2VuY21vZGU8L3Zhcm5hbWU+LCBhbmQKKyAgICAgICA8dmFybmFtZT5zc2xtb2RlPC92YXJuYW1l PiBhcmUgaWdub3JlZC4gVGhpcyBtZWFucyB0aGUgY29ubmVjdGlvbgorICAgICAgIGlzIG5ldmVy IGVuY3J5cHRlZCB1c2luZyBUTFMgb3IgR1NTLgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3Rp dGVtPgogICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtODg1MCwxMCArODk4MiwxMCBAQCBpbnQgUFFp c3RocmVhZHNhZmUoKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIGRlcHJlY2F0ZWQg ZnVuY3Rpb25zIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPiBhbmQKKyAg IFRoZSBmdW5jdGlvbnMgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+IGFu ZAogICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFvaWRTdGF0dXMiLz4gYXJlIG5vdCB0aHJlYWQt c2FmZSBhbmQgc2hvdWxkIG5vdCBiZQogICAgdXNlZCBpbiBtdWx0aXRocmVhZCBwcm9ncmFtcy4g IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbCIvPgotICAgY2FuIGJlIHJlcGxh Y2VkIGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+LgorICAgY2FuIGJlIHJlcGxh Y2VkIGJ5IDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRcmVxdWVzdENhbmNlbFN0YXJ0Ii8+LgogICAg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFvaWRTdGF0dXMiLz4gY2FuIGJlIHJlcGxhY2VkIGJ5CiAg ICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUW9pZFZhbHVlIi8+LgogICA8L3BhcmE+CmRpZmYgLS1n aXQgYS9zcmMvZmVfdXRpbHMvY29ubmVjdF91dGlscy5jIGIvc3JjL2ZlX3V0aWxzL2Nvbm5lY3Rf dXRpbHMuYwppbmRleCBhMzBjNjZmMTNhLi5mZjE4ZGFiMDQzIDEwMDY0NAotLS0gYS9zcmMvZmVf dXRpbHMvY29ubmVjdF91dGlscy5jCisrKyBiL3NyYy9mZV91dGlscy9jb25uZWN0X3V0aWxzLmMK QEAgLTE2MiwxOSArMTYyLDExIEBAIGNvbm5lY3RNYWludGVuYW5jZURhdGFiYXNlKENvbm5QYXJh bXMgKmNwYXJhbXMsCiB2b2lkCiBkaXNjb25uZWN0RGF0YWJhc2UoUEdjb25uICpjb25uKQogewot CWNoYXIJCWVycmJ1ZlsyNTZdOwotCiAJQXNzZXJ0KGNvbm4gIT0gTlVMTCk7CiAKIAlpZiAoUFF0 cmFuc2FjdGlvblN0YXR1cyhjb25uKSA9PSBQUVRSQU5TX0FDVElWRSkKIAl7Ci0JCVBHY2FuY2Vs ICAgKmNhbmNlbDsKLQotCQlpZiAoKGNhbmNlbCA9IFBRZ2V0Q2FuY2VsKGNvbm4pKSkKLQkJewot CQkJKHZvaWQpIFBRY2FuY2VsKGNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0JCQlQ UWZyZWVDYW5jZWwoY2FuY2VsKTsKLQkJfQorCQkodm9pZCkgUFFyZXF1ZXN0Q2FuY2VsKGNvbm4p OwogCX0KIAogCVBRZmluaXNoKGNvbm4pOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGli cHEvZXhwb3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAppbmRleCBl OGJjYzg4MzcwLi5mNzYwOWQwYzY0IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9l eHBvcnRzLnR4dAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dApAQCAtMTg2 LDMgKzE4Niw1IEBAIFBRcGlwZWxpbmVTdGF0dXMgICAgICAgICAgMTgzCiBQUXNldFRyYWNlRmxh Z3MgICAgICAgICAgIDE4NAogUFFtYmxlbkJvdW5kZWQgICAgICAgICAgICAxODUKIFBRc2VuZEZs dXNoUmVxdWVzdCAgICAgICAgMTg2CitQUXJlcXVlc3RDYW5jZWxTdGFydCAgICAgIDE4NworUFFj b25uZWN0Q29tcGxldGUgICAgICAgICAxODgKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWNvbm5lY3QuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwppbmRl eCBjZjU1NGQzODlmLi5lODM1NmU3NWEyIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBA IC0zNzgsNiArMzc4LDcgQEAgc3RhdGljIGludAljb25uZWN0REJDb21wbGV0ZShQR2Nvbm4gKmNv bm4pOwogc3RhdGljIFBHUGluZyBpbnRlcm5hbF9waW5nKFBHY29ubiAqY29ubik7CiBzdGF0aWMg UEdjb25uICptYWtlRW1wdHlQR2Nvbm4odm9pZCk7CiBzdGF0aWMgYm9vbCBmaWxsUEdjb25uKFBH Y29ubiAqY29ubiwgUFFjb25uaW5mb09wdGlvbiAqY29ubk9wdGlvbnMpOworc3RhdGljIGJvb2wg Y29weVBHY29ubihQR2Nvbm4gKnNyY0Nvbm4sIFBHY29ubiAqZHN0Q29ubik7CiBzdGF0aWMgdm9p ZCBmcmVlUEdjb25uKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBjbG9zZVBHY29ubihQR2Nv bm4gKmNvbm4pOwogc3RhdGljIHZvaWQgcmVsZWFzZV9jb25uX2FkZHJpbmZvKFBHY29ubiAqY29u bik7CkBAIC02MDQsOCArNjA1LDE3IEBAIHBxRHJvcFNlcnZlckRhdGEoUEdjb25uICpjb25uKQog CWlmIChjb25uLT53cml0ZV9lcnJfbXNnKQogCQlmcmVlKGNvbm4tPndyaXRlX2Vycl9tc2cpOwog CWNvbm4tPndyaXRlX2Vycl9tc2cgPSBOVUxMOwotCWNvbm4tPmJlX3BpZCA9IDA7Ci0JY29ubi0+ YmVfa2V5ID0gMDsKKworCS8qCisJICogQ2FuY2VsIGNvbm5lY3Rpb25zIHNob3VsZCBzYXZlIHRo ZWlyIGJlX3BpZCBhbmQgYmVfa2V5IGFjcm9zcworCSAqIFBRcmVzZXRTdGFydCBpbnZvY2F0aW9u cy4gT3RoZXJ3aXNlIHRoZXkgZG9uJ3Qga25vdyB0aGUgc2VjcmV0IHRva2VuIG9mCisJICogdGhl IGNvbm5lY3Rpb24gdGhleSBhcmUgc3VwcG9zZWQgdG8gY2FuY2VsIGFueW1vcmUuCisJICovCisJ aWYgKCFjb25uLT5jYW5jZWxSZXF1ZXN0KQorCXsKKwkJY29ubi0+YmVfcGlkID0gMDsKKwkJY29u bi0+YmVfa2V5ID0gMDsKKwl9CiB9CiAKIApAQCAtNzM3LDYgKzc0Nyw2OCBAQCBQUXBpbmcoY29u c3QgY2hhciAqY29ubmluZm8pCiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqCQlQUWNhbmNlbENv bm5lY3RTdGFydAorICoKKyAqIEFzeW5jaHJvbm91c2x5IGNhbmNlbCBhIHJlcXVlc3Qgb24gdGhl IGdpdmVuIGNvbm5lY3Rpb24uIFRoaXMgcmVxdWlyZXMKKyAqIHBvbGxpbmcgdGhlIHJldHVybmVk IFBHY29ubiB0byBhY3R1YWxseSBjb21wbGV0ZSB0aGUgY2FuY2VsbGF0aW9uIG9mIHRoZQorICog cmVxdWVzdC4KKyAqLworUEdjb25uICoKK1BRcmVxdWVzdENhbmNlbFN0YXJ0KFBHY29ubiAqY29u bikKK3sKKwlQR2Nvbm4JICAgKmNhbmNlbENvbm4gPSBtYWtlRW1wdHlQR2Nvbm4oKTsKKworCWlm IChjYW5jZWxDb25uID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogQ2hlY2sgd2UgaGF2 ZSBhbiBvcGVuIGNvbm5lY3Rpb24gKi8KKwlpZiAoIWNvbm4pCisJeworCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmY2FuY2VsQ29ubi0+ZXJyb3JNZXNzYWdlLCBsaWJwcV9nZXR0ZXh0KCJwYXNzZWQg Y29ubmVjdGlvbiB3YXMgTlVMTFxuIikpOworCQlyZXR1cm4gY2FuY2VsQ29ubjsKKwl9CisKKwlp ZiAoY29ubi0+c29jayA9PSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNhbmNlbENvbm4tPmVycm9yTWVzc2FnZSwgbGlicHFfZ2V0dGV4dCgicGFzc2VkIGNv bm5lY3Rpb24gaXMgbm90IG9wZW5cbiIpKTsKKwkJcmV0dXJuIGNhbmNlbENvbm47CisJfQorCisJ LyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoaXMgY29ubmVjdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBj YW5jZWxsYXRpb24KKwkgKi8KKwljYW5jZWxDb25uLT5jYW5jZWxSZXF1ZXN0ID0gdHJ1ZTsKKwor CWlmICghY29weVBHY29ubihjb25uLCBjYW5jZWxDb25uKSkKKwkJcmV0dXJuIChQR2Nvbm4gKikg Y2FuY2VsQ29ubjsKKworCS8qCisJICogQ29tcHV0ZSBkZXJpdmVkIG9wdGlvbnMKKwkgKi8KKwlp ZiAoIWNvbm5lY3RPcHRpb25zMihjYW5jZWxDb25uKSkKKwkJcmV0dXJuIGNhbmNlbENvbm47CisK KwkvKgorCSAqIENvcHkgY2FuY2VsYXRpb24gdG9rZW4gZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCBj b25ubmVjdGlvbgorCSAqLworCWNhbmNlbENvbm4tPmJlX3BpZCA9IGNvbm4tPmJlX3BpZDsKKwlj YW5jZWxDb25uLT5iZV9rZXkgPSBjb25uLT5iZV9rZXk7CisKKwkvKgorCSAqIENhbmNlbCByZXF1 ZXN0cyBzaG91bGQgbm90IGl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libGUgaG9zdHMuIFRoZSByZXF1 ZXN0CisJICogbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgZXhhY3QgaG9zdCBhbmQgYWRkcmVzcyB0 aGF0IHRoZSBvcmlnaW5hbAorCSAqIGNvbm5lY3Rpb24gdXNlZC4KKwkgKi8KKwltZW1jcHkoJmNh bmNlbENvbm4tPnJhZGRyLCAmY29ubi0+cmFkZHIsIHNpemVvZihTb2NrQWRkcikpOworCWNhbmNl bENvbm4tPndoaWNoaG9zdCA9IGNvbm4tPndoaWNoaG9zdDsKKwljb25uLT50cnlfbmV4dF9ob3N0 ID0gZmFsc2U7CisJY29ubi0+dHJ5X25leHRfYWRkciA9IGZhbHNlOworCisJY2FuY2VsQ29ubi0+ c3RhdHVzID0gQ09OTkVDVElPTl9TVEFSVElORzsKKwlyZXR1cm4gY2FuY2VsQ29ubjsKK30KKwog LyoKICAqCQlQUWNvbm5lY3RTdGFydFBhcmFtcwogICoKQEAgLTkxNCw2ICs5ODYsNDYgQEAgZmls bFBHY29ubihQR2Nvbm4gKmNvbm4sIFBRY29ubmluZm9PcHRpb24gKmNvbm5PcHRpb25zKQogCXJl dHVybiB0cnVlOwogfQogCisvKgorICogQ29weSBvdmVyIG9wdGlvbiB2YWx1ZXMgZnJvbSBzcmND b25uIHRvIGRzdENvbm4KKyAqCisgKiBEb24ndCBwdXQgYW55dGhpbmcgY3V0ZSBoZXJlIC0tLSBp bnRlbGxpZ2VuY2Ugc2hvdWxkIGJlIGluCisgKiBjb25uZWN0T3B0aW9uczIgLi4uCisgKgorICog UmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9uIGZhaWx1cmUsIHJldHVybnMgZmFsc2UgYW5kIHNl dHMgZXJyb3IgbWVzc2FnZSBvZgorICogZHN0Q29ubi4KKyAqLworc3RhdGljIGJvb2wKK2NvcHlQ R2Nvbm4oUEdjb25uICpzcmNDb25uLCBQR2Nvbm4gKmRzdENvbm4pCit7CisJY29uc3QgaW50ZXJu YWxQUWNvbm5pbmZvT3B0aW9uICpvcHRpb247CisKKwkvKiBjb3B5IG92ZXIgY29ubmVjdGlvbiBv cHRpb25zICovCisJZm9yIChvcHRpb24gPSBQUWNvbm5pbmZvT3B0aW9uczsgb3B0aW9uLT5rZXl3 b3JkOyBvcHRpb24rKykKKwl7CisJCWlmIChvcHRpb24tPmNvbm5vZnMgPj0gMCkKKwkJeworCQkJ Y29uc3QgY2hhciAqKnRtcCA9IChjb25zdCBjaGFyICoqKSAoKGNoYXIgKikgc3JjQ29ubiArIG9w dGlvbi0+Y29ubm9mcyk7CisKKwkJCWlmICgqdG1wKQorCQkJeworCQkJCWNoYXIJICAqKmRzdENv bm5tZW1iZXIgPSAoY2hhciAqKikgKChjaGFyICopIGRzdENvbm4gKyBvcHRpb24tPmNvbm5vZnMp OworCisJCQkJaWYgKCpkc3RDb25ubWVtYmVyKQorCQkJCQlmcmVlKCpkc3RDb25ubWVtYmVyKTsK KwkJCQkqZHN0Q29ubm1lbWJlciA9IHN0cmR1cCgqdG1wKTsKKwkJCQlpZiAoKmRzdENvbm5tZW1i ZXIgPT0gTlVMTCkKKwkJCQl7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZkc3RDb25uLT5l cnJvck1lc3NhZ2UsCisJCQkJCQkJCQkJIGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnlcbiIp KTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gdHJ1 ZTsKK30KKwogLyoKICAqCQljb25uZWN0T3B0aW9uczEKICAqCkBAIC0yMDgyLDEwICsyMTk0LDE3 IEBAIGNvbm5lY3REQlN0YXJ0KFBHY29ubiAqY29ubikKIAkgKiBTZXQgdXAgdG8gdHJ5IHRvIGNv bm5lY3QgdG8gdGhlIGZpcnN0IGhvc3QuICAoU2V0dGluZyB3aGljaGhvc3QgPSAtMSBpcwogCSAq IGEgYml0IG9mIGEgY2hlYXQsIGJ1dCBQUWNvbm5lY3RQb2xsIHdpbGwgYWR2YW5jZSBpdCB0byAw IGJlZm9yZQogCSAqIGFueXRoaW5nIGVsc2UgbG9va3MgYXQgaXQuKQorCSAqCisJICogQ2FuY2Vs IHJlcXVlc3RzIGFyZSBzcGVjaWFsIHRob3VnaCwgdGhleSBzaG91bGQgb25seSB0cnkgb25lIGhv c3QsCisJICogd2hpY2ggaXMgZGV0ZXJtaW5lZCBpbiBQUWNhbmNlbENvbm5lY3RTdGFydC4gU28g bGVhdmUgdGhlc2Ugc2V0dGluZ3MKKwkgKiBhbG9uZSBmb3IgY2FuY2VsIHJlcXVlc3RzLgogCSAq LwotCWNvbm4tPndoaWNoaG9zdCA9IC0xOwotCWNvbm4tPnRyeV9uZXh0X2FkZHIgPSBmYWxzZTsK LQljb25uLT50cnlfbmV4dF9ob3N0ID0gdHJ1ZTsKKwlpZiAoIWNvbm4tPmNhbmNlbFJlcXVlc3Qp CisJeworCQljb25uLT53aGljaGhvc3QgPSAtMTsKKwkJY29ubi0+dHJ5X25leHRfaG9zdCA9IHRy dWU7CisJCWNvbm4tPnRyeV9uZXh0X2FkZHIgPSBmYWxzZTsKKwl9CiAJY29ubi0+c3RhdHVzID0g Q09OTkVDVElPTl9ORUVERUQ7CiAKIAkvKiBBbHNvIHJlc2V0IHRoZSB0YXJnZXRfc2VydmVyX3R5 cGUgc3RhdGUgaWYgbmVlZGVkICovCkBAIC0yMTM0LDYgKzIyNTMsMTUgQEAgY29ubmVjdERCQ29t cGxldGUoUEdjb25uICpjb25uKQogCWlmIChjb25uID09IE5VTEwgfHwgY29ubi0+c3RhdHVzID09 IENPTk5FQ1RJT05fQkFEKQogCQlyZXR1cm4gMDsKIAorCWlmIChjb25uLT5zdGF0dXMgPT0gQ09O TkVDVElPTl9TVEFSVElORykKKwl7CisJCWlmICghY29ubmVjdERCU3RhcnQoY29ubikpCisJCXsK KwkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOworCQkJcmV0dXJuIDA7CisJCX0KKwl9 CisKIAkvKgogCSAqIFNldCB1cCBhIHRpbWUgbGltaXQsIGlmIGNvbm5lY3RfdGltZW91dCBpc24n dCB6ZXJvLgogCSAqLwpAQCAtMjI3NCwxMyArMjQwMiwxNSBAQCBQUWNvbm5lY3RQb2xsKFBHY29u biAqY29ubikKIAlzd2l0Y2ggKGNvbm4tPnN0YXR1cykKIAl7CiAJCQkvKgotCQkJICogV2UgcmVh bGx5IHNob3VsZG4ndCBoYXZlIGJlZW4gcG9sbGVkIGluIHRoZXNlIHR3byBjYXNlcywgYnV0IHdl Ci0JCQkgKiBjYW4gaGFuZGxlIGl0LgorCQkJICogV2UgcmVhbGx5IHNob3VsZG4ndCBoYXZlIGJl ZW4gcG9sbGVkIGluIHRoZXNlIHRocmVlIGNhc2VzLCBidXQKKwkJCSAqIHdlIGNhbiBoYW5kbGUg aXQuCiAJCQkgKi8KIAkJY2FzZSBDT05ORUNUSU9OX0JBRDoKIAkJCXJldHVybiBQR1JFU19QT0xM SU5HX0ZBSUxFRDsKIAkJY2FzZSBDT05ORUNUSU9OX09LOgogCQkJcmV0dXJuIFBHUkVTX1BPTExJ TkdfT0s7CisJCWNhc2UgQ09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQ6CisJCQlyZXR1cm4gUEdS RVNfUE9MTElOR19PSzsKIAogCQkJLyogVGhlc2UgYXJlIHJlYWRpbmcgc3RhdGVzICovCiAJCWNh c2UgQ09OTkVDVElPTl9BV0FJVElOR19SRVNQT05TRToKQEAgLTIyOTIsNiArMjQyMiwzNCBAQCBQ UWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubikKIAkJCQkvKiBMb2FkIHdhaXRpbmcgZGF0YSAqLwog CQkJCWludAkJCW4gPSBwcVJlYWREYXRhKGNvbm4pOwogCisjaWZuZGVmIFdJTjMyCisJCQkJaWYg KG4gPT0gLTIgJiYgY29ubi0+Y2FuY2VsUmVxdWVzdCkKKyNlbHNlCisKKwkJCQkvKgorCQkJCSAq IFdpbmRvd3MgaXMgYSBiaXQgc3BlY2lhbCBpbiBpdHMgRU9GIGJlaGF2aW91ciBmb3IgVENQLgor CQkJCSAqIFNvbWV0aW1lcyBpdCB3aWxsIGVycm9yIHdpdGggYW4gRUNPTk5SRVNFVCB3aGVuIHRo ZXJlIGlzIGEKKwkJCQkgKiBjbGVhbiBjb25uZWN0aW9uIGNsb3N1cmUuIFNlZSB0aGVzZSB0aHJl YWRzIGZvciBkZXRhaWxzOgorCQkJCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvZmxhdC85MGIzNDA1Ny00MTc2LTdiYjAtMGRiYi05ODIyYTVmNjQyNWIlNDBncmVpei1y ZWluc2RvcmYuZGUKKwkJCQkgKgorCQkJCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvZmxhdC9DQSUyQmhVS0clMkJPZW9FVFpRJTNEUXc1VWI1aDN0bXdRaEJtREElM0Ru dU5PM0tHJTNEeldmVXlwRkF3JTQwbWFpbC5nbWFpbC5jb20KKwkJCQkgKgorCQkJCSAqIFBRY2Fu Y2VsIGlnbm9yZXMgc3VjaCBlcnJvcnMgYW5kIHJlcG9ydHMgc3VjY2VzcyBmb3IgdGhlCisJCQkJ ICogY2FuY2VsbGF0aW9uIGFueXdheSwgc28gZXZlbiBpZiB0aGlzIGlzIG5vdCBhbHdheXMgY29y cmVjdAorCQkJCSAqIHdlIGRvIHRoZSBzYW1lIGhlcmUuCisJCQkJICovCisJCQkJaWYgKG4gPCAw ICYmIGNvbm4tPmNhbmNlbFJlcXVlc3QpCisjZW5kaWYKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAq IFRoaXMgaXMgdGhlIGV4cGVjdGVkIGVuZCBzdGF0ZSBmb3IgY2FuY2VsIGNvbm5lY3Rpb25zLgor CQkJCQkgKiBUaGV5IGFyZSBjbG9zZWQgb25jZSB0aGUgY2FuY2VsIGlzIHByb2Nlc3NlZCBieSB0 aGUKKwkJCQkJICogc2VydmVyLgorCQkJCQkgKi8KKwkJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVD VElPTl9DQU5DRUxfRklOSVNIRUQ7CisJCQkJCXJlc2V0UFFFeHBCdWZmZXIoJmNvbm4tPmVycm9y TWVzc2FnZSk7CisJCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX09LOworCQkJCX0KIAkJCQlpZiAo biA8IDApCiAJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJCWlmIChuID09IDApCkBAIC0yMzAx LDYgKzI0NTksNyBAQCBQUWNvbm5lY3RQb2xsKFBHY29ubiAqY29ubikKIAkJCX0KIAogCQkJLyog VGhlc2UgYXJlIHdyaXRpbmcgc3RhdGVzLCBzbyB3ZSBqdXN0IHByb2NlZWQuICovCisJCWNhc2Ug Q09OTkVDVElPTl9TVEFSVElORzoKIAkJY2FzZSBDT05ORUNUSU9OX1NUQVJURUQ6CiAJCWNhc2Ug Q09OTkVDVElPTl9NQURFOgogCQkJYnJlYWs7CkBAIC0yMzI1LDYgKzI0ODQsMTQgQEAga2VlcF9n b2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJ LyogVGltZSB0byBhZHZhbmNlIHRvIG5leHQgYWRkcmVzcywgb3IgbmV4dCBob3N0IGlmIG5vIG1v cmUgYWRkcmVzc2VzPyAqLwogCWlmIChjb25uLT50cnlfbmV4dF9hZGRyKQogCXsKKwkJLyoKKwkJ ICogQ2FuY2VsIHJlcXVlc3RzIG5ldmVyIGhhdmUgbW9yZSBhZGRyZXNzZXMgdG8gdHJ5LiBUaGV5 IHNob3VsZCBvbmx5CisJCSAqIHRyeSBhIHNpbmdsZSBvbmUuCisJCSAqLworCQlpZiAoY29ubi0+ Y2FuY2VsUmVxdWVzdCkKKwkJeworCQkJZ290byBlcnJvcl9yZXR1cm47CisJCX0KIAkJaWYgKGNv bm4tPmFkZHJfY3VyICYmIGNvbm4tPmFkZHJfY3VyLT5haV9uZXh0KQogCQl7CiAJCQljb25uLT5h ZGRyX2N1ciA9IGNvbm4tPmFkZHJfY3VyLT5haV9uZXh0OwpAQCAtMjM0NCw2ICsyNTExLDE1IEBA IGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVy ZSBpcwogCQlpbnQJCQlyZXQ7CiAJCWNoYXIJCXBvcnRzdHJbTUFYUEdQQVRIXTsKIAorCQkvKgor CQkgKiBDYW5jZWwgcmVxdWVzdHMgbmV2ZXIgaGF2ZSBtb3JlIGhvc3RzIHRvIHRyeS4gVGhleSBz aG91bGQgb25seSB0cnkKKwkJICogYSBzaW5nbGUgb25lLgorCQkgKi8KKwkJaWYgKGNvbm4tPmNh bmNlbFJlcXVlc3QpCisJCXsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisKIAkJaWYgKGNv bm4tPndoaWNoaG9zdCArIDEgPCBjb25uLT5uY29ubmhvc3QpCiAJCQljb25uLT53aGljaGhvc3Qr KzsKIAkJZWxzZQpAQCAtMjUyOSwxOSArMjcwNSwyNyBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdl IHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQkJY2hhcgkJaG9zdF9h ZGRyW05JX01BWEhPU1RdOwogCiAJCQkJCS8qCi0JCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCBwb3Nz aWJsZSBob3N0LCBpZiB3ZSd2ZSB0cmllZCBhbGwgb2YKLQkJCQkJICogdGhlIGFkZHJlc3NlcyBm b3IgdGhlIGN1cnJlbnQgaG9zdC4KKwkJCQkJICogQ2FuY2VsIHJlcXVlc3RzIGRvbid0IHVzZSBh ZGRyX2N1ciBhdCBhbGwuIFRoZXkgaGF2ZQorCQkJCQkgKiB0aGVpciByYWRkciBmaWVsZCBhbHJl YWR5IGZpbGxlZCBpbiBkdXJpbmcKKwkJCQkJICogaW5pdGlhbGl6YXRpb24gaW4gUFFjYW5jZWxD b25uZWN0U3RhcnQuCiAJCQkJCSAqLwotCQkJCQlpZiAoYWRkcl9jdXIgPT0gTlVMTCkKKwkJCQkJ aWYgKCFjb25uLT5jYW5jZWxSZXF1ZXN0KQogCQkJCQl7Ci0JCQkJCQljb25uLT50cnlfbmV4dF9o b3N0ID0gdHJ1ZTsKLQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKLQkJCQkJfQorCQkJCQkJLyoKKwkJ CQkJCSAqIEFkdmFuY2UgdG8gbmV4dCBwb3NzaWJsZSBob3N0LCBpZiB3ZSd2ZSB0cmllZCBhbGwK KwkJCQkJCSAqIG9mIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSBjdXJyZW50IGhvc3QuCisJCQkJCQkg Ki8KKwkJCQkJCWlmIChhZGRyX2N1ciA9PSBOVUxMKQorCQkJCQkJeworCQkJCQkJCWNvbm4tPnRy eV9uZXh0X2hvc3QgPSB0cnVlOworCQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJCX0KIAot CQkJCQkvKiBSZW1lbWJlciBjdXJyZW50IGFkZHJlc3MgZm9yIHBvc3NpYmxlIHVzZSBsYXRlciAq LwotCQkJCQltZW1jcHkoJmNvbm4tPnJhZGRyLmFkZHIsIGFkZHJfY3VyLT5haV9hZGRyLAotCQkJ CQkJICAgYWRkcl9jdXItPmFpX2FkZHJsZW4pOwotCQkJCQljb25uLT5yYWRkci5zYWxlbiA9IGFk ZHJfY3VyLT5haV9hZGRybGVuOworCQkJCQkJLyogUmVtZW1iZXIgY3VycmVudCBhZGRyZXNzIGZv ciBwb3NzaWJsZSB1c2UgbGF0ZXIgKi8KKwkJCQkJCW1lbWNweSgmY29ubi0+cmFkZHIuYWRkciwg YWRkcl9jdXItPmFpX2FkZHIsCisJCQkJCQkJICAgYWRkcl9jdXItPmFpX2FkZHJsZW4pOworCQkJ CQkJY29ubi0+cmFkZHIuc2FsZW4gPSBhZGRyX2N1ci0+YWlfYWRkcmxlbjsKKwkJCQkJfQogCiAJ CQkJCS8qCiAJCQkJCSAqIFNldCBjb25uaXAsIHRvby4gIE5vdGUgd2UgcHVycG9zZWx5IGlnbm9y ZSBzdHJkdXAKQEAgLTI1NTcsNyArMjc0MSw3IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2ls bCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCQkJY29ubi0+Y29ubmlwID0g c3RyZHVwKGhvc3RfYWRkcik7CiAKIAkJCQkJLyogVHJ5IHRvIGNyZWF0ZSB0aGUgc29ja2V0ICov Ci0JCQkJCWNvbm4tPnNvY2sgPSBzb2NrZXQoYWRkcl9jdXItPmFpX2ZhbWlseSwgU09DS19TVFJF QU0sIDApOworCQkJCQljb25uLT5zb2NrID0gc29ja2V0KGNvbm4tPnJhZGRyLmFkZHIuc3NfZmFt aWx5LCBTT0NLX1NUUkVBTSwgMCk7CiAJCQkJCWlmIChjb25uLT5zb2NrID09IFBHSU5WQUxJRF9T T0NLRVQpCiAJCQkJCXsKIAkJCQkJCWludAkJCWVycm9ybm8gPSBTT0NLX0VSUk5POwpAQCAtMjU2 NywxMiArMjc1MSwxOCBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRv IGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCQkJCSAqIGFkZHJlc3NlcyB0byB0cnk7IHRoaXMgcmVk dWNlcyB1c2VsZXNzIGNoYXR0ZXIgaW4KIAkJCQkJCSAqIGNhc2VzIHdoZXJlIHRoZSBhZGRyZXNz IGxpc3QgaW5jbHVkZXMgYm90aCBJUHY0IGFuZAogCQkJCQkJICogSVB2NiBidXQga2VybmVsIG9u bHkgYWNjZXB0cyBvbmUgZmFtaWx5LgorCQkJCQkJICoKKwkJCQkJCSAqIENhbmNlbCByZXF1ZXN0 cyBuZXZlciBoYXZlIG1vcmUgYWRkcmVzc2VzIHRvIHRyeS4KKwkJCQkJCSAqIFRoZXkgc2hvdWxk IG9ubHkgdHJ5IGEgc2luZ2xlIG9uZS4KIAkJCQkJCSAqLwotCQkJCQkJaWYgKGFkZHJfY3VyLT5h aV9uZXh0ICE9IE5VTEwgfHwKLQkJCQkJCQljb25uLT53aGljaGhvc3QgKyAxIDwgY29ubi0+bmNv bm5ob3N0KQorCQkJCQkJaWYgKCFjb25uLT5jYW5jZWxSZXF1ZXN0KQogCQkJCQkJewotCQkJCQkJ CWNvbm4tPnRyeV9uZXh0X2FkZHIgPSB0cnVlOwotCQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJ CQkJCQlpZiAoYWRkcl9jdXItPmFpX25leHQgIT0gTlVMTCB8fAorCQkJCQkJCQljb25uLT53aGlj aGhvc3QgKyAxIDwgY29ubi0+bmNvbm5ob3N0KQorCQkJCQkJCXsKKwkJCQkJCQkJY29ubi0+dHJ5 X25leHRfYWRkciA9IHRydWU7CisJCQkJCQkJCWdvdG8ga2VlcF9nb2luZzsKKwkJCQkJCQl9CiAJ CQkJCQl9CiAJCQkJCQllbWl0SG9zdElkZW50aXR5SW5mbyhjb25uLCBob3N0X2FkZHIpOwogCQkJ CQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKQEAgLTI1OTUsNyArMjc4 NSw3IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRp bCB0aGVyZSBpcwogCQkJCQkgKiBUQ1Agc29ja2V0cywgbm9uYmxvY2sgbW9kZSwgY2xvc2Utb24t ZXhlYy4gIFRyeSB0aGUKIAkJCQkJICogbmV4dCBhZGRyZXNzIGlmIGFueSBvZiB0aGlzIGZhaWxz LgogCQkJCQkgKi8KLQkJCQkJaWYgKGFkZHJfY3VyLT5haV9mYW1pbHkgIT0gQUZfVU5JWCkKKwkJ CQkJaWYgKGNvbm4tPnJhZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgpCiAJCQkJCXsKIAkJ CQkJCWlmICghY29ubmVjdE5vRGVsYXkoY29ubikpCiAJCQkJCQl7CkBAIC0yNjI0LDcgKzI4MTQs NyBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwg dGhlcmUgaXMKIAkJCQkJfQogI2VuZGlmCQkJCQkJCS8qIEZfU0VURkQgKi8KIAotCQkJCQlpZiAo YWRkcl9jdXItPmFpX2ZhbWlseSAhPSBBRl9VTklYKQorCQkJCQlpZiAoY29ubi0+cmFkZHIuYWRk ci5zc19mYW1pbHkgIT0gQUZfVU5JWCkKIAkJCQkJewogI2lmbmRlZiBXSU4zMgogCQkJCQkJaW50 CQkJb24gPSAxOwpAQCAtMjcxOCw4ICsyOTA4LDkgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3 aWxsIGNvbWUgYmFjayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCSAqIFN0YXJ0L21ha2Ug Y29ubmVjdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBibG9jaywgc2luY2Ugd2UKIAkJCQkJICogYXJl IGluIG5vbmJsb2NrIG1vZGUuICBJZiBpdCBkb2VzLCB3ZWxsLCB0b28gYmFkLgogCQkJCQkgKi8K LQkJCQkJaWYgKGNvbm5lY3QoY29ubi0+c29jaywgYWRkcl9jdXItPmFpX2FkZHIsCi0JCQkJCQkJ CWFkZHJfY3VyLT5haV9hZGRybGVuKSA8IDApCisJCQkJCWlmIChjb25uZWN0KGNvbm4tPnNvY2ss CisJCQkJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikgJmNvbm4tPnJhZGRyLmFkZHIsCisJCQkJCQkJ CWNvbm4tPnJhZGRyLnNhbGVuKSA8IDApCiAJCQkJCXsKIAkJCQkJCWlmIChTT0NLX0VSUk5PID09 IEVJTlBST0dSRVNTIHx8CiAjaWZkZWYgV0lOMzIKQEAgLTI3NTgsNiArMjk0OSwxNiBAQCBrZWVw X2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMK IAkJCQl9CiAJCQl9CiAKKwkJY2FzZSBDT05ORUNUSU9OX1NUQVJUSU5HOgorCQkJeworCQkJCWlm ICghY29ubmVjdERCU3RhcnQoY29ubikpCisJCQkJeworCQkJCQlnb3RvIGVycm9yX3JldHVybjsK KwkJCQl9CisJCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9TVEFSVEVEOworCQkJCXJldHVy biBQR1JFU19QT0xMSU5HX1dSSVRJTkc7CisJCQl9CisKIAkJY2FzZSBDT05ORUNUSU9OX1NUQVJU RUQ6CiAJCQl7CiAJCQkJc29ja2xlbl90CW9wdGxlbiA9IHNpemVvZihvcHR2YWwpOwpAQCAtMjk2 Niw2ICszMTY3LDI1IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8g aGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCX0KICNlbmRpZgkJCQkJCQkvKiBVU0VfU1NMICovCiAK KwkJCQlpZiAoY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwkJCQl7CisJCQkJCUNhbmNlbFJlcXVlc3RQ YWNrZXQgY2FuY2VscGFja2V0OworCisJCQkJCXBhY2tldGxlbiA9IHNpemVvZihjYW5jZWxwYWNr ZXQpOworCQkJCQljYW5jZWxwYWNrZXQuY2FuY2VsUmVxdWVzdENvZGUgPSAoTXNnVHlwZSkgcGdf aHRvbjMyKENBTkNFTF9SRVFVRVNUX0NPREUpOworCQkJCQljYW5jZWxwYWNrZXQuYmFja2VuZFBJ RCA9IHBnX2h0b24zMihjb25uLT5iZV9waWQpOworCQkJCQljYW5jZWxwYWNrZXQuY2FuY2VsQXV0 aENvZGUgPSBwZ19odG9uMzIoY29ubi0+YmVfa2V5KTsKKwkJCQkJaWYgKHBxUGFja2V0U2VuZChj b25uLCAwLCAmY2FuY2VscGFja2V0LCBwYWNrZXRsZW4pICE9IFNUQVRVU19PSykKKwkJCQkJewor CQkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKKwkJCQkJCQkJCQkg IGxpYnBxX2dldHRleHQoImNvdWxkIG5vdCBzZW5kIGNhbmNlbCBwYWNrZXQ6ICVzXG4iKSwKKwkJ CQkJCQkJCQkgIFNPQ0tfU1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1Zikp KTsKKwkJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCQl9CisJCQkJCWNvbm4tPnN0YXR1cyA9 IENPTk5FQ1RJT05fQVdBSVRJTkdfUkVTUE9OU0U7CisJCQkJCXJldHVybiBQR1JFU19QT0xMSU5H X1JFQURJTkc7CisJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBCdWlsZCB0aGUgc3RhcnR1cCBwYWNr ZXQuCiAJCQkJICovCkBAIC00MTk0LDYgKzQ0MTQsMTEgQEAgcmVsZWFzZV9jb25uX2FkZHJpbmZv KFBHY29ubiAqY29ubikKIHN0YXRpYyB2b2lkCiBzZW5kVGVybWluYXRlQ29ubihQR2Nvbm4gKmNv bm4pCiB7CisJaWYgKGNvbm4tPmNhbmNlbFJlcXVlc3QpCisJeworCQlyZXR1cm47CisJfQorCiAJ LyoKIAkgKiBOb3RlIHRoYXQgdGhlIHByb3RvY29sIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZCBU ZXJtaW5hdGUgbWVzc2FnZXMKIAkgKiBkdXJpbmcgdGhlIHN0YXJ0dXAgcGhhc2UuCkBAIC00MzEx LDYgKzQ1MzYsMTIgQEAgUFFyZXNldFN0YXJ0KFBHY29ubiAqY29ubikKIAl7CiAJCWNsb3NlUEdj b25uKGNvbm4pOwogCisJCWlmIChjb25uLT5jYW5jZWxSZXF1ZXN0KQorCQl7CisJCQljb25uLT5z dGF0dXMgPSBDT05ORUNUSU9OX1NUQVJUSU5HOworCQkJcmV0dXJuIDE7CisJCX0KKwogCQlyZXR1 cm4gY29ubmVjdERCU3RhcnQoY29ubik7CiAJfQogCkBAIC00NjYzLDYgKzQ4OTQsMjIgQEAgY2Fu Y2VsX2VyclJldHVybjoKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBQUWNvbm5lY3RDb21w bGV0ZTogdGFrZXMgYSBub24gYmxvY2tpbmcgY2FuY2VsIGNvbm5lY3Rpb24gYW5kIGNvbXBsZXRl cyBpdAorICogaW4gYSBibG9ja2luZyBtYW5uZXIuCisgKgorICogUmV0dXJucyAxIGlmIGFibGUg dG8gY29ubmVjdCBzdWNjZXNzZnVsbHkgYW5kIDAgaWYgbm90LgorICoKKyAqIFRoaXMgY2FuIHVz ZWZ1bCBpZiB5b3Ugb25seSBjYXJlIGFib3V0IHRoZSB0aHJlYWQgc2FmZXR5IG9mCisgKiBQUXJl cXVlc3RDYW5jZWxTdGFydCBhbmQgbm90IGFib3V0IGl0cyBub24gYmxvY2tpbmcgZnVuY3Rpb25h bGl0eS4KKyAqLworaW50CitQUWNvbm5lY3RDb21wbGV0ZShQR2Nvbm4gKmNhbmNlbENvbm4pCit7 CisJY29ubmVjdERCQ29tcGxldGUoY2FuY2VsQ29ubik7CisJcmV0dXJuIGNhbmNlbENvbm4tPnN0 YXR1cyAhPSBDT05ORUNUSU9OX0JBRDsKK30KKwogCiAvKgogICogUFFyZXF1ZXN0Q2FuY2VsOiBv bGQsIG5vdCB0aHJlYWQtc2FmZSBmdW5jdGlvbiBmb3IgcmVxdWVzdGluZyBxdWVyeSBjYW5jZWwK QEAgLTQ2NzksNDUgKzQ5MjYsMzEgQEAgY2FuY2VsX2VyclJldHVybjoKIGludAogUFFyZXF1ZXN0 Q2FuY2VsKFBHY29ubiAqY29ubikKIHsKLQlpbnQJCQlyOwotCVBHY2FuY2VsICAgKmNhbmNlbDsK LQotCS8qIENoZWNrIHdlIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uICovCi0JaWYgKCFjb25uKQot CQlyZXR1cm4gZmFsc2U7CisJUEdjb25uCSAgICpjYW5jZWxDb25uID0gTlVMTDsKIAotCWlmIChj b25uLT5zb2NrID09IFBHSU5WQUxJRF9TT0NLRVQpCisJY2FuY2VsQ29ubiA9IFBRcmVxdWVzdENh bmNlbFN0YXJ0KGNvbm4pOworCWlmICghY2FuY2VsQ29ubikKIAl7Ci0JCXN0cmxjcHkoY29ubi0+ ZXJyb3JNZXNzYWdlLmRhdGEsCi0JCQkJIlBRcmVxdWVzdENhbmNlbCgpIC0tIGNvbm5lY3Rpb24g aXMgbm90IG9wZW5cbiIsCi0JCQkJY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7Ci0JCWNvbm4t PmVycm9yTWVzc2FnZS5sZW4gPSBzdHJsZW4oY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEpOwotCQlj b25uLT5lcnJvclJlcG9ydGVkID0gMDsKLQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ ZXJyb3JNZXNzYWdlLCBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVtb3J5XG4iKSk7CiAJCXJldHVy biBmYWxzZTsKIAl9CiAKLQljYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKLQlpZiAoY2FuY2Vs KQotCXsKLQkJciA9IFBRY2FuY2VsKGNhbmNlbCwgY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEsCi0J CQkJCSBjb25uLT5lcnJvck1lc3NhZ2UubWF4bGVuKTsKLQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7 Ci0JfQotCWVsc2UKKwlpZiAoY2FuY2VsQ29ubi0+c3RhdHVzID09IENPTk5FQ1RJT05fQkFEKQog CXsKLQkJc3RybGNweShjb25uLT5lcnJvck1lc3NhZ2UuZGF0YSwgIm91dCBvZiBtZW1vcnkiLAot CQkJCWNvbm4tPmVycm9yTWVzc2FnZS5tYXhsZW4pOwotCQlyID0gZmFsc2U7CisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENv bm4pKTsKKwkJZnJlZVBHY29ubihjYW5jZWxDb25uKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAot CWlmICghcikKKwlpZiAoIVBRY29ubmVjdENvbXBsZXRlKGNhbmNlbENvbm4pKQogCXsKLQkJY29u bi0+ZXJyb3JNZXNzYWdlLmxlbiA9IHN0cmxlbihjb25uLT5lcnJvck1lc3NhZ2UuZGF0YSk7Ci0J CWNvbm4tPmVycm9yUmVwb3J0ZWQgPSAwOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ ZXJyb3JNZXNzYWdlLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJCWZyZWVQR2Nvbm4o Y2FuY2VsQ29ubik7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gcjsKKwlmcmVlUEdj b25uKGNhbmNlbENvbm4pOworCXJldHVybiB0cnVlOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2MuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLW1pc2Mu YwppbmRleCBkNzZiYjM5NTdhLi5hOTQ0Y2IyYzEyIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1taXNjLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCkBA IC01NTgsOCArNTU4LDExIEBAIHBxUHV0TXNnRW5kKFBHY29ubiAqY29ubikKICAqIFBvc3NpYmxl IHJldHVybiB2YWx1ZXM6CiAgKgkgMTogc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhdCBsZWFzdCBvbmUg bW9yZSBieXRlCiAgKgkgMDogbm8gZGF0YSBpcyBwcmVzZW50bHkgYXZhaWxhYmxlLCBidXQgbm8g ZXJyb3IgZGV0ZWN0ZWQKLSAqCS0xOiBlcnJvciBkZXRlY3RlZCAoaW5jbHVkaW5nIEVPRiA9IGNv bm5lY3Rpb24gY2xvc3VyZSk7CisgKgktMTogZXJyb3IgZGV0ZWN0ZWQgKGV4Y2x1ZGluZyBFT0Yg PSBjb25uZWN0aW9uIGNsb3N1cmUpOwogICoJCWNvbm4tPmVycm9yTWVzc2FnZSBzZXQKKyAqCS0y OiBFT0YgZGV0ZWN0ZWQsIGNvbm5lY3Rpb24gaXMgY2xvc2VkCisgKgkJY29ubi0+ZXJyb3JNZXNz YWdlIHNldAorICoKICAqIE5PVEU6IGNhbGxlcnMgbXVzdCBub3QgYXNzdW1lIHRoYXQgcG9pbnRl cnMgb3IgaW5kZXhlcyBpbnRvIGNvbm4tPmluQnVmZmVyCiAgKiByZW1haW4gdmFsaWQgYWNyb3Nz IHRoaXMgY2FsbCEKICAqIC0tLS0tLS0tLS0KQEAgLTY0Miw3ICs2NDUsNyBAQCByZXRyeTM6CiAK IAkJCWRlZmF1bHQ6CiAJCQkJLyogcHFzZWN1cmVfcmVhZCBzZXQgdGhlIGVycm9yIG1lc3NhZ2Ug Zm9yIHVzICovCi0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiBucmVhZDsKIAkJfQogCX0KIAlp ZiAobnJlYWQgPiAwKQpAQCAtNzM3LDcgKzc0MCw3IEBAIHJldHJ5NDoKIAogCQkJZGVmYXVsdDoK IAkJCQkvKiBwcXNlY3VyZV9yZWFkIHNldCB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdXMgKi8KLQkJ CQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIG5yZWFkOwogCQl9CiAJfQogCWlmIChucmVhZCA+IDAp CkBAIC03NTUsMTMgKzc1OCwxNyBAQCBkZWZpbml0ZWx5RU9GOgogCQkJCQkJIGxpYnBxX2dldHRl eHQoInNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5XG4iCiAJCQkJCQkJ CQkgICAiXHRUaGlzIHByb2JhYmx5IG1lYW5zIHRoZSBzZXJ2ZXIgdGVybWluYXRlZCBhYm5vcm1h bGx5XG4iCiAJCQkJCQkJCQkgICAiXHRiZWZvcmUgb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVx dWVzdC5cbiIpKTsKKwkvKiBEbyAqbm90KiBkcm9wIGFueSBhbHJlYWR5LXJlYWQgZGF0YTsgY2Fs bGVyIHN0aWxsIHdhbnRzIGl0ICovCisJcHFEcm9wQ29ubmVjdGlvbihjb25uLCBmYWxzZSk7CisJ Y29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CS8qIE5vIG1vcmUgY29ubmVjdGlvbiB0byBi YWNrZW5kICovCisJcmV0dXJuIC0yOwogCiAJLyogQ29tZSBoZXJlIGlmIGxvd2VyLWxldmVsIGNv ZGUgYWxyZWFkeSBzZXQgYSBzdWl0YWJsZSBlcnJvck1lc3NhZ2UgKi8KIGRlZmluaXRlbHlGYWls ZWQ6CiAJLyogRG8gKm5vdCogZHJvcCBhbnkgYWxyZWFkeS1yZWFkIGRhdGE7IGNhbGxlciBzdGls bCB3YW50cyBpdCAqLwogCXBxRHJvcENvbm5lY3Rpb24oY29ubiwgZmFsc2UpOwogCWNvbm4tPnN0 YXR1cyA9IENPTk5FQ1RJT05fQkFEOwkvKiBObyBtb3JlIGNvbm5lY3Rpb24gdG8gYmFja2VuZCAq LwotCXJldHVybiAtMTsKKwlyZXR1cm4gbnJlYWQgPCAwID8gbnJlYWQgOiAtMTsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jCmluZGV4IDI0YTU5OGI2ZTQu LjhhMmE3YzExMmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1v cGVuc3NsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYwpA QCAtMjU1LDcgKzI1NSw3IEBAIHJsb29wOgogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbm4t PmVycm9yTWVzc2FnZSwKIAkJCQkJCQkJIGxpYnBxX2dldHRleHQoIlNTTCBjb25uZWN0aW9uIGhh cyBiZWVuIGNsb3NlZCB1bmV4cGVjdGVkbHlcbiIpKTsKIAkJCXJlc3VsdF9lcnJubyA9IEVDT05O UkVTRVQ7Ci0JCQluID0gLTE7CisJCQluID0gLTI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJ CWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNl Y3VyZS5jCmluZGV4IGExZGM3Yjc5NmQuLjk3NzE4MDVkZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNl Y3VyZS5jCkBAIC0yMDEsNiArMjAxLDEyIEBAIHBxc2VjdXJlX2Nsb3NlKFBHY29ubiAqY29ubikK ICAqIE9uIGZhaWx1cmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFwcGVuZGlu ZyBhIHN1aXRhYmxlIG1lc3NhZ2UKICAqIHRvIGNvbm4tPmVycm9yTWVzc2FnZS4gIFRoZSBjYWxs ZXIgbXVzdCBzdGlsbCBpbnNwZWN0IGVycm5vLCBidXQgb25seQogICogdG8gZGV0ZXJtaW5lIHdo ZXRoZXIgdG8gY29udGludWUvcmV0cnkgYWZ0ZXIgZXJyb3IuCisgKgorICogUmV0dXJucyAtMSBp biBjYXNlIG9mIGZhaWx1cmVzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2Ygd2hlcmUgYSBmYWlsdXJl IG1lYW5zCisgKiB0aGF0IHRoZXJlIHdhcyBhIGNsZWFuIGNvbm5lY3Rpb24gY2xvc3VyZSwgaW4g dGhvc2UgY2FzZXMgLTIgaXMgcmV0dXJuLgorICogQ3VycmVudGx5IG9ubHkgdGhlIFRMUyBpbXBs ZW1lbnRhdGlvbiBvZiBwcXNlY3VyZV9yZWFkIGV2ZXIgcmV0dXJucyAtMi4gRm9yCisgKiB0aGUg b3RoZXIgaW1wbGVtZW50YXRpb25zIGEgY2xlYW4gY29ubmVjdGlvbiBjbG9zdXJlIGlzIGRldGVj dGVkIGluCisgKiBwcVJlYWREYXRhIGluc3RlYWQuCiAgKi8KIHNzaXplX3QKIHBxc2VjdXJlX3Jl YWQoUEdjb25uICpjb25uLCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEt ZmUuaAppbmRleCA3OTg2NDQ1ZjFhLi4yNDY5NWE2MDI2IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZl LmgKQEAgLTU5LDEyICs1OSwxNSBAQCB0eXBlZGVmIGVudW0KIHsKIAlDT05ORUNUSU9OX09LLAog CUNPTk5FQ1RJT05fQkFELAorCUNPTk5FQ1RJT05fQ0FOQ0VMX0ZJTklTSEVELAogCS8qIE5vbi1i bG9ja2luZyBtb2RlIG9ubHkgYmVsb3cgaGVyZSAqLwogCiAJLyoKIAkgKiBUaGUgZXhpc3RlbmNl IG9mIHRoZXNlIHNob3VsZCBuZXZlciBiZSByZWxpZWQgdXBvbiAtIHRoZXkgc2hvdWxkIG9ubHkK IAkgKiBiZSB1c2VkIGZvciB1c2VyIGZlZWRiYWNrIG9yIHNpbWlsYXIgcHVycG9zZXMuCiAJICov CisJQ09OTkVDVElPTl9TVEFSVElORywJCS8qIFdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gYXR0ZW1w dCB0byBiZQorCQkJCQkJCQkgKiBzdGFydGVkLiAgKi8KIAlDT05ORUNUSU9OX1NUQVJURUQsCQkJ LyogV2FpdGluZyBmb3IgY29ubmVjdGlvbiB0byBiZSBtYWRlLiAgKi8KIAlDT05ORUNUSU9OX01B REUsCQkJLyogQ29ubmVjdGlvbiBPSzsgd2FpdGluZyB0byBzZW5kLiAgICAgKi8KIAlDT05ORUNU SU9OX0FXQUlUSU5HX1JFU1BPTlNFLAkvKiBXYWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gdGhl CkBAIC0yODIsNiArMjg1LDcgQEAgZXh0ZXJuIFBHY29ubiAqUFFjb25uZWN0U3RhcnQoY29uc3Qg Y2hhciAqY29ubmluZm8pOwogZXh0ZXJuIFBHY29ubiAqUFFjb25uZWN0U3RhcnRQYXJhbXMoY29u c3QgY2hhciAqY29uc3QgKmtleXdvcmRzLAogCQkJCQkJCQkJY29uc3QgY2hhciAqY29uc3QgKnZh bHVlcywgaW50IGV4cGFuZF9kYm5hbWUpOwogZXh0ZXJuIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5 cGUgUFFjb25uZWN0UG9sbChQR2Nvbm4gKmNvbm4pOworZXh0ZXJuIGludAlQUWNvbm5lY3RDb21w bGV0ZShQR2Nvbm4gKmNvbm4pOwogCiAvKiBTeW5jaHJvbm91cyAoYmxvY2tpbmcpICovCiBleHRl cm4gUEdjb25uICpQUWNvbm5lY3RkYihjb25zdCBjaGFyICpjb25uaW5mbyk7CkBAIC0zMzAsOSAr MzM0LDEyIEBAIGV4dGVybiB2b2lkIFBRZnJlZUNhbmNlbChQR2NhbmNlbCAqY2FuY2VsKTsKIC8q IGlzc3VlIGEgY2FuY2VsIHJlcXVlc3QgKi8KIGV4dGVybiBpbnQJUFFjYW5jZWwoUEdjYW5jZWwg KmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiAKLS8qIGJhY2t3YXJkcyBj b21wYXRpYmxlIHZlcnNpb24gb2YgUFFjYW5jZWw7IG5vdCB0aHJlYWQtc2FmZSAqLworLyogbW9y ZSBzZWN1cmUgdmVyc2lvbiBvZiBQUWNhbmNlbDsgbm90IHRocmVhZC1zYWZlICovCiBleHRlcm4g aW50CVBRcmVxdWVzdENhbmNlbChQR2Nvbm4gKmNvbm4pOwogCisvKiBub24tYmxvY2tpbmcgYW5k IHRocmVhZC1zYWZlIHZlcnNpb24gb2YgUFFyZXF1ZXN0Q2FuY2VsICovCitleHRlcm4gUEdjb25u ICpQUXJlcXVlc3RDYW5jZWxTdGFydChQR2Nvbm4gKmNvbm4pOworCiAvKiBBY2Nlc3NvciBmdW5j dGlvbnMgZm9yIFBHY29ubiBvYmplY3RzICovCiBleHRlcm4gY2hhciAqUFFkYihjb25zdCBQR2Nv bm4gKmNvbm4pOwogZXh0ZXJuIGNoYXIgKlBRdXNlcihjb25zdCBQR2Nvbm4gKmNvbm4pOwpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggYi9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaAppbmRleCBlMGNlZTRiMTQyLi41MGI2YTdiYzdkIDEwMDY0NAot LS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaApAQCAtMzk0LDYgKzM5NCwxMCBAQCBzdHJ1Y3QgcGdfY29ubgog CWNoYXIJICAgKnNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbjsJLyogbWF4aW11bSBUTFMgcHJvdG9j b2wgdmVyc2lvbiAqLwogCWNoYXIJICAgKnRhcmdldF9zZXNzaW9uX2F0dHJzOwkvKiBkZXNpcmVk IHNlc3Npb24gcHJvcGVydGllcyAqLwogCisJYm9vbAkJY2FuY2VsUmVxdWVzdDsJLyogdHJ1ZSBp ZiB0aGlzIGNvbm5lY3Rpb24gaXMgdXNlZCB0byBzZW5kIGEKKwkJCQkJCQkJICogY2FuY2VsIHJl cXVlc3QsIGluc3RlYWQgb2YgYmVpbmcgYSBub3JtYWwKKwkJCQkJCQkJICogY29ubmVjdGlvbiB0 aGF0J3MgdXNlZCBmb3IgcXVlcmllcyAqLworCiAJLyogT3B0aW9uYWwgZmlsZSB0byB3cml0ZSB0 cmFjZSBpbmZvIHRvICovCiAJRklMRQkgICAqUGZkZWJ1ZzsKIAlpbnQJCQl0cmFjZUZsYWdzOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jIGIvc3JjL3Rl c3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jCmluZGV4IDEyMTc5ZjI1MTQuLmIwNzMyMzUx OTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb250ZXN0ZXIuYworKysg Yi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVyLmMKQEAgLTk0OCwyNiArOTQ4LDE4 IEBAIHRyeV9jb21wbGV0ZV9zdGVwKFRlc3RTcGVjICp0ZXN0c3BlYywgUGVybXV0YXRpb25TdGVw ICpwc3RlcCwgaW50IGZsYWdzKQogCQkJICovCiAJCQlpZiAodGQgPiBtYXhfc3RlcF93YWl0ICYm ICFjYW5jZWxlZCkKIAkJCXsKLQkJCQlQR2NhbmNlbCAgICpjYW5jZWwgPSBQUWdldENhbmNlbChj b25uKTsKLQotCQkJCWlmIChjYW5jZWwgIT0gTlVMTCkKKwkJCQlpZiAoUFFyZXF1ZXN0Q2FuY2Vs KGNvbm4pKQogCQkJCXsKLQkJCQkJY2hhcgkJYnVmWzI1Nl07Ci0KLQkJCQkJaWYgKFBRY2FuY2Vs KGNhbmNlbCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCQkJCXsKLQkJCQkJCS8qCi0JCQkJCQkgKiBw cmludCB0byBzdGRvdXQgbm90IHN0ZGVyciwgYXMgdGhpcyBzaG91bGQgYXBwZWFyCi0JCQkJCQkg KiBpbiB0aGUgdGVzdCBjYXNlJ3MgcmVzdWx0cwotCQkJCQkJICovCi0JCQkJCQlwcmludGYoImlz b2xhdGlvbnRlc3RlcjogY2FuY2VsaW5nIHN0ZXAgJXMgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwKLQkJ CQkJCQkgICBzdGVwLT5uYW1lLCAoaW50KSAodGQgLyBVU0VDU19QRVJfU0VDKSk7Ci0JCQkJCQlj YW5jZWxlZCA9IHRydWU7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQkJZnByaW50ZihzdGRlcnIs ICJQUWNhbmNlbCBmYWlsZWQ6ICVzXG4iLCBidWYpOwotCQkJCQlQUWZyZWVDYW5jZWwoY2FuY2Vs KTsKKwkJCQkJLyoKKwkJCQkJICogcHJpbnQgdG8gc3Rkb3V0IG5vdCBzdGRlcnIsIGFzIHRoaXMg c2hvdWxkIGFwcGVhciBpbgorCQkJCQkgKiB0aGUgdGVzdCBjYXNlJ3MgcmVzdWx0cworCQkJCQkg Ki8KKwkJCQkJcHJpbnRmKCJpc29sYXRpb250ZXN0ZXI6IGNhbmNlbGluZyBzdGVwICVzIGFmdGVy ICVkIHNlY29uZHNcbiIsCisJCQkJCQkgICBzdGVwLT5uYW1lLCAoaW50KSAodGQgLyBVU0VDU19Q RVJfU0VDKSk7CisJCQkJCWNhbmNlbGVkID0gdHJ1ZTsKIAkJCQl9CisJCQkJZWxzZQorCQkJCQlm cHJpbnRmKHN0ZGVyciwgIlBRY2FuY2VsIGZhaWxlZDogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKIAkJCX0KIAogCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbGlicHFf cGlwZWxpbmUvbGlicHFfcGlwZWxpbmUuYyBiL3NyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlwZWxp bmUvbGlicHFfcGlwZWxpbmUuYwppbmRleCAwZmY1NjNmNTlhLi5lZDYyNWQ0ODZlIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCkBAIC04 Niw2ICs4NiwyMzAgQEAgcGdfZmF0YWxfaW1wbChpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LC4u LikKIAlleGl0KDEpOwogfQogCisvKgorICogQ2hlY2sgdGhhdCB0aGUgcXVlcnkgb24gdGhlIGdp dmVuIGNvbm5lY3Rpb24gZ290IGNhbmNlbGxlZC4KKyAqCisgKiBUaGlzIGlzIGEgZnVuY3Rpb24g d3JhcHBlZCBpbiBhIG1hY3JjbyB0byBtYWtlIHRoZSByZXBvcnRlZCBsaW5lIG51bWJlcgorICog aW4gYW4gZXJyb3IgbWF0Y2ggdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBpbnZvY2F0aW9uLgorICov CisjZGVmaW5lIGNvbmZpcm1fcXVlcnlfY2FuY2VsbGVkKGNvbm4pIGNvbmZpcm1fcXVlcnlfY2Fu Y2VsbGVkX2ltcGwoX19MSU5FX18sIGNvbm4pCitzdGF0aWMgdm9pZAorY29uZmlybV9xdWVyeV9j YW5jZWxsZWRfaW1wbChpbnQgbGluZSwgUEdjb25uICpjb25uKQoreworCVBHcmVzdWx0ICAgKnJl cyA9IE5VTEw7CisKKwlyZXMgPSBQUWdldFJlc3VsdChjb25uKTsKKwlpZiAocmVzID09IE5VTEwp CisJCXBnX2ZhdGFsX2ltcGwobGluZSwgIlBRZ2V0UmVzdWx0IHJldHVybmVkIG51bGw6ICVzIiwK KwkJCQkJICBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg IT0gUEdSRVNfRkFUQUxfRVJST1IpCisJCXBnX2ZhdGFsX2ltcGwobGluZSwgInF1ZXJ5IGRpZCBu b3QgZmFpbCB3aGVuIGl0IHdhcyBleHBlY3RlZCIpOworCWlmIChzdHJjbXAoUFFyZXN1bHRFcnJv ckZpZWxkKHJlcywgUEdfRElBR19TUUxTVEFURSksICI1NzAxNCIpICE9IDApCisJCXBnX2ZhdGFs X2ltcGwobGluZSwgInF1ZXJ5IGZhaWxlZCB3aXRoIGEgZGlmZmVyZW50IGVycm9yIHRoYW4gY2Fu Y2VsbGF0aW9uOiAlcyIsCisJCQkJCSAgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCVBRY2xlYXIo cmVzKTsKKwl3aGlsZSAoUFFpc0J1c3koY29ubikpCisJeworCQlQUWNvbnN1bWVJbnB1dChjb25u KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2NhbmNlbChQR2Nvbm4gKmNvbm4pCit7CisJ UEdjYW5jZWwgICAqY2FuY2VsID0gTlVMTDsKKwlQR2Nvbm4JICAgKmNhbmNlbENvbm4gPSBOVUxM OworCWNoYXIJCWVycm9yYnVmWzI1Nl07CisKKwlmcHJpbnRmKHN0ZGVyciwgInRlc3QgY2FuY2Vs bGF0aW9ucy4uLiAiKTsKKworCWlmIChQUXNldG5vbmJsb2NraW5nKGNvbm4sIDEpICE9IDApCisJ CXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2V0IG5vbmJsb2NraW5nIG1vZGU6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOworCisJLyogdGVzdCBQUWNhbmNlbCAqLworCWlmIChQUXNlbmRRdWVyeShj b25uLCAiU0VMRUNUIHBnX3NsZWVwKDEwKSIpICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g c2VuZCBxdWVyeTogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJcGdfdXNsZWVwKDEwMDAw KTsKKwljYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwlpZiAoIVBRY2FuY2VsKGNhbmNlbCwg ZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpKQorCXsKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBy dW4gUFFjYW5jZWw6ICVzIiwgZXJyb3JidWYpOworCX07CisJY29uZmlybV9xdWVyeV9jYW5jZWxs ZWQoY29ubik7CisKKwkvKiBQR2NhbmNlbCBvYmplY3QgY2FuIGJlIHJldXNlZCBmb3IgdGhlIG5l eHQgcXVlcnkgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwgIlNFTEVDVCBwZ19zbGVlcCgxMCki KSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOworCXBnX3VzbGVlcCgxMDAwMCk7CisJaWYgKCFQUWNhbmNlbChjYW5jZWws IGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKSkKKwl7CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g cnVuIFBRY2FuY2VsOiAlcyIsIGVycm9yYnVmKTsKKwl9OworCWNvbmZpcm1fcXVlcnlfY2FuY2Vs bGVkKGNvbm4pOworCisJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisKKwkvKiB0ZXN0IFBRcmVxdWVz dENhbmNlbCAqLworCWlmIChQUXNlbmRRdWVyeShjb25uLCAiU0VMRUNUIHBnX3NsZWVwKDEwKSIp ICE9IDEpCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2VuZCBxdWVyeTogJXMiLCBQUWVycm9yTWVz c2FnZShjb25uKSk7CisJcGdfdXNsZWVwKDEwMDAwKTsKKwlpZiAoIVBRcmVxdWVzdENhbmNlbChj b25uKSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBydW4gUFFyZXF1ZXN0Q2FuY2VsOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwljb25maXJtX3F1ZXJ5X2NhbmNlbGxlZChjb25uKTsKKwor CS8qIHRlc3QgUFFyZXF1ZXN0Q2FuY2VsU3RhcnQgYW5kIHRoZW4gcG9sbGluZyB3aXRoIFBRY2Fu Y2VsQ29ubmVjdFBvbGwgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwgIlNFTEVDVCBwZ19zbGVl cCgxMCkiKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFl cnJvck1lc3NhZ2UoY29ubikpOworCXBnX3VzbGVlcCgxMDAwMCk7CisJY2FuY2VsQ29ubiA9IFBR cmVxdWVzdENhbmNlbFN0YXJ0KGNvbm4pOworCWlmIChQUXN0YXR1cyhjYW5jZWxDb25uKSA9PSBD T05ORUNUSU9OX0JBRCkKKwkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQ UWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJd2hpbGUgKHRydWUpCisJeworCQlzdHJ1Y3Qg dGltZXZhbCB0djsKKwkJZmRfc2V0CQlpbnB1dF9tYXNrOworCQlmZF9zZXQJCW91dHB1dF9tYXNr OworCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHBvbGxyZXMgPSBQUWNvbm5lY3RQb2xsKGNh bmNlbENvbm4pOworCQlpbnQJCQlzb2NrID0gUFFzb2NrZXQoY2FuY2VsQ29ubik7CisKKwkJaWYg KHBvbGxyZXMgPT0gUEdSRVNfUE9MTElOR19PSykKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQlG RF9aRVJPKCZpbnB1dF9tYXNrKTsKKwkJRkRfWkVSTygmb3V0cHV0X21hc2spOworCQlzd2l0Y2gg KHBvbGxyZXMpCisJCXsKKwkJCWNhc2UgUEdSRVNfUE9MTElOR19SRUFESU5HOgorCQkJCXBnX2Rl YnVnKCJwb2xsaW5nIGZvciByZWFkc1xuIik7CisJCQkJRkRfU0VUKHNvY2ssICZpbnB1dF9tYXNr KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEdSRVNfUE9MTElOR19XUklUSU5HOgorCQkJCXBnX2Rl YnVnKCJwb2xsaW5nIGZvciB3cml0ZXNcbiIpOworCQkJCUZEX1NFVChzb2NrLCAmb3V0cHV0X21h c2spOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwZ19mYXRhbCgiYmFkIGNhbmNlbCBj b25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwkJfQorCisJCWlm IChzb2NrIDwgMCkKKwkJCXBnX2ZhdGFsKCJzb2NrIGRpZCBub3QgZXhpc3Q6ICVzIiwgUFFlcnJv ck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCisJCXR2LnR2X3NlYyA9IDM7CisJCXR2LnR2X3VzZWMg PSAwOworCisJCXdoaWxlICh0cnVlKQorCQl7CisJCQlpZiAoc2VsZWN0KHNvY2sgKyAxLCAmaW5w dXRfbWFzaywgJm91dHB1dF9tYXNrLCBOVUxMLCAmdHYpIDwgMCkKKwkJCXsKKwkJCQlpZiAoZXJy bm8gPT0gRUlOVFIpCisJCQkJCWNvbnRpbnVlOworCQkJCXBnX2ZhdGFsKCJzZWxlY3QoKSBmYWls ZWQ6ICVtIik7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoUFFzdGF0dXMoY2FuY2Vs Q29ubikgIT0gQ09OTkVDVElPTl9DQU5DRUxfRklOSVNIRUQpCisJCXBnX2ZhdGFsKCJ1bmV4cGVj dGVkIGNhbmNlbCBjb25uZWN0aW9uIHN0YXR1czogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxD b25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoY29ubik7CisKKwkvKgorCSAqIHRlc3Qg UFFyZXNldFN0YXJ0IHdvcmtzIG9uIHRoZSBjYW5jZWwgY29ubmVjdGlvbiBhbmQgaXQgY2FuIGJl IHJldXNlZAorCSAqIGFmdGVyCisJICovCisJaWYgKCFQUXJlc2V0U3RhcnQoY2FuY2VsQ29ubikp CisJeworCQlwZ19mYXRhbCgiY2FuY2VsIGNvbm5lY3Rpb24gcmVzZXQgZmFpbGVkOiAlcyIsIFBR ZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwl9CisKKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwg IlNFTEVDVCBwZ19zbGVlcCgxMCkiKSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQg cXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCXBnX3VzbGVlcCgxMDAwMCk7CisJ aWYgKFBRc3RhdHVzKGNhbmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQlwZ19mYXRhbCgi YmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsK Kwl3aGlsZSAodHJ1ZSkKKwl7CisJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlmZF9zZXQJCWlucHV0 X21hc2s7CisJCWZkX3NldAkJb3V0cHV0X21hc2s7CisJCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5 cGUgcG9sbHJlcyA9IFBRcmVzZXRQb2xsKGNhbmNlbENvbm4pOworCQlpbnQJCQlzb2NrID0gUFFz b2NrZXQoY2FuY2VsQ29ubik7CisKKwkJaWYgKHBvbGxyZXMgPT0gUEdSRVNfUE9MTElOR19PSykK KwkJeworCQkJYnJlYWs7CisJCX0KKworCQlGRF9aRVJPKCZpbnB1dF9tYXNrKTsKKwkJRkRfWkVS Tygmb3V0cHV0X21hc2spOworCQlzd2l0Y2ggKHBvbGxyZXMpCisJCXsKKwkJCWNhc2UgUEdSRVNf UE9MTElOR19SRUFESU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciByZWFkc1xuIik7CisJ CQkJRkRfU0VUKHNvY2ssICZpbnB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEdSRVNf UE9MTElOR19XUklUSU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciB3cml0ZXNcbiIpOwor CQkJCUZEX1NFVChzb2NrLCAmb3V0cHV0X21hc2spOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoK KwkJCQlwZ19mYXRhbCgiYmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRZXJyb3JNZXNzYWdl KGNhbmNlbENvbm4pKTsKKwkJfQorCisJCWlmIChzb2NrIDwgMCkKKwkJCXBnX2ZhdGFsKCJzb2Nr IGRpZCBub3QgZXhpc3Q6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikpOworCisJCXR2 LnR2X3NlYyA9IDM7CisJCXR2LnR2X3VzZWMgPSAwOworCisJCXdoaWxlICh0cnVlKQorCQl7CisJ CQlpZiAoc2VsZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywgJm91dHB1dF9tYXNrLCBOVUxMLCAm dHYpIDwgMCkKKwkJCXsKKwkJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJCWNvbnRpbnVlOwor CQkJCXBnX2ZhdGFsKCJzZWxlY3QoKSBmYWlsZWQ6ICVtIik7CisJCQl9CisJCQlicmVhazsKKwkJ fQorCX0KKwlpZiAoUFFzdGF0dXMoY2FuY2VsQ29ubikgIT0gQ09OTkVDVElPTl9DQU5DRUxfRklO SVNIRUQpCisJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNhbmNlbCBjb25uZWN0aW9uIHN0YXR1czog JXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxs ZWQoY29ubik7CisKKwlQUWZpbmlzaChjYW5jZWxDb25uKTsKKworCS8qIHRlc3QgUFFjb25uZWN0 Q29tcGxldGUgKi8KKwlpZiAoUFFzZW5kUXVlcnkoY29ubiwgIlNFTEVDVCBwZ19zbGVlcCgxMCki KSAhPSAxKQorCQlwZ19mYXRhbCgiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOworCXBnX3VzbGVlcCgxMDAwMCk7CisJY2FuY2VsQ29ubiA9IFBRcmVxdWVz dENhbmNlbFN0YXJ0KGNvbm4pOworCWlmIChQUXN0YXR1cyhjYW5jZWxDb25uKSA9PSBDT05ORUNU SU9OX0JBRCkKKwkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVycm9y TWVzc2FnZShjYW5jZWxDb25uKSk7CisJaWYgKCFQUWNvbm5lY3RDb21wbGV0ZShjYW5jZWxDb25u KSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBzZW5kIGNhbmNlbDogJXMiLCBQUWVycm9yTWVzc2Fn ZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoY29ubik7CisKKwkvKiB0 ZXN0IFBRY29ubmVjdENvbXBsZXRlIHdpdGggcmVzZXQgY29ubmVjdGlvbiAqLworCWlmICghUFFy ZXNldFN0YXJ0KGNhbmNlbENvbm4pKQorCXsKKwkJcGdfZmF0YWwoImNhbmNlbCBjb25uZWN0aW9u IHJlc2V0IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJfQorCisJ aWYgKFBRc2VuZFF1ZXJ5KGNvbm4sICJTRUxFQ1QgcGdfc2xlZXAoMTApIikgIT0gMSkKKwkJcGdf ZmF0YWwoImZhaWxlZCB0byBzZW5kIHF1ZXJ5OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsK KwlwZ191c2xlZXAoMTAwMDApOworCWlmIChQUXN0YXR1cyhjYW5jZWxDb25uKSA9PSBDT05ORUNU SU9OX0JBRCkKKwkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWVycm9y TWVzc2FnZShjYW5jZWxDb25uKSk7CisJaWYgKCFQUWNvbm5lY3RDb21wbGV0ZShjYW5jZWxDb25u KSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBzZW5kIGNhbmNlbDogJXMiLCBQUWVycm9yTWVzc2Fn ZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVyeV9jYW5jZWxsZWQoY29ubik7CisJUFFmaW5p c2goY2FuY2VsQ29ubik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIm9rXG4iKTsKK30KKwogc3RhdGlj IHZvaWQKIHRlc3RfZGlzYWxsb3dlZF9pbl9waXBlbGluZShQR2Nvbm4gKmNvbm4pCiB7CkBAIC0x NTQ1LDYgKzE3NjksNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIHN0YXRpYyB2b2lk CiBwcmludF90ZXN0X2xpc3Qodm9pZCkKIHsKKwlwcmludGYoImNhbmNlbFxuIik7CiAJcHJpbnRm KCJkaXNhbGxvd2VkX2luX3BpcGVsaW5lXG4iKTsKIAlwcmludGYoIm11bHRpX3BpcGVsaW5lc1xu Iik7CiAJcHJpbnRmKCJub3N5bmNcbiIpOwpAQCAtMTY0Miw3ICsxODY3LDkgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCQlQUVRSQUNFX1NVUFBSRVNTX1RJTUVTVEFNUFMgfCBQ UVRSQUNFX1JFR1JFU1NfTU9ERSk7CiAJfQogCi0JaWYgKHN0cmNtcCh0ZXN0bmFtZSwgImRpc2Fs bG93ZWRfaW5fcGlwZWxpbmUiKSA9PSAwKQorCWlmIChzdHJjbXAodGVzdG5hbWUsICJjYW5jZWwi KSA9PSAwKQorCQl0ZXN0X2NhbmNlbChjb25uKTsKKwllbHNlIGlmIChzdHJjbXAodGVzdG5hbWUs ICJkaXNhbGxvd2VkX2luX3BpcGVsaW5lIikgPT0gMCkKIAkJdGVzdF9kaXNhbGxvd2VkX2luX3Bp cGVsaW5lKGNvbm4pOwogCWVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgIm11bHRpX3BpcGVsaW5l cyIpID09IDApCiAJCXRlc3RfbXVsdGlfcGlwZWxpbmVzKGNvbm4pOwotLSAKMi4xNy4xCgo= --_002_AM5PR83MB037283BB5E7BE0EEE0016E6BF7E59AM5PR83MB0372EURP_--