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=-9.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,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 EEEE0C433E7 for ; Sun, 18 Oct 2020 05:21:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7B0BF20EDD for ; Sun, 18 Oct 2020 05:21:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="L0iP8CgK" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726328AbgJRFVr (ORCPT ); Sun, 18 Oct 2020 01:21:47 -0400 Received: from mail-eopbgr80040.outbound.protection.outlook.com ([40.107.8.40]:61579 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726214AbgJRFVp (ORCPT ); Sun, 18 Oct 2020 01:21:45 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Eehf4Y6c62Km+tKwvGUKzyMv8d18gkjhARRJjvZMeg28wU51aqoiafLI/Y3k4V8hLhPSYOqS/fWOZk2qr73Ix/ATQfdaNe+4ykl5Wv+D/9HN+PBZogh9XtUrZFo0N+O8vUt/9OO61vw5wZZV+DtHMYKKErZEOt0u7asQQTtvfJUAWrPBgvax4E0P59luiB3QEhtsBgz38gFY09R5R6KPDFPCUbA8WqciWTYBGjMHLYt9TqnL9rmAK4BfgGzvdRnIsKt7jcNDnoujL8MNXuEkI4Ycax6pW5Crd7PK6Pib33JPhKFm7Rx0kUgrvFimN+toBL/5Hqct3Ua/z0FSy4MWOw== 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=0/PM0WvWkwaP9bFVqaAhA6YxYXHEG2DOoo5mzcwkEhI=; b=NQkvksOIjZ6OanBiFtlCIh9oZdvzR3h0sknlNKSsWt2io4gwXekY+PiuBBAu/cOLLpkzbcS/SOuypJo6rvCrXg/3OMHX0t5BFS9n0sF5teHab3PRZgJzfYkgbhPwxF2vt2+V5iR63T1K+X5KDv0S0fCc+Du6DIpAdRqDUJD6wJeAOX1/eg7sEF4f293uOg5zXK8O8K1eFgDEv8Fzqq2ICvXPRk4HOuDFnG9azXMBtHO6CD4J0rKWVY70qchWl6AFuEsilO+86Eei4L72iFSNhYDJEPwP+TCORB4BGSxnVOZCOVlpVD/zHKYqk4vSs2LKtmpFrqGeY6Kw9d24AO+b6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0/PM0WvWkwaP9bFVqaAhA6YxYXHEG2DOoo5mzcwkEhI=; b=L0iP8CgKImtk93SgyNrXpODSApeun6DV0+c9qwAafonwdn1ESkzIvtZzlEx5pw8KsvlwNUYdH4ZewkVrehF/KJQc0rQCgQi0VPdzJag5I07zRbCYP8QKgq3umkoXqQW9NW2BLZviB234Aumqqjuz27jzmvoe14R0kPWmOj9vw3Y= Received: from AM6PR04MB4966.eurprd04.prod.outlook.com (2603:10a6:20b:2::14) by AS8PR04MB7989.eurprd04.prod.outlook.com (2603:10a6:20b:28b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.28; Sun, 18 Oct 2020 05:21:29 +0000 Received: from AM6PR04MB4966.eurprd04.prod.outlook.com ([fe80::546f:92f0:f3c5:a148]) by AM6PR04MB4966.eurprd04.prod.outlook.com ([fe80::546f:92f0:f3c5:a148%7]) with mapi id 15.20.3477.028; Sun, 18 Oct 2020 05:21:29 +0000 From: Aisheng Dong To: Shawn Guo , "Franck Lenormand (OSS)" , Arnd Bergmann CC: "s.hauer@pengutronix.de" , "festevam@gmail.com" , "kernel@pengutronix.de" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , dl-linux-imx , Abel Vesa , Anson Huang , "linux@rempel-privat.de" , Leonard Crestez , Daniel Baluta , Joakim Zhang , Peng Fan , "linux-edac@vger.kernel.org" , "mchehab@kernel.org" , Borislav Petkov , "tony.luck@intel.com" Subject: RE: [PATCH v2 5/5] soc: imx8: Add the SC SECVIO driver Thread-Topic: [PATCH v2 5/5] soc: imx8: Add the SC SECVIO driver Thread-Index: AQHWX3KA8ts8/b6ieEuKkqNeKsfG0Kk/mzuAgF3BhDA= Date: Sun, 18 Oct 2020 05:21:28 +0000 Message-ID: References: <1595344835-67746-1-git-send-email-franck.lenormand@oss.nxp.com> <1595344835-67746-6-git-send-email-franck.lenormand@oss.nxp.com> <20200819133136.GB7114@dragon> In-Reply-To: <20200819133136.GB7114@dragon> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=nxp.com; x-originating-ip: [92.121.68.129] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 53a15e3a-994f-4292-126f-08d87325aae6 x-ms-traffictypediagnostic: AS8PR04MB7989: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:15; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Xbl1zhlyc+h4CFzmUh8dpxZsW0mqrEO8To1UQ9QICp0klzH9UChrBe8yrijkCdoxlVzriKwviM0TW0KTNBnn6nx7UgfRLNzRWeBVOMG9sHJaOtkM7xMCGIPrLK34JoMbNS/1kHgAfyJVlY0o895+/yZFwnftUNT8vFUH96viMQSJMFMo1GR3NUoX5oReem7myj1aYNsTj4yZozPdo/lrPdZdSbNueQLUtARP8vpS0Tn29iSbUA+XHu3OPDIj+vbe+EU0qjDGqfmqA55QWmdSMlsLrjz+GZ+4NgUylDVk4Oog1egDM+8ssZy4WWJsFoVEyqT64dknGYYWdFXJPpo8mA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4966.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(366004)(39850400004)(346002)(396003)(376002)(7416002)(55016002)(7696005)(83380400001)(54906003)(86362001)(44832011)(8676002)(4326008)(110136005)(6506007)(316002)(30864003)(478600001)(8936002)(9686003)(33656002)(71200400001)(66446008)(2906002)(66556008)(52536014)(64756008)(186003)(76116006)(66476007)(66946007)(26005)(5660300002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: tOhDfxjfNtmFoJHcXgzhKEZ85cSm7vXnv8vsRCEPrXe5Pb0EoG0UjR8YXTM0LU6sX0tvlk9/BTTBh15tgaLle+fxFngXOR/8AdHzu1bk7FojnJDMFYKDcU2WRomlMmYvK5tA4SI+kni58ngfA+YR4Yl7KlCNAcku1FxGWuFPvOJtgigtkJDZ/JgKVAYP04xAwYRZVdozXSmk5ybL83YbrcXiHF0ohJLG1wdiijfqeYC7b5rlq37MaahZ13eZ9OaxVI2elgUxYYlhNp+yDP0m6EpQIvMTmhVZ9nVVZHlKhSLVwDmb40BXp/phtsmiibIYOgRKm+kvV7UiXaKjRIYybJxYdIWM6Wo6Q6zl59WA5D0klFmEX751AtpxVr/Y91zySfmbKpq1cb0Wp7VYYeNABSxKO6C2+MFRLubsJfZJ273A0qp/v910W9MLkgpWclxK/FOTJRCAoGf+vM7743ISpOlI7et1KEAQV5amdC78M+JDAOo6a68VFb5RJTZf/fujZPJwh+u1OrTuMuMRn6dyMsPES+r3RD4WhOkuDsp/p2heMjqRnn+6wY+M+U5CxztrzrYPyrwgNY52ti9gD7LrxgIc774rql4LyJjfp4ndVKsjs4AZRd6F6/R91rH8SIr3Lv5KwusAt029myok1yHhuQ== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4966.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53a15e3a-994f-4292-126f-08d87325aae6 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Oct 2020 05:21:28.9415 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PVHndMTsSWieMBNkcMOLhvtVj4kB9MSCrrn215DpkdPuxm//3CKwCF23RbBhNDahyZ5DDlLm/PlYYhQTrHHvQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7989 Precedence: bulk List-ID: X-Mailing-List: linux-edac@vger.kernel.org PiBGcm9tOiBTaGF3biBHdW8gPHNoYXduZ3VvQGtlcm5lbC5vcmc+DQo+IFNlbnQ6IFdlZG5lc2Rh eSwgQXVndXN0IDE5LCAyMDIwIDk6MzIgUE0NCj4gPg0KPiA+IFRoZSBTTlZTIGlzIGEgaGFyZHdh cmUgY29tcG9uZW50IGluIHRoZSBpbXg4IFNvQy4gT25lIG9mIGl0cyBmdW5jdGlvbg0KPiA+IGlz IHRvIGRldGVjdCBoYXJkd2FyZSBhdHRhY2tzLCBpbiB3aGljaCBjYXNlIGl0IGNyZWF0ZXMgYSBT RUN1cml0eQ0KPiA+IFZJT2xhdGlvbi4NCj4gPg0KPiA+IFRoaXMgcGF0Y2ggYWRkcyB0aGUgc3Vw cG9ydCBmb3IgdGhlIHJlY2VwdGlvbiBvZiB0aGVzZSBzZWN2aW8gYW5kDQo+ID4gcmVwb3J0IGl0 IHRvIHRoZSBhdWRpdCBmcmFtZXdvcmsuDQo+ID4NCj4gPiBJdCBhbHNvIGdpdmVzIHRoZSBwb3Nz aWJpbGl0eSB0byBwZXJmb3JtIGN1c3RvbSBwcm9jZXNzaW5nIHdoZW4gYQ0KPiA+IHNlY3ZpbyBp cyBkZXRlY3RlZC4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEZyYW5jayBMRU5PUk1BTkQgPGZy YW5jay5sZW5vcm1hbmRAb3NzLm54cC5jb20+DQo+ID4gUmVwb3J0ZWQtYnk6IGtlcm5lbCB0ZXN0 IHJvYm90IDxsa3BAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL3NvYy9pbXgvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsNCj4gPiAgZHJpdmVycy9zb2MvaW14L01h a2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvc29jL2lteC9z ZWN2aW8vS2NvbmZpZyAgICAgICAgICAgICAgfCAgMTAgKw0KPiA+ICBkcml2ZXJzL3NvYy9pbXgv c2VjdmlvL01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICsNCj4gPiAgZHJpdmVycy9zb2MvaW14 L3NlY3Zpby9pbXgtc2VjdmlvLWF1ZGl0LmMgICB8ICAzOSArKw0KPiA+ICBkcml2ZXJzL3NvYy9p bXgvc2VjdmlvL2lteC1zZWN2aW8tZGVidWdmcy5jIHwgMzc5ICsrKysrKysrKysrKw0KPiA+IGRy aXZlcnMvc29jL2lteC9zZWN2aW8vaW14LXNlY3Zpby1zYy1pbnQuaCAgfCAgODQgKysrDQo+ID4g IGRyaXZlcnMvc29jL2lteC9zZWN2aW8vaW14LXNlY3Zpby1zYy5jICAgICAgfCA4NTgNCj4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBpbmNsdWRlL3NvYy9pbXgvaW14LXNlY3Zp by1zYy5oICAgICAgICAgICAgIHwgMTc3ICsrKysrKw0KPiA+ICA5IGZpbGVzIGNoYW5nZWQsIDE1 NjEgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvaW14 L3NlY3Zpby9LY29uZmlnICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBkcml2ZXJzL3NvYy9pbXgv c2VjdmlvL01ha2VmaWxlICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBkcml2ZXJzL3NvYy9pbXgv c2VjdmlvL2lteC1zZWN2aW8tYXVkaXQuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zb2MvaW14L3NlY3Zpby9pbXgtc2VjdmlvLWRlYnVnZnMuYw0KPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zb2MvaW14L3NlY3Zpby9pbXgtc2VjdmlvLXNjLWludC5oDQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9pbXgvc2VjdmlvL2lteC1zZWN2aW8tc2MuYw0K PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zb2MvaW14L2lteC1zZWN2aW8tc2MuaA0K PiANCj4gSGkgQXJuZCwNCj4gDQo+IERvIHdlIGhhdmUgYW55IHN1YnN5c3RlbSB0byBhY2NvbW1v ZGF0ZSB0aGlzIGRyaXZlcj8gIE9yICdzb2MnIGlzIGp1c3QgdGhlDQo+IHJpZ2h0IHBsYWNlIGZv ciBpdD8NCj4gDQoNCk5vdCBzdXJlIGlmIEVEQUMgY291bGQgYmUgYSBiZXR0ZXIgcGxhY2UuDQpl LmcuDQpkcml2ZXJzL2VkYWMvc2lmaXZlX2VkYWMuYw0KSWYgbm90LCBtYXliZSB3ZSBjYW4gcHV0 IGluICdzb2MnIGZpcnN0Lg0KDQpSZWdhcmRzDQpBaXNoZW5nDQoNCj4gU2hhd24NCj4gDQo+ID4N Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvaW14L0tjb25maWcgYi9kcml2ZXJzL3NvYy9p bXgvS2NvbmZpZyBpbmRleA0KPiA+IGE5MzcwZjQuLjZjMWJjNzggMTAwNjQ0DQo+ID4gLS0tIGEv ZHJpdmVycy9zb2MvaW14L0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9pbXgvS2NvbmZp Zw0KPiA+IEBAIC0xOSw0ICsxOSwxNCBAQCBjb25maWcgU09DX0lNWDhNDQo+ID4gIAkgIHN1cHBv cnQsIGl0IHdpbGwgcHJvdmlkZSB0aGUgU29DIGluZm8gbGlrZSBTb0MgZmFtaWx5LA0KPiA+ICAJ ICBJRCBhbmQgcmV2aXNpb24gZXRjLg0KPiA+DQo+ID4gK2NvbmZpZyBTRUNWSU9fU0MNCj4gPiAr ICAgICAgICB0cmlzdGF0ZSAiTlhQIFNDIHNlY3ZpbyBzdXBwb3J0Ig0KPiA+ICsgICAgICAgIGRl cGVuZHMgb24gSU1YX1NDVQ0KPiA+ICsgICAgICAgIGhlbHANCj4gPiArICAgICAgICAgICBJZiB5 b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIE5YUCBTTlZTIHNlY3VyaXR5 DQo+ID4gKyAgICAgICAgICAgdmlvbGF0aW9uIG1vZHVsZS4gSXQgaW5jbHVkZXMgdGhlIHBvc3Np YmlsaXR5IHRvIHJlYWQgaW5mb3JtYXRpb24NCj4gPiArICAgICAgICAgICByZWxhdGVkIHRvIHNl Y3VyaXR5IHZpb2xhdGlvbnMgYW5kIHRhbXBlcnMuIEl0IGFsc28gZ2l2ZXMgdGhlDQo+ID4gKyAg ICAgICAgICAgcG9zc2liaWxpdHkgdG8gcmVnaXN0ZXIgdXNlciBjYWxsYmFja3Mgd2hlbiBhIHNl Y3VyaXR5IHZpb2xhdGlvbg0KPiA+ICsgICAgICAgICAgIG9jY3Vycy4NCj4gPiArDQo+ID4gIGVu ZG1lbnUNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvaW14L01ha2VmaWxlIGIvZHJpdmVy cy9zb2MvaW14L01ha2VmaWxlIGluZGV4DQo+ID4gMDc4ZGM5MS4uYzkxYTQ5OSAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL3NvYy9pbXgvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9p bXgvTWFrZWZpbGUNCj4gPiBAQCAtNSwzICs1LDQgQEAgZW5kaWYNCj4gPiAgb2JqLSQoQ09ORklH X0hBVkVfSU1YX0dQQykgKz0gZ3BjLm8NCj4gPiAgb2JqLSQoQ09ORklHX0lNWF9HUENWMl9QTV9E T01BSU5TKSArPSBncGN2Mi5vDQo+ID4gIG9iai0kKENPTkZJR19TT0NfSU1YOE0pICs9IHNvYy1p bXg4bS5vDQo+ID4gK29iai0ke0NPTkZJR19TRUNWSU9fU0N9ICs9IHNlY3Zpby8NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9zb2MvaW14L3NlY3Zpby9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL3Nv Yy9pbXgvc2VjdmlvL0tjb25maWcgbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPiAwMDAw MDAwLi5kY2ZhZWE1DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvc29jL2lt eC9zZWN2aW8vS2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsMTAgQEANCj4gPiArY29uZmlnIFNFQ1ZJ T19TQw0KPiA+ICsgICAgICAgIHRyaXN0YXRlICJOWFAgU0Mgc2VjdmlvIHN1cHBvcnQiDQo+ID4g KyAgICAgICAgZGVwZW5kcyBvbiBJTVhfU0NVDQo+ID4gKyAgICAgICAgaGVscA0KPiA+ICsgICAg ICAgICAgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTlhQIFNO VlMgc2VjdXJpdHkNCj4gPiArICAgICAgICAgICB2aW9sYXRpb24gbW9kdWxlLiBJdCBpbmNsdWRl cyB0aGUgcG9zc2liaWxpdHkgdG8gcmVhZCBpbmZvcm1hdGlvbg0KPiA+ICsgICAgICAgICAgIHJl bGF0ZWQgdG8gc2VjdXJpdHkgdmlvbGF0aW9ucyBhbmQgdGFtcGVycy4gSXQgYWxzbyBnaXZlcyB0 aGUNCj4gPiArICAgICAgICAgICBwb3NzaWJpbGl0eSB0byByZWdpc3RlciB1c2VyIGNhbGxiYWNr cyB3aGVuIGEgc2VjdXJpdHkgdmlvbGF0aW9uDQo+ID4gKyAgICAgICAgICAgb2NjdXJzLg0KPiA+ ICsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvaW14L3NlY3Zpby9NYWtlZmlsZQ0KPiA+ IGIvZHJpdmVycy9zb2MvaW14L3NlY3Zpby9NYWtlZmlsZSBuZXcgZmlsZSBtb2RlIDEwMDY0NCBp bmRleA0KPiA+IDAwMDAwMDAuLmQ1YTg5YmENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIv ZHJpdmVycy9zb2MvaW14L3NlY3Zpby9NYWtlZmlsZQ0KPiA+IEBAIC0wLDAgKzEsMyBAQA0KPiA+ ICtvYmoteSArPSAgaW14LXNlY3Zpby1zYy5vDQo+ID4gK29iai0kKENPTkZJR19ERUJVR19GUykg Kz0gaW14LXNlY3Zpby1kZWJ1Z2ZzLm8NCj4gPiArb2JqLSQoQ09ORklHX0FVRElUKSArPSBpbXgt c2VjdmlvLWF1ZGl0Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvaW14L3NlY3Zpby9p bXgtc2VjdmlvLWF1ZGl0LmMNCj4gPiBiL2RyaXZlcnMvc29jL2lteC9zZWN2aW8vaW14LXNlY3Zp by1hdWRpdC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5k Yzk2ZTE2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvc29jL2lteC9zZWN2 aW8vaW14LXNlY3Zpby1hdWRpdC5jDQo+ID4gQEAgLTAsMCArMSwzOSBAQA0KPiA+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0 IDIwMTktMjAyMCBOWFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYXVk aXQuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxzb2MvaW14L2lteC1zZWN2aW8tc2MuaD4NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiByZXBvcnRfdG9fYXVkaXRfbm90aWZ5KCkgLSBSZXBvcnQg c2VjdmlvIGFuZCB0YW1wZXIgc3RhdHVzIHRvDQo+ID4gK2F1ZGl0IEZXDQo+ID4gKyAqDQo+ID4g KyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNoYWluZWQgaW4gYSBub3RpZmllciBsaXN0DQo+ID4g KyAqDQo+ID4gKyAqIEBuYjogbm90aWZpZXIgYmxvY2sNCj4gPiArICogQHN0YXR1czogZXJyb3Ig Y29kZQ0KPiA+ICsgKiBAbm90aWZfaW5mbzogUG9pbnRlciBvbiBzZWN2aW9fc2Nfbm90aWZpZXJf aW5mbyBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sN Cj4gPiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtpbnQgcmVwb3J0X3RvX2F1ZGl0 X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHN0YXR1cywN Cj4gPiArCQkJICAgdm9pZCAqbm90aWZfaW5mbykNCj4gPiArew0KPiA+ICsJc3RydWN0IGF1ZGl0 X2J1ZmZlciAqYWI7DQo+ID4gKwlzdHJ1Y3Qgc2VjdmlvX3NjX25vdGlmaWVyX2luZm8gKmluZm8g PSBub3RpZl9pbmZvOw0KPiA+ICsNCj4gPiArCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGF1ZGl0X2Nv bnRleHQoKSwgR0ZQX0tFUk5FTCwNCj4gQVVESVRfSU5URUdSSVRZX1JVTEUpOw0KPiA+ICsJaWYg KCFhYikNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlhdWRpdF9sb2dfZm9y bWF0KGFiLCAiIGhwc3ZzPTB4JS4wOHggbHBzPTB4JS4wOHggbHB0ZHM9MHglLjA4eCIsDQo+ID4g KwkJCSBpbmZvLT5ocHN2cywgaW5mby0+bHBzLCBpbmZvLT5scHRkcyk7DQo+ID4gKwlhdWRpdF9s b2dfdGFza19pbmZvKGFiKTsNCj4gPiArCWF1ZGl0X2xvZ19lbmQoYWIpOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2lteC9zZWN2 aW8vaW14LXNlY3Zpby1kZWJ1Z2ZzLmMNCj4gPiBiL2RyaXZlcnMvc29jL2lteC9zZWN2aW8vaW14 LXNlY3Zpby1kZWJ1Z2ZzLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAw MDAwMDAuLmJjYmQ3N2ENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zb2Mv aW14L3NlY3Zpby9pbXgtc2VjdmlvLWRlYnVnZnMuYw0KPiA+IEBAIC0wLDAgKzEsMzc5IEBADQo+ ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiA+ICsvKg0KPiA+ICsg KiBDb3B5cmlnaHQgMjAxOS0yMDIwIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKy8qDQo+ID4g KyAqIFRoZSBtb2R1bGUgZXhwb3NlcyAzIGZpbGVzIGluIGRlYnVnZnM6DQo+ID4gKyAqICAtIHNl Y3Zpby9pbmZvOg0KPiA+ICsgKiAgICAgICogUmVhZDogSXQgcmV0dXJucyB0aGUgdmFsdWUgb2Yg dGhlIGZ1c2VzIGFuZCBTTlZTIHJlZ2lzdGVycyB3aGljaCBhcmUNCj4gPiArICogICAgICAgICAg ICAgIHJlYWRhYmxlIGFuZCByZWxhdGVkIHRvIHNlY3ZpbyBhbmQgdGFtcGVycw0KPiA+ICsgKiAg ICAgICogV3JpdGU6IEEgd3JpdGUgb2YgdGhlIGZvcm1hdCAiPGhleCBpZD4gWzxoZXggdmFsdWUg MD4gPGhleCB2YWx1ZSAxPg0KPiA+ICsgKiAgICAgICAgICAgICAgIDxoZXggdmFsdWUgMj4gPGhl eCB2YWx1ZSAzPiA8aGV4IHZhbHVlIDQ+XSg8bmIgdmFsdWVzPikiDQo+ID4gKyAqICAgICAgICAg ICAgICAgd2lsbCB3cml0ZSB0aGUgU05WUyByZWdpc3RlciBoYXZpbmcgdGhlIHByb3ZpZGVkIGlk IHdpdGgNCj4gdGhlDQo+ID4gKyAqICAgICAgICAgICAgICAgdmFsdWVzIHByb3ZpZGVkIChjZiBT RUNPIGRvY3VtZW50YXRpb24pDQo+ID4gKyAqICAtIHNlY3Zpby9lbmFibGU6IFN0YXRlIG9mIHRo ZSBJUlENCj4gPiArICogIC0gc2VjdmlvL2NoZWNrOiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIHNl Y3VyaXR5IHZpb2xhdGlvbiBhbmQgdGFtcGVycw0KPiA+ICsgKiAgICAgICAgICAgICAgICAgIGFu ZCBjYWxscyBub3RpZmllcg0KPiA+ICsgKiAgLSBzZWN2aW8vY2xlYXI6IENsZWFyIHRoZSBzdGF0 ZSBvZiBhbGwgc2VjdmlvIGFuZCB0YW1wZXJzICAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9udm1lbS1jb25zdW1lci5oPg0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2Zpcm13YXJlL2lteC9zdmMvbWlzYy5oPiAjaW5jbHVkZQ0KPiA+ICs8bGludXgv ZmlybXdhcmUvaW14L3N2Yy9zZWNvLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c29jL2lteC9p bXgtc2VjdmlvLXNjLmg+DQo+ID4gKyNpbmNsdWRlICJpbXgtc2VjdmlvLXNjLWludC5oIg0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIGZ1c2VfcmVhZGVyKCkgLSBSZWFkIGEgc2V0IG9mIGZ1c2UN Cj4gPiArICoNCj4gPiArICogQGRldjogc2VjdmlvIGRldmljZQ0KPiA+ICsgKiBAaWQ6IG9mZnNl dCBvZiB0aGUgZnVzZQ0KPiA+ICsgKiBAdmFsdWU6IGFycmF5IG9mIHZhbHVlcyByZWFkDQo+ID4g KyAqIEBtdWw6IG51bWJlciBvZiBmdXNlIHRvIHJlYWQNCj4gPiArICoNCj4gPiArICogUmV0dXJu Og0KPiA+ICsgKiAwIC0gT0sNCj4gPiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgaW50IGZ1c2VfcmVhZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGlkLCB1MzIgKnZh bHVlLCB1OA0KPiA+ICttdWwpIHsNCj4gPiArCXN0cnVjdCBpbXhfc2VjdmlvX3NjX2RhdGEgKmRh dGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCXUzMiBzaXplX3RvX3JlYWQgPSBtdWwg KiBzaXplb2YodTMyKTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbnZtZW1f ZGV2aWNlX3JlYWQoZGF0YS0+bnZtZW0sIGlkLCBzaXplX3RvX3JlYWQsIHZhbHVlKTsNCj4gPiAr CWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2VycihkYXRhLT5kZXYsICJGYWlsZWQgdG8gcmVh ZCBmdXNlICVkOiAlZFxuIiwgaWQsIHJldCk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAocmV0ICE9IHNpemVfdG9fcmVhZCkgew0KPiA+ICsJCWRldl9lcnIo ZGF0YS0+ZGV2LCAiUmVhZCBvbmx5ICVkIGluc3RlYWQgb2YgJWRcbiIsIHJldCwNCj4gPiArCQkJ c2l6ZV90b19yZWFkKTsNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHNudnNfcmVh ZGVyKCkgLSBSZWFkIGEgc2V0IG9mIFNOVlMgcmVnaXN0ZXINCj4gPiArICoNCj4gPiArICogQGRl djogc2VjdmlvIGRldmljZQ0KPiA+ICsgKiBAaWQ6IG9mZnNldCBvZiB0aGUgcmVnaXN0ZXINCj4g PiArICogQHZhbHVlOiBhcnJheSBvZiB2YWx1ZXMgcmVhZA0KPiA+ICsgKiBAbXVsOiBudW1iZXIg b2YgcmVnaXN0ZXJzIHRvIHJlYWQNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAw IC0gT0sNCj4gPiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHNu dnNfcmVhZGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGlkLCB1MzIgKnZhbHVlLCB1OA0KPiA+ ICttdWwpIHsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1MzIgKnYxLCAqdjIsICp2MywgKnY0LCAq djU7DQo+ID4gKw0KPiA+ICsJdjEgPSBOVUxMOw0KPiA+ICsJdjIgPSBOVUxMOw0KPiA+ICsJdjMg PSBOVUxMOw0KPiA+ICsJdjQgPSBOVUxMOw0KPiA+ICsJdjUgPSBOVUxMOw0KPiA+ICsNCj4gPiAr CXN3aXRjaCAobXVsKSB7DQo+ID4gKwljYXNlIDU6DQo+ID4gKwkJdjUgPSAmdmFsdWVbNF07DQo+ ID4gKwkJZmFsbHRocm91Z2g7DQo+ID4gKwljYXNlIDQ6DQo+ID4gKwkJdjQgPSAmdmFsdWVbM107 DQo+ID4gKwkJZmFsbHRocm91Z2g7DQo+ID4gKwljYXNlIDM6DQo+ID4gKwkJdjMgPSAmdmFsdWVb Ml07DQo+ID4gKwkJZmFsbHRocm91Z2g7DQo+ID4gKwljYXNlIDI6DQo+ID4gKwkJdjIgPSAmdmFs dWVbMV07DQo+ID4gKwkJZmFsbHRocm91Z2g7DQo+ID4gKwljYXNlIDE6DQo+ID4gKwkJdjEgPSAm dmFsdWVbMF07DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGNhbGxfc2VjdmlvX2NvbmZpZyhk ZXYsIGlkLCBTRUNWSU9fQ09ORklHX1JFQUQsIHYxLCB2MiwgdjMsIHY0LA0KPiA+ICsJCQkJIHY1 LCBtdWwpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVhZCBzbnZzIHJlZyAlZDogJWRcbiIsIGlkLCByZXQpOw0KPiA+ICsNCj4gPiArCXJldHVy biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzbnZzX2Rnb19yZWFkZXIo KSAtIFJlYWQgYSBzZXQgb2YgREdPIHJlZ2lzdGVyDQo+ID4gKyAqDQo+ID4gKyAqIEBkZXY6IHNl Y3ZpbyBkZXZpY2UNCj4gPiArICogQGlkOiBvZmZzZXQgb2YgdGhlIHJlZ2lzdGVyDQo+ID4gKyAq IEB2YWx1ZTogYXJyYXkgb2YgdmFsdWVzIHJlYWQNCj4gPiArICogQG11bDogbnVtYmVyIG9mIHJl Z2lzdGVycyB0byByZWFkDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogMCAtIE9L DQo+ID4gKyAqIDwgMCAtIGVycm9yLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBzbnZzX2Rn b19yZWFkZXIoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgaWQsIHUzMiAqdmFsdWUsIHU4DQo+ID4g K211bCkgew0KPiA+ICsJc3RydWN0IGlteF9zZWN2aW9fc2NfZGF0YSAqZGF0YSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwkvKiBXZSBjaGVjayB0 aGF0IHdlIG9ubHkgaGF2ZSAxIHJlZ2lzdGVyIHRvIHJlYWQgKi8NCj4gPiArCWlmIChtdWwgIT0g MSkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlyZXQgPSBpbXhfc2Nfc2Vj b19zZWN2aW9fZGdvX2NvbmZpZyhkYXRhLT5pcGNfaGFuZGxlLCBpZCwNCj4gPiArCQkJCQkgICAg U0VDVklPX0NPTkZJR19SRUFELCB2YWx1ZSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgc252cyBkZ28gcmVnICVkOiAlZFxuIiwgaWQsIHJldCk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBpbXhfc2VjdmlvX2luZm9fZW50cnkgew0KPiA+ICsJaW50ICgqcmVhZGVyKShz dHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBpZCwgdTMyICp2YWx1ZSwgdTggbXVsKTsNCj4gPiArCWNv bnN0IGNoYXIgKnR5cGU7DQo+ID4gKwljb25zdCBjaGFyICpuYW1lOw0KPiA+ICsJdTMyIGlkOw0K PiA+ICsJdTggbXVsOw0KPiA+ICt9IGdzX2lteF9zZWN2aW9faW5mb19saXN0W10gPSB7DQo+ID4g Kwl7ZnVzZV9yZWFkZXIsICJmdXNlIiwgInRyaW0iLCAzMCwgMX0sDQo+ID4gKwl7ZnVzZV9yZWFk ZXIsICJmdXNlIiwgInRyaW0yIiwgMzEsIDF9LA0KPiA+ICsJe2Z1c2VfcmVhZGVyLCAiZnVzZSIs ICJjdHJpbTEiLCAyNjAsIDF9LA0KPiA+ICsJe2Z1c2VfcmVhZGVyLCAiZnVzZSIsICJjdHJpbTIi LCAyNjEsIDF9LA0KPiA+ICsJe2Z1c2VfcmVhZGVyLCAiZnVzZSIsICJjdHJpbTMiLCAyNjIsIDF9 LA0KPiA+ICsJe2Z1c2VfcmVhZGVyLCAiZnVzZSIsICJjdHJpbTQiLCAyNjMsIDF9LA0KPiA+ICsJ e2Z1c2VfcmVhZGVyLCAiZnVzZSIsICJPU0NfQ0FQIiwgNzY4LCAxfSwNCj4gPiArDQo+ID4gKwl7 c252c19yZWFkZXIsICJzbnZzIiwgIkhQTFIiLCAgICAweDAsIDF9LA0KPiA+ICsJe3NudnNfcmVh ZGVyLCAic252cyIsICJMUExSIiwgICAgMHgzNCwgMX0sDQo+ID4gKwl7c252c19yZWFkZXIsICJz bnZzIiwgIkhQU0lDUiIsICAweGMsIDF9LA0KPiA+ICsJe3NudnNfcmVhZGVyLCAic252cyIsICJI UFNWQ1IiLCAgMHgxMCwgMX0sDQo+ID4gKwl7c252c19yZWFkZXIsICJzbnZzIiwgIkhQU1ZTIiwg ICAweDE4LCAxfSwNCj4gPiArCXtzbnZzX3JlYWRlciwgInNudnMiLCAiTFBTVkMiLCAgIDB4NDAs IDF9LA0KPiA+ICsJe3NudnNfcmVhZGVyLCAic252cyIsICJMUFREQyIsICAgMHg0OCwgMn0sDQo+ ID4gKwl7c252c19yZWFkZXIsICJzbnZzIiwgIkxQU1IiLCAgICAweDRjLCAxfSwNCj4gPiArCXtz bnZzX3JlYWRlciwgInNudnMiLCAiTFBURFMiLCAgIDB4YTQsIDF9LA0KPiA+ICsJe3NudnNfcmVh ZGVyLCAic252cyIsICJMUFRHRkMiLCAgMHg0NCwgM30sDQo+ID4gKwl7c252c19yZWFkZXIsICJz bnZzIiwgIkxQQVRDVEwiLCAweGUwLCAxfSwNCj4gPiArCXtzbnZzX3JlYWRlciwgInNudnMiLCAi TFBBVENMSyIsIDB4ZTQsIDF9LA0KPiA+ICsJe3NudnNfcmVhZGVyLCAic252cyIsICJMUEFUUkMx IiwgMHhlOCwgMn0sDQo+ID4gKwl7c252c19yZWFkZXIsICJzbnZzIiwgIkxQTUtDIiwgICAweDNj LCAxfSwNCj4gPiArCXtzbnZzX3JlYWRlciwgInNudnMiLCAiTFBTTUMiLCAgIDB4NWMsIDJ9LA0K PiA+ICsJe3NudnNfcmVhZGVyLCAic252cyIsICJMUFBHRCIsICAgMHg2NCwgMX0sDQo+ID4gKwl7 c252c19yZWFkZXIsICJzbnZzIiwgIkhQVklEIiwgICAweGY4LCAyfSwNCj4gPiArDQo+ID4gKwl7 c252c19kZ29fcmVhZGVyLCAiZGdvIiwgIk9mZnNldCIsICAweDAsIDF9LA0KPiA+ICsJe3NudnNf ZGdvX3JlYWRlciwgImRnbyIsICJQVVAvUEQiLCAgMHgxMCwgMX0sDQo+ID4gKwl7c252c19kZ29f cmVhZGVyLCAiZGdvIiwgIkFuYXRlc3QiLCAweDIwLCAxfSwNCj4gPiArCXtzbnZzX2Rnb19yZWFk ZXIsICJkZ28iLCAiVCB0cmltIiwgIDB4MzAsIDF9LA0KPiA+ICsJe3NudnNfZGdvX3JlYWRlciwg ImRnbyIsICJNaXNjIiwgICAgMHg0MCwgMX0sDQo+ID4gKwl7c252c19kZ29fcmVhZGVyLCAiZGdv IiwgIlZtb24iLCAgICAweDUwLCAxfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBpbXhf c2VjdmlvX3NjX2luZm9fc2VxX2RhdGEgew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ ICsJY29uc3Qgc3RydWN0IGlteF9zZWN2aW9faW5mb19lbnRyeSAqbGlzdDsNCj4gPiArCWludCBz aXplOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2NfaW5m b19zZXFfc3RhcnQoKSAtIFN0YXJ0IHNlcXVlbmNlDQo+ID4gKyAqDQo+ID4gKyAqIEBtOiBzZXEg ZmlsZQ0KPiA+ICsgKiBAcG9zOiBwb3NpdGlvbiBpbiB0aGUgc2VxdWVuY2UNCj4gPiArICoNCj4g PiArICogUmV0dXJuIHBvaW50ZXIgb24gcG9zaXRpb24NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2 b2lkICppbXhfc2VjdmlvX3NjX2luZm9fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9m Zl90DQo+ID4gKypwb3MpIHsNCj4gPiArCXN0cnVjdCBpbXhfc2VjdmlvX3NjX2luZm9fc2VxX2Rh dGEgKmRhdGEgPSBtLT5wcml2YXRlOw0KPiA+ICsNCj4gPiArCS8qIENoZWNrIHdlIGFyZSBub3Qg b3V0IG9mIGJvdW5kICovDQo+ID4gKwlpZiAoKnBvcyA+PSBkYXRhLT5zaXplKQ0KPiA+ICsJCXJl dHVybiBOVUxMOw0KPiA+ICsNCj4gPiArCXJldHVybiAodm9pZCAqKXBvczsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2NfaW5mb19zZXFfbmV4dCgpIC0gSXRl cmF0ZSBzZXF1ZW5jZQ0KPiA+ICsgKg0KPiA+ICsgKiBAbTogc2VxIGZpbGUNCj4gPiArICogQHY6 IHBvaW50ZXINCj4gPiArICogQHBvczogcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlDQo+ID4gKyAq DQo+ID4gKyAqIFJldHVybiBwb2ludGVyIG9uIHBvc2l0aW9uDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgdm9pZCAqaW14X3NlY3Zpb19zY19pbmZvX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdiwNCj4gPiArbG9mZl90ICpwb3MpIHsNCj4gPiArCS8qIEluY3JlbWVudCB0aGUgY291 bnRlciAqLw0KPiA+ICsJKysqcG9zOw0KPiA+ICsNCj4gPiArCS8qIGNhbGwgdGhlIHN0YXJ0IGZ1 bmN0aW9uIHdoaWNoIHdpbGwgY2hlY2sgdGhlIGluZGV4ICovDQo+ID4gKwlyZXR1cm4gaW14X3Nl Y3Zpb19zY19pbmZvX3NlcV9zdGFydChtLCBwb3MpOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogaW14X3NlY3Zpb19zY19pbmZvX3NlcV9zdG9wKCkgLSBTdG9wIHNlcXVlbmNlDQo+ID4gKyAq DQo+ID4gKyAqIEBtOiBzZXEgZmlsZQ0KPiA+ICsgKiBAdjogcG9pbnRlcg0KPiA+ICsgKi8NCj4g PiArc3RhdGljIHZvaWQgaW14X3NlY3Zpb19zY19pbmZvX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqdikNCj4gPiAreyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogaW14X3Nl Y3Zpb19zY19pbmZvX3NlcV9zaG93KCkgLSBTaG93IHRoZSBpdGVtIGluIHRoZSBzZXF1ZW5jZQ0K PiA+ICsgKg0KPiA+ICsgKiBAbTogc2VxIGZpbGUNCj4gPiArICogQHY6IHBvaW50ZXINCj4gPiAr ICogQHBvczogcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy bjoNCj4gPiArICogMCAtIE9LDQo+ID4gKyAqIDwgMCAtIGVycm9yLg0KPiA+ICsgKi8NCj4gPiAr c3RhdGljIGludCBpbXhfc2VjdmlvX3NjX2luZm9fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICp2KSB7DQo+ID4gKwlzdHJ1Y3QgaW14X3NlY3Zpb19zY19pbmZvX3NlcV9kYXRhICpk YXRhID0gbS0+cHJpdmF0ZTsNCj4gPiArCWNvbnN0IHN0cnVjdCBpbXhfc2VjdmlvX2luZm9fZW50 cnkgKmU7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdTMyIHZhbHNbNV07DQo+ID4gKwlpbnQgaWR4 Ow0KPiA+ICsNCj4gPiArCWlkeCA9ICoobG9mZl90ICopdjsNCj4gPiArCWUgPSAmZGF0YS0+bGlz dFtpZHhdOw0KPiA+ICsNCj4gPiArCS8qIFJlYWQgdGhlIHZhbHVlcyAqLw0KPiA+ICsJcmV0ID0g ZS0+cmVhZGVyKGRhdGEtPmRldiwgZS0+aWQsICh1MzIgKikmdmFscywgZS0+bXVsKTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRhdGEtPmRldiwgIkZhaWwgdG8gcmVhZCAlcyAl cyAoaWR4ICVkKVxuIiwgZS0+dHlwZSwNCj4gPiArCQkJZS0+bmFtZSwgZS0+aWQpOw0KPiA+ICsJ CXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXNlcV9wcmludGYobSwgIiU1cy8lLTEw cyglLjNkKToiLCBlLT50eXBlLCBlLT5uYW1lLCBlLT5pZCk7DQo+ID4gKw0KPiA+ICsJLyogTG9v cCBvdmVyIHRoZSB2YWx1ZXMgKi8NCj4gPiArCWZvciAoaWR4ID0gMDsgaWR4IDwgZS0+bXVsOyBp ZHgrKykNCj4gPiArCQlzZXFfcHJpbnRmKG0sICIgJS44eCIsIHZhbHNbaWR4XSk7DQo+ID4gKw0K PiA+ICsJc2VxX3B1dHMobSwgIlxuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW14X3NlY3Zp b19zY19pbmZvX3NlcV9vcHMgPSB7DQo+ID4gKwkuc3RhcnQgPSBpbXhfc2VjdmlvX3NjX2luZm9f c2VxX3N0YXJ0LA0KPiA+ICsJLm5leHQgID0gaW14X3NlY3Zpb19zY19pbmZvX3NlcV9uZXh0LA0K PiA+ICsJLnN0b3AgID0gaW14X3NlY3Zpb19zY19pbmZvX3NlcV9zdG9wLA0KPiA+ICsJLnNob3cg ID0gaW14X3NlY3Zpb19zY19pbmZvX3NlcV9zaG93LCB9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIGlteF9zZWN2aW9fc2NfaW5mb19vcGVuKCkgLSBTdG9yZSBub2RlIGluZm8gZm9yIGlvY3Rs DQo+ID4gKyAqDQo+ID4gKyAqIEBpbm9kZTogaW5vZGUNCj4gPiArICogQGZpbGU6IGZpbGUgdXNl ZCB0byBwZXJmb3JtIHRoZSBpb2N0bA0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46DQo+ID4gKyAq IDAgLSBPSw0KPiA+ICsgKiA8IDAgLSBlcnJvci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQg aW14X3NlY3Zpb19zY19pbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUN Cj4gPiArKmZpbGUpIHsNCj4gPiArCXN0cnVjdCBpbXhfc2VjdmlvX3NjX2luZm9fc2VxX2RhdGEg KmRhdGE7DQo+ID4gKw0KPiA+ICsJZGF0YSA9IF9fc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmaW14 X3NlY3Zpb19zY19pbmZvX3NlcV9vcHMsDQo+IHNpemVvZigqZGF0YSkpOw0KPiA+ICsJaWYgKCFk YXRhKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWRhdGEtPmRldiA9IGlu b2RlLT5pX3ByaXZhdGU7DQo+ID4gKwlkYXRhLT5saXN0ID0gZ3NfaW14X3NlY3Zpb19pbmZvX2xp c3Q7DQo+ID4gKwlkYXRhLT5zaXplID0gQVJSQVlfU0laRShnc19pbXhfc2VjdmlvX2luZm9fbGlz dCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlteF9zZWN2aW9fc2NfaW5mb19vcHMgPSB7DQo+ ID4gKwkub3duZXIgPSBUSElTX01PRFVMRSwNCj4gPiArCS5vcGVuID0gaW14X3NlY3Zpb19zY19p bmZvX29wZW4sDQo+ID4gKwkucmVhZCA9IHNlcV9yZWFkLA0KPiA+ICsJLmxsc2VlayA9IHNlcV9s c2VlaywNCj4gPiArCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwNCj4gPiArfTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpZl9kZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoKSAtIFdy YXBwZXIgZm9yDQo+ID4gK2RlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZQ0KPiA+ICsgKg0KPiA+ICsg KiBDYW4gYmUgdXNlZCB3aXRoIGRldm0NCj4gPiArICoNCj4gPiArICogQGRlbnRyeTogZGlyZWN0 b3J5IGVudHJ5DQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBpZl9kZWJ1Z2ZzX3JlbW92ZV9y ZWN1cnNpdmUodm9pZCAqZGVudHJ5KSB7DQo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUo ZGVudHJ5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2Nf ZGVidWdmcygpIC0gQ3JlYXRlIHRoZSBkZWJ1Z2ZzDQo+ID4gKyAqDQo+ID4gKyAqIEBkZXY6IHNl Y3ZpbyBkZXZpY2UNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4g PiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtpbnQgaW14X3NlY3Zpb19zY19kZWJ1 Z2ZzKHN0cnVjdCBkZXZpY2UgKmRldikgew0KPiA+ICsJc3RydWN0IGlteF9zZWN2aW9fc2NfZGF0 YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsJc3RydWN0IGRlbnRyeSAqZGly Ow0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJLyogQ3JlYXRlIGEgZm9sZGVyICov DQo+ID4gKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoZGV2KSwgTlVMTCk7DQo+ ID4gKwlpZiAoSVNfRVJSKGRpcikpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBj cmVhdGUgZGZzIGRpclxuIik7DQo+ID4gKwkJcmV0ID0gUFRSX0VSUihkaXIpOw0KPiA+ICsJCWdv dG8gZXhpdDsNCj4gPiArCX0NCj4gPiArCWRhdGEtPmRmcyA9IGRpcjsNCj4gPiArDQo+ID4gKwly ZXQgPSBkZXZtX2FkZF9hY3Rpb24oZGV2LCBpZl9kZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUsIGRh dGEtPmRmcyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gYWRkIG1hbmFnZWQgYWN0aW9uIHRvIGRpc2FibGUgSVJRXG4iKTsNCj4gPiArCQlnb3RvIHJl bW92ZV9mczsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBDcmVhdGUgdGhlIGZpbGUgdG8gcmVh ZCBpbmZvIGFuZCB3cml0ZSB0byByZWcgKi8NCj4gPiArCWRpciA9IGRlYnVnZnNfY3JlYXRlX2Zp bGUoImluZm8iLCAweDY2NiwgZGF0YS0+ZGZzLCBkZXYsDQo+ID4gKwkJCQkgICZpbXhfc2Vjdmlv X3NjX2luZm9fb3BzKTsNCj4gPiArCWlmIChJU19FUlIoZGlyKSkgew0KPiA+ICsJCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGFkZCBpbmZvIHRvIGRlYnVnZnNcbiIpOw0KPiA+ICsJCXJldCA9IFBU Ul9FUlIoZGlyKTsNCj4gPiArCQlnb3RvIGV4aXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZ290 byBleGl0Ow0KPiA+ICsNCj4gPiArcmVtb3ZlX2ZzOg0KPiA+ICsJZGVidWdmc19yZW1vdmVfcmVj dXJzaXZlKGRhdGEtPmRmcyk7DQo+ID4gKw0KPiA+ICtleGl0Og0KPiA+ICsJcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9pbXgvc2VjdmlvL2lteC1zZWN2 aW8tc2MtaW50LmgNCj4gPiBiL2RyaXZlcnMvc29jL2lteC9zZWN2aW8vaW14LXNlY3Zpby1zYy1p bnQuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uNTRkZTdm YQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9pbXgvc2VjdmlvL2lt eC1zZWN2aW8tc2MtaW50LmgNCj4gPiBAQCAtMCwwICsxLDg0IEBADQo+ID4gKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQg MjAxOS0yMDIwIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgU0VDVklPX1NDX0gN Cj4gPiArI2RlZmluZSBTRUNWSU9fU0NfSA0KPiA+ICsNCj4gPiArLyogSW5jbHVkZXMgKi8NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbm90aWZp ZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvbnZtZW0tY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2Uu aD4NCj4gPiArDQo+ID4gKy8qIEFjY2VzcyBmb3Igc2Nfc2Vjb19zZWN2aW9fY29uZmlnIEFQSSAq LyAjZGVmaW5lIFNFQ1ZJT19DT05GSUdfUkVBRA0KPiA+ICswICNkZWZpbmUgU0VDVklPX0NPTkZJ R19XUklURSAxDQo+ID4gKw0KPiA+ICsvKiBJbnRlcm5hbCBTdHJ1Y3R1cmUgKi8NCj4gPiArc3Ry dWN0IGlteF9zZWN2aW9fc2NfZGF0YSB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4g Kw0KPiA+ICsJc3RydWN0IGlteF9zY19pcGMgKmlwY19oYW5kbGU7DQo+ID4gKw0KPiA+ICsJc3Ry dWN0IG5vdGlmaWVyX2Jsb2NrIGlycV9uYjsNCj4gPiArCXN0cnVjdCBub3RpZmllcl9ibG9jayBy ZXBvcnRfbmI7DQo+ID4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYXVkaXRfbmI7DQo+ID4gKw0K PiA+ICsJc3RydWN0IG52bWVtX2RldmljZSAqbnZtZW07DQo+ID4gKw0KPiA+ICsJc3RydWN0IG1p c2NkZXZpY2UgbWlzY2RldjsNCj4gPiArDQo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCj4g PiArCXN0cnVjdCBkZW50cnkgKmRmczsNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsJdTMyIHZl cnNpb247DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogY2FsbF9zZWN2aW9fY29u ZmlnKCkgLSBXcmFwcGVyIGZvciBpbXhfc2Nfc2Vjb19zZWN2aW9fY29uZmlnKCkNCj4gPiArICoN Cj4gPiArICogQGRldjogc2VjdmlvIGRldmljZQ0KPiA+ICsgKiBAaWQ6IElEIG9mIHRoZSByZWdp c3RlciwgaWUgdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgb2YNCj4gPiArdGhlIHNl dA0KPiA+ICsgKiBAYWNjZXNzOiBXcml0ZSAoMSkgb3IgUmVhZCAoMCkgdGhlIHJlZ2lzdGVycw0K PiA+ICsgKiBAZGF0YTA6IERhdGEgZm9yIHRoZSBmaXJzdCByZWdpc3Rlcg0KPiA+ICsgKiBAZGF0 YTE6IERhdGEgZm9yIHRoZSBzZWNvbmQgcmVnaXN0ZXINCj4gPiArICogQGRhdGEyOiBEYXRhIGZv ciB0aGUgdGhpcmQgcmVnaXN0ZXINCj4gPiArICogQGRhdGEzOiBEYXRhIGZvciB0aGUgZm91cnRo IHJlZ2lzdGVyDQo+ID4gKyAqIEBkYXRhNDogRGF0YSBmb3IgdGhlIGZpZnRoIHJlZ2lzdGVyDQo+ ID4gKyAqIEBzaXplOiBOdW1iZXIgb2YgcmVnaXN0ZXIgdG8gY29uZmlndXJlDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybjoNCj4gPiArICogMCAtIE9LDQo+ID4gKyAqIDwgMCAtIGVycm9yLg0KPiA+ ICsgKi8NCj4gPiAraW50IGNhbGxfc2VjdmlvX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4 IGlkLCB1OCBhY2Nlc3MsIHUzMiAqZGF0YTAsDQo+ID4gKwkJICAgICAgIHUzMiAqZGF0YTEsIHUz MiAqZGF0YTIsIHUzMiAqZGF0YTMsIHUzMiAqZGF0YTQsIHU4IHNpemUpOw0KPiA+ICsNCj4gPiAr I2lmZGVmIENPTkZJR19ERUJVR19GUw0KPiA+ICtleHRlcm4NCj4gPiAraW50IGlteF9zZWN2aW9f c2NfZGVidWdmcyhzdHJ1Y3QgZGV2aWNlICpkZXYpOyAjZWxzZSBzdGF0aWMgaW5saW5lDQo+ID4g K2ludCBpbXhfc2VjdmlvX3NjX2RlYnVnZnMoc3RydWN0IGRldmljZSAqZGV2KSB7DQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovDQo+ID4g Kw0KPiA+ICsjaWZkZWYgQ09ORklHX0FVRElUDQo+ID4gK2ludCByZXBvcnRfdG9fYXVkaXRfbm90 aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgc3RhdHVzLA0KPiA+ ICsJCQkgICB2b2lkICpub3RpZl9pbmZvKTsNCj4gPiArI2Vsc2UgLyogQ09ORklHX0FVRElUICov DQo+ID4gK3N0YXRpYyBpbmxpbmUNCj4gPiAraW50IHJlcG9ydF90b19hdWRpdF9ub3RpZnkoc3Ry dWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBzdGF0dXMsDQo+ID4gKwkJCSAg IHZvaWQgKm5vdGlmX2luZm8pDQo+ID4gK3sNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g KyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8NCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBTRUNWSU9f U0NfSCAqLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9pbXgvc2VjdmlvL2lteC1zZWN2 aW8tc2MuYw0KPiA+IGIvZHJpdmVycy9zb2MvaW14L3NlY3Zpby9pbXgtc2VjdmlvLXNjLmMNCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjFlMGQ2YWENCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zb2MvaW14L3NlY3Zpby9pbXgtc2Vjdmlv LXNjLmMNCj4gPiBAQCAtMCwwICsxLDg1OCBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCsNCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMTktMjAyMCBOWFAN Cj4gPiArICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGUgU29DIG9mIHRoZSBpLk1YOCBm YW1pbHkgY29udGFpbnMgYSBoYXJkd2FyZSBibG9jayBjYWxsZWQgU05WUw0KPiA+ICsgKiAoU2Vj dXJlIE5vbi1Wb2xhdGlsZSBTdG9yYWdlKS4NCj4gPiArICoNCj4gPiArICogVGhlIGkuTVg4IChR TS9RWFAvRFhMKSBTb0MgY29udGFpbnMgdGhlICAoU05WUykgYmxvY2suIFRoaXMNCj4gPiArICog YmxvY2sgY2FuIGRldGVjdCBzcGVjaWZpYyBoYXJkd2FyZSBhdHRhY2tzLiBEdWUgdG8gdGhlIHBy ZXNlbmNlIG9mDQo+ID4gK3RoZSBTRUNPLA0KPiA+ICsgKiB0aGlzIGJsb2NrIGNhbiBvbmx5IGJl IGFjY2Vzc2libGUgdXNpbmcgdGhlIFNDRlcgQVBJLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIG1v ZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgU0NVIHdoaWNoIHJlbGF5cyByZXF1ZXN0IHRvL2Zyb20N Cj4gPiArdGhlIFNOVlMgYmxvY2sNCj4gPiArICogdG8gZGV0ZWN0IGlmIHNlY3VyaXR5IHZpb2xh dGlvbiBvY2N1cnJlZC4NCj4gPiArICoNCj4gPiArICogVGhlIG1vZHVsZSBleHBvcnRzIGFuIEFQ SSB0byBhZGQgcHJvY2Vzc2luZyB3aGVuIGEgU1YgaXMgZGV0ZWN0ZWQ6DQo+ID4gKyAqICAtIHJl Z2lzdGVyX2lteF9zZWN2aW9fc2Nfbm90aWZpZXINCj4gPiArICogIC0gdW5yZWdpc3Rlcl9pbXhf c2VjdmlvX3NjX25vdGlmaWVyDQo+ID4gKyAqICAtIGlteF9zZWN2aW9fc2NfY2hlY2tfc3RhdGUN Cj4gPiArICogIC0gaW50X2lteF9zZWN2aW9fc2NfY2xlYXJfc3RhdGUNCj4gPiArICogIC0gaW14 X3NlY3Zpb19zY19lbmFibGVfaXJxDQo+ID4gKyAqICAtIGlteF9zZWN2aW9fc2NfZGlzYWJsZV9p cnENCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVy Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2ZzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9vZl9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbnZtZW0tY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L21pc2NkZXZpY2UuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2Fy ZS9pbXgvaXBjLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS9pbXgvc2NpLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS9pbXgvc3ZjL3NlY28uaD4gI2luY2x1ZGUNCj4g PiArPGxpbnV4L2Zpcm13YXJlL2lteC9zdmMvcm0uaD4gI2luY2x1ZGUNCj4gPiArPGR0LWJpbmRp bmdzL2Zpcm13YXJlL2lteC9yc3JjLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c29jL2lteC9p bXgtc2VjdmlvLXNjLmg+DQo+ID4gKyNpbmNsdWRlICJpbXgtc2VjdmlvLXNjLWludC5oIg0KPiA+ ICsNCj4gPiArLyogRGVmaW5pdGlvbnMgKi8NCj4gPiArc3RhdGljIGludCBpbnRfaW14X3NlY3Zp b19zY19lbmFibGVfaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7IHN0YXRpYw0KPiA+ICtpbnQgaW50 X2lteF9zZWN2aW9fc2NfZGlzYWJsZV9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsNCj4gPiArDQo+ ID4gKy8qIFJlZmVyZW5jZSBvbiB0aGUgZHJpdmVyX2RldmljZSAqLw0KPiA+ICtzdGF0aWMgc3Ry dWN0IGRldmljZSAqZ3NfaW14X3NlY3Zpb19zY19kZXY7DQo+ID4gKw0KPiA+ICsvKiBSZWdpc3Rl ciBJRHMgZm9yIHNjX3NlY29fc2VjdmlvX2NvbmZpZyBBUEkgKi8gI2RlZmluZSBIUFNWU19JRA0K PiA+ICsweDE4ICNkZWZpbmUgTFBTX0lEIDB4NGMgI2RlZmluZSBMUFREU19JRCAweGE0ICNkZWZp bmUgSFBWSURSX0lEIDB4ZjgNCj4gPiArDQo+ID4gKyNkZWZpbmUgU0VDT19NSU5PUl9WRVJTSU9O X1NVUFBPUlRfU0VDVklPX1RBTVBFUiAweDUzICNkZWZpbmUNCj4gPiArU0VDT19WRVJTSU9OX01J Tk9SX01BU0sgR0VOTUFTSygxNSwgMCkNCj4gPiArDQo+ID4gKy8qIE5vdGlmaWVyIGxpc3QgZm9y IG5ldyBDQiAqLw0KPiA+ICtzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChpbXhfc2Vjdmlv X3NjX25vdGlmaWVyX2NoYWluKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiByZWdpc3Rlcl9p bXhfc2VjdmlvX3NjX25vdGlmaWVyKCkgLSBBZGQgZnVuY3Rpb24gdG8gc2VjdmlvIGNhbGwNCj4g PiArY2hhaW4NCj4gPiArICoNCj4gPiArICogQG5iOiBub3RpZmllciBibG9jayBvZiB0aGUgZnVu Y3Rpb24gdG8gYWRkDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogMCAtIE9LDQo+ ID4gKyAqIDwgMCAtIGVycm9yLg0KPiA+ICsgKi8NCj4gPiAraW50IHJlZ2lzdGVyX2lteF9zZWN2 aW9fc2Nfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikgew0KPiA+ICsJcmV0dXJu IGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZpbXhfc2VjdmlvX3NjX25vdGlmaWVy X2NoYWluLA0KPiA+ICsJCQkJCQluYik7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTChyZWdp c3Rlcl9pbXhfc2VjdmlvX3NjX25vdGlmaWVyKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB1 bnJlZ2lzdGVyX2lteF9zZWN2aW9fc2Nfbm90aWZpZXIoKSAtIFJlbW92ZSBmdW5jdGlvbiB0byBz ZWN2aW8NCj4gPiArY2FsbCBjaGFpbg0KPiA+ICsgKg0KPiA+ICsgKiBAbmI6IG5vdGlmaWVyIGJs b2NrIG9mIHRoZSBmdW5jdGlvbiB0byBhZGQNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ ICsgKiAwIC0gT0sNCj4gPiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtpbnQgdW5y ZWdpc3Rlcl9pbXhfc2VjdmlvX3NjX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIp IHsNCj4gPiArCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZpbXhf c2VjdmlvX3NjX25vdGlmaWVyX2NoYWluLA0KPiA+ICsJCQkJCQkgIG5iKTsNCj4gPiArfQ0KPiA+ ICtFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaW14X3NlY3Zpb19zY19ub3RpZmllcik7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogaWZfaW14X3NjdV9pcnFfcmVnaXN0ZXJfbm90aWZpZXIoKSAt IFdyYXBwZXIgZm9yDQo+ID4gK2lteF9zY3VfaXJxX3JlZ2lzdGVyX25vdGlmaWVyDQo+ID4gKyAq DQo+ID4gKyAqIENhbiBiZSB1c2VkIGZvciBkZXZtIGFjdGlvbnMNCj4gPiArICoNCj4gPiArICog QG5iOiBub3RpZmllciBibG9jayBvZiB0aGUgZnVuY3Rpb24gdG8gYWRkICAqLyBzdGF0aWMgdm9p ZA0KPiA+ICtpZl91bnJlZ2lzdGVyX2lteF9zZWN2aW9fc2Nfbm90aWZpZXIodm9pZCAqbmIpIHsN Cj4gPiArCXVucmVnaXN0ZXJfaW14X3NlY3Zpb19zY19ub3RpZmllcihuYik7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpbXhfc2VjdmlvX3NjX25vdGlmaWVyX2NhbGxfY2hhaW4o KSAtIENhbGwgc2VjdmlvIG5vdGlmaWVyIGNoYWluDQo+ID4gKyAqDQo+ID4gKyAqIEBpbmZvOiBU aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGluZm8gdG8gcGFzcyB0byBub3RpZmllZA0KPiA+ ICtmdW5jdGlvbnMNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4g PiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMNCj4gPiAraW50IGlteF9z ZWN2aW9fc2Nfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgc2VjdmlvX3NjX25vdGlmaWVyX2lu Zm8NCj4gPiArKmluZm8pIHsNCj4gPiArCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2No YWluKCZpbXhfc2VjdmlvX3NjX25vdGlmaWVyX2NoYWluLCAwLA0KPiA+ICsJCQkJCSAgICAodm9p ZCAqKWluZm8pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgY2FsbF9zZWN2aW9fY29uZmlnKHN0 cnVjdCBkZXZpY2UgKmRldiwgdTggaWQsIHU4IGFjY2VzcywgdTMyICpkYXRhMCwNCj4gPiArCQkg ICAgICAgdTMyICpkYXRhMSwgdTMyICpkYXRhMiwgdTMyICpkYXRhMywgdTMyICpkYXRhNCwgdTgg c2l6ZSkgew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwlzdHJ1Y3QgaW14X3NlY3Zpb19zY19k YXRhICpkYXRhOw0KPiA+ICsNCj4gPiArCWRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4g PiArDQo+ID4gKwlyZXQgPSBpbXhfc2Nfc2Vjb19zZWN2aW9fY29uZmlnKGRhdGEtPmlwY19oYW5k bGUsIGlkLCBhY2Nlc3MsIGRhdGEwLA0KPiA+ICsJCQkJCWRhdGExLCBkYXRhMiwgZGF0YTMsIGRh dGE0LCBzaXplKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsICVz IHNlY3ZpbyBjb25maWcgJWQiLA0KPiA+ICsJCQkoKGFjY2VzcykgPyAid3JpdGUiIDogInJlYWQi KSwgcmV0KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogaW50X2lteF9zZWN2aW9fc2NfZ2V0X3N0YXRlKCkgLSBHZXQgdGhlIHN0YXRl IG9mIHNlY3ZpbyBhbmQgdGFtcGVyDQo+ID4gKyAqDQo+ID4gKyAqIEBkZXY6IHNlY3ZpbyBkZXZp Y2UNCj4gPiArICogQGluZm86IFRoZSBzdHJ1Y3R1cmUgdG8gdXNlIHRvIHN0b3JlIHRoZSBzdGF0 dXMNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4gPiArICogPCAw IC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGludF9pbXhfc2VjdmlvX3NjX2dl dF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkgICAgICAgc3RydWN0IHNlY3Zp b19zY19ub3RpZmllcl9pbmZvICppbmZvKSB7DQo+ID4gKwlzdHJ1Y3Qgc2VjdmlvX3NjX25vdGlm aWVyX2luZm8gX2luZm8gPSB7MH07DQo+ID4gKwlzdHJ1Y3Qgc2VjdmlvX3NjX25vdGlmaWVyX2lu Zm8gKnBfaW5mbzsNCj4gPiArCWludCByZXQgPSAwLCByZXQyID0gMDsNCj4gPiArDQo+ID4gKwlw X2luZm8gPSBpbmZvID8gaW5mbyA6ICZfaW5mbzsNCj4gPiArDQo+ID4gKwkvKiBSZWFkIHNlY3Zp byBzdGF0dXMgKi8NCj4gPiArCXJldCA9IGNhbGxfc2VjdmlvX2NvbmZpZyhkZXYsIEhQU1ZTX0lE LCBTRUNWSU9fQ09ORklHX1JFQUQsDQo+ID4gKwkJCQkgJnBfaW5mby0+aHBzdnMsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIDEpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCXJldDIgPSByZXQ7 DQo+ID4gKwkJZGV2X3dhcm4oZGV2LCAiQ2Fubm90IHJlYWQgc2VjdmlvIHN0YXR1czogJWRcbiIs IHJldCk7DQo+ID4gKwl9DQo+ID4gKwlwX2luZm8tPmhwc3ZzICY9IEhQU1ZTX19BTExfU1ZfX01B U0s7DQo+ID4gKw0KPiA+ICsJLyogUmVhZCB0YW1wZXJzIHN0YXR1cyAqLw0KPiA+ICsJcmV0ID0g Y2FsbF9zZWN2aW9fY29uZmlnKGRldiwgTFBTX0lELCBTRUNWSU9fQ09ORklHX1JFQUQsDQo+ID4g KwkJCQkgJnBfaW5mby0+bHBzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAxKTsNCj4gPiArCWlm IChyZXQpIHsNCj4gPiArCQlyZXQyID0gcmV0Ow0KPiA+ICsJCWRldl93YXJuKGRldiwgIkNhbm5v dCByZWFkIHRhbXBlciAxIHN0YXR1czogJWRcbiIsIHJldCk7DQo+ID4gKwl9DQo+ID4gKwlwX2lu Zm8tPmxwcyAmPSBMUFNfX0FMTF9UUF9fTUFTSzsNCj4gPiArDQo+ID4gKwlyZXQgPSBjYWxsX3Nl Y3Zpb19jb25maWcoZGV2LCBMUFREU19JRCwgU0VDVklPX0NPTkZJR19SRUFELA0KPiA+ICsJCQkJ ICZwX2luZm8tPmxwdGRzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAxKTsNCj4gPiArCWlmIChy ZXQpIHsNCj4gPiArCQlyZXQyID0gcmV0Ow0KPiA+ICsJCWRldl93YXJuKGRldiwgIkNhbm5vdCBy ZWFkICB0YW1wZXIgMiBzdGF0dXM6ICVkXG4iLCByZXQpOw0KPiA+ICsJfQ0KPiA+ICsJcF9pbmZv LT5scHRkcyAmPSBMUFREU19fQUxMX1RQX19NQVNLOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoZGV2 LCAiU3RhdHVzOiAlLjh4LCAlLjh4LCAlLjh4XG4iLCBwX2luZm8tPmhwc3ZzLA0KPiA+ICsJCXBf aW5mby0+bHBzLCBwX2luZm8tPmxwdGRzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0MjsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2NfZ2V0X3N0YXRlKCkg LSBXcmFwcGVyIGZvcg0KPiA+ICtpbnRfaW14X3NlY3Zpb19zY19nZXRfc3RhdGUNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4gPiArICogPCAwIC0gZXJyb3IuDQo+ ID4gKyAqLw0KPiA+ICtpbmxpbmUgaW50IGlteF9zZWN2aW9fc2NfZ2V0X3N0YXRlKHN0cnVjdCBz ZWN2aW9fc2Nfbm90aWZpZXJfaW5mbw0KPiA+ICsqaW5mbykgew0KPiA+ICsJaWYgKCFnc19pbXhf c2VjdmlvX3NjX2RldikNCj4gPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIGludF9pbXhfc2VjdmlvX3NjX2dldF9zdGF0ZShnc19pbXhfc2VjdmlvX3NjX2Rldiwg aW5mbyk7IH0NCj4gPiArRVhQT1JUX1NZTUJPTChpbXhfc2VjdmlvX3NjX2dldF9zdGF0ZSk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogaW50X2lteF9zZWN2aW9fc2NfY2hlY2tfc3RhdGUoKSAt IEdldCB0aGUgc3RhdGUgYW5kIGNhbGwgY2hhaW4gb2YNCj4gPiArbm90aWZpZXINCj4gPiArICog aWYgdGhlcmUgaXMgYSBzdGF0dXMNCj4gPiArICoNCj4gPiArICogQGRldjogc2VjdmlvIGRldmlj ZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46DQo+ID4gKyAqIDAgLSBPSw0KPiA+ICsgKiA8IDAg LSBlcnJvci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgaW50X2lteF9zZWN2aW9fc2NfY2hl Y2tfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2KSB7DQo+ID4gKwlzdHJ1Y3Qgc2VjdmlvX3NjX25v dGlmaWVyX2luZm8gaW5mbyA9IHswfTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiAr CXJldCA9IGludF9pbXhfc2VjdmlvX3NjX2dldF9zdGF0ZShkZXYsICZpbmZvKTsNCj4gPiArCWlm IChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgc2VjdmlvIHN0YXRl XG4iKTsNCj4gPiArCQlnb3RvIGV4aXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogQ2FsbCBj aGFpbiBvZiBDQiByZWdpc3RlcmVkIHRvIHRoaXMgbW9kdWxlIGlmIHN0YXR1cyBkZXRlY3RlZCAq Lw0KPiA+ICsJaWYgKGluZm8uaHBzdnMgfHwgaW5mby5scHMgfHwgaW5mby5scHRkcykNCj4gPiAr CQlpZiAoaW14X3NlY3Zpb19zY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmZvKSkNCj4gPiArCQkJ ZGV2X3dhcm4oZGV2LA0KPiA+ICsJCQkJICJJc3N1ZXMgd2hlbiBjYWxsaW5nIHRoZSBub3RpZmll ciBjaGFpblxuIik7DQo+ID4gKw0KPiA+ICtleGl0Og0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2NfY2hlY2tfc3RhdGUoKSAt IFdyYXBwZXIgZm9yDQo+ID4gK2ludF9pbXhfc2VjdmlvX3NjX2NoZWNrX3N0YXRlDQo+ID4gKyAq DQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogMCAtIE9LDQo+ID4gKyAqIDwgMCAtIGVycm9yLg0K PiA+ICsgKi8NCj4gPiAraW5saW5lIGludCBpbXhfc2VjdmlvX3NjX2NoZWNrX3N0YXRlKHZvaWQp IHsNCj4gPiArCWlmICghZ3NfaW14X3NlY3Zpb19zY19kZXYpDQo+ID4gKwkJcmV0dXJuIC1FT1BO T1RTVVBQOw0KPiA+ICsNCj4gPiArCXJldHVybiBpbnRfaW14X3NlY3Zpb19zY19jaGVja19zdGF0 ZShnc19pbXhfc2VjdmlvX3NjX2Rldik7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTChpbXhf c2VjdmlvX3NjX2NoZWNrX3N0YXRlKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpbXhfc2Vj dmlvX3NjX25vdGlmeSgpIC0gUHJvY2VzcyBldmVudCBmcm9tIFNDVQ0KPiA+ICsgKg0KPiA+ICsg KiBJZiB0aGUgZXZlbnQgaXMgc2VjdmlvIHdlIGNoZWNrIHRoZSBzdGF0ZSwgdGhlbg0KPiA+ICsg KiByZS1lbmFibGUgdGhlIElSUSB3aGljaCBoYXMgYmVlbiBkaXNhYmxlZCBieSBTQ1UNCj4gPiAr ICoNCj4gPiArICogQG5iOiBzZWN2aW8gZGV2aWNlDQo+ID4gKyAqIEBldmVudDogVGhlIGlkIG9m IHRoZSBJUlEgcmVjZWl2ZWQgaW4gYSBncm91cA0KPiA+ICsgKiBAZ3JvdXA6IFRoZSBncm91cCBv ZiB0aGUgSVJRDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogMCAtIE9LDQo+ID4g KyAqIDwgMCAtIGVycm9yLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBpbXhfc2VjdmlvX3Nj X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLA0KPiA+ICsJCQkJdW5zaWduZWQgbG9u ZyBldmVudCwgdm9pZCAqZ3JvdXApIHsNCj4gPiArCXN0cnVjdCBpbXhfc2VjdmlvX3NjX2RhdGEg KmRhdGEgPQ0KPiA+ICsJCQkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgaW14X3NlY3Zpb19zY19k YXRhLA0KPiA+ICsJCQkJCSAgICAgaXJxX25iKTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGRhdGEtPmRldjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCS8qIEZpbHRlciBl dmVudCBmb3IgdXMgKi8NCj4gPiArCWlmICghKChldmVudCAmIElNWF9TQ19JUlFfU0VDVklPKSAm Jg0KPiA+ICsJICAgICAgKCoodTggKilncm91cCA9PSBJTVhfU0NfSVJRX0dST1VQX1dBS0UpKSkN Cj4gPiArCQlnb3RvIGV4aXQ7DQo+ID4gKw0KPiA+ICsJZGV2X3dhcm4oZGV2LCAic2VjdmlvIHNl Y3VyaXR5IHZpb2xhdGlvbiBkZXRlY3RlZFxuIik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaW50X2lt eF9zZWN2aW9fc2NfY2hlY2tfc3RhdGUoZGV2KTsNCj4gPiArDQo+ID4gKwkvKiBSZS1lbmFibGUg aW50ZXJydXB0ICovDQo+ID4gKwlyZXQgPSBpbnRfaW14X3NlY3Zpb19zY19lbmFibGVfaXJxKGRl dik7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJs ZSBJUlFcbiIpOw0KPiA+ICsNCj4gPiArZXhpdDoNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpbnRfaW14X3NlY3Zpb19zY19jbGVhcl9zdGF0ZSgp IC0gQ2xlYXIgc2VjdmlvIGFuZCB0YW1wZXIgc3RhdGUNCj4gPiArICoNCj4gPiArICogQGRldjog c2VjdmlvIGRldmljZQ0KPiA+ICsgKiBAaHBzdnM6IGhpZ2ggcG93ZXIgc2VjdXJpdHkgdmlvbGF0 aW9uIHN0YXR1cyB0byBjbGVhcg0KPiA+ICsgKiBAbHBzOiBsb3cgcG93ZXIgc3RhdHVzIHRvIGNs ZWFyDQo+ID4gKyAqIEBscHRkczogbG93IHBvd2VyIHRhbXBlciBkZXRlY3RvciBzdGF0dXMgdG8g Y2xlYXINCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4gPiArICog PCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGludF9pbXhfc2VjdmlvX3Nj X2NsZWFyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGhwc3ZzLCB1MzINCj4gbHBzLA0K PiA+ICsJCQkJCSB1MzIgbHB0ZHMpDQo+ID4gK3sNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsN Cj4gPiArCXJldCA9IGNhbGxfc2VjdmlvX2NvbmZpZyhkZXYsIEhQU1ZTX0lELCBTRUNWSU9fQ09O RklHX1dSSVRFLCAmaHBzdnMsDQo+ID4gKwkJCQkgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMSk7 DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJDYW5ub3QgY2xlYXIgc2Vj dmlvIHN0YXR1czogJWRcbiIsIHJldCk7DQo+ID4gKwkJZ290byBleGl0Ow0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJldCA9IGNhbGxfc2VjdmlvX2NvbmZpZyhkZXYsIExQU19JRCwgU0VDVklPX0NP TkZJR19XUklURSwgJmxwcywgTlVMTCwNCj4gPiArCQkJCSBOVUxMLCBOVUxMLCBOVUxMLCAxKTsN Cj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBjbGVhciB0YW1w ZXIgMSBzdGF0dXM6ICVkXG4iLCByZXQpOw0KPiA+ICsJCWdvdG8gZXhpdDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXQgPSBjYWxsX3NlY3Zpb19jb25maWcoZGV2LCBMUFREU19JRCwgU0VDVklP X0NPTkZJR19XUklURSwgJmxwdGRzLA0KPiA+ICsJCQkJIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IDEpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGNsZWFy IHRhbXBlciAyIHN0YXR1czogJWRcbiIsIHJldCk7DQo+ID4gKwkJZ290byBleGl0Ow0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArZXhpdDoNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBpbXhfc2VjdmlvX3NjX2NsZWFyX3N0YXRlKCkgLSBXcmFwcGVyIGZv cg0KPiA+ICtpbXhfc2VjdmlvX3NjX2NsZWFyX3N0YXRlDQo+ID4gKyAqDQo+ID4gKyAqIEBocHN2 czogaGlnaCBwb3dlciBzZWN1cml0eSB2aW9sYXRpb24gc3RhdHVzIHRvIGNsZWFyDQo+ID4gKyAq IEBscHM6IGxvdyBwb3dlciBzdGF0dXMgdG8gY2xlYXINCj4gPiArICogQGxwdGRzOiBsb3cgcG93 ZXIgdGFtcGVyIGRldGVjdG9yIHN0YXR1cyB0byBjbGVhcg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1 cm46DQo+ID4gKyAqIDAgLSBPSw0KPiA+ICsgKiA8IDAgLSBlcnJvci4NCj4gPiArICovDQo+ID4g K2lubGluZSBpbnQgaW14X3NlY3Zpb19zY19jbGVhcl9zdGF0ZSh1MzIgaHBzdnMsIHUzMiBscHMs IHUzMiBscHRkcykgew0KPiA+ICsJaWYgKCFnc19pbXhfc2VjdmlvX3NjX2RldikNCj4gPiArCQly ZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGludF9pbXhfc2VjdmlvX3Nj X2NsZWFyX3N0YXRlKGdzX2lteF9zZWN2aW9fc2NfZGV2LCBocHN2cywgbHBzLA0KPiA+ICsJCQkJ CSAgICAgbHB0ZHMpOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0woaW14X3NlY3Zpb19zY19j bGVhcl9zdGF0ZSk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcmVwb3J0X3RvX3VzZXJfbm90 aWZ5KCkgLSBQcmludCB0byBjb25zb2xlIHRoZSBzdGF0dXMNCj4gPiArICoNCj4gPiArICogQG5i OiBub3RpZmllciBibG9jaw0KPiA+ICsgKiBAc3RhdHVzOiBlcnJvciBjb2RlDQo+ID4gKyAqIEBu b3RpZl9pbmZvOiBQb2ludGVyIG9uIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBzdGF0dXMgb2Yg dGhlDQo+ID4gK3NlY3ZpbyBhbmQNCj4gPiArICogdGFtcGVycw0KPiA+ICsgKg0KPiA+ICsgKiBS ZXR1cm46DQo+ID4gKyAqIDAgLSBPSw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCByZXBvcnRf dG9fdXNlcl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwNCj4gPiArCQkJCSB1bnNp Z25lZCBsb25nIHN0YXR1cywgdm9pZCAqbm90aWZfaW5mbykgew0KPiA+ICsJc3RydWN0IHNlY3Zp b19zY19ub3RpZmllcl9pbmZvICppbmZvID0gbm90aWZfaW5mbzsNCj4gPiArCXN0cnVjdCBpbXhf c2VjdmlvX3NjX2RhdGEgKmRhdGEgPQ0KPiA+ICsJCQkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3Qg aW14X3NlY3Zpb19zY19kYXRhLA0KPiA+ICsJCQkJCSAgICAgcmVwb3J0X25iKTsNCj4gPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGRhdGEtPmRldjsNCj4gPiArDQo+ID4gKwkvKiBJbmZvcm1hdGlv biBhYm91dCB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uICovDQo+ID4gKwlpZiAoaW5mby0+aHBzdnMg JiBIUFNWU19fTFBfU0VDX1ZJT19fTUFTSykNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJTTlZTIHNl Y3ZpbzogTFBTVlxuIik7DQo+ID4gKwlpZiAoaW5mby0+aHBzdnMgJiBIUFNWU19fU1dfTFBTVl9f TUFTSykNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJTTlZTIHNlY3ZpbzogU1cgTFBTVlxuIik7DQo+ ID4gKwlpZiAoaW5mby0+aHBzdnMgJiBIUFNWU19fU1dfRlNWX19NQVNLKQ0KPiA+ICsJCWRldl9p bmZvKGRldiwgIlNOVlMgc2VjdmlvOiBTVyBGU1ZcbiIpOw0KPiA+ICsJaWYgKGluZm8tPmhwc3Zz ICYgSFBTVlNfX1NXX1NWX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRldiwgIlNOVlMgc2Vjdmlv OiBTVyBTVlxuIik7DQo+ID4gKwlpZiAoaW5mby0+aHBzdnMgJiBIUFNWU19fU1Y1X19NQVNLKQ0K PiA+ICsJCWRldl9pbmZvKGRldiwgIlNOVlMgc2VjdmlvOiBTViA1XG4iKTsNCj4gPiArCWlmIChp bmZvLT5ocHN2cyAmIEhQU1ZTX19TVjRfX01BU0spDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05W UyBzZWN2aW86IFNWIDRcbiIpOw0KPiA+ICsJaWYgKGluZm8tPmhwc3ZzICYgSFBTVlNfX1NWM19f TUFTSykNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJTTlZTIHNlY3ZpbzogU1YgM1xuIik7DQo+ID4g KwlpZiAoaW5mby0+aHBzdnMgJiBIUFNWU19fU1YyX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRl diwgIlNOVlMgc2VjdmlvOiBTViAyXG4iKTsNCj4gPiArCWlmIChpbmZvLT5ocHN2cyAmIEhQU1ZT X19TVjFfX01BU0spDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05WUyBzZWN2aW86IFNWIDFcbiIp Ow0KPiA+ICsJaWYgKGluZm8tPmhwc3ZzICYgSFBTVlNfX1NWMF9fTUFTSykNCj4gPiArCQlkZXZf aW5mbyhkZXYsICJTTlZTIHNlY3ZpbzogU1YgMFxuIik7DQo+ID4gKw0KPiA+ICsJLyogSW5mb3Jt YXRpb24gYWJvdXQgdGhlIHRhbXBlcnMgKi8NCj4gPiArCWlmIChpbmZvLT5scHMgJiBMUFNfX0VT VkRfX01BU0spDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6IEV4dGVybmFsIFNW XG4iKTsNCj4gPiArCWlmIChpbmZvLT5scHMgJiBMUFNfX0VUMkRfX01BU0spDQo+ID4gKwkJZGV2 X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6IFRhbXBlciAyXG4iKTsNCj4gPiArCWlmIChpbmZvLT5s cHMgJiBMUFNfX0VUMURfX01BU0spDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6 IFRhbXBlciAxXG4iKTsNCj4gPiArCWlmIChpbmZvLT5scHMgJiBMUFNfX1dNVDJEX19NQVNLKQ0K PiA+ICsJCWRldl9pbmZvKGRldiwgIlNOVlMgdGFtcGVyOiBXaXJlIE1lc2ggMlxuIik7DQo+ID4g KwlpZiAoaW5mby0+bHBzICYgTFBTX19XTVQxRF9fTUFTSykNCj4gPiArCQlkZXZfaW5mbyhkZXYs ICJTTlZTIHRhbXBlcjogV2lyZSBNZXNoIDFcbiIpOw0KPiA+ICsJaWYgKGluZm8tPmxwcyAmIExQ U19fVlREX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRldiwgIlNOVlMgdGFtcGVyOiBWb2x0YWdl XG4iKTsNCj4gPiArCWlmIChpbmZvLT5scHMgJiBMUFNfX1RURF9fTUFTSykNCj4gPiArCQlkZXZf aW5mbyhkZXYsICJTTlZTIHRhbXBlcjogVGVtcGVyYXR1cmVcbiIpOw0KPiA+ICsJaWYgKGluZm8t PmxwcyAmIExQU19fQ1REX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRldiwgIlNOVlMgdGFtcGVy OiBDbG9ja1xuIik7DQo+ID4gKwlpZiAoaW5mby0+bHBzICYgTFBTX19QR0RfX01BU0spDQo+ID4g KwkJZGV2X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6IFBvd2VyIEdsaXRjaFxuIik7DQo+ID4gKwlp ZiAoaW5mby0+bHBzICYgTFBTX19NQ1JfX01BU0spDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05W UyB0YW1wZXI6IE1vbm90b25pYyBDb3VudGVyIHJvbGxvdmVyXG4iKTsNCj4gPiArCWlmIChpbmZv LT5scHMgJiBMUFNfX1NSVENSX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRldiwgIlNOVlMgdGFt cGVyOiBTZWN1cmUgUlRDIHJvbGxvdmVyXG4iKTsNCj4gPiArCWlmIChpbmZvLT5scHMgJiBMUFNf X0xQVEFfX01BU0spDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6IFRpbWUgYWxh cm1cbiIpOw0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5scHRkcyAmIExQVERTX19FVDEwRF9fTUFT SykNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJTTlZTIHRhbXBlcjogVGFtcGVyIDEwXG4iKTsNCj4g PiArCWlmIChpbmZvLT5scHRkcyAmIExQVERTX19FVDlEX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZv KGRldiwgIlNOVlMgdGFtcGVyOiBUYW1wZXIgOVxuIik7DQo+ID4gKwlpZiAoaW5mby0+bHB0ZHMg JiBMUFREU19fRVQ4RF9fTUFTSykNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJTTlZTIHRhbXBlcjog VGFtcGVyIDhcbiIpOw0KPiA+ICsJaWYgKGluZm8tPmxwdGRzICYgTFBURFNfX0VUN0RfX01BU0sp DQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6IFRhbXBlciA3XG4iKTsNCj4gPiAr CWlmIChpbmZvLT5scHRkcyAmIExQVERTX19FVDZEX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRl diwgIlNOVlMgdGFtcGVyOiBUYW1wZXIgNlxuIik7DQo+ID4gKwlpZiAoaW5mby0+bHB0ZHMgJiBM UFREU19fRVQ1RF9fTUFTSykNCj4gPiArCQlkZXZfaW5mbyhkZXYsICJTTlZTIHRhbXBlcjogVGFt cGVyIDVcbiIpOw0KPiA+ICsJaWYgKGluZm8tPmxwdGRzICYgTFBURFNfX0VUNERfX01BU0spDQo+ ID4gKwkJZGV2X2luZm8oZGV2LCAiU05WUyB0YW1wZXI6IFRhbXBlciA0XG4iKTsNCj4gPiArCWlm IChpbmZvLT5scHRkcyAmIExQVERTX19FVDNEX19NQVNLKQ0KPiA+ICsJCWRldl9pbmZvKGRldiwg IlNOVlMgdGFtcGVyOiBUYW1wZXIgM1xuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpbnRfaW14X3NlY3Zpb19zY19lbmFibGVfaXJx KCkgLSBFbmFibGUgdGhlIHNlY3ZpbyBJUlEgaW4gU0NVDQo+ID4gKyAqDQo+ID4gKyAqIEBkZXY6 IHNlY3ZpbyBkZXZpY2UNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sN Cj4gPiArICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGludF9pbXhf c2VjdmlvX3NjX2VuYWJsZV9pcnEoc3RydWN0IGRldmljZSAqZGV2KSB7DQo+ID4gKwlpbnQgcmV0 ID0gMCwgcmV0MjsNCj4gPiArCXUzMiBpcnFfc3RhdHVzOw0KPiA+ICsJc3RydWN0IGlteF9zZWN2 aW9fc2NfZGF0YSAqZGF0YTsNCj4gPiArDQo+ID4gKwlkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRl dik7DQo+ID4gKw0KPiA+ICsJLyogRW5hYmxlIHRoZSBJUlEgKi8NCj4gPiArCXJldCA9IGlteF9z Y3VfaXJxX2dyb3VwX2VuYWJsZShJTVhfU0NfSVJRX0dST1VQX1dBS0UsDQo+IElNWF9TQ19JUlFf U0VDVklPLA0KPiA+ICsJCQkJICAgICAgIHRydWUpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJ CWRldl9lcnIoZGV2LCAiQ2Fubm90IGVuYWJsZSBTQ1UgSVJROiAlZFxuIiwgcmV0KTsNCj4gPiAr CQlnb3RvIGV4aXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRW5hYmxlIGludGVycnVwdCAq Lw0KPiA+ICsJcmV0ID0gaW14X3NjX3NlY29fc2VjdmlvX2VuYWJsZShkYXRhLT5pcGNfaGFuZGxl KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBlbmFibGUg U05WUyBpcnE6ICVkXG4iLCByZXQpOw0KPiA+ICsJCWdvdG8gZXhpdDsNCj4gPiArCX07DQo+ID4g Kw0KPiA+ICsJLyogVW5tYXNrIGludGVycnVwdCAqLw0KPiA+ICsJcmV0ID0gaW14X3NjdV9pcnFf Z2V0X3N0YXR1cyhJTVhfU0NfSVJRX0dST1VQX1dBS0UsICZpcnFfc3RhdHVzKTsNCj4gPiArCWlm IChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkNhbm5vdCB1bm1hc2sgaXJxOiAlZFxuIiwg cmV0KTsNCj4gPiArCQlnb3RvIGV4aXQ7DQo+ID4gKwl9Ow0KPiA+ICsNCj4gPiArZXhpdDoNCj4g PiArCWlmIChyZXQpIHsNCj4gPiArCQlyZXQyID0gaW50X2lteF9zZWN2aW9fc2NfZGlzYWJsZV9p cnEoZGV2KTsNCj4gPiArCQlpZiAocmV0MikNCj4gPiArCQkJZGV2X3dhcm4oZGV2LCAiRmFpbGVk IHRvIGRpc2FibGUgdGhlIElSUVxuIik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGludF9pbXhfc2VjdmlvX3NjX2Rp c2FibGVfaXJxKCkgLSBEaXNhYmxlIHNlY3ZpbyBJUlENCj4gPiArICoNCj4gPiArICogQGRldjog c2VjdmlvIGRldmljZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46DQo+ID4gKyAqIDAgLSBPSw0K PiA+ICsgKiA8IDAgLSBlcnJvci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgaW50X2lteF9z ZWN2aW9fc2NfZGlzYWJsZV9pcnEoc3RydWN0IGRldmljZSAqZGV2KSB7DQo+ID4gKwlpbnQgcmV0 ID0gMDsNCj4gPiArCXN0cnVjdCBpbXhfc2VjdmlvX3NjX2RhdGEgKmRhdGE7DQo+ID4gKw0KPiA+ ICsJZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArCS8qIERpc2FibGUg dGhlIElSUSAqLw0KPiA+ICsJcmV0ID0gaW14X3NjdV9pcnFfZ3JvdXBfZW5hYmxlKElNWF9TQ19J UlFfR1JPVVBfV0FLRSwNCj4gSU1YX1NDX0lSUV9TRUNWSU8sDQo+ID4gKwkJCQkgICAgICAgZmFs c2UpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGRpc2Fi bGUgU0NVIElSUTogJWRcbiIsIHJldCk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlm X2lteF9zZWN2aW9fc2NfZGlzYWJsZV9pcnEoKSAtIFdyYXBwZXIgZm9yDQo+ID4gK2ludF9pbXhf c2VjdmlvX3NjX2Rpc2FibGVfaXJxDQo+ID4gKyAqDQo+ID4gKyAqIENhbiBiZSB1c2VkIHdpdGgg ZGV2bQ0KPiA+ICsgKg0KPiA+ICsgKiBAZGV2OiBzZWN2aW8gZGV2aWNlDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCBpZl9pbXhfc2VjdmlvX3NjX2Rpc2FibGVfaXJxKHZvaWQgKmRldikgew0K PiA+ICsJaW50X2lteF9zZWN2aW9fc2NfZGlzYWJsZV9pcnEoZGV2KTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2Nfb3BlbigpIC0gU3RvcmUgbm9kZSBpbmZv IGZvciBpb2N0bA0KPiA+ICsgKg0KPiA+ICsgKiBAbm9kZTogaW5vZGUNCj4gPiArICogQGZpbGU6 IGZpbGUgdXNlZCB0byBwZXJmb3JtIHRoZSBpb2N0bA0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46 DQo+ID4gKyAqIDAgLSBPSw0KPiA+ICsgKiA8IDAgLSBlcnJvci4NCj4gPiArICovDQo+ID4gK3N0 YXRpYyBpbnQgaW14X3NlY3Zpb19zY19vcGVuKHN0cnVjdCBpbm9kZSAqbm9kZSwgc3RydWN0IGZp bGUgKmZpbHApDQo+ID4gK3sNCj4gPiArCWZpbHAtPnByaXZhdGVfZGF0YSA9IG5vZGUtPmlfcHJp dmF0ZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIGlteF9zZWN2aW9fc2NfaW9jdGwoKSAtIElPQ1RMIGhhbmRsZXIgZm9yIHRoZSBkcml2 ZXINCj4gPiArICoNCj4gPiArICogQGZpbGU6IGZpbGUgdXNlZCB0byBwZXJmb3JtIHRoZSBpb2N0 bA0KPiA+ICsgKiBAY21kOiBjb21tYW5kIHRvIHBlcmZvcm0NCj4gPiArICogQGFyZzogUG9pbnRl ciBvbiBzdHJ1Y3R1cmUgd2l0aCBpbmZvIGZvciB0aGUgY29tbWFuZA0KPiA+ICsgKg0KPiA+ICsg KiBSZXR1cm46DQo+ID4gKyAqIDAgLSBPSw0KPiA+ICsgKiA8IDAgLSBlcnJvci4NCj4gPiArICov DQo+ID4gK3N0YXRpYyBsb25nIGlteF9zZWN2aW9fc2NfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUs IHVuc2lnbmVkIGludCBjbWQsDQo+ID4gK3Vuc2lnbmVkIGxvbmcgYXJnKSB7DQo+ID4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ID4gKwlzdHJ1Y3Qgc2Vjdmlv X3NjX25vdGlmaWVyX2luZm8gaW5mbzsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJc3dp dGNoIChjbWQpIHsNCj4gPiArCWNhc2UgSU1YX1NFQ1ZJT19TQ19HRVRfU1RBVEU6DQo+ID4gKwkJ cmV0ID0gaW50X2lteF9zZWN2aW9fc2NfZ2V0X3N0YXRlKGRldiwgJmluZm8pOw0KPiA+ICsJCWlm IChyZXQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJGYWlsIHRvIGdldCBzdGF0ZVxuIik7DQo+ ID4gKwkJCWdvdG8gZXhpdDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXJldCA9IGNvcHlfdG9f dXNlcigodm9pZCAqKWFyZywgJmluZm8sIHNpemVvZihpbmZvKSk7DQo+ID4gKwkJaWYgKHJldCkg ew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgIkZhaWwgdG8gY29weSBpbmZvIHRvIHVzZXJcbiIpOw0K PiA+ICsJCQlyZXQgPSAtRUZBVUxUOw0KPiA+ICsJCQlnb3RvIGV4aXQ7DQo+ID4gKwkJfQ0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBJTVhfU0VDVklPX1NDX0NIRUNLX1NUQVRFOg0KPiA+ICsJ CXJldCA9IGludF9pbXhfc2VjdmlvX3NjX2NoZWNrX3N0YXRlKGRldik7DQo+ID4gKwkJaWYgKHJl dCkgew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgIkZhaWwgdG8gY2hlY2sgc3RhdGVcbiIpOw0KPiA+ ICsJCQlnb3RvIGV4aXQ7DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBJTVhf U0VDVklPX1NDX0NMRUFSX1NUQVRFOg0KPiA+ICsJCXJldCA9IGNvcHlfZnJvbV91c2VyKCZpbmZv LCAodm9pZCAqKWFyZywgc2l6ZW9mKGluZm8pKTsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJ CWRldl9lcnIoZGV2LCAiRmFpbCB0byBjb3B5IGluZm8gZnJvbSB1c2VyXG4iKTsNCj4gPiArCQkJ cmV0ID0gLUVGQVVMVDsNCj4gPiArCQkJZ290byBleGl0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4g KwkJcmV0ID0gaW50X2lteF9zZWN2aW9fc2NfY2xlYXJfc3RhdGUoZGV2LCBpbmZvLmhwc3ZzLCBp bmZvLmxwcywNCj4gPiArCQkJCQkJICAgIGluZm8ubHB0ZHMpOw0KPiA+ICsJCWlmIChyZXQpIHsN Cj4gPiArCQkJZGV2X2VycihkZXYsICJGYWlsIHRvIGNsZWFyIHN0YXRlXG4iKTsNCj4gPiArCQkJ Z290byBleGl0Ow0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4g KwkJcmV0ID0gLUVOT0lPQ1RMQ01EOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArZXhpdDoNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGlteF9zZWN2aW9fc2NfZm9wcyA9IHsNCj4gPiArCS5vd25lciA9IFRISVNf TU9EVUxFLA0KPiA+ICsJLm9wZW4gPSBpbXhfc2VjdmlvX3NjX29wZW4sDQo+ID4gKwkudW5sb2Nr ZWRfaW9jdGwgPSBpbXhfc2VjdmlvX3NjX2lvY3RsLCB9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgaWZfbWlzY19kZXJlZ2lzdGVyKHZvaWQgKm1pc2NkZXZpY2UpIHsNCj4gPiArCW1pc2NfZGVy ZWdpc3RlcihtaXNjZGV2aWNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcmVz ZXRfZ2xvYmFsX2Rldih2b2lkICpkZXYpIHsNCj4gPiArCWdzX2lteF9zZWN2aW9fc2NfZGV2ID0g TlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2Nfc2V0 dXAoKSAtIENvbmZpZ3VyZSB0aGUgZHJpdmVyDQo+ID4gKyAqDQo+ID4gKyAqIEBkZXY6IHNlY3Zp byBkZXZpY2UNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4gPiAr ICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGlteF9zZWN2aW9fc2Nf c2V0dXAoc3RydWN0IGRldmljZSAqZGV2KSB7DQo+ID4gKwlzdHJ1Y3QgaW14X3NlY3Zpb19zY19k YXRhICpkYXRhOw0KPiA+ICsJdTMyIHNlY29fdmVyc2lvbiA9IDA7DQo+ID4gKwlib29sIG93bl9z ZWN2aW87DQo+ID4gKwl1MzIgaXJxX3N0YXR1czsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsN Cj4gPiArCWlmICghZGV2cmVzX29wZW5fZ3JvdXAoZGV2LCBOVUxMLCBHRlBfS0VSTkVMKSkgew0K PiA+ICsJCXJldCA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBleGl0Ow0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCS8qIEFsbG9jYXRlIHByaXZhdGUgZGF0YSAqLw0KPiA+ICsJZGF0YSA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFkYXRhKSB7 DQo+ID4gKwkJcmV0ID0gLUVOT01FTTsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBh bGxvY2F0ZSBtZW0gZm9yIGRhdGFcbiIpOw0KPiA+ICsJCWdvdG8gY2xlYW47DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJZGF0YS0+ZGV2ID0gZGV2Ow0KPiA+ICsNCj4gPiArCWRldl9zZXRfZHJ2ZGF0 YShkZXYsIGRhdGEpOw0KPiA+ICsNCj4gPiArCWRhdGEtPm52bWVtID0gZGV2bV9udm1lbV9kZXZp Y2VfZ2V0KGRldiwgTlVMTCk7DQo+ID4gKwlpZiAoSVNfRVJSKGRhdGEtPm52bWVtKSkgew0KPiA+ ICsJCXJldCA9IFBUUl9FUlIoZGF0YS0+bnZtZW0pOw0KPiA+ICsJCWlmIChyZXQgIT0gLUVQUk9C RV9ERUZFUikNCj4gPiArCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmV0cmlldmUgbnZtZW1c biIpOw0KPiA+ICsNCj4gPiArCQlnb3RvIGNsZWFuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IEdldCBhIGhhbmRsZSAqLw0KPiA+ICsJcmV0ID0gaW14X3NjdV9nZXRfaGFuZGxlKCZkYXRhLT5p cGNfaGFuZGxlKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImNhbm5v dCBnZXQgaGFuZGxlIHRvIHNjdTogJWRcbiIsIHJldCk7DQo+ID4gKwkJZ290byBjbGVhbjsNCj4g PiArCX07DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIFNFQ08gKi8N Cj4gPiArCXJldCA9IGlteF9zY19zZWNvX2J1aWxkX2luZm8oZGF0YS0+aXBjX2hhbmRsZSwgJnNl Y29fdmVyc2lvbiwgTlVMTCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZ2V0IHNlY28gdmVyc2lvblxuIik7DQo+ID4gKwkJZ290byBjbGVhbjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlpZiAoKHNlY29fdmVyc2lvbiAmIFNFQ09fVkVSU0lPTl9NSU5P Ul9NQVNLKSA8DQo+ID4gKwkgICAgIFNFQ09fTUlOT1JfVkVSU0lPTl9TVVBQT1JUX1NFQ1ZJT19U QU1QRVIpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIlNFQ08gdmVyc2lvbiAlLjh4IGRvZXNuJ3Qg c3VwcG9ydCBhbGwgc2VjdmlvXG4iLA0KPiA+ICsJCQlzZWNvX3ZlcnNpb24pOw0KPiA+ICsJCXJl dCA9IC1FT1BOT1RTVVBQOw0KPiA+ICsJCWdvdG8gY2xlYW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogSW5pdCBkZWJ1ZyBGUyAqLw0KPiA+ICsJcmV0ID0gaW14X3NlY3Zpb19zY19kZWJ1Z2Zz KGRldik7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g c2V0IGRlYnVnZnNcbiIpOw0KPiA+ICsJCWdvdG8gY2xlYW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogQ2hlY2sgd2Ugb3duIHRoZSBTRUNWSU8gKi8NCj4gPiArCXJldCA9IGlteF9zY19ybV9p c19yZXNvdXJjZV9vd25lZChkYXRhLT5pcGNfaGFuZGxlLA0KPiBJTVhfU0NfUl9TRUNWSU8pOw0K PiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXRy aWV2ZSBzZWN2aW8gb3duZXJzaGlwXG4iKTsNCj4gPiArCQlnb3RvIGNsZWFuOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCW93bl9zZWN2aW8gPSByZXQgPiAwOw0KPiA+ICsJaWYgKCFvd25fc2Vjdmlv KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJTZWN2aW8gcmVzb3VyY2UgaXMgbm90IG93bmVkXG4i KTsNCj4gPiArCQlyZXQgPSAtRVBFUk07DQo+ID4gKwkJZ290byBjbGVhbjsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwkvKiBDaGVjayBJUlEgZXhpc3RzIGFuZCBlbmFibGUgaXQgKi8NCj4gPiArCXJl dCA9IGlteF9zY3VfaXJxX2dldF9zdGF0dXMoSU1YX1NDX0lSUV9HUk9VUF9XQUtFLCAmaXJxX3N0 YXR1cyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJDYW5ub3QgZ2V0 IElSUSBzdGF0ZTogJWRcbiIsIHJldCk7DQo+ID4gKwkJZ290byBjbGVhbjsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXQgPSBpbnRfaW14X3NlY3Zpb19zY19lbmFibGVfaXJxKGRldik7DQo+ID4g KwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIElSUVxu Iik7DQo+ID4gKwkJZ290byBjbGVhbjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBkZXZt X2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBpZl9pbXhfc2VjdmlvX3NjX2Rpc2FibGVfaXJxLCBk ZXYpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBtYW5hZ2VkIGFjdGlvbiB0byBkaXNhYmxlIElSUVxuIik7DQo+ID4gKwkJZ290byBjbGVhbjsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBSZWdpc3RlciB0aGUgbm90aWZpZXIgZm9yIElSUSBm cm9tIFNOVlMgKi8NCj4gPiArCWRhdGEtPmlycV9uYi5ub3RpZmllcl9jYWxsID0gaW14X3NlY3Zp b19zY19ub3RpZnk7DQo+ID4gKwlyZXQgPSBpbXhfc2N1X2lycV9yZWdpc3Rlcl9ub3RpZmllcigm ZGF0YS0+aXJxX25iKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byByZWdpc3RlciBJUlEgbm90aWZpY2F0aW9uIGhhbmRsZXJcbiIpOw0KPiA+ICsJCWdv dG8gY2xlYW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29y X3Jlc2V0KGRldiwgaWZfdW5yZWdpc3Rlcl9pbXhfc2VjdmlvX3NjX25vdGlmaWVyLA0KPiA+ICsJ CQkJICAgICAgICZkYXRhLT5pcnFfbmIpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBhY3Rpb24gdG8gcmVtb3ZlIGlycSBub3RpZnlcbiIpOw0K PiA+ICsJCWdvdG8gY2xlYW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogUmVnaXN0ZXIgdGhl IG5vdGlmaWNhdGlvbiBmb3IgcmVwb3J0aW5nIHRvIHVzZXIgKi8NCj4gPiArCWRhdGEtPnJlcG9y dF9uYi5ub3RpZmllcl9jYWxsID0gcmVwb3J0X3RvX3VzZXJfbm90aWZ5Ow0KPiA+ICsJcmV0ID0g cmVnaXN0ZXJfaW14X3NlY3Zpb19zY19ub3RpZmllcigmZGF0YS0+cmVwb3J0X25iKTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZXBv cnQgbm90aWZ5IGhhbmRsZXJcbiIpOw0KPiA+ICsJCWdvdG8gY2xlYW47DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgaWZfdW5yZWdpc3Rl cl9pbXhfc2VjdmlvX3NjX25vdGlmaWVyLA0KPiA+ICsJCQkJICAgICAgICZkYXRhLT5yZXBvcnRf bmIpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBhY3Rpb24gdG8gcmVtb3ZlIHJlcG9ydCBub3RpZnlcbiIpOw0KPiA+ICsJCWdvdG8gY2xlYW47 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogUmVnaXN0ZXIgdGhlIG5vdGlmaWNhdGlvbiB0byBy ZXBvcnQgdG8gYXVkaXQgRlcgKi8NCj4gPiArCWRhdGEtPmF1ZGl0X25iLm5vdGlmaWVyX2NhbGwg PSByZXBvcnRfdG9fYXVkaXRfbm90aWZ5Ow0KPiA+ICsJcmV0ID0gcmVnaXN0ZXJfaW14X3NlY3Zp b19zY19ub3RpZmllcigmZGF0YS0+YXVkaXRfbmIpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlcG9ydCBhdWRpdCBoYW5kbGVyXG4i KTsNCj4gPiArCQlnb3RvIGNsZWFuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGRldm1f YWRkX2FjdGlvbihkZXYsIGlmX3VucmVnaXN0ZXJfaW14X3NlY3Zpb19zY19ub3RpZmllciwNCj4g PiArCQkJICAgICAgJmRhdGEtPmF1ZGl0X25iKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgYWN0aW9uIHRvIHJlbW92ZSBhdWRpdCBub3RpZlxu Iik7DQo+ID4gKwkJZ290byBjbGVhbjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBSZWdpc3Rl ciBtaXNjIGRldmljZSBmb3IgSU9DVEwgKi8NCj4gPiArCWRhdGEtPm1pc2NkZXYubmFtZSA9IGRl dm1fa3N0cmR1cChkZXYsICJzZWN2aW8tc2MiLCBHRlBfS0VSTkVMKTsNCj4gPiArCWRhdGEtPm1p c2NkZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7DQo+ID4gKwlkYXRhLT5taXNjZGV2LmZv cHMgPSAmaW14X3NlY3Zpb19zY19mb3BzOw0KPiA+ICsJZGF0YS0+bWlzY2Rldi5wYXJlbnQgPSBk ZXY7DQo+ID4gKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZkYXRhLT5taXNjZGV2KTsNCj4gPiArCWlm IChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBtaXNjIGRl dmljZVxuIik7DQo+ID4gKwkJZ290byBleGl0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9 IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGlmX21pc2NfZGVyZWdpc3RlciwgJmRhdGEt Pm1pc2NkZXYpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGFkZCBhY3Rpb24gdG8gdW5yZWdpc3RlciBtaXNjZGV2XG4iKTsNCj4gPiArCQlnb3RvIGNs ZWFuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWdzX2lteF9zZWN2aW9fc2NfZGV2ID0gZGV2Ow0K PiA+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgcmVzZXRfZ2xvYmFsX2Rl diwgZGV2KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBhZGQgYWN0aW9uIHRvIGRpc2FibGUgZ2xvYmFsIGRldlxuIik7DQo+ID4gKwkJZ290byBjbGVh bjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBQcm9jZXNzIGN1cnJlbnQgc3RhdGUgb2YgdGhl IHNlY3ZpbyBhbmQgdGFtcGVycyAqLw0KPiA+ICsJaW50X2lteF9zZWN2aW9fc2NfY2hlY2tfc3Rh dGUoZGV2KTsNCj4gPiArDQo+ID4gKwlkZXZyZXNfcmVtb3ZlX2dyb3VwKGRldiwgTlVMTCk7DQo+ ID4gKw0KPiA+ICsJZ290byBleGl0Ow0KPiA+ICsNCj4gPiArY2xlYW46DQo+ID4gKwlkZXZyZXNf cmVsZWFzZV9ncm91cChkZXYsIE5VTEwpOw0KPiA+ICsNCj4gPiArZXhpdDoNCj4gPiArCXJldHVy biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBpbXhfc2VjdmlvX3NjX3By b2JlKCkgLSBQcm9iZSB0aGUgZHJpdmVyDQo+ID4gKyAqDQo+ID4gKyAqIEBwZGV2OiBwbGF0Zm9y bSBkZXZpY2UNCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAwIC0gT0sNCj4gPiAr ICogPCAwIC0gZXJyb3IuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IGlteF9zZWN2aW9fc2Nf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJaW50IHJldDsNCj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKw0KPiA+ICsJcmV0ID0g aW14X3NlY3Zpb19zY19zZXR1cChkZXYpOw0KPiA+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVQUk9C RV9ERUZFUikNCj4gPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXR1cFxuIik7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgaW14X3NlY3Zpb19zY19kdF9pZHNbXSA9IHsNCj4gPiArCXsgLmNv bXBhdGlibGUgPSAiZnNsLGlteC1zYy1zZWN2aW8iLCB9LA0KPiA+ICsJeyAvKiBzZW50aW5lbCAq LyB9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteF9zZWN2aW9fc2Nf ZHRfaWRzKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9z ZWN2aW9fc2NfZHJpdmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkub3duZXIgPSBU SElTX01PRFVMRSwNCj4gPiArCQkubmFtZQk9ICJpbXgtc2VjdmlvLXNjIiwNCj4gPiArCQkub2Zf bWF0Y2hfdGFibGUgPSBpbXhfc2VjdmlvX3NjX2R0X2lkcywNCj4gPiArCX0sDQo+ID4gKwkucHJv YmUJCT0gaW14X3NlY3Zpb19zY19wcm9iZSwNCj4gPiArfTsNCj4gPiArbW9kdWxlX3BsYXRmb3Jt X2RyaXZlcihpbXhfc2VjdmlvX3NjX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9S KCJGcmFuY2sgTEVOT1JNQU5EIDxmcmFuY2subGVub3JtYW5kQG54cC5jb20+Iik7DQo+ID4gK01P RFVMRV9ERVNDUklQVElPTigiTlhQIGkuTVggZHJpdmVyIHRvIGhhbmRsZSBTTlZTIHNlY3ZpbyBp cnEgc2VudCBieQ0KPiA+ICtTQ0ZXIik7IE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9zb2MvaW14L2lteC1zZWN2aW8tc2MuaA0KPiA+IGIvaW5jbHVkZS9z b2MvaW14L2lteC1zZWN2aW8tc2MuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+IDAw MDAwMDAuLmEyNmUyZmYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvaW5jbHVkZS9zb2Mv aW14L2lteC1zZWN2aW8tc2MuaA0KPiA+IEBAIC0wLDAgKzEsMTc3IEBADQo+ID4gKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmln aHQgMjAxOS0yMDIwIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX01JU0NfSU1Y X1NFQ1ZJT19TQ19IXw0KPiA+ICsjZGVmaW5lIF9NSVNDX0lNWF9TRUNWSU9fU0NfSF8NCj4gPiAr DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L25v dGlmaWVyLmg+DQo+ID4gKw0KPiA+ICsvKiBCaXRtYXNrIG9mIHRoZSBzZWN1cml0eSB2aW9sYXRp b24gc3RhdHVzIGJpdCBpbiB0aGUgSFBTVlMgcmVnaXN0ZXINCj4gPiArKi8gI2RlZmluZSBIUFNW U19fTFBfU0VDX1ZJT19fTUFTSyBCSVQoMzEpDQo+ID4gKyNkZWZpbmUgSFBTVlNfX1NXX0xQU1Zf X01BU0sgICAgQklUKDE1KQ0KPiA+ICsjZGVmaW5lIEhQU1ZTX19TV19GU1ZfX01BU0sgICAgIEJJ VCgxNCkNCj4gPiArI2RlZmluZSBIUFNWU19fU1dfU1ZfX01BU0sgICAgICBCSVQoMTMpDQo+ID4g KyNkZWZpbmUgSFBTVlNfX1NWNV9fTUFTSyAgICAgICAgQklUKDUpDQo+ID4gKyNkZWZpbmUgSFBT VlNfX1NWNF9fTUFTSyAgICAgICAgQklUKDQpDQo+ID4gKyNkZWZpbmUgSFBTVlNfX1NWM19fTUFT SyAgICAgICAgQklUKDMpDQo+ID4gKyNkZWZpbmUgSFBTVlNfX1NWMl9fTUFTSyAgICAgICAgQklU KDIpDQo+ID4gKyNkZWZpbmUgSFBTVlNfX1NWMV9fTUFTSyAgICAgICAgQklUKDEpDQo+ID4gKyNk ZWZpbmUgSFBTVlNfX1NWMF9fTUFTSyAgICAgICAgQklUKDApDQo+ID4gKw0KPiA+ICsvKiBCaXRt YXNrIG9mIGFsbCBzZWN1cml0eSB2aW9sYXRpb24gc3RhdHVzIGJpdCBpbiB0aGUgSFBTVlMgcmVn aXN0ZXINCj4gPiArKi8gI2RlZmluZSBIUFNWU19fQUxMX1NWX19NQVNLIChIUFNWU19fTFBfU0VD X1ZJT19fTUFTSyB8IFwNCj4gPiArCQkJICAgICBIUFNWU19fU1dfTFBTVl9fTUFTSyB8IFwNCj4g PiArCQkJICAgICBIUFNWU19fU1dfRlNWX19NQVNLIHwgXA0KPiA+ICsJCQkgICAgIEhQU1ZTX19T V19TVl9fTUFTSyB8IFwNCj4gPiArCQkJICAgICBIUFNWU19fU1Y1X19NQVNLIHwgXA0KPiA+ICsJ CQkgICAgIEhQU1ZTX19TVjRfX01BU0sgfCBcDQo+ID4gKwkJCSAgICAgSFBTVlNfX1NWM19fTUFT SyB8IFwNCj4gPiArCQkJICAgICBIUFNWU19fU1YyX19NQVNLIHwgXA0KPiA+ICsJCQkgICAgIEhQ U1ZTX19TVjFfX01BU0sgfCBcDQo+ID4gKwkJCSAgICAgSFBTVlNfX1NWMF9fTUFTSykNCj4gPiAr DQo+ID4gKy8qDQo+ID4gKyAqIEJpdG1hc2sgb2YgdGhlIHNlY3VyaXR5IHZpb2xhdGlvbiBhbmQg dGFtcGVycyBzdGF0dXMgYml0IGluIHRoZQ0KPiA+ICtMUFMgcmVnaXN0ZXIgICovICNkZWZpbmUg TFBTX19FU1ZEX19NQVNLICBCSVQoMTYpICNkZWZpbmUNCj4gPiArTFBTX19FVDJEX19NQVNLICBC SVQoMTApICNkZWZpbmUgTFBTX19FVDFEX19NQVNLICBCSVQoOSkgI2RlZmluZQ0KPiA+ICtMUFNf X1dNVDJEX19NQVNLIEJJVCg4KSAjZGVmaW5lIExQU19fV01UMURfX01BU0sgQklUKDcpDQo+ID4g KyNkZWZpbmUgTFBTX19WVERfX01BU0sgICBCSVQoNikNCj4gPiArI2RlZmluZSBMUFNfX1RURF9f TUFTSyAgIEJJVCg1KQ0KPiA+ICsjZGVmaW5lIExQU19fQ1REX19NQVNLICAgQklUKDQpDQo+ID4g KyNkZWZpbmUgTFBTX19QR0RfX01BU0sgICBCSVQoMykNCj4gPiArI2RlZmluZSBMUFNfX01DUl9f TUFTSyAgIEJJVCgyKQ0KPiA+ICsjZGVmaW5lIExQU19fU1JUQ1JfX01BU0sgQklUKDEpDQo+ID4g KyNkZWZpbmUgTFBTX19MUFRBX19NQVNLICBCSVQoMCkNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAq IEJpdG1hc2sgb2YgYWxsIHNlY3VyaXR5IHZpb2xhdGlvbiBhbmQgdGFtcGVycyBzdGF0dXMgYml0 IGluIHRoZSBMUFMgcmVnaXN0ZXINCj4gPiArICovDQo+ID4gKyNkZWZpbmUgTFBTX19BTExfVFBf X01BU0sgKExQU19fRVNWRF9fTUFTSyB8IFwNCj4gPiArCQkJICAgTFBTX19FVDJEX19NQVNLIHwg XA0KPiA+ICsJCQkgICBMUFNfX0VUMURfX01BU0sgfCBcDQo+ID4gKwkJCSAgIExQU19fV01UMkRf X01BU0sgfCBcDQo+ID4gKwkJCSAgIExQU19fV01UMURfX01BU0sgfCBcDQo+ID4gKwkJCSAgIExQ U19fVlREX19NQVNLIHwgXA0KPiA+ICsJCQkgICBMUFNfX1RURF9fTUFTSyB8IFwNCj4gPiArCQkJ ICAgTFBTX19DVERfX01BU0sgfCBcDQo+ID4gKwkJCSAgIExQU19fUEdEX19NQVNLIHwgXA0KPiA+ ICsJCQkgICBMUFNfX01DUl9fTUFTSyB8IFwNCj4gPiArCQkJICAgTFBTX19TUlRDUl9fTUFTSyB8 IFwNCj4gPiArCQkJICAgTFBTX19MUFRBX19NQVNLKQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICog Qml0bWFzayBvZiB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uIGFuZCB0YW1wZXJzIHN0YXR1cyBiaXQg aW4gdGhlIExQVERTDQo+ID4gKyAqIHJlZ2lzdGVyDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIExQ VERTX19FVDEwRF9fTUFTSyAgQklUKDcpDQo+ID4gKyNkZWZpbmUgTFBURFNfX0VUOURfX01BU0sg ICBCSVQoNikNCj4gPiArI2RlZmluZSBMUFREU19fRVQ4RF9fTUFTSyAgIEJJVCg1KQ0KPiA+ICsj ZGVmaW5lIExQVERTX19FVDdEX19NQVNLICAgQklUKDQpDQo+ID4gKyNkZWZpbmUgTFBURFNfX0VU NkRfX01BU0sgICBCSVQoMykNCj4gPiArI2RlZmluZSBMUFREU19fRVQ1RF9fTUFTSyAgIEJJVCgy KQ0KPiA+ICsjZGVmaW5lIExQVERTX19FVDREX19NQVNLICAgQklUKDEpDQo+ID4gKyNkZWZpbmUg TFBURFNfX0VUM0RfX01BU0sgICBCSVQoMCkNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIEJpdG1h c2sgb2YgYWxsIHNlY3VyaXR5IHZpb2xhdGlvbiBhbmQgdGFtcGVycyBzdGF0dXMgYml0IGluIHRo ZSBMUFREUw0KPiA+ICsgKiByZWdpc3Rlcg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBMUFREU19f QUxMX1RQX19NQVNLIChMUFREU19fRVQxMERfX01BU0sgfCBcDQo+ID4gKwkJCSAgICAgTFBURFNf X0VUOURfX01BU0sgfCBcDQo+ID4gKwkJCSAgICAgTFBURFNfX0VUOERfX01BU0sgfCBcDQo+ID4g KwkJCSAgICAgTFBURFNfX0VUN0RfX01BU0sgfCBcDQo+ID4gKwkJCSAgICAgTFBURFNfX0VUNkRf X01BU0sgfCBcDQo+ID4gKwkJCSAgICAgTFBURFNfX0VUNURfX01BU0sgfCBcDQo+ID4gKwkJCSAg ICAgTFBURFNfX0VUNERfX01BU0sgfCBcDQo+ID4gKwkJCSAgICAgTFBURFNfX0VUM0RfX01BU0sp DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IHNlY3Zpb19zY19ub3RpZmllcl9pbmZv IC0gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1cyBvZiB0aGUgU05WUw0KPiA+ICsgKiBAaHBz dnM6ICAgc3RhdHVzIGZyb20gcmVnaXN0ZXIgSFBTVlMNCj4gPiArICogQGxwczogc3RhdHVzIGZy b20gcmVnaXN0ZXIgTFBTDQo+ID4gKyAqIEBscHRkczogc3RhdHVzIGZyb20gcmVnaXN0ZXIgTFBU RFMNCj4gPiArICovDQo+ID4gK3N0cnVjdCBzZWN2aW9fc2Nfbm90aWZpZXJfaW5mbyB7DQo+ID4g Kwl1MzIgaHBzdnM7DQo+ID4gKwl1MzIgbHBzOw0KPiA+ICsJdTMyIGxwdGRzOw0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHJlZ2lzdGVyX2lteF9zZWN2aW9fc2Nfbm90aWZpZXIo KSAtIFJlZ2lzdGVyIGEgbm90aWZpZXINCj4gPiArICoNCj4gPiArICogQG5iOiBUaGUgbm90aWZp ZXIgYmxvY2sgc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24g dG8gbm90aWZ5IHRvIHRoZSBpbXgtc2VjdmlvLXNjIG1vZHVsZS4gVGhlIGZ1bmN0aW9uDQo+ID4g KyAqIHdpbGwgYmUgbm90aWZpZWQgd2hlbiBhIGNoZWNrIG9mIHRoZSBzdGF0ZSBvZiB0aGUgU05W UyBoYXBwZW5zOiBjYWxsZWQgYnkNCj4gPiArICogYSB1c2VyIG9yIHRyaWdnZXJlZCBieSBhbiBp bnRlcnJ1cHRpb24gZm9ybSB0aGUgU05WUy4NCj4gPiArICoNCj4gPiArICogVGhlIHN0cnVjdCBz ZWN2aW9fc2Nfbm90aWZpZXJfaW5mbyBpcyBwYXNzZWQgYXMgZGF0YSB0byB0aGUgbm90aWZpZXIu DQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MNCj4gPiArICov DQo+ID4gK2ludCByZWdpc3Rlcl9pbXhfc2VjdmlvX3NjX25vdGlmaWVyKHN0cnVjdCBub3RpZmll cl9ibG9jayAqbmIpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHVucmVnaXN0ZXJfaW14X3Nl Y3Zpb19zY19ub3RpZmllcigpIC0gVW5yZWdpc3RlciBhIG5vdGlmaWVyDQo+ID4gKyAqDQo+ID4g KyAqIEBuYjogVGhlIG5vdGlmaWVyIGJsb2NrIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBS ZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtpbnQgdW5yZWdpc3Rl cl9pbXhfc2VjdmlvX3NjX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOw0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2NfZ2V0X3N0YXRlKCkgLSBHZXQgdGhl IHN0YXRlIG9mIHRoZSBTTlZTDQo+ID4gKyAqDQo+ID4gKyAqIEBpbmZvOiBUaGUgc3RydWN0dXJl IGNvbnRhaW5pbmcgdGhlIHN0YXRlIG9mIHRoZSBTTlZTDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy bjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK2ludCBpbXhfc2VjdmlvX3Nj X2dldF9zdGF0ZShzdHJ1Y3Qgc2VjdmlvX3NjX25vdGlmaWVyX2luZm8gKmluZm8pOw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIGlteF9zZWN2aW9fc2NfY2hlY2tfc3RhdGUoKSAtIENoZWNrIHRo ZSBzdGF0ZSBvZiB0aGUgU05WUw0KPiA+ICsgKg0KPiA+ICsgKiBJZiBhIHNlY3VyaXR5IHZpb2xh dGlvbiBvciBhIHRhbXBlciBpcyBkZXRlY3RlZCwgdGhlIGxpc3Qgb2Ygbm90aWZpZXINCj4gPiAr ICogKHJlZ2lzdGVyZWQgdXNpbmcgcmVnaXN0ZXJfaW14X3NlY3Zpb19zY19ub3RpZmllcigpICkg d2lsbCBiZSBjYWxsZWQNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3Vj Y2Vzcw0KPiA+ICsgKi8NCj4gPiAraW50IGlteF9zZWN2aW9fc2NfY2hlY2tfc3RhdGUodm9pZCk7 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogaW14X3NlY3Zpb19zY19jbGVhcl9zdGF0ZSgpIC0g Q2xlYXIgdGhlIHN0YXRlIG9mIHRoZSBTTlZTDQo+ID4gKyAqDQo+ID4gKyAqIEBocHN2czogVmFs dWUgdG8gd3JpdGUgdG8gSFBTVlMgcmVnaXN0ZXINCj4gPiArICogQGxwczogICBWYWx1ZSB0byB3 cml0ZSB0byBMUFMgcmVnaXN0ZXINCj4gPiArICogQGxwdGRzOiBWYWx1ZSB0byB3cml0ZSB0byBM UFREU3JlZ2lzdGVyDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBmdW5jdGlvbiB3aWxsIHdyaXRlIHRo ZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgY29ycmVzcG9uZGluZyByZWdpc3Rlcg0KPiA+ICsgKiB3 aGljaCB3aWxsIGNsZWFyIHRoZSBzdGF0dXMgb2YgdGhlIGJpdHMgc2V0Lg0KPiA+ICsgKg0KPiA+ ICsgKiBSZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzDQo+ID4gKyAqLw0KPiA+ICtpbnQgaW14 X3NlY3Zpb19zY19jbGVhcl9zdGF0ZSh1MzIgaHBzdnMsIHUzMiBscHMsIHUzMiBscHRkcyk7DQo+ ID4gKw0KPiA+ICsvKiBDb21tYW5kcyBvZiB0aGUgaW9jdGwgaW50ZXJmYWNlICovDQo+ID4gK2Vu dW0gaW9jdGxfY21kX3Qgew0KPiA+ICsJR0VUX1NUQVRFLA0KPiA+ICsJQ0hFQ0tfU1RBVEUsDQo+ ID4gKwlDTEVBUl9TVEFURSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIERlZmluaXRpb24gZm9y IHRoZSBpb2N0bCBpbnRlcmZhY2UgKi8NCj4gPiArI2RlZmluZSBJTVhfU0VDVklPX1NDX0dFVF9T VEFURSAgIF9JT1IoJ1MnLCBHRVRfU1RBVEUsIFwNCj4gPiArCQkJCSAgICAgICBzdHJ1Y3Qgc2Vj dmlvX3NjX25vdGlmaWVyX2luZm8pDQo+ID4gKyNkZWZpbmUgSU1YX1NFQ1ZJT19TQ19DSEVDS19T VEFURSBfSU8oJ1MnLCBDSEVDS19TVEFURSkNCj4gPiArI2RlZmluZSBJTVhfU0VDVklPX1NDX0NM RUFSX1NUQVRFIF9JT1coJ1MnLCBDTEVBUl9TVEFURSwgXA0KPiA+ICsJCQkJICAgICAgIHN0cnVj dCBzZWN2aW9fc2Nfbm90aWZpZXJfaW5mbykNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfTUlTQ19J TVhfU0VDVklPX1NDX0hfICovDQo+ID4gLS0NCj4gPiAyLjcuNA0KPiA+DQo=