From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BD09FA0524; Wed, 2 Jun 2021 15:32:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3EB664069F; Wed, 2 Jun 2021 15:32:21 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2058.outbound.protection.outlook.com [40.107.96.58]) by mails.dpdk.org (Postfix) with ESMTP id AF0D240689 for ; Wed, 2 Jun 2021 15:32:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e+UVI+uv4IlJJBU0OUVYcwmJ2x4VTENBVSC7CY50ixNDexIgc5leQQ3WOC6AIMDNUmx8E8tgAqU4aYm65voX5GhVnbh/wZqkVm2Qy/vbcdbG2EcGzCRLIayHWo5Hz1QmT/uSXFPr9ORPLLTs+6z87AeIhRcOJN/1oV/O6u2O60wErfX8XBpijMEnpgkglT1ri7ANldTqWjeAnieywkl8DE3Wwy/8XvZ0utgWNUnKCXRzr+zY8QUgfQLwPJgA1nYwqOkhH1/rYyze5nPXdKVHnQFcNpxpJSf/4nwtzw7Uzo2HTfeP/2LA6Ru8xgtvhA8bDxMYyRqKMnfkutBPjHzM+Q== 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-SenderADCheck; bh=xlicsr4eCXj8ppcqlz9FnUR9lcUNbVi+zMMMyoqSSrw=; b=O7AufPlCLLJUCgfAMdcBEaD8RbGdbn7dl1HDgTiJO976o1QZYm9bsWFI9kK5Q9HdQtYz2rkcsCLiM4BCdNO8Wp3uMgLYIbK4wLn2ArDrj9A1e2gelez9Cc1YHDI9MD0owDJwucLOYmYp3t7RIaaU/M5do/ZQ4LAt4oKo/OODseiX6Umw7KLwHCOyj364DSd3JNbzzLmURNkJJce9IewEXl9siDXMZxjtgb6k4pkyCtT9HFU89HbMsC4y8W6eQtpkn/jrrK1ZIZe8ohBac4EBVWAXAJMZ9FUb+cKnDTo8wi2msgFa0WR19OiieeBY5u4CzjfzH0Vm/dpd8B1Omow9Xg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xlicsr4eCXj8ppcqlz9FnUR9lcUNbVi+zMMMyoqSSrw=; b=frWOo8gFftUwe/Y1NqsJLmrOmYj345UfvCd47szn064nMBQIB7fNUJjamjbByPLTyfJYJBiUBlcQvGfjC+8cbnEBJeL2OTdbXN39mfQamdUPspca7nTG6H68XtlE9DPOJ9B0Y6mmwVE/uj7C8+4ODKZwKVSyZuolL83CfrnRlznRFUpl4IMYgkdHnfhsmRZFmoaq3XzcGaPGqHlCw+tdq0QYvQjRInW7VpmbrpxdYU1pbgWaN6qvt4WZqp9evljTkn2SGP+KzpQ3oxFJAxmZGXWGAPNk5vLaepvn0It35gQRKvZ4st9jKLuzZvc23e6zzgHrK3+Rm0tpru15QLw2nA== Received: from BL1PR12MB5335.namprd12.prod.outlook.com (2603:10b6:208:317::19) by BL1PR12MB5190.namprd12.prod.outlook.com (2603:10b6:208:31c::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.21; Wed, 2 Jun 2021 13:32:16 +0000 Received: from BL1PR12MB5335.namprd12.prod.outlook.com ([fe80::6130:4ca:e5b6:4a36]) by BL1PR12MB5335.namprd12.prod.outlook.com ([fe80::6130:4ca:e5b6:4a36%7]) with mapi id 15.20.4173.030; Wed, 2 Jun 2021 13:32:15 +0000 From: Ori Kam To: Ivan Malov , "dev@dpdk.org" CC: NBU-Contact-Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko , Ray Kinsella , Neil Horman Thread-Topic: [RFC PATCH] ethdev: add support for testpmd-compliant flow rule dumping Thread-Index: AQHXUtHTVmOnBGTM6UKpSaUBdRK75qr7mK5QgAOg/oCAAYYpoA== Date: Wed, 2 Jun 2021 13:32:15 +0000 Message-ID: References: <20210527082504.3495-1-ivan.malov@oktetlabs.ru> <6175cb60-5d9a-832a-fa07-32326018661c@oktetlabs.ru> In-Reply-To: <6175cb60-5d9a-832a-fa07-32326018661c@oktetlabs.ru> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: oktetlabs.ru; dkim=none (message not signed) header.d=none;oktetlabs.ru; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [2a00:7c40:c360:2a4:4960:ebc5:c7b5:813f] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: de5a27eb-850d-4d8e-ac93-08d925cad649 x-ms-traffictypediagnostic: BL1PR12MB5190: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1148; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mPXfVcvlsxdf1t0SuqlW0Vv5xElGvwiKXaQV8L5Aw3UTwFT+dJozVeC1tSy0018SZzBaTveSEA3ukh8xqhUPqmSvxW9s4StcD0AckU+2H9Cy8Tr2MsMkHCskUDUizIdfIc56h/ZEATsvb1/5qbGiOteWfyQP0gh6g7G3y3LGl0xgYuel4cKHSQoIYEaeye8brWk1d3jIxeod0CAVJ0ubeaZfpVoxW4SCLp6vE19FaGZMzFgZwNkvDar1lgFsjmav0Pgb3f9FWfRLcSi4aMAe72cjIJJ92Fdmk6lf8cZJfq9cWKexCtvjFI4Y05C5/54HPlbNbjpYlYx4k2NdT+uqoI7vmajGXThG5dT08dbZd1ylc83q3piKknCMqUBhf93Dl4xGbX17ceGhU/nmcMrdv4azzkx2xx4sSDNx3Pvr0ds3ZQeM9j+4blld2KxP3n1pM0Rink4KIWkB+NUjcajtTZVktllZ7ZiJrfwTSa1ff0bZWouqLvb25enBq1XPD8lzXKQW7JQnvLBLIZg8xnev2UFN2WDlHHn//ENq6GJJQHLnSeGKLiX15TgNERL/W+gj39et/PU9B8qQzDd1vBvSx7YbEZudtYGNEHQeESxKa08= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL1PR12MB5335.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(39860400002)(136003)(396003)(346002)(8676002)(54906003)(4326008)(110136005)(5660300002)(8936002)(33656002)(478600001)(316002)(83380400001)(53546011)(6506007)(7696005)(71200400001)(66946007)(76116006)(64756008)(66476007)(30864003)(2906002)(66446008)(66556008)(52536014)(122000001)(38100700002)(9686003)(86362001)(55016002)(186003)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?aHVwZnd4YmExeXN2M29UVldUZUxjOTYxYzZMeUZXdTlzcUxiODdPMkEzVUxK?= =?utf-8?B?UWZCRlF2NEJnNjdaT0dmcFUvbkpLQklONDJDYk45QTUvM3kwc0doNlYzWnQ0?= =?utf-8?B?UlU2K2J0TExaUzdTSUJ3Y0RUTHNiczJ4ZnBHV3pJTmh5UzJCbktJNklMeTVQ?= =?utf-8?B?NnpQM1VJV3pmdHJyd2JSUlZibmFNQWIwNm1KcnNUblFPNW42N3BVd2Q3OVpX?= =?utf-8?B?WW1XaE44STNjam9kQU12b2hJTXJ1T1poQWRZTFp6M3dYZS92ZVNJdnVsVHF6?= =?utf-8?B?cDkzOC8vSjRoVVlNNGYzZzAzUjdkamZuZWFFMlA5ek1adU1FQXg1Q3lJRS9H?= =?utf-8?B?dzlHRlBSWHFaWFo3blpOVWl0VDJuM2hJQ3RpRmxEV2JpYkZKRi9ERlVRWmJL?= =?utf-8?B?eUtMcHhEaHNZYTMzSjNnUzZUM3YrZ2E5YnU2Tm93dDVrODRDR21ndTQ4eVNR?= =?utf-8?B?WUZBRU96SlIyaDBuOTVIVUJRaGJocERnc0h0a3huaGRKWm1Wd0lnVm12bnNt?= =?utf-8?B?Q3NkT2YzUll1UFR5YzZEWXR2SW9zdkl3Z2hPdmtMcEIrMHNMUWNtYXhWV0tl?= =?utf-8?B?NHRsWjRPOVUrd1F3cFh1OENpdEFycmNSSzljbXhyTUpjVjNrSS81UEYya1pG?= =?utf-8?B?RVlRc2tWMXQ5UDVveENvOXo4azVTbFBxNFJsRWh3UDQ3Qkk0RExpOWxEYm54?= =?utf-8?B?cUJ2dEpBUXJPeWcxRUZqa2g3VzBXRjNLQjN3SEdWbC9WOTdSNWRiOUVCTnhn?= =?utf-8?B?MzVKVE5NZGQwSjB2QWZuQWpaUFplZ0Z5YklGK1p4cmErY3NxcGxQQjVXRStC?= =?utf-8?B?LzZlZGlUNzRod2xxWUl2c0NXdXN4b1BXOENEQitTU04rSXJXSWw5VHUyOU5w?= =?utf-8?B?OVlNUWVIY0VwNHFRVkdlSUVvdWFrL00zYWxkRldZL0w0TUloNnNMelN1QzRs?= =?utf-8?B?aDdSTU9zcENtcnozbkp0dmlUbEhUTDhlS0lWd3NlWXRhL1ZkeU1NTkdrbFpY?= =?utf-8?B?R0t1UmhtZ3BMcGhnZVBoaDFvdzFCMHVIeitEdGI4MWc0SDF5aUZ0NXRRZjVl?= =?utf-8?B?WitKbFpUS3dDbW5XMlZvOEJoQkFidWJ3T0U4Zi9ocFdIT1ByMmEvZU8wbWtK?= =?utf-8?B?TGVyL3ZUSm9XbEVJcDBwUDVkUDhmWDdic3JpSEhERXpielhTT053bytRd3V1?= =?utf-8?B?c1p3K2FVK0daNkJkUDA4Y0Q4SlU1TWNyRU1hbU1MZFBVa3dpYjc2UENXZkpz?= =?utf-8?B?blBMRCs0bnNpRmFIRVlHYTg1SVJ5ZHk3SE5DanFRamZuNkQ3eklOS1lMRytK?= =?utf-8?B?WHdaanFZaUV2SlZ2Rzd3N0wyQ1p5OHJZWHVGbFdxblZST2g5M3BtUXlCUkM1?= =?utf-8?B?UXAybEhjNTVRVEI5aFh0TjMxSEQwOU9pN1lCU1RPaTdWQk1KRlE0eE1MM2NJ?= =?utf-8?B?bkx6eDdGeGN6NjJhUGhCWTMyem5ZQVlHc0VCNUlBSDBMZEVHV25nYU0yNXJj?= =?utf-8?B?bDNXczFnekEwWlRnV1RMekFMbmdMUm5nL2NzOUhWZjNhd21Ia0ZYSFlMdTBP?= =?utf-8?B?T3JLc2s4ZDF3UzNWQjV6NXF4OVdhQUNmV3FOeWlZZUdzbUxkcWlCQlJ6WWs5?= =?utf-8?B?d3BYUXpmZEZBNWV5cXVzQkNrVE1ubWFkYUVzd0FSVWRaVExIeXdiaFQzRk1S?= =?utf-8?B?SzJwaUlad0FiU1d5VE1GVFdtN1J1QmJEdml4VGhtaExvemY3SmhFOURZaEd5?= =?utf-8?B?VkNOanREV2FGSHJrTFZXejRITE02cTlML0J0TGxaaGNGVnMxcEFRelIvWEhx?= =?utf-8?B?Q0Z1ZTJPSytGSXJlUlp0a2FMYUM2MDVFSStXUXhtSEtHTmpWNHlxcngrelAz?= =?utf-8?Q?C1AF0v5KNCgCk?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL1PR12MB5335.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: de5a27eb-850d-4d8e-ac93-08d925cad649 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jun 2021 13:32:15.5781 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: WO3JhAtyugjtU9FYFz+BrmpHOQG/TKxqKX6Rry+AdMOVqDPV4lBP5OBvs6EIbAUypO8hDQqjXnoaDgKN6m8l9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5190 Subject: Re: [dpdk-dev] [RFC PATCH] ethdev: add support for testpmd-compliant flow rule dumping X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgSXZhbiwNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBJdmFuIE1h bG92IDxJdmFuLk1hbG92QG9rdGV0bGFicy5ydT4NCj4gDQo+IEhpIE9yaSwNCj4gDQo+IFlvdXIg cmV2aWV3IGVmZm9ydHMgYXJlIG11Y2ggYXBwcmVjaWF0ZWQuIEkgdW5kZXJzdGFuZCB5b3VyIGNv bmNlcm4NCj4gYWJvdXQgdGhlIHBhcnRpYWwgaXRlbS9hY3Rpb24gY292ZXJhZ2UsIGJ1dCB0aGVy ZSBhcmUgc29tZSBwb2ludHMgdG8gYmUNCj4gY29uc2lkZXJlZCB3aGVuIGFkZHJlc3NpbmcgaXQ6 DQo+IC0gSXQncyBhbnl3YXkgaGFyZGx5IHBvc3NpYmxlIHRvIHVzZSB0aGUgcHJpbnRlZCBmbG93 IGRpcmVjdGx5IGluDQo+IHRlc3RwbWQgaWYgaXQgY29udGFpbnMgIm9wYXF1ZSIsIG9yICJQTUQt c3BlY2lmaWMiLCBpdGVtcy9hY3Rpb25zIGluDQo+IHRlcm1zIG9mIHRoZSB0dW5uZWwgb2ZmbG9h ZCBtb2RlbC4gVGhlc2UgaXRlbXMvYWN0aW9ucyBoYXZlIHRvIGJlDQo+IG9taXR0ZWQgd2hlbiBw cmludGluZyB0aGUgZmxvdywgYW5kIHRoZWlyIGFic2VuY2UgaW4gdGhlIHJlc3VsdGluZw0KPiBz dHJpbmcgbWVhbnMgdGhhdCBjb3B5L3Bhc3RpbmcgdGhlIGZsb3cgdG8gdGVzdHBtZCBpc24ndCBo ZWxwZnVsIGluIHRoaXMNCj4gcGFydGljdWxhciBjYXNlLg0KSSBmdWxseSBhZ3JlZSB3aXRoIHlv dSB0aGF0IHNvbWUgb2YgdGhlIHJ1bGVzIGNhbid0IGJlIHByaW50ZWQuIFRoYXQgaXMgd2h5Lg0K SSdtIG5vdCBzdXJlIGhhdmluZyBwYXJ0aWFsIHNvbHV0aW9uIGlzIHRoZSB3YXkgdG8gZ28uIElm IE9WUyBmb3IgZXhhbXBsZSBjYXJlcyBhYm91dA0Kc29tZSBvZiB0aGUgaXRlbS9hY3Rpb24sIG1h eWJlIHRoaXMgbG9nIHNob3VsZCBiZSBvbiB0aGVpciBwYXJ0Lg0KDQo+IC0gVGhlcmUncyBhY3Rp b24gRU5DQVAgd2hpY2ggYWxzbyBjYW4ndCBiZSBmdWxseSByZXByZXNlbnRlZCBieSB0aGUgdG9v bA0KPiBpbiBxdWVzdGlvbiwgc2ltcGx5IGJlY2F1c2UgaXQgaGFzIG5vIHBhcmFtZXRlcnMuIElu IHRlc3BtZCwgb25lIGZpcnN0DQo+IGhhcyB0byBpc3N1ZSAic2V0IHZ4bGFuIiBjb21tYW5kIHRv IGNvbmZpZ3VyZSB0aGUgZW5jYXAuIGhlYWRlciwgd2hpbHN0DQo+ICJ2eGxhbiIgdG9rZW4gaW4g dGhlIGZsb3cgcnVsZSBzdHJpbmcganVzdCByZWZlcnMgdG8gdGhlIHByZXZpb3VzbHkgc2V0DQo+ IGVuY2FwLiBwYXJhbWV0ZXJzLiBUaGUgc3VnZ2VzdGVkIGZsb3cgcHJpbnQgaGVscGVyIGNhbid0 IHJlbGlhYmx5IHByaW50DQo+IHRoZXNlIHR3byBjb21wb25lbnRzICgic2V0IHZ4bGFuIiBhbmQg dGhlIGZsb3cgcnVsZSBpdHNlbGYpIGFzIHRoZXkNCj4gYmVsb25nIHRvIGRpZmZlcmVudCB0ZXN0 cG1kIGNvbW1hbmQgc3RyaW5ncy4NCj4gDQpBZ2FpbiwgSSBhZ3JlZSB3aXRoIHlvdSBidXQgbGlr ZSBteSBhYm92ZSBhbnN3ZXIsIGRvIHdlIHdhbnQgYSBwYXJ0aWFsIHNvbHV0aW9uIA0KaW4gRFBE Sz8NCg0KPiBBcyB5b3UgbWlnaHQgc2VlLCBjb21wbGV0ZW5lc3Mgb2YgdGhlIHNvbHV0aW9uIHdv dWxkbid0IG5lY2Vzc2FyaWx5IGJlDQo+IHJlYWNoYWJsZSwgZXZlbiBpZiBmdWxsIGl0ZW0vYWN0 aW9uIGNvdmVyYWdlIHdhcyBwcm92aWRlZC4NCj4gDQo+IEFzIGZvciB0aGUgaXRlbS9hY3Rpb24g Y292ZXJhZ2UgaXRzZWxmLCBpdCdzIHJhdGhlciBjb250cm92ZXJzaWFsLiBPbg0KPiB0aGUgb25l IGhhbmQsIHllcywgd2Ugc2hvdWxkIHByb2JhYmx5IHRyeSB0byBjb3ZlciBtb3JlIGl0ZW1zIGFu ZA0KPiBhY3Rpb25zIGluIHRoZSBzdWdnZXN0ZWQgcGF0Y2gsIHRvIHRoZSBleHRlbnQgYWxsb3dl ZCBieSBvdXIgY3VycmVudA0KPiBwcmlvcml0aWVzLiBCdXQgb24gdGhlIG90aGVyIGhhbmQsIHRo ZSBleGlzdGluZyBjb3ZlcmFnZSBtaWdodCBub3QgYmUNCj4gdGhhdCBwb29yOiBpdCdzIGZhaXJs eSBlbGFib3JhdGUgYW5kIGF0IGxlYXN0IGFsbG93cyB0byBwcmludCB0aGUgbW9zdA0KPiBjb21t b24gZmxvdyBydWxlcy4NCj4gDQpUaGF0IGlzIG15IG1haW4gaXNzdWUgeW91IGFyZSBnb2luZyB0 byBwdXNoIHNvbWV0aGluZyB0aGF0IGlzIGdvb2QgZm9yIHlvdQ0KYW5kIG1heWJlIHNvbWUgb3Ro ZXIgY2FzZXMsIGJ1dCBpdCBjYW4ndCBiZSB1c2VkIGJ5IGFsbCBhcHBsaWNhdGlvbiwgZXZlbiB3 aXRoDQp0aGUgbW9zdCBiYXNpYyBjb21tYW5kcyBsaWtlIGVuY2FwLg0KDQo+IFllcywgbWFjcm9z IGFuZCBzb21lIG90aGVyIGN1bm5pbmcgd2F5cyB0byBjb3ZlciBtb3JlIGZsb3cgc3BlY2lmaWNz DQo+IG1pZ2h0IGNvbWUgaW4gaGFuZHksIGJ1dCwgYXQgdGhlIHNhbWUgdGltZSwgY2FuIGJlIHJh dGhlciBlcnJvciBwcm9uZS4NCj4gU29tZXRpbWVzIGl0J3MgbW9yZSByb2J1c3QgdG8ganVzdCB3 cml0ZSB0aGUgY29kZSBvdXQgaW4gZnVsbC4NCj4gDQpJJ20gYWx3YXlzIGluIGZhdm9yIG9mIGVh c3kgb2YgZXh0cmEgY29tcGxleCBidXQgdG9vIGhhcmQgaXMgYWxzbyBub3QgZ29vZC4NCg0KVGhh bmtzLA0KT3JpDQo+IFRoYW5rIHlvdS4NCj4gDQo+IE9uIDMwLzA1LzIwMjEgMTA6MjcsIE9yaSBL YW0gd3JvdGU6DQo+ID4gSGkgSXZhbiwNCj4gPg0KPiA+IEZpcnN0IG5pY2UgaWRlYSBhbmQgdGhh bmtzIGZvciB0aGUgcGlja2luZyB1cCB0aGUgYmFsbC4NCj4gPg0KPiA+IEJlZm9yZSBhIGRldGFp bCByZXZpZXcsDQo+ID4gVGhlIG1haW4gdGhpbmcgSSdtIGNvbmNlcm5lZCBhYm91dCBpcyB0aGF0 IHRoaXMgcHJpbnQgd2lsbCBiZSBwYXJ0aWFsbHkNCj4gc3VwcG9ydGVkLA0KPiA+IEkga25vdyB0 aGF0IHlvdSBjb3ZlcmVkIHRoaXMgaXNzdWUgYnkgcHJpbnRpbmcgdW5rbm93biBmb3IgdW5zdXBw b3J0ZWQNCj4gaXRlbS9hY3Rpb25zLA0KPiA+IGJ1dCB0aGlzIHdpbGwgbWVhbiB0aGF0IGl0IGlz IGVub3VnaCB0aGF0IG9uZSBpdGVtL2FjdGlvbiBpcyBub3Qgc3VwcG9ydGVkDQo+IGFuZCBhbHJl YWR5IHRoZQ0KPiA+IGZsb3cgY2FuJ3QgYmUgdXNlZCBpbiB0ZXN0cG1kLg0KPiA+IFRvIGdldCBm dWxsIHN1cHBvcnQgaXQgbWVhbnMgdGhhdCB0aGUgZGV2ZWxvcGVyIG5lZWRzIHRvIGFkZCBzdWNo IHByaW50DQo+IHdpdGggZWFjaCBuZXcNCj4gPiBpdGVtL2FjdGlvbi4gSSBhZ3JlZSBpdCBpcyBw b3NzaWJsZSwgYnV0IGl0IGhhcyBoaWdoIG92ZXJoZWFkIGZvciBlYWNoIGZlYXR1cmUuDQo+ID4N Cj4gPiBNYXliZSB3ZSBzaG91bGQgc29tZWhvdyBjcmVhdGUgYSBtYWNyb3MgZm9yIHRoZSBwcmlu dHMgb3Igb3RoZXIgZWFzaWVyDQo+IHRvIHN1cHBvcnQgd2F5cy4NCj4gPg0KPiA+IEZvciBleGFt cGxlLCBqdXN0IHByaW50aW5nIHRoZSBpcHY0IGhhcyA3IGZ1bmN0aW9uIGNhbGxzIGluc2lkZSBv ZiBpdCBlYWNoIG9uZQ0KPiB3aXRoIGVycm9yIGNoZWNraW5nLA0KPiA+IGFuZCBJJ20gbm90IGNv dW50aW5nIHRoZSBkZWRpY2F0ZWQgZnVuY3Rpb25zLg0KPiA+DQo+ID4NCj4gPg0KPiA+IEJlc3Qs DQo+ID4gT3JpDQo+ID4NCj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ PiBGcm9tOiBJdmFuIE1hbG92IDxpdmFuLm1hbG92QG9rdGV0bGFicy5ydT4NCj4gPj4gU2VudDog VGh1cnNkYXksIE1heSAyNywgMjAyMSAxMToyNSBBTQ0KPiA+PiBUbzogZGV2QGRwZGsub3JnDQo+ ID4+IENjOiBOQlUtQ29udGFjdC1UaG9tYXMgTW9uamFsb24gPHRob21hc0Btb25qYWxvbi5uZXQ+ OyBGZXJydWgNCj4gWWlnaXQNCj4gPj4gPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+OyBBbmRyZXcg UnliY2hlbmtvDQo+ID4+IDxhbmRyZXcucnliY2hlbmtvQG9rdGV0bGFicy5ydT47IE9yaSBLYW0g PG9yaWthQG52aWRpYS5jb20+OyBSYXkNCj4gPj4gS2luc2VsbGEgPG1kckBhc2hyb2UuZXU+OyBO ZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPg0KPiA+PiBTdWJqZWN0OiBbUkZDIFBB VENIXSBldGhkZXY6IGFkZCBzdXBwb3J0IGZvciB0ZXN0cG1kLWNvbXBsaWFudCBmbG93DQo+IHJ1 bGUNCj4gPj4gZHVtcGluZw0KPiA+Pg0KPiA+PiBEUERLIGFwcGxpY2F0aW9ucyAoZm9yIGV4YW1w bGUsIE92Uykgb3IgdGVzdHMgd2hpY2ggdXNlIFJURSBmbG93IEFQSQ0KPiBuZWVkIHRvDQo+ID4+ IGxvZyBjcmVhdGVkIG9yIHJlamVjdGVkIGZsb3cgcnVsZXMgdG8gaGVscCB0byByZWNvZ25pc2Ug d2hhdCBnb2VzIHJpZ2h0IG9yDQo+ID4+IHdyb25nLiBGcm9tIHRoaXMgc3RhbmRwb2ludCwgdGVz dHBtZC1jb21wbGlhbnQgZm9ybWF0IGlzIG5pY2UgZm9yIHRoZQ0KPiA+PiBwdXJwb3NlIGJlY2F1 c2UgaXQgYWxsb3dzIHRvIGNvcHktcGFzdGUgdGhlIGZsb3cgcnVsZXMgYW5kIGRlYnVnIHVzaW5n DQo+ID4+IHRlc3RwbWQuDQo+ID4+DQo+ID4+IFJlY29nbmlzYWJsZSBwYXR0ZXJuIGl0ZW1zOg0K PiA+PiBWT0lELCBWRiwgUEYsIFBIWV9QT1JULCBQT1JUX0lELCBFVEgsIFZMQU4sIElQVjQsIElQ VjYsIFVEUCwgVENQLA0KPiBWWExBTiwNCj4gPj4gTlZHUkUsIEdFTkVWRSwgTUFSSywgUFBQT0VT LCBQUFBPRUQuDQo+ID4+DQo+ID4+IFJlY29nbmlzYWJsZSBhY3Rpb25zOg0KPiA+PiBWT0lELCBK VU1QLCBNQVJLLCBGTEFHLCBRVUVVRSwgRFJPUCwgQ09VTlQsIFJTUywgUEYsIFZGLA0KPiBQSFlf UE9SVCwNCj4gPj4gUE9SVF9JRCwgT0ZfUE9QX1ZMQU4sIE9GX1BVU0hfVkxBTiwgT0ZfU0VUX1ZM QU5fVklELA0KPiA+PiBPRl9TRVRfVkxBTl9QQ1AsIFZYTEFOX0VOQ0FQLCBWWExBTl9ERUNBUC4N Cj4gPj4NCj4gPj4gUmVjb2duaXNhYmxlIFJTUyB0eXBlcyAoYWN0aW9uIFJTUyk6DQo+ID4+IElQ VjQsIEZSQUdfSVBWNCwgTk9ORlJBR19JUFY0X1RDUCwgTk9ORlJBR19JUFY0X1VEUCwNCj4gPj4g Tk9ORlJBR19JUFY0X09USEVSLCBJUFY2LCBGUkFHX0lQVjYsIE5PTkZSQUdfSVBWNl9UQ1AsDQo+ ID4+IE5PTkZSQUdfSVBWNl9VRFAsIE5PTkZSQUdfSVBWNl9PVEhFUiwgSVBWNl9FWCwgSVBWNl9U Q1BfRVgsDQo+ID4+IElQVjZfVURQX0VYLCBMM19TUkNfT05MWSwgTDNfRFNUX09OTFksIEw0X1NS Q19PTkxZLA0KPiBMNF9EU1RfT05MWS4NCj4gPj4NCj4gPj4gVW5yZWNvZ25pc2VkIHBhcnRzIG9m IHRoZSBmbG93IHNwZWNpZmljYXRpb24gYXJlIHJlcHJlc2VudGVkIGJ5IHRva2Vucw0KPiA+PiAi e3Vua25vd259IiBhbmQgInt1bmtub3duIGJpdHN9Ii4gSW50ZXJlc3RlZCBwYXJ0aWVzIGFyZSB3 ZWxjb21lIHRvDQo+ID4+IGV4dGVuZCB0aGlzIHRvb2wgdG8gcmVjb2duaXNlIG1vcmUgaXRlbXMg YW5kIGFjdGlvbnMuDQo+ID4+DQo+ID4+IFNpZ25lZC1vZmYtYnk6IEl2YW4gTWFsb3YgPGl2YW4u bWFsb3ZAb2t0ZXRsYWJzLnJ1Pg0KPiA+PiAtLS0NCj4gPj4gICBsaWIvZXRoZGV2L21lc29uLmJ1 aWxkICAgICAgICB8ICAgIDEgKw0KPiA+PiAgIGxpYi9ldGhkZXYvcnRlX2Zsb3cuaCAgICAgICAg IHwgICAzMyArDQo+ID4+ICAgbGliL2V0aGRldi9ydGVfZmxvd19zbnByaW50LmMgfCAxNjgxDQo+ ID4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+PiAgIGxpYi9ldGhkZXYv dmVyc2lvbi5tYXAgICAgICAgIHwgICAgMyArDQo+ID4+ICAgNCBmaWxlcyBjaGFuZ2VkLCAxNzE4 IGluc2VydGlvbnMoKykNCj4gPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2V0aGRldi9ydGVf Zmxvd19zbnByaW50LmMNCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvbWVzb24u YnVpbGQgYi9saWIvZXRoZGV2L21lc29uLmJ1aWxkIGluZGV4DQo+ID4+IDAyMDVjODUzZGYuLjk3 YmJhNGZhMWIgMTAwNjQ0DQo+ID4+IC0tLSBhL2xpYi9ldGhkZXYvbWVzb24uYnVpbGQNCj4gPj4g KysrIGIvbGliL2V0aGRldi9tZXNvbi5idWlsZA0KPiA+PiBAQCAtOCw2ICs4LDcgQEAgc291cmNl cyA9IGZpbGVzKA0KPiA+PiAgICAgICAgICAgJ3J0ZV9jbGFzc19ldGguYycsDQo+ID4+ICAgICAg ICAgICAncnRlX2V0aGRldi5jJywNCj4gPj4gICAgICAgICAgICdydGVfZmxvdy5jJywNCj4gPj4g KwkncnRlX2Zsb3dfc25wcmludC5jJywNCj4gPj4gICAgICAgICAgICdydGVfbXRyLmMnLA0KPiA+ PiAgICAgICAgICAgJ3J0ZV90bS5jJywNCj4gPj4gICApDQo+ID4+IGRpZmYgLS1naXQgYS9saWIv ZXRoZGV2L3J0ZV9mbG93LmggYi9saWIvZXRoZGV2L3J0ZV9mbG93LmggaW5kZXgNCj4gPj4gOTYx YTU4ODRmZS4uY2Q1ZTllZjYzMSAxMDA2NDQNCj4gPj4gLS0tIGEvbGliL2V0aGRldi9ydGVfZmxv dy5oDQo+ID4+ICsrKyBiL2xpYi9ldGhkZXYvcnRlX2Zsb3cuaA0KPiA+PiBAQCAtNDI4OCw2ICs0 Mjg4LDM5IEBAIHJ0ZV9mbG93X3R1bm5lbF9pdGVtX3JlbGVhc2UodWludDE2X3QNCj4gcG9ydF9p ZCwNCj4gPj4gICAJCQkgICAgIHN0cnVjdCBydGVfZmxvd19pdGVtICppdGVtcywNCj4gPj4gICAJ CQkgICAgIHVpbnQzMl90IG51bV9vZl9pdGVtcywNCj4gPj4gICAJCQkgICAgIHN0cnVjdCBydGVf Zmxvd19lcnJvciAqZXJyb3IpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEB3YXJuaW5n DQo+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBw cmlvciBub3RpY2UNCj4gPj4gKyAqDQo+ID4+ICsgKiBEdW1wIHRlc3RwbWQtY29tcGxpYW50IHRl eHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZsb3cgcnVsZS4NCj4gPj4gKyAqIEludm9rZSB0 aGlzIHdpdGggemVyby1zaXplIGJ1ZmZlciB0byBsZWFybiB0aGUgc3RyaW5nIHNpemUgYW5kDQo+ ID4+ICsgKiBpbnZva2UgdGhpcyBmb3IgdGhlIHNlY29uZCB0aW1lIHRvIGFjdHVhbGx5IGR1bXAg dGhlIGZsb3cgcnVsZS4NCj4gPj4gKyAqIFRoZSBidWZmZXIgc2l6ZSBvbiB0aGUgc2Vjb25kIGlu dm9jYXRpb24gPSB0aGUgc3RyaW5nIHNpemUgKyAxLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJh bVtvdXRdIGJ1Zg0KPiA+PiArICogICBCdWZmZXIgdG8gc2F2ZSB0aGUgZHVtcCBpbiwgb3IgTlVM TA0KPiA+PiArICogQHBhcmFtIGJ1Zl9zaXplDQo+ID4+ICsgKiAgIEJ1ZmZlciBzaXplLCBvciAw DQo+ID4+ICsgKiBAcGFyYW1bb3V0XSBuYl9jaGFyc190b3RhbA0KPiA+PiArICogICBSZXN1bHRp bmcgc3RyaW5nIHNpemUgKGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlKQ0KPiA+ PiArICogQHBhcmFtW2luXSBhdHRyDQo+ID4+ICsgKiAgIEZsb3cgcnVsZSBhdHRyaWJ1dGVzLg0K PiA+PiArICogQHBhcmFtW2luXSBwYXR0ZXJuDQo+ID4+ICsgKiAgIFBhdHRlcm4gc3BlY2lmaWNh dGlvbiAobGlzdCB0ZXJtaW5hdGVkIGJ5IHRoZSBFTkQgcGF0dGVybiBpdGVtKS4NCj4gPj4gKyAq IEBwYXJhbVtpbl0gYWN0aW9ucw0KPiA+PiArICogICBBc3NvY2lhdGVkIGFjdGlvbnMgKGxpc3Qg dGVybWluYXRlZCBieSB0aGUgRU5EIGFjdGlvbikuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVy bg0KPiA+PiArICogICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3 aXNlDQo+ID4+ICsgKi8NCj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+PiAraW50DQo+ID4+ ICtydGVfZmxvd19zbnByaW50KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QgKm5i X2NoYXJzX3RvdGFsLA0KPiA+PiArCQkgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgKmF0dHIs DQo+ID4+ICsJCSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSBwYXR0ZXJuW10sDQo+ID4+ICsJ CSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uIGFjdGlvbnNbXSk7DQo+ID4+ICsNCj4gPj4g ICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gPj4gICB9DQo+ID4+ICAgI2VuZGlmDQo+ID4+IGRpZmYg LS1naXQgYS9saWIvZXRoZGV2L3J0ZV9mbG93X3NucHJpbnQuYyBiL2xpYi9ldGhkZXYvcnRlX2Zs b3dfc25wcmludC5jDQo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAu LjUxMzg4NjUyOGINCj4gPj4gLS0tIC9kZXYvbnVsbA0KPiA+PiArKysgYi9saWIvZXRoZGV2L3J0 ZV9mbG93X3NucHJpbnQuYw0KPiA+PiBAQCAtMCwwICsxLDE2ODEgQEANCj4gPj4gKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPj4gKyAqDQo+ID4+ICsgKiBDb3B5 cmlnaHQoYykgMjAyMSBYaWxpbngsIEluYy4NCj4gPj4gKyAqLw0KPiA+PiArDQo+ID4+ICsjaW5j bHVkZSA8c3RkYm9vbC5oPg0KPiA+PiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+PiArI2luY2x1 ZGUgPHN0cmluZy5oPg0KPiA+PiArDQo+ID4+ICsjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KPiA+ PiArI2luY2x1ZGUgInJ0ZV9ldGhkZXYuaCINCj4gPj4gKyNpbmNsdWRlICJydGVfZmxvdy5oIg0K PiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X3N0cihjaGFy ICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJ ICAgICBjb25zdCB2b2lkICp2YWx1ZV9wdHIpDQo+ID4+ICt7DQo+ID4+ICsJY29uc3QgY2hhciAq c3RyID0gdmFsdWVfcHRyOw0KPiA+PiArCXNpemVfdCB3cml0ZV9zaXplX21heDsNCj4gPj4gKwlp bnQgcmV0djsNCj4gPj4gKw0KPiA+PiArCXdyaXRlX3NpemVfbWF4ID0gYnVmX3NpemUgLSBSVEVf TUlOKGJ1Zl9zaXplLCAqbmJfY2hhcnNfdG90YWwpOw0KPiA+PiArCXJldHYgPSBzbnByaW50Zihi dWYgKyAqbmJfY2hhcnNfdG90YWwsIHdyaXRlX3NpemVfbWF4LCAiICVzIiwgc3RyKTsNCj4gPj4g KwlpZiAocmV0diA8IDApDQo+ID4+ICsJCXJldHVybiAtRUZBVUxUOw0KPiA+PiArDQo+ID4+ICsJ Km5iX2NoYXJzX3RvdGFsICs9IHJldHY7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4g K30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF9ldGhl cl9hZGRyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gPj4gKm5iX2NoYXJz X3RvdGFsLA0KPiA+PiArCQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlX3B0cikNCj4gPj4gK3sNCj4g Pj4gKwljb25zdCBzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIgKmVhID0gdmFsdWVfcHRyOw0KPiA+PiAr CWNvbnN0IHVpbnQ4X3QgKmFiID0gZWEtPmFkZHJfYnl0ZXM7DQo+ID4+ICsJc2l6ZV90IHdyaXRl X3NpemVfbWF4Ow0KPiA+PiArCWludCByZXR2Ow0KPiA+PiArDQo+ID4+ICsJd3JpdGVfc2l6ZV9t YXggPSBidWZfc2l6ZSAtIFJURV9NSU4oYnVmX3NpemUsICpuYl9jaGFyc190b3RhbCk7DQo+ID4+ ICsJcmV0diA9IHNucHJpbnRmKGJ1ZiArICpuYl9jaGFyc190b3RhbCwgd3JpdGVfc2l6ZV9tYXgs DQo+ID4+ICsJCQkiICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwNCj4gPj4gKwkJCWFi WzBdLCBhYlsxXSwgYWJbMl0sIGFiWzNdLCBhYls0XSwgYWJbNV0pOw0KPiA+PiArCWlmIChyZXR2 IDwgMCkNCj4gPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4+ICsNCj4gPj4gKwkqbmJfY2hhcnNf dG90YWwgKz0gcmV0djsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiAr DQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2lwdjRfYWRkcihjaGFy ICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ID4+ICpuYl9jaGFyc190b3RhbCwNCj4g Pj4gKwkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlX3B0cikNCj4gPj4gK3sNCj4gPj4gKwljaGFyIGFk ZHJfc3RyW0lORVRfQUREUlNUUkxFTl07DQo+ID4+ICsNCj4gPj4gKwlpZiAoaW5ldF9udG9wKEFG X0lORVQsIHZhbHVlX3B0ciwgYWRkcl9zdHIsIHNpemVvZihhZGRyX3N0cikpID09DQo+ID4+IE5V TEwpDQo+ID4+ICsJCXJldHVybiAtRUZBVUxUOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIHJ0ZV9m bG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCBhZGRyX3N0cik7 DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93X3NucHJp bnRfaXB2Nl9hZGRyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gPj4gKm5i X2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJICAgY29uc3Qgdm9pZCAqdmFsdWVfcHRyKQ0KPiA+PiAr ew0KPiA+PiArCWNoYXIgYWRkcl9zdHJbSU5FVDZfQUREUlNUUkxFTl07DQo+ID4+ICsNCj4gPj4g KwlpZiAoaW5ldF9udG9wKEFGX0lORVQ2LCB2YWx1ZV9wdHIsIGFkZHJfc3RyLCBzaXplb2YoYWRk cl9zdHIpKSA9PQ0KPiA+PiBOVUxMKQ0KPiA+PiArCQlyZXR1cm4gLUVGQVVMVDsNCj4gPj4gKw0K PiA+PiArCXJldHVybiBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFy c190b3RhbCwgYWRkcl9zdHIpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIFNOUFJJ TlQoX3R5cGUsIF9mbXQpIFwNCj4gPj4gKwlkbyB7CQkJCQkJCQlcDQo+ID4+ICsJCWNvbnN0IF90 eXBlICp2cCA9IHZhbHVlX3B0cjsJCQkJXA0KPiA+PiArCQlzaXplX3Qgd3JpdGVfc2l6ZV9tYXg7 CQkJCQlcDQo+ID4+ICsJCWludCByZXR2OwkJCQkJCVwNCj4gPj4gKwkJCQkJCQkJCVwNCj4gPj4g KwkJd3JpdGVfc2l6ZV9tYXggPSBidWZfc2l6ZSAtCQkJCVwNCj4gPj4gKwkJCQkgUlRFX01JTihi dWZfc2l6ZSwgKm5iX2NoYXJzX3RvdGFsKTsJXA0KPiA+PiArCQlyZXR2ID0gc25wcmludGYoYnVm ICsgKm5iX2NoYXJzX3RvdGFsLCB3cml0ZV9zaXplX21heCwNCj4gPj4gCVwNCj4gPj4gKwkJCQlf Zm10LCAqdnApOwkJCQlcDQo+ID4+ICsJCWlmIChyZXR2IDwgMCkJCQkJCQlcDQo+ID4+ICsJCQly ZXR1cm4gLUVGQVVMVDsNCj4gPj4gCVwNCj4gPj4gKwkJCQkJCQkJCVwNCj4gPj4gKwkJKm5iX2No YXJzX3RvdGFsICs9IHJldHY7CQkJCVwNCj4gPj4gKwkJCQkJCQkJCVwNCj4gPj4gKwkJcmV0dXJu IDA7CQkJCQkJXA0KPiA+PiArCX0gd2hpbGUgKDApDQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQN Cj4gPj4gK3J0ZV9mbG93X3NucHJpbnRfdWludDMyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXpl LCBzaXplX3QNCj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJY29uc3Qgdm9pZCAqdmFsdWVf cHRyKQ0KPiA+PiArew0KPiA+PiArCVNOUFJJTlQodWludDMyX3QsICIgJXUiKTsNCj4gPj4gK30N Cj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF9oZXgzMihj aGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ICpuYl9jaGFyc190b3RhbCwNCj4g Pj4gKwkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlX3B0cikNCj4gPj4gK3sNCj4gPj4gKwlTTlBS SU5UKHVpbnQzMl90LCAiIDB4JTA4eCIpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMg aW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2hleDI0KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9z aXplLCBzaXplX3QNCj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkgICAgICAgY29uc3Qgdm9p ZCAqdmFsdWVfcHRyKQ0KPiA+PiArew0KPiA+PiArCVNOUFJJTlQodWludDMyX3QsICIgMHglMDZ4 Iik7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93X3Nu cHJpbnRfaGV4MjAoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIHNpemVfdA0KPiAqbmJfY2hh cnNfdG90YWwsDQo+ID4+ICsJCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZV9wdHIpDQo+ID4+ICt7 DQo+ID4+ICsJU05QUklOVCh1aW50MzJfdCwgIiAweCUwNXgiKTsNCj4gPj4gK30NCj4gPj4gKw0K PiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF91aW50MTYoY2hhciAqYnVm LCBzaXplX3QgYnVmX3NpemUsIHNpemVfdA0KPiAqbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQlj b25zdCB2b2lkICp2YWx1ZV9wdHIpDQo+ID4+ICt7DQo+ID4+ICsJU05QUklOVCh1aW50MTZfdCwg IiAlaHUiKTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zs b3dfc25wcmludF91aW50MTZfYmUyY3B1KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLA0KPiA+ PiArCQkJICAgICAgIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsIGNvbnN0IHZvaWQgKnZhbHVlX3B0 cikgew0KPiA+PiArCWNvbnN0IHVpbnQxNl90ICp2YWx1ZXAgPSB2YWx1ZV9wdHI7DQo+ID4+ICsJ dWludDE2X3QgdmFsdWUgPSBydGVfYmVfdG9fY3B1XzE2KCp2YWx1ZXApOw0KPiA+PiArDQo+ID4+ ICsJdmFsdWVfcHRyID0gJnZhbHVlOw0KPiA+PiArDQo+ID4+ICsJU05QUklOVCh1aW50MTZfdCwg IiAlaHUiKTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zs b3dfc25wcmludF9oZXgxNl9iZTJjcHUoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsDQo+ID4+ ICsJCQkgICAgICBzaXplX3QgKm5iX2NoYXJzX3RvdGFsLCBjb25zdCB2b2lkICp2YWx1ZV9wdHIp IHsNCj4gPj4gKwljb25zdCB1aW50MTZfdCAqdmFsdWVwID0gdmFsdWVfcHRyOw0KPiA+PiArCXVp bnQxNl90IHZhbHVlID0gcnRlX2JlX3RvX2NwdV8xNigqdmFsdWVwKTsNCj4gPj4gKw0KPiA+PiAr CXZhbHVlX3B0ciA9ICZ2YWx1ZTsNCj4gPj4gKw0KPiA+PiArCVNOUFJJTlQodWludDE2X3QsICIg MHglMDR4Iik7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9m bG93X3NucHJpbnRfdWludDgoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIHNpemVfdA0KPiAq bmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZV9wdHIpDQo+ ID4+ICt7DQo+ID4+ICsJU05QUklOVCh1aW50OF90LCAiICVoaHUiKTsNCj4gPj4gK30NCj4gPj4g Kw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF9oZXg4KGNoYXIgKmJ1 Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkg ICAgICBjb25zdCB2b2lkICp2YWx1ZV9wdHIpDQo+ID4+ICt7DQo+ID4+ICsJU05QUklOVCh1aW50 OF90LCAiIDB4JTAyeCIpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ ICtydGVfZmxvd19zbnByaW50X2J5dGUoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIHNpemVf dA0KPiAqbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCSAgICAgIGNvbnN0IHZvaWQgKnZhbHVlX3B0 cikNCj4gPj4gK3sNCj4gPj4gKwlTTlBSSU5UKHVpbnQ4X3QsICIlMDJ4Iik7DQo+ID4+ICt9DQo+ ID4+ICsNCj4gPj4gKyN1bmRlZiBTTlBSSU5UDQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4g Pj4gK3J0ZV9mbG93X3NucHJpbnRfYXR0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6 ZV90DQo+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2F0dHIgKmF0dHIpIHsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlpZiAoYXR0 ciA9PSBOVUxMKQ0KPiA+PiArCQlyZXR1cm4gMDsNCj4gPj4gKw0KPiA+PiArCWlmIChhdHRyLT5n cm91cCAhPSAwKSB7DQo+ID4+ICsJCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZf c2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSAgImdyb3VwIik7DQo+ID4+ICsJCWlm IChyYyAhPSAwKQ0KPiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJCXJjID0gcnRl X2Zsb3dfc25wcmludF91aW50MzIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ ICsJCQkJCSAgICAgJmF0dHItPmdyb3VwKTsNCj4gPj4gKwkJaWYgKHJjICE9IDApDQo+ID4+ICsJ CQlyZXR1cm4gcmM7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJaWYgKGF0dHItPnByaW9yaXR5 ICE9IDApIHsNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXpl LCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAicHJpb3JpdHkiKTsNCj4gPj4gKwkJaWYg KHJjICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwkJcmMgPSBydGVf Zmxvd19zbnByaW50X3VpbnQzMihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4g KwkJCQkJICAgICAmYXR0ci0+cHJpb3JpdHkpOw0KPiA+PiArCQlpZiAocmMgIT0gMCkNCj4gPj4g KwkJCXJldHVybiByYzsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlpZiAoYXR0ci0+dHJhbnNm ZXIpIHsNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBu Yl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAidHJhbnNmZXIiKTsNCj4gPj4gKwkJaWYgKHJj ICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJaWYg KGF0dHItPmluZ3Jlc3MpIHsNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYs IGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAiaW5ncmVzcyIpOw0KPiA+ PiArCQlpZiAocmMgIT0gMCkNCj4gPj4gKwkJCXJldHVybiByYzsNCj4gPj4gKwl9DQo+ID4+ICsN Cj4gPj4gKwlpZiAoYXR0ci0+ZWdyZXNzKSB7DQo+ID4+ICsJCXJjID0gcnRlX2Zsb3dfc25wcmlu dF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSAgImVncmVz cyIpOw0KPiA+PiArCQlpZiAocmMgIT0gMCkNCj4gPj4gKwkJCXJldHVybiByYzsNCj4gPj4gKwl9 DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGlj IHZvaWQNCj4gPj4gK3J0ZV9mbG93X2l0ZW1faW5pdF9wYXJzZShjb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfaXRlbSAqaXRlbSwgc2l6ZV90DQo+ID4+IGl0ZW1fc2l6ZSwNCj4gPj4gKwkJCSB2b2lkICpz cGVjLCB2b2lkICpsYXN0LCB2b2lkICptYXNrKSB7DQo+ID4+ICsJaWYgKGl0ZW0tPnNwZWMgIT0g TlVMTCkNCj4gPj4gKwkJbWVtY3B5KHNwZWMsIGl0ZW0tPnNwZWMsIGl0ZW1fc2l6ZSk7DQo+ID4+ ICsJZWxzZQ0KPiA+PiArCQltZW1zZXQoc3BlYywgMCwgaXRlbV9zaXplKTsNCj4gPj4gKw0KPiA+ PiArCWlmIChpdGVtLT5sYXN0ICE9IE5VTEwpDQo+ID4+ICsJCW1lbWNweShsYXN0LCBpdGVtLT5s YXN0LCBpdGVtX3NpemUpOw0KPiA+PiArCWVsc2UNCj4gPj4gKwkJbWVtc2V0KGxhc3QsIDAsIGl0 ZW1fc2l6ZSk7DQo+ID4+ICsNCj4gPj4gKwlpZiAoaXRlbS0+bWFzayAhPSBOVUxMKQ0KPiA+PiAr CQltZW1jcHkobWFzaywgaXRlbS0+bWFzaywgaXRlbV9zaXplKTsNCj4gPj4gKwllbHNlDQo+ID4+ ICsJCW1lbXNldChtYXNrLCAwLCBpdGVtX3NpemUpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtz dGF0aWMgYm9vbA0KPiA+PiArcnRlX2Zsb3dfYnVmX2lzX2FsbF96ZXJvcyhjb25zdCB2b2lkICpi dWZfcHRyLCBzaXplX3QgYnVmX3NpemUpIHsNCj4gPj4gKwljb25zdCB1aW50OF90ICpidWYgPSBi dWZfcHRyOw0KPiA+PiArCXVuc2lnbmVkIGludCBpOw0KPiA+PiArCXVpbnQ4X3QgdCA9IDA7DQo+ ID4+ICsNCj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3NpemU7ICsraSkNCj4gPj4gKwkJdCB8 PSBidWZbaV07DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gKHQgPT0gMCk7DQo+ID4+ICt9DQo+ID4+ ICsNCj4gPj4gK3N0YXRpYyBib29sDQo+ID4+ICtydGVfZmxvd19idWZfaXNfYWxsX29uZXMoY29u c3Qgdm9pZCAqYnVmX3B0ciwgc2l6ZV90IGJ1Zl9zaXplKSB7DQo+ID4+ICsJY29uc3QgdWludDhf dCAqYnVmID0gYnVmX3B0cjsNCj4gPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPj4gKwl1aW50OF90 IHQgPSB+MDsNCj4gPj4gKw0KPiA+PiArCWZvciAoaSA9IDA7IGkgPCBidWZfc2l6ZTsgKytpKQ0K PiA+PiArCQl0ICY9IGJ1ZltpXTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAodCA9PSAodWludDhf dCkofjApKTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zs b3dfc25wcmludF9pdGVtX2ZpZWxkKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QN Cj4gPj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJICAgIGludCAoKnZhbHVlX2R1bXBfY2Ip KGNoYXIgKiwgc2l6ZV90LCBzaXplX3QgKiwNCj4gPj4gKwkJCQkJCSBjb25zdCB2b2lkICopLA0K PiA+PiArCQkJICAgIGludCAoKm1hc2tfZHVtcF9jYikoY2hhciAqLCBzaXplX3QsIHNpemVfdCAq LA0KPiA+PiArCQkJCQkJY29uc3Qgdm9pZCAqKSwNCj4gPj4gKwkJCSAgICBjb25zdCBjaGFyICpm aWVsZF9uYW1lLCBzaXplX3QgZmllbGRfc2l6ZSwNCj4gPj4gKwkJCSAgICB2b2lkICpmaWVsZF9z cGVjLCB2b2lkICpmaWVsZF9sYXN0LA0KPiA+PiArCQkJICAgIHZvaWQgKmZpZWxkX21hc2ssIHZv aWQgKmZpZWxkX2Z1bGxfbWFzaykgew0KPiA+PiArCWJvb2wgbWFza19pc19hbGxfb25lczsNCj4g Pj4gKwlib29sIGxhc3RfaXNfZnV0aWxlOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiAr CWlmIChydGVfZmxvd19idWZfaXNfYWxsX3plcm9zKGZpZWxkX21hc2ssIGZpZWxkX3NpemUpKQ0K PiA+PiArCQlyZXR1cm4gMDsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9z dHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+IGZpZWxkX25hbWUpOw0KPiA+ PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlpZiAo ZmllbGRfZnVsbF9tYXNrICE9IE5VTEwpIHsNCj4gPj4gKwkJbWFza19pc19hbGxfb25lcyA9ICht ZW1jbXAoZmllbGRfbWFzaywgZmllbGRfZnVsbF9tYXNrLA0KPiA+PiArCQkJCQkgICBmaWVsZF9z aXplKSA9PSAwKTsNCj4gPj4gKwl9IGVsc2Ugew0KPiA+PiArCQltYXNrX2lzX2FsbF9vbmVzID0g cnRlX2Zsb3dfYnVmX2lzX2FsbF9vbmVzKGZpZWxkX21hc2ssDQo+ID4+ICsJCQkJCQkJICAgIGZp ZWxkX3NpemUpOw0KPiA+PiArCX0NCj4gPj4gKwlsYXN0X2lzX2Z1dGlsZSA9IHJ0ZV9mbG93X2J1 Zl9pc19hbGxfemVyb3MoZmllbGRfbGFzdCwgZmllbGRfc2l6ZSkgfHwNCj4gPj4gKwkJCSAobWVt Y21wKGZpZWxkX3NwZWMsIGZpZWxkX2xhc3QsIGZpZWxkX3NpemUpID09IDApOw0KPiA+PiArDQo+ ID4+ICsJaWYgKG1hc2tfaXNfYWxsX29uZXMgJiYgbGFzdF9pc19mdXRpbGUpIHsNCj4gPj4gKwkJ cmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwg ImlzIik7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiAr DQo+ID4+ICsJCXJjID0gdmFsdWVfZHVtcF9jYihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3Rh bCwNCj4gPj4gZmllbGRfc3BlYyk7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJcmV0 dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJCWdvdG8gZG9uZTsNCj4gPj4gKwl9DQo+ID4+ICsNCj4g Pj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3Rv dGFsLCAic3BlYyIpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ ID4+ICsNCj4gPj4gKwlyYyA9IHZhbHVlX2R1bXBfY2IoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNf dG90YWwsIGZpZWxkX3NwZWMpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4g cmM7DQo+ID4+ICsNCj4gPj4gKwlpZiAoIWxhc3RfaXNfZnV0aWxlKSB7DQo+ID4+ICsJCXJjID0g cnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ ICsJCQkJCSAgZmllbGRfbmFtZSk7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJcmV0 dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBi dWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSAgImxhc3QiKTsNCj4gPj4gKwkJ aWYgKHJjICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwkJcmMgPSB2 YWx1ZV9kdW1wX2NiKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiBmaWVsZF9s YXN0KTsNCj4gPj4gKwkJaWYgKHJjICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsJ fQ0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXpl LCBuYl9jaGFyc190b3RhbCwNCj4gPj4gZmllbGRfbmFtZSk7DQo+ID4+ICsJaWYgKHJjICE9IDAp DQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmlu dF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICJtYXNrIik7DQo+ID4+ICsJaWYg KHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gbWFza19k dW1wX2NiKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCBmaWVsZF9tYXNrKTsNCj4gPj4g KwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICtkb25lOg0K PiA+PiArCS8qDQo+ID4+ICsJICogWmVyb2lzZSB0aGUgcHJpbnRlZCBmaWVsZC4gV2hlbiBhbGwg aXRlbSBmaWVsZHMgaGF2ZSBiZWVuIHByaW50ZWQsDQo+ID4+ICsJICogdGhlIGNvcnJlc3BvbmRp bmcgaXRlbSBoYW5kbGVyIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIHdob2xlIGl0ZW0NCj4gPj4g KwkgKiBtYXNrIGlzIGFsbC16ZXJvcy4gVGhpcyBpcyBuZWVkZWQgdG8gaGlnaGxpZ2h0IHVuc3Vw cG9ydGVkIGZpZWxkcy4NCj4gPj4gKwkgKg0KPiA+PiArCSAqIElmIHRoZSBwcm92aWRlZCBmaWVs ZCBtYXNrIHBvaW50ZXIgcmVmZXJzIHRvIGEgc2VwYXJhdGUgY29udGFpbmVyDQo+ID4+ICsJICog cmF0aGVyIHRoYW4gdG8gdGhlIGZpZWxkIGluIHRoZSBpdGVtIG1hc2sgZGlyZWN0bHksIGl0J3Mg dGhlIGR1dHkNCj4gPj4gKwkgKiBvZiB0aGUgaXRlbSBoYW5kbGVyIHRvIGNsZWFyIHRoZSBmaWVs ZCBpbiB0aGUgaXRlbSBtYXNrIGNvcnJlY3RseS4NCj4gPj4gKwkgKi8NCj4gPj4gKwltZW1zZXQo ZmllbGRfbWFzaywgMCwgZmllbGRfc2l6ZSk7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4g Pj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF9p dGVtX3ZmKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gPj4gKm5iX2NoYXJz X3RvdGFsLA0KPiA+PiArCQkJIHZvaWQgKnNwZWNfcHRyLCB2b2lkICpsYXN0X3B0ciwgdm9pZCAq bWFza19wdHIpIHsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92ZiAqc3BlYyA9IHNwZWNf cHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3ZmICpsYXN0ID0gbGFzdF9wdHI7DQo+ ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdmYgKm1hc2sgPSBtYXNrX3B0cjsNCj4gPj4gKwlp bnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChi dWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJp bnRfdWludDMyLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9oZXgzMiwgImlkIiwNCj4g Pj4gKwkJCQkJIHNpemVvZihzcGVjLT5pZCksICZzcGVjLT5pZCwgJmxhc3QtDQo+ID4+PiBpZCwN Cj4gPj4gKwkJCQkJICZtYXNrLT5pZCwgTlVMTCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiAr DQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2l0ZW1fcGh5X3BvcnQo Y2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsDQo+ID4+ICsJCQkgICAgICAgc2l6ZV90ICpuYl9j aGFyc190b3RhbCwgdm9pZCAqc3BlY19wdHIsDQo+ID4+ICsJCQkgICAgICAgdm9pZCAqbGFzdF9w dHIsIHZvaWQgKm1hc2tfcHRyKSB7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fcGh5X3Bv cnQgKnNwZWMgPSBzcGVjX3B0cjsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9waHlfcG9y dCAqbGFzdCA9IGxhc3RfcHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3BoeV9wb3J0 ICptYXNrID0gbWFza19wdHI7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBy dGVfZmxvd19zbnByaW50X2l0ZW1fZmllbGQoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWws DQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X3VpbnQzMiwNCj4gPj4gKwkJCQkJIHJ0ZV9m bG93X3NucHJpbnRfaGV4MzIsICJpbmRleCIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aW5k ZXgpLCAmc3BlYy0+aW5kZXgsDQo+ID4+ICsJCQkJCSAmbGFzdC0+aW5kZXgsICZtYXNrLT5pbmRl eCwgTlVMTCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4g Kw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ ID4+ICtydGVfZmxvd19zbnByaW50X2l0ZW1fcG9ydF9pZChjaGFyICpidWYsIHNpemVfdCBidWZf c2l6ZSwNCj4gPj4gKwkJCSAgICAgIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsIHZvaWQgKnNwZWNf cHRyLA0KPiA+PiArCQkJICAgICAgdm9pZCAqbGFzdF9wdHIsIHZvaWQgKm1hc2tfcHRyKSB7DQo+ ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fcG9ydF9pZCAqc3BlYyA9IHNwZWNfcHRyOw0KPiA+ PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3BvcnRfaWQgKmxhc3QgPSBsYXN0X3B0cjsNCj4gPj4g KwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9wb3J0X2lkICptYXNrID0gbWFza19wdHI7DQo+ID4+ICsJ aW50IHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2l0ZW1fZmllbGQo YnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnBy aW50X3VpbnQzMiwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MzIsICJpZCIsDQo+ ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aWQpLCAmc3BlYy0+aWQsICZsYXN0LQ0KPiA+Pj4gaWQs DQo+ID4+ICsJCQkJCSAmbWFzay0+aWQsIE5VTEwpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+ PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4g Kw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF9pdGVtX2V0aChjaGFy ICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ID4+ICpuYl9jaGFyc190b3RhbCwNCj4g Pj4gKwkJCSAgdm9pZCAqc3BlY19wdHIsIHZvaWQgKmxhc3RfcHRyLCB2b2lkICptYXNrX3B0cikg ew0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX2V0aCAqc3BlYyA9IHNwZWNfcHRyOw0KPiA+ PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX2V0aCAqbGFzdCA9IGxhc3RfcHRyOw0KPiA+PiArCXN0 cnVjdCBydGVfZmxvd19pdGVtX2V0aCAqbWFzayA9IG1hc2tfcHRyOw0KPiA+PiArCXVpbnQ4X3Qg aGFzX3ZsYW5fZnVsbF9tYXNrID0gMTsNCj4gPj4gKwl1aW50OF90IGhhc192bGFuX3NwZWM7DQo+ ID4+ICsJdWludDhfdCBoYXNfdmxhbl9sYXN0Ow0KPiA+PiArCXVpbnQ4X3QgaGFzX3ZsYW5fbWFz azsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRf aXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0 ZV9mbG93X3NucHJpbnRfZXRoZXJfYWRkciwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRf ZXRoZXJfYWRkciwgImRzdCIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aGRyLmRfYWRkciks DQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLmRfYWRkciwgJmxhc3QtDQo+ID4+PiBoZHIuZF9hZGRy LA0KPiA+PiArCQkJCQkgJm1hc2stPmhkci5kX2FkZHIsIE5VTEwpOw0KPiA+PiArCWlmIChyYyAh PSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3Nu cHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJ CQkJIHJ0ZV9mbG93X3NucHJpbnRfZXRoZXJfYWRkciwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3Nu cHJpbnRfZXRoZXJfYWRkciwgInNyYyIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aGRyLnNf YWRkciksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLnNfYWRkciwgJmxhc3QtDQo+ID4+PiBoZHIu c19hZGRyLA0KPiA+PiArCQkJCQkgJm1hc2stPmhkci5zX2FkZHIsIE5VTEwpOw0KPiA+PiArCWlm IChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9m bG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4g Pj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MTZfYmUyY3B1LA0KPiA+PiArCQkJCQkgcnRl X2Zsb3dfc25wcmludF9oZXgxNl9iZTJjcHUsDQo+ID4+ICJ0eXBlIiwNCj4gPj4gKwkJCQkJIHNp emVvZihzcGVjLT5oZHIuZXRoZXJfdHlwZSksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLmV0aGVy X3R5cGUsDQo+ID4+ICsJCQkJCSAmbGFzdC0+aGRyLmV0aGVyX3R5cGUsDQo+ID4+ICsJCQkJCSAm bWFzay0+aGRyLmV0aGVyX3R5cGUsIE5VTEwpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiAr CQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwloYXNfdmxhbl9zcGVjID0gc3BlYy0+aGFzX3Zs YW47DQo+ID4+ICsJaGFzX3ZsYW5fbGFzdCA9IGxhc3QtPmhhc192bGFuOw0KPiA+PiArCWhhc192 bGFuX21hc2sgPSBtYXNrLT5oYXNfdmxhbjsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3df c25wcmludF9pdGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiAr CQkJCQkgcnRlX2Zsb3dfc25wcmludF91aW50OCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJp bnRfdWludDgsICJoYXNfdmxhbiIsDQo+ID4+ICsJCQkJCSBzaXplb2YoaGFzX3ZsYW5fc3BlYyks DQo+ID4+ICZoYXNfdmxhbl9zcGVjLA0KPiA+PiArCQkJCQkgJmhhc192bGFuX2xhc3QsICZoYXNf dmxhbl9tYXNrLA0KPiA+PiArCQkJCQkgJmhhc192bGFuX2Z1bGxfbWFzayk7DQo+ID4+ICsJaWYg KHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCW1hc2stPmhhc192 bGFuID0gMDsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2l0ZW1fdmxhbihjaGFyICpidWYs IHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJ CSAgIHZvaWQgKnNwZWNfcHRyLCB2b2lkICpsYXN0X3B0ciwgdm9pZCAqbWFza19wdHIpIHsNCj4g Pj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92bGFuICpzcGVjID0gc3BlY19wdHI7DQo+ID4+ICsJ c3RydWN0IHJ0ZV9mbG93X2l0ZW1fdmxhbiAqbGFzdCA9IGxhc3RfcHRyOw0KPiA+PiArCXN0cnVj dCBydGVfZmxvd19pdGVtX3ZsYW4gKm1hc2sgPSBtYXNrX3B0cjsNCj4gPj4gKwl1aW50OF90IGhh c19tb3JlX3ZsYW5fZnVsbF9tYXNrID0gMTsNCj4gPj4gKwl1aW50OF90IGhhc19tb3JlX3ZsYW5f c3BlYzsNCj4gPj4gKwl1aW50OF90IGhhc19tb3JlX3ZsYW5fbGFzdDsNCj4gPj4gKwl1aW50OF90 IGhhc19tb3JlX3ZsYW5fbWFzazsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9 IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3Rh bCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfdWludDE2X2JlMmNwdSwNCj4gPj4gKwkJ CQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MTZfYmUyY3B1LA0KPiA+PiAidGNpIiwNCj4gPj4gKwkJ CQkJIHNpemVvZihzcGVjLT5oZHIudmxhbl90Y2kpLA0KPiA+PiArCQkJCQkgJnNwZWMtPmhkci52 bGFuX3RjaSwNCj4gPj4gKwkJCQkJICZsYXN0LT5oZHIudmxhbl90Y2ksDQo+ID4+ICsJCQkJCSAm bWFzay0+aGRyLnZsYW5fdGNpLCBOVUxMKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJ cmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2l0ZW1fZmll bGQoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19z bnByaW50X2hleDE2X2JlMmNwdSwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MTZf YmUyY3B1LA0KPiA+PiArCQkJCQkgImlubmVyX3R5cGUiLA0KPiA+PiArCQkJCQkgc2l6ZW9mKHNw ZWMtPmhkci5ldGhfcHJvdG8pLA0KPiA+PiArCQkJCQkgJnNwZWMtPmhkci5ldGhfcHJvdG8sDQo+ ID4+ICsJCQkJCSAmbGFzdC0+aGRyLmV0aF9wcm90bywNCj4gPj4gKwkJCQkJICZtYXNrLT5oZHIu ZXRoX3Byb3RvLCBOVUxMKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJj Ow0KPiA+PiArDQo+ID4+ICsJaGFzX21vcmVfdmxhbl9zcGVjID0gc3BlYy0+aGFzX21vcmVfdmxh bjsNCj4gPj4gKwloYXNfbW9yZV92bGFuX2xhc3QgPSBsYXN0LT5oYXNfbW9yZV92bGFuOw0KPiA+ PiArCWhhc19tb3JlX3ZsYW5fbWFzayA9IG1hc2stPmhhc19tb3JlX3ZsYW47DQo+ID4+ICsNCj4g Pj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9j aGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfdWludDgsDQo+ID4+ICsJ CQkJCSBydGVfZmxvd19zbnByaW50X3VpbnQ4LA0KPiA+PiArCQkJCQkgImhhc19tb3JlX3ZsYW4i LA0KPiA+PiArCQkJCQkgc2l6ZW9mKGhhc19tb3JlX3ZsYW5fc3BlYyksDQo+ID4+ICsJCQkJCSAm aGFzX21vcmVfdmxhbl9zcGVjLA0KPiA+PiArCQkJCQkgJmhhc19tb3JlX3ZsYW5fbGFzdCwNCj4g Pj4gKwkJCQkJICZoYXNfbW9yZV92bGFuX21hc2ssDQo+ID4+ICsJCQkJCSAmaGFzX21vcmVfdmxh bl9mdWxsX21hc2spOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ ID4+ICsNCj4gPj4gKwltYXNrLT5oYXNfbW9yZV92bGFuID0gMDsNCj4gPj4gKw0KPiA+PiArCXJl dHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxv d19zbnByaW50X2l0ZW1faXB2NChjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCSAgIHZvaWQgKnNwZWNfcHRyLCB2b2lkICps YXN0X3B0ciwgdm9pZCAqbWFza19wdHIpIHsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9p cHY0ICpzcGVjID0gc3BlY19wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1faXB2NCAq bGFzdCA9IGxhc3RfcHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjQgKm1hc2sg PSBtYXNrX3B0cjsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93 X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4g KwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4OCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJp bnRfaGV4OCwgInRvcyIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aGRyLnR5cGVfb2Zfc2Vy dmljZSksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLnR5cGVfb2Zfc2VydmljZSwNCj4gPj4gKwkJ CQkJICZsYXN0LT5oZHIudHlwZV9vZl9zZXJ2aWNlLA0KPiA+PiArCQkJCQkgJm1hc2stPmhkci50 eXBlX29mX3NlcnZpY2UsDQo+ID4+IE5VTEwpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiAr CQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9m aWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93 X3NucHJpbnRfdWludDE2X2JlMmNwdSwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4 MTZfYmUyY3B1LA0KPiA+PiArCQkJCQkgInBhY2tldF9pZCIsDQo+ID4+ICsJCQkJCSBzaXplb2Yo c3BlYy0+aGRyLnBhY2tldF9pZCksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLnBhY2tldF9pZCwN Cj4gPj4gKwkJCQkJICZsYXN0LT5oZHIucGFja2V0X2lkLA0KPiA+PiArCQkJCQkgJm1hc2stPmhk ci5wYWNrZXRfaWQsIE5VTEwpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4g cmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYs IGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRf dWludDE2X2JlMmNwdSwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MTZfYmUyY3B1 LA0KPiA+PiArCQkJCQkgImZyYWdtZW50X29mZnNldCIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3Bl Yy0+aGRyLmZyYWdtZW50X29mZnNldCksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLmZyYWdtZW50 X29mZnNldCwNCj4gPj4gKwkJCQkJICZsYXN0LT5oZHIuZnJhZ21lbnRfb2Zmc2V0LA0KPiA+PiAr CQkJCQkgJm1hc2stPmhkci5mcmFnbWVudF9vZmZzZXQsDQo+ID4+IE5VTEwpOw0KPiA+PiArCWlm IChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9m bG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4g Pj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfdWludDgsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19z bnByaW50X2hleDgsICJ0dGwiLA0KPiA+PiArCQkJCQkgc2l6ZW9mKHNwZWMtPmhkci50aW1lX3Rv X2xpdmUpLA0KPiA+PiArCQkJCQkgJnNwZWMtPmhkci50aW1lX3RvX2xpdmUsDQo+ID4+ICsJCQkJ CSAmbGFzdC0+aGRyLnRpbWVfdG9fbGl2ZSwNCj4gPj4gKwkJCQkJICZtYXNrLT5oZHIudGltZV90 b19saXZlLCBOVUxMKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0K PiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2l0ZW1fZmllbGQoYnVmLCBidWZf c2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X3VpbnQ4 LA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9oZXg4LCAicHJvdG8iLA0KPiA+PiArCQkJ CQkgc2l6ZW9mKHNwZWMtPmhkci5uZXh0X3Byb3RvX2lkKSwNCj4gPj4gKwkJCQkJICZzcGVjLT5o ZHIubmV4dF9wcm90b19pZCwNCj4gPj4gKwkJCQkJICZsYXN0LT5oZHIubmV4dF9wcm90b19pZCwN Cj4gPj4gKwkJCQkJICZtYXNrLT5oZHIubmV4dF9wcm90b19pZCwgTlVMTCk7DQo+ID4+ICsJaWYg KHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zs b3dfc25wcmludF9pdGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+ PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9pcHY0X2FkZHIsDQo+ID4+ICsJCQkJCSBydGVfZmxv d19zbnByaW50X2lwdjRfYWRkciwgInNyYyIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aGRy LnNyY19hZGRyKSwNCj4gPj4gKwkJCQkJICZzcGVjLT5oZHIuc3JjX2FkZHIsDQo+ID4+ICsJCQkJ CSAmbGFzdC0+aGRyLnNyY19hZGRyLA0KPiA+PiArCQkJCQkgJm1hc2stPmhkci5zcmNfYWRkciwg TlVMTCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0K PiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9pdGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5i X2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9pcHY0X2FkZHIsDQo+ ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X2lwdjRfYWRkciwgImRzdCIsDQo+ID4+ICsJCQkJ CSBzaXplb2Yoc3BlYy0+aGRyLmRzdF9hZGRyKSwNCj4gPj4gKwkJCQkJICZzcGVjLT5oZHIuZHN0 X2FkZHIsDQo+ID4+ICsJCQkJCSAmbGFzdC0+aGRyLmRzdF9hZGRyLA0KPiA+PiArCQkJCQkgJm1h c2stPmhkci5kc3RfYWRkciwgTlVMTCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJl dHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2l0ZW1faXB2NihjaGFyICpidWYs IHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJ CSAgIHZvaWQgKnNwZWNfcHRyLCB2b2lkICpsYXN0X3B0ciwgdm9pZCAqbWFza19wdHIpIHsNCj4g Pj4gKwl1aW50MzJfdCB0Y19mdWxsX21hc2sgPSAoUlRFX0lQVjZfSERSX1RDX01BU0sgPj4NCj4g Pj4gUlRFX0lQVjZfSERSX1RDX1NISUZUKTsNCj4gPj4gKwl1aW50MzJfdCBmbF9mdWxsX21hc2sg PSAoUlRFX0lQVjZfSERSX0ZMX01BU0sgPj4NCj4gPj4gUlRFX0lQVjZfSERSX0ZMX1NISUZUKTsN Cj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2ICpzcGVjID0gc3BlY19wdHI7DQo+ID4+ ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1faXB2NiAqbGFzdCA9IGxhc3RfcHRyOw0KPiA+PiArCXN0 cnVjdCBydGVfZmxvd19pdGVtX2lwdjYgKm1hc2sgPSBtYXNrX3B0cjsNCj4gPj4gKwl1aW50OF90 IGhhc19mcmFnX2V4dF9mdWxsX21hc2sgPSAxOw0KPiA+PiArCXVpbnQ4X3QgaGFzX2ZyYWdfZXh0 X3NwZWM7DQo+ID4+ICsJdWludDhfdCBoYXNfZnJhZ19leHRfbGFzdDsNCj4gPj4gKwl1aW50OF90 IGhhc19mcmFnX2V4dF9tYXNrOw0KPiA+PiArCXVpbnQzMl90IHZ0Y19mbG93Ow0KPiA+PiArCXVp bnQzMl90IGZsX3NwZWM7DQo+ID4+ICsJdWludDMyX3QgZmxfbGFzdDsNCj4gPj4gKwl1aW50MzJf dCBmbF9tYXNrOw0KPiA+PiArCXVpbnQzMl90IHRjX3NwZWM7DQo+ID4+ICsJdWludDMyX3QgdGNf bGFzdDsNCj4gPj4gKwl1aW50MzJfdCB0Y19tYXNrOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0K PiA+PiArCXZ0Y19mbG93ID0gcnRlX2JlX3RvX2NwdV8zMihzcGVjLT5oZHIudnRjX2Zsb3cpOw0K PiA+PiArCXRjX3NwZWMgPSAodnRjX2Zsb3cgJiBSVEVfSVBWNl9IRFJfVENfTUFTSykgPj4NCj4g Pj4gUlRFX0lQVjZfSERSX1RDX1NISUZUOw0KPiA+PiArCWZsX3NwZWMgPSAodnRjX2Zsb3cgJiBS VEVfSVBWNl9IRFJfRkxfTUFTSykgPj4NCj4gPj4gUlRFX0lQVjZfSERSX0ZMX1NISUZUOw0KPiA+ PiArDQo+ID4+ICsJdnRjX2Zsb3cgPSBydGVfYmVfdG9fY3B1XzMyKGxhc3QtPmhkci52dGNfZmxv dyk7DQo+ID4+ICsJdGNfbGFzdCA9ICh2dGNfZmxvdyAmIFJURV9JUFY2X0hEUl9UQ19NQVNLKSA+ Pg0KPiA+PiBSVEVfSVBWNl9IRFJfVENfU0hJRlQ7DQo+ID4+ICsJZmxfbGFzdCA9ICh2dGNfZmxv dyAmIFJURV9JUFY2X0hEUl9GTF9NQVNLKSA+Pg0KPiA+PiBSVEVfSVBWNl9IRFJfRkxfU0hJRlQ7 DQo+ID4+ICsNCj4gPj4gKwl2dGNfZmxvdyA9IHJ0ZV9iZV90b19jcHVfMzIobWFzay0+aGRyLnZ0 Y19mbG93KTsNCj4gPj4gKwl0Y19tYXNrID0gKHZ0Y19mbG93ICYgUlRFX0lQVjZfSERSX1RDX01B U0spID4+DQo+ID4+IFJURV9JUFY2X0hEUl9UQ19TSElGVDsNCj4gPj4gKwlmbF9tYXNrID0gKHZ0 Y19mbG93ICYgUlRFX0lQVjZfSERSX0ZMX01BU0spID4+DQo+ID4+IFJURV9JUFY2X0hEUl9GTF9T SElGVDsNCj4gPj4gKw0KPiA+PiArCW1hc2stPmhkci52dGNfZmxvdyAmPQ0KPiA+PiB+cnRlX2Nw dV90b19iZV8zMihSVEVfSVBWNl9IRFJfVENfTUFTSyB8DQo+ID4+ICsJCQkJCQlSVEVfSVBWNl9I RFJfRkxfTUFTSyk7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9m aWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93 X3NucHJpbnRfaGV4OCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4OCwgInRjIiwN Cj4gPj4gKwkJCQkJIHNpemVvZih0Y19zcGVjKSwgJnRjX3NwZWMsICZ0Y19sYXN0LA0KPiA+PiAr CQkJCQkgJnRjX21hc2ssICZ0Y19mdWxsX21hc2spOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+ PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRl bV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9m bG93X3NucHJpbnRfdWludDMyLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9oZXgyMCwg ImZsb3ciLA0KPiA+PiArCQkJCQkgc2l6ZW9mKGZsX3NwZWMpLCAmZmxfc3BlYywgJmZsX2xhc3Qs DQo+ID4+ICsJCQkJCSAmZmxfbWFzaywgJmZsX2Z1bGxfbWFzayk7DQo+ID4+ICsJaWYgKHJjICE9 IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25w cmludF9pdGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJ CQkgcnRlX2Zsb3dfc25wcmludF91aW50OCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRf aGV4OCwgInByb3RvIiwNCj4gPj4gKwkJCQkJIHNpemVvZihzcGVjLT5oZHIucHJvdG8pLA0KPiA+ PiArCQkJCQkgJnNwZWMtPmhkci5wcm90bywNCj4gPj4gKwkJCQkJICZsYXN0LT5oZHIucHJvdG8s DQo+ID4+ICsJCQkJCSAmbWFzay0+aGRyLnByb3RvLCBOVUxMKTsNCj4gPj4gKwlpZiAocmMgIT0g MCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnBy aW50X2l0ZW1fZmllbGQoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJ CSBydGVfZmxvd19zbnByaW50X3VpbnQ4LA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9o ZXg4LCAiaG9wIiwNCj4gPj4gKwkJCQkJIHNpemVvZihzcGVjLT5oZHIuaG9wX2xpbWl0cyksDQo+ ID4+ICsJCQkJCSAmc3BlYy0+aGRyLmhvcF9saW1pdHMsDQo+ID4+ICsJCQkJCSAmbGFzdC0+aGRy LmhvcF9saW1pdHMsDQo+ID4+ICsJCQkJCSAmbWFzay0+aGRyLmhvcF9saW1pdHMsIE5VTEwpOw0K PiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwly YyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190 b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaXB2Nl9hZGRyLA0KPiA+PiArCQkJ CQkgcnRlX2Zsb3dfc25wcmludF9pcHY2X2FkZHIsICJzcmMiLA0KPiA+PiArCQkJCQkgc2l6ZW9m KHNwZWMtPmhkci5zcmNfYWRkciksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLnNyY19hZGRyLA0K PiA+PiArCQkJCQkgJmxhc3QtPmhkci5zcmNfYWRkciwNCj4gPj4gKwkJCQkJICZtYXNrLT5oZHIu c3JjX2FkZHIsIE5VTEwpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7 DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1 Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaXB2 Nl9hZGRyLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9pcHY2X2FkZHIsICJkc3QiLA0K PiA+PiArCQkJCQkgc2l6ZW9mKHNwZWMtPmhkci5kc3RfYWRkciksDQo+ID4+ICsJCQkJCSAmc3Bl Yy0+aGRyLmRzdF9hZGRyLA0KPiA+PiArCQkJCQkgJmxhc3QtPmhkci5kc3RfYWRkciwNCj4gPj4g KwkJCQkJICZtYXNrLT5oZHIuZHN0X2FkZHIsIE5VTEwpOw0KPiA+PiArDQo+ID4+ICsJaGFzX2Zy YWdfZXh0X3NwZWMgPSBzcGVjLT5oYXNfZnJhZ19leHQ7DQo+ID4+ICsJaGFzX2ZyYWdfZXh0X2xh c3QgPSBsYXN0LT5oYXNfZnJhZ19leHQ7DQo+ID4+ICsJaGFzX2ZyYWdfZXh0X21hc2sgPSBtYXNr LT5oYXNfZnJhZ19leHQ7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRl bV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9m bG93X3NucHJpbnRfdWludDgsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X3VpbnQ4LA0K PiA+PiAiaGFzX2ZyYWdfZXh0IiwNCj4gPj4gKwkJCQkJIHNpemVvZihoYXNfZnJhZ19leHRfc3Bl YyksDQo+ID4+ICsJCQkJCSAmaGFzX2ZyYWdfZXh0X3NwZWMsDQo+ID4+ICZoYXNfZnJhZ19leHRf bGFzdCwNCj4gPj4gKwkJCQkJICZoYXNfZnJhZ19leHRfbWFzaywNCj4gPj4gKwkJCQkJICZoYXNf ZnJhZ19leHRfZnVsbF9tYXNrKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJu IHJjOw0KPiA+PiArDQo+ID4+ICsJbWFzay0+aGFzX2ZyYWdfZXh0ID0gMDsNCj4gPj4gKw0KPiA+ PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICty dGVfZmxvd19zbnByaW50X2l0ZW1fdWRwKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXpl X3QNCj4gPj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJICB2b2lkICpzcGVjX3B0ciwgdm9p ZCAqbGFzdF9wdHIsIHZvaWQgKm1hc2tfcHRyKSB7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0 ZW1fdWRwICpzcGVjID0gc3BlY19wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdWRw ICpsYXN0ID0gbGFzdF9wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdWRwICptYXNr ID0gbWFza19wdHI7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxv d19zbnByaW50X2l0ZW1fZmllbGQoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ ICsJCQkJCSBydGVfZmxvd19zbnByaW50X3VpbnQxNl9iZTJjcHUsDQo+ID4+ICsJCQkJCSBydGVf Zmxvd19zbnByaW50X2hleDE2X2JlMmNwdSwNCj4gPj4gInNyYyIsDQo+ID4+ICsJCQkJCSBzaXpl b2Yoc3BlYy0+aGRyLnNyY19wb3J0KSwNCj4gPj4gKwkJCQkJICZzcGVjLT5oZHIuc3JjX3BvcnQs DQo+ID4+ICsJCQkJCSAmbGFzdC0+aGRyLnNyY19wb3J0LA0KPiA+PiArCQkJCQkgJm1hc2stPmhk ci5zcmNfcG9ydCwgTlVMTCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiBy YzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9pdGVtX2ZpZWxkKGJ1Ziwg YnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF91 aW50MTZfYmUyY3B1LA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9oZXgxNl9iZTJjcHUs DQo+ID4+ICJkc3QiLA0KPiA+PiArCQkJCQkgc2l6ZW9mKHNwZWMtPmhkci5kc3RfcG9ydCksDQo+ ID4+ICsJCQkJCSAmc3BlYy0+aGRyLmRzdF9wb3J0LA0KPiA+PiArCQkJCQkgJmxhc3QtPmhkci5k c3RfcG9ydCwNCj4gPj4gKwkJCQkJICZtYXNrLT5oZHIuZHN0X3BvcnQsIE5VTEwpOw0KPiA+PiAr CWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4g MDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25w cmludF9pdGVtX3RjcChjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ID4+ICpu Yl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCSAgdm9pZCAqc3BlY19wdHIsIHZvaWQgKmxhc3RfcHRy LCB2b2lkICptYXNrX3B0cikgew0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3RjcCAqc3Bl YyA9IHNwZWNfcHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3RjcCAqbGFzdCA9IGxh c3RfcHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3RjcCAqbWFzayA9IG1hc2tfcHRy Ow0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9p dGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkgcnRl X2Zsb3dfc25wcmludF91aW50MTZfYmUyY3B1LA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmlu dF9oZXgxNl9iZTJjcHUsDQo+ID4+ICJzcmMiLA0KPiA+PiArCQkJCQkgc2l6ZW9mKHNwZWMtPmhk ci5zcmNfcG9ydCksDQo+ID4+ICsJCQkJCSAmc3BlYy0+aGRyLnNyY19wb3J0LA0KPiA+PiArCQkJ CQkgJmxhc3QtPmhkci5zcmNfcG9ydCwNCj4gPj4gKwkJCQkJICZtYXNrLT5oZHIuc3JjX3BvcnQs IE5VTEwpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsN Cj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBu Yl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfdWludDE2X2JlMmNw dSwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MTZfYmUyY3B1LA0KPiA+PiAiZHN0 IiwNCj4gPj4gKwkJCQkJIHNpemVvZihzcGVjLT5oZHIuZHN0X3BvcnQpLA0KPiA+PiArCQkJCQkg JnNwZWMtPmhkci5kc3RfcG9ydCwNCj4gPj4gKwkJCQkJICZsYXN0LT5oZHIuZHN0X3BvcnQsDQo+ ID4+ICsJCQkJCSAmbWFzay0+aGRyLmRzdF9wb3J0LCBOVUxMKTsNCj4gPj4gKwlpZiAocmMgIT0g MCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnBy aW50X2l0ZW1fZmllbGQoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJ CSBydGVfZmxvd19zbnByaW50X2hleDgsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X2hl eDgsICJmbGFncyIsDQo+ID4+ICsJCQkJCSBzaXplb2Yoc3BlYy0+aGRyLnRjcF9mbGFncyksDQo+ ID4+ICsJCQkJCSAmc3BlYy0+aGRyLnRjcF9mbGFncywNCj4gPj4gKwkJCQkJICZsYXN0LT5oZHIu dGNwX2ZsYWdzLA0KPiA+PiArCQkJCQkgJm1hc2stPmhkci50Y3BfZmxhZ3MsIE5VTEwpOw0KPiA+ PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1 cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3df c25wcmludF9pdGVtX3Z4bGFuKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4g Pj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJICAgIHZvaWQgKnNwZWNfcHRyLCB2b2lkICps YXN0X3B0ciwgdm9pZCAqbWFza19wdHIpIHsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92 eGxhbiAqc3BlYyA9IHNwZWNfcHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX3Z4bGFu ICpsYXN0ID0gbGFzdF9wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdnhsYW4gKm1h c2sgPSBtYXNrX3B0cjsNCj4gPj4gKwl1aW50MzJfdCB2bmlfZnVsbF9tYXNrID0gMHhmZmZmZmY7 DQo+ID4+ICsJdWludDMyX3Qgdm5pX3NwZWM7DQo+ID4+ICsJdWludDMyX3Qgdm5pX2xhc3Q7DQo+ ID4+ICsJdWludDMyX3Qgdm5pX21hc2s7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJ dm5pX3NwZWMgPSBydGVfYmVfdG9fY3B1XzMyKHNwZWMtPmhkci52eF92bmkpID4+IDg7DQo+ID4+ ICsJdm5pX2xhc3QgPSBydGVfYmVfdG9fY3B1XzMyKGxhc3QtPmhkci52eF92bmkpID4+IDg7DQo+ ID4+ICsJdm5pX21hc2sgPSBydGVfYmVfdG9fY3B1XzMyKG1hc2stPmhkci52eF92bmkpID4+IDg7 DQo+ID4+ICsNCj4gPj4gKwltYXNrLT5oZHIudnhfdm5pICY9IH5SVEVfQkUzMigweGZmZmZmZjAw KTsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9pdGVtX2ZpZWxkKGJ1Ziwg YnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF91 aW50MzIsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X2hleDI0LCAidm5pIiwNCj4gPj4g KwkJCQkJIHNpemVvZih2bmlfc3BlYyksICZ2bmlfc3BlYywNCj4gPj4gKwkJCQkJICZ2bmlfbGFz dCwgJnZuaV9tYXNrLA0KPiA+PiArCQkJCQkgJnZuaV9mdWxsX21hc2spOw0KPiA+PiArCWlmIChy YyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4g Pj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25wcmludF9p dGVtX252Z3JlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gPj4gKm5iX2No YXJzX3RvdGFsLA0KPiA+PiArCQkJICAgIHZvaWQgKnNwZWNfcHRyLCB2b2lkICpsYXN0X3B0ciwg dm9pZCAqbWFza19wdHIpIHsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9udmdyZSAqc3Bl YyA9IHNwZWNfcHRyOw0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVtX252Z3JlICpsYXN0ID0g bGFzdF9wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fbnZncmUgKm1hc2sgPSBtYXNr X3B0cjsNCj4gPj4gKwl1aW50MzJfdCAqdG5pX2FuZF9mbG93X2lkX3NwZWNwID0gKHVpbnQzMl90 ICopc3BlYy0+dG5pOw0KPiA+PiArCXVpbnQzMl90ICp0bmlfYW5kX2Zsb3dfaWRfbGFzdHAgPSAo dWludDMyX3QgKilsYXN0LT50bmk7DQo+ID4+ICsJdWludDMyX3QgKnRuaV9hbmRfZmxvd19pZF9t YXNrcCA9ICh1aW50MzJfdCAqKW1hc2stPnRuaTsNCj4gPj4gKwl1aW50MzJfdCB0bmlfZnVsbF9t YXNrID0gMHhmZmZmZmY7DQo+ID4+ICsJdWludDMyX3QgdG5pX3NwZWM7DQo+ID4+ICsJdWludDMy X3QgdG5pX2xhc3Q7DQo+ID4+ICsJdWludDMyX3QgdG5pX21hc2s7DQo+ID4+ICsJaW50IHJjOw0K PiA+PiArDQo+ID4+ICsJdG5pX3NwZWMgPSBydGVfYmVfdG9fY3B1XzMyKCp0bmlfYW5kX2Zsb3df aWRfc3BlY3ApID4+IDg7DQo+ID4+ICsJdG5pX2xhc3QgPSBydGVfYmVfdG9fY3B1XzMyKCp0bmlf YW5kX2Zsb3dfaWRfbGFzdHApID4+IDg7DQo+ID4+ICsJdG5pX21hc2sgPSBydGVfYmVfdG9fY3B1 XzMyKCp0bmlfYW5kX2Zsb3dfaWRfbWFza3ApID4+IDg7DQo+ID4+ICsNCj4gPj4gKwltZW1zZXQo bWFzay0+dG5pLCAwLCBzaXplb2YobWFzay0+dG5pKSk7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0 ZV9mbG93X3NucHJpbnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwN Cj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfdWludDMyLA0KPiA+PiArCQkJCQkgcnRlX2Zs b3dfc25wcmludF9oZXgyNCwgInRuaSIsDQo+ID4+ICsJCQkJCSBzaXplb2YodG5pX3NwZWMpLCAm dG5pX3NwZWMsDQo+ID4+ICsJCQkJCSAmdG5pX2xhc3QsICZ0bmlfbWFzaywNCj4gPj4gKwkJCQkJ ICZ0bmlfZnVsbF9tYXNrKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJj Ow0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRp YyBpbnQNCj4gPj4gK3J0ZV9mbG93X3NucHJpbnRfaXRlbV9nZW5ldmUoY2hhciAqYnVmLCBzaXpl X3QgYnVmX3NpemUsIHNpemVfdA0KPiA+PiAqbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkgICAg IHZvaWQgKnNwZWNfcHRyLCB2b2lkICpsYXN0X3B0ciwgdm9pZCAqbWFza19wdHIpIHsNCj4gPj4g KwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9nZW5ldmUgKnNwZWMgPSBzcGVjX3B0cjsNCj4gPj4gKwlz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV9nZW5ldmUgKmxhc3QgPSBsYXN0X3B0cjsNCj4gPj4gKwlzdHJ1 Y3QgcnRlX2Zsb3dfaXRlbV9nZW5ldmUgKm1hc2sgPSBtYXNrX3B0cjsNCj4gPj4gKwl1aW50MzJf dCAqdm5pX2FuZF9yc3ZkX3NwZWNwID0gKHVpbnQzMl90ICopc3BlYy0+dm5pOw0KPiA+PiArCXVp bnQzMl90ICp2bmlfYW5kX3JzdmRfbGFzdHAgPSAodWludDMyX3QgKilsYXN0LT52bmk7DQo+ID4+ ICsJdWludDMyX3QgKnZuaV9hbmRfcnN2ZF9tYXNrcCA9ICh1aW50MzJfdCAqKW1hc2stPnZuaTsN Cj4gPj4gKwl1aW50MzJfdCB2bmlfZnVsbF9tYXNrID0gMHhmZmZmZmY7DQo+ID4+ICsJdWludDE2 X3Qgb3B0bGVuX2Z1bGxfbWFzayA9IDB4M2Y7DQo+ID4+ICsJdWludDE2X3Qgb3B0bGVuX3NwZWM7 DQo+ID4+ICsJdWludDE2X3Qgb3B0bGVuX2xhc3Q7DQo+ID4+ICsJdWludDE2X3Qgb3B0bGVuX21h c2s7DQo+ID4+ICsJdWludDMyX3Qgdm5pX3NwZWM7DQo+ID4+ICsJdWludDMyX3Qgdm5pX2xhc3Q7 DQo+ID4+ICsJdWludDMyX3Qgdm5pX21hc2s7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ ICsJb3B0bGVuX3NwZWMgPSBydGVfYmVfdG9fY3B1XzE2KHNwZWMtPnZlcl9vcHRfbGVuX29fY19y c3ZkMCkgJg0KPiA+PiAweDNmMDA7DQo+ID4+ICsJb3B0bGVuX3NwZWMgPj49IDg7DQo+ID4+ICsN Cj4gPj4gKwlvcHRsZW5fbGFzdCA9IHJ0ZV9iZV90b19jcHVfMTYobGFzdC0+dmVyX29wdF9sZW5f b19jX3JzdmQwKSAmDQo+ID4+IDB4M2YwMDsNCj4gPj4gKwlvcHRsZW5fbGFzdCA+Pj0gODsNCj4g Pj4gKw0KPiA+PiArCW9wdGxlbl9tYXNrID0gcnRlX2JlX3RvX2NwdV8xNihtYXNrLT52ZXJfb3B0 X2xlbl9vX2NfcnN2ZDApDQo+ID4+ICYgMHgzZjAwOw0KPiA+PiArCW9wdGxlbl9tYXNrID4+PSA4 Ow0KPiA+PiArDQo+ID4+ICsJbWFzay0+dmVyX29wdF9sZW5fb19jX3JzdmQwICY9IH5SVEVfQkUx NigweDNmMDApOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2l0ZW1fZmll bGQoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19z bnByaW50X3VpbnQxNiwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4OCwgIm9wdGxl biIsDQo+ID4+ICsJCQkJCSBzaXplb2Yob3B0bGVuX3NwZWMpLCAmb3B0bGVuX3NwZWMsDQo+ID4+ ICsJCQkJCSAmb3B0bGVuX2xhc3QsICZvcHRsZW5fbWFzaywNCj4gPj4gKwkJCQkJICZvcHRsZW5f ZnVsbF9tYXNrKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+ PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2l0ZW1fZmllbGQoYnVmLCBidWZfc2l6 ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSBydGVfZmxvd19zbnByaW50X2hleDE2X2Jl MmNwdSwNCj4gPj4gKwkJCQkJIHJ0ZV9mbG93X3NucHJpbnRfaGV4MTZfYmUyY3B1LA0KPiA+PiAr CQkJCQkgInByb3RvY29sIiwgc2l6ZW9mKHNwZWMtPnByb3RvY29sKSwNCj4gPj4gKwkJCQkJICZz cGVjLT5wcm90b2NvbCwgJmxhc3QtPnByb3RvY29sLA0KPiA+PiArCQkJCQkgJm1hc2stPnByb3Rv Y29sLCBOVUxMKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+ PiArDQo+ID4+ICsJdm5pX3NwZWMgPSBydGVfYmVfdG9fY3B1XzMyKCp2bmlfYW5kX3JzdmRfc3Bl Y3ApID4+IDg7DQo+ID4+ICsJdm5pX2xhc3QgPSBydGVfYmVfdG9fY3B1XzMyKCp2bmlfYW5kX3Jz dmRfbGFzdHApID4+IDg7DQo+ID4+ICsJdm5pX21hc2sgPSBydGVfYmVfdG9fY3B1XzMyKCp2bmlf YW5kX3JzdmRfbWFza3ApID4+IDg7DQo+ID4+ICsNCj4gPj4gKwltZW1zZXQobWFzay0+dm5pLCAw LCBzaXplb2YobWFzay0+dm5pKSk7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJp bnRfaXRlbV9maWVsZChidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJ IHJ0ZV9mbG93X3NucHJpbnRfdWludDMyLA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF9o ZXgyNCwgInZuaSIsDQo+ID4+ICsJCQkJCSBzaXplb2Yodm5pX3NwZWMpLCAmdm5pX3NwZWMsDQo+ ID4+ICsJCQkJCSAmdm5pX2xhc3QsICZ2bmlfbWFzaywNCj4gPj4gKwkJCQkJICZ2bmlfZnVsbF9t YXNrKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4g K3J0ZV9mbG93X3NucHJpbnRfaXRlbV9tYXJrKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBz aXplX3QNCj4gPj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJICAgdm9pZCAqc3BlY19wdHIs IHZvaWQgKmxhc3RfcHRyLCB2b2lkICptYXNrX3B0cikgew0KPiA+PiArCXN0cnVjdCBydGVfZmxv d19pdGVtX21hcmsgKnNwZWMgPSBzcGVjX3B0cjsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRl bV9tYXJrICpsYXN0ID0gbGFzdF9wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fbWFy ayAqbWFzayA9IG1hc2tfcHRyOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0g cnRlX2Zsb3dfc25wcmludF9pdGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFs LA0KPiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF91aW50MzIsDQo+ID4+ICsJCQkJCSBydGVf Zmxvd19zbnByaW50X2hleDMyLCAiaWQiLA0KPiA+PiArCQkJCQkgc2l6ZW9mKHNwZWMtPmlkKSwg JnNwZWMtPmlkLA0KPiA+PiArCQkJCQkgJmxhc3QtPmlkLCAmbWFzay0+aWQsIE5VTEwpOw0KPiA+ PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1 cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3df c25wcmludF9pdGVtX3BwcG9lZChjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCSAgICAgdm9pZCAqc3BlY19wdHIsIHZvaWQg Kmxhc3RfcHRyLCB2b2lkICptYXNrX3B0cikgew0KPiA+PiArCXN0cnVjdCBydGVfZmxvd19pdGVt X3BwcG9lICpzcGVjID0gc3BlY19wdHI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9mbG93X2l0ZW1fcHBw b2UgKmxhc3QgPSBsYXN0X3B0cjsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9wcHBvZSAq bWFzayA9IG1hc2tfcHRyOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRl X2Zsb3dfc25wcmludF9pdGVtX2ZpZWxkKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0K PiA+PiArCQkJCQkgcnRlX2Zsb3dfc25wcmludF91aW50MTZfYmUyY3B1LA0KPiA+PiArCQkJCQkg cnRlX2Zsb3dfc25wcmludF9oZXgxNl9iZTJjcHUsDQo+ID4+ICsJCQkJCSAic2VpZCIsIHNpemVv ZihzcGVjLT5zZXNzaW9uX2lkKSwNCj4gPj4gKwkJCQkJICZzcGVjLT5zZXNzaW9uX2lkLCAmbGFz dC0NCj4gPj4+IHNlc3Npb25faWQsDQo+ID4+ICsJCQkJCSAmbWFzay0+c2Vzc2lvbl9pZCwgTlVM TCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+ PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHsNCj4gPj4gKwljb25zdCBjaGFyICpuYW1lOw0KPiA+PiArCWludCAoKnBhcnNlX2NiKShjaGFy ICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90ICpuYl9jaGFyX3RvdGFsLA0KPiA+PiArCQkJ dm9pZCAqc3BlY19wdHIsIHZvaWQgKmxhc3RfcHRyLCB2b2lkICptYXNrX3B0cik7DQo+ID4+ICsJ c2l6ZV90IHNpemU7DQo+ID4+ICt9IGl0ZW1fdGFibGVbXSA9IHsNCj4gPj4gKwlbUlRFX0ZMT1df SVRFTV9UWVBFX1ZPSURdID0gew0KPiA+PiArCQkubmFtZSA9ICJ2b2lkIg0KPiA+PiArCX0sDQo+ ID4+ICsJW1JURV9GTE9XX0lURU1fVFlQRV9QRl0gPSB7DQo+ID4+ICsJCS5uYW1lID0gInBmIg0K PiA+PiArCX0sDQo+ID4+ICsJW1JURV9GTE9XX0lURU1fVFlQRV9QUFBPRVNdID0gew0KPiA+PiAr CQkubmFtZSA9ICJwcHBvZXMiDQo+ID4+ICsJfSwNCj4gPj4gKwlbUlRFX0ZMT1dfSVRFTV9UWVBF X1BQUE9FRF0gPSB7DQo+ID4+ICsJCS5uYW1lID0gInBwcG9lZCIsDQo+ID4+ICsJCS5wYXJzZV9j YiA9IHJ0ZV9mbG93X3NucHJpbnRfaXRlbV9wcHBvZWQsDQo+ID4+ICsJCS5zaXplID0gc2l6ZW9m KHN0cnVjdCBydGVfZmxvd19pdGVtX3BwcG9lKQ0KPiA+PiArCX0sDQo+ID4+ICsNCj4gPj4gKyNk ZWZpbmUgSVRFTShfbmFtZV91cHBlcmNhc2UsIF9uYW1lX2xvd2VyY2FzZSkgXA0KPiA+PiArCVtS VEVfRkxPV19JVEVNX1RZUEVfIyNfbmFtZV91cHBlcmNhc2VdID0gew0KPiA+PiAJXA0KPiA+PiAr CQkubmFtZSA9ICNfbmFtZV9sb3dlcmNhc2UsCQkJCVwNCj4gPj4gKwkJLnBhcnNlX2NiID0gcnRl X2Zsb3dfc25wcmludF9pdGVtXyMjX25hbWVfbG93ZXJjYXNlLA0KPiA+PiAJXA0KPiA+PiArCQku c2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV8jI19uYW1lX2xvd2VyY2FzZSkNCj4g Pj4gCVwNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlJVEVNKFZGLCB2ZiksDQo+ID4+ICsJSVRF TShQSFlfUE9SVCwgcGh5X3BvcnQpLA0KPiA+PiArCUlURU0oUE9SVF9JRCwgcG9ydF9pZCksDQo+ ID4+ICsJSVRFTShFVEgsIGV0aCksDQo+ID4+ICsJSVRFTShWTEFOLCB2bGFuKSwNCj4gPj4gKwlJ VEVNKElQVjQsIGlwdjQpLA0KPiA+PiArCUlURU0oSVBWNiwgaXB2NiksDQo+ID4+ICsJSVRFTShV RFAsIHVkcCksDQo+ID4+ICsJSVRFTShUQ1AsIHRjcCksDQo+ID4+ICsJSVRFTShWWExBTiwgdnhs YW4pLA0KPiA+PiArCUlURU0oTlZHUkUsIG52Z3JlKSwNCj4gPj4gKwlJVEVNKEdFTkVWRSwgZ2Vu ZXZlKSwNCj4gPj4gKwlJVEVNKE1BUkssIG1hcmspLA0KPiA+PiArDQo+ID4+ICsjdW5kZWYgSVRF TQ0KPiA+PiArfTsNCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25w cmludF9pdGVtKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gKm5iX2NoYXJz X3RvdGFsLA0KPiA+PiArCQkgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSAqaXRlbSkg ew0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCWlmIChpdGVtLT50eXBlIDwgMCB8fCBp dGVtLT50eXBlID49IFJURV9ESU0oaXRlbV90YWJsZSkgfHwNCj4gPj4gKwkgICAgaXRlbV90YWJs ZVtpdGVtLT50eXBlXS5uYW1lID09IE5VTEwpIHsNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnBy aW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAie3Vu a25vd259Iik7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+ PiArDQo+ID4+ICsJCWdvdG8gb3V0Ow0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJjID0gcnRl X2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJ CQkJICBpdGVtX3RhYmxlW2l0ZW0tPnR5cGVdLm5hbWUpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0K PiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlpZiAoaXRlbV90YWJsZVtpdGVtLT50 eXBlXS5wYXJzZV9jYiAhPSBOVUxMKSB7DQo+ID4+ICsJCXNpemVfdCBpdGVtX3NpemUgPSBpdGVt X3RhYmxlW2l0ZW0tPnR5cGVdLnNpemU7DQo+ID4+ICsJCXVpbnQ4X3Qgc3BlY1tpdGVtX3NpemVd Ow0KPiA+PiArCQl1aW50OF90IGxhc3RbaXRlbV9zaXplXTsNCj4gPj4gKwkJdWludDhfdCBtYXNr W2l0ZW1fc2l6ZV07DQo+ID4+ICsNCj4gPj4gKwkJcnRlX2Zsb3dfaXRlbV9pbml0X3BhcnNlKGl0 ZW0sIGl0ZW1fc2l6ZSwgc3BlYywgbGFzdCwgbWFzayk7DQo+ID4+ICsNCj4gPj4gKwkJcmMgPSBp dGVtX3RhYmxlW2l0ZW0tPnR5cGVdLnBhcnNlX2NiKGJ1ZiwgYnVmX3NpemUsDQo+ID4+ICsJCQkJ CQkgICAgIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkJICAgICBzcGVjLCBsYXN0LCBtYXNr KTsNCj4gPj4gKwkJaWYgKHJjICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4g Pj4gKwkJaWYgKCFydGVfZmxvd19idWZfaXNfYWxsX3plcm9zKG1hc2ssIGl0ZW1fc2l6ZSkpIHsN Cj4gPj4gKwkJCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwNCj4gPj4g KwkJCQkJCSAgICBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJCSAgICAie3Vua25vd24gYml0 c30iKTsNCj4gPj4gKwkJCWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJCXJldHVybiByYzsNCj4gPj4g KwkJfQ0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArb3V0Og0KPiA+PiArCXJjID0gcnRlX2Zsb3df c25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICIvIik7DQo+ID4+ICsJ aWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAw Ow0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnBy aW50X3BhdHRlcm4oY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIHNpemVfdA0KPiA+PiAqbmJf Y2hhcnNfdG90YWwsDQo+ID4+ICsJCQkgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gcGF0dGVy bltdKSB7DQo+ID4+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKml0ZW07DQo+ID4+ICsJ aW50IHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1 Zl9zaXplLCBuYl9jaGFyc190b3RhbCwgInBhdHRlcm4iKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkN Cj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJaWYgKHBhdHRlcm4gPT0gTlVMTCkN Cj4gPj4gKwkJZ290byBlbmQ7DQo+ID4+ICsNCj4gPj4gKwlmb3IgKGl0ZW0gPSBwYXR0ZXJuOw0K PiA+PiArCSAgICAgaXRlbS0+dHlwZSAhPSBSVEVfRkxPV19JVEVNX1RZUEVfRU5EOyArK2l0ZW0p IHsNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X2l0ZW0oYnVmLCBidWZfc2l6ZSwgbmJf Y2hhcnNfdG90YWwsDQo+ID4+IGl0ZW0pOw0KPiA+PiArCQlpZiAocmMgIT0gMCkNCj4gPj4gKwkJ CXJldHVybiByYzsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gK2VuZDoNCj4gPj4gKwlyYyA9IHJ0 ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAiZW5kIik7 DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiAr CXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVf Zmxvd19zbnByaW50X2FjdGlvbl9qdW1wKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXpl X3QNCj4gPj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJICAgICBjb25zdCB2b2lkICpjb25m X3B0cikNCj4gPj4gK3sNCj4gPj4gKwljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX2p1bXAg KmNvbmYgPSBjb25mX3B0cjsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0 ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAiZ3JvdXAi KTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3VpbnQzMihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190 b3RhbCwNCj4gPj4gKwkJCQkgICAgICZjb25mLT5ncm91cCk7DQo+ID4+ICsJaWYgKHJjICE9IDAp DQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0K PiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2FjdGlvbl9t YXJrKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QNCj4gPj4gKm5iX2NoYXJzX3Rv dGFsLA0KPiA+PiArCQkJICAgICBjb25zdCB2b2lkICpjb25mX3B0cikNCj4gPj4gK3sNCj4gPj4g Kwljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX21hcmsgKmNvbmYgPSBjb25mX3B0cjsNCj4g Pj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1 ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAiaWQiKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkN Cj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50 X3VpbnQzMihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwgJmNvbmYtDQo+ID4+PiBpZCk7 DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiAr CXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVf Zmxvd19zbnByaW50X2FjdGlvbl9xdWV1ZShjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwNCj4g Pj4gKwkJCSAgICAgIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsIGNvbnN0IHZvaWQgKmNvbmZfcHRy KSB7DQo+ID4+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9xdWV1ZSAqY29uZiA9IGNv bmZfcHRyOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25w cmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICJpbmRleCIpOw0KPiA+PiAr CWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0 ZV9mbG93X3NucHJpbnRfdWludDE2KGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+ PiArCQkJCSAgICAgJmNvbmYtPmluZGV4KTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJ cmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4g Pj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93X3NucHJpbnRfYWN0aW9uX2NvdW50KGNoYXIg KmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLA0KPiA+PiArCQkJICAgICAgc2l6ZV90ICpuYl9jaGFyc190 b3RhbCwgY29uc3Qgdm9pZCAqY29uZl9wdHIpIHsNCj4gPj4gKwljb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfYWN0aW9uX2NvdW50ICpjb25mID0gY29uZl9wdHI7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiAr DQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFy c190b3RhbCwgImlkZW50aWZpZXIiKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0 dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3VpbnQzMihidWYs IGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwgJmNvbmYtDQo+ID4+PiBpZCk7DQo+ID4+ICsJaWYg KHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCWlmIChjb25mLT5z aGFyZWQpIHsNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXpl LCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAic2hhcmVkIik7DQo+ID4+ICsJCWlmIChy YyAhPSAwKQ0KPiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJl dHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVfZmxv d19zbnByaW50X2FjdGlvbl9yc3NfZnVuYyhjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwNCj4g Pj4gKwkJCQkgc2l6ZV90ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkgZW51bSBydGVfZXRo X2hhc2hfZnVuY3Rpb24gZnVuYykNCj4gPj4gK3sNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4g Pj4gKwlpZiAoZnVuYyA9PSBSVEVfRVRIX0hBU0hfRlVOQ1RJT05fREVGQVVMVCkNCj4gPj4gKwkJ cmV0dXJuIDA7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1Ziwg YnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAiZnVuYyIpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0K PiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlzd2l0Y2ggKGZ1bmMpIHsNCj4gPj4g KwljYXNlIFJURV9FVEhfSEFTSF9GVU5DVElPTl9UT0VQTElUWjoNCj4gPj4gKwkJcmMgPSBydGVf Zmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJ CQkJICAidG9lcGxpdHoiKTsNCj4gPj4gKwkJYnJlYWs7DQo+ID4+ICsJY2FzZSBSVEVfRVRIX0hB U0hfRlVOQ1RJT05fU0lNUExFX1hPUjoNCj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0 cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAic2ltcGxlX3hv ciIpOw0KPiA+PiArCQlicmVhazsNCj4gPj4gKwljYXNlIFJURV9FVEhfSEFTSF9GVU5DVElPTl9T WU1NRVRSSUNfVE9FUExJVFo6DQo+ID4+ICsJCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVm LCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSAgInN5bW1ldHJpY190b2Vw bGl0eiIpOw0KPiA+PiArCQlicmVhazsNCj4gPj4gKwlkZWZhdWx0Og0KPiA+PiArCQlyYyA9IHJ0 ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiAr CQkJCQkgICJ7dW5rbm93bn0iKTsNCj4gPj4gKwkJYnJlYWs7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ ID4+ICsJcmV0dXJuIHJjOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ ICtydGVfZmxvd19zbnByaW50X2FjdGlvbl9yc3NfbGV2ZWwoY2hhciAqYnVmLCBzaXplX3QgYnVm X3NpemUsDQo+ID4+ICsJCQkJICBzaXplX3QgKm5iX2NoYXJzX3RvdGFsLCB1aW50MzJfdCBsZXZl bCkgew0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCWlmIChsZXZlbCA9PSAwKQ0KPiA+ PiArCQlyZXR1cm4gMDsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIo YnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICJsZXZlbCIpOw0KPiA+PiArCWlmIChyYyAh PSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3Nu cHJpbnRfdWludDMyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAmbGV2ZWwpOw0KPiA+ PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1 cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB7DQo+ID4+ ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gPj4gKwl1aW50NjRfdCBmbGFnOw0KPiA+PiArfSByc3Nf dHlwZV90YWJsZVtdID0gew0KPiA+PiArCXsgImlwdjQiLCBFVEhfUlNTX0lQVjQgfSwNCj4gPj4g Kwl7ICJpcHY0LWZyYWciLCBFVEhfUlNTX0ZSQUdfSVBWNCB9LA0KPiA+PiArCXsgImlwdjQtdGNw IiwgRVRIX1JTU19OT05GUkFHX0lQVjRfVENQIH0sDQo+ID4+ICsJeyAiaXB2NC11ZHAiLCBFVEhf UlNTX05PTkZSQUdfSVBWNF9VRFAgfSwNCj4gPj4gKwl7ICJpcHY0LW90aGVyIiwgRVRIX1JTU19O T05GUkFHX0lQVjRfT1RIRVIgfSwNCj4gPj4gKwl7ICJpcHY2IiwgRVRIX1JTU19JUFY2IH0sDQo+ ID4+ICsJeyAiaXB2Ni1mcmFnIiwgRVRIX1JTU19GUkFHX0lQVjYgfSwNCj4gPj4gKwl7ICJpcHY2 LXRjcCIsIEVUSF9SU1NfTk9ORlJBR19JUFY2X1RDUCB9LA0KPiA+PiArCXsgImlwdjYtdWRwIiwg RVRIX1JTU19OT05GUkFHX0lQVjZfVURQIH0sDQo+ID4+ICsJeyAiaXB2Ni1vdGhlciIsIEVUSF9S U1NfTk9ORlJBR19JUFY2X09USEVSIH0sDQo+ID4+ICsJeyAiaXB2Ni1leCIsIEVUSF9SU1NfSVBW Nl9FWCB9LA0KPiA+PiArCXsgImlwdjYtdGNwLWV4IiwgRVRIX1JTU19JUFY2X1RDUF9FWCB9LA0K PiA+PiArCXsgImlwdjYtdWRwLWV4IiwgRVRIX1JTU19JUFY2X1VEUF9FWCB9LA0KPiA+PiArDQo+ ID4+ICsJeyAibDMtc3JjLW9ubHkiLCBFVEhfUlNTX0wzX1NSQ19PTkxZIH0sDQo+ID4+ICsJeyAi bDMtZHN0LW9ubHkiLCBFVEhfUlNTX0wzX0RTVF9PTkxZIH0sDQo+ID4+ICsJeyAibDQtc3JjLW9u bHkiLCBFVEhfUlNTX0w0X1NSQ19PTkxZIH0sDQo+ID4+ICsJeyAibDQtZHN0LW9ubHkiLCBFVEhf UlNTX0w0X0RTVF9PTkxZIH0sIH07DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0 ZV9mbG93X3NucHJpbnRfYWN0aW9uX3Jzc190eXBlcyhjaGFyICpidWYsIHNpemVfdCBidWZfc2l6 ZSwNCj4gPj4gKwkJCQkgIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsIHVpbnQ2NF90IHR5cGVzKSB7 DQo+ID4+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJ aWYgKHR5cGVzID09IDApDQo+ID4+ICsJCXJldHVybiAwOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBy dGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwgInR5cGVz Iik7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+ PiArCWZvciAoaSA9IDA7IGkgPCBSVEVfRElNKHJzc190eXBlX3RhYmxlKTsgKytpKSB7DQo+ID4+ ICsJCXVpbnQ2NF90IGZsYWcgPSByc3NfdHlwZV90YWJsZVtpXS5mbGFnOw0KPiA+PiArDQo+ID4+ ICsJCWlmICgodHlwZXMgJiBmbGFnKSA9PSAwKQ0KPiA+PiArCQkJY29udGludWU7DQo+ID4+ICsN Cj4gPj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFy c190b3RhbCwNCj4gPj4gKwkJCQkJICByc3NfdHlwZV90YWJsZVtpXS5uYW1lKTsNCj4gPj4gKwkJ aWYgKHJjICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwkJdHlwZXMg Jj0gfmZsYWc7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJaWYgKHR5cGVzICE9IDApIHsNCj4g Pj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190 b3RhbCwNCj4gPj4gKwkJCQkJICAie3Vua25vd259Iik7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0K PiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zs b3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICJlbmQiKTsNCj4g Pj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmV0 dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93 X3NucHJpbnRfYWN0aW9uX3Jzc19xdWV1ZXMoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsDQo+ ID4+ICsJCQkJICAgc2l6ZV90ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkgICBjb25zdCB1 aW50MTZfdCAqcXVldWVzLA0KPiA+PiArCQkJCSAgIHVuc2lnbmVkIGludCBuYl9xdWV1ZXMpDQo+ ID4+ICt7DQo+ID4+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ ID4+ICsJaWYgKG5iX3F1ZXVlcyA9PSAwKQ0KPiA+PiArCQlyZXR1cm4gMDsNCj4gPj4gKw0KPiA+ PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90 YWwsICJxdWV1ZXMiKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0K PiA+PiArDQo+ID4+ICsJZm9yIChpID0gMDsgaSA8IG5iX3F1ZXVlczsgKytpKSB7DQo+ID4+ICsJ CXJjID0gcnRlX2Zsb3dfc25wcmludF91aW50MTYoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90 YWwsDQo+ID4+ICsJCQkJCSAgICAgJnF1ZXVlc1tpXSk7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0K PiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zs b3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICJlbmQiKTsNCj4g Pj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmV0 dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93 X3NucHJpbnRfYWN0aW9uX3JzcyhjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90DQo+ ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCSAgICBjb25zdCB2b2lkICpjb25mX3B0cikN Cj4gPj4gK3sNCj4gPj4gKwljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqY29uZiA9 IGNvbmZfcHRyOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3df c25wcmludF9hY3Rpb25fcnNzX2Z1bmMoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ ID4+ICsJCQkJCSAgICAgIGNvbmYtPmZ1bmMpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiAr CQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfYWN0aW9u X3Jzc19sZXZlbChidWYsIGJ1Zl9zaXplLA0KPiA+PiBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJ CQkJICAgICAgIGNvbmYtPmxldmVsKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0 dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2FjdGlvbl9yc3Nf dHlwZXMoYnVmLCBidWZfc2l6ZSwNCj4gPj4gbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSAg ICAgICBjb25mLT50eXBlcyk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiBy YzsNCj4gPj4gKw0KPiA+PiArCWlmIChjb25mLT5rZXlfbGVuICE9IDApIHsNCj4gPj4gKwkJaWYg KGNvbmYtPmtleSAhPSBOVUxMKSB7DQo+ID4+ICsJCQl1bnNpZ25lZCBpbnQgaTsNCj4gPj4gKw0K PiA+PiArCQkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLA0KPiA+PiBu Yl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJCSAgIiIgLyogcmVzdWx0cyBpbiBzcGFjZSAqLyk7 DQo+ID4+ICsJCQlpZiAocmMgIT0gMCkNCj4gPj4gKwkJCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4g Pj4gKwkJCWZvciAoaSA9IDA7IGkgPCBjb25mLT5rZXlfbGVuOyArK2kpIHsNCj4gPj4gKwkJCQly YyA9IHJ0ZV9mbG93X3NucHJpbnRfYnl0ZShidWYsIGJ1Zl9zaXplLA0KPiA+PiArCQkJCQkJCSAg IG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkJCSAgICZjb25mLT5rZXlbaV0pOw0KPiA+PiAr CQkJCWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJCQlyZXR1cm4gcmM7DQo+ID4+ICsJCQl9DQo+ID4+ ICsJCX0NCj4gPj4gKw0KPiA+PiArCQlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVm X3NpemUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkgICJrZXlfbGVuIik7DQo+ID4+ICsJ CWlmIChyYyAhPSAwKQ0KPiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJCXJjID0g cnRlX2Zsb3dfc25wcmludF91aW50MzIoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ ID4+ICsJCQkJCSAgICAgJmNvbmYtPmtleV9sZW4pOw0KPiA+PiArCQlpZiAocmMgIT0gMCkNCj4g Pj4gKwkJCXJldHVybiByYzsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93 X3NucHJpbnRfYWN0aW9uX3Jzc19xdWV1ZXMoYnVmLCBidWZfc2l6ZSwNCj4gPj4gbmJfY2hhcnNf dG90YWwsDQo+ID4+ICsJCQkJCQljb25mLT5xdWV1ZSwgY29uZi0NCj4gPj4+IHF1ZXVlX251bSk7 DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiAr CXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtydGVf Zmxvd19zbnByaW50X2FjdGlvbl92ZihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90 DQo+ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCSAgIGNvbnN0IHZvaWQgKmNvbmZfcHRy KQ0KPiA+PiArew0KPiA+PiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fdmYgKmNvbmYg PSBjb25mX3B0cjsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlpZiAoY29uZi0+b3Jp Z2luYWwpIHsNCj4gPj4gKwkJcmV0dXJuIHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3Np emUsIG5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCQkgICAgIm9yaWdpbmFsIG9uIik7DQo+ID4+ ICsJfQ0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9z aXplLCBuYl9jaGFyc190b3RhbCwgImlkIik7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJ CXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF91aW50MzIo YnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICZjb25mLQ0KPiA+Pj4gaWQpOw0KPiA+PiAr CWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4g MDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArcnRlX2Zsb3dfc25w cmludF9hY3Rpb25fcGh5X3BvcnQoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsDQo+ID4+ICsJ CQkJIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsIGNvbnN0IHZvaWQNCj4gPj4gKmNvbmZfcHRyKSB7 DQo+ID4+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9waHlfcG9ydCAqY29uZiA9IGNv bmZfcHRyOw0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCWlmIChjb25mLT5vcmlnaW5h bCkgew0KPiA+PiArCQlyZXR1cm4gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwg bmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJCSAgICAib3JpZ2luYWwgb24iKTsNCj4gPj4gKwl9 DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUs IG5iX2NoYXJzX3RvdGFsLCAiaW5kZXgiKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJ cmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3VpbnQzMihi dWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkgICAgICZjb25mLT5pbmRl eCk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+ PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICty dGVfZmxvd19zbnByaW50X2FjdGlvbl9wb3J0X2lkKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXpl LA0KPiA+PiArCQkJCXNpemVfdCAqbmJfY2hhcnNfdG90YWwsIGNvbnN0IHZvaWQgKmNvbmZfcHRy KQ0KPiA+PiB7DQo+ID4+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9wb3J0X2lkICpj b25mID0gY29uZl9wdHI7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJaWYgKGNvbmYt Pm9yaWdpbmFsKSB7DQo+ID4+ICsJCXJldHVybiBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1 Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJICAgICJvcmlnaW5hbCBvbiIpOw0K PiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBi dWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsICJpZCIpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+ PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfdWlu dDMyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAmY29uZi0NCj4gPj4+IGlkKTsNCj4g Pj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmV0 dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93 X3NucHJpbnRfYWN0aW9uX29mX3B1c2hfdmxhbihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwN Cj4gPj4gKwkJCQkgICAgIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJICAgICBj b25zdCB2b2lkICpjb25mX3B0cikNCj4gPj4gK3sNCj4gPj4gKwljb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfYWN0aW9uX29mX3B1c2hfdmxhbiAqY29uZiA9IGNvbmZfcHRyOw0KPiA+PiArCWludCByYzsN Cj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwg bmJfY2hhcnNfdG90YWwsDQo+ID4+ICJldGhlcnR5cGUiKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkN Cj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50 X2hleDE2X2JlMmNwdShidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJ ICAgJmNvbmYtPmV0aGVydHlwZSk7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVy biByYzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtz dGF0aWMgaW50DQo+ID4+ICtydGVfZmxvd19zbnByaW50X2FjdGlvbl9vZl9zZXRfdmxhbl92aWQo Y2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsDQo+ID4+ICsJCQkJCXNpemVfdCAqbmJfY2hhcnNf dG90YWwsDQo+ID4+ICsJCQkJCWNvbnN0IHZvaWQgKmNvbmZfcHRyKQ0KPiA+PiArew0KPiA+PiAr CWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fb2Zfc2V0X3ZsYW5fdmlkICpjb25mID0gY29u Zl9wdHI7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnBy aW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwgInZsYW5fdmlkIik7DQo+ID4+ ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4gPj4gKw0KPiA+PiArCXJjID0g cnRlX2Zsb3dfc25wcmludF91aW50MTZfYmUyY3B1KGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3Rv dGFsLA0KPiA+PiArCQkJCQkgICAgJmNvbmYtPnZsYW5fdmlkKTsNCj4gPj4gKwlpZiAocmMgIT0g MCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9 DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93X3NucHJpbnRfYWN0aW9u X29mX3NldF92bGFuX3BjcChjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwNCj4gPj4gKwkJCQkJ c2l6ZV90ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJY29uc3Qgdm9pZCAqY29uZl9wdHIp DQo+ID4+ICt7DQo+ID4+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9vZl9zZXRfdmxh bl9wY3AgKmNvbmYgPSBjb25mX3B0cjsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwly YyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFsLCAi dmxhbl9wY3AiKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+ PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3VpbnQ4KGJ1ZiwgYnVmX3NpemUsIG5i X2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJCSAgICAmY29uZi0+dmxhbl9wY3ApOw0KPiA+PiArCWlm IChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsN Cj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB7DQo+ID4+ICsJY29u c3QgY2hhciAqbmFtZTsNCj4gPj4gKwlpbnQgKCpwYXJzZV9jYikoY2hhciAqYnVmLCBzaXplX3Qg YnVmX3NpemUsIHNpemVfdCAqbmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQljb25zdCB2b2lkICpj b25mX3B0cik7DQo+ID4+ICt9IGFjdGlvbl90YWJsZVtdID0gew0KPiA+PiArCVtSVEVfRkxPV19B Q1RJT05fVFlQRV9WT0lEXSA9IHsNCj4gPj4gKwkJLm5hbWUgPSAidm9pZCINCj4gPj4gKwl9LA0K PiA+PiArCVtSVEVfRkxPV19BQ1RJT05fVFlQRV9GTEFHXSA9IHsNCj4gPj4gKwkJLm5hbWUgPSAi ZmxhZyINCj4gPj4gKwl9LA0KPiA+PiArCVtSVEVfRkxPV19BQ1RJT05fVFlQRV9EUk9QXSA9IHsN Cj4gPj4gKwkJLm5hbWUgPSAiZHJvcCINCj4gPj4gKwl9LA0KPiA+PiArCVtSVEVfRkxPV19BQ1RJ T05fVFlQRV9QRl0gPSB7DQo+ID4+ICsJCS5uYW1lID0gInBmIg0KPiA+PiArCX0sDQo+ID4+ICsJ W1JURV9GTE9XX0FDVElPTl9UWVBFX09GX1BPUF9WTEFOXSA9IHsNCj4gPj4gKwkJLm5hbWUgPSAi b2ZfcG9wX3ZsYW4iDQo+ID4+ICsJfSwNCj4gPj4gKwlbUlRFX0ZMT1dfQUNUSU9OX1RZUEVfVlhM QU5fRU5DQVBdID0gew0KPiA+PiArCQkubmFtZSA9ICJ2eGxhbl9lbmNhcCINCj4gPj4gKwl9LA0K PiA+PiArCVtSVEVfRkxPV19BQ1RJT05fVFlQRV9WWExBTl9ERUNBUF0gPSB7DQo+ID4+ICsJCS5u YW1lID0gInZ4bGFuX2RlY2FwIg0KPiA+PiArCX0sDQo+ID4+ICsNCj4gPj4gKyNkZWZpbmUgQUNU SU9OKF9uYW1lX3VwcGVyY2FzZSwgX25hbWVfbG93ZXJjYXNlKSBcDQo+ID4+ICsJW1JURV9GTE9X X0FDVElPTl9UWVBFXyMjX25hbWVfdXBwZXJjYXNlXSA9IHsNCj4gPj4gCVwNCj4gPj4gKwkJLm5h bWUgPSAjX25hbWVfbG93ZXJjYXNlLAkJCQlcDQo+ID4+ICsJCS5wYXJzZV9jYiA9IHJ0ZV9mbG93 X3NucHJpbnRfYWN0aW9uXyMjX25hbWVfbG93ZXJjYXNlLA0KPiA+PiAJXA0KPiA+PiArCX0NCj4g Pj4gKw0KPiA+PiArCUFDVElPTihKVU1QLCBqdW1wKSwNCj4gPj4gKwlBQ1RJT04oTUFSSywgbWFy ayksDQo+ID4+ICsJQUNUSU9OKFFVRVVFLCBxdWV1ZSksDQo+ID4+ICsJQUNUSU9OKENPVU5ULCBj b3VudCksDQo+ID4+ICsJQUNUSU9OKFJTUywgcnNzKSwNCj4gPj4gKwlBQ1RJT04oVkYsIHZmKSwN Cj4gPj4gKwlBQ1RJT04oUEhZX1BPUlQsIHBoeV9wb3J0KSwNCj4gPj4gKwlBQ1RJT04oUE9SVF9J RCwgcG9ydF9pZCksDQo+ID4+ICsJQUNUSU9OKE9GX1BVU0hfVkxBTiwgb2ZfcHVzaF92bGFuKSwN Cj4gPj4gKwlBQ1RJT04oT0ZfU0VUX1ZMQU5fVklELCBvZl9zZXRfdmxhbl92aWQpLA0KPiA+PiAr CUFDVElPTihPRl9TRVRfVkxBTl9QQ1AsIG9mX3NldF92bGFuX3BjcCksDQo+ID4+ICsNCj4gPj4g KyN1bmRlZiBBQ1RJT04NCj4gPj4gK307DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4g K3J0ZV9mbG93X3NucHJpbnRfYWN0aW9uKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXpl X3QNCj4gKm5iX2NoYXJzX3RvdGFsLA0KPiA+PiArCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2Fj dGlvbiAqYWN0aW9uKSB7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJaWYgKGFjdGlv bi0+dHlwZSA8IDAgfHwgYWN0aW9uLT50eXBlID49IFJURV9ESU0oYWN0aW9uX3RhYmxlKSB8fA0K PiA+PiArCSAgICBhY3Rpb25fdGFibGVbYWN0aW9uLT50eXBlXS5uYW1lID09IE5VTEwpIHsNCj4g Pj4gKwkJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190 b3RhbCwNCj4gPj4gKwkJCQkJICAie3Vua25vd259Iik7DQo+ID4+ICsJCWlmIChyYyAhPSAwKQ0K PiA+PiArCQkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJCWdvdG8gb3V0Ow0KPiA+PiArCX0N Cj4gPj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9zdHIoYnVmLCBidWZfc2l6ZSwg bmJfY2hhcnNfdG90YWwsDQo+ID4+ICsJCQkJICBhY3Rpb25fdGFibGVbYWN0aW9uLT50eXBlXS5u YW1lKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ ID4+ICsJaWYgKGFjdGlvbl90YWJsZVthY3Rpb24tPnR5cGVdLnBhcnNlX2NiICE9IE5VTEwgJiYN Cj4gPj4gKwkgICAgYWN0aW9uLT5jb25mICE9IE5VTEwpIHsNCj4gPj4gKwkJcmMgPSBhY3Rpb25f dGFibGVbYWN0aW9uLT50eXBlXS5wYXJzZV9jYihidWYsIGJ1Zl9zaXplLA0KPiA+PiArCQkJCQkJ CSBuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCQkJCQkgYWN0aW9uLT5jb25mKTsNCj4gPj4gKwkJ aWYgKHJjICE9IDApDQo+ID4+ICsJCQlyZXR1cm4gcmM7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ ICtvdXQ6DQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBu Yl9jaGFyc190b3RhbCwgIi8iKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4gPj4gKwkJcmV0dXJu IHJjOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0 YXRpYyBpbnQNCj4gPj4gK3J0ZV9mbG93X3NucHJpbnRfYWN0aW9ucyhjaGFyICpidWYsIHNpemVf dCBidWZfc2l6ZSwgc2l6ZV90DQo+ID4+ICpuYl9jaGFyc190b3RhbCwNCj4gPj4gKwkJCSBjb25z dCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uIGFjdGlvbnNbXSkgew0KPiA+PiArCWNvbnN0IHN0cnVj dCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbjsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4g KwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfc3RyKGJ1ZiwgYnVmX3NpemUsIG5iX2NoYXJzX3RvdGFs LCAiYWN0aW9ucyIpOw0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ ID4+ICsNCj4gPj4gKwlpZiAoYWN0aW9ucyA9PSBOVUxMKQ0KPiA+PiArCQlnb3RvIGVuZDsNCj4g Pj4gKw0KPiA+PiArCWZvciAoYWN0aW9uID0gYWN0aW9uczsNCj4gPj4gKwkgICAgIGFjdGlvbi0+ dHlwZSAhPSBSVEVfRkxPV19BQ1RJT05fVFlQRV9FTkQ7ICsrYWN0aW9uKSB7DQo+ID4+ICsJCXJj ID0gcnRlX2Zsb3dfc25wcmludF9hY3Rpb24oYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWws DQo+ID4+ICsJCQkJCSAgICAgYWN0aW9uKTsNCj4gPj4gKwkJaWYgKHJjICE9IDApDQo+ID4+ICsJ CQlyZXR1cm4gcmM7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICtlbmQ6DQo+ID4+ICsJcmMgPSBy dGVfZmxvd19zbnByaW50X3N0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190b3RhbCwgImVuZCIp Ow0KPiA+PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4g KwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiAraW50DQo+ID4+ICtydGVfZmxvd19z bnByaW50KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QgKm5iX2NoYXJzX3RvdGFs LA0KPiA+PiArCQkgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgKmF0dHIsDQo+ID4+ICsJCSBj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSBwYXR0ZXJuW10sDQo+ID4+ICsJCSBjb25zdCBzdHJ1 Y3QgcnRlX2Zsb3dfYWN0aW9uIGFjdGlvbnNbXSkgew0KPiA+PiArCWludCByYzsNCj4gPj4gKw0K PiA+PiArCWlmIChidWYgPT0gTlVMTCAmJiBidWZfc2l6ZSAhPSAwKQ0KPiA+PiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gPj4gKw0KPiA+PiArCSpuYl9jaGFyc190b3RhbCA9IDA7DQo+ID4+ICsNCj4g Pj4gKwlyYyA9IHJ0ZV9mbG93X3NucHJpbnRfYXR0cihidWYsIGJ1Zl9zaXplLCBuYl9jaGFyc190 b3RhbCwgYXR0cik7DQo+ID4+ICsJaWYgKHJjICE9IDApDQo+ID4+ICsJCXJldHVybiByYzsNCj4g Pj4gKw0KPiA+PiArCXJjID0gcnRlX2Zsb3dfc25wcmludF9wYXR0ZXJuKGJ1ZiwgYnVmX3NpemUs IG5iX2NoYXJzX3RvdGFsLA0KPiA+PiBwYXR0ZXJuKTsNCj4gPj4gKwlpZiAocmMgIT0gMCkNCj4g Pj4gKwkJcmV0dXJuIHJjOw0KPiA+PiArDQo+ID4+ICsJcmMgPSBydGVfZmxvd19zbnByaW50X2Fj dGlvbnMoYnVmLCBidWZfc2l6ZSwgbmJfY2hhcnNfdG90YWwsDQo+ID4+IGFjdGlvbnMpOw0KPiA+ PiArCWlmIChyYyAhPSAwKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4gPj4gKwlyZXR1 cm4gMDsNCj4gPj4gK30NCj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvdmVyc2lvbi5tYXAg Yi9saWIvZXRoZGV2L3ZlcnNpb24ubWFwIGluZGV4DQo+ID4+IDQ0ZDMwYjA1YWUuLmE2MjZjYWM5 NDQgMTAwNjQ0DQo+ID4+IC0tLSBhL2xpYi9ldGhkZXYvdmVyc2lvbi5tYXANCj4gPj4gKysrIGIv bGliL2V0aGRldi92ZXJzaW9uLm1hcA0KPiA+PiBAQCAtMjQ5LDYgKzI0OSw5IEBAIEVYUEVSSU1F TlRBTCB7DQo+ID4+ICAgCXJ0ZV9tdHJfbWV0ZXJfcG9saWN5X2RlbGV0ZTsNCj4gPj4gICAJcnRl X210cl9tZXRlcl9wb2xpY3lfdXBkYXRlOw0KPiA+PiAgIAlydGVfbXRyX21ldGVyX3BvbGljeV92 YWxpZGF0ZTsNCj4gPj4gKw0KPiA+PiArCSMgYWRkZWQgaW4gMjEuMDgNCj4gPj4gKwlydGVfZmxv d19zbnByaW50Ow0KPiA+PiAgIH07DQo+ID4+DQo+ID4+ICAgSU5URVJOQUwgew0KPiA+PiAtLQ0K PiA+PiAyLjIwLjENCj4gDQo+IC0tDQo+IEl2YW4gTQ0K