From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A561C282C2 for ; Wed, 13 Feb 2019 18:35:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9DE0B222D1 for ; Wed, 13 Feb 2019 18:35:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="vqg3LClF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404967AbfBMSfM (ORCPT ); Wed, 13 Feb 2019 13:35:12 -0500 Received: from mail-eopbgr00063.outbound.protection.outlook.com ([40.107.0.63]:31923 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726940AbfBMSfL (ORCPT ); Wed, 13 Feb 2019 13:35:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Xhn7Lod1A7Xm5aH5F1JYB8/SN8KvvpULwus/BmUwFjM=; b=vqg3LClFEpBxVrjJ2C/0JLlJu2mmLdPDh0TbvU6K3o0gcz9ZV1ST9j8RU4aZYKrSETh4/29kZ1OiEDeuTU1qH29SCR1JbEsPdCqISsbmPbtbjYvN51rn4goPru12XoLUToJj1QmZBrurCQ7edpod7wpmi3cu11XzvqKrSrYTnU0= Received: from DB6PR05MB3223.eurprd05.prod.outlook.com (10.175.232.149) by DB6PR05MB3512.eurprd05.prod.outlook.com (10.170.220.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.21; Wed, 13 Feb 2019 18:34:59 +0000 Received: from DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::d935:9a6c:c7a3:1320]) by DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::d935:9a6c:c7a3:1320%2]) with mapi id 15.20.1601.023; Wed, 13 Feb 2019 18:34:58 +0000 From: Liming Sun To: Andy Shevchenko CC: David Woods , Andy Shevchenko , Darren Hart , Vadim Pasternak , Linux Kernel Mailing List , Platform Driver Subject: RE: [PATCH v9] platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc Thread-Topic: [PATCH v9] platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc Thread-Index: AQHUw5/qnLd7C7RaL02gLOSwPUA5iqXeB7OAgAADLOA= Date: Wed, 13 Feb 2019 18:34:58 +0000 Message-ID: References: <1550064437-1363-1-git-send-email-lsun@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=lsun@mellanox.com; x-originating-ip: [216.156.69.42] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 639ff279-e56a-448a-1b79-08d691e1f55d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020);SRVR:DB6PR05MB3512; x-ms-traffictypediagnostic: DB6PR05MB3512: x-microsoft-exchange-diagnostics: =?utf-8?B?MTtEQjZQUjA1TUIzNTEyOzIzOmhFVXlkR1QrRTJsaVJhVThjQWNPY3J3dFVv?= =?utf-8?B?bFpGUFlmV1pqNFprMk12Y3A1SS9sRmtObTZuek1HSmVxUGR1YkxLR1Y1aCs0?= =?utf-8?B?SnhoYUNSQjRlN2lxZDFjNnNLMGR2SHZndWJ1MWRUMzJuN0tlTDQ4a2lzN1hr?= =?utf-8?B?ZEtTdHZOL2tFWjlvb1NBcWRiRnJSSWZaU09URFFhZmtGYkZwenQ3aCtzWlJB?= =?utf-8?B?SXg5cHVyNHIvaTJXY0NMWjRlallZV0kvcWVvUHpEU3VmcjZyTVdZaUQrTzdm?= =?utf-8?B?aHpkdW12SUZuWjNWVlNKcXNpTUVVVHlnMksrT3FjcGwrdDdxUkVjTUsyejdQ?= =?utf-8?B?eUkxMEhadEc1aUlmTDZZMU4xZnZ5S0dZalF5YkxsYmdEUmpVTS9GSCtRaFp3?= =?utf-8?B?T3dTcHcxOUdEQVRnbmNSUm1MNXp0M2R3cFhCeUZMaE5TM3oxZ3dDdHRSL0dm?= =?utf-8?B?ZVZja0pWZkZUR0pRc0VJSnZGTmpFeXNLRHdlWngvejg5MHBEVjlvS0tSTnE2?= =?utf-8?B?cEpic1htcEs2VjJUcmliT2FXRUVwVTlMYk1pZzhCWjlER1FHVXlXVzBPMUxW?= =?utf-8?B?eWZjcXVpeUFqYnJNQUZncGNJdFRSakxoNDkrdjJueXBYL1NsWGdxZUpTR0h1?= =?utf-8?B?UGZwOGJtUXIvUFd5RklNYXFBeFNXTjc2Z1UrZzQ1cUZpL2hCeS82UFJjeWZV?= =?utf-8?B?dE1jcVFrMEFrU0UrZHpjRVQ5enljMHg1eHVCcTErQzdudFVuMzR5Q292WGw3?= =?utf-8?B?ckhTSHAvM29pNW5mNlIyNXA2K1lnRmM3WGd4L1lreWxnQ1VidW9zMEh6SXFI?= =?utf-8?B?ajFjZENWTWdwSkRYQkJmNDBQc0szRUVIbExwblMzaFN1WWVvTE8rbGNQRmU4?= =?utf-8?B?dElXQ3BUMHk1WmtnWVc1S1lTMDFMY1ViYklPcVVaaDQ0cG83ek5GRVpmZTFi?= =?utf-8?B?ajhtMVpFR3NtcU1rdFN6MVNSMVcxaDBYTHBHRVVxNldSSG1kQ093UkxVYTdt?= =?utf-8?B?Qzd2eEtEa3d2bko0eFE2SHF0MHNSUFRzNDE2N3IvQ1JWZStqd3h3bzZZQStm?= =?utf-8?B?NytUY3Bta25zUUcxQnNZMnBJNG80UUU4MlM0enQ3c3pmcStNNXlHRnRHNmZo?= =?utf-8?B?UnIvemxUcUtPY0JLNkhyTTZrclpPNTE0QmlpTHBWZ0ROZG5nQ1B4WHJ5Lyt0?= =?utf-8?B?dVpWK05xZ0hodHVrNmZPK1JNaXZ4eG8zcXg0TE4vK0VSYkVqUTFMMlVXaXlV?= =?utf-8?B?VGU1anAweExnYkx4Nkp3dm8yYks2Qmd1Vk9qUFZFSmdXZXIwR0krUnk0TGhZ?= =?utf-8?B?MDNkOXNVSXR0aXhiVFRNZkliU291c0haODBXVE03VTRWRFYyeXNHdzZkRkVB?= =?utf-8?B?N1JES2N4bTJmYWp5QklDeFRRcC9uU3dpNHdVRko2QUZDUlNpUXZBQnF0MjI2?= =?utf-8?B?b0ZRdndiaTIwRzRxcHQrWDBONnA5ZExCYjQ3dnJJRm11YjR6bmJhd2RmOHkx?= =?utf-8?B?YVpLZTFPMmU3dHV2Y0djWmxvTEV2NStUejViRVdZek4wVnN6MnJIRE9wTXhG?= =?utf-8?B?cURiT2VvdDlHQnhKc0tuVGQwSG9BRzhmOUthWkJpZHd2Z1p0SzZkVWloMTB1?= =?utf-8?B?d2FaUXpCSUFOVjNGYmo2T1BaNDZwT244Wk00ZVBtOFFYc2N0RlZveUVPb2tm?= =?utf-8?B?amtBalpURUtSeFFwQkFuU1JsSmh2ZUlOeWxsWjEvQnVTYVhGeXR4Vk9oM2RQ?= =?utf-8?B?QmtHL3ozZmtHdWRIaHZ6bG52RjlTMXRaY2dGOFJQaFp6azdaSHJaUkpDcmZs?= =?utf-8?Q?Q/bpePUtuXh5g?= x-microsoft-antispam-prvs: x-forefront-prvs: 094700CA91 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6029001)(39860400002)(376002)(346002)(136003)(366004)(396003)(13464003)(199004)(189003)(54906003)(55016002)(6916009)(476003)(53946003)(7696005)(486006)(9686003)(446003)(30864003)(99286004)(316002)(305945005)(11346002)(14454004)(102836004)(81166006)(6436002)(3846002)(6116002)(81156014)(8676002)(8936002)(74316002)(6506007)(26005)(53546011)(76176011)(478600001)(68736007)(4326008)(86362001)(106356001)(186003)(71190400001)(229853002)(256004)(71200400001)(7736002)(14444005)(6246003)(66066001)(2906002)(53936002)(105586002)(33656002)(97736004)(25786009)(21314003)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR05MB3512;H:DB6PR05MB3223.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: xrTDLn/FPIJjQ9DKFN6hVMIxWRAMASuafEup5g7PWuku9xHSpzaSpw2y3JEFEHqgJFK9HzxH7+54oozYgNF78gO1Mx+ga+GsT45k5qXeJ4g/t0eX+08mfU427opGcGWiavmAhhqD7eTpLZJ99NtziYppoaBFNGcTUhMp3ySQGv6CmLQoJbioGxz22PGSu1bbvXCDIwjccqQg6uUABj1JY6ynAv4kouaxZiM3S3nfmVW2Gd2Macjgkp8VH/Xd7yYPXYPZgghvoer7/a4m23PjieEbNbPtD2r4+zIQoR8a4i5/1nnJLsegg/8949AG60A5ff3rFL+cq+oSAwB9mmQt6irYdEA4P7+ZJSnaVyCTWDxQXPo0wWx4vaJrDUgAlSDXjWYhpiLCS4wZixh0/z56ZygKZ+K+7XtnumNJxjUySto= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 639ff279-e56a-448a-1b79-08d691e1f55d X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Feb 2019 18:34:58.7691 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR05MB3512 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhhbmtzIEFuZHkuIFdlIGFjdHVhbGx5IGhhZCBzb21lIGludGVybmFsIHJldmlld3MgYXMgeW91 IG1lbnRpb25lZC4NCkknbGwgdHJ5IHRvIHNvbHZlIHRoZSBjb21tZW50cyBhbmQgdXBkYXRlIHRo ZSAnUmV2aWV3ZWQtYnknIGluIG5leHQgcmV2aXNpb24uDQoNClJlZ2FyZHMsDQpMaW1pbmcNCg0K PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmR5IFNoZXZjaGVua28gPGFu ZHkuc2hldmNoZW5rb0BnbWFpbC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwgRmVicnVhcnkgMTMs IDIwMTkgMToxMSBQTQ0KPiBUbzogTGltaW5nIFN1biA8bHN1bkBtZWxsYW5veC5jb20+DQo+IENj OiBEYXZpZCBXb29kcyA8ZHdvb2RzQG1lbGxhbm94LmNvbT47IEFuZHkgU2hldmNoZW5rbyA8YW5k eUBpbmZyYWRlYWQub3JnPjsgRGFycmVuIEhhcnQgPGR2aGFydEBpbmZyYWRlYWQub3JnPjsgVmFk aW0NCj4gUGFzdGVybmFrIDx2YWRpbXBAbWVsbGFub3guY29tPjsgTGludXggS2VybmVsIE1haWxp bmcgTGlzdCA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz47IFBsYXRmb3JtIERyaXZlciA8 cGxhdGZvcm0tZHJpdmVyLQ0KPiB4ODZAdmdlci5rZXJuZWwub3JnPg0KPiBTdWJqZWN0OiBSZTog W1BBVENIIHY5XSBwbGF0Zm9ybS9tZWxsYW5veDogQWRkIFRtRmlmbyBkcml2ZXIgZm9yIE1lbGxh bm94IEJsdWVGaWVsZCBTb2MNCj4gDQo+IE9uIFdlZCwgRmViIDEzLCAyMDE5IGF0IDM6MjcgUE0g TGltaW5nIFN1biA8bHN1bkBtZWxsYW5veC5jb20+IHdyb3RlOg0KPiA+DQo+ID4gVGhpcyBjb21t aXQgYWRkcyB0aGUgVG1GaWZvIHBsYXRmb3JtIGRyaXZlciBmb3IgTWVsbGFub3ggQmx1ZUZpZWxk DQo+ID4gU29jLiBUbUZpZm8gaXMgYSBzaGFyZWQgRklGTyB3aGljaCBlbmFibGVzIGV4dGVybmFs IGhvc3QgbWFjaGluZQ0KPiA+IHRvIGV4Y2hhbmdlIGRhdGEgd2l0aCB0aGUgU29DIHZpYSBVU0Ig b3IgUENJZS4gVGhlIGRyaXZlciBpcyBiYXNlZA0KPiA+IG9uIHZpcnRpbyBmcmFtZXdvcmsgYW5k IGhhcyBjb25zb2xlIGFuZCBuZXR3b3JrIGFjY2VzcyBlbmFibGVkLg0KPiANCj4gVGhhbmtzIGZv ciBhbiB1cGRhdGUsIG15IGNvbW1lbnRzIGJlbG93Lg0KPiANCj4gQWdhaW4sIHRvIE1lbGxhbm94 OiBndXlzLCBwbGVhc2UsIGVzdGFibGlzaCBpbnRlcm5hbCBtYWlsaW5nIGxpc3QgZm9yDQo+IHJl dmlldyBhbmQgZG9uJ3QgY29tZSB3aXRoIHN1Y2ggcXVhbGl0eSBvZiBjb2RlLg0KPiANCj4gTmV4 dCB0aW1lIEkgd291bGQgbGlrZSB0byBzZWUgUmV2aWV3ZWQtYnkgZnJvbSBNZWxsYW5veCBwZW9w bGUgSSBrbm93LA0KPiBsaWtlIFZhZGltIG9yIExlb24uDQo+IA0KPiA+ICtjb25maWcgTUxYQkZf VE1GSUZPDQo+ID4gKyAgICAgICB0cmlzdGF0ZSAiTWVsbGFub3ggQmx1ZUZpZWxkIFNvQyBUbUZp Zm8gcGxhdGZvcm0gZHJpdmVyIg0KPiANCj4gPiArICAgICAgIGRlcGVuZHMgb24gQVJNNjQgJiYg QUNQSSAmJiBWSVJUSU9fQ09OU09MRSAmJiBWSVJUSU9fTkVUDQo+IA0KPiBTcGxpdCB0aGlzIHRv IHRocmVlIGxvZ2ljYWwgcGFydHMuDQo+IA0KPiA+ICsgICAgICAgaGVscA0KPiA+ICsgICAgICAg ICBTYXkgeSBoZXJlIHRvIGVuYWJsZSBUbUZpZm8gc3VwcG9ydC4gVGhlIFRtRmlmbyBkcml2ZXIg cHJvdmlkZXMNCj4gPiArICAgICAgICAgIHBsYXRmb3JtIGRyaXZlciBzdXBwb3J0IGZvciB0aGUg VG1GaWZvIHdoaWNoIHN1cHBvcnRzIGNvbnNvbGUNCj4gPiArICAgICAgICAgIGFuZCBuZXR3b3Jr aW5nIGJhc2VkIG9uIHRoZSB2aXJ0aW8gZnJhbWV3b3JrLg0KPiANCj4gPiAgb2JqLSQoQ09ORklH X01MWFJFR19IT1RQTFVHKSAgICs9IG1seHJlZy1ob3RwbHVnLm8NCj4gPiAgb2JqLSQoQ09ORklH X01MWFJFR19JTykgKz0gbWx4cmVnLWlvLm8NCj4gPiArb2JqLSQoQ09ORklHX01MWEJGX1RNRklG TykgICAgICs9IG1seGJmLXRtZmlmby5vDQo+IA0KPiBJIHdvdWxkIHN1Z2dlc3QgdG8ga2VlcCBp dCBzb3J0ZWQuDQo+IA0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19UWF9EQVRBIDB4MA0KPiAN Cj4gSSBzdWdnZXN0IHRvIHVzZSBzYW1lIGZpeGVkIGZvcm1hdCBmb3Igb2Zmc2V0cy4NCj4gSGVy ZSwgZm9yIGV4YW1wbGUsIDB4MDAgd291bGQgYmUgYmV0dGVyLg0KPiANCj4gPiArI2RlZmluZSBN TFhCRl9UTUZJRk9fVFhfU1RTX19DT1VOVF9STUFTSyAweDFmZg0KPiA+ICsjZGVmaW5lIE1MWEJG X1RNRklGT19UWF9TVFNfX0NPVU5UX01BU0sgIDB4MWZmDQo+IA0KPiAjaW5jbHVkZSA8bGludXgv Yml0cy5oPg0KPiAuLi4NCj4gR0VOTUFTSygpDQo+IA0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklG T19UWF9DVExfX0xXTV9STUFTSyAweGZmDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NU TF9fTFdNX01BU0sgIDB4ZmYNCj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9f SFdNX1JNQVNLIDB4ZmYNCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fVFhfQ1RMX19IV01fTUFT SyAgMHhmZjAwDQo+IA0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19UWF9DVExfX01BWF9FTlRS SUVTX1JNQVNLIDB4MWZmDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9fTUFYX0VO VFJJRVNfTUFTSyAgMHgxZmYwMDAwMDAwMFVMTA0KPiANCj4gR0VOTUFTSygpIC8gR0VOTUFTS19V TEwoKQ0KPiANCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfU1RTX19DT1VOVF9STUFTSyAw eDFmZg0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9TVFNfX0NPVU5UX01BU0sgIDB4MWZm DQo+IA0KPiBHRU5NQVNLKCkNCj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1JYX0NUTF9f TFdNX1JNQVNLIDB4ZmYNCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfQ1RMX19MV01fTUFT SyAgMHhmZg0KPiANCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfQ1RMX19IV01fUk1BU0sg MHhmZg0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9DVExfX0hXTV9NQVNLICAweGZmMDAN Cj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1JYX0NUTF9fTUFYX0VOVFJJRVNfUk1BU0sg MHgxZmYNCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfQ1RMX19NQVhfRU5UUklFU19NQVNL ICAweDFmZjAwMDAwMDAwVUxMDQo+IA0KPiBEaXR0by4NCj4gDQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9hY3BpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NhY2hl Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2RtYS1tYXBwaW5nLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L211dGV4Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvdmVyc2lvbi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9f Y29uc29sZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvdmlydGlvX25ldC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX3Jp bmcuaD4NCj4gDQo+IERvIHlvdSBuZWVkIGFsbCBvZiB0aGVtPw0KPiANCj4gPiArI2RlZmluZSBN TFhCRl9UTUZJRk9fVlJJTkdfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQNCj4gDQo+ IFNaXzFLID8NCj4gDQo+ID4gKy8qIENvbnNvbGUgVHggYnVmZmVyIHNpemUuICovDQo+ID4gKyNk ZWZpbmUgTUxYQkZfVE1GSUZPX0NPTlNfVFhfQlVGX1NJWkUgICAgICAgICAgKDMyICogMTAyNCkN Cj4gDQo+IFNaXzMySyA/DQo+IA0KPiA+ICsvKiBIb3VzZS1rZWVwaW5nIHRpbWVyIGludGVydmFs LiAqLw0KPiA+ICtzdGF0aWMgaW50IG1seGJmX3RtZmlmb190aW1lcl9pbnRlcnZhbCA9IEhaIC8g MTA7DQo+IA0KPiA+ICsvKiBHbG9iYWwgbG9jay4gKi8NCj4gDQo+IE5vaXNlLiBFaXRoZXIgZXhw bGFpbiB3aGF0IGl0IHByb3RlY3RzLCBvciByZW1vdmUuDQo+IA0KPiA+ICtzdGF0aWMgREVGSU5F X01VVEVYKG1seGJmX3RtZmlmb19sb2NrKTsNCj4gDQo+ID4gKy8qIFN0cnVjdCBkZWNsYXJhdGlv bi4gKi8NCj4gDQo+IE5vaXNlLg0KPiANCj4gPiArLyogU3RydWN0dXJlIHRvIG1haW50YWluIHRo ZSByaW5nIHN0YXRlLiAqLw0KPiA+ICtzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZyaW5nIHsNCj4gPiAr ICAgICAgIHZvaWQgKnZhOyAgICAgICAgICAgICAgICAgICAgICAgLyogdmlydHVhbCBhZGRyZXNz ICovDQo+ID4gKyAgICAgICBkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIGRtYSBh ZGRyZXNzICovDQo+ID4gKyAgICAgICBzdHJ1Y3QgdmlydHF1ZXVlICp2cTsgICAgICAgICAgIC8q IHZpcnRxdWV1ZSBwb2ludGVyICovDQo+ID4gKyAgICAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVz YzsgICAgICAgIC8qIGN1cnJlbnQgZGVzYyAqLw0KPiA+ICsgICAgICAgc3RydWN0IHZyaW5nX2Rl c2MgKmRlc2NfaGVhZDsgICAvKiBjdXJyZW50IGRlc2MgaGVhZCAqLw0KPiA+ICsgICAgICAgaW50 IGN1cl9sZW47ICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzZWQgbGVuIGluIGN1cnJlbnQg ZGVzYyAqLw0KPiA+ICsgICAgICAgaW50IHJlbV9sZW47ICAgICAgICAgICAgICAgICAgICAvKiBy ZW1haW5pbmcgbGVuZ3RoIHRvIGJlIHByb2Nlc3NlZCAqLw0KPiA+ICsgICAgICAgaW50IHNpemU7 ICAgICAgICAgICAgICAgICAgICAgICAvKiB2cmluZyBzaXplICovDQo+ID4gKyAgICAgICBpbnQg YWxpZ247ICAgICAgICAgICAgICAgICAgICAgIC8qIHZyaW5nIGFsaWdubWVudCAqLw0KPiA+ICsg ICAgICAgaW50IGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2cmluZyBpZCAqLw0KPiA+ ICsgICAgICAgaW50IHZkZXZfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBUTUZJRk9fVkRFVl94 eHggKi8NCj4gPiArICAgICAgIHUzMiBwa3RfbGVuOyAgICAgICAgICAgICAgICAgICAgLyogcGFj a2V0IHRvdGFsIGxlbmd0aCAqLw0KPiA+ICsgICAgICAgdTE2IG5leHRfYXZhaWw7ICAgICAgICAg ICAgICAgICAvKiBuZXh0IGF2YWlsIGRlc2MgaWQgKi8NCj4gPiArICAgICAgIHN0cnVjdCBtbHhi Zl90bWZpZm8gKmZpZm87ICAgICAgLyogcG9pbnRlciBiYWNrIHRvIHRoZSB0bWZpZm8gKi8NCj4g PiArfTsNCj4gDQo+IFBlcmhhcHMga2VybmVsLWRvYz8NCj4gDQo+ID4gKy8qIEludGVycnVwdCB0 eXBlcy4gKi8NCj4gPiArZW51bSB7DQo+ID4gKyAgICAgICBNTFhCRl9UTV9SWF9MV01fSVJRLCAg ICAgICAgICAgIC8qIFJ4IGxvdyB3YXRlciBtYXJrIGlycSAqLw0KPiA+ICsgICAgICAgTUxYQkZf VE1fUlhfSFdNX0lSUSwgICAgICAgICAgICAvKiBSeCBoaWdoIHdhdGVyIG1hcmsgaXJxICovDQo+ ID4gKyAgICAgICBNTFhCRl9UTV9UWF9MV01fSVJRLCAgICAgICAgICAgIC8qIFR4IGxvdyB3YXRl ciBtYXJrIGlycSAqLw0KPiA+ICsgICAgICAgTUxYQkZfVE1fVFhfSFdNX0lSUSwgICAgICAgICAg ICAvKiBUeCBoaWdoIHdhdGVyIG1hcmsgaXJxICovDQo+ID4gKyAgICAgICBNTFhCRl9UTV9JUlFf Q05UDQo+IA0KPiBDTlQuLi4NCj4gDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBSaW5nIHR5cGVz IChSeCAmIFR4KS4gKi8NCj4gPiArZW51bSB7DQo+ID4gKyAgICAgICBNTFhCRl9UTUZJRk9fVlJJ TkdfUlgsICAgICAgICAgIC8qIFJ4IHJpbmcgKi8NCj4gPiArICAgICAgIE1MWEJGX1RNRklGT19W UklOR19UWCwgICAgICAgICAgLyogVHggcmluZyAqLw0KPiA+ICsgICAgICAgTUxYQkZfVE1GSUZP X1ZSSU5HX05VTQ0KPiANCj4gLi4uTlVNDQo+IA0KPiBQZXJoYXBzIG9uZSBzdHlsZSBmb3IgbWF4 IG51bWJlcnM/DQo+IA0KPiA+ICt9Ow0KPiANCj4gPiArDQo+ID4gKy8qIFN0cnVjdHVyZSBmb3Ig dGhlIHZpcnR1YWwgZGV2aWNlLiAqLw0KPiA+ICtzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZkZXYgew0K PiA+ICsgICAgICAgc3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjsgICAgICAvKiB2aXJ0dWFsIGRl dmljZSAqLw0KPiA+ICsgICAgICAgdTggc3RhdHVzOw0KPiA+ICsgICAgICAgdTY0IGZlYXR1cmVz Ow0KPiA+ICsgICAgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2aXJ0aW8g Y29uZmlnIHNwYWNlICovDQo+ID4gKyAgICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fY29uc29s ZV9jb25maWcgY29uczsNCj4gPiArICAgICAgICAgICAgICAgc3RydWN0IHZpcnRpb19uZXRfY29u ZmlnIG5ldDsNCj4gPiArICAgICAgIH0gY29uZmlnOw0KPiANCj4gRGVzY3JpYmUsIHdoaWNoIGZp ZWxkIGFsbG93cyB0byBkaXN0aW5ndWlzaCB3aGF0IHR5cGUgb2YgdGhlIGRhdGEgaXMgaW4gYSB1 bmlvbi4NCj4gDQo+ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZyaW5nIHZyaW5nc1tN TFhCRl9UTUZJRk9fVlJJTkdfTlVNXTsNCj4gPiArICAgICAgIHU4ICp0eF9idWY7ICAgICAgICAg ICAgICAgICAgICAgLyogdHggYnVmZmVyICovDQo+ID4gKyAgICAgICB1MzIgdHhfaGVhZDsgICAg ICAgICAgICAgICAgICAgIC8qIHR4IGJ1ZmZlciBoZWFkICovDQo+ID4gKyAgICAgICB1MzIgdHhf dGFpbDsgICAgICAgICAgICAgICAgICAgIC8qIHR4IGJ1ZmZlciB0YWlsICovDQo+ID4gK307DQo+ IA0KPiBrZXJuZWwtZG9jPw0KPiANCj4gPiArLyogU3RydWN0dXJlIG9mIHRoZSBpbnRlcnJ1cHQg aW5mb3JtYXRpb24uICovDQo+ID4gK3N0cnVjdCBtbHhiZl90bWZpZm9faXJxX2luZm8gew0KPiA+ ICsgICAgICAgc3RydWN0IG1seGJmX3RtZmlmbyAqZmlmbzsgICAgICAvKiB0bWZpZm8gc3RydWN0 dXJlICovDQo+ID4gKyAgICAgICBpbnQgaXJxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlu dGVycnVwdCBudW1iZXIgKi8NCj4gPiArICAgICAgIGludCBpbmRleDsgICAgICAgICAgICAgICAg ICAgICAgLyogYXJyYXkgaW5kZXggKi8NCj4gPiArfTsNCj4gDQo+IERpdHRvLg0KPiANCj4gPiAr DQo+ID4gKy8qIFN0cnVjdHVyZSBvZiB0aGUgVG1GaWZvIGluZm9ybWF0aW9uLiAqLw0KPiA+ICtz dHJ1Y3QgbWx4YmZfdG1maWZvIHsNCj4gPiArICAgICAgIHN0cnVjdCBtbHhiZl90bWZpZm9fdmRl diAqdmRldltNTFhCRl9UTUZJRk9fVkRFVl9NQVhdOyAvKiBkZXZpY2VzICovDQo+ID4gKyAgICAg ICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OyAgIC8qIHBsYXRmb3JtIGRldmljZSAqLw0K PiA+ICsgICAgICAgc3RydWN0IG11dGV4IGxvY2s7ICAgICAgICAgICAgICAvKiBmaWZvIGxvY2sg Ki8NCj4gPiArICAgICAgIHZvaWQgX19pb21lbSAqcnhfYmFzZTsgICAgICAgICAgLyogbWFwcGVk IHJlZ2lzdGVyIGJhc2UgKi8NCj4gPiArICAgICAgIHZvaWQgX19pb21lbSAqdHhfYmFzZTsgICAg ICAgICAgLyogbWFwcGVkIHJlZ2lzdGVyIGJhc2UgKi8NCj4gPiArICAgICAgIGludCB0eF9maWZv X3NpemU7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVudHJpZXMgb2YgdGhlIFR4IEZJRk8g Ki8NCj4gPiArICAgICAgIGludCByeF9maWZvX3NpemU7ICAgICAgICAgICAgICAgLyogbnVtYmVy IG9mIGVudHJpZXMgb2YgdGhlIFJ4IEZJRk8gKi8NCj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcg cGVuZF9ldmVudHM7ICAgICAgLyogcGVuZGluZyBiaXRzIGZvciBkZWZlcnJlZCBwcm9jZXNzICov DQo+ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX2lycV9pbmZvIGlycV9pbmZvW01MWEJG X1RNX0lSUV9DTlRdOyAvKiBpcnEgaW5mbyAqLw0KPiA+ICsgICAgICAgc3RydWN0IHdvcmtfc3Ry dWN0IHdvcms7ICAgICAgICAvKiB3b3JrIHN0cnVjdCBmb3IgZGVmZXJyZWQgcHJvY2VzcyAqLw0K PiA+ICsgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7ICAgICAgICAvKiBrZWVwYWxpdmUg dGltZXIgKi8NCj4gPiArICAgICAgIHN0cnVjdCBtbHhiZl90bWZpZm9fdnJpbmcgKnZyaW5nWzJd OyAgICAvKiBjdXJyZW50IFR4L1J4IHJpbmcgKi8NCj4gPiArICAgICAgIGJvb2wgaXNfcmVhZHk7 ICAgICAgICAgICAgICAgICAgLyogcmVhZHkgZmxhZyAqLw0KPiA+ICsgICAgICAgc3BpbmxvY2tf dCBzcGluX2xvY2s7ICAgICAgICAgICAvKiBzcGluIGxvY2sgKi8NCj4gPiArfTsNCj4gDQo+IERp dHRvLg0KPiANCj4gPiArLyogVXNlIGEgdW5pb24gc3RydWN0aW9uIGZvciA2NC1iaXQgbGl0dGxl L2JpZyBlbmRpYW4uICovDQo+IA0KPiBXaGF0IGRvZXMgdGhpcyBtZWFuPw0KPiANCj4gPiArdW5p b24gbWx4YmZfdG1maWZvX2RhdGFfNjRiaXQgew0KPiA+ICsgICAgICAgdTY0IGRhdGE7DQo+ID4g KyAgICAgICBfX2xlNjQgZGF0YV9sZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIE1lc3NhZ2Ug aGVhZGVyIHVzZWQgdG8gZGVtdXggZGF0YSBpbiB0aGUgVG1GaWZvLiAqLw0KPiA+ICt1bmlvbiBt bHhiZl90bWZpZm9fbXNnX2hkciB7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAg ICAgICAgICB1OCB0eXBlOyAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIHR5cGUgKi8NCj4gPiAr ICAgICAgICAgICAgICAgX19iZTE2IGxlbjsgICAgICAgICAgICAgLyogcGF5bG9hZCBsZW5ndGgg Ki8NCj4gPiArICAgICAgICAgICAgICAgdTggdW51c2VkWzVdOyAgICAgICAgICAgLyogcmVzZXJ2 ZWQsIHNldCB0byAwICovDQo+ID4gKyAgICAgICB9IF9fcGFja2VkOw0KPiANCj4gSXQncyBhbHJl YWR5IHBhY2tlZC4gTm8/DQo+IA0KPiA+ICsgICAgICAgdW5pb24gbWx4YmZfdG1maWZvX2RhdGFf NjRiaXQgdTsgICAgICAgIC8qIDY0LWJpdCBkYXRhICovDQo+ID4gK307DQo+IA0KPiA+ICsvKiBN VFUgc2V0dGluZyBvZiB0aGUgdmlydGlvLW5ldCBpbnRlcmZhY2UuICovDQo+ID4gKyNkZWZpbmUg TUxYQkZfVE1GSUZPX05FVF9NVFUgICAgICAgICAgIDE1MDANCj4gDQo+IERvbid0IHdlIGhhdmUg dGhpcyBnbG9iYWxseSBkZWZpbmVkPw0KPiANCj4gPiArLyogU3VwcG9ydGVkIHZpcnRpby1uZXQg ZmVhdHVyZXMuICovDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX05FVF9GRUFUVVJFUyAgICAg ICgoMVVMIDw8IFZJUlRJT19ORVRfRl9NVFUpIHwgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBWSVJUSU9fTkVUX0ZfU1RBVFVTKSB8IFwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgVklSVElP X05FVF9GX01BQykpDQo+IA0KPiBCSVRfVUwoKSA/DQo+IA0KPiA+ICsvKiBGdW5jdGlvbiBkZWNs YXJhdGlvbnMuICovDQo+IA0KPiBOb2lzZS4NCj4gDQo+ID4gK3N0YXRpYyBpbnQgbWx4YmZfdG1m aWZvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsNCj4gDQo+IFdoeSBkbyB5 b3UgbmVlZCBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciB0aGlzPw0KPiANCj4gPiArLyogUmV0dXJu IHRoZSBjb25zdW1lZCBUeCBidWZmZXIgc3BhY2UuICovDQo+ID4gK3N0YXRpYyBpbnQgbWx4YmZf dG1maWZvX3ZkZXZfdHhfYnVmX2xlbihzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZkZXYgKnZkZXYpDQo+ ID4gK3sNCj4gPiArICAgICAgIHJldHVybiAoKHZkZXYtPnR4X3RhaWwgPj0gdmRldi0+dHhfaGVh ZCkgPw0KPiA+ICsgICAgICAgICAgICAgICAodmRldi0+dHhfdGFpbCAtIHZkZXYtPnR4X2hlYWQp IDoNCj4gPiArICAgICAgICAgICAgICAgKE1MWEJGX1RNRklGT19DT05TX1RYX0JVRl9TSVpFIC0g dmRldi0+dHhfaGVhZCArDQo+ID4gKyAgICAgICAgICAgICAgICB2ZGV2LT50eF90YWlsKSk7DQo+ IA0KPiBTcGxpdCB0aGlzIGZvciBiZXR0ZXIgcmVhZGluZy4NCj4gDQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qIFJldHVybiB0aGUgYXZhaWxhYmxlIFR4IGJ1ZmZlciBzcGFjZS4gKi8NCj4gPiArc3Rh dGljIGludCBtbHhiZl90bWZpZm9fdmRldl90eF9idWZfYXZhaWwoc3RydWN0IG1seGJmX3RtZmlm b192ZGV2ICp2ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgICByZXR1cm4gKE1MWEJGX1RNRklGT19D T05TX1RYX0JVRl9SU1ZfU0laRSAtDQo+ID4gKyAgICAgICAgICAgICAgIG1seGJmX3RtZmlmb192 ZGV2X3R4X2J1Zl9sZW4odmRldikpOw0KPiANCj4gUmVkdW5kYW50IHBhcmVucy4NCj4gTW9yZW92 ZXIsIHlvdSBtaWdodCBjb25zaWRlciB0ZW1wb3JhcnkgdmFyaWFibGUgZm9yIGJldHRlciByZWFk aW5nLg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogVXBkYXRlIFJ4L1R4IGJ1ZmZlciBpbmRl eCBwb2ludGVyLiAqLw0KPiA+ICtzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fdmRldl90eF9idWZf aW5kZXhfaW5jKHUzMiAqaW5kZXgsIHUzMiBsZW4pDQo+ID4gK3sNCj4gPiArICAgICAgICppbmRl eCArPSBsZW47DQo+ID4gKyAgICAgICBpZiAoKmluZGV4ID49IE1MWEJGX1RNRklGT19DT05TX1RY X0JVRl9TSVpFKQ0KPiA+ICsgICAgICAgICAgICAgICAqaW5kZXggLT0gTUxYQkZfVE1GSUZPX0NP TlNfVFhfQlVGX1NJWkU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIEFsbG9jYXRlIHZyaW5ncyBm b3IgdGhlIGZpZm8uICovDQo+ID4gK3N0YXRpYyBpbnQgbWx4YmZfdG1maWZvX2FsbG9jX3ZyaW5n cyhzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZkZXYgKnRtX3ZkZXYsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZGV2X2lkKQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZyaW5nICp2cmluZzsNCj4gPiArICAgICAg IGRtYV9hZGRyX3QgZG1hOw0KPiA+ICsgICAgICAgaW50IGksIHNpemU7DQo+ID4gKyAgICAgICB2 b2lkICp2YTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0 bV92ZGV2LT52cmluZ3MpOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgdnJpbmcgPSAmdG1f dmRldi0+dnJpbmdzW2ldOw0KPiA+ICsgICAgICAgICAgICAgICB2cmluZy0+ZmlmbyA9IGZpZm87 DQo+ID4gKyAgICAgICAgICAgICAgIHZyaW5nLT5zaXplID0gTUxYQkZfVE1GSUZPX1ZSSU5HX1NJ WkU7DQo+ID4gKyAgICAgICAgICAgICAgIHZyaW5nLT5hbGlnbiA9IFNNUF9DQUNIRV9CWVRFUzsN Cj4gPiArICAgICAgICAgICAgICAgdnJpbmctPmlkID0gaTsNCj4gPiArICAgICAgICAgICAgICAg dnJpbmctPnZkZXZfaWQgPSB2ZGV2X2lkOw0KPiA+ICsNCj4gDQo+ID4gKyAgICAgICAgICAgICAg IHNpemUgPSBQQUdFX0FMSUdOKHZyaW5nX3NpemUodnJpbmctPnNpemUsIHZyaW5nLT5hbGlnbikp Ow0KPiANCj4gV2h5IGRvIHlvdSBuZWVkIHRoaXM/DQo+IGRtYV9hbGxvY19jb2hlcmVudCgpIGFs bG9jYXRlcyBtZW1vcnkgb24gcGFnZSBncmFudWxhcml0eSBhbnl3YXkuDQo+IA0KPiA+ICsgICAg ICAgICAgICAgICB2YSA9IGRtYV9hbGxvY19jb2hlcmVudCh0bV92ZGV2LT52ZGV2LmRldi5wYXJl bnQsIHNpemUsICZkbWEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIXZhKSB7DQo+IA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIodG1fdmRldi0+dmRldi5kZXYucGFyZW50 LA0KPiANCj4gV291bGQgYmUgbXVjaCBlYXN5IGlmIHlvdSBoYXZlIHRlbXBvcmFyeSB2YXJpYWJs ZSBmb3IgdGhpcyBkZXZpY2UuDQo+IA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImRtYV9hbGxvY19jb2hlcmVudCBmYWlsZWRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICB2cmluZy0+dmEgPSB2YTsNCj4gPiArICAgICAgICAgICAgICAgdnJp bmctPmRtYSA9IGRtYTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4g MDsNCj4gPiArfQ0KPiANCj4gPiArLyogSW50ZXJydXB0IGhhbmRsZXIuICovDQo+ID4gK3N0YXRp YyBpcnFyZXR1cm5fdCBtbHhiZl90bWZpZm9faXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJn KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX2lycV9pbmZvICppcnFf aW5mbzsNCj4gPiArDQo+ID4gKyAgICAgICBpcnFfaW5mbyA9IChzdHJ1Y3QgbWx4YmZfdG1maWZv X2lycV9pbmZvICopYXJnOw0KPiANCj4gVXNlbGVzcyBjYXN0aW5nLg0KPiBBc3NpZ25tZW50IGNh biBiZSBkb25lIGluIGRlZmluaXRpb24gYmxvY2suDQo+IA0KPiA+ICsgICAgICAgaWYgKGlycV9p bmZvLT5pbmRleCA8IE1MWEJGX1RNX0lSUV9DTlQgJiYNCj4gPiArICAgICAgICAgICAhdGVzdF9h bmRfc2V0X2JpdChpcnFfaW5mby0+aW5kZXgsICZpcnFfaW5mby0+Zmlmby0+cGVuZF9ldmVudHMp KQ0KPiA+ICsgICAgICAgICAgICAgICBzY2hlZHVsZV93b3JrKCZpcnFfaW5mby0+Zmlmby0+d29y ayk7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiBHZXQgdGhlIG5leHQgcGFja2V0IGRlc2NyaXB0b3IgZnJvbSB0aGUgdnJpbmcu ICovDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdnJpbmdfZGVzYyAqbWx4YmZfdG1maWZvX2dldF9uZXh0 X2Rlc2Moc3RydWN0IHZpcnRxdWV1ZSAqdnEpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBt bHhiZl90bWZpZm9fdnJpbmcgKnZyaW5nOw0KPiA+ICsgICAgICAgdW5zaWduZWQgaW50IGlkeCwg aGVhZDsNCj4gPiArICAgICAgIHN0cnVjdCB2cmluZyAqdnI7DQo+ID4gKw0KPiA+ICsgICAgICAg dnIgPSAoc3RydWN0IHZyaW5nICopdmlydHF1ZXVlX2dldF92cmluZyh2cSk7DQo+IA0KPiBSZXR1 cm4gdHlwZSBpcyBkaWZmZXJlbnQ/IElzIGl0IHNhZmUgdG8gY2FzdD8gV2h5Pw0KPiANCj4gPiAr ICAgICAgIGlmICghdnIpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiANCj4g KyBibGFuayBsaW5lDQo+IA0KPiA+ICsgICAgICAgdnJpbmcgPSAoc3RydWN0IG1seGJmX3RtZmlm b192cmluZyAqKXZxLT5wcml2Ow0KPiANCj4gRG8geW91IG5lZWQgZXhwbGljaXQgY2FzdGluZz8N Cj4gDQo+ID4gKyAgICAgICBpZiAodnJpbmctPm5leHRfYXZhaWwgPT0gdmlydGlvMTZfdG9fY3B1 KHZxLT52ZGV2LCB2ci0+YXZhaWwtPmlkeCkpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBO VUxMOw0KPiANCj4gK2JsYW5rIGxpbmUNCj4gDQo+ID4gKyAgICAgICBpZHggPSB2cmluZy0+bmV4 dF9hdmFpbCAlIHZyLT5udW07DQo+ID4gKyAgICAgICBoZWFkID0gdmlydGlvMTZfdG9fY3B1KHZx LT52ZGV2LCB2ci0+YXZhaWwtPnJpbmdbaWR4XSk7DQo+ID4gKyAgICAgICBpZiAoV0FSTl9PTiho ZWFkID49IHZyLT5udW0pKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAr ICAgICAgIHZyaW5nLT5uZXh0X2F2YWlsKys7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuICZ2 ci0+ZGVzY1toZWFkXTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogUmVsZWFzZSB2aXJ0aW8gZGVz Y3JpcHRvci4gKi8NCj4gPiArc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX3JlbGVhc2VfZGVzYyhz dHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2cmluZyAqdnIsIHN0cnVjdCB2cmluZ19kZXNjICpkZXNjLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGxlbikNCj4gPiAr ew0KPiA+ICsgICAgICAgdTE2IGlkeCwgdnJfaWR4Ow0KPiA+ICsNCj4gPiArICAgICAgIHZyX2lk eCA9IHZpcnRpbzE2X3RvX2NwdSh2ZGV2LCB2ci0+dXNlZC0+aWR4KTsNCj4gPiArICAgICAgIGlk eCA9IHZyX2lkeCAlIHZyLT5udW07DQo+ID4gKyAgICAgICB2ci0+dXNlZC0+cmluZ1tpZHhdLmlk ID0gY3B1X3RvX3ZpcnRpbzMyKHZkZXYsIGRlc2MgLSB2ci0+ZGVzYyk7DQo+ID4gKyAgICAgICB2 ci0+dXNlZC0+cmluZ1tpZHhdLmxlbiA9IGNwdV90b192aXJ0aW8zMih2ZGV2LCBsZW4pOw0KPiA+ ICsNCj4gPiArICAgICAgIC8qIFZpcnRpbyBjb3VsZCBwb2xsIGFuZCBjaGVjayB0aGUgJ2lkeCcg dG8gZGVjaWRlDQo+ID4gKyAgICAgICAgKiB3aGV0aGVyIHRoZSBkZXNjIGlzIGRvbmUgb3Igbm90 LiBBZGQgYSBtZW1vcnkNCj4gPiArICAgICAgICAqIGJhcnJpZXIgaGVyZSB0byBtYWtlIHN1cmUg dGhlIHVwZGF0ZSBhYm92ZSBjb21wbGV0ZXMNCj4gPiArICAgICAgICAqIGJlZm9yZSB1cGRhdGlu ZyB0aGUgaWR4Lg0KPiA+ICsgICAgICAgICovDQo+IA0KPiBNdWx0aS1saW5lIGNvbW1lbnQgc3R5 bGUgaXMgYnJva2VuLg0KPiANCj4gPiArICAgICAgIG1iKCk7DQo+ID4gKyAgICAgICB2ci0+dXNl ZC0+aWR4ID0gY3B1X3RvX3ZpcnRpbzE2KHZkZXYsIHZyX2lkeCArIDEpOw0KPiA+ICt9DQo+IA0K PiA+ICsvKiBIb3VzZS1rZWVwaW5nIHRpbWVyLiAqLw0KPiA+ICtzdGF0aWMgdm9pZCBtbHhiZl90 bWZpZm9fdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKmFyZykNCj4gPiArew0KPiA+ICsgICAgICAg c3RydWN0IG1seGJmX3RtZmlmbyAqZmlmbzsNCj4gDQo+ID4gKyAgICAgICBmaWZvID0gY29udGFp bmVyX29mKGFyZywgc3RydWN0IG1seGJmX3RtZmlmbywgdGltZXIpOw0KPiANCj4gQ2FuJ3QgYmUg ZG9uZSBpbiB0aGUgZGVmaW5pdGlvbiBibG9jaz8NCj4gDQo+ID4gKyAgICAgICAvKg0KPiA+ICsg ICAgICAgICogV2FrZSB1cCB0aGUgd29yayBoYW5kbGVyIHRvIHBvbGwgdGhlIFJ4IEZJRk8gaW4g Y2FzZSBpbnRlcnJ1cHQNCj4gPiArICAgICAgICAqIG1pc3Npbmcgb3IgYW55IGxlZnRvdmVyIGJ5 dGVzIHN0dWNrIGluIHRoZSBGSUZPLg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICB0ZXN0 X2FuZF9zZXRfYml0KE1MWEJGX1RNX1JYX0hXTV9JUlEsICZmaWZvLT5wZW5kX2V2ZW50cyk7DQo+ IA0KPiBIb3cgZG8geW91IHV0aWxpemUgdGVzdCByZXN1bHRzPw0KPiANCj4gPiArDQo+ID4gKyAg ICAgICAvKg0KPiA+ICsgICAgICAgICogV2FrZSB1cCBUeCBoYW5kbGVyIGluIGNhc2UgdmlydGlv IGhhcyBxdWV1ZWQgdG9vIG1hbnkgcGFja2V0cw0KPiA+ICsgICAgICAgICogYW5kIGFyZSB3YWl0 aW5nIGZvciBidWZmZXIgcmV0dXJuLg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICB0ZXN0 X2FuZF9zZXRfYml0KE1MWEJGX1RNX1RYX0xXTV9JUlEsICZmaWZvLT5wZW5kX2V2ZW50cyk7DQo+ IA0KPiBEaXR0by4NCj4gDQo+ID4gKw0KPiA+ICsgICAgICAgc2NoZWR1bGVfd29yaygmZmlmby0+ d29yayk7DQo+ID4gKw0KPiA+ICsgICAgICAgbW9kX3RpbWVyKCZmaWZvLT50aW1lciwgamlmZmll cyArIG1seGJmX3RtZmlmb190aW1lcl9pbnRlcnZhbCk7DQo+ID4gK30NCj4gDQo+ID4gKyAgICAg ICAvKiBBZGp1c3QgdGhlIHNpemUgdG8gYXZhaWxhYmxlIHNwYWNlLiAqLw0KPiA+ICsgICAgICAg aWYgKHNpemUgKyBzaXplb2YoaGRyKSA+IGF2YWlsICogc2l6ZW9mKHU2NCkpDQo+ID4gKyAgICAg ICAgICAgICAgIHNpemUgPSBhdmFpbCAqIHNpemVvZih1NjQpIC0gc2l6ZW9mKGhkcik7DQo+IA0K PiBDYW4gYXZhaWwgYmUgMD8NCj4gDQo+ID4gKyAgICAgICAvKiBXcml0ZSBoZWFkZXIuICovDQo+ ID4gKyAgICAgICBoZHIudS5kYXRhID0gMDsNCj4gPiArICAgICAgIGhkci50eXBlID0gVklSVElP X0lEX0NPTlNPTEU7DQo+ID4gKyAgICAgICBoZHIubGVuID0gaHRvbnMoc2l6ZSk7DQo+ID4gKyAg ICAgICBoZHIudS5kYXRhX2xlID0gY3B1X3RvX2xlNjQoaGRyLnUuZGF0YSk7DQo+IA0KPiA+ICsg ICAgICAgd3JpdGVxKGhkci51LmRhdGEsIGZpZm8tPnR4X2Jhc2UgKyBNTFhCRl9UTUZJRk9fVFhf REFUQSk7DQo+IA0KPiBTbywgdGhpcyBvbmUgaXMgbm90IHByb3RlY3RlZCBhbnlob3c/IFBvdGVu dGlhbCByYWNlIGNvbmRpdGlvbj8NCj4gDQo+ID4gKw0KPiA+ICsgICAgICAgc3Bpbl9sb2NrX2ly cXNhdmUoJmZpZm8tPnNwaW5fbG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICAgIHdoaWxl IChzaXplID4gMCkgew0KPiA+ICsgICAgICAgICAgICAgICBhZGRyID0gY29ucy0+dHhfYnVmICsg Y29ucy0+dHhfaGVhZDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChjb25zLT50eF9o ZWFkICsgc2l6ZW9mKHU2NCkgPD0NCj4gPiArICAgICAgICAgICAgICAgICAgIE1MWEJGX1RNRklG T19DT05TX1RYX0JVRl9TSVpFKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5 KCZkYXRhLCBhZGRyLCBzaXplb2YodTY0KSk7DQo+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbCA9IE1MWEJGX1RNRklGT19DT05T X1RYX0JVRl9TSVpFIC0gY29ucy0+dHhfaGVhZDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBtZW1jcHkoJmRhdGEsIGFkZHIsIHBhcnRpYWwpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIG1lbWNweSgodTggKikmZGF0YSArIHBhcnRpYWwsIGNvbnMtPnR4X2J1ZiwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHU2NCkgLSBwYXJ0aWFsKTsNCj4gPiAr ICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICB3cml0ZXEoZGF0YSwgZmlmby0+ dHhfYmFzZSArIE1MWEJGX1RNRklGT19UWF9EQVRBKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIGlmIChzaXplID49IHNpemVvZih1NjQpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgbWx4YmZfdG1maWZvX3ZkZXZfdHhfYnVmX2luZGV4X2luYygmY29ucy0+dHhfaGVhZCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZih1NjQpKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzaXplIC09IHNp emVvZih1NjQpOw0KPiA+ICsgICAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIG1seGJmX3RtZmlmb192ZGV2X3R4X2J1Zl9pbmRleF9pbmMoJmNvbnMtPnR4 X2hlYWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzaXplID0g MDsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnNwaW5fbG9jaywgZmxhZ3MpOw0KPiA+ ICt9DQo+IA0KPiA+ICsgICAgICAgLyogUngvVHggb25lIHdvcmQgKDggYnl0ZXMpIGlmIG5vdCBk b25lLiAqLw0KPiA+ICsgICAgICAgaWYgKHZyaW5nLT5jdXJfbGVuICE9IGxlbikNCj4gPiArICAg ICAgICAgICAgICAgbWx4YmZfdG1maWZvX3J4dHhfd29yZChmaWZvLCB2ZGV2LCB2cmluZywgZGVz YywgaXNfcngsIGF2YWlsLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxlbik7DQo+IA0KPiBJbiBzdWNoIGNhc2UgYmV0dGVyIHRvIGtlZXAgaXQgaW4gb25lIGxp bmUuDQo+IA0KPiA+ICsvKiBHZXQgdGhlIGFycmF5IG9mIGZlYXR1cmUgYml0cyBmb3IgdGhpcyBk ZXZpY2UuICovDQo+ID4gK3N0YXRpYyB1NjQgbWx4YmZfdG1maWZvX3ZpcnRpb19nZXRfZmVhdHVy ZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVj dCBtbHhiZl90bWZpZm9fdmRldiAqdG1fdmRldjsNCj4gPiArDQo+ID4gKyAgICAgICB0bV92ZGV2 ID0gY29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBtbHhiZl90bWZpZm9fdmRldiwgdmRldik7DQo+ ID4gKyAgICAgICByZXR1cm4gdG1fdmRldi0+ZmVhdHVyZXM7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qIENvbmZpcm0gZGV2aWNlIGZlYXR1cmVzIHRvIHVzZS4gKi8NCj4gPiArc3RhdGljIGludCBt bHhiZl90bWZpZm9fdmlydGlvX2ZpbmFsaXplX2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNl ICp2ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZkZXYgKnRt X3ZkZXY7DQo+ID4gKw0KPiANCj4gPiArICAgICAgIHRtX3ZkZXYgPSBjb250YWluZXJfb2YodmRl diwgc3RydWN0IG1seGJmX3RtZmlmb192ZGV2LCB2ZGV2KTsNCj4gDQo+IFRoaXMgaXMgY2FuZGlk YXRlIHRvIGJlIGEgbWFjcm8NCj4gDQo+ICNkZWZpbmUgbWx4YnRfdmRldl90b190bWZpZm8oLi4u KSAuLi4NCj4gDQo+ID4gKyAgICAgICB0bV92ZGV2LT5mZWF0dXJlcyA9IHZkZXYtPmZlYXR1cmVz Ow0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+IA0KPiA+ICsvKiBDcmVh dGUgdmRldiB0eXBlIGluIGEgdG1maWZvLiAqLw0KPiA+ICtzdGF0aWMgaW50IG1seGJmX3RtZmlm b19jcmVhdGVfdmRldihzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IG1seGJmX3RtZmlmbyAqZmlmbywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmRldl9pZCwgdTY0IGZlYXR1cmVzLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbmZpZywgdTMy IHNpemUpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBtbHhiZl90bWZpZm9fdmRldiAqdG1f dmRldjsNCj4gPiArICAgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICAgIG11dGV4 X2xvY2soJmZpZm8tPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICAgIHRtX3ZkZXYgPSBmaWZvLT52 ZGV2W3ZkZXZfaWRdOw0KPiA+ICsgICAgICAgaWYgKHRtX3ZkZXYpIHsNCj4gPiArICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJ2ZGV2ICVkIGFscmVhZHkgZXhpc3RzXG4iLCB2ZGV2X2lkKTsN Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gLUVFWElTVDsNCj4gPiArICAgICAgICAgICAgICAg Z290byBmYWlsOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHRtX3ZkZXYgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnRtX3ZkZXYpLCBHRlBfS0VSTkVMKTsNCj4gPiArICAg ICAgIGlmICghdG1fdmRldikgew0KPiA+ICsgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOw0K PiA+ICsgICAgICAgICAgICAgICBnb3RvIGZhaWw7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgdG1fdmRldi0+dmRldi5pZC5kZXZpY2UgPSB2ZGV2X2lkOw0KPiA+ICsgICAgICAg dG1fdmRldi0+dmRldi5jb25maWcgPSAmbWx4YmZfdG1maWZvX3ZpcnRpb19jb25maWdfb3BzOw0K PiA+ICsgICAgICAgdG1fdmRldi0+dmRldi5kZXYucGFyZW50ID0gJmZpZm8tPnBkZXYtPmRldjsN Cj4gPiArICAgICAgIHRtX3ZkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7DQo+ID4gKyAgICAgICBp ZiAoY29uZmlnKQ0KPiA+ICsgICAgICAgICAgICAgICBtZW1jcHkoJnRtX3ZkZXYtPmNvbmZpZywg Y29uZmlnLCBzaXplKTsNCj4gPiArICAgICAgIGlmIChtbHhiZl90bWZpZm9fYWxsb2NfdnJpbmdz KGZpZm8sIHRtX3ZkZXYsIHZkZXZfaWQpKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRldl9lcnIo ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIHZyaW5nXG4iKTsNCj4gPiArICAgICAgICAgICAgICAg cmV0ID0gLUVOT01FTTsNCj4gPiArICAgICAgICAgICAgICAgZ290byBmYWlsOw0KPiA+ICsgICAg ICAgfQ0KPiA+ICsgICAgICAgaWYgKHZkZXZfaWQgPT0gVklSVElPX0lEX0NPTlNPTEUpDQo+IA0K PiA+ICsgICAgICAgICAgICAgICB0bV92ZGV2LT50eF9idWYgPSBkZXZtX2ttYWxsb2MoZGV2LA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxYQkZf VE1GSUZPX0NPTlNfVFhfQlVGX1NJWkUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsNCj4gDQo+IEFyZSB5b3Ugc3VyZSBkZXZt XyBzdWl0cyBoZXJlPw0KPiANCj4gPiArICAgICAgIGZpZm8tPnZkZXZbdmRldl9pZF0gPSB0bV92 ZGV2Ow0KPiA+ICsNCj4gPiArICAgICAgIC8qIFJlZ2lzdGVyIHRoZSB2aXJ0aW8gZGV2aWNlLiAq Lw0KPiA+ICsgICAgICAgcmV0ID0gcmVnaXN0ZXJfdmlydGlvX2RldmljZSgmdG1fdmRldi0+dmRl dik7DQo+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRldl9lcnIo JmZpZm8tPnBkZXYtPmRldiwgInJlZ2lzdGVyX3ZpcnRpb19kZXZpY2UgZmFpbGVkXG4iKTsNCj4g PiArICAgICAgICAgICAgICAgZ290byByZWdpc3Rlcl9mYWlsOw0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgIG11dGV4X3VubG9jaygmZmlmby0+bG9jayk7DQo+ID4gKyAgICAgICBy ZXR1cm4gMDsNCj4gPiArDQo+ID4gK3JlZ2lzdGVyX2ZhaWw6DQo+ID4gKyAgICAgICBtbHhiZl90 bWZpZm9fZnJlZV92cmluZ3MoZmlmbywgdmRldl9pZCk7DQo+ID4gKyAgICAgICBmaWZvLT52ZGV2 W3ZkZXZfaWRdID0gTlVMTDsNCj4gPiArZmFpbDoNCj4gPiArICAgICAgIG11dGV4X3VubG9jaygm Zmlmby0+bG9jayk7DQo+ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+IA0KPiA+ICsv KiBSZWFkIHRoZSBjb25maWd1cmVkIG5ldHdvcmsgTUFDIGFkZHJlc3MgZnJvbSBlZmkgdmFyaWFi bGUuICovDQo+ID4gK3N0YXRpYyB2b2lkIG1seGJmX3RtZmlmb19nZXRfY2ZnX21hYyh1OCAqbWFj KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBlZmlfZ3VpZF90IGd1aWQgPSBFRklfR0xPQkFMX1ZBUklB QkxFX0dVSUQ7DQo+ID4gKyAgICAgICBlZmlfc3RhdHVzX3Qgc3RhdHVzOw0KPiA+ICsgICAgICAg dW5zaWduZWQgbG9uZyBzaXplOw0KPiA+ICsgICAgICAgdTggYnVmWzZdOw0KPiA+ICsNCj4gPiAr ICAgICAgIHNpemUgPSBzaXplb2YoYnVmKTsNCj4gPiArICAgICAgIHN0YXR1cyA9IGVmaS5nZXRf dmFyaWFibGUobWx4YmZfdG1maWZvX2VmaV9uYW1lLCAmZ3VpZCwgTlVMTCwgJnNpemUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7DQo+ID4gKyAgICAgICBpZiAo c3RhdHVzID09IEVGSV9TVUNDRVNTICYmIHNpemUgPT0gc2l6ZW9mKGJ1ZikpDQo+ID4gKyAgICAg ICAgICAgICAgIG1lbWNweShtYWMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KPiA+ICt9DQo+IA0KPiBT aG91bGRuJ3QgYmUgcmF0aGVyIGhlbHBlciBpbiBFRkkgbGliIGluIGtlcm5lbD8NCj4gDQo+ID4g Ky8qIFByb2JlIHRoZSBUTUZJRk8uICovDQo+ID4gK3N0YXRpYyBpbnQgbWx4YmZfdG1maWZvX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0 cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZyBuZXRfY29uZmlnOw0KPiA+ICsgICAgICAgc3RydWN0IHJl c291cmNlICpyeF9yZXMsICp0eF9yZXM7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZv ICpmaWZvOw0KPiA+ICsgICAgICAgaW50IGksIHJldDsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBH ZXQgdGhlIHJlc291cmNlIG9mIHRoZSBSeCBGSUZPLiAqLw0KPiA+ICsgICAgICAgcnhfcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiArICAg ICAgIGlmICghcnhfcmVzKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4g PiArDQo+ID4gKyAgICAgICAvKiBHZXQgdGhlIHJlc291cmNlIG9mIHRoZSBUeCBGSUZPLiAqLw0K PiA+ICsgICAgICAgdHhfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAxKTsNCj4gPiArICAgICAgIGlmICghdHhfcmVzKQ0KPiA+ICsgICAgICAgICAgICAg ICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIWRldm1fcmVxdWVzdF9t ZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJ4X3Jlcy0+c3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3NpemUocnhfcmVzKSwgImJmLXRtZmlmbyIp KQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0KPiA+ICsNCj4gPiArICAgICAg IGlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgdHhfcmVzLT5zdGFydCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZSh0 eF9yZXMpLCAiYmYtdG1maWZvIikpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7 DQo+ID4gKw0KPiA+ICsgICAgICAgZmlmbyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXpl b2YoKmZpZm8pLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgIGlmICghZmlmbykNCj4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgICAgZmlmby0+cGRl diA9IHBkZXY7DQo+ID4gKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmaWZvKTsN Cj4gPiArDQo+ID4gKyAgICAgICBzcGluX2xvY2tfaW5pdCgmZmlmby0+c3Bpbl9sb2NrKTsNCj4g PiArICAgICAgIElOSVRfV09SSygmZmlmby0+d29yaywgbWx4YmZfdG1maWZvX3dvcmtfaGFuZGxl cik7DQo+ID4gKw0KPiA+ICsgICAgICAgdGltZXJfc2V0dXAoJmZpZm8tPnRpbWVyLCBtbHhiZl90 bWZpZm9fdGltZXIsIDApOw0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBNTFhC Rl9UTV9JUlFfQ05UOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgZmlmby0+aXJxX2luZm9b aV0uaW5kZXggPSBpOw0KPiA+ICsgICAgICAgICAgICAgICBmaWZvLT5pcnFfaW5mb1tpXS5maWZv ID0gZmlmbzsNCj4gDQo+ID4gKyAgICAgICAgICAgICAgIGZpZm8tPmlycV9pbmZvW2ldLmlycSA9 IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7DQo+IA0KPiANCj4gPiArICAgICAgICAgICAgICAg cmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBmaWZvLT5pcnFfaW5mb1tpXS5pcnEs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWx4YmZfdG1maWZv X2lycV9oYW5kbGVyLCAwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ0bWZpZm8iLCAmZmlmby0+aXJxX2luZm9baV0pOw0KPiA+ICsgICAgICAgICAgICAgICBp ZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2 LCAiZGV2bV9yZXF1ZXN0X2lycSBmYWlsZWRcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGZpZm8tPmlycV9pbmZvW2ldLmlycSA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gDQo+ID4gKyAgICAgICBmaWZvLT5yeF9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5k ZXYsIHJ4X3Jlcy0+c3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc291cmNlX3NpemUocnhfcmVzKSk7DQo+ID4gKyAgICAgICBpZiAoIWZpZm8tPnJ4X2Jh c2UpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArICAg ICAgIGZpZm8tPnR4X2Jhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgdHhfcmVzLT5zdGFy dCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6 ZSh0eF9yZXMpKTsNCj4gPiArICAgICAgIGlmICghZmlmby0+dHhfYmFzZSkNCj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+IA0KPiBTd2l0Y2ggdG8gZGV2bV9pb3JlbWFwX3Jl c291cmNlKCkuDQo+IEhvd2V2ZXIsIEkgdGhpbmsgeW91IHByb2JhYmx5IG5lZWQgbWVtcmVtYXAo KS4NCj4gDQo+ID4gKyAgICAgICBtdXRleF9pbml0KCZmaWZvLT5sb2NrKTsNCj4gDQo+IElzbid0 IHRvbyBsYXRlIGZvciBpbml0aWFsaXppbmcgdGhpcyBvbmU/DQo+IA0KPiANCj4gPiArLyogRGV2 aWNlIHJlbW92ZSBmdW5jdGlvbi4gKi8NCj4gPiArc3RhdGljIGludCBtbHhiZl90bWZpZm9fcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0 cnVjdCBtbHhiZl90bWZpZm8gKmZpZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4g PiArDQo+IA0KPiA+ICsgICAgICAgaWYgKGZpZm8pDQo+IA0KPiBIb3cgaXMgaXQgcG9zc2libGUg dG8gYmUgbm90IHRydWU/DQo+IA0KPiA+ICsgICAgICAgICAgICAgICBtbHhiZl90bWZpZm9fY2xl YW51cChmaWZvKTsNCj4gPiArDQo+IA0KPiA+ICsgICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgTlVMTCk7DQo+IA0KPiBSZWR1bmRhbnQuDQo+IA0KPiA+ICsNCj4gPiArICAgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+IA0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+IA0KPiBJ cyBpdCBjb3JyZWN0Pw0KPiANCj4gLS0NCj4gV2l0aCBCZXN0IFJlZ2FyZHMsDQo+IEFuZHkgU2hl dmNoZW5rbw0K