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=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_GIT autolearn=unavailable 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 5CFC2C3F68F for ; Thu, 19 Dec 2019 05:50:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0B2A321582 for ; Thu, 19 Dec 2019 05:50:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="UeLLApFv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726656AbfLSFu5 (ORCPT ); Thu, 19 Dec 2019 00:50:57 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:60208 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726668AbfLSFu4 (ORCPT ); Thu, 19 Dec 2019 00:50:56 -0500 X-UUID: 56364807e14149a4a161fc24635e34f0-20191219 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Reply-To:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=T1ORo/Dw1k4tHfWg/684HH8uceSdJTTtzbsyAo0nhF0=; b=UeLLApFvtKGdy8s0ASBrWfBNFBBD05O7paARg6O6Grv7jzVTn40ak3rWOOAw8Ae0JwsEoVvqgQ0dCv/FWHivUnwIjEMQPn2w2T+osppjggcYHTs6u69lC5IB0yQnIxL3xhznmc90CP/KtTKiyQLlpvIggUqA2H6Xp918c/Bih/Q=; X-UUID: 56364807e14149a4a161fc24635e34f0-20191219 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 585394661; Thu, 19 Dec 2019 13:50:15 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 19 Dec 2019 13:49:56 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Thu, 19 Dec 2019 13:50:16 +0800 From: Jungo Lin To: , , , , CC: , , , , , , , , , , , , , , , , , , , Pi-Hsun Shih Subject: [v6, 5/5] media: platform: Add Mediatek ISP P1 V4L2 device driver Date: Thu, 19 Dec 2019 13:49:30 +0800 Message-ID: <20191219054930.29513-6-jungo.lin@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20191219054930.29513-1-jungo.lin@mediatek.com> References: <20191219054930.29513-1-jungo.lin@mediatek.com> Reply-To: Jungo Lin MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHRoZSBNZWRpYXRlayBJU1AgUDEgSFcgY29udHJvbCBkZXZpY2UgZHJp dmVyLg0KSXQgaGFuZGxlcyB0aGUgSVNQIEhXIGNvbmZpZ3VyYXRpb24sIHByb3ZpZGVzIGludGVy cnVwdCBoYW5kbGluZyBhbmQNCmluaXRpYWxpemVzIHRoZSBWNEwyIGRldmljZSBub2RlcyBhbmQg b3RoZXIgVjRMMiBmdW5jdGlvbnMuIE1vcmVvdmVyLA0KaW1wbGVtZW50IHN0YW5kYXJkIFY0TDIg dmlkZW8gZHJpdmVyIHRoYXQgdXRpbGl6ZXMgVjRMMiBhbmQgbWVkaWENCmZyYW1ld29yayBBUElz LiBJdCBzdXBwb3J0cyBvbmUgbWVkaWEgZGV2aWNlLCBvbmUgc3ViLWRldmljZSBhbmQNCnNldmVy YWwgdmlkZW8gZGV2aWNlcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIE1vcmVvdmVyLCBpdCBhbHNv IGNvbm5lY3RzDQp3aXRoIHNlbnNvciBhbmQgc2VuaW5mIGRyaXZlcnMgd2l0aCBWNEwyIGFzeW5j IEFQSXMuIENvbW11bmljYXRlIHdpdGgNCmNvLXByb2Nlc3MgdmlhIFNDUCBjb21tdW5pY2F0aW9u IHRvIGNvbXBvc2UgSVNQIHJlZ2lzdGVycyBpbiB0aGUNCmZpcm13YXJlLg0KDQooVGhlIGN1cnJl bnQgbWV0YWRhdGEgaW50ZXJmYWNlIHVzZWQgaW4gbWV0YSBpbnB1dCBhbmQgcGFydGlhbA0KbWV0 YSBub2RlcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIGtpY2sgb2ZmIHRoZSBkcml2 ZXINCmRldmVsb3BtZW50IGFuZCBpcyBub3QgcmVhZHkgdG8gYmUgcmV2aWV3ZWQgeWV0LikNCg0K U2lnbmVkLW9mZi1ieTogSnVuZ28gTGluIDxqdW5nby5saW5AbWVkaWF0ZWsuY29tPg0KU2lnbmVk LW9mZi1ieTogVG9tYXN6IEZpZ2EgPHRmaWdhQGNocm9taXVtLm9yZz4NClNpZ25lZC1vZmYtYnk6 IFBpLUhzdW4gU2hpaCA8cGloc3VuQGNocm9taXVtLm9yZz4NCi0tLQ0KQ2hhbmdlcyBmcm9tIHY2 Og0KIC0gUmV2aXNlIGhlbHAgZGVzY3JpcHRpb24gZm9yIFZJREVPX01FRElBVEVLX0lTUF9QQVNT MQ0KIC0gQXBwbHkgU0NQIHYyMSBjaGFuZ2UgaW4gUDEgZHJpdmVyIGJ5IFBpLUhzdW4gU2hpaA0K IC0gQ29ycmVjdCBhdXRvIHN1c3BlbmQgdGltZXIgdmFsdWUgZm9yIHN1c3BlbmQvcmVzdW1lIGlz c3VlDQogLSBJbmNyZWFzZSBJUEkgZ3VhcmQgdGltZXIgdG8gMSBzZWNvbmQgdG8gYXZvaWQgZmFs c2UgYWxhcm0gY29tbWFuZCB0aW1lb3V0IGV2ZW50DQogLSBGaXggS0UgZHVlIHRvIG5vIHNlbi1p bmYgc3ViLWRldmljZQ0KLS0tDQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL0tjb25m aWcgICAgICAgIHwgICAyMCArDQogLi4uL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL01h a2VmaWxlICAgIHwgICAgMyArDQogLi4uL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9NYWtl ZmlsZSAgICAgIHwgICAgNiArDQogLi4uL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtf Y2FtLWh3LmMgIHwgIDYzNiArKysrKw0KIC4uLi9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0v bXRrX2NhbS1ody5oICB8ICAgNjQgKw0KIC4uLi9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0v bXRrX2NhbS1pcGkuaCB8ICAyMjIgKysNCiAuLi4vbXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0t cmVncy5oICAgICAgICAgfCAgIDk1ICsNCiAuLi4vcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2Ft L210a19jYW0uYyAgICAgfCAyMDg3ICsrKysrKysrKysrKysrKysrDQogLi4uL3BsYXRmb3JtL210 ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLmggICAgIHwgIDI0NCArKw0KIDkgZmlsZXMgY2hhbmdl ZCwgMzM3NyBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vbXRrLWlzcC9LY29uZmlnDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvTWFrZWZpbGUNCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vTWFrZWZpbGUNCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0v bXRrX2NhbS1ody5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v bXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0taHcuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLWlwaS5oDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2Ft L210a19jYW0tcmVncy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vbXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLmgNCg0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9LY29uZmlnIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9tdGstaXNwL0tjb25maWcNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAuLmY4NmUxYjU5YWQxZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL0tjb25maWcNCkBAIC0wLDAgKzEsMjAgQEANCitjb25m aWcgVklERU9fTUVESUFURUtfSVNQX1BBU1MxDQorCXRyaXN0YXRlICJNZWRpYXRlayBJU1AgUGFz cyAxIGRyaXZlciINCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFZJREVPX1Y0TDJfU1VCREVW X0FQSQ0KKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsNCisJc2VsZWN0IFY0TDJfRldOT0RFDQor CXNlbGVjdCBWSURFT0JVRjJfVk1BTExPQw0KKwlzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcN CisJc2VsZWN0IE1US19TQ1ANCisJZGVmYXVsdCBuDQorCWhlbHANCisJCVBhc3MgMSBkcml2ZXIg Y29udHJvbHMgM0EgKGF1dG8tZm9jdXMsIGV4cG9zdXJlLA0KKwkJYW5kIHdoaXRlIGJhbGFuY2Up IHdpdGggdHVuaW5nIGZlYXR1cmUgYW5kIG91dHB1dHMNCisJCXRoZSBjYXB0dXJlZCBpbWFnZSBi dWZmZXJzIGluIE1lZGlhdGVrJ3MgY2FtZXJhIHN5c3RlbS4NCisNCisJCUNob29zZSBZIGlmIHlv dSB3YW50IHRvIHVzZSBNZWRpYXRlayBTb0NzIHRvIGNyZWF0ZSBpbWFnZQ0KKwkJY2FwdHVyZWQg YXBwbGljYXRpb24gc3VjaCBhcyB2aWRlbyByZWNvcmRpbmcgYW5kIHN0aWxsIGltYWdlDQorCQlj YXB0dXJpbmcuDQorDQorCQlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9v c2UgTSBoZXJlOyB0aGUgbW9kdWxlDQorCQl3aWxsIGJlIGNhbGxlZCBtdGstY2FtLWlzcC4NCmRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL01ha2VmaWxl IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9NYWtlZmlsZQ0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uY2U3OWQyODNiMjA5DQotLS0gL2Rl di9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL01ha2Vm aWxlDQpAQCAtMCwwICsxLDMgQEANCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQorDQorb2JqLSQoQ09ORklHX1ZJREVPX01FRElBVEVLX0lTUF9QQVNTMSkgKz0gY2FtLw0KXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L210ay1pc3AvaXNwXzUwL2NhbS9NYWtlZmlsZQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uNTNiNTRkM2MyNmEwDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9NYWtlZmlsZQ0KQEAgLTAsMCArMSw2 IEBADQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKw0KK210ay1jYW0taXNw LW9ianMgKz0gbXRrX2NhbS5vDQorbXRrLWNhbS1pc3Atb2JqcyArPSBtdGtfY2FtLWh3Lm8NCisN CitvYmotJChDT05GSUdfVklERU9fTUVESUFURUtfSVNQX1BBU1MxKSArPSBtdGstY2FtLWlzcC5v DQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLWh3LmMgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLWh3LmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjQwNjVkMGQyOWI3Zg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS1o dy5jDQpAQCAtMCwwICsxLDYzNiBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wDQorLy8NCisvLyBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLg0KKw0KKyNpbmNs dWRlIDxsaW51eC9hdG9taWMuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrLmg+DQorI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4NCisjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZW1vdGVwcm9jL210a19z Y3AuaD4NCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9y ZW1vdGVwcm9jLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQorI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4 L3ZpZGVvZGV2Mi5oPg0KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+DQorDQorI2luY2x1ZGUg PG1lZGlhL3Y0bDItZXZlbnQuaD4NCisNCisjaW5jbHVkZSAibXRrX2NhbS5oIg0KKyNpbmNsdWRl ICJtdGtfY2FtLWh3LmgiDQorI2luY2x1ZGUgIm10a19jYW0tcmVncy5oIg0KKw0KKyNkZWZpbmUg TVRLX0lTUF9DT01QT1NFUl9NRU1fU0laRQkJMHgyMDAwMDANCisjZGVmaW5lIE1US19JU1BfQ1Ff QlVGRkVSX0NPVU5UCQkJMw0KKyNkZWZpbmUgTVRLX0lTUF9DUV9BRERSRVNTX09GRlNFVAkJMHg2 NDANCisNCisvKg0KKyAqDQorICogTVRLIENhbWVyYSBJU1AgUDEgSFcgc3VwcG9ydHMgMyBJU1Ag SFcgKENBTSBBL0IvQykuDQorICogVGhlIFQtcHV0IGNhcGFiaWxpdHkgb2YgQ0FNIEIgaXMgdGhl IG1heGltdW0gKG1heCBsaW5lIGJ1ZmZlcjogNTM3NiBwaXhlbHMpDQorICogRm9yIENBTSBBL0Ms IGl0IG9ubHkgc3VwcG9ydHMgbWF4IGxpbmUgYnVmZmVyIHdpdGggMzMyOCBwaXhlbHMuDQorICog SW4gY3VycmVudCBkcml2ZXIsIG9ubHkgc3VwcG9ydHMgQ0FNIEIuDQorICoNCisgKi8NCisjZGVm aW5lIE1US19JU1BfQ0FNX0lEX0IJCQkzDQorI2RlZmluZSBNVEtfSVNQX0FVVE9TVVNQRU5EX0RF TEFZX01TCQk2Ng0KKyNkZWZpbmUgTVRLX0lTUF9JUElfU0VORF9USU1FT1VUCQkxMDAwDQorI2Rl ZmluZSBNVEtfSVNQX1NUT1BfSFdfVElNRU9VVAkJCSgzMyAqIFVTRUNfUEVSX01TRUMpDQorDQor c3RhdGljIHZvaWQgaXNwX3R4X2ZyYW1lX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp DQorew0KKwlzdHJ1Y3QgbXRrX2NhbV9kZXZfcmVxdWVzdCAqcmVxID0NCisJCWNvbnRhaW5lcl9v Zih3b3JrLCBzdHJ1Y3QgbXRrX2NhbV9kZXZfcmVxdWVzdCwgZnJhbWVfd29yayk7DQorCXN0cnVj dCBtdGtfY2FtX2RldiAqY2FtID0NCisJCWNvbnRhaW5lcl9vZihyZXEtPnJlcS5tZGV2LCBzdHJ1 Y3QgbXRrX2NhbV9kZXYsIG1lZGlhX2Rldik7DQorCXN0cnVjdCBtdGtfaXNwX3AxX2RldmljZSAq cDFfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGNhbS0+ZGV2KTsNCisNCisJc2NwX2lwaV9zZW5kKHAx X2Rldi0+c2NwLCBTQ1BfSVBJX0lTUF9GUkFNRSwgJnJlcS0+ZnJhbWVfcGFyYW1zLA0KKwkJICAg ICBzaXplb2YocmVxLT5mcmFtZV9wYXJhbXMpLCBNVEtfSVNQX0lQSV9TRU5EX1RJTUVPVVQpOw0K K30NCisNCitzdGF0aWMgdm9pZCBpc3BfY29tcG9zZXJfaGFuZGxlcih2b2lkICpkYXRhLCB1bnNp Z25lZCBpbnQgbGVuLCB2b2lkICpwcml2KQ0KK3sNCisJc3RydWN0IG10a19pc3BfcDFfZGV2aWNl ICpwMV9kZXYgPSAoc3RydWN0IG10a19pc3BfcDFfZGV2aWNlICopcHJpdjsNCisJc3RydWN0IGRl dmljZSAqZGV2ID0gcDFfZGV2LT5kZXY7DQorCXN0cnVjdCBtdGtfaXNwX3NjcF9wMV9jbWQgKmlw aV9tc2c7DQorDQorCWlwaV9tc2cgPSAoc3RydWN0IG10a19pc3Bfc2NwX3AxX2NtZCAqKWRhdGE7 DQorDQorCWlmIChsZW4gPCBvZmZzZXRvZmVuZChzdHJ1Y3QgbXRrX2lzcF9zY3BfcDFfY21kLCBh Y2tfaW5mbykpIHsNCisJCWRldl9lcnIoZGV2LCAid3JvbmcgSVBJIGxlbjolZFxuIiwgbGVuKTsN CisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAoaXBpX21zZy0+Y21kX2lkICE9IElTUF9DTURfQUNL IHx8DQorCSAgICBpcGlfbXNnLT5hY2tfaW5mby5jbWRfaWQgIT0gSVNQX0NNRF9GUkFNRV9BQ0sp DQorCQlyZXR1cm47DQorDQorCXAxX2Rldi0+Y29tcG9zZWRfZnJhbWVfc2VxX25vID0gaXBpX21z Zy0+YWNrX2luZm8uZnJhbWVfc2VxX25vOw0KKwlkZXZfZGJnKGRldiwgImFjayBmcmFtZV9udW06 JWRcbiIsIHAxX2Rldi0+Y29tcG9zZWRfZnJhbWVfc2VxX25vKTsNCit9DQorDQorc3RhdGljIGlu dCBpc3BfY29tcG9zZXJfaW5pdChzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKnAxX2RldikNCit7 DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHAxX2Rldi0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwly ZXQgPSBzY3BfaXBpX3JlZ2lzdGVyKHAxX2Rldi0+c2NwLCBTQ1BfSVBJX0lTUF9DTUQsDQorCQkJ ICAgICAgIGlzcF9jb21wb3Nlcl9oYW5kbGVyLCBwMV9kZXYpOw0KKwlpZiAocmV0KSB7DQorCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUEkgY21kXG4iKTsNCisJCXJldHVybiBy ZXQ7DQorCX0NCisJcmV0ID0gc2NwX2lwaV9yZWdpc3RlcihwMV9kZXYtPnNjcCwgU0NQX0lQSV9J U1BfRlJBTUUsDQorCQkJICAgICAgIGlzcF9jb21wb3Nlcl9oYW5kbGVyLCBwMV9kZXYpOw0KKwlp ZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUEkgZnJhbWVc biIpOw0KKwkJZ290byB1bnJlZ19pcGlfY21kOw0KKwl9DQorDQorCXAxX2Rldi0+Y29tcG9zZXJf d3EgPQ0KKwkJYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoZGV2X25hbWUocDFfZGV2LT5kZXYpLA0K KwkJCQkJX19XUV9MRUdBQ1kgfCBXUV9NRU1fUkVDTEFJTSB8DQorCQkJCQlXUV9GUkVFWkFCTEUp Ow0KKwlpZiAoIXAxX2Rldi0+Y29tcG9zZXJfd3EpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGFsbG9jIGNvbXBvc2VyIHdvcmtxdWV1ZVxuIik7DQorCQlnb3RvIHVucmVnX2lwaV9mcmFt ZTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCit1bnJlZ19pcGlfZnJhbWU6DQorCXNjcF9pcGlf dW5yZWdpc3RlcihwMV9kZXYtPnNjcCwgU0NQX0lQSV9JU1BfRlJBTUUpOw0KK3VucmVnX2lwaV9j bWQ6DQorCXNjcF9pcGlfdW5yZWdpc3RlcihwMV9kZXYtPnNjcCwgU0NQX0lQSV9JU1BfQ01EKTsN CisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNwX2NvbXBvc2VyX3VuaW5p dChzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKnAxX2RldikNCit7DQorCWRlc3Ryb3lfd29ya3F1 ZXVlKHAxX2Rldi0+Y29tcG9zZXJfd3EpOw0KKwlzY3BfaXBpX3VucmVnaXN0ZXIocDFfZGV2LT5z Y3AsIFNDUF9JUElfSVNQX0NNRCk7DQorCXNjcF9pcGlfdW5yZWdpc3RlcihwMV9kZXYtPnNjcCwg U0NQX0lQSV9JU1BfRlJBTUUpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc3BfY29tcG9zZXJfaHdf aW5pdChzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKnAxX2RldikNCit7DQorCXN0cnVjdCBtdGtf aXNwX3NjcF9wMV9jbWQgY29tcG9zZXJfdHhfY21kOw0KKw0KKwltZW1zZXQoJmNvbXBvc2VyX3R4 X2NtZCwgMCwgc2l6ZW9mKGNvbXBvc2VyX3R4X2NtZCkpOw0KKwljb21wb3Nlcl90eF9jbWQuY21k X2lkID0gSVNQX0NNRF9JTklUOw0KKwljb21wb3Nlcl90eF9jbWQuaW5pdF9wYXJhbS5od19tb2R1 bGUgPSBNVEtfSVNQX0NBTV9JRF9COw0KKw0KKwkvKg0KKwkgKiBQYXNzZWQgY29oZXJlbnQgcmVz ZXJ2ZWQgbWVtb3J5IGluZm8uIGZvciBTQ1AgZmlybXdhcmUgdXNhZ2UuDQorCSAqIFRoaXMgYnVm ZmVyIGlzIHVzZWQgZm9yIFNDUCdzIElTUCBjb21wb3NlciB0byBjb21wb3NlLg0KKwkgKiBUaGUg c2l6ZSBvZiBpcyBmaXhlZCB0byAweDIwMDAwMCBmb3IgdGhlIHJlcXVpcmVtZW50IG9mIGNvbXBv c2VyLg0KKwkgKi8NCisJY29tcG9zZXJfdHhfY21kLmluaXRfcGFyYW0uY3FfYWRkci5pb3ZhID0g cDFfZGV2LT5jb21wb3Nlcl9pb3ZhOw0KKwljb21wb3Nlcl90eF9jbWQuaW5pdF9wYXJhbS5jcV9h ZGRyLnNjcF9hZGRyID0gcDFfZGV2LT5jb21wb3Nlcl9zY3BfYWRkcjsNCisNCisJc2NwX2lwaV9z ZW5kKHAxX2Rldi0+c2NwLCBTQ1BfSVBJX0lTUF9DTUQsICZjb21wb3Nlcl90eF9jbWQsDQorCQkg ICAgIHNpemVvZihjb21wb3Nlcl90eF9jbWQpLCBNVEtfSVNQX0lQSV9TRU5EX1RJTUVPVVQpOw0K K30NCisNCitzdGF0aWMgdm9pZCBpc3BfY29tcG9zZXJfaHdfZGVpbml0KHN0cnVjdCBtdGtfaXNw X3AxX2RldmljZSAqcDFfZGV2KQ0KK3sNCisJc3RydWN0IG10a19pc3Bfc2NwX3AxX2NtZCBjb21w b3Nlcl90eF9jbWQ7DQorDQorCW1lbXNldCgmY29tcG9zZXJfdHhfY21kLCAwLCBzaXplb2YoY29t cG9zZXJfdHhfY21kKSk7DQorCWNvbXBvc2VyX3R4X2NtZC5jbWRfaWQgPSBJU1BfQ01EX0RFSU5J VDsNCisNCisJc2NwX2lwaV9zZW5kKHAxX2Rldi0+c2NwLCBTQ1BfSVBJX0lTUF9DTUQsICZjb21w b3Nlcl90eF9jbWQsDQorCQkgICAgIHNpemVvZihjb21wb3Nlcl90eF9jbWQpLCBNVEtfSVNQX0lQ SV9TRU5EX1RJTUVPVVQpOw0KKw0KKwlpc3BfY29tcG9zZXJfdW5pbml0KHAxX2Rldik7DQorfQ0K Kw0KK3ZvaWQgbXRrX2lzcF9od19jb25maWcoc3RydWN0IG10a19jYW1fZGV2ICpjYW0sDQorCQkg ICAgICAgc3RydWN0IHAxX2NvbmZpZ19wYXJhbSAqY29uZmlnX3BhcmFtKQ0KK3sNCisJc3RydWN0 IG10a19pc3Bfc2NwX3AxX2NtZCBjb21wb3Nlcl90eF9jbWQ7DQorCXN0cnVjdCBtdGtfaXNwX3Ax X2RldmljZSAqcDFfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGNhbS0+ZGV2KTsNCisNCisJbWVtc2V0 KCZjb21wb3Nlcl90eF9jbWQsIDAsIHNpemVvZihjb21wb3Nlcl90eF9jbWQpKTsNCisJY29tcG9z ZXJfdHhfY21kLmNtZF9pZCA9IElTUF9DTURfQ09ORklHOw0KKwltZW1jcHkoJmNvbXBvc2VyX3R4 X2NtZC5jb25maWdfcGFyYW0sIGNvbmZpZ19wYXJhbSwNCisJICAgICAgIHNpemVvZigqY29uZmln X3BhcmFtKSk7DQorDQorCXNjcF9pcGlfc2VuZChwMV9kZXYtPnNjcCwgU0NQX0lQSV9JU1BfQ01E LCAmY29tcG9zZXJfdHhfY21kLA0KKwkJICAgICBzaXplb2YoY29tcG9zZXJfdHhfY21kKSwgTVRL X0lTUF9JUElfU0VORF9USU1FT1VUKTsNCit9DQorDQordm9pZCBtdGtfaXNwX3N0cmVhbShzdHJ1 Y3QgbXRrX2NhbV9kZXYgKmNhbSwgaW50IG9uKQ0KK3sNCisJc3RydWN0IG10a19pc3Bfc2NwX3Ax X2NtZCBjb21wb3Nlcl90eF9jbWQ7DQorCXN0cnVjdCBtdGtfaXNwX3AxX2RldmljZSAqcDFfZGV2 ID0gZGV2X2dldF9kcnZkYXRhKGNhbS0+ZGV2KTsNCisNCisJbWVtc2V0KCZjb21wb3Nlcl90eF9j bWQsIDAsIHNpemVvZihjb21wb3Nlcl90eF9jbWQpKTsNCisJY29tcG9zZXJfdHhfY21kLmNtZF9p ZCA9IElTUF9DTURfU1RSRUFNOw0KKwljb21wb3Nlcl90eF9jbWQuaXNfc3RyZWFtX29uID0gb247 DQorDQorCXNjcF9pcGlfc2VuZChwMV9kZXYtPnNjcCwgU0NQX0lQSV9JU1BfQ01ELCAmY29tcG9z ZXJfdHhfY21kLA0KKwkJICAgICBzaXplb2YoY29tcG9zZXJfdHhfY21kKSwgTVRLX0lTUF9JUElf U0VORF9USU1FT1VUKTsNCit9DQorDQoraW50IG10a19pc3BfaHdfaW5pdChzdHJ1Y3QgbXRrX2Nh bV9kZXYgKmNhbSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhbS0+ZGV2Ow0KKwlzdHJ1 Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKnAxX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlp bnQgcmV0Ow0KKw0KKwlyZXQgPSBycHJvY19ib290KHAxX2Rldi0+cnByb2NfaGFuZGxlKTsNCisJ aWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcnByb2NfYm9vdFxuIik7DQor CQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGlzcF9jb21wb3Nlcl9pbml0KHAxX2Rldik7 DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGRl dik7DQorCWlzcF9jb21wb3Nlcl9od19pbml0KHAxX2Rldik7DQorDQorCXAxX2Rldi0+ZW5xdWV1 ZWRfZnJhbWVfc2VxX25vID0gMDsNCisJcDFfZGV2LT5kZXF1ZXVlZF9mcmFtZV9zZXFfbm8gPSAw Ow0KKwlwMV9kZXYtPmNvbXBvc2VkX2ZyYW1lX3NlcV9ubyA9IDA7DQorCXAxX2Rldi0+c29mX2Nv dW50ID0gMDsNCisNCisJZGV2X2RiZyhkZXYsICIlcyBkb25lXG4iLCBfX2Z1bmNfXyk7DQorDQor CXJldHVybiAwOw0KK30NCisNCitpbnQgbXRrX2lzcF9od19yZWxlYXNlKHN0cnVjdCBtdGtfY2Ft X2RldiAqY2FtKQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2FtLT5kZXY7DQorCXN0cnVj dCBtdGtfaXNwX3AxX2RldmljZSAqcDFfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorDQor CWlzcF9jb21wb3Nlcl9od19kZWluaXQocDFfZGV2KTsNCisJcG1fcnVudGltZV9tYXJrX2xhc3Rf YnVzeShkZXYpOw0KKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkZXYpOw0KKwlycHJvY19z aHV0ZG93bihwMV9kZXYtPnJwcm9jX2hhbmRsZSk7DQorDQorCWRldl9kYmcoZGV2LCAiJXMgZG9u ZVxuIiwgX19mdW5jX18pOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtdGtfaXNwX3Jl cV9lbnF1ZXVlKHN0cnVjdCBtdGtfY2FtX2RldiAqY2FtLA0KKwkJCSBzdHJ1Y3QgbXRrX2NhbV9k ZXZfcmVxdWVzdCAqcmVxKQ0KK3sNCisJc3RydWN0IG10a19pc3BfcDFfZGV2aWNlICpwMV9kZXYg PSBkZXZfZ2V0X2RydmRhdGEoY2FtLT5kZXYpOw0KKw0KKwkvKiBBY2N1bXVsYXRlZCBmcmFtZSBz ZXF1ZW5jZSBudW1iZXIgKi8NCisJcmVxLT5mcmFtZV9wYXJhbXMuZnJhbWVfc2VxX25vID0gKytw MV9kZXYtPmVucXVldWVkX2ZyYW1lX3NlcV9ubzsNCisNCisJSU5JVF9XT1JLKCZyZXEtPmZyYW1l X3dvcmssIGlzcF90eF9mcmFtZV93b3JrZXIpOw0KKwlxdWV1ZV93b3JrKHAxX2Rldi0+Y29tcG9z ZXJfd3EsICZyZXEtPmZyYW1lX3dvcmspOw0KKwlkZXZfZGJnKGNhbS0+ZGV2LCAiZW5xdWV1ZSBm ZDolcyBmcmFtZV9zZXFfbm86JWQgam9iIGNudDolZFxuIiwNCisJCXJlcS0+cmVxLmRlYnVnX3N0 ciwgcmVxLT5mcmFtZV9wYXJhbXMuZnJhbWVfc2VxX25vLA0KKwkJY2FtLT5ydW5uaW5nX2pvYl9j b3VudCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzcF9pcnFfaGFuZGxlX3NvZihzdHJ1Y3QgbXRr X2lzcF9wMV9kZXZpY2UgKnAxX2RldiwNCisJCQkgICAgICAgdW5zaWduZWQgaW50IGRlcXVldWVk X2ZyYW1lX3NlcV9ubykNCit7DQorCWRtYV9hZGRyX3QgYmFzZV9hZGRyID0gcDFfZGV2LT5jb21w b3Nlcl9pb3ZhOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwMV9kZXYtPmRldjsNCisJc3RydWN0 IG10a19jYW1fZGV2X3JlcXVlc3QgKnJlcTsNCisJaW50IGNvbXBvc2VkX2ZyYW1lX3NlcV9ubyA9 IHAxX2Rldi0+Y29tcG9zZWRfZnJhbWVfc2VxX25vOw0KKwl1bnNpZ25lZCBpbnQgYWRkcl9vZmZz ZXQ7DQorDQorCS8qIFNlbmQgVjRMMl9FVkVOVF9GUkFNRV9TWU5DIGV2ZW50ICovDQorCW10a19j YW1fZGV2X2V2ZW50X2ZyYW1lX3N5bmMoJnAxX2Rldi0+Y2FtX2RldiwgZGVxdWV1ZWRfZnJhbWVf c2VxX25vKTsNCisNCisJcDFfZGV2LT5zb2ZfY291bnQgKz0gMTsNCisJLyogU2F2ZSBmcmFtZSBp bmZvcm1hdGlvbiAqLw0KKwlwMV9kZXYtPmRlcXVldWVkX2ZyYW1lX3NlcV9ubyA9IGRlcXVldWVk X2ZyYW1lX3NlcV9ubzsNCisNCisJcmVxID0gbXRrX2NhbV9kZXZfZ2V0X3JlcSgmcDFfZGV2LT5j YW1fZGV2LCBkZXF1ZXVlZF9mcmFtZV9zZXFfbm8pOw0KKwlpZiAocmVxKQ0KKwkJcmVxLT50aW1l c3RhbXAgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTsNCisNCisJLyogVXBkYXRlIENRIGJhc2Ug YWRkcmVzcyBpZiBuZWVkZWQgKi8NCisJaWYgKGNvbXBvc2VkX2ZyYW1lX3NlcV9ubyA8PSBkZXF1 ZXVlZF9mcmFtZV9zZXFfbm8pIHsNCisJCWRldl9kYmcoZGV2LA0KKwkJCSJTT0ZfSU5UX1NULCBu byB1cGRhdGUsIGNxX251bTolZCwgZnJhbWVfc2VxOiVkXG4iLA0KKwkJCWNvbXBvc2VkX2ZyYW1l X3NlcV9ubywgZGVxdWV1ZWRfZnJhbWVfc2VxX25vKTsNCisJCXJldHVybjsNCisJfQ0KKwlhZGRy X29mZnNldCA9IE1US19JU1BfQ1FfQUREUkVTU19PRkZTRVQgKg0KKwkJKGRlcXVldWVkX2ZyYW1l X3NlcV9ubyAlIE1US19JU1BfQ1FfQlVGRkVSX0NPVU5UKTsNCisJd3JpdGVsKGJhc2VfYWRkciAr IGFkZHJfb2Zmc2V0LCBwMV9kZXYtPnJlZ3MgKyBSRUdfQ1FfVEhSMF9CQVNFQUREUik7DQorCWRl dl9kYmcoZGV2LA0KKwkJIlNPRl9JTlRfU1QsIHVwZGF0ZSBuZXh0LCBjcV9udW06JWQsIGZyYW1l X3NlcTolZCBjcV9hZGRyOjB4JXhcbiIsDQorCQljb21wb3NlZF9mcmFtZV9zZXFfbm8sIGRlcXVl dWVkX2ZyYW1lX3NlcV9ubywgYWRkcl9vZmZzZXQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc3Bf aXJxX2hhbmRsZV9kbWFfZXJyKHN0cnVjdCBtdGtfaXNwX3AxX2RldmljZSAqcDFfZGV2KQ0KK3sN CisJdTMyIHZhbDsNCisNCisJZGV2X2VycihwMV9kZXYtPmRldiwNCisJCSJJTUdPOjB4JXgsIFJS Wk86MHgleCwgQUFPPTB4JXgsIEFGTz0weCV4LCBMTVZPPTB4JXhcbiIsDQorCQlyZWFkbChwMV9k ZXYtPnJlZ3MgKyBSRUdfSU1HT19FUlJfU1RBVCksDQorCQlyZWFkbChwMV9kZXYtPnJlZ3MgKyBS RUdfUlJaT19FUlJfU1RBVCksDQorCQlyZWFkbChwMV9kZXYtPnJlZ3MgKyBSRUdfQUFPX0VSUl9T VEFUKSwNCisJCXJlYWRsKHAxX2Rldi0+cmVncyArIFJFR19BRk9fRVJSX1NUQVQpLA0KKwkJcmVh ZGwocDFfZGV2LT5yZWdzICsgUkVHX0xNVk9fRVJSX1NUQVQpKTsNCisJZGV2X2VycihwMV9kZXYt PmRldiwNCisJCSJMQ1NPPTB4JXgsIFBTTz0weCV4LCBGTEtPPTB4JXgsIEJQQ0k6MHgleCwgTFND ST0weCV4XG4iLA0KKwkJcmVhZGwocDFfZGV2LT5yZWdzICsgUkVHX0xDU09fRVJSX1NUQVQpLA0K KwkJcmVhZGwocDFfZGV2LT5yZWdzICsgUkVHX1BTT19FUlJfU1RBVCksDQorCQlyZWFkbChwMV9k ZXYtPnJlZ3MgKyBSRUdfRkxLT19FUlJfU1RBVCksDQorCQlyZWFkbChwMV9kZXYtPnJlZ3MgKyBS RUdfQlBDSV9FUlJfU1RBVCksDQorCQlyZWFkbChwMV9kZXYtPnJlZ3MgKyBSRUdfTFNDSV9FUlJf U1RBVCkpOw0KKw0KKwkvKiBEaXNhYmxlIERNQSBlcnJvciBtYXNrIHRvIGF2b2lkIHRvbyBtdWNo IGVycm9yIGxvZyAqLw0KKwl2YWwgPSByZWFkbChwMV9kZXYtPnJlZ3MgKyBSRUdfQ1RMX1JBV19J TlRfRU4pOw0KKwl3cml0ZWwoKHZhbCAmICh+RE1BX0VSUl9JTlRfRU4pKSwgcDFfZGV2LT5yZWdz ICsgUkVHX0NUTF9SQVdfSU5UX0VOKTsNCisJZGV2X2RiZyhwMV9kZXYtPmRldiwgImRpc2FibGUg RE1BIGVycm9yIG1hc2s6MHgleFxuIiwgdmFsKTsNCit9DQorDQorc3RhdGljIGlycXJldHVybl90 IGlzcF9pcnFfY2FtKGludCBpcnEsIHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3QgbXRrX2lzcF9w MV9kZXZpY2UgKnAxX2RldiA9IChzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKilkYXRhOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBwMV9kZXYtPmRldjsNCisJdW5zaWduZWQgaW50IGRlcXVldWVk X2ZyYW1lX3NlcV9ubzsNCisJdW5zaWduZWQgaW50IGlycV9zdGF0dXMsIGVycl9zdGF0dXMsIGRt YV9zdGF0dXM7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXNwaW5fbG9ja19pcnFzYXZl KCZwMV9kZXYtPnNwaW5sb2NrX2lycSwgZmxhZ3MpOw0KKwlpcnFfc3RhdHVzID0gcmVhZGwocDFf ZGV2LT5yZWdzICsgUkVHX0NUTF9SQVdfSU5UX1NUQVQpOw0KKwllcnJfc3RhdHVzID0gaXJxX3N0 YXR1cyAmIElOVF9TVF9NQVNLX0NBTV9FUlI7DQorCWRtYV9zdGF0dXMgPSByZWFkbChwMV9kZXYt PnJlZ3MgKyBSRUdfQ1RMX1JBV19JTlQyX1NUQVQpOw0KKwlkZXF1ZXVlZF9mcmFtZV9zZXFfbm8g PSByZWFkbChwMV9kZXYtPnJlZ3MgKyBSRUdfRlJBTUVfU0VRX05VTSk7DQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnAxX2Rldi0+c3BpbmxvY2tfaXJxLCBmbGFncyk7DQorDQorCS8qDQorCSAq IEluIG5vcm1hbCBjYXNlLCB0aGUgbmV4dCBTT0YgSVNSIHNob3VsZCBjb21lIGFmdGVyIEhXIFBB U1MxIERPTkUgSVNSLg0KKwkgKiBJZiB0aGVzZSB0d28gSVNScyBjb21lIHRvZ2V0aGVyLCBwcmlu dCB3YXJuaW5nIG1zZyB0byBoaW50Lg0KKwkgKi8NCisJaWYgKChpcnFfc3RhdHVzICYgU09GX0lO VF9TVCkgJiYgKGlycV9zdGF0dXMgJiBIV19QQVNTMV9ET05fU1QpKQ0KKwkJZGV2X2RiZyhkZXYs ICJzb2ZfZG9uZSBibG9jayBjbnQ6JWRcbiIsIHAxX2Rldi0+c29mX2NvdW50KTsNCisNCisJLyog RGUtcXVldWUgZnJhbWUgKi8NCisJaWYgKGlycV9zdGF0dXMgJiBTV19QQVNTMV9ET05fU1QpIHsN CisJCW10a19jYW1fZGV2X2RlcXVldWVfcmVxX2ZyYW1lKCZwMV9kZXYtPmNhbV9kZXYsDQorCQkJ CQkgICAgICBwMV9kZXYtPmRlcXVldWVkX2ZyYW1lX3NlcV9ubyk7DQorCQltdGtfY2FtX2Rldl9y ZXFfdHJ5X3F1ZXVlKCZwMV9kZXYtPmNhbV9kZXYpOw0KKwl9DQorDQorCS8qIFNhdmUgZnJhbWUg aW5mby4gJiB1cGRhdGUgQ1EgYWRkcmVzcyBmb3IgZnJhbWUgSFcgZW4tcXVldWUgKi8NCisJaWYg KGlycV9zdGF0dXMgJiBTT0ZfSU5UX1NUKQ0KKwkJaXNwX2lycV9oYW5kbGVfc29mKHAxX2Rldiwg ZGVxdWV1ZWRfZnJhbWVfc2VxX25vKTsNCisNCisJLyogQ2hlY2sgSVNQIGVycm9yIHN0YXR1cyAq Lw0KKwlpZiAoZXJyX3N0YXR1cykgew0KKwkJZGV2X2VycihkZXYsICJpbnRfZXJyOjB4JXggMHgl eFxuIiwgaXJxX3N0YXR1cywgZXJyX3N0YXR1cyk7DQorCQkvKiBTaG93IERNQSBlcnJvcnMgaW4g ZGV0YWlsICovDQorCQlpZiAoZXJyX3N0YXR1cyAmIERNQV9FUlJfU1QpDQorCQkJaXNwX2lycV9o YW5kbGVfZG1hX2VycihwMV9kZXYpOw0KKwl9DQorDQorCWRldl9kYmcoZGV2LCAiU09GOiVkIGly cToweCV4LCBkbWE6MHgleCwgZnJhbWVfbnVtOiVkXG4iLA0KKwkJcDFfZGV2LT5zb2ZfY291bnQs IGlycV9zdGF0dXMsIGRtYV9zdGF0dXMsDQorCQlkZXF1ZXVlZF9mcmFtZV9zZXFfbm8pOw0KKw0K KwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNwX3NldHVwX3NjcF9y cHJvYyhzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKnAxX2RldiwNCisJCQkgICAgICAgc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHAxX2Rl di0+ZGV2Ow0KKwlkbWFfYWRkcl90IGFkZHI7DQorCXZvaWQgKnB0cjsNCisJaW50IHJldDsNCisN CisJcDFfZGV2LT5zY3AgPSBzY3BfZ2V0KHBkZXYpOw0KKwlpZiAoIXAxX2Rldi0+c2NwKSB7DQor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgc2NwIGRldmljZVxuIik7DQorCQlyZXR1cm4g LUVOT0RFVjsNCisJfQ0KKw0KKwlwMV9kZXYtPnJwcm9jX2hhbmRsZSA9IHNjcF9nZXRfcnByb2Mo cDFfZGV2LT5zY3ApOw0KKwlkZXZfZGJnKGRldiwgInAxIHJwcm9jX3BoYW5kbGU6IDB4JXBLXG4i LCBwMV9kZXYtPnJwcm9jX2hhbmRsZSk7DQorCXAxX2Rldi0+Y2FtX2Rldi5zbWVtX2RldiA9IHNj cF9nZXRfZGV2aWNlKHAxX2Rldi0+c2NwKTsNCisNCisJLyoNCisJICogQWxsb2NhdGUgY29oZXJl bnQgcmVzZXJ2ZWQgbWVtb3J5IGZvciBTQ1AgZmlybXdhcmUgdXNhZ2UuDQorCSAqIFRoZSBzaXpl IG9mIFNDUCBjb21wb3NlcidzIG1lbW9yeSBpcyBmaXhlZCB0byAweDIwMDAwMA0KKwkgKiBmb3Ig dGhlIHJlcXVpcmVtZW50IG9mIGZpcm13YXJlLg0KKwkgKi8NCisJcHRyID0gZG1hX2FsbG9jX2Nv aGVyZW50KHAxX2Rldi0+Y2FtX2Rldi5zbWVtX2RldiwNCisJCQkJIE1US19JU1BfQ09NUE9TRVJf TUVNX1NJWkUsICZhZGRyLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFwdHIpIHsNCisJCXJldCA9IC1F Tk9NRU07DQorCQlnb3RvIGZhaWxfcHV0X3NjcDsNCisJfQ0KKw0KKwlwMV9kZXYtPmNvbXBvc2Vy X3NjcF9hZGRyID0gYWRkcjsNCisJcDFfZGV2LT5jb21wb3Nlcl92aXJ0X2FkZHIgPSBwdHI7DQor CWRldl9kYmcoZGV2LCAic2NwIGFkZHI6JXBhZCB2YTolcEtcbiIsICZhZGRyLCBwdHIpOw0KKw0K KwkvKg0KKwkgKiBUaGlzIHJlc2VydmVkIG1lbW9yeSBpcyBhbHNvIGJlIHVzZWQgYnkgSVNQIFAx IEhXLg0KKwkgKiBOZWVkIHRvIGdldCBpb3ZhIGFkZHJlc3MgZm9yIElTUCBQMSBETUEuDQorCSAq Lw0KKwlhZGRyID0gZG1hX21hcF9yZXNvdXJjZShkZXYsIGFkZHIsIE1US19JU1BfQ09NUE9TRVJf TUVNX1NJWkUsDQorCQkJCURNQV9UT19ERVZJQ0UsIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpOw0K KwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBhZGRyKSkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gbWFwIHNjcCBpb3ZhXG4iKTsNCisJCXJldCA9IC1FTk9NRU07DQorCQlnb3RvIGZh aWxfZnJlZV9tZW07DQorCX0NCisJcDFfZGV2LT5jb21wb3Nlcl9pb3ZhID0gYWRkcjsNCisJZGV2 X2RiZyhkZXYsICJzY3AgaW92YSBhZGRyOiVwYWRcbiIsICZhZGRyKTsNCisNCisJcmV0dXJuIDA7 DQorDQorZmFpbF9mcmVlX21lbToNCisJZG1hX2ZyZWVfY29oZXJlbnQocDFfZGV2LT5jYW1fZGV2 LnNtZW1fZGV2LCBNVEtfSVNQX0NPTVBPU0VSX01FTV9TSVpFLA0KKwkJCSAgcDFfZGV2LT5jb21w b3Nlcl92aXJ0X2FkZHIsDQorCQkJICBwMV9kZXYtPmNvbXBvc2VyX3NjcF9hZGRyKTsNCisJcDFf ZGV2LT5jb21wb3Nlcl9zY3BfYWRkciA9IDA7DQorZmFpbF9wdXRfc2NwOg0KKwlzY3BfcHV0KHAx X2Rldi0+c2NwKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNwX3Rl YXJkb3duX3NjcF9ycHJvYyhzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZpY2UgKnAxX2RldikNCit7DQor CWRtYV9mcmVlX2NvaGVyZW50KHAxX2Rldi0+Y2FtX2Rldi5zbWVtX2RldiwgTVRLX0lTUF9DT01Q T1NFUl9NRU1fU0laRSwNCisJCQkgIHAxX2Rldi0+Y29tcG9zZXJfdmlydF9hZGRyLA0KKwkJCSAg cDFfZGV2LT5jb21wb3Nlcl9zY3BfYWRkcik7DQorCXAxX2Rldi0+Y29tcG9zZXJfc2NwX2FkZHIg PSAwOw0KKwlzY3BfcHV0KHAxX2Rldi0+c2NwKTsNCit9DQorDQorc3RhdGljIGludCBtdGtfaXNw X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IG10a19pc3BfcDFf ZGV2aWNlICpwMV9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJdTMyIHZhbDsNCisJaW50 IHJldDsNCisNCisJZGV2X2RiZyhkZXYsICItICVzXG4iLCBfX2Z1bmNfXyk7DQorDQorCWlmIChw bV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQ0KKwkJcmV0dXJuIDA7DQorDQorCS8qIERpc2FibGUg SVNQJ3MgdmlldyBmaW5kZXIgYW5kIHdhaXQgZm9yIFRHIGlkbGUgaWYgcG9zc2libGUgKi8NCisJ ZGV2X2RiZyhkZXYsICJjYW0gc3VzcGVuZCwgZGlzYWJsZSBWRlxuIik7DQorCXZhbCA9IHJlYWRs KHAxX2Rldi0+cmVncyArIFJFR19UR19WRl9DT04pOw0KKwl3cml0ZWwodmFsICYgKH5UR19WRl9D T05fVkZEQVRBX0VOKSwgcDFfZGV2LT5yZWdzICsgUkVHX1RHX1ZGX0NPTik7DQorCXJlYWRsX3Bv bGxfdGltZW91dF9hdG9taWMocDFfZGV2LT5yZWdzICsgUkVHX1RHX0lOVEVSX1NULCB2YWwsDQor CQkJCSAgKHZhbCAmIFRHX0NTX01BU0spID09IFRHX0lETEVfU1QsDQorCQkJCSAgVVNFQ19QRVJf TVNFQywgTVRLX0lTUF9TVE9QX0hXX1RJTUVPVVQpOw0KKw0KKwkvKiBEaXNhYmxlIENNT1MgKi8N CisJdmFsID0gcmVhZGwocDFfZGV2LT5yZWdzICsgUkVHX1RHX1NFTl9NT0RFKTsNCisJd3JpdGVs KHZhbCAmICh+VEdfU0VOX01PREVfQ01PU19FTiksIHAxX2Rldi0+cmVncyArIFJFR19UR19TRU5f TU9ERSk7DQorDQorCS8qIEZvcmNlIElTUCBIVyB0byBpZGxlICovDQorCXJldCA9IHBtX3J1bnRp bWVfZm9yY2Vfc3VzcGVuZChkZXYpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBmb3JjZSBzdXNwZW5kOiVkXG4iLCByZXQpOw0KKwkJZ290byByZWVuYWJsZV9odzsN CisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCityZWVuYWJsZV9odzoNCisJdmFsID0gcmVhZGwocDFf ZGV2LT5yZWdzICsgUkVHX1RHX1NFTl9NT0RFKTsNCisJd3JpdGVsKHZhbCB8IFRHX1NFTl9NT0RF X0NNT1NfRU4sIHAxX2Rldi0+cmVncyArIFJFR19UR19TRU5fTU9ERSk7DQorCXZhbCA9IHJlYWRs KHAxX2Rldi0+cmVncyArIFJFR19UR19WRl9DT04pOw0KKwl3cml0ZWwodmFsIHwgVEdfVkZfQ09O X1ZGREFUQV9FTiwgcDFfZGV2LT5yZWdzICsgUkVHX1RHX1ZGX0NPTik7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2lzcF9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQ0KK3sNCisJc3RydWN0IG10a19pc3BfcDFfZGV2aWNlICpwMV9kZXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCisJdTMyIHZhbDsNCisJaW50IHJldDsNCisNCisJZGV2X2RiZyhkZXYsICIt ICVzXG4iLCBfX2Z1bmNfXyk7DQorDQorCWlmIChwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQ0K KwkJcmV0dXJuIDA7DQorDQorCS8qIEZvcmNlIElTUCBIVyB0byByZXN1bWUgKi8NCisJcmV0ID0g cG1fcnVudGltZV9mb3JjZV9yZXN1bWUoZGV2KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7 DQorDQorCS8qIEVuYWJsZSBDTU9TICovDQorCWRldl9kYmcoZGV2LCAiY2FtIHJlc3VtZSwgZW5h YmxlIENNT1MvVkZcbiIpOw0KKwl2YWwgPSByZWFkbChwMV9kZXYtPnJlZ3MgKyBSRUdfVEdfU0VO X01PREUpOw0KKwl3cml0ZWwodmFsIHwgVEdfU0VOX01PREVfQ01PU19FTiwgcDFfZGV2LT5yZWdz ICsgUkVHX1RHX1NFTl9NT0RFKTsNCisNCisJLyogRW5hYmxlIFZGICovDQorCXZhbCA9IHJlYWRs KHAxX2Rldi0+cmVncyArIFJFR19UR19WRl9DT04pOw0KKwl3cml0ZWwodmFsIHwgVEdfVkZfQ09O X1ZGREFUQV9FTiwgcDFfZGV2LT5yZWdzICsgUkVHX1RHX1ZGX0NPTik7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IG10a19pc3BfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikNCit7DQorCXN0cnVjdCBtdGtfaXNwX3AxX2RldmljZSAqcDFfZGV2ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQorDQorCWRldl9kYmcoZGV2LCAiJXM6ZGlzYWJsZSBjbG9ja1xuIiwg X19mdW5jX18pOw0KKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShwMV9kZXYtPm51bV9jbGtz LCBwMV9kZXYtPmNsa3MpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtf aXNwX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBtdGtf aXNwX3AxX2RldmljZSAqcDFfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCWludCByZXQ7 DQorDQorCWRldl9kYmcoZGV2LCAiJXM6ZW5hYmxlIGNsb2NrXG4iLCBfX2Z1bmNfXyk7DQorCXJl dCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKHAxX2Rldi0+bnVtX2Nsa3MsIHAxX2Rldi0+Y2xr cyk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9j azolZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbXRrX2lzcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQ0KK3sNCisJLyogTGlzdCBvZiBjbG9ja3MgcmVxdWlyZWQgYnkgaXNwIGNhbSAqLw0KKwlzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IGNsa19uYW1lc1tdID0gew0KKwkJImNhbXN5c19jYW1fY2dw ZG4iLCAiY2Ftc3lzX2NhbXRnX2NncGRuIg0KKwl9Ow0KKwlzdHJ1Y3QgbXRrX2lzcF9wMV9kZXZp Y2UgKnAxX2RldjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJc3RydWN0 IHJlc291cmNlICpyZXM7DQorCWludCBpcnEsIHJldCwgaTsNCisNCisJcDFfZGV2ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpwMV9kZXYpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFwMV9kZXYp DQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcDFfZGV2LT5kZXYgPSBkZXY7DQorCWRldl9zZXRf ZHJ2ZGF0YShkZXYsIHAxX2Rldik7DQorDQorCS8qDQorCSAqIE5vdyBvbmx5IHN1cHBvcnQgc2lu Z2xlIENBTSB3aXRoIENBTSBCLg0KKwkgKiBHZXQgQ0FNIEIgcmVnaXN0ZXIgYmFzZSB3aXRoIENB TSBCIGluZGV4Lg0KKwkgKiBTdXBwb3J0IG11bHRpcGxlIENBTXMgaW4gZnV0dXJlLg0KKwkgKi8N CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBNVEtf SVNQX0NBTV9JRF9CKTsNCisJcDFfZGV2LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsNCisJaWYgKElTX0VSUihwMV9kZXYtPnJlZ3MpKSB7DQorCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byBtYXAgcmVpc3RlciBiYXNlXG4iKTsNCisJCXJldHVybiBQVFJfRVJSKHAxX2Rl di0+cmVncyk7DQorCX0NCisJZGV2X2RiZyhkZXYsICJjYW0sIG1hcF9hZGRyPTB4JXBLXG4iLCBw MV9kZXYtPnJlZ3MpOw0KKw0KKwkvKg0KKwkgKiBUaGUgY2FtX3N5cyB1bml0IG9ubHkgc3VwcG9y dHMgcmVnLiwgYnV0IGhhcyBubyBJUlEgc3VwcG9ydC4NCisJICogVGhlIHJlZy4gJiBJUlEgaW5k ZXggaXMgc2hpZnRlZCB3aXRoIDEgZm9yIENBTSBCIGluIERUUy4NCisJICovDQorCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgTVRLX0lTUF9DQU1fSURfQiAtIDEpOw0KKwlpZiAoIWlycSkg ew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlycVxuIik7DQorCQlyZXR1cm4gLUVO T0RFVjsNCisJfQ0KKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBpc3BfaXJxX2Nh bSwgMCwgZGV2X25hbWUoZGV2KSwNCisJCQkgICAgICAgcDFfZGV2KTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnE9JWRcbiIsIGlycSk7DQorCQly ZXR1cm4gcmV0Ow0KKwl9DQorCWRldl9kYmcoZGV2LCAicmVnaXN0ZXJlZCBpcnE9JWRcbiIsIGly cSk7DQorCXNwaW5fbG9ja19pbml0KCZwMV9kZXYtPnNwaW5sb2NrX2lycSk7DQorDQorCXAxX2Rl di0+bnVtX2Nsa3MgPSBBUlJBWV9TSVpFKGNsa19uYW1lcyk7DQorCXAxX2Rldi0+Y2xrcyA9IGRl dm1fa2NhbGxvYyhkZXYsIHAxX2Rldi0+bnVtX2Nsa3MsDQorCQkJCSAgICBzaXplb2YoKnAxX2Rl di0+Y2xrcyksIEdGUF9LRVJORUwpOw0KKwlpZiAoIXAxX2Rldi0+Y2xrcykNCisJCXJldHVybiAt RU5PTUVNOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcDFfZGV2LT5udW1fY2xrczsgKytpKQ0KKwkJ cDFfZGV2LT5jbGtzW2ldLmlkID0gY2xrX25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX2Nsa19i dWxrX2dldChkZXYsIHAxX2Rldi0+bnVtX2Nsa3MsIHAxX2Rldi0+Y2xrcyk7DQorCWlmIChyZXQp IHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBpc3AgY2FtIGNsb2NrOiVkXG4iLCBy ZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBpc3Bfc2V0dXBfc2NwX3Jwcm9j KHAxX2RldiwgcGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlwbV9ydW50 aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXYsIE1US19JU1BfQVVUT1NVU1BFTkRfREVMQVlf TVMpOw0KKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOw0KKwlwbV9ydW50aW1lX2Vu YWJsZShkZXYpOw0KKw0KKwkvKiBJbml0aWFsaXplIHRoZSB2NGwyIGNvbW1vbiBwYXJ0ICovDQor CXJldCA9IG10a19jYW1fZGV2X2luaXQocGRldiwgJnAxX2Rldi0+Y2FtX2Rldik7DQorCWlmIChy ZXQpIHsNCisJCWlzcF90ZWFyZG93bl9zY3BfcnByb2MocDFfZGV2KTsNCisJCXJldHVybiByZXQ7 DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2lzcF9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7DQorCXN0cnVjdCBtdGtfaXNwX3AxX2RldmljZSAqcDFfZGV2ID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQorDQorCW10a19jYW1fZGV2X2NsZWFudXAoJnAxX2Rldi0+Y2FtX2Rl dik7DQorCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTsNCisJcG1fcnVudGlt ZV9kaXNhYmxlKGRldik7DQorCWRtYV91bm1hcF9wYWdlX2F0dHJzKGRldiwgcDFfZGV2LT5jb21w b3Nlcl9pb3ZhLA0KKwkJCSAgICAgTVRLX0lTUF9DT01QT1NFUl9NRU1fU0laRSwgRE1BX1RPX0RF VklDRSwNCisJCQkgICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpOw0KKwlpc3BfdGVhcmRvd25f c2NwX3Jwcm9jKHAxX2Rldik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qg c3RydWN0IGRldl9wbV9vcHMgbXRrX2lzcF9wbV9vcHMgPSB7DQorCVNFVF9TWVNURU1fU0xFRVBf UE1fT1BTKG10a19pc3BfcG1fc3VzcGVuZCwgbXRrX2lzcF9wbV9yZXN1bWUpDQorCVNFVF9SVU5U SU1FX1BNX09QUyhtdGtfaXNwX3J1bnRpbWVfc3VzcGVuZCwgbXRrX2lzcF9ydW50aW1lX3Jlc3Vt ZSwNCisJCQkgICBOVUxMKQ0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2lzcF9vZl9pZHNbXSA9IHsNCisJey5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE4 My1jYW1pc3AiLH0sDQorCXt9DQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfaXNw X29mX2lkcyk7DQorDQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2lzcF9kcml2 ZXIgPSB7DQorCS5wcm9iZSAgID0gbXRrX2lzcF9wcm9iZSwNCisJLnJlbW92ZSAgPSBtdGtfaXNw X3JlbW92ZSwNCisJLmRyaXZlciAgPSB7DQorCQkubmFtZSAgPSAibXRrLWNhbS1wMSIsDQorCQku b2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIobXRrX2lzcF9vZl9pZHMpLA0KKwkJLnBtICAg ICA9ICZtdGtfaXNwX3BtX29wcywNCisJfQ0KK307DQorDQorbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihtdGtfaXNwX2RyaXZlcik7DQorDQorTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlayBJU1Ag UDEgZHJpdmVyIik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0taHcuaCBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0taHcuaA0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uODM3NjYyZjkyYTVlDQotLS0g L2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2Nh bS9tdGtfY2FtLWh3LmgNCkBAIC0wLDAgKzEsNjQgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5IE1lZGlhVGVrIElu Yy4NCisgKi8NCisNCisjaWZuZGVmIF9fTVRLX0NBTV9IV19IX18NCisjZGVmaW5lIF9fTVRLX0NB TV9IV19IX18NCisNCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCisNCisjaW5jbHVkZSAibXRr X2NhbS5oIg0KKyNpbmNsdWRlICJtdGtfY2FtLWlwaS5oIg0KKw0KKy8qDQorICogc3RydWN0IG10 a19pc3BfcDFfZGV2aWNlIC0gdGhlIE1lZGlhdGVrIElTUCBQMSBkZXZpY2UgaW5mb3JtYXRpb24N CisgKg0KKyAqIEBkZXY6IFBvaW50ZXIgdG8gZGV2aWNlLg0KKyAqIEBzY3BfcGRldjogUG9pbnRl ciB0byBTQ1AgcGxhdGZvcm0gZGV2aWNlLg0KKyAqIEBycHJvY19oYW5kbGU6IFBvaW50ZXIgdG8g bmV3IHJlbW90ZXByb2MgaW5zdGFuY2UuDQorICogQGNhbV9kZXY6IEVtYmVkZGVkIHN0cnVjdCBj YW1fZGV2DQorICogQHJlZ3M6IENhbWVyYSBJU1AgSFcgYmFzZSByZWdpc3RlciBhZGRyZXNzDQor ICogQG51bV9jbGtzOiBUaGUgbnVtYmVyIG9mIGRyaXZlcidzIGNsb2Nrcw0KKyAqIEBjbGtzOiBU aGUgY2xvY2sgZGF0YSBhcnJheQ0KKyAqIEBzcGlubG9ja19pcnE6IFVzZWQgdG8gcHJvdGVjdCBy ZWdpc3RlciByZWFkL3dyaXRlIGRhdGENCisgKiBAZW5xdWV1ZWRfZnJhbWVfc2VxX25vOiBGcmFt ZSBzZXF1ZW5jZSBudW1iZXIgb2YgZW5xdWV1ZWQgZnJhbWUNCisgKiBAZGVxdWV1ZWRfZnJhbWVf c2VxX25vOiBGcmFtZSBzZXF1ZW5jZSBudW1iZXIgb2YgZGVxdWV1ZWQgZnJhbWUNCisgKiBAY29t cG9zZWRfZnJhbWVfc2VxX25vOiBGcmFtZSBzZXF1ZW5jZSBudW1iZXIgb2YgY29tcG9zZWQgZnJh bWUNCisgKiBAdGltZXN0YW1wOiBGcmFtZSB0aW1lc3RhbXAgaW4gbnMNCisgKiBAc29mX2NvdW50 OiBTT0YgY291bnRlcg0KKyAqIEBjb21wb3Nlcl93cTogVGhlIHdvcmsgcXVldWUgZm9yIGZyYW1l IHJlcXVlc3QgY29tcG9zaW5nDQorICogQGNvbXBvc2VyX3NjcF9hZGRyOiBTQ1AgYWRkcmVzcyBv ZiBJU1AgY29tcG9zZXIgbWVtb3J5DQorICogQGNvbXBvc2VyX2lvdmE6IERNQSBhZGRyZXNzIG9m IElTUCBjb21wb3NlciBtZW1vcnkNCisgKiBAdmlydF9hZGRyOiBWaXJ0dWFsIGFkZHJlc3Mgb2Yg SVNQIGNvbXBvc2VyIG1lbW9yeQ0KKyAqDQorICovDQorc3RydWN0IG10a19pc3BfcDFfZGV2aWNl IHsNCisJc3RydWN0IGRldmljZSAqZGV2Ow0KKwlzdHJ1Y3QgbXRrX3NjcCAqc2NwOw0KKwlzdHJ1 Y3QgcnByb2MgKnJwcm9jX2hhbmRsZTsNCisJc3RydWN0IG10a19jYW1fZGV2IGNhbV9kZXY7DQor CXZvaWQgX19pb21lbSAqcmVnczsNCisJdW5zaWduZWQgaW50IG51bV9jbGtzOw0KKwlzdHJ1Y3Qg Y2xrX2J1bGtfZGF0YSAqY2xrczsNCisJLyogVXNlZCB0byBwcm90ZWN0IHJlZ2lzdGVyIHJlYWQv d3JpdGUgZGF0YSAqLw0KKwlzcGlubG9ja190IHNwaW5sb2NrX2lycTsNCisJdW5zaWduZWQgaW50 IGVucXVldWVkX2ZyYW1lX3NlcV9ubzsNCisJdW5zaWduZWQgaW50IGRlcXVldWVkX2ZyYW1lX3Nl cV9ubzsNCisJdW5zaWduZWQgaW50IGNvbXBvc2VkX2ZyYW1lX3NlcV9ubzsNCisJdTggc29mX2Nv dW50Ow0KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY29tcG9zZXJfd3E7DQorCWRtYV9hZGRy X3QgY29tcG9zZXJfc2NwX2FkZHI7DQorCWRtYV9hZGRyX3QgY29tcG9zZXJfaW92YTsNCisJdm9p ZCAqY29tcG9zZXJfdmlydF9hZGRyOw0KK307DQorDQoraW50IG10a19pc3BfaHdfaW5pdChzdHJ1 Y3QgbXRrX2NhbV9kZXYgKmNhbV9kZXYpOw0KK2ludCBtdGtfaXNwX2h3X3JlbGVhc2Uoc3RydWN0 IG10a19jYW1fZGV2ICpjYW1fZGV2KTsNCit2b2lkIG10a19pc3BfaHdfY29uZmlnKHN0cnVjdCBt dGtfY2FtX2RldiAqY2FtX2RldiwNCisJCSAgICAgICBzdHJ1Y3QgcDFfY29uZmlnX3BhcmFtICpj b25maWdfcGFyYW0pOw0KK3ZvaWQgbXRrX2lzcF9zdHJlYW0oc3RydWN0IG10a19jYW1fZGV2ICpj YW1fZGV2LCBpbnQgb24pOw0KK3ZvaWQgbXRrX2lzcF9yZXFfZW5xdWV1ZShzdHJ1Y3QgbXRrX2Nh bV9kZXYgKmNhbV9kZXYsDQorCQkJIHN0cnVjdCBtdGtfY2FtX2Rldl9yZXF1ZXN0ICpyZXEpOw0K Kw0KKyNlbmRpZiAvKiBfX01US19DQU1fSFdfSF9fICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS1pcGkuaCBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0taXBpLmgNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjk4MWI2MzRkZDkxZg0KLS0tIC9kZXYv bnVsbA0KKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vbXRr X2NhbS1pcGkuaA0KQEAgLTAsMCArMSwyMjIgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5IE1lZGlhVGVrIEluYy4N CisgKi8NCisNCisjaWZuZGVmIF9fTVRLX0NBTV9JUElfSF9fDQorI2RlZmluZSBfX01US19DQU1f SVBJX0hfXw0KKw0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKw0KKy8qDQorICogc3RydWN0 IGltZ19zaXplIC0gSW1hZ2Ugc2l6ZSBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIEB3OiBJbWFnZSB3 aWR0aCwgdGhlIHVuaXQgaXMgcGl4ZWwNCisgKiBAaDogSW1hZ2UgaGVpZ2h0LCB0aGUgdW5pdCBp cyBwaXhlbA0KKyAqIEB4c2l6ZTogQnl0ZXMgcGVyIGxpbmUgYmFzZWQgb24gd2lkdGguDQorICog QHN0cmlkZTogQnl0ZXMgcGVyIGxpbmUgd2hlbiBjaGFuZ2luZyBsaW5lLg0KKyAqICAgICAgICAg IFN0cmlkZSBpcyBiYXNlZCBvbiB4c2l6ZSArIEhXIGNvbnN0cmFpbihieXRlIGFsaWduKS4NCisg Kg0KKyAqLw0KK3N0cnVjdCBpbWdfc2l6ZSB7DQorCXUzMiB3Ow0KKwl1MzIgaDsNCisJdTMyIHhz aXplOw0KKwl1MzIgc3RyaWRlOw0KK30gX19wYWNrZWQ7DQorDQorLyoNCisgKiBzdHJ1Y3QgcDFf aW1nX2Nyb3AgLSBpbWFnZSBjb3JwIGluZm9ybWF0aW9uDQorICoNCisgKiBAbGVmdDogVGhlIGxl ZnQgb2YgY3JvcCBhcmVhLg0KKyAqIEB0b3A6IFRoZSB0b3Agb2YgY3JvcCBhcmVhLg0KKyAqIEB3 aWR0aDogVGhlIHdpZHRoIG9mIGNyb3AgYXJlYS4NCisgKiBAaGVpZ2h0OiBUaGUgaGVpZ2h0IG9m IGNyb3AgYXJlYS4NCisgKg0KKyAqLw0KK3N0cnVjdCBwMV9pbWdfY3JvcCB7DQorCXUzMiBsZWZ0 Ow0KKwl1MzIgdG9wOw0KKwl1MzIgd2lkdGg7DQorCXUzMiBoZWlnaHQ7DQorfSBfX3BhY2tlZDsN CisNCisvKg0KKyAqIHN0cnVjdCBkbWFfYnVmZmVyIC0gRE1BIGJ1ZmZlciBhZGRyZXNzIGluZm9y bWF0aW9uDQorICoNCisgKiBAaW92YTogRE1BIGFkZHJlc3MgZm9yIElTUCBETUEgZGV2aWNlDQor ICogQHNjcF9hZGRyOiBTQ1AgYWRkcmVzcyBmb3IgZXh0ZXJuYWwgY28tcHJvY2VzcyB1bml0DQor ICoNCisgKi8NCitzdHJ1Y3QgZG1hX2J1ZmZlciB7DQorCXUzMiBpb3ZhOw0KKwl1MzIgc2NwX2Fk ZHI7DQorfSBfX3BhY2tlZDsNCisNCisvKg0KKyAqIHN0cnVjdCBwMV9pbWdfb3V0cHV0IC0gSVNQ IFAxIGltYWdlIG91dHB1dCBpbmZvcm1hdGlvbg0KKyAqDQorICogQGJ1ZmZlcjogRE1BIGJ1ZmZl ciBhZGRyZXNzIG9mIGltYWdlLg0KKyAqIEBzaXplOiBUaGUgaW1hZ2Ugc2l6ZSBjb25maWd1cmF0 aW9uLg0KKyAqIEBjcm9wOiBUaGUgY3JvcCBjb25maWd1cmF0aW9uLg0KKyAqIEBwaXhlbF9iaXRz OiBUaGUgYml0cyBwZXIgaW1hZ2UgcGl4ZWwuDQorICogQGltZ19mbXQ6IFRoZSBpbWFnZSBmb3Jt YXQuDQorICoNCisgKi8NCitzdHJ1Y3QgcDFfaW1nX291dHB1dCB7DQorCXN0cnVjdCBkbWFfYnVm ZmVyIGJ1ZmZlcjsNCisJc3RydWN0IGltZ19zaXplIHNpemU7DQorCXN0cnVjdCBwMV9pbWdfY3Jv cCBjcm9wOw0KKwl1OCBwaXhlbF9iaXRzOw0KKwl1MzIgaW1nX2ZtdDsNCit9IF9fcGFja2VkOw0K Kw0KKy8qDQorICogc3RydWN0IGNmZ19pbl9wYXJhbSAtIEltYWdlIGlucHV0IHBhcmFtZXRlcnMg c3RydWN0dXJlLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgaXQgY29tZXMg ZnJvbSBzZW5zb3IgaW5mb3JtYXRpb24uDQorICoNCisgKiBAY29udGludW91czogSW5kaWNhdGUg dGhlIHNlbnNvciBtb2RlLiBDb250aW51b3VzIG9yIHNpbmdsZSBzaG90Lg0KKyAqIEBzdWJzYW1w bGU6IEluZGljYXRlIHRvIGVuYWJsZXMgU09GIHN1YnNhbXBsZSBvciBub3QuDQorICogQHBpeGVs X21vZGU6IERlc2NyaWJlIDEvMi80IHBpeGVscyBwZXIgY2xvY2sgY3ljbGUuDQorICogQGRhdGFf cGF0dGVybjogRGVzY3JpYmUgaW5wdXQgZGF0YSBwYXR0ZXJuLg0KKyAqIEByYXdfcGl4ZWxfaWQ6 IEJheWVyIHNlcXVlbmNlLg0KKyAqIEB0Z19mcHM6IFRoZSBmcHMgcmF0ZSBvZiBURyAodGltZSBn ZW5lcmF0b3IpLg0KKyAqIEBpbWdfZm10OiBUaGUgaW1hZ2UgZm9ybWF0IG9mIGlucHV0IHNvdXJj ZS4NCisgKiBAcDFfaW1nX2Nyb3A6IFRoZSBjcm9wIGNvbmZpZ3VyYXRpb24gb2YgaW5wdXQgc291 cmNlLg0KKyAqDQorICovDQorc3RydWN0IGNmZ19pbl9wYXJhbSB7DQorCXU4IGNvbnRpbnVvdXM7 DQorCXU4IHN1YnNhbXBsZTsNCisJdTggcGl4ZWxfbW9kZTsNCisJdTggZGF0YV9wYXR0ZXJuOw0K Kwl1OCByYXdfcGl4ZWxfaWQ7DQorCXUxNiB0Z19mcHM7DQorCXUzMiBpbWdfZm10Ow0KKwlzdHJ1 Y3QgcDFfaW1nX2Nyb3AgY3JvcDsNCit9IF9fcGFja2VkOw0KKw0KKy8qDQorICogc3RydWN0IGNm Z19tYWluX291dF9wYXJhbSAtIFRoZSBpbWFnZSBvdXRwdXQgcGFyYW1ldGVycyBvZiBtYWluIHN0 cmVhbS4NCisgKg0KKyAqIEBieXBhc3M6IEluZGljYXRlIHRoaXMgZGV2aWNlIGlzIGVuYWJsZWQg b3IgZGlzYWJsZWQgb3Igbm90Lg0KKyAqIEBwdXJlX3JhdzogSW5kaWNhdGUgdGhlIGltYWdlIHBh dGggY29udHJvbC4NCisgKiAgICAgICAgICAgIFRydWU6IHB1cmUgcmF3DQorICogICAgICAgICAg ICBGYWxzZTogcHJvY2Vzc2luZyByYXcNCisgKiBAcHVyZV9yYXdfcGFjazogSW5kaWNhdGUgdGhl IGltYWdlIGlzIHBhY2tlZCBvciBub3QuDQorICogICAgICAgICAgICAgICAgIFRydWU6IHBhY2tl ZCBtb2RlDQorICogICAgICAgICAgICAgICAgIEZhbHNlOiB1bnBhY2tlZCBtb2RlDQorICogQHAx X2ltZ19vdXRwdXQ6IFRoZSBvdXRwdXQgaW1hZ2UgaW5mb3JtYXRpb24uDQorICoNCisgKi8NCitz dHJ1Y3QgY2ZnX21haW5fb3V0X3BhcmFtIHsNCisJdTggYnlwYXNzOw0KKwl1OCBwdXJlX3JhdzsN CisJdTggcHVyZV9yYXdfcGFjazsNCisJc3RydWN0IHAxX2ltZ19vdXRwdXQgb3V0cHV0Ow0KK30g X19wYWNrZWQ7DQorDQorLyoNCisgKiBzdHJ1Y3QgY2ZnX3Jlc2l6ZV9vdXRfcGFyYW0gLSBUaGUg aW1hZ2Ugb3V0cHV0IHBhcmFtZXRlcnMgb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYWNrZWQgb3V0IHN0cmVhbS4NCisgKg0KKyAqIEBieXBhc3M6IEluZGljYXRlIHRoaXMg ZGV2aWNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgb3Igbm90Lg0KKyAqIEBwMV9pbWdfb3V0cHV0 OiBUaGUgb3V0cHV0IGltYWdlIGluZm9ybWF0aW9uLg0KKyAqDQorICovDQorc3RydWN0IGNmZ19y ZXNpemVfb3V0X3BhcmFtIHsNCisJdTggYnlwYXNzOw0KKwlzdHJ1Y3QgcDFfaW1nX291dHB1dCBv dXRwdXQ7DQorfSBfX3BhY2tlZDsNCisNCisvKg0KKyAqIHN0cnVjdCBwMV9jb25maWdfcGFyYW0g LSBJU1AgUDEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLg0KKyAqDQorICogQGNmZ19pbl9wYXJh bTogVGhlIEltYWdlIGlucHV0IHBhcmFtZXRlcnMuDQorICogQGNmZ19tYWluX3BhcmFtOiBUaGUg bWFpbiBvdXRwdXQgaW1hZ2UgcGFyYW1ldGVycy4NCisgKiBAY2ZnX3Jlc2l6ZV9vdXRfcGFyYW06 IFRoZSBwYWNrZWQgb3V0cHV0IGltYWdlIHBhcmFtZXRlcnMuDQorICogQGVuYWJsZWRfZG1hczog VGhlIGVuYWJsZWQgRE1BIHBvcnQgaW5mb3JtYXRpb24uDQorICoNCisgKi8NCitzdHJ1Y3QgcDFf Y29uZmlnX3BhcmFtIHsNCisJc3RydWN0IGNmZ19pbl9wYXJhbSBjZmdfaW5fcGFyYW07DQorCXN0 cnVjdCBjZmdfbWFpbl9vdXRfcGFyYW0gY2ZnX21haW5fcGFyYW07DQorCXN0cnVjdCBjZmdfcmVz aXplX291dF9wYXJhbSBjZmdfcmVzaXplX3BhcmFtOw0KKwl1MzIgZW5hYmxlZF9kbWFzOw0KK30g X19wYWNrZWQ7DQorDQorLyoNCisgKiBzdHJ1Y3QgUDFfbWV0YV9mcmFtZSAtIElTUCBQMSBtZXRh IGZyYW1lIGluZm9ybWF0aW9uLg0KKyAqDQorICogQGVuYWJsZWRfZG1hOiBUaGUgZW5hYmxlZCBE TUEgcG9ydCBpbmZvcm1hdGlvbi4NCisgKiBAdmJfaW5kZXg6IFRoZSBWQjIgaW5kZXggb2YgbWV0 YSBidWZmZXIuDQorICogQG1ldGFfYWRkcjogRE1BIGJ1ZmZlciBhZGRyZXNzIG9mIG1ldGEgYnVm ZmVyLg0KKyAqDQorICovDQorc3RydWN0IFAxX21ldGFfZnJhbWUgew0KKwl1MzIgZW5hYmxlZF9k bWE7DQorCXUzMiB2Yl9pbmRleDsNCisJc3RydWN0IGRtYV9idWZmZXIgbWV0YV9hZGRyOw0KK30g X19wYWNrZWQ7DQorDQorLyoNCisgKiBzdHJ1Y3QgaXNwX2luaXRfaW5mbyAtIElTUCBQMSBjb21w b3NlciBpbml0IGluZm9ybWF0aW9uLg0KKyAqDQorICogQGh3X21vZHVsZTogVGhlIElTUCBDYW1l cmEgSFcgbW9kdWxlIElELg0KKyAqIEBjcV9hZGRyOiBUaGUgRE1BIGFkZHJlc3Mgb2YgY29tcG9z ZXIgbWVtb3J5Lg0KKyAqDQorICovDQorc3RydWN0IGlzcF9pbml0X2luZm8gew0KKwl1OCBod19t b2R1bGU7DQorCXN0cnVjdCBkbWFfYnVmZmVyIGNxX2FkZHI7DQorfSBfX3BhY2tlZDsNCisNCisv Kg0KKyAqIHN0cnVjdCBpc3BfYWNrX2luZm8gLSBJU1AgUDEgSVBJIGNvbW1hbmQgYWNrIGluZm9y bWF0aW9uLg0KKyAqDQorICogQGNtZF9pZDogVGhlIElQSSBjb21tYW5kIElEIGlzIGFja2VkLg0K KyAqIEBmcmFtZV9zZXFfbm86IFRoZSBJUEkgZnJhbWUgc2VxdWVuY2UgbnVtYmVyIGlzIGFja2Vk Lg0KKyAqDQorICovDQorc3RydWN0IGlzcF9hY2tfaW5mbyB7DQorCXU4IGNtZF9pZDsNCisJdTMy IGZyYW1lX3NlcV9ubzsNCit9IF9fcGFja2VkOw0KKw0KKy8qDQorICogVGhlIElQSSBjb21tYW5k IGVudW1lcmF0aW9uLg0KKyAqLw0KK2VudW0gbXRrX2lzcF9zY3BfY21kcyB7DQorCUlTUF9DTURf SU5JVCwNCisJSVNQX0NNRF9DT05GSUcsDQorCUlTUF9DTURfU1RSRUFNLA0KKwlJU1BfQ01EX0RF SU5JVCwNCisJSVNQX0NNRF9BQ0ssDQorCUlTUF9DTURfRlJBTUVfQUNLLA0KKwlJU1BfQ01EX1JF U0VSVkVELA0KK307DQorDQorLyoNCisgKiBzdHJ1Y3QgbXRrX2lzcF9zY3BfcDFfY21kIC0gSVNQ IFAxIElQSSBjb21tYW5kIHN0cmN0dXJlLg0KKyAqDQorICogQGNtZF9pZDogVGhlIElQSSBjb21t YW5kIElELg0KKyAqIEBpbml0X3BhcmFtOiBUaGUgaW5pdCBmb3JtYXRpb24gZm9yIElTUF9DTURf SU5JVC4NCisgKiBAY29uZmlnX3BhcmFtOiBUaGUgY21kIGNvbmZpZ3VyYXRpb24gZm9yIElTUF9D TURfQ09ORklHLg0KKyAqIEBlbmFibGVkX2RtYXM6IFRoZSBtZXRhIGNvbmZpZ3VyYXRpb24gaW5m b3JtYXRpb24gZm9yIElTUF9DTURfQ09ORklHX01FVEEuDQorICogQGlzX3N0cmVhbV9vbjogVGhl IHN0cmVhbSBpbmZvcm1hdGlvbiBmb3IgSVNQX0NNRF9TVFJFQU0uDQorICogQGFja19pbmZvOiBU aGUgY21kIGFjay4gaW5mb3JtYXRpb24gZm9yIElTUF9DTURfQUNLLg0KKyAqDQorICovDQorc3Ry dWN0IG10a19pc3Bfc2NwX3AxX2NtZCB7DQorCXU4IGNtZF9pZDsNCisJdW5pb24gew0KKwkJc3Ry dWN0IGlzcF9pbml0X2luZm8gaW5pdF9wYXJhbTsNCisJCXN0cnVjdCBwMV9jb25maWdfcGFyYW0g Y29uZmlnX3BhcmFtOw0KKwkJdTMyIGVuYWJsZWRfZG1hczsNCisJCXN0cnVjdCBQMV9tZXRhX2Zy YW1lIG1ldGFfZnJhbWU7DQorCQl1OCBpc19zdHJlYW1fb247DQorCQlzdHJ1Y3QgaXNwX2Fja19p bmZvIGFja19pbmZvOw0KKwl9Ow0KK30gX19wYWNrZWQ7DQorDQorI2VuZGlmIC8qIF9fTVRLX0NB TV9JUElfSF9fICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNw L2lzcF81MC9jYW0vbXRrX2NhbS1yZWdzLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1p c3AvaXNwXzUwL2NhbS9tdGtfY2FtLXJlZ3MuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uYWIyMjc3ZjQ1ZmE0DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLXJlZ3MuaA0KQEAgLTAs MCArMSw5NSBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoN CisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLg0KKyAqLw0KKw0KKyNpZm5kZWYg X19NVEtfQ0FNX1JFR1NfSF9fDQorI2RlZmluZSBfX01US19DQU1fUkVHU19IX18NCisNCisvKiBJ U1AgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgUkVHX0NUTF9SQVdfSU5UX0VOCQkweDAw MjANCisjZGVmaW5lIERNQV9FUlJfSU5UX0VOCQkJQklUKDI5KQ0KKw0KKy8qIElTUCBpbnRlcnJ1 cHQgc3RhdHVzICovDQorI2RlZmluZSBSRUdfQ1RMX1JBV19JTlRfU1RBVAkJMHgwMDI0DQorI2Rl ZmluZSBWU19JTlRfU1QJCQlCSVQoMCkNCisjZGVmaW5lIFRHX0VSUl9TVAkJCUJJVCg0KQ0KKyNk ZWZpbmUgVEdfR0JFUlJfU1QJCQlCSVQoNSkNCisjZGVmaW5lIENRX0NPREVfRVJSX1NUCQkJQklU KDYpDQorI2RlZmluZSBDUV9BUEJfRVJSX1NUCQkJQklUKDcpDQorI2RlZmluZSBDUV9WU19FUlJf U1QJCQlCSVQoOCkNCisjZGVmaW5lIEhXX1BBU1MxX0RPTl9TVAkJCUJJVCgxMSkNCisjZGVmaW5l IFNPRl9JTlRfU1QJCQlCSVQoMTIpDQorI2RlZmluZSBBTVhfRVJSX1NUCQkJQklUKDE1KQ0KKyNk ZWZpbmUgUk1YX0VSUl9TVAkJCUJJVCgxNikNCisjZGVmaW5lIEJNWF9FUlJfU1QJCQlCSVQoMTcp DQorI2RlZmluZSBSUlpPX0VSUl9TVAkJCUJJVCgxOCkNCisjZGVmaW5lIEFGT19FUlJfU1QJCQlC SVQoMTkpDQorI2RlZmluZSBJTUdPX0VSUl9TVAkJCUJJVCgyMCkNCisjZGVmaW5lIEFBT19FUlJf U1QJCQlCSVQoMjEpDQorI2RlZmluZSBQU09fRVJSX1NUCQkJQklUKDIyKQ0KKyNkZWZpbmUgTENT T19FUlJfU1QJCQlCSVQoMjMpDQorI2RlZmluZSBCTlJfRVJSX1NUCQkJQklUKDI0KQ0KKyNkZWZp bmUgTFNDSV9FUlJfU1QJCQlCSVQoMjUpDQorI2RlZmluZSBETUFfRVJSX1NUCQkJQklUKDI5KQ0K KyNkZWZpbmUgU1dfUEFTUzFfRE9OX1NUCQkJQklUKDMwKQ0KKw0KKy8qIElTUCBpbnRlcnJ1cHQg MiBzdGF0dXMgKi8NCisjZGVmaW5lIFJFR19DVExfUkFXX0lOVDJfU1RBVAkJMHgwMDM0DQorI2Rl ZmluZSBBRk9fRE9ORV9TVAkJCUJJVCg1KQ0KKyNkZWZpbmUgQUFPX0RPTkVfU1QJCQlCSVQoNykN CisNCisvKiBDb25maWd1cmVzIHNlbnNvciBtb2RlICovDQorI2RlZmluZSBSRUdfVEdfU0VOX01P REUJCQkweDAyMzANCisjZGVmaW5lIFRHX1NFTl9NT0RFX0NNT1NfRU4JCUJJVCgwKQ0KKw0KKy8q IFZpZXcgZmluZGVyIG1vZGUgY29udHJvbCAqLw0KKyNkZWZpbmUgUkVHX1RHX1ZGX0NPTgkJCTB4 MDIzNA0KKyNkZWZpbmUgVEdfVkZfQ09OX1ZGREFUQV9FTgkJQklUKDApDQorDQorLyogVmlldyBm aW5kZXIgbW9kZSBjb250cm9sICovDQorI2RlZmluZSBSRUdfVEdfSU5URVJfU1QJCQkweDAyNmMN CisjZGVmaW5lIFRHX0NTX01BU0sJCQkweDNmMDANCisjZGVmaW5lIFRHX0lETEVfU1QJCQlCSVQo OCkNCisNCisvKiBJTUdPIGVycm9yIHN0YXR1cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgUkVHX0lN R09fRVJSX1NUQVQJCTB4MTM2MA0KKy8qIFJSWk8gZXJyb3Igc3RhdHVzIHJlZ2lzdGVyICovDQor I2RlZmluZSBSRUdfUlJaT19FUlJfU1RBVAkJMHgxMzY0DQorLyogQUFPIGVycm9yIHN0YXR1cyBy ZWdpc3RlciAqLw0KKyNkZWZpbmUgUkVHX0FBT19FUlJfU1RBVAkJMHgxMzY4DQorLyogQUZPIGVy cm9yIHN0YXR1cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgUkVHX0FGT19FUlJfU1RBVAkJMHgxMzZj DQorLyogTENTTyBlcnJvciBzdGF0dXMgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFJFR19MQ1NPX0VS Ul9TVEFUCQkweDEzNzANCisvKiBCUENJIGVycm9yIHN0YXR1cyByZWdpc3RlciAqLw0KKyNkZWZp bmUgUkVHX0JQQ0lfRVJSX1NUQVQJCTB4MTM3Yw0KKy8qIExTQ0kgZXJyb3Igc3RhdHVzIHJlZ2lz dGVyICovDQorI2RlZmluZSBSRUdfTFNDSV9FUlJfU1RBVAkJMHgxMzg0DQorLyogTE1WTyBlcnJv ciBzdGF0dXMgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFJFR19MTVZPX0VSUl9TVEFUCQkweDEzOTAN CisvKiBGTEtPIGVycm9yIHN0YXR1cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgUkVHX0ZMS09fRVJS X1NUQVQJCTB4MTM5NA0KKy8qIFBTTyBlcnJvciBzdGF0dXMgcmVnaXN0ZXIgKi8NCisjZGVmaW5l IFJFR19QU09fRVJSX1NUQVQJCTB4MTNhMA0KKw0KKy8qIENRMCBiYXNlIGFkZHJlc3MgKi8NCisj ZGVmaW5lIFJFR19DUV9USFIwX0JBU0VBRERSCQkweDAxOTgNCisvKiBGcmFtZSBzZXF1ZW5jZSBu dW1iZXIgKi8NCisjZGVmaW5lIFJFR19GUkFNRV9TRVFfTlVNCQkweDEzYjgNCisNCisvKiBJUlEg RXJyb3IgTWFzayAqLw0KKyNkZWZpbmUgSU5UX1NUX01BU0tfQ0FNX0VSUgkJKCBcDQorCQkJCQlU R19FUlJfU1QgfFwNCisJCQkJCVRHX0dCRVJSX1NUIHxcDQorCQkJCQlDUV9DT0RFX0VSUl9TVCB8 XA0KKwkJCQkJQ1FfQVBCX0VSUl9TVCB8XA0KKwkJCQkJQ1FfVlNfRVJSX1NUIHxcDQorCQkJCQlC TlJfRVJSX1NUIHxcDQorCQkJCQlSTVhfRVJSX1NUIHxcDQorCQkJCQlCTVhfRVJSX1NUIHxcDQor CQkJCQlCTlJfRVJSX1NUIHxcDQorCQkJCQlMU0NJX0VSUl9TVCB8XA0KKwkJCQkJRE1BX0VSUl9T VCkNCisNCisjZW5kaWYJLyogX19NVEtfQ0FNX1JFR1NfSF9fICovDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS5jIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4yM2ZkYjhiNGFiYzUNCi0tLSAvZGV2L251 bGwNCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2FtL210a19j YW0uYw0KQEAgLTAsMCArMSwyMDg3IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjANCisvLyBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLg0KKw0KKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCisjaW5j bHVkZSA8bGludXgvb2YuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4NCisjaW5jbHVk ZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPg0KKyNpbmNsdWRlIDxtZWRpYS9t ZWRpYS1lbnRpdHkuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1hc3luYy5oPg0KKyNpbmNsdWRl IDxtZWRpYS92NGwyLWNvbW1vbi5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQor I2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9j dGwuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1tYy5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwy LXN1YmRldi5oPg0KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPg0KKw0K KyNpbmNsdWRlICJtdGtfY2FtLmgiDQorI2luY2x1ZGUgIm10a19jYW0taHcuaCINCisNCisjZGVm aW5lIFJfSU1HTwkJQklUKDApDQorI2RlZmluZSBSX1JSWk8JCUJJVCgxKQ0KKyNkZWZpbmUgUl9B QU8JCUJJVCgzKQ0KKyNkZWZpbmUgUl9BRk8JCUJJVCg0KQ0KKyNkZWZpbmUgUl9MQ1NPCQlCSVQo NSkNCisjZGVmaW5lIFJfTE1WTwkJQklUKDcpDQorI2RlZmluZSBSX0ZMS08JCUJJVCg4KQ0KKyNk ZWZpbmUgUl9QU08JCUJJVCgxMCkNCisNCisjZGVmaW5lIE1US19JU1BfT05FX1BJWEVMX01PREUJ CTENCisjZGVmaW5lIE1US19JU1BfTUlOX1JFU0laRV9SQVRJTwk2DQorI2RlZmluZSBNVEtfSVNQ X01BWF9SVU5OSU5HX0pPQlMJMw0KKw0KKyNkZWZpbmUgTVRLX0NBTV9DSU9fUEFEX1NSQwkJNA0K KyNkZWZpbmUgTVRLX0NBTV9DSU9fUEFEX1NJTksJCTExDQorDQorc3RhdGljIGlubGluZSBzdHJ1 Y3QgbXRrX2NhbV92aWRlb19kZXZpY2UgKg0KK2ZpbGVfdG9fbXRrX2NhbV9ub2RlKHN0cnVjdCBm aWxlICpfX2ZpbGUpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29mKHZpZGVvX2RldmRhdGEoX19m aWxlKSwNCisJCXN0cnVjdCBtdGtfY2FtX3ZpZGVvX2RldmljZSwgdmRldik7DQorfQ0KKw0KK3N0 YXRpYyBpbmxpbmUgc3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNlICoNCittdGtfY2FtX3ZicV90 b192ZGV2KHN0cnVjdCB2YjJfcXVldWUgKl9fdnEpDQorew0KKwlyZXR1cm4gY29udGFpbmVyX29m KF9fdnEsIHN0cnVjdCBtdGtfY2FtX3ZpZGVvX2RldmljZSwgdmJxKTsNCit9DQorDQorc3RhdGlj IGlubGluZSBzdHJ1Y3QgbXRrX2NhbV9kZXZfcmVxdWVzdCAqDQorbXRrX2NhbV9yZXFfdG9fZGV2 X3JlcShzdHJ1Y3QgbWVkaWFfcmVxdWVzdCAqX19yZXEpDQorew0KKwlyZXR1cm4gY29udGFpbmVy X29mKF9fcmVxLCBzdHJ1Y3QgbXRrX2NhbV9kZXZfcmVxdWVzdCwgcmVxKTsNCit9DQorDQorc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX2NhbV9kZXZfYnVmZmVyICoNCittdGtfY2FtX3ZiMl9idWZf dG9fZGV2X2J1ZihzdHJ1Y3QgdmIyX2J1ZmZlciAqX192YikNCit7DQorCXJldHVybiBjb250YWlu ZXJfb2YoX192Yiwgc3RydWN0IG10a19jYW1fZGV2X2J1ZmZlciwgdmJiLnZiMl9idWYpOw0KK30N CisNCitzdGF0aWMgdm9pZCBtdGtfY2FtX2Rldl9qb2JfZG9uZShzdHJ1Y3QgbXRrX2NhbV9kZXYg KmNhbSwNCisJCQkJIHN0cnVjdCBtdGtfY2FtX2Rldl9yZXF1ZXN0ICpyZXEsDQorCQkJCSBlbnVt IHZiMl9idWZmZXJfc3RhdGUgc3RhdGUpDQorew0KKwlzdHJ1Y3QgbWVkaWFfcmVxdWVzdF9vYmpl Y3QgKm9iaiwgKm9ial9wcmV2Ow0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwl1NjQgdHNfZW9m ID0ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7DQorDQorCWlmICghY2FtLT5zdHJlYW1pbmcpDQor CQlyZXR1cm47DQorDQorCWRldl9kYmcoY2FtLT5kZXYsICJqb2IgZG9uZSByZXF1ZXN0OiVzIGZy YW1lX3NlcTolZCBzdGF0ZTolZFxuIiwNCisJCXJlcS0+cmVxLmRlYnVnX3N0ciwgcmVxLT5mcmFt ZV9wYXJhbXMuZnJhbWVfc2VxX25vLCBzdGF0ZSk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShvYmosIG9ial9wcmV2LCAmcmVxLT5yZXEub2JqZWN0cywgbGlzdCkgew0KKwkJc3RydWN0 IHZiMl9idWZmZXIgKnZiOw0KKwkJc3RydWN0IG10a19jYW1fZGV2X2J1ZmZlciAqYnVmOw0KKwkJ c3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNlICpub2RlOw0KKw0KKwkJaWYgKCF2YjJfcmVxdWVz dF9vYmplY3RfaXNfYnVmZmVyKG9iaikpDQorCQkJY29udGludWU7DQorCQl2YiA9IGNvbnRhaW5l cl9vZihvYmosIHN0cnVjdCB2YjJfYnVmZmVyLCByZXFfb2JqKTsNCisJCWJ1ZiA9IG10a19jYW1f dmIyX2J1Zl90b19kZXZfYnVmKHZiKTsNCisJCW5vZGUgPSBtdGtfY2FtX3ZicV90b192ZGV2KHZi LT52YjJfcXVldWUpOw0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5vZGUtPmJ1Zl9saXN0X2xvY2ss IGZsYWdzKTsNCisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbm9kZS0+YnVmX2xpc3RfbG9jaywgZmxhZ3MpOw0KKwkJYnVmLT52YmIuc2VxdWVuY2Ug PSByZXEtPmZyYW1lX3BhcmFtcy5mcmFtZV9zZXFfbm87DQorCQlpZiAoVjRMMl9UWVBFX0lTX09V VFBVVCh2Yi0+dmIyX3F1ZXVlLT50eXBlKSkNCisJCQl2Yi0+dGltZXN0YW1wID0gdHNfZW9mOw0K KwkJZWxzZQ0KKwkJCXZiLT50aW1lc3RhbXAgPSByZXEtPnRpbWVzdGFtcDsNCisJCXZiMl9idWZm ZXJfZG9uZSgmYnVmLT52YmIudmIyX2J1Ziwgc3RhdGUpOw0KKwl9DQorfQ0KKw0KK3N0cnVjdCBt dGtfY2FtX2Rldl9yZXF1ZXN0ICptdGtfY2FtX2Rldl9nZXRfcmVxKHN0cnVjdCBtdGtfY2FtX2Rl diAqY2FtLA0KKwkJCQkJCXVuc2lnbmVkIGludCBmcmFtZV9zZXFfbm8pDQorew0KKwlzdHJ1Y3Qg bXRrX2NhbV9kZXZfcmVxdWVzdCAqcmVxLCAqcmVxX3ByZXY7DQorCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnJ1bm5pbmdfam9iX2xvY2ssIGZsYWdz KTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcmVxX3ByZXYsICZjYW0tPnJ1bm5p bmdfam9iX2xpc3QsIGxpc3QpIHsNCisJCWRldl9kYmcoY2FtLT5kZXYsICJmcmFtZV9zZXE6JWQs IGdldCBmcmFtZV9zZXE6JWRcbiIsDQorCQkJcmVxLT5mcmFtZV9wYXJhbXMuZnJhbWVfc2VxX25v LCBmcmFtZV9zZXFfbm8pOw0KKw0KKwkJLyogTWF0Y2ggYnkgdGhlIGVuLXF1ZXVlZCByZXF1ZXN0 IG51bWJlciAqLw0KKwkJaWYgKHJlcS0+ZnJhbWVfcGFyYW1zLmZyYW1lX3NlcV9ubyA9PSBmcmFt ZV9zZXFfbm8pIHsNCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnJ1bm5pbmdfam9i X2xvY2ssIGZsYWdzKTsNCisJCQlyZXR1cm4gcmVxOw0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmNhbS0+cnVubmluZ19qb2JfbG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4g TlVMTDsNCit9DQorDQordm9pZCBtdGtfY2FtX2Rldl9kZXF1ZXVlX3JlcV9mcmFtZShzdHJ1Y3Qg bXRrX2NhbV9kZXYgKmNhbSwNCisJCQkJICAgdW5zaWduZWQgaW50IGZyYW1lX3NlcV9ubykNCit7 DQorCXN0cnVjdCBtdGtfY2FtX2Rldl9yZXF1ZXN0ICpyZXEsICpyZXFfcHJldjsNCisJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cnVubmluZ19qb2Jf bG9jaywgZmxhZ3MpOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCByZXFfcHJldiwg JmNhbS0+cnVubmluZ19qb2JfbGlzdCwgbGlzdCkgew0KKwkJZGV2X2RiZyhjYW0tPmRldiwgImZy YW1lX3NlcTolZCwgZGUtcXVldWUgZnJhbWVfc2VxOiVkXG4iLA0KKwkJCXJlcS0+ZnJhbWVfcGFy YW1zLmZyYW1lX3NlcV9ubywgZnJhbWVfc2VxX25vKTsNCisNCisJCS8qIE1hdGNoIGJ5IHRoZSBl bi1xdWV1ZWQgcmVxdWVzdCBudW1iZXIgKi8NCisJCWlmIChyZXEtPmZyYW1lX3BhcmFtcy5mcmFt ZV9zZXFfbm8gPT0gZnJhbWVfc2VxX25vKSB7DQorCQkJY2FtLT5ydW5uaW5nX2pvYl9jb3VudC0t Ow0KKwkJCS8qIFBhc3MgdG8gdXNlciBzcGFjZSAqLw0KKwkJCW10a19jYW1fZGV2X2pvYl9kb25l KGNhbSwgcmVxLCBWQjJfQlVGX1NUQVRFX0RPTkUpOw0KKwkJCWxpc3RfZGVsKCZyZXEtPmxpc3Qp Ow0KKwkJCWJyZWFrOw0KKwkJfSBlbHNlIGlmIChyZXEtPmZyYW1lX3BhcmFtcy5mcmFtZV9zZXFf bm8gPCBmcmFtZV9zZXFfbm8pIHsNCisJCQljYW0tPnJ1bm5pbmdfam9iX2NvdW50LS07DQorCQkJ LyogUGFzcyB0byB1c2VyIHNwYWNlIGZvciBmcmFtZSBkcm9wICovDQorCQkJbXRrX2NhbV9kZXZf am9iX2RvbmUoY2FtLCByZXEsIFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KKwkJCWRldl93YXJuKGNh bS0+ZGV2LCAiZnJhbWVfc2VxOiVkIGRyb3BcbiIsDQorCQkJCSByZXEtPmZyYW1lX3BhcmFtcy5m cmFtZV9zZXFfbm8pOw0KKwkJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOw0KKwkJfSBlbHNlIHsNCisJ CQlicmVhazsNCisJCX0NCisJfQ0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnJ1bm5p bmdfam9iX2xvY2ssIGZsYWdzKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX2NhbV9kZXZfcmVx X2NsZWFudXAoc3RydWN0IG10a19jYW1fZGV2ICpjYW0pDQorew0KKwlzdHJ1Y3QgbXRrX2NhbV9k ZXZfcmVxdWVzdCAqcmVxLCAqcmVxX3ByZXY7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQor CWRldl9kYmcoY2FtLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOw0KKw0KKwlzcGluX2xvY2tfaXJx c2F2ZSgmY2FtLT5wZW5kaW5nX2pvYl9sb2NrLCBmbGFncyk7DQorCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShyZXEsIHJlcV9wcmV2LCAmY2FtLT5wZW5kaW5nX2pvYl9saXN0LCBsaXN0KQ0KKwkJ bGlzdF9kZWwoJnJlcS0+bGlzdCk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cGVu ZGluZ19qb2JfbG9jaywgZmxhZ3MpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5ydW5u aW5nX2pvYl9sb2NrLCBmbGFncyk7DQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJl cV9wcmV2LCAmY2FtLT5ydW5uaW5nX2pvYl9saXN0LCBsaXN0KQ0KKwkJbGlzdF9kZWwoJnJlcS0+ bGlzdCk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cnVubmluZ19qb2JfbG9jaywg ZmxhZ3MpOw0KK30NCisNCit2b2lkIG10a19jYW1fZGV2X3JlcV90cnlfcXVldWUoc3RydWN0IG10 a19jYW1fZGV2ICpjYW0pDQorew0KKwlzdHJ1Y3QgbXRrX2NhbV9kZXZfcmVxdWVzdCAqcmVxLCAq cmVxX3ByZXY7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCWlmICghY2FtLT5zdHJlYW1p bmcpIHsNCisJCWRldl9kYmcoY2FtLT5kZXYsICJzdHJlYW0gaXMgb2ZmXG4iKTsNCisJCXJldHVy bjsNCisJfQ0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5wZW5kaW5nX2pvYl9sb2NrLCBm bGFncyk7DQorCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnJ1bm5pbmdfam9iX2xvY2ssIGZsYWdz KTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcmVxX3ByZXYsICZjYW0tPnBlbmRp bmdfam9iX2xpc3QsIGxpc3QpIHsNCisJCWlmIChjYW0tPnJ1bm5pbmdfam9iX2NvdW50ID49IE1U S19JU1BfTUFYX1JVTk5JTkdfSk9CUykgew0KKwkJCWRldl9kYmcoY2FtLT5kZXYsICJqb2JzIGFy ZSBmdWxsXG4iKTsNCisJCQlicmVhazsNCisJCX0NCisJCWNhbS0+cnVubmluZ19qb2JfY291bnQr KzsNCisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOw0KKwkJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0 LCAmY2FtLT5ydW5uaW5nX2pvYl9saXN0KTsNCisJCW10a19pc3BfcmVxX2VucXVldWUoY2FtLCBy ZXEpOw0KKwl9DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cnVubmluZ19qb2JfbG9j aywgZmxhZ3MpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnBlbmRpbmdfam9iX2xv Y2ssIGZsYWdzKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBtZWRpYV9yZXF1ZXN0ICptdGtfY2Ft X3JlcV9hbGxvYyhzdHJ1Y3QgbWVkaWFfZGV2aWNlICptZGV2KQ0KK3sNCisJc3RydWN0IG10a19j YW1fZGV2X3JlcXVlc3QgKmNhbV9kZXZfcmVxOw0KKw0KKwljYW1fZGV2X3JlcSA9IGt6YWxsb2Mo c2l6ZW9mKCpjYW1fZGV2X3JlcSksIEdGUF9LRVJORUwpOw0KKw0KKwlyZXR1cm4gJmNhbV9kZXZf cmVxLT5yZXE7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10a19jYW1fcmVxX2ZyZWUoc3RydWN0IG1l ZGlhX3JlcXVlc3QgKnJlcSkNCit7DQorCXN0cnVjdCBtdGtfY2FtX2Rldl9yZXF1ZXN0ICpjYW1f ZGV2X3JlcSA9IG10a19jYW1fcmVxX3RvX2Rldl9yZXEocmVxKTsNCisNCisJa2ZyZWUoY2FtX2Rl dl9yZXEpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtfY2FtX3JlcV9xdWV1ZShzdHJ1Y3QgbWVk aWFfcmVxdWVzdCAqcmVxKQ0KK3sNCisJc3RydWN0IG10a19jYW1fZGV2X3JlcXVlc3QgKmNhbV9y ZXEgPSBtdGtfY2FtX3JlcV90b19kZXZfcmVxKHJlcSk7DQorCXN0cnVjdCBtdGtfY2FtX2RldiAq Y2FtID0gY29udGFpbmVyX29mKHJlcS0+bWRldiwgc3RydWN0IG10a19jYW1fZGV2LA0KKwkJCQkJ ICAgICAgIG1lZGlhX2Rldik7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCS8qIHVwZGF0 ZSBmcmFtZV9wYXJhbXMncyBkbWFfYnVmcyBpbiBtdGtfY2FtX3ZiMl9idWZfcXVldWUgKi8NCisJ dmIyX3JlcXVlc3RfcXVldWUocmVxKTsNCisNCisJLyogYWRkIHRvIHBlbmRpbmcgam9iIGxpc3Qg Ki8NCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cGVuZGluZ19qb2JfbG9jaywgZmxhZ3MpOw0K KwlsaXN0X2FkZF90YWlsKCZjYW1fcmVxLT5saXN0LCAmY2FtLT5wZW5kaW5nX2pvYl9saXN0KTsN CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5wZW5kaW5nX2pvYl9sb2NrLCBmbGFncyk7 DQorDQorCW10a19jYW1fZGV2X3JlcV90cnlfcXVldWUoY2FtKTsNCit9DQorDQorc3RhdGljIHVu c2lnbmVkIGludCBnZXRfcGl4ZWxfYml0cyh1bnNpZ25lZCBpbnQgcGl4X2ZtdCkNCit7DQorCXN3 aXRjaCAocGl4X2ZtdCkgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TQkdHUjg6DQorCWNh c2UgVjRMMl9QSVhfRk1UX01USVNQX1NHQlJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1Bf U0dSQkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TUkdHQjg6DQorCWNhc2UgVjRMMl9Q SVhfRk1UX01USVNQX1NCR0dSOEY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHQlJHOEY6 DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHUkJHOEY6DQorCWNhc2UgVjRMMl9QSVhfRk1U X01USVNQX1NSR0dCOEY6DQorCQlyZXR1cm4gODsNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1Bf U0JHR1IxMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dCUkcxMDoNCisJY2FzZSBWNEwy X1BJWF9GTVRfTVRJU1BfU0dSQkcxMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU1JHR0Ix MDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0JHR1IxMEY6DQorCWNhc2UgVjRMMl9QSVhf Rk1UX01USVNQX1NHQlJHMTBGOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TR1JCRzEwRjoN CisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU1JHR0IxMEY6DQorCQlyZXR1cm4gMTA7DQorCWNh c2UgVjRMMl9QSVhfRk1UX01USVNQX1NCR0dSMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQ X1NHQlJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHUkJHMTI6DQorCWNhc2UgVjRM Ml9QSVhfRk1UX01USVNQX1NSR0dCMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NCR0dS MTJGOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TR0JSRzEyRjoNCisJY2FzZSBWNEwyX1BJ WF9GTVRfTVRJU1BfU0dSQkcxMkY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NSR0dCMTJG Og0KKwkJcmV0dXJuIDEyOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TQkdHUjE0Og0KKwlj YXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TR0JSRzE0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElT UF9TR1JCRzE0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TUkdHQjE0Og0KKwljYXNlIFY0 TDJfUElYX0ZNVF9NVElTUF9TQkdHUjE0RjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dC UkcxNEY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHUkJHMTRGOg0KKwljYXNlIFY0TDJf UElYX0ZNVF9NVElTUF9TUkdHQjE0RjoNCisJCXJldHVybiAxNDsNCisJZGVmYXVsdDoNCisJCXJl dHVybiAwOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNhbF9pbWFnZV9waXhfbXAoc3RydWN0 IG10a19jYW1fZGV2ICpjYW0sIHVuc2lnbmVkIGludCBub2RlX2lkLA0KKwkJCSAgICAgc3RydWN0 IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKm1wKQ0KK3sNCisJdW5zaWduZWQgaW50IGJwbCwgcHBs Ow0KKwl1bnNpZ25lZCBpbnQgcGl4ZWxfYml0cyA9IGdldF9waXhlbF9iaXRzKG1wLT5waXhlbGZv cm1hdCk7DQorCXVuc2lnbmVkIGludCB3aWR0aCA9IG1wLT53aWR0aDsNCisNCisJYnBsID0gMDsN CisJaWYgKG5vZGVfaWQgPT0gTVRLX0NBTV9QMV9NQUlOX1NUUkVBTV9PVVQpIHsNCisJCS8qIEJh eWVyIGVuY29kaW5nIGZvcm1hdCAmIDIgYnl0ZXMgYWxpZ25tZW50ICovDQorCQlicGwgPSBBTElH TihESVZfUk9VTkRfVVAod2lkdGggKiBwaXhlbF9iaXRzLCA4KSwgMik7DQorCX0gZWxzZSBpZiAo bm9kZV9pZCA9PSBNVEtfQ0FNX1AxX1BBQ0tFRF9CSU5fT1VUKSB7DQorCQkvKg0KKwkJICogVGhl IEZVTEwtRyBlbmNvZGluZyBmb3JtYXQNCisJCSAqIDEgRyBjb21wb25lbnQgcGVyIHBpeGVsDQor CQkgKiAxIFIgY29tcG9uZW50IHBlciA0IHBpeGVsDQorCQkgKiAxIEIgY29tcG9uZW50IHBlciA0 IHBpeGVsDQorCQkgKiBUb3RhbCA0Ry8xUi8xQiBpbiA0IHBpeGVsIChwaXhlbCBwZXIgbGluZTpw cGwpDQorCQkgKi8NCisJCXBwbCA9IERJVl9ST1VORF9VUCh3aWR0aCAqIDYsIDQpOw0KKwkJYnBs ID0gRElWX1JPVU5EX1VQKHBwbCAqIHBpeGVsX2JpdHMsIDgpOw0KKw0KKwkJLyogNCBieXRlcyBh bGlnbm1lbnQgZm9yIDEwIGJpdCAmIG90aGVycyBhcmUgOCBieXRlcyAqLw0KKwkJaWYgKHBpeGVs X2JpdHMgPT0gMTApDQorCQkJYnBsID0gQUxJR04oYnBsLCA0KTsNCisJCWVsc2UNCisJCQlicGwg PSBBTElHTihicGwsIDgpOw0KKwl9DQorCS8qDQorCSAqIFRoaXMgaW1hZ2Ugb3V0cHV0IGJ1ZmZl ciB3aWxsIGJlIGlucHV0IGJ1ZmZlciBvZiBNVEsgQ0FNIERJUCBIVw0KKwkgKiBGb3IgTVRLIENB TSBESVAgSFcgY29uc3RyYWluZWQsIGl0IG5lZWRzIDQgYnl0ZXMgYWxpZ25tZW50DQorCSAqLw0K KwlicGwgPSBBTElHTihicGwsIDQpOw0KKw0KKwltcC0+cGxhbmVfZm10WzBdLmJ5dGVzcGVybGlu ZSA9IGJwbDsNCisJbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPSBicGwgKiBtcC0+aGVpZ2h0 Ow0KKw0KKwlkZXZfZGJnKGNhbS0+ZGV2LCAibm9kZTolZCB3aWR0aDolZCBieXRlc3BlcmxpbmU6 JWQgc2l6ZWltYWdlOiVkXG4iLA0KKwkJbm9kZV9pZCwgd2lkdGgsIGJwbCwgbXAtPnBsYW5lX2Zt dFswXS5zaXplaW1hZ2UpOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0 ICoNCittdGtfY2FtX2Rldl9maW5kX2ZtdChzdHJ1Y3QgbXRrX2NhbV9kZXZfbm9kZV9kZXNjICpk ZXNjLCB1MzIgZm9ybWF0KQ0KK3sNCisJaW50IGk7DQorCWNvbnN0IHN0cnVjdCB2NGwyX2Zvcm1h dCAqZGV2X2ZtdDsNCisNCisJZm9yIChpID0gMDsgaSA8IGRlc2MtPm51bV9mbXRzOyBpKyspIHsN CisJCWRldl9mbXQgPSAmZGVzYy0+Zm10c1tpXTsNCisJCWlmIChkZXZfZm10LT5mbXQucGl4X21w LnBpeGVsZm9ybWF0ID09IGZvcm1hdCkNCisJCQlyZXR1cm4gZGV2X2ZtdDsNCisJfQ0KKw0KKwly ZXR1cm4gTlVMTDsNCit9DQorDQorLyogR2V0IHRoZSBkZWZhdWx0IGZvcm1hdCBzZXR0aW5nICov DQorc3RhdGljIHZvaWQNCittdGtfY2FtX2Rldl9sb2FkX2RlZmF1bHRfZm10KHN0cnVjdCBtdGtf Y2FtX2RldiAqY2FtLA0KKwkJCSAgICAgc3RydWN0IG10a19jYW1fZGV2X25vZGVfZGVzYyAqcXVl dWVfZGVzYywNCisJCQkgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZGVzdCkNCit7DQorCWNvbnN0 IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZGVmYXVsdF9mbXQgPQ0KKwkJJnF1ZXVlX2Rlc2MtPmZtdHNb cXVldWVfZGVzYy0+ZGVmYXVsdF9mbXRfaWR4XTsNCisNCisJZGVzdC0+dHlwZSA9IHF1ZXVlX2Rl c2MtPmJ1Zl90eXBlOw0KKw0KKwkvKiBDb25maWd1cmUgZGVmYXVsdCBmb3JtYXQgYmFzZWQgb24g bm9kZSB0eXBlICovDQorCWlmICghcXVldWVfZGVzYy0+aW1hZ2UpIHsNCisJCWRlc3QtPmZtdC5t ZXRhLmRhdGFmb3JtYXQgPSBkZWZhdWx0X2ZtdC0+Zm10Lm1ldGEuZGF0YWZvcm1hdDsNCisJCWRl c3QtPmZtdC5tZXRhLmJ1ZmZlcnNpemUgPSBkZWZhdWx0X2ZtdC0+Zm10Lm1ldGEuYnVmZmVyc2l6 ZTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlkZXN0LT5mbXQucGl4X21wLnBpeGVsZm9ybWF0ID0g ZGVmYXVsdF9mbXQtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQ7DQorCWRlc3QtPmZtdC5waXhfbXAu d2lkdGggPSBkZWZhdWx0X2ZtdC0+Zm10LnBpeF9tcC53aWR0aDsNCisJZGVzdC0+Zm10LnBpeF9t cC5oZWlnaHQgPSBkZWZhdWx0X2ZtdC0+Zm10LnBpeF9tcC5oZWlnaHQ7DQorCS8qIGJ5dGVzcGVy bGluZSAmIHNpemVpbWFnZSBjYWxjdWxhdGlvbiAqLw0KKwljYWxfaW1hZ2VfcGl4X21wKGNhbSwg cXVldWVfZGVzYy0+aWQsICZkZXN0LT5mbXQucGl4X21wKTsNCisJZGVzdC0+Zm10LnBpeF9tcC5u dW1fcGxhbmVzID0gMTsNCisNCisJZGVzdC0+Zm10LnBpeF9tcC5jb2xvcnNwYWNlID0gVjRMMl9D T0xPUlNQQUNFX1NSR0I7DQorCWRlc3QtPmZtdC5waXhfbXAuZmllbGQgPSBWNEwyX0ZJRUxEX05P TkU7DQorCWRlc3QtPmZtdC5waXhfbXAueWNiY3JfZW5jID0gVjRMMl9ZQ0JDUl9FTkNfREVGQVVM VDsNCisJZGVzdC0+Zm10LnBpeF9tcC5xdWFudGl6YXRpb24gPSBWNEwyX1FVQU5USVpBVElPTl9E RUZBVUxUOw0KKwlkZXN0LT5mbXQucGl4X21wLnhmZXJfZnVuYyA9IFY0TDJfWEZFUl9GVU5DX1NS R0I7DQorfQ0KKw0KKy8qIFV0aWxpdHkgZnVuY3Rpb25zICovDQorc3RhdGljIHVuc2lnbmVkIGlu dCBnZXRfc2Vuc29yX3BpeGVsX2lkKHVuc2lnbmVkIGludCBmbXQpDQorew0KKwlzd2l0Y2ggKGZt dCkgew0KKwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1I4XzFYODoNCisJY2FzZSBNRURJQV9CVVNf Rk1UX1NCR0dSMTBfMVgxMDoNCisJY2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMjoNCisJ Y2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTRfMVgxNDoNCisJCXJldHVybiBNVEtfQ0FNX1JBV19Q WExfSURfQjsNCisJY2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHOF8xWDg6DQorCWNhc2UgTUVESUFf QlVTX0ZNVF9TR0JSRzEwXzFYMTA6DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTI6 DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzE0XzFYMTQ6DQorCQlyZXR1cm4gTVRLX0NBTV9S QVdfUFhMX0lEX0dCOw0KKwljYXNlIE1FRElBX0JVU19GTVRfU0dSQkc4XzFYODoNCisJY2FzZSBN RURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMDoNCisJY2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHMTJf MVgxMjoNCisJY2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHMTRfMVgxNDoNCisJCXJldHVybiBNVEtf Q0FNX1JBV19QWExfSURfR1I7DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdHQjhfMVg4Og0KKwlj YXNlIE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwOg0KKwljYXNlIE1FRElBX0JVU19GTVRfU1JH R0IxMl8xWDEyOg0KKwljYXNlIE1FRElBX0JVU19GTVRfU1JHR0IxNF8xWDE0Og0KKwkJcmV0dXJu IE1US19DQU1fUkFXX1BYTF9JRF9SOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIE1US19DQU1fUkFX X1BYTF9JRF9VTktOT1dOOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3Nl bnNvcl9mbXQodW5zaWduZWQgaW50IGZtdCkNCit7DQorCXN3aXRjaCAoZm10KSB7DQorCWNhc2Ug TUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4Og0KKwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkc4XzFY ODoNCisJY2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDg6DQorCWNhc2UgTUVESUFfQlVTX0ZN VF9TUkdHQjhfMVg4Og0KKwkJcmV0dXJuIE1US19DQU1fSU1HX0ZNVF9CQVlFUjg7DQorCWNhc2Ug TUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTA6DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzEw XzFYMTA6DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTA6DQorCWNhc2UgTUVESUFf QlVTX0ZNVF9TUkdHQjEwXzFYMTA6DQorCQlyZXR1cm4gTVRLX0NBTV9JTUdfRk1UX0JBWUVSMTA7 DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEyXzFYMTI6DQorCWNhc2UgTUVESUFfQlVTX0ZN VF9TR0JSRzEyXzFYMTI6DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzEyXzFYMTI6DQorCWNh c2UgTUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTI6DQorCQlyZXR1cm4gTVRLX0NBTV9JTUdfRk1U X0JBWUVSMTI7DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjE0XzFYMTQ6DQorCWNhc2UgTUVE SUFfQlVTX0ZNVF9TR0JSRzE0XzFYMTQ6DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzE0XzFY MTQ6DQorCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdHQjE0XzFYMTQ6DQorCQlyZXR1cm4gTVRLX0NB TV9JTUdfRk1UX0JBWUVSMTQ7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gTVRLX0NBTV9JTUdfRk1U X1VOS05PV047DQorCX0NCit9DQorDQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfaW1nX2ZtdCh1 bnNpZ25lZCBpbnQgZm91cmNjKQ0KK3sNCisJc3dpdGNoIChmb3VyY2MpIHsNCisJY2FzZSBWNEwy X1BJWF9GTVRfTVRJU1BfU0JHR1I4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TR0JSRzg6 DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHUkJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRf TVRJU1BfU1JHR0I4Og0KKwkJcmV0dXJuIE1US19DQU1fSU1HX0ZNVF9CQVlFUjg7DQorCWNhc2Ug VjRMMl9QSVhfRk1UX01USVNQX1NCR0dSOEY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NH QlJHOEY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHUkJHOEY6DQorCWNhc2UgVjRMMl9Q SVhfRk1UX01USVNQX1NSR0dCOEY6DQorCQlyZXR1cm4gTVRLX0NBTV9JTUdfRk1UX0ZHX0JBWUVS ODsNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0JHR1IxMDoNCisJY2FzZSBWNEwyX1BJWF9G TVRfTVRJU1BfU0dCUkcxMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dSQkcxMDoNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU1JHR0IxMDoNCisJCXJldHVybiBNVEtfQ0FNX0lNR19G TVRfQkFZRVIxMDsNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0JHR1IxMEY6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX01USVNQX1NHQlJHMTBGOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9T R1JCRzEwRjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU1JHR0IxMEY6DQorCQlyZXR1cm4g TVRLX0NBTV9JTUdfRk1UX0ZHX0JBWUVSMTA7DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NC R0dSMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHQlJHMTI6DQorCWNhc2UgVjRMMl9Q SVhfRk1UX01USVNQX1NHUkJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NSR0dCMTI6 DQorCQlyZXR1cm4gTVRLX0NBTV9JTUdfRk1UX0JBWUVSMTI7DQorCWNhc2UgVjRMMl9QSVhfRk1U X01USVNQX1NCR0dSMTJGOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TR0JSRzEyRjoNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dSQkcxMkY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01U SVNQX1NSR0dCMTJGOg0KKwkJcmV0dXJuIE1US19DQU1fSU1HX0ZNVF9GR19CQVlFUjEyOw0KKwlj YXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TQkdHUjE0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElT UF9TR0JSRzE0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TR1JCRzE0Og0KKwljYXNlIFY0 TDJfUElYX0ZNVF9NVElTUF9TUkdHQjE0Og0KKwkJcmV0dXJuIE1US19DQU1fSU1HX0ZNVF9CQVlF UjE0Ow0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TQkdHUjE0RjoNCisJY2FzZSBWNEwyX1BJ WF9GTVRfTVRJU1BfU0dCUkcxNEY6DQorCWNhc2UgVjRMMl9QSVhfRk1UX01USVNQX1NHUkJHMTRG Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9NVElTUF9TUkdHQjE0RjoNCisJCXJldHVybiBNVEtfQ0FN X0lNR19GTVRfRkdfQkFZRVIxNDsNCisJZGVmYXVsdDoNCisJCXJldHVybiBNVEtfQ0FNX0lNR19G TVRfVU5LTk9XTjsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGNvbmZpZ19pbWdfZm10KHN0cnVj dCBtdGtfY2FtX2RldiAqY2FtLCB1bnNpZ25lZCBpbnQgbm9kZV9pZCwNCisJCQkgIHN0cnVjdCBw MV9pbWdfb3V0cHV0ICpvdXRfZm10LCBpbnQgc2Rfd2lkdGgsDQorCQkJICBpbnQgc2RfaGVpZ2h0 KQ0KK3sNCisJY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0ICpjZmdfZm10ID0gJmNhbS0+dmRldl9u b2Rlc1tub2RlX2lkXS52ZGV2X2ZtdDsNCisNCisJLyogQ2hlY2sgb3V0cHV0ICYgaW5wdXQgaW1h Z2Ugc2l6ZSBkaW1lbnNpb24gKi8NCisJaWYgKGNmZ19mbXQtPmZtdC5waXhfbXAud2lkdGggPiBz ZF93aWR0aCB8fA0KKwkgICAgY2ZnX2ZtdC0+Zm10LnBpeF9tcC5oZWlnaHQgPiBzZF9oZWlnaHQp IHsNCisJCWRldl9lcnIoY2FtLT5kZXYsICJub2RlOiVkIGNmZyBzaXplIGlzIGxhcmdlciB0aGFu IHNlbnNvclxuIiwNCisJCQlub2RlX2lkKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQor CS8qIENoZWNrIHJlc2l6ZSByYXRpbyBmb3IgcmVzaXplIG91dCBzdHJlYW0gZHVlIHRvIEhXIGNv bnN0cmFpbnQgKi8NCisJaWYgKCgoY2ZnX2ZtdC0+Zm10LnBpeF9tcC53aWR0aCAqIDEwMCAvIHNk X3dpZHRoKSA8DQorCSAgICBNVEtfSVNQX01JTl9SRVNJWkVfUkFUSU8pIHx8DQorCSAgICAoKGNm Z19mbXQtPmZtdC5waXhfbXAuaGVpZ2h0ICogMTAwIC8gc2RfaGVpZ2h0KSA8DQorCSAgICBNVEtf SVNQX01JTl9SRVNJWkVfUkFUSU8pKSB7DQorCQlkZXZfZXJyKGNhbS0+ZGV2LCAibm9kZTolZCBy ZXNpemUgcmF0aW8gaXMgbGVzcyB0aGFuICVkJSVcbiIsDQorCQkJbm9kZV9pZCwgTVRLX0lTUF9N SU5fUkVTSVpFX1JBVElPKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCW91dF9mbXQt PmltZ19mbXQgPSBnZXRfaW1nX2ZtdChjZmdfZm10LT5mbXQucGl4X21wLnBpeGVsZm9ybWF0KTsN CisJb3V0X2ZtdC0+cGl4ZWxfYml0cyA9IGdldF9waXhlbF9iaXRzKGNmZ19mbXQtPmZtdC5waXhf bXAucGl4ZWxmb3JtYXQpOw0KKwlpZiAob3V0X2ZtdC0+aW1nX2ZtdCA9PSBNVEtfQ0FNX0lNR19G TVRfVU5LTk9XTiB8fA0KKwkgICAgIW91dF9mbXQtPnBpeGVsX2JpdHMpIHsNCisJCWRldl9lcnIo Y2FtLT5kZXYsICJub2RlOiVkIHVua25vd24gcGl4ZWwgZm10OiVkXG4iLA0KKwkJCW5vZGVfaWQs IGNmZ19mbXQtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQor CX0NCisJZGV2X2RiZyhjYW0tPmRldiwgIm5vZGU6JWQgcGl4ZWxfYml0czolZCBpbWdfZm10OjB4 JXhcbiIsDQorCQlub2RlX2lkLCBvdXRfZm10LT5waXhlbF9iaXRzLCBvdXRfZm10LT5pbWdfZm10 KTsNCisNCisJb3V0X2ZtdC0+c2l6ZS53ID0gY2ZnX2ZtdC0+Zm10LnBpeF9tcC53aWR0aDsNCisJ b3V0X2ZtdC0+c2l6ZS5oID0gY2ZnX2ZtdC0+Zm10LnBpeF9tcC5oZWlnaHQ7DQorCW91dF9mbXQt PnNpemUuc3RyaWRlID0gY2ZnX2ZtdC0+Zm10LnBpeF9tcC5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJs aW5lOw0KKwlvdXRfZm10LT5zaXplLnhzaXplID0gY2ZnX2ZtdC0+Zm10LnBpeF9tcC5wbGFuZV9m bXRbMF0uYnl0ZXNwZXJsaW5lOw0KKw0KKwlvdXRfZm10LT5jcm9wLmxlZnQgPSAwOw0KKwlvdXRf Zm10LT5jcm9wLnRvcCA9IDA7DQorCW91dF9mbXQtPmNyb3Aud2lkdGggPSBzZF93aWR0aDsNCisJ b3V0X2ZtdC0+Y3JvcC5oZWlnaHQgPSBzZF9oZWlnaHQ7DQorDQorCWRldl9kYmcoY2FtLT5kZXYs DQorCQkibm9kZTolZCBzaXplPSUwZHglMGQsIHN0cmlkZTolZCwgeHNpemU6JWQsIGNyb3A9JTBk eCUwZFxuIiwNCisJCW5vZGVfaWQsIG91dF9mbXQtPnNpemUudywgb3V0X2ZtdC0+c2l6ZS5oLA0K KwkJb3V0X2ZtdC0+c2l6ZS5zdHJpZGUsIG91dF9mbXQtPnNpemUueHNpemUsDQorCQlvdXRfZm10 LT5jcm9wLndpZHRoLCBvdXRfZm10LT5jcm9wLmhlaWdodCk7DQorDQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgdm9pZCBtdGtfY2FtX2Rldl9pbml0X3N0cmVhbShzdHJ1Y3QgbXRrX2NhbV9k ZXYgKmNhbSkNCit7DQorCWludCBpOw0KKw0KKwljYW0tPmVuYWJsZWRfY291bnQgPSAwOw0KKwlj YW0tPmVuYWJsZWRfZG1hcyA9IDA7DQorCWNhbS0+c3RyZWFtX2NvdW50ID0gMDsNCisJY2FtLT5y dW5uaW5nX2pvYl9jb3VudCA9IDA7DQorDQorCS8qIEdldCB0aGUgZW5hYmxlZCBtZXRhIERNQSBw b3J0cyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgTVRLX0NBTV9QMV9UT1RBTF9OT0RFUzsgaSsrKSB7 DQorCQlpZiAoIWNhbS0+dmRldl9ub2Rlc1tpXS5lbmFibGVkKQ0KKwkJCWNvbnRpbnVlOw0KKwkJ Y2FtLT5lbmFibGVkX2NvdW50Kys7DQorCQljYW0tPmVuYWJsZWRfZG1hcyB8PSBjYW0tPnZkZXZf bm9kZXNbaV0uZGVzYy5kbWFfcG9ydDsNCisJfQ0KKw0KKwlkZXZfZGJnKGNhbS0+ZGV2LCAiJXM6 JWQ6MHgleFxuIiwgX19mdW5jX18sIGNhbS0+ZW5hYmxlZF9jb3VudCwNCisJCWNhbS0+ZW5hYmxl ZF9kbWFzKTsNCit9DQorDQorc3RhdGljIGludCBtdGtfY2FtX2Rldl9pc3BfY29uZmlnKHN0cnVj dCBtdGtfY2FtX2RldiAqY2FtKQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2FtLT5kZXY7 DQorCXN0cnVjdCBwMV9jb25maWdfcGFyYW0gY29uZmlnX3BhcmFtOw0KKwlzdHJ1Y3QgY2ZnX2lu X3BhcmFtICpjZmdfaW5fcGFyYW07DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgc2RfZm10 Ow0KKwlpbnQgc2Rfd2lkdGgsIHNkX2hlaWdodCwgc2RfY29kZTsNCisJdW5zaWduZWQgaW50IGVu YWJsZWRfZG1hX3BvcnRzID0gY2FtLT5lbmFibGVkX2RtYXM7DQorCWludCByZXQ7DQorDQorCS8q IEdldCBzZW5zb3IgZm9ybWF0IGNvbmZpZ3VyYXRpb24gKi8NCisJc2RfZm10LndoaWNoID0gVjRM Ml9TVUJERVZfRk9STUFUX0FDVElWRTsNCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjYW0tPnNl bnNvciwgcGFkLCBnZXRfZm10LCBOVUxMLCAmc2RfZm10KTsNCisJaWYgKHJldCkgew0KKwkJZGV2 X2RiZyhkZXYsICJzZW5zb3IgZ19mbXQgZmFpbGVkOiVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJl dDsNCisJfQ0KKwlzZF93aWR0aCA9IHNkX2ZtdC5mb3JtYXQud2lkdGg7DQorCXNkX2hlaWdodCA9 IHNkX2ZtdC5mb3JtYXQuaGVpZ2h0Ow0KKwlzZF9jb2RlID0gc2RfZm10LmZvcm1hdC5jb2RlOw0K KwlkZXZfZGJnKGRldiwgInNkIGZtdCB3Kmg9JWQqJWQsIGNvZGU9MHgleFxuIiwgc2Rfd2lkdGgs IHNkX2hlaWdodCwNCisJCXNkX2NvZGUpOw0KKw0KKwltZW1zZXQoJmNvbmZpZ19wYXJhbSwgMCwg c2l6ZW9mKGNvbmZpZ19wYXJhbSkpOw0KKw0KKwkvKiBVcGRhdGUgY2ZnX2luX3BhcmFtICovDQor CWNmZ19pbl9wYXJhbSA9ICZjb25maWdfcGFyYW0uY2ZnX2luX3BhcmFtOw0KKwljZmdfaW5fcGFy YW0tPmNvbnRpbnVvdXMgPSB0cnVlOw0KKwkvKiBGaXggdG8gb25lIHBpeGVsIG1vZGUgaW4gZGVm YXVsdCAqLw0KKwljZmdfaW5fcGFyYW0tPnBpeGVsX21vZGUgPSBNVEtfSVNQX09ORV9QSVhFTF9N T0RFOw0KKwljZmdfaW5fcGFyYW0tPmNyb3Aud2lkdGggPSBzZF93aWR0aDsNCisJY2ZnX2luX3Bh cmFtLT5jcm9wLmhlaWdodCA9IHNkX2hlaWdodDsNCisJY2ZnX2luX3BhcmFtLT5yYXdfcGl4ZWxf aWQgPSBnZXRfc2Vuc29yX3BpeGVsX2lkKHNkX2NvZGUpOw0KKwljZmdfaW5fcGFyYW0tPmltZ19m bXQgPSBnZXRfc2Vuc29yX2ZtdChzZF9jb2RlKTsNCisJaWYgKGNmZ19pbl9wYXJhbS0+aW1nX2Zt dCA9PSBNVEtfQ0FNX0lNR19GTVRfVU5LTk9XTiB8fA0KKwkgICAgY2ZnX2luX3BhcmFtLT5yYXdf cGl4ZWxfaWQgPT0gTVRLX0NBTV9SQVdfUFhMX0lEX1VOS05PV04pIHsNCisJCWRldl9lcnIoZGV2 LCAidW5rbm93biBzZCBjb2RlOiVkXG4iLCBzZF9jb2RlKTsNCisJCXJldHVybiAtRUlOVkFMOw0K Kwl9DQorDQorCS8qIFVwZGF0ZSBjZmdfbWFpbl9wYXJhbSAqLw0KKwljb25maWdfcGFyYW0uY2Zn X21haW5fcGFyYW0ucHVyZV9yYXcgPSB0cnVlOw0KKwljb25maWdfcGFyYW0uY2ZnX21haW5fcGFy YW0ucHVyZV9yYXdfcGFjayA9IHRydWU7DQorCXJldCA9IGNvbmZpZ19pbWdfZm10KGNhbSwgTVRL X0NBTV9QMV9NQUlOX1NUUkVBTV9PVVQsDQorCQkJICAgICAmY29uZmlnX3BhcmFtLmNmZ19tYWlu X3BhcmFtLm91dHB1dCwNCisJCQkgICAgIHNkX3dpZHRoLCBzZF9oZWlnaHQpOw0KKwlpZiAocmV0 KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogVXBkYXRlIGNmZ19yZXNpemVfcGFyYW0gKi8NCisJ aWYgKGVuYWJsZWRfZG1hX3BvcnRzICYgUl9SUlpPKSB7DQorCQlyZXQgPSBjb25maWdfaW1nX2Zt dChjYW0sIE1US19DQU1fUDFfUEFDS0VEX0JJTl9PVVQsDQorCQkJCSAgICAgJmNvbmZpZ19wYXJh bS5jZmdfcmVzaXplX3BhcmFtLm91dHB1dCwNCisJCQkJICAgICBzZF93aWR0aCwgc2RfaGVpZ2h0 KTsNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisJfSBlbHNlIHsNCisJCWNvbmZpZ19w YXJhbS5jZmdfcmVzaXplX3BhcmFtLmJ5cGFzcyA9IHRydWU7DQorCX0NCisNCisJLyogVXBkYXRl IGVuYWJsZWRfZG1hcyAqLw0KKwljb25maWdfcGFyYW0uZW5hYmxlZF9kbWFzID0gZW5hYmxlZF9k bWFfcG9ydHM7DQorCW10a19pc3BfaHdfY29uZmlnKGNhbSwgJmNvbmZpZ19wYXJhbSk7DQorCWRl dl9kYmcoZGV2LCAiJXMgZG9uZVxuIiwgX19mdW5jX18pOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQordm9pZCBtdGtfY2FtX2Rldl9ldmVudF9mcmFtZV9zeW5jKHN0cnVjdCBtdGtfY2FtX2RldiAq Y2FtLA0KKwkJCQkgIHVuc2lnbmVkIGludCBmcmFtZV9zZXFfbm8pDQorew0KKwlzdHJ1Y3QgdjRs Ml9ldmVudCBldmVudCA9IHsNCisJCS50eXBlID0gVjRMMl9FVkVOVF9GUkFNRV9TWU5DLA0KKwkJ LnUuZnJhbWVfc3luYy5mcmFtZV9zZXF1ZW5jZSA9IGZyYW1lX3NlcV9ubywNCisJfTsNCisNCisJ djRsMl9ldmVudF9xdWV1ZShjYW0tPnN1YmRldi5kZXZub2RlLCAmZXZlbnQpOw0KK30NCisNCitz dGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2ICoNCittdGtfY2FtX2Npb19nZXRfYWN0aXZlX3NlbnNv cihzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbSkNCit7DQorCXN0cnVjdCBtZWRpYV9kZXZpY2UgKm1k ZXYgPSBjYW0tPnNlbmluZi0+ZW50aXR5LmdyYXBoX29iai5tZGV2Ow0KKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBjYW0tPmRldjsNCisJc3RydWN0IG1lZGlhX2VudGl0eSAqZW50aXR5Ow0KKwlzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcjsNCisNCisJc2Vuc29yID0gTlVMTDsNCisJbWVkaWFfZGV2 aWNlX2Zvcl9lYWNoX2VudGl0eShlbnRpdHksIG1kZXYpIHsNCisJCWRldl9kYmcoZGV2LCAibWVk aWEgZW50aXR5OiAlczoweCV4OiVkXG4iLA0KKwkJCWVudGl0eS0+bmFtZSwgZW50aXR5LT5mdW5j dGlvbiwgZW50aXR5LT5zdHJlYW1fY291bnQpOw0KKwkJaWYgKGVudGl0eS0+ZnVuY3Rpb24gPT0g TUVESUFfRU5UX0ZfQ0FNX1NFTlNPUiAmJg0KKwkJICAgIGVudGl0eS0+c3RyZWFtX2NvdW50KSB7 DQorCQkJc2Vuc29yID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KGVudGl0eSk7DQorCQkJ ZGV2X2RiZyhkZXYsICJzZW5zb3IgZm91bmQ6ICVzXG4iLCBlbnRpdHktPm5hbWUpOw0KKwkJCWJy ZWFrOw0KKwkJfQ0KKwl9DQorDQorCWlmICghc2Vuc29yKQ0KKwkJZGV2X2VycihkZXYsICJubyBz ZW5pbmYgY29ubmVjdGVkXG4iKTsNCisNCisJcmV0dXJuIHNlbnNvcjsNCit9DQorDQorc3RhdGlj IGludCBtdGtfY2FtX2Npb19zdHJlYW1fb24oc3RydWN0IG10a19jYW1fZGV2ICpjYW0pDQorew0K KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjYW0tPmRldjsNCisJaW50IHJldDsNCisNCisJaWYgKCFj YW0tPnNlbmluZikgew0KKwkJZGV2X2VycihkZXYsICJubyBzZW5pbmYgY29ubmVjdGVkXG4iKTsN CisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCS8qIEdldCBhY3RpdmUgc2Vuc29yIGZyb20g Z3JhcGggdG9wb2xvZ3kgKi8NCisJY2FtLT5zZW5zb3IgPSBtdGtfY2FtX2Npb19nZXRfYWN0aXZl X3NlbnNvcihjYW0pOw0KKwlpZiAoIWNhbS0+c2Vuc29yKQ0KKwkJcmV0dXJuIC1FTk9ERVY7DQor DQorCS8qIFNlbmluZiBtdXN0IHN0cmVhbSBvbiBmaXJzdCAqLw0KKwlyZXQgPSB2NGwyX3N1YmRl dl9jYWxsKGNhbS0+c2VuaW5mLCB2aWRlbywgc19zdHJlYW0sIDEpOw0KKwlpZiAocmV0KSB7DQor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzdHJlYW0gb24gJXM6JWRcbiIsDQorCQkJY2FtLT5z ZW5pbmYtPmVudGl0eS5uYW1lLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQg PSB2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yLCB2aWRlbywgc19zdHJlYW0sIDEpOw0KKwlp ZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzdHJlYW0gb24gJXM6JWRcbiIs DQorCQkJY2FtLT5zZW5zb3ItPmVudGl0eS5uYW1lLCByZXQpOw0KKwkJZ290byBmYWlsX3Nlbmlu Zl9vZmY7DQorCX0NCisNCisJcmV0ID0gbXRrX2NhbV9kZXZfaXNwX2NvbmZpZyhjYW0pOw0KKwlp ZiAocmV0KQ0KKwkJZ290byBmYWlsX3NlbnNvcl9vZmY7DQorDQorCWNhbS0+c3RyZWFtaW5nID0g dHJ1ZTsNCisJbXRrX2lzcF9zdHJlYW0oY2FtLCAxKTsNCisJbXRrX2NhbV9kZXZfcmVxX3RyeV9x dWV1ZShjYW0pOw0KKwlkZXZfZGJnKGRldiwgInN0cmVhbWVkIG9uIFBhc3MgMVxuIik7DQorDQor CXJldHVybiAwOw0KKw0KK2ZhaWxfc2Vuc29yX29mZjoNCisJdjRsMl9zdWJkZXZfY2FsbChjYW0t PnNlbnNvciwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCitmYWlsX3NlbmluZl9vZmY6DQorCXY0bDJf c3ViZGV2X2NhbGwoY2FtLT5zZW5pbmYsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQorDQorCXJldHVy biByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV9jaW9fc3RyZWFtX29mZihzdHJ1Y3Qg bXRrX2NhbV9kZXYgKmNhbSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhbS0+ZGV2Ow0K KwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yLCB2aWRl bywgc19zdHJlYW0sIDApOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBzdHJlYW0gb2ZmICVzOiVkXG4iLA0KKwkJCWNhbS0+c2Vuc29yLT5lbnRpdHkubmFtZSwgcmV0 KTsNCisJCXJldHVybiAtRVBFUk07DQorCX0NCisNCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChj YW0tPnNlbmluZiwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gc3RyZWFtIG9mZiAlczolZFxuIiwNCisJCQljYW0tPnNlbmluZi0+ ZW50aXR5Lm5hbWUsIHJldCk7DQorCQlyZXR1cm4gLUVQRVJNOw0KKwl9DQorDQorCWNhbS0+c3Ry ZWFtaW5nID0gZmFsc2U7DQorCW10a19pc3Bfc3RyZWFtKGNhbSwgMCk7DQorCW10a19pc3BfaHdf cmVsZWFzZShjYW0pOw0KKw0KKwlkZXZfZGJnKGRldiwgInN0cmVhbWVkIG9mZiBQYXNzIDFcbiIp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtfY2FtX3NkX3Nfc3RyZWFt KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpDQorew0KKwlzdHJ1Y3QgbXRrX2Nh bV9kZXYgKmNhbSA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG10a19jYW1fZGV2LCBzdWJkZXYp Ow0KKw0KKwlpZiAoZW5hYmxlKSB7DQorCQkvKiBBbGlnbiB2YjJfY29yZV9zdHJlYW1vbiBkZXNp Z24gKi8NCisJCWlmIChjYW0tPnN0cmVhbWluZykgew0KKwkJCWRldl93YXJuKGNhbS0+ZGV2LCAi YWxyZWFkeSBzdHJlYW1pbmcgb25cbiIpOw0KKwkJCXJldHVybiAwOw0KKwkJfQ0KKwkJcmV0dXJu IG10a19jYW1fY2lvX3N0cmVhbV9vbihjYW0pOw0KKwl9DQorDQorCWlmICghY2FtLT5zdHJlYW1p bmcpIHsNCisJCWRldl93YXJuKGNhbS0+ZGV2LCAiYWxyZWFkeSBzdHJlYW1pbmcgb2ZmXG4iKTsN CisJCXJldHVybiAwOw0KKwl9DQorCXJldHVybiBtdGtfY2FtX2Npb19zdHJlYW1fb2ZmKGNhbSk7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV9zZF9zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0 bDJfc3ViZGV2ICpzdWJkZXYsDQorCQkJCSAgICAgIHN0cnVjdCB2NGwyX2ZoICpmaCwNCisJCQkJ ICAgICAgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uICpzdWIpDQorew0KKwlzd2l0Y2gg KHN1Yi0+dHlwZSkgew0KKwljYXNlIFY0TDJfRVZFTlRfRlJBTUVfU1lOQzoNCisJCXJldHVybiB2 NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCAwLCBOVUxMKTsNCisJZGVmYXVsdDoNCisJCXJl dHVybiAtRUlOVkFMOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV9tZWRpYV9saW5r X3NldHVwKHN0cnVjdCBtZWRpYV9lbnRpdHkgKmVudGl0eSwNCisJCQkJICAgIGNvbnN0IHN0cnVj dCBtZWRpYV9wYWQgKmxvY2FsLA0KKwkJCQkgICAgY29uc3Qgc3RydWN0IG1lZGlhX3BhZCAqcmVt b3RlLCB1MzIgZmxhZ3MpDQorew0KKwlzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbSA9DQorCQljb250 YWluZXJfb2YoZW50aXR5LCBzdHJ1Y3QgbXRrX2NhbV9kZXYsIHN1YmRldi5lbnRpdHkpOw0KKwl1 MzIgcGFkID0gbG9jYWwtPmluZGV4Ow0KKw0KKwlkZXZfZGJnKGNhbS0+ZGV2LCAiJXM6ICVkLT4l ZCBmbGFnczoweCV4XG4iLA0KKwkJX19mdW5jX18sIHBhZCwgcmVtb3RlLT5pbmRleCwgZmxhZ3Mp Ow0KKw0KKwkvKg0KKwkgKiBUaGUgdmlkZW8gbm9kZXMgZXhwb3NlZCBieSB0aGUgZHJpdmVyIGhh dmUgcGFkcyBpbmRleGVzDQorCSAqIGZyb20gMCB0byBNVEtfQ0FNX1AxX1RPVEFMX05PREVTIC0g MS4NCisJICovDQorCWlmIChwYWQgPCBNVEtfQ0FNX1AxX1RPVEFMX05PREVTKQ0KKwkJY2FtLT52 ZGV2X25vZGVzW3BhZF0uZW5hYmxlZCA9DQorCQkJISEoZmxhZ3MgJiBNRURJQV9MTktfRkxfRU5B QkxFRCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtfY2FtX3ZiMl9i dWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KK3sNCisJc3RydWN0IG10a19jYW1fZGV2 ICpjYW0gPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KKwlzdHJ1Y3QgbXRrX2Nh bV9kZXZfYnVmZmVyICpidWYgPSBtdGtfY2FtX3ZiMl9idWZfdG9fZGV2X2J1Zih2Yik7DQorCXN0 cnVjdCBtdGtfY2FtX2Rldl9yZXF1ZXN0ICpyZXEgPSBtdGtfY2FtX3JlcV90b19kZXZfcmVxKHZi LT5yZXF1ZXN0KTsNCisJc3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNlICpub2RlID0gbXRrX2Nh bV92YnFfdG9fdmRldih2Yi0+dmIyX3F1ZXVlKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2Ft LT5kZXY7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCWRldl9kYmcoZGV2LCAiJXM6IG5v ZGU6JWQgZmQ6JWQgaWR4OiVkXG4iLCBfX2Z1bmNfXywNCisJCW5vZGUtPmlkLCBidWYtPnZiYi5y ZXF1ZXN0X2ZkLCBidWYtPnZiYi52YjJfYnVmLmluZGV4KTsNCisNCisJLyogYWRkZWQgdGhlIGJ1 ZmZlciBpbnRvIHRoZSB0cmFja2luZyBsaXN0ICovDQorCXNwaW5fbG9ja19pcnFzYXZlKCZub2Rl LT5idWZfbGlzdF9sb2NrLCBmbGFncyk7DQorCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJm5v ZGUtPmJ1Zl9saXN0KTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm9kZS0+YnVmX2xpc3Rf bG9jaywgZmxhZ3MpOw0KKw0KKwkvKiB1cGRhdGUgYnVmZmVyIGludGVybmFsIGFkZHJlc3MgKi8N CisJcmVxLT5mcmFtZV9wYXJhbXMuZG1hX2J1ZnNbYnVmLT5ub2RlX2lkXS5pb3ZhID0gYnVmLT5k YWRkcjsNCisJcmVxLT5mcmFtZV9wYXJhbXMuZG1hX2J1ZnNbYnVmLT5ub2RlX2lkXS5zY3BfYWRk ciA9IGJ1Zi0+c2NwX2FkZHI7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV92YjJfYnVmX2lu aXQoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KK3sNCisJc3RydWN0IG10a19jYW1fdmlkZW9fZGV2 aWNlICpub2RlID0gbXRrX2NhbV92YnFfdG9fdmRldih2Yi0+dmIyX3F1ZXVlKTsNCisJc3RydWN0 IG10a19jYW1fZGV2ICpjYW0gPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBjYW0tPmRldjsNCisJc3RydWN0IG10a19jYW1fZGV2X2J1ZmZl ciAqYnVmOw0KKwlkbWFfYWRkcl90IGFkZHI7DQorDQorCWJ1ZiA9IG10a19jYW1fdmIyX2J1Zl90 b19kZXZfYnVmKHZiKTsNCisJYnVmLT5ub2RlX2lkID0gbm9kZS0+aWQ7DQorCWJ1Zi0+ZGFkZHIg PSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcih2YiwgMCk7DQorCWJ1Zi0+c2NwX2FkZHIg PSAwOw0KKw0KKwkvKiBTQ1AgYWRkcmVzcyBpcyBvbmx5IHZhbGlkIGZvciBtZXRhIGlucHV0IGJ1 ZmZlciAqLw0KKwlpZiAoIW5vZGUtPmRlc2Muc21lbV9hbGxvYykNCisJCXJldHVybiAwOw0KKw0K KwlidWYgPSBtdGtfY2FtX3ZiMl9idWZfdG9fZGV2X2J1Zih2Yik7DQorCS8qIFVzZSBjb2hlcmVu dCBhZGRyZXNzIHRvIGdldCBpb3ZhIGFkZHJlc3MgKi8NCisJYWRkciA9IGRtYV9tYXBfcmVzb3Vy Y2UoZGV2LCBidWYtPmRhZGRyLCB2Yi0+cGxhbmVzWzBdLmxlbmd0aCwNCisJCQkJRE1BX0JJRElS RUNUSU9OQUwsIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpOw0KKwlpZiAoZG1hX21hcHBpbmdfZXJy b3IoZGV2LCBhZGRyKSkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIG1ldGEgYWRk cjolcGFkXG4iLCAmYnVmLT5kYWRkcik7DQorCQlyZXR1cm4gLUVGQVVMVDsNCisJfQ0KKwlidWYt PnNjcF9hZGRyID0gYnVmLT5kYWRkcjsNCisJYnVmLT5kYWRkciA9IGFkZHI7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19jYW1fdmIyX2J1Zl9wcmVwYXJlKHN0cnVjdCB2 YjJfYnVmZmVyICp2YikNCit7DQorCXN0cnVjdCBtdGtfY2FtX3ZpZGVvX2RldmljZSAqbm9kZSA9 IG10a19jYW1fdmJxX3RvX3ZkZXYodmItPnZiMl9xdWV1ZSk7DQorCXN0cnVjdCBtdGtfY2FtX2Rl diAqY2FtID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsNCisJc3RydWN0IHZiMl92 NGwyX2J1ZmZlciAqdjRsMl9idWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOw0KKwljb25zdCBz dHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9ICZub2RlLT52ZGV2X2ZtdDsNCisJdW5zaWduZWQgaW50 IHNpemU7DQorDQorCWlmICh2Yi0+dmIyX3F1ZXVlLT50eXBlID09IFY0TDJfQlVGX1RZUEVfTUVU QV9PVVRQVVQgfHwNCisJICAgIHZiLT52YjJfcXVldWUtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9N RVRBX0NBUFRVUkUpDQorCQlzaXplID0gZm10LT5mbXQubWV0YS5idWZmZXJzaXplOw0KKwllbHNl DQorCQlzaXplID0gZm10LT5mbXQucGl4X21wLnBsYW5lX2ZtdFswXS5zaXplaW1hZ2U7DQorDQor CWlmICh2YjJfcGxhbmVfc2l6ZSh2YiwgMCkgPCBzaXplKSB7DQorCQlkZXZfZGJnKGNhbS0+ZGV2 LCAicGxhbmUgc2l6ZSBpcyB0b28gc21hbGw6JWx1PCV1XG4iLA0KKwkJCXZiMl9wbGFuZV9zaXpl KHZiLCAwKSwgc2l6ZSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpZiAoVjRMMl9U WVBFX0lTX09VVFBVVCh2Yi0+dmIyX3F1ZXVlLT50eXBlKSkgew0KKwkJaWYgKHZiMl9nZXRfcGxh bmVfcGF5bG9hZCh2YiwgMCkgIT0gc2l6ZSkgew0KKwkJCWRldl9kYmcoY2FtLT5kZXYsICJwbGFu ZSBwYXlsb2FkIGlzIG1pc21hdGNoOiVsdToldVxuIiwNCisJCQkJdmIyX2dldF9wbGFuZV9wYXls b2FkKHZiLCAwKSwgc2l6ZSk7DQorCQkJcmV0dXJuIC1FSU5WQUw7DQorCQl9DQorCQlyZXR1cm4g MDsNCisJfQ0KKw0KKwl2NGwyX2J1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQorCXZiMl9z ZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgc2l6ZSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgdm9pZCBtdGtfY2FtX3ZiMl9idWZfY2xlYW51cChzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIp DQorew0KKwlzdHJ1Y3QgbXRrX2NhbV92aWRlb19kZXZpY2UgKm5vZGUgPSBtdGtfY2FtX3ZicV90 b192ZGV2KHZiLT52YjJfcXVldWUpOw0KKwlzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbSA9IHZiMl9n ZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQorCXN0cnVjdCBtdGtfY2FtX2Rldl9idWZmZXIg KmJ1ZjsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2FtLT5kZXY7DQorDQorCWlmICghbm9kZS0+ ZGVzYy5zbWVtX2FsbG9jKQ0KKwkJcmV0dXJuOw0KKw0KKwlidWYgPSBtdGtfY2FtX3ZiMl9idWZf dG9fZGV2X2J1Zih2Yik7DQorCWRtYV91bm1hcF9wYWdlX2F0dHJzKGRldiwgYnVmLT5kYWRkciwN CisJCQkgICAgIHZiLT5wbGFuZXNbMF0ubGVuZ3RoLA0KKwkJCSAgICAgRE1BX0JJRElSRUNUSU9O QUwsDQorCQkJICAgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTsNCit9DQorDQorc3RhdGljIHZv aWQgbXRrX2NhbV92YjJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQor ew0KKwlzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9x dWV1ZSk7DQorDQorCWRldl9kYmcoY2FtLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOw0KK30NCisN CitzdGF0aWMgaW50IG10a19jYW1fdmIyX3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnZx LA0KKwkJCQkgICB1bnNpZ25lZCBpbnQgKm51bV9idWZmZXJzLA0KKwkJCQkgICB1bnNpZ25lZCBp bnQgKm51bV9wbGFuZXMsDQorCQkJCSAgIHVuc2lnbmVkIGludCBzaXplc1tdLA0KKwkJCQkgICBz dHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pDQorew0KKwlzdHJ1Y3QgbXRrX2NhbV92aWRlb19k ZXZpY2UgKm5vZGUgPSBtdGtfY2FtX3ZicV90b192ZGV2KHZxKTsNCisJdW5zaWduZWQgaW50IG1h eF9idWZmZXJfY291bnQgPSBub2RlLT5kZXNjLm1heF9idWZfY291bnQ7DQorCWNvbnN0IHN0cnVj dCB2NGwyX2Zvcm1hdCAqZm10ID0gJm5vZGUtPnZkZXZfZm10Ow0KKwl1bnNpZ25lZCBpbnQgc2l6 ZTsNCisNCisJLyogQ2hlY2sgdGhlIGxpbWl0YXRpb24gb2YgYnVmZmVyIHNpemUgKi8NCisJaWYg KG1heF9idWZmZXJfY291bnQpDQorCQkqbnVtX2J1ZmZlcnMgPSBjbGFtcF92YWwoKm51bV9idWZm ZXJzLCAxLCBtYXhfYnVmZmVyX2NvdW50KTsNCisNCisJaWYgKG5vZGUtPmRlc2Muc21lbV9hbGxv YykNCisJCXZxLT5kbWFfYXR0cnMgfD0gRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkc7DQorDQor CWlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX01FVEFfT1VUUFVUIHx8DQorCSAgICB2cS0+ dHlwZSA9PSBWNEwyX0JVRl9UWVBFX01FVEFfQ0FQVFVSRSkNCisJCXNpemUgPSBmbXQtPmZtdC5t ZXRhLmJ1ZmZlcnNpemU7DQorCWVsc2UNCisJCXNpemUgPSBmbXQtPmZtdC5waXhfbXAucGxhbmVf Zm10WzBdLnNpemVpbWFnZTsNCisNCisJLyogQWRkIGZvciBxLmNyZWF0ZV9idWZzIHdpdGggZm10 Lmdfc2l6ZWltYWdlKHApIC8gMiB0ZXN0ICovDQorCWlmICgqbnVtX3BsYW5lcykgew0KKwkJaWYg KHNpemVzWzBdIDwgc2l6ZSB8fCAqbnVtX3BsYW5lcyAhPSAxKQ0KKwkJCXJldHVybiAtRUlOVkFM Ow0KKwl9IGVsc2Ugew0KKwkJKm51bV9wbGFuZXMgPSAxOw0KKwkJc2l6ZXNbMF0gPSBzaXplOw0K Kwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtfY2FtX3ZiMl9yZXR1 cm5fYWxsX2J1ZmZlcnMoc3RydWN0IG10a19jYW1fZGV2ICpjYW0sDQorCQkJCQkgICBzdHJ1Y3Qg bXRrX2NhbV92aWRlb19kZXZpY2UgKm5vZGUsDQorCQkJCQkgICBlbnVtIHZiMl9idWZmZXJfc3Rh dGUgc3RhdGUpDQorew0KKwlzdHJ1Y3QgbXRrX2NhbV9kZXZfYnVmZmVyICpidWYsICpidWZfcHJl djsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5vZGUt PmJ1Zl9saXN0X2xvY2ssIGZsYWdzKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1Ziwg YnVmX3ByZXYsICZub2RlLT5idWZfbGlzdCwgbGlzdCkgew0KKwkJbGlzdF9kZWwoJmJ1Zi0+bGlz dCk7DQorCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmJiLnZiMl9idWYsIHN0YXRlKTsNCisJfQ0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZub2RlLT5idWZfbGlzdF9sb2NrLCBmbGFncyk7DQor fQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV92YjJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJf cXVldWUgKnZxLA0KKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQ0KK3sNCisJc3RydWN0 IG10a19jYW1fZGV2ICpjYW0gPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCisJc3RydWN0IG10a19j YW1fdmlkZW9fZGV2aWNlICpub2RlID0gbXRrX2NhbV92YnFfdG9fdmRldih2cSk7DQorCXN0cnVj dCBkZXZpY2UgKmRldiA9IGNhbS0+ZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAoIW5vZGUtPmVu YWJsZWQpIHsNCisJCWRldl9lcnIoZGV2LCAiTm9kZTolZCBpcyBub3QgZW5hYmxlZFxuIiwgbm9k ZS0+aWQpOw0KKwkJcmV0ID0gLUVOT0xJTks7DQorCQlnb3RvIGZhaWxfcmV0X2J1ZjsNCisJfQ0K Kw0KKwltdXRleF9sb2NrKCZjYW0tPm9wX2xvY2spOw0KKwkvKiBTdGFydCBzdHJlYW1pbmcgb2Yg dGhlIHdob2xlIHBpcGVsaW5lIG5vdyovDQorCWlmICghY2FtLT5waXBlbGluZS5zdHJlYW1pbmdf Y291bnQpIHsNCisJCXJldCA9IG1lZGlhX3BpcGVsaW5lX3N0YXJ0KCZub2RlLT52ZGV2LmVudGl0 eSwgJmNhbS0+cGlwZWxpbmUpOw0KKwkJaWYgKHJldCkgew0KKwkJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHN0YXJ0IHBpcGVsaW5lOiVkXG4iLCByZXQpOw0KKwkJCWdvdG8gZmFpbF91bmxvY2s7 DQorCQl9DQorCQltdGtfY2FtX2Rldl9pbml0X3N0cmVhbShjYW0pOw0KKwkJcmV0ID0gbXRrX2lz cF9od19pbml0KGNhbSk7DQorCQlpZiAocmV0KSB7DQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gaW5pdCBIVzolZFxuIiwgcmV0KTsNCisJCQlnb3RvIGZhaWxfc3RvcF9waXBlbGluZTsNCisJ CX0NCisJfQ0KKw0KKwkvKiBNZWRpYSBsaW5rcyBhcmUgZml4ZWQgYWZ0ZXIgbWVkaWFfcGlwZWxp bmVfc3RhcnQgKi8NCisJY2FtLT5zdHJlYW1fY291bnQrKzsNCisJZGV2X2RiZyhkZXYsICIlczog Y291bnQgaW5mbzolZDolZFxuIiwgX19mdW5jX18sIGNhbS0+c3RyZWFtX2NvdW50LA0KKwkJY2Ft LT5lbmFibGVkX2NvdW50KTsNCisJaWYgKGNhbS0+c3RyZWFtX2NvdW50IDwgY2FtLT5lbmFibGVk X2NvdW50KSB7DQorCQltdXRleF91bmxvY2soJmNhbS0+b3BfbG9jayk7DQorCQlyZXR1cm4gMDsN CisJfQ0KKw0KKwkvKiBTdHJlYW0gb24gc3ViLWRldmljZXMgbm9kZSAqLw0KKwlyZXQgPSB2NGwy X3N1YmRldl9jYWxsKCZjYW0tPnN1YmRldiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsNCisJaWYgKHJl dCkNCisJCWdvdG8gZmFpbF9ub19zdHJlYW07DQorCW11dGV4X3VubG9jaygmY2FtLT5vcF9sb2Nr KTsNCisNCisJcmV0dXJuIDA7DQorDQorZmFpbF9ub19zdHJlYW06DQorCWNhbS0+c3RyZWFtX2Nv dW50LS07DQorZmFpbF9zdG9wX3BpcGVsaW5lOg0KKwlpZiAoY2FtLT5zdHJlYW1fY291bnQgPT0g MCkNCisJCW1lZGlhX3BpcGVsaW5lX3N0b3AoJm5vZGUtPnZkZXYuZW50aXR5KTsNCitmYWlsX3Vu bG9jazoNCisJbXV0ZXhfdW5sb2NrKCZjYW0tPm9wX2xvY2spOw0KK2ZhaWxfcmV0X2J1ZjoNCisJ bXRrX2NhbV92YjJfcmV0dXJuX2FsbF9idWZmZXJzKGNhbSwgbm9kZSwgVkIyX0JVRl9TVEFURV9R VUVVRUQpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtfY2FtX3Zi Ml9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkNCit7DQorCXN0cnVjdCBtdGtf Y2FtX2RldiAqY2FtID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXN0cnVjdCBtdGtfY2FtX3Zp ZGVvX2RldmljZSAqbm9kZSA9IG10a19jYW1fdmJxX3RvX3ZkZXYodnEpOw0KKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBjYW0tPmRldjsNCisNCisJbXV0ZXhfbG9jaygmY2FtLT5vcF9sb2NrKTsNCisJ ZGV2X2RiZyhkZXYsICIlcyBub2RlOiVkIGNvdW50IGluZm86JWRcbiIsIF9fZnVuY19fLCBub2Rl LT5pZCwNCisJCWNhbS0+c3RyZWFtX2NvdW50KTsNCisJLyogQ2hlY2sgdGhlIGZpcnN0IG5vZGUg dG8gc3RyZWFtLW9mZiAqLw0KKwlpZiAoY2FtLT5zdHJlYW1fY291bnQgPT0gY2FtLT5lbmFibGVk X2NvdW50KQ0KKwkJdjRsMl9zdWJkZXZfY2FsbCgmY2FtLT5zdWJkZXYsIHZpZGVvLCBzX3N0cmVh bSwgMCk7DQorDQorCW10a19jYW1fdmIyX3JldHVybl9hbGxfYnVmZmVycyhjYW0sIG5vZGUsIFZC Ml9CVUZfU1RBVEVfRVJST1IpOw0KKwljYW0tPnN0cmVhbV9jb3VudC0tOw0KKwlpZiAoY2FtLT5z dHJlYW1fY291bnQpIHsNCisJCW11dGV4X3VubG9jaygmY2FtLT5vcF9sb2NrKTsNCisJCXJldHVy bjsNCisJfQ0KKwltdXRleF91bmxvY2soJmNhbS0+b3BfbG9jayk7DQorDQorCW10a19jYW1fZGV2 X3JlcV9jbGVhbnVwKGNhbSk7DQorCW1lZGlhX3BpcGVsaW5lX3N0b3AoJm5vZGUtPnZkZXYuZW50 aXR5KTsNCit9DQorDQorc3RhdGljIGludCBtdGtfY2FtX3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQorCQkJCSAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNh cCkNCit7DQorCXN0cnVjdCBtdGtfY2FtX2RldiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsN CisNCisJc3Ryc2NweShjYXAtPmRyaXZlciwgZGV2X2RyaXZlcl9zdHJpbmcoY2FtLT5kZXYpLCBz aXplb2YoY2FwLT5kcml2ZXIpKTsNCisJc3Ryc2NweShjYXAtPmNhcmQsIGRldl9kcml2ZXJfc3Ry aW5nKGNhbS0+ZGV2KSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOw0KKwlzbnByaW50ZihjYXAtPmJ1c19p bmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJwbGF0Zm9ybTolcyIsDQorCQkgZGV2X25hbWUo Y2FtLT5kZXYpKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV92 aWRpb2NfZW51bV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KKwkJCQkgICBzdHJ1 Y3QgdjRsMl9mbXRkZXNjICpmKQ0KK3sNCisJc3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNlICpu b2RlID0gZmlsZV90b19tdGtfY2FtX25vZGUoZmlsZSk7DQorDQorCWlmIChmLT5pbmRleCA+PSBu b2RlLT5kZXNjLm51bV9mbXRzKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCS8qIGYtPmRlc2Ny aXB0aW9uIGlzIGZpbGxlZCBpbiB2NGxfZmlsbF9mbXRkZXNjIGZ1bmN0aW9uICovDQorCWYtPnBp eGVsZm9ybWF0ID0gbm9kZS0+ZGVzYy5mbXRzW2YtPmluZGV4XS5mbXQucGl4X21wLnBpeGVsZm9y bWF0Ow0KKwlmLT5mbGFncyA9IDA7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IG10a19jYW1fdmlkaW9jX2dfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCisJCQkJ c3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KK3sNCisJc3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNl ICpub2RlID0gZmlsZV90b19tdGtfY2FtX25vZGUoZmlsZSk7DQorDQorCWYtPmZtdCA9IG5vZGUt PnZkZXZfZm10LmZtdDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2Nh bV92aWRpb2NfdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQorCQkJCSAgc3Ry dWN0IHY0bDJfZm9ybWF0ICpmKQ0KK3sNCisJc3RydWN0IG10a19jYW1fZGV2ICpjYW0gPSB2aWRl b19kcnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgbXRrX2NhbV92aWRlb19kZXZpY2UgKm5vZGUgPSBm aWxlX3RvX210a19jYW1fbm9kZShmaWxlKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2FtLT5k ZXY7DQorCWNvbnN0IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZGV2X2ZtdDsNCisJc3RydWN0IHY0bDJf Zm9ybWF0IHRyeV9mbXQ7DQorDQorCW1lbXNldCgmdHJ5X2ZtdCwgMCwgc2l6ZW9mKHRyeV9mbXQp KTsNCisJdHJ5X2ZtdC50eXBlID0gZi0+dHlwZTsNCisNCisJLyogVmFsaWRhdGUgcGl4ZWxmb3Jt YXQgKi8NCisJZGV2X2ZtdCA9IG10a19jYW1fZGV2X2ZpbmRfZm10KCZub2RlLT5kZXNjLCBmLT5m bXQucGl4X21wLnBpeGVsZm9ybWF0KTsNCisJaWYgKCFkZXZfZm10KSB7DQorCQlkZXZfZGJnKGRl diwgInVua25vd24gZm10OiVkXG4iLCBmLT5mbXQucGl4X21wLnBpeGVsZm9ybWF0KTsNCisJCWRl dl9mbXQgPSAmbm9kZS0+ZGVzYy5mbXRzW25vZGUtPmRlc2MuZGVmYXVsdF9mbXRfaWR4XTsNCisJ fQ0KKwl0cnlfZm10LmZtdC5waXhfbXAucGl4ZWxmb3JtYXQgPSBkZXZfZm10LT5mbXQucGl4X21w LnBpeGVsZm9ybWF0Ow0KKw0KKwkvKiBWYWxpZGF0ZSBpbWFnZSB3aWR0aCAmIGhlaWdodCByYW5n ZSAqLw0KKwl0cnlfZm10LmZtdC5waXhfbXAud2lkdGggPSBjbGFtcF92YWwoZi0+Zm10LnBpeF9t cC53aWR0aCwNCisJCQkJCSAgICAgSU1HX01JTl9XSURUSCwgSU1HX01BWF9XSURUSCk7DQorCXRy eV9mbXQuZm10LnBpeF9tcC5oZWlnaHQgPSBjbGFtcF92YWwoZi0+Zm10LnBpeF9tcC5oZWlnaHQs DQorCQkJCQkgICAgICBJTUdfTUlOX0hFSUdIVCwgSU1HX01BWF9IRUlHSFQpOw0KKwkvKiA0IGJ5 dGVzIGFsaWdubWVudCBmb3Igd2lkdGggKi8NCisJdHJ5X2ZtdC5mbXQucGl4X21wLndpZHRoID0g QUxJR04odHJ5X2ZtdC5mbXQucGl4X21wLndpZHRoLCA0KTsNCisNCisJLyogT25seSBzdXBwb3J0 IG9uZSBwbGFuZSAqLw0KKwl0cnlfZm10LmZtdC5waXhfbXAubnVtX3BsYW5lcyA9IDE7DQorDQor CS8qIGJ5dGVzcGVybGluZSAmIHNpemVpbWFnZSBjYWxjdWxhdGlvbiAqLw0KKwljYWxfaW1hZ2Vf cGl4X21wKGNhbSwgbm9kZS0+aWQsICZ0cnlfZm10LmZtdC5waXhfbXApOw0KKw0KKwkvKiBDb25z dGFudCBmb3JtYXQgZmllbGRzICovDQorCXRyeV9mbXQuZm10LnBpeF9tcC5jb2xvcnNwYWNlID0g VjRMMl9DT0xPUlNQQUNFX1NSR0I7DQorCXRyeV9mbXQuZm10LnBpeF9tcC5maWVsZCA9IFY0TDJf RklFTERfTk9ORTsNCisJdHJ5X2ZtdC5mbXQucGl4X21wLnljYmNyX2VuYyA9IFY0TDJfWUNCQ1Jf RU5DX0RFRkFVTFQ7DQorCXRyeV9mbXQuZm10LnBpeF9tcC5xdWFudGl6YXRpb24gPSBWNEwyX1FV QU5USVpBVElPTl9ERUZBVUxUOw0KKwl0cnlfZm10LmZtdC5waXhfbXAueGZlcl9mdW5jID0gVjRM Ml9YRkVSX0ZVTkNfU1JHQjsNCisNCisJKmYgPSB0cnlfZm10Ow0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBtdGtfY2FtX3ZpZGlvY19zX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwg dm9pZCAqZmgsDQorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7DQorCXN0cnVjdCBtdGtf Y2FtX2RldiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IG10a19jYW1fdmlk ZW9fZGV2aWNlICpub2RlID0gZmlsZV90b19tdGtfY2FtX25vZGUoZmlsZSk7DQorDQorCWlmICh2 YjJfaXNfYnVzeShub2RlLT52ZGV2LnF1ZXVlKSkgew0KKwkJZGV2X2RiZyhjYW0tPmRldiwgIiVz OiBxdWV1ZSBpcyBidXN5XG4iLCBfX2Z1bmNfXyk7DQorCQlyZXR1cm4gLUVCVVNZOw0KKwl9DQor DQorCS8qIEdldCB0aGUgdmFsaWQgZm9ybWF0ICovDQorCW10a19jYW1fdmlkaW9jX3RyeV9mbXQo ZmlsZSwgZmgsIGYpOw0KKwkvKiBDb25maWd1cmUgdG8gdmlkZW8gZGV2aWNlICovDQorCW5vZGUt PnZkZXZfZm10ID0gKmY7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19j YW1fdmlkaW9jX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwN CisJCQkJCSAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKnNpemVzKQ0KK3sNCisJc3RydWN0IG10 a19jYW1fdmlkZW9fZGV2aWNlICpub2RlID0gZmlsZV90b19tdGtfY2FtX25vZGUoZmlscCk7DQor CWNvbnN0IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZGV2X2ZtdDsNCisNCisJZGV2X2ZtdCA9IG10a19j YW1fZGV2X2ZpbmRfZm10KCZub2RlLT5kZXNjLCBzaXplcy0+cGl4ZWxfZm9ybWF0KTsNCisJaWYg KCFkZXZfZm10IHx8IHNpemVzLT5pbmRleCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlzaXpl cy0+dHlwZSA9IG5vZGUtPmRlc2MuZnJtc2l6ZXMtPnR5cGU7DQorCW1lbWNweSgmc2l6ZXMtPnN0 ZXB3aXNlLCAmbm9kZS0+ZGVzYy5mcm1zaXplcy0+c3RlcHdpc2UsDQorCSAgICAgICBzaXplb2Yo c2l6ZXMtPnN0ZXB3aXNlKSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10 a19jYW1fdmlkaW9jX21ldGFfZW51bV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0K KwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikNCit7DQorCXN0cnVjdCBtdGtfY2FtX3ZpZGVv X2RldmljZSAqbm9kZSA9IGZpbGVfdG9fbXRrX2NhbV9ub2RlKGZpbGUpOw0KKw0KKwlpZiAoZi0+ aW5kZXgpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJLyogZi0+ZGVzY3JpcHRpb24gaXMgZmls bGVkIGluIHY0bF9maWxsX2ZtdGRlc2MgZnVuY3Rpb24gKi8NCisJZi0+cGl4ZWxmb3JtYXQgPSBu b2RlLT52ZGV2X2ZtdC5mbXQubWV0YS5kYXRhZm9ybWF0Ow0KKwlmLT5mbGFncyA9IDA7DQorDQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19jYW1fdmlkaW9jX2dfbWV0YV9mbXQo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KKwkJCQkgICAgIHN0cnVjdCB2NGwyX2Zvcm1h dCAqZikNCit7DQorCXN0cnVjdCBtdGtfY2FtX3ZpZGVvX2RldmljZSAqbm9kZSA9IGZpbGVfdG9f bXRrX2NhbV9ub2RlKGZpbGUpOw0KKw0KKwlmLT5mbXQubWV0YS5kYXRhZm9ybWF0ID0gbm9kZS0+ dmRldl9mbXQuZm10Lm1ldGEuZGF0YWZvcm1hdDsNCisJZi0+Zm10Lm1ldGEuYnVmZmVyc2l6ZSA9 IG5vZGUtPnZkZXZfZm10LmZtdC5tZXRhLmJ1ZmZlcnNpemU7DQorDQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG10a19jYW1fc3Vi ZGV2X2NvcmVfb3BzID0gew0KKwkuc3Vic2NyaWJlX2V2ZW50ID0gbXRrX2NhbV9zZF9zdWJzY3Jp YmVfZXZlbnQsDQorCS51bnN1YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfc3ViZGV2X3Vuc3Vi c2NyaWJlLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19v cHMgbXRrX2NhbV9zdWJkZXZfdmlkZW9fb3BzID0gew0KKwkuc19zdHJlYW0gPSAgbXRrX2NhbV9z ZF9zX3N0cmVhbSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3Bz IG10a19jYW1fc3ViZGV2X29wcyA9IHsNCisJLmNvcmUgPSAmbXRrX2NhbV9zdWJkZXZfY29yZV9v cHMsDQorCS52aWRlbyA9ICZtdGtfY2FtX3N1YmRldl92aWRlb19vcHMsDQorfTsNCisNCitzdGF0 aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIG10a19jYW1fbWVkaWFfZW50 aXR5X29wcyA9IHsNCisJLmxpbmtfc2V0dXAgPSBtdGtfY2FtX21lZGlhX2xpbmtfc2V0dXAsDQor CS5saW5rX3ZhbGlkYXRlID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZSwNCit9Ow0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyBtdGtfY2FtX3ZiMl9vcHMgPSB7DQorCS5xdWV1ZV9z ZXR1cCA9IG10a19jYW1fdmIyX3F1ZXVlX3NldHVwLA0KKwkud2FpdF9wcmVwYXJlID0gdmIyX29w c193YWl0X3ByZXBhcmUsDQorCS53YWl0X2ZpbmlzaCA9IHZiMl9vcHNfd2FpdF9maW5pc2gsDQor CS5idWZfaW5pdCA9IG10a19jYW1fdmIyX2J1Zl9pbml0LA0KKwkuYnVmX3ByZXBhcmUgPSBtdGtf Y2FtX3ZiMl9idWZfcHJlcGFyZSwNCisJLnN0YXJ0X3N0cmVhbWluZyA9IG10a19jYW1fdmIyX3N0 YXJ0X3N0cmVhbWluZywNCisJLnN0b3Bfc3RyZWFtaW5nID0gbXRrX2NhbV92YjJfc3RvcF9zdHJl YW1pbmcsDQorCS5idWZfcXVldWUgPSBtdGtfY2FtX3ZiMl9idWZfcXVldWUsDQorCS5idWZfY2xl YW51cCA9IG10a19jYW1fdmIyX2J1Zl9jbGVhbnVwLA0KKwkuYnVmX3JlcXVlc3RfY29tcGxldGUg PSBtdGtfY2FtX3ZiMl9yZXF1ZXN0X2NvbXBsZXRlLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtdGtfY2FtX3Y0bDJfZm9wcyA9IHsNCisJLnVubG9j a2VkX2lvY3RsID0gdmlkZW9faW9jdGwyLA0KKwkub3BlbiA9IHY0bDJfZmhfb3BlbiwNCisJLnJl bGVhc2UgPSB2YjJfZm9wX3JlbGVhc2UsDQorCS5wb2xsID0gdmIyX2ZvcF9wb2xsLA0KKwkubW1h cCA9IHZiMl9mb3BfbW1hcCwNCisjaWZkZWYgQ09ORklHX0NPTVBBVA0KKwkuY29tcGF0X2lvY3Rs MzIgPSB2NGwyX2NvbXBhdF9pb2N0bDMyLA0KKyNlbmRpZg0KK307DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCBtZWRpYV9kZXZpY2Vfb3BzIG10a19jYW1fbWVkaWFfb3BzID0gew0KKwkucmVxX2Fs bG9jID0gbXRrX2NhbV9yZXFfYWxsb2MsDQorCS5yZXFfZnJlZSA9IG10a19jYW1fcmVxX2ZyZWUs DQorCS5yZXFfdmFsaWRhdGUgPSB2YjJfcmVxdWVzdF92YWxpZGF0ZSwNCisJLnJlcV9xdWV1ZSA9 IG10a19jYW1fcmVxX3F1ZXVlLA0KK307DQorDQorc3RhdGljIGludCBtdGtfY2FtX21lZGlhX3Jl Z2lzdGVyKHN0cnVjdCBtdGtfY2FtX2RldiAqY2FtLA0KKwkJCQkgIHN0cnVjdCBtZWRpYV9kZXZp Y2UgKm1lZGlhX2RldikNCit7DQorCS8qIFJlc2VydmVkIE1US19DQU1fQ0lPX1BBRF9TSU5LICsg MSBwYWRzIHRvIHVzZSAqLw0KKwl1bnNpZ25lZCBpbnQgbnVtX3BhZHMgPSBNVEtfQ0FNX0NJT19Q QURfU0lOSyArIDE7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhbS0+ZGV2Ow0KKwlpbnQgaSwg cmV0Ow0KKw0KKwltZWRpYV9kZXYtPmRldiA9IGNhbS0+ZGV2Ow0KKwlzdHJzY3B5KG1lZGlhX2Rl di0+bW9kZWwsIGRldl9kcml2ZXJfc3RyaW5nKGRldiksDQorCQlzaXplb2YobWVkaWFfZGV2LT5t b2RlbCkpOw0KKwlzbnByaW50ZihtZWRpYV9kZXYtPmJ1c19pbmZvLCBzaXplb2YobWVkaWFfZGV2 LT5idXNfaW5mbyksDQorCQkgInBsYXRmb3JtOiVzIiwgZGV2X25hbWUoZGV2KSk7DQorCW1lZGlh X2Rldi0+aHdfcmV2aXNpb24gPSAwOw0KKwltZWRpYV9kZXZpY2VfaW5pdChtZWRpYV9kZXYpOw0K KwltZWRpYV9kZXYtPm9wcyA9ICZtdGtfY2FtX21lZGlhX29wczsNCisNCisJcmV0ID0gbWVkaWFf ZGV2aWNlX3JlZ2lzdGVyKG1lZGlhX2Rldik7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1lZGlhIGRldmljZTolZFxuIiwgcmV0KTsNCisJCXJldHVy biByZXQ7DQorCX0NCisNCisJLyogSW5pdGlhbGl6ZSBzdWJkZXYgcGFkcyAqLw0KKwljYW0tPnN1 YmRldl9wYWRzID0gZGV2bV9rY2FsbG9jKGRldiwgbnVtX3BhZHMsDQorCQkJCQlzaXplb2YoKmNh bS0+c3ViZGV2X3BhZHMpLA0KKwkJCQkJR0ZQX0tFUk5FTCk7DQorCWlmICghY2FtLT5zdWJkZXZf cGFkcykgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgc3ViZGV2X3BhZHNc biIpOw0KKwkJcmV0ID0gLUVOT01FTTsNCisJCWdvdG8gZmFpbF9tZWRpYV91bnJlZzsNCisJfQ0K Kw0KKwlyZXQgPSBtZWRpYV9lbnRpdHlfcGFkc19pbml0KCZjYW0tPnN1YmRldi5lbnRpdHksIG51 bV9wYWRzLA0KKwkJCQkgICAgIGNhbS0+c3ViZGV2X3BhZHMpOw0KKwlpZiAocmV0KSB7DQorCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIG1lZGlhIHBhZHM6JWRcbiIsIHJldCk7 DQorCQlnb3RvIGZhaWxfbWVkaWFfdW5yZWc7DQorCX0NCisNCisJLyogSW5pdGlhbGl6ZSBhbGwg cGFkcyB3aXRoIE1FRElBX1BBRF9GTF9TT1VSQ0UgKi8NCisJZm9yIChpID0gMDsgaSA8IG51bV9w YWRzOyBpKyspDQorCQljYW0tPnN1YmRldl9wYWRzW2ldLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NP VVJDRTsNCisNCisJLyogQ3VzdG9taXplIHRoZSBsYXN0IG9uZSBwYWQgYXMgQ0lPIHNpbmsgcGFk LiAqLw0KKwljYW0tPnN1YmRldl9wYWRzW01US19DQU1fQ0lPX1BBRF9TSU5LXS5mbGFncyA9IE1F RElBX1BBRF9GTF9TSU5LOw0KKw0KKwlyZXR1cm4gMDsNCisNCitmYWlsX21lZGlhX3VucmVnOg0K KwltZWRpYV9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT5tZWRpYV9kZXYpOw0KKwltZWRpYV9kZXZp Y2VfY2xlYW51cCgmY2FtLT5tZWRpYV9kZXYpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitz dGF0aWMgaW50DQorbXRrX2NhbV92aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10a19jYW1f ZGV2ICpjYW0sDQorCQkJICAgICAgc3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNlICpub2RlKQ0K K3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2FtLT5kZXY7DQorCXN0cnVjdCB2aWRlb19kZXZp Y2UgKnZkZXYgPSAmbm9kZS0+dmRldjsNCisJc3RydWN0IHZiMl9xdWV1ZSAqdmJxID0gJm5vZGUt PnZicTsNCisJdW5zaWduZWQgaW50IG91dHB1dCA9IFY0TDJfVFlQRV9JU19PVVRQVVQobm9kZS0+ ZGVzYy5idWZfdHlwZSk7DQorCXVuc2lnbmVkIGludCBsaW5rX2ZsYWdzID0gbm9kZS0+ZGVzYy5s aW5rX2ZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBJbml0aWFsaXplIG10a19jYW1fdmlkZW9f ZGV2aWNlICovDQorCWlmIChsaW5rX2ZsYWdzICYgTUVESUFfTE5LX0ZMX0lNTVVUQUJMRSkNCisJ CW5vZGUtPmVuYWJsZWQgPSB0cnVlOw0KKwllbHNlDQorCQlub2RlLT5lbmFibGVkID0gZmFsc2U7 DQorCW10a19jYW1fZGV2X2xvYWRfZGVmYXVsdF9mbXQoY2FtLCAmbm9kZS0+ZGVzYywgJm5vZGUt PnZkZXZfZm10KTsNCisNCisJY2FtLT5zdWJkZXZfcGFkc1tub2RlLT5pZF0uZmxhZ3MgPSBvdXRw dXQgPw0KKwkJTUVESUFfUEFEX0ZMX1NJTksgOiBNRURJQV9QQURfRkxfU09VUkNFOw0KKw0KKwkv KiBJbml0aWFsaXplIG1lZGlhIGVudGl0aWVzICovDQorCXJldCA9IG1lZGlhX2VudGl0eV9wYWRz X2luaXQoJnZkZXYtPmVudGl0eSwgMSwgJm5vZGUtPnZkZXZfcGFkKTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBtZWRpYSBwYWQ6JWRcbiIsIHJl dCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorCW5vZGUtPnZkZXZfcGFkLmZsYWdzID0gb3V0cHV0 ID8gTUVESUFfUEFEX0ZMX1NPVVJDRSA6IE1FRElBX1BBRF9GTF9TSU5LOw0KKw0KKwkvKiBJbml0 aWFsaXplIHZicSAqLw0KKwl2YnEtPnR5cGUgPSBub2RlLT5kZXNjLmJ1Zl90eXBlOw0KKwlpZiAo dmJxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfTUVUQV9PVVRQVVQpDQorCQl2YnEtPmlvX21vZGVz ID0gVkIyX01NQVA7DQorCWVsc2UNCisJCXZicS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9E TUFCVUY7DQorDQorCWlmIChub2RlLT5kZXNjLnNtZW1fYWxsb2MpIHsNCisJCXZicS0+YmlkaXJl Y3Rpb25hbCA9IDE7DQorCQl2YnEtPmRldiA9IGNhbS0+c21lbV9kZXY7DQorCX0gZWxzZSB7DQor CQl2YnEtPmRldiA9IGRldjsNCisJfQ0KKwl2YnEtPm9wcyA9ICZtdGtfY2FtX3ZiMl9vcHM7DQor CXZicS0+bWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQorCXZicS0+YnVmX3N0cnVj dF9zaXplID0gc2l6ZW9mKHN0cnVjdCBtdGtfY2FtX2Rldl9idWZmZXIpOw0KKwl2YnEtPnRpbWVz dGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0JPT1RJTUU7DQorCWlmIChvdXRw dXQpDQorCQl2YnEtPnRpbWVzdGFtcF9mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1RTVEFNUF9TUkNf RU9GOw0KKwllbHNlDQorCQl2YnEtPnRpbWVzdGFtcF9mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1RT VEFNUF9TUkNfU09FOw0KKwkvKiBObyBtaW5pbXVtIGJ1ZmZlcnMgbGltaXRhdGlvbiAqLw0KKwl2 YnEtPm1pbl9idWZmZXJzX25lZWRlZCA9IDA7DQorCXZicS0+ZHJ2X3ByaXYgPSBjYW07DQorCXZi cS0+bG9jayA9ICZub2RlLT52ZGV2X2xvY2s7DQorCXZicS0+c3VwcG9ydHNfcmVxdWVzdHMgPSB0 cnVlOw0KKwl2YnEtPnJlcXVpcmVzX3JlcXVlc3RzID0gdHJ1ZTsNCisNCisJcmV0ID0gdmIyX3F1 ZXVlX2luaXQodmJxKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g aW5pdC4gdmIyIHF1ZXVlOiVkXG4iLCByZXQpOw0KKwkJZ290byBmYWlsX21lZGlhX2NsZWFuOw0K Kwl9DQorDQorCS8qIEluaXRpYWxpemUgdmRldiAqLw0KKwlzbnByaW50Zih2ZGV2LT5uYW1lLCBz aXplb2YodmRldi0+bmFtZSksICIlcyAlcyIsDQorCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwg bm9kZS0+ZGVzYy5uYW1lKTsNCisJLyogc2V0IGNhcC90eXBlL2lvY3RsX29wcyBvZiB0aGUgdmlk ZW8gZGV2aWNlICovDQorCXZkZXYtPmRldmljZV9jYXBzID0gbm9kZS0+ZGVzYy5jYXAgfCBWNEwy X0NBUF9TVFJFQU1JTkc7DQorCXZkZXYtPmlvY3RsX29wcyA9IG5vZGUtPmRlc2MuaW9jdGxfb3Bz Ow0KKwl2ZGV2LT5mb3BzID0gJm10a19jYW1fdjRsMl9mb3BzOw0KKwl2ZGV2LT5yZWxlYXNlID0g dmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7DQorCXZkZXYtPmxvY2sgPSAmbm9kZS0+dmRldl9s b2NrOw0KKwl2ZGV2LT52NGwyX2RldiA9ICZjYW0tPnY0bDJfZGV2Ow0KKwl2ZGV2LT5xdWV1ZSA9 ICZub2RlLT52YnE7DQorCXZkZXYtPnZmbF9kaXIgPSBvdXRwdXQgPyBWRkxfRElSX1RYIDogVkZM X0RJUl9SWDsNCisJdmRldi0+ZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfSU9fVjRMOw0K Kwl2ZGV2LT5lbnRpdHkub3BzID0gTlVMTDsNCisJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgY2Ft KTsNCisJZGV2X2RiZyhkZXYsICJyZWdpc3RlcmVkIHZkZXY6JWQ6JXNcbiIsIG5vZGUtPmlkLCB2 ZGV2LT5uYW1lKTsNCisNCisJLyogSW5pdGlhbGl6ZSBtaXNjZWxsYW5lb3VzIHZhcmlhYmxlcyAq Lw0KKwltdXRleF9pbml0KCZub2RlLT52ZGV2X2xvY2spOw0KKwlJTklUX0xJU1RfSEVBRCgmbm9k ZS0+YnVmX2xpc3QpOw0KKwlzcGluX2xvY2tfaW5pdCgmbm9kZS0+YnVmX2xpc3RfbG9jayk7DQor DQorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAt MSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHZk ZTolZFxuIiwgcmV0KTsNCisJCWdvdG8gZmFpbF92YjJfcmVsOw0KKwl9DQorDQorCS8qIENyZWF0 ZSBsaW5rIGJldHdlZW4gdmlkZW8gbm9kZSBhbmQgdGhlIHN1YmRldiBwYWQgKi8NCisJaWYgKG91 dHB1dCkgew0KKwkJcmV0ID0gbWVkaWFfY3JlYXRlX3BhZF9saW5rKCZ2ZGV2LT5lbnRpdHksIDAs DQorCQkJCQkgICAgJmNhbS0+c3ViZGV2LmVudGl0eSwNCisJCQkJCSAgICBub2RlLT5pZCwgbGlu a19mbGFncyk7DQorCX0gZWxzZSB7DQorCQlyZXQgPSBtZWRpYV9jcmVhdGVfcGFkX2xpbmsoJmNh bS0+c3ViZGV2LmVudGl0eSwNCisJCQkJCSAgICBub2RlLT5pZCwgJnZkZXYtPmVudGl0eSwgMCwN CisJCQkJCSAgICBsaW5rX2ZsYWdzKTsNCisJfQ0KKwlpZiAocmV0KQ0KKwkJZ290byBmYWlsX3Zk ZXZfdXJlZzsNCisNCisJcmV0dXJuIDA7DQorDQorZmFpbF92ZGV2X3VyZWc6DQorCXZpZGVvX3Vu cmVnaXN0ZXJfZGV2aWNlKHZkZXYpOw0KK2ZhaWxfdmIyX3JlbDoNCisJbXV0ZXhfZGVzdHJveSgm bm9kZS0+dmRldl9sb2NrKTsNCisJdmIyX3F1ZXVlX3JlbGVhc2UodmJxKTsNCitmYWlsX21lZGlh X2NsZWFuOg0KKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmdmRldi0+ZW50aXR5KTsNCisNCisJcmV0 dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQNCittdGtfY2FtX3ZpZGVvX3VucmVnaXN0ZXJf ZGV2aWNlKHN0cnVjdCBtdGtfY2FtX3ZpZGVvX2RldmljZSAqbm9kZSkNCit7DQorCXZpZGVvX3Vu cmVnaXN0ZXJfZGV2aWNlKCZub2RlLT52ZGV2KTsNCisJdmIyX3F1ZXVlX3JlbGVhc2UoJm5vZGUt PnZicSk7DQorCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZub2RlLT52ZGV2LmVudGl0eSk7DQorCW11 dGV4X2Rlc3Ryb3koJm5vZGUtPnZkZXZfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2Nh bV92NGwyX3JlZ2lzdGVyKHN0cnVjdCBtdGtfY2FtX2RldiAqY2FtKQ0KK3sNCisJc3RydWN0IGRl dmljZSAqZGV2ID0gY2FtLT5kZXY7DQorCWludCBpLCByZXQ7DQorDQorCS8qIFNldCB1cCBtZWRp YSBkZXZpY2UgJiBwYWRzICovDQorCXJldCA9IG10a19jYW1fbWVkaWFfcmVnaXN0ZXIoY2FtLCAm Y2FtLT5tZWRpYV9kZXYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisJZGV2X2luZm8o ZGV2LCAiUmVnaXN0ZXJlZCBtZWRpYSVkXG4iLCBjYW0tPm1lZGlhX2Rldi5kZXZub2RlLT5taW5v cik7DQorDQorCS8qIFNldCB1cCB2NGwyIGRldmljZSAqLw0KKwljYW0tPnY0bDJfZGV2Lm1kZXYg PSAmY2FtLT5tZWRpYV9kZXY7DQorCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKGRldiwgJmNh bS0+djRsMl9kZXYpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBy ZWdpc3RlciBWNEwyIGRldmljZTolZFxuIiwgcmV0KTsNCisJCWdvdG8gZmFpbF9tZWRpYV91bnJl ZzsNCisJfQ0KKwlkZXZfaW5mbyhkZXYsICJSZWdpc3RlcmVkICVzXG4iLCBjYW0tPnY0bDJfZGV2 Lm5hbWUpOw0KKw0KKwkvKiBJbml0aWFsaXplIHN1YmRldiAqLw0KKwl2NGwyX3N1YmRldl9pbml0 KCZjYW0tPnN1YmRldiwgJm10a19jYW1fc3ViZGV2X29wcyk7DQorCWNhbS0+c3ViZGV2LmVudGl0 eS5mdW5jdGlvbiA9IE1FRElBX0VOVF9GX1BST0NfVklERU9fUElYRUxfRk9STUFUVEVSOw0KKwlj YW0tPnN1YmRldi5lbnRpdHkub3BzID0gJm10a19jYW1fbWVkaWFfZW50aXR5X29wczsNCisJY2Ft LT5zdWJkZXYuZmxhZ3MgPSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERSB8DQorCQkJCVY0TDJf U1VCREVWX0ZMX0hBU19FVkVOVFM7DQorCXNucHJpbnRmKGNhbS0+c3ViZGV2Lm5hbWUsIHNpemVv ZihjYW0tPnN1YmRldi5uYW1lKSwNCisJCSAiJXMiLCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpKTsN CisJdjRsMl9zZXRfc3ViZGV2ZGF0YSgmY2FtLT5zdWJkZXYsIGNhbSk7DQorDQorCXJldCA9IHY0 bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldigmY2FtLT52NGwyX2RldiwgJmNhbS0+c3ViZGV2KTsN CisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzdWJk ZXY6JWRcbiIsIHJldCk7DQorCQlnb3RvIGZhaWxfY2xlYW5fbWVkaWFfZW50aXk7DQorCX0NCisJ ZGV2X2RiZyhkZXYsICJyZWdpc3RlcmVkICVzXG4iLCBjYW0tPnN1YmRldi5uYW1lKTsNCisNCisJ LyogQ3JlYXRlIHZpZGVvIG5vZGVzIGFuZCBsaW5rcyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgTVRL X0NBTV9QMV9UT1RBTF9OT0RFUzsgaSsrKSB7DQorCQlzdHJ1Y3QgbXRrX2NhbV92aWRlb19kZXZp Y2UgKm5vZGUgPSAmY2FtLT52ZGV2X25vZGVzW2ldOw0KKw0KKwkJbm9kZS0+aWQgPSBub2RlLT5k ZXNjLmlkOw0KKwkJcmV0ID0gbXRrX2NhbV92aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLCBub2Rl KTsNCisJCWlmIChyZXQpDQorCQkJZ290byBmYWlsX3ZkZXZfdW5yZWc7DQorCX0NCisJdmIyX2Rt YV9jb250aWdfc2V0X21heF9zZWdfc2l6ZShkZXYsIERNQV9CSVRfTUFTSygzMikpOw0KKw0KKwly ZXR1cm4gMDsNCisNCitmYWlsX3ZkZXZfdW5yZWc6DQorCWZvciAoaS0tOyBpID49IDA7IGktLSkN CisJCW10a19jYW1fdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldl9ub2Rlc1tpXSk7 DQorZmFpbF9jbGVhbl9tZWRpYV9lbnRpeToNCisJbWVkaWFfZW50aXR5X2NsZWFudXAoJmNhbS0+ c3ViZGV2LmVudGl0eSk7DQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYp Ow0KK2ZhaWxfbWVkaWFfdW5yZWc6DQorCW1lZGlhX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPm1l ZGlhX2Rldik7DQorCW1lZGlhX2RldmljZV9jbGVhbnVwKCZjYW0tPm1lZGlhX2Rldik7DQorDQor CXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV92NGwyX3VucmVnaXN0ZXIo c3RydWN0IG10a19jYW1fZGV2ICpjYW0pDQorew0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gMDsg aSA8IE1US19DQU1fUDFfVE9UQUxfTk9ERVM7IGkrKykNCisJCW10a19jYW1fdmlkZW9fdW5yZWdp c3Rlcl9kZXZpY2UoJmNhbS0+dmRldl9ub2Rlc1tpXSk7DQorDQorCXZiMl9kbWFfY29udGlnX2Ns ZWFyX21heF9zZWdfc2l6ZShjYW0tPmRldik7DQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3Vi ZGV2KCZjYW0tPnN1YmRldik7DQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9k ZXYpOw0KKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmY2FtLT5zdWJkZXYuZW50aXR5KTsNCisJbWVk aWFfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+bWVkaWFfZGV2KTsNCisJbWVkaWFfZGV2aWNlX2Ns ZWFudXAoJmNhbS0+bWVkaWFfZGV2KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgbXRrX2NhbV9kZXZfbm90aWZpZXJfYm91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIg Km5vdGlmaWVyLA0KKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KKwkJCQkgICAg ICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCit7DQorCXN0cnVjdCBtdGtfY2FtX2Rl diAqY2FtID0NCisJCWNvbnRhaW5lcl9vZihub3RpZmllciwgc3RydWN0IG10a19jYW1fZGV2LCBu b3RpZmllcik7DQorDQorCWlmICghKHNkLT5lbnRpdHkuZnVuY3Rpb24gJiBNRURJQV9FTlRfRl9W SURfSUZfQlJJREdFKSkgew0KKwkJZGV2X2RiZyhjYW0tPmRldiwgIm5vIE1FRElBX0VOVF9GX1ZJ RF9JRl9CUklER0UgZnVuY3Rpb25cbiIpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJ Y2FtLT5zZW5pbmYgPSBzZDsNCisJZGV2X2RiZyhjYW0tPmRldiwgIiVzIGlzIGJvdW5kXG4iLCBz ZC0+ZW50aXR5Lm5hbWUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbXRr X2NhbV9kZXZfbm90aWZpZXJfdW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3Rp ZmllciwNCisJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQorCQkJCQlzdHJ1Y3QgdjRsMl9h c3luY19zdWJkZXYgKmFzZCkNCit7DQorCXN0cnVjdCBtdGtfY2FtX2RldiAqY2FtID0NCisJCWNv bnRhaW5lcl9vZihub3RpZmllciwgc3RydWN0IG10a19jYW1fZGV2LCBub3RpZmllcik7DQorDQor CWNhbS0+c2VuaW5mID0gTlVMTDsNCisJZGV2X2RiZyhjYW0tPmRldiwgIiVzIGlzIHVuYm91bmRc biIsIHNkLT5lbnRpdHkubmFtZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV9kZXZfbm90 aWZpZXJfY29tcGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyKQ0KK3sN CisJc3RydWN0IG10a19jYW1fZGV2ICpjYW0gPQ0KKwkJY29udGFpbmVyX29mKG5vdGlmaWVyLCBz dHJ1Y3QgbXRrX2NhbV9kZXYsIG5vdGlmaWVyKTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gY2Ft LT5kZXY7DQorCWludCByZXQ7DQorDQorCWlmICghY2FtLT5zZW5pbmYpIHsNCisJCWRldl9lcnIo ZGV2LCAiTm8gc2VuaW5mIHN1YmRldlxuIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0K KwlyZXQgPSBtZWRpYV9jcmVhdGVfcGFkX2xpbmsoJmNhbS0+c2VuaW5mLT5lbnRpdHksIE1US19D QU1fQ0lPX1BBRF9TUkMsDQorCQkJCSAgICAmY2FtLT5zdWJkZXYuZW50aXR5LCBNVEtfQ0FNX0NJ T19QQURfU0lOSywNCisJCQkJICAgIE1FRElBX0xOS19GTF9JTU1VVEFCTEUgfA0KKwkJCQkgICAg TUVESUFfTE5LX0ZMX0VOQUJMRUQpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBjcmVhdGUgcGFkIGxpbmsgJXMgJXMgZXJyOiVkXG4iLA0KKwkJCWNhbS0+c2VuaW5m LT5lbnRpdHkubmFtZSwgY2FtLT5zdWJkZXYuZW50aXR5Lm5hbWUsDQorCQkJcmV0KTsNCisJCXJl dHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2X25v ZGVzKCZjYW0tPnY0bDJfZGV2KTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBzdWJkZXYgbm9kZXM6JWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0 Ow0KKwl9DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9hc3luY19ub3RpZmllcl9vcGVyYXRpb25zIG10a19jYW1fdjRsMl9hc3luY19vcHMgPSB7DQor CS5ib3VuZCA9IG10a19jYW1fZGV2X25vdGlmaWVyX2JvdW5kLA0KKwkudW5iaW5kID0gbXRrX2Nh bV9kZXZfbm90aWZpZXJfdW5iaW5kLA0KKwkuY29tcGxldGUgPSBtdGtfY2FtX2Rldl9ub3RpZmll cl9jb21wbGV0ZSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbXRrX2NhbV92NGwyX2FzeW5jX3JlZ2lz dGVyKHN0cnVjdCBtdGtfY2FtX2RldiAqY2FtKQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g Y2FtLT5kZXY7DQorCWludCByZXQ7DQorDQorCXY0bDJfYXN5bmNfbm90aWZpZXJfaW5pdCgmY2Ft LT5ub3RpZmllcik7DQorCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfcGFyc2VfZndub2RlX2Vu ZHBvaW50cyhkZXYsDQorCQkmY2FtLT5ub3RpZmllciwgc2l6ZW9mKHN0cnVjdCB2NGwyX2FzeW5j X3N1YmRldiksIE5VTEwpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBwYXJzZSBmd25vZGUgZW5kcG9pbnRzOiVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwljYW0tPm5vdGlmaWVyLm9wcyA9ICZtdGtfY2FtX3Y0bDJfYXN5bmNfb3BzOw0KKwlk ZXZfZGJnKGRldiwgIm10a19jYW0gdjRsMl9hc3luY19ub3RpZmllcl9yZWdpc3RlclxuIik7DQor CXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfcmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYsICZjYW0t Pm5vdGlmaWVyKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVn aXN0ZXIgYXN5bmMgbm90aWZpZXIgOiAlZFxuIiwgcmV0KTsNCisJCXY0bDJfYXN5bmNfbm90aWZp ZXJfY2xlYW51cCgmY2FtLT5ub3RpZmllcik7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQor DQorc3RhdGljIHZvaWQgbXRrX2NhbV92NGwyX2FzeW5jX3VucmVnaXN0ZXIoc3RydWN0IG10a19j YW1fZGV2ICpjYW0pDQorew0KKwl2NGwyX2FzeW5jX25vdGlmaWVyX3VucmVnaXN0ZXIoJmNhbS0+ bm90aWZpZXIpOw0KKwl2NGwyX2FzeW5jX25vdGlmaWVyX2NsZWFudXAoJmNhbS0+bm90aWZpZXIp Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG10a19jYW1fdjRs Ml92Y2FwX2lvY3RsX29wcyA9IHsNCisJLnZpZGlvY19xdWVyeWNhcCA9IG10a19jYW1fdmlkaW9j X3F1ZXJ5Y2FwLA0KKwkudmlkaW9jX2VudW1fZnJhbWVzaXplcyA9IG10a19jYW1fdmlkaW9jX2Vu dW1fZnJhbWVzaXplcywNCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwID0gbXRrX2NhbV92aWRp b2NfZW51bV9mbXQsDQorCS52aWRpb2NfZ19mbXRfdmlkX2NhcF9tcGxhbmUgPSBtdGtfY2FtX3Zp ZGlvY19nX2ZtdCwNCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwX21wbGFuZSA9IG10a19jYW1fdmlk aW9jX3NfZm10LA0KKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcF9tcGxhbmUgPSBtdGtfY2FtX3Zp ZGlvY190cnlfZm10LA0KKwkudmlkaW9jX3JlcWJ1ZnMgPSB2YjJfaW9jdGxfcmVxYnVmcywNCisJ LnZpZGlvY19jcmVhdGVfYnVmcyA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywNCisJLnZpZGlvY19w cmVwYXJlX2J1ZiA9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwNCisJLnZpZGlvY19xdWVyeWJ1ZiA9 IHZiMl9pb2N0bF9xdWVyeWJ1ZiwNCisJLnZpZGlvY19xYnVmID0gdmIyX2lvY3RsX3FidWYsDQor CS52aWRpb2NfZHFidWYgPSB2YjJfaW9jdGxfZHFidWYsDQorCS52aWRpb2Nfc3RyZWFtb24gPSB2 YjJfaW9jdGxfc3RyZWFtb24sDQorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmIyX2lvY3RsX3N0cmVh bW9mZiwNCisJLnZpZGlvY19leHBidWYgPSB2YjJfaW9jdGxfZXhwYnVmLA0KKwkudmlkaW9jX3N1 YnNjcmliZV9ldmVudCA9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsDQorCS52aWRpb2NfdW5z dWJzY3JpYmVfZXZlbnQgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLA0KK307DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBtdGtfY2FtX3Y0bDJfbWV0YV9jYXBfaW9jdGxf b3BzID0gew0KKwkudmlkaW9jX3F1ZXJ5Y2FwID0gbXRrX2NhbV92aWRpb2NfcXVlcnljYXAsDQor CS52aWRpb2NfZW51bV9mbXRfbWV0YV9jYXAgPSBtdGtfY2FtX3ZpZGlvY19tZXRhX2VudW1fZm10 LA0KKwkudmlkaW9jX2dfZm10X21ldGFfY2FwID0gbXRrX2NhbV92aWRpb2NfZ19tZXRhX2ZtdCwN CisJLnZpZGlvY19zX2ZtdF9tZXRhX2NhcCA9IG10a19jYW1fdmlkaW9jX2dfbWV0YV9mbXQsDQor CS52aWRpb2NfdHJ5X2ZtdF9tZXRhX2NhcCA9IG10a19jYW1fdmlkaW9jX2dfbWV0YV9mbXQsDQor CS52aWRpb2NfcmVxYnVmcyA9IHZiMl9pb2N0bF9yZXFidWZzLA0KKwkudmlkaW9jX2NyZWF0ZV9i dWZzID0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLA0KKwkudmlkaW9jX3ByZXBhcmVfYnVmID0gdmIy X2lvY3RsX3ByZXBhcmVfYnVmLA0KKwkudmlkaW9jX3F1ZXJ5YnVmID0gdmIyX2lvY3RsX3F1ZXJ5 YnVmLA0KKwkudmlkaW9jX3FidWYgPSB2YjJfaW9jdGxfcWJ1ZiwNCisJLnZpZGlvY19kcWJ1ZiA9 IHZiMl9pb2N0bF9kcWJ1ZiwNCisJLnZpZGlvY19zdHJlYW1vbiA9IHZiMl9pb2N0bF9zdHJlYW1v biwNCisJLnZpZGlvY19zdHJlYW1vZmYgPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KKwkudmlkaW9j X2V4cGJ1ZiA9IHZiMl9pb2N0bF9leHBidWYsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0 IHY0bDJfaW9jdGxfb3BzIG10a19jYW1fdjRsMl9tZXRhX291dF9pb2N0bF9vcHMgPSB7DQorCS52 aWRpb2NfcXVlcnljYXAgPSBtdGtfY2FtX3ZpZGlvY19xdWVyeWNhcCwNCisJLnZpZGlvY19lbnVt X2ZtdF9tZXRhX291dCA9IG10a19jYW1fdmlkaW9jX21ldGFfZW51bV9mbXQsDQorCS52aWRpb2Nf Z19mbXRfbWV0YV9vdXQgPSBtdGtfY2FtX3ZpZGlvY19nX21ldGFfZm10LA0KKwkudmlkaW9jX3Nf Zm10X21ldGFfb3V0ID0gbXRrX2NhbV92aWRpb2NfZ19tZXRhX2ZtdCwNCisJLnZpZGlvY190cnlf Zm10X21ldGFfb3V0ID0gbXRrX2NhbV92aWRpb2NfZ19tZXRhX2ZtdCwNCisJLnZpZGlvY19yZXFi dWZzID0gdmIyX2lvY3RsX3JlcWJ1ZnMsDQorCS52aWRpb2NfY3JlYXRlX2J1ZnMgPSB2YjJfaW9j dGxfY3JlYXRlX2J1ZnMsDQorCS52aWRpb2NfcHJlcGFyZV9idWYgPSB2YjJfaW9jdGxfcHJlcGFy ZV9idWYsDQorCS52aWRpb2NfcXVlcnlidWYgPSB2YjJfaW9jdGxfcXVlcnlidWYsDQorCS52aWRp b2NfcWJ1ZiA9IHZiMl9pb2N0bF9xYnVmLA0KKwkudmlkaW9jX2RxYnVmID0gdmIyX2lvY3RsX2Rx YnVmLA0KKwkudmlkaW9jX3N0cmVhbW9uID0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KKwkudmlkaW9j X3N0cmVhbW9mZiA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsDQorCS52aWRpb2NfZXhwYnVmID0gdmIy X2lvY3RsX2V4cGJ1ZiwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mb3JtYXQg bWV0YV9mbXRzW10gPSB7DQorCXsNCisJCS5mbXQubWV0YSA9IHsNCisJCQkuZGF0YWZvcm1hdCA9 IFY0TDJfTUVUQV9GTVRfTVRJU1BfUEFSQU1TLA0KKwkJCS5idWZmZXJzaXplID0gNTEyICogU1pf MUssDQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10Lm1ldGEgPSB7DQorCQkJLmRhdGFmb3JtYXQg PSBWNEwyX01FVEFfRk1UX01USVNQXzNBLA0KKwkJCS5idWZmZXJzaXplID0gMTIwMCAqIFNaXzFL LA0KKwkJfSwNCisJfSwNCisJew0KKwkJLmZtdC5tZXRhID0gew0KKwkJCS5kYXRhZm9ybWF0ID0g VjRMMl9NRVRBX0ZNVF9NVElTUF9BRiwNCisJCQkuYnVmZmVyc2l6ZSA9IDY0MCAqIFNaXzFLLA0K KwkJfSwNCisJfSwNCisJew0KKwkJLmZtdC5tZXRhID0gew0KKwkJCS5kYXRhZm9ybWF0ID0gVjRM Ml9NRVRBX0ZNVF9NVElTUF9MQ1MsDQorCQkJLmJ1ZmZlcnNpemUgPSAyODggKiBTWl8xSywNCisJ CX0sDQorCX0sDQorCXsNCisJCS5mbXQubWV0YSA9IHsNCisJCQkuZGF0YWZvcm1hdCA9IFY0TDJf TUVUQV9GTVRfTVRJU1BfTE1WLA0KKwkJCS5idWZmZXJzaXplID0gMjU2LA0KKwkJfSwNCisJfSwN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mb3JtYXQgc3RyZWFtX291dF9mbXRz W10gPSB7DQorCS8qIFRoaXMgaXMgYSBkZWZhdWx0IGltYWdlIGZvcm1hdCAqLw0KKwl7DQorCQku Zm10LnBpeF9tcCA9IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQg PSBJTUdfTUFYX0hFSUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1Bf U0JHR1IxMCwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJCS53aWR0 aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0KKwkJCS5w aXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TQkdHUjgsDQorCQl9LA0KKwl9LA0KKwl7 DQorCQkuZm10LnBpeF9tcCA9IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5o ZWlnaHQgPSBJTUdfTUFYX0hFSUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRf TVRJU1BfU0JHR1IxMiwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJ CS53aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0K KwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TQkdHUjE0LA0KKwkJfSwNCisJ fSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9XSURUSCwN CisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9Q SVhfRk1UX01USVNQX1NHQlJHOCwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0g ew0KKwkJCS53aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJ R0hULA0KKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TR0JSRzEwLA0KKwkJ fSwNCisJfSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9X SURUSCwNCisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0g VjRMMl9QSVhfRk1UX01USVNQX1NHQlJHMTIsDQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10LnBp eF9tcCA9IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQgPSBJTUdf TUFYX0hFSUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dCUkcx NCwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJCS53aWR0aCA9IElN R19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0KKwkJCS5waXhlbGZv cm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TR1JCRzgsDQorCQl9LA0KKwl9LA0KKwl7DQorCQku Zm10LnBpeF9tcCA9IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQg PSBJTUdfTUFYX0hFSUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1Bf U0dSQkcxMCwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJCS53aWR0 aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0KKwkJCS5w aXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TR1JCRzEyLA0KKwkJfSwNCisJfSwNCisJ ew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9XSURUSCwNCisJCQku aGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1U X01USVNQX1NHUkJHMTQsDQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10LnBpeF9tcCA9IHsNCisJ CQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQgPSBJTUdfTUFYX0hFSUdIVCwN CisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1BfU1JHR0I4LA0KKwkJfSwNCisJ fSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9XSURUSCwN CisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9Q SVhfRk1UX01USVNQX1NSR0dCMTAsDQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10LnBpeF9tcCA9 IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQgPSBJTUdfTUFYX0hF SUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1BfU1JHR0IxMiwNCisJ CX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJCS53aWR0aCA9IElNR19NQVhf V0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0KKwkJCS5waXhlbGZvcm1hdCA9 IFY0TDJfUElYX0ZNVF9NVElTUF9TUkdHQjE0LA0KKwkJfSwNCisJfSwNCit9Ow0KKw0KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9mb3JtYXQgYmluX291dF9mbXRzW10gPSB7DQorCXsNCisJCS5m bXQucGl4X21wID0gew0KKwkJCS53aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9 IElNR19NQVhfSEVJR0hULA0KKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9T QkdHUjhGLA0KKwkJfSwNCisJfSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRo ID0gSU1HX01BWF9XSURUSCwNCisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBp eGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01USVNQX1NCR0dSMTBGLA0KKwkJfSwNCisJfSwNCisJ ew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9XSURUSCwNCisJCQku aGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1U X01USVNQX1NCR0dSMTJGLA0KKwkJfSwNCisJfSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQor CQkJLndpZHRoID0gSU1HX01BWF9XSURUSCwNCisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQs DQorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01USVNQX1NCR0dSMTRGLA0KKwkJfSwN CisJfSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9XSURU SCwNCisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0gVjRM Ml9QSVhfRk1UX01USVNQX1NHQlJHOEYsDQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10LnBpeF9t cCA9IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQgPSBJTUdfTUFY X0hFSUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dCUkcxMEYs DQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10LnBpeF9tcCA9IHsNCisJCQkud2lkdGggPSBJTUdf TUFYX1dJRFRILA0KKwkJCS5oZWlnaHQgPSBJTUdfTUFYX0hFSUdIVCwNCisJCQkucGl4ZWxmb3Jt YXQgPSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dCUkcxMkYsDQorCQl9LA0KKwl9LA0KKwl7DQorCQku Zm10LnBpeF9tcCA9IHsNCisJCQkud2lkdGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQg PSBJTUdfTUFYX0hFSUdIVCwNCisJCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1Bf U0dCUkcxNEYsDQorCQl9LA0KKwl9LA0KKwl7DQorCQkuZm10LnBpeF9tcCA9IHsNCisJCQkud2lk dGggPSBJTUdfTUFYX1dJRFRILA0KKwkJCS5oZWlnaHQgPSBJTUdfTUFYX0hFSUdIVCwNCisJCQku cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVRJU1BfU0dSQkc4RiwNCisJCX0sDQorCX0sDQor CXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJCS53aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJ LmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0KKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZN VF9NVElTUF9TR1JCRzEwRiwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0K KwkJCS53aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hU LA0KKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TR1JCRzEyRiwNCisJCX0s DQorCX0sDQorCXsNCisJCS5mbXQucGl4X21wID0gew0KKwkJCS53aWR0aCA9IElNR19NQVhfV0lE VEgsDQorCQkJLmhlaWdodCA9IElNR19NQVhfSEVJR0hULA0KKwkJCS5waXhlbGZvcm1hdCA9IFY0 TDJfUElYX0ZNVF9NVElTUF9TR1JCRzE0RiwNCisJCX0sDQorCX0sDQorCXsNCisJCS5mbXQucGl4 X21wID0gew0KKwkJCS53aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJLmhlaWdodCA9IElNR19N QVhfSEVJR0hULA0KKwkJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NVElTUF9TUkdHQjhG LA0KKwkJfSwNCisJfSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1H X01BWF9XSURUSCwNCisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9y bWF0ID0gVjRMMl9QSVhfRk1UX01USVNQX1NSR0dCMTBGLA0KKwkJfSwNCisJfSwNCisJew0KKwkJ LmZtdC5waXhfbXAgPSB7DQorCQkJLndpZHRoID0gSU1HX01BWF9XSURUSCwNCisJCQkuaGVpZ2h0 ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01USVNQ X1NSR0dCMTJGLA0KKwkJfSwNCisJfSwNCisJew0KKwkJLmZtdC5waXhfbXAgPSB7DQorCQkJLndp ZHRoID0gSU1HX01BWF9XSURUSCwNCisJCQkuaGVpZ2h0ID0gSU1HX01BWF9IRUlHSFQsDQorCQkJ LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01USVNQX1NSR0dCMTRGLA0KKwkJfSwNCisJfSwN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QNCittdGtfY2FtX2Rldl9ub2RlX2Rlc2Mgb3V0 cHV0X3F1ZXVlc1tdID0gew0KKwl7DQorCQkuaWQgPSBNVEtfQ0FNX1AxX01FVEFfSU5fMCwNCisJ CS5uYW1lID0gIm1ldGEgaW5wdXQiLA0KKwkJLmNhcCA9IFY0TDJfQ0FQX01FVEFfT1VUUFVULA0K KwkJLmJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9NRVRBX09VVFBVVCwNCisJCS5saW5rX2ZsYWdz ID0gMCwNCisJCS5pbWFnZSA9IGZhbHNlLA0KKwkJLnNtZW1fYWxsb2MgPSB0cnVlLA0KKwkJLmZt dHMgPSBtZXRhX2ZtdHMsDQorCQkuZGVmYXVsdF9mbXRfaWR4ID0gMCwNCisJCS5tYXhfYnVmX2Nv dW50ID0gMTAsDQorCQkuaW9jdGxfb3BzID0gJm10a19jYW1fdjRsMl9tZXRhX291dF9pb2N0bF9v cHMsDQorCX0sDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0DQorbXRrX2NhbV9kZXZfbm9k ZV9kZXNjIGNhcHR1cmVfcXVldWVzW10gPSB7DQorCXsNCisJCS5pZCA9IE1US19DQU1fUDFfTUFJ Tl9TVFJFQU1fT1VULA0KKwkJLm5hbWUgPSAibWFpbiBzdHJlYW0iLA0KKwkJLmNhcCA9IFY0TDJf Q0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5FLA0KKwkJLmJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9W SURFT19DQVBUVVJFX01QTEFORSwNCisJCS5saW5rX2ZsYWdzID0gTUVESUFfTE5LX0ZMX0lNTVVU QUJMRSB8IE1FRElBX0xOS19GTF9FTkFCTEVELA0KKwkJLmltYWdlID0gdHJ1ZSwNCisJCS5zbWVt X2FsbG9jID0gZmFsc2UsDQorCQkuZG1hX3BvcnQgPSBSX0lNR08sDQorCQkuZm10cyA9IHN0cmVh bV9vdXRfZm10cywNCisJCS5udW1fZm10cyA9IEFSUkFZX1NJWkUoc3RyZWFtX291dF9mbXRzKSwN CisJCS5kZWZhdWx0X2ZtdF9pZHggPSAwLA0KKwkJLmlvY3RsX29wcyA9ICZtdGtfY2FtX3Y0bDJf dmNhcF9pb2N0bF9vcHMsDQorCQkuZnJtc2l6ZXMgPSAmKHN0cnVjdCB2NGwyX2ZybXNpemVlbnVt KSB7DQorCQkJLmluZGV4ID0gMCwNCisJCQkudHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0NPTlRJ TlVPVVMsDQorCQkJLnN0ZXB3aXNlID0gew0KKwkJCQkubWF4X3dpZHRoID0gSU1HX01BWF9XSURU SCwNCisJCQkJLm1pbl93aWR0aCA9IElNR19NSU5fV0lEVEgsDQorCQkJCS5tYXhfaGVpZ2h0ID0g SU1HX01BWF9IRUlHSFQsDQorCQkJCS5taW5faGVpZ2h0ID0gSU1HX01JTl9IRUlHSFQsDQorCQkJ CS5zdGVwX2hlaWdodCA9IDEsDQorCQkJCS5zdGVwX3dpZHRoID0gMSwNCisJCQl9LA0KKwkJfSwN CisJfSwNCisJew0KKwkJLmlkID0gTVRLX0NBTV9QMV9QQUNLRURfQklOX09VVCwNCisJCS5uYW1l ID0gInBhY2tlZCBvdXQiLA0KKwkJLmNhcCA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5F LA0KKwkJLmJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSwNCisJ CS5saW5rX2ZsYWdzID0gMCwNCisJCS5pbWFnZSA9IHRydWUsDQorCQkuc21lbV9hbGxvYyA9IGZh bHNlLA0KKwkJLmRtYV9wb3J0ID0gUl9SUlpPLA0KKwkJLmZtdHMgPSBiaW5fb3V0X2ZtdHMsDQor CQkubnVtX2ZtdHMgPSBBUlJBWV9TSVpFKGJpbl9vdXRfZm10cyksDQorCQkuZGVmYXVsdF9mbXRf aWR4ID0gMCwNCisJCS5pb2N0bF9vcHMgPSAmbXRrX2NhbV92NGwyX3ZjYXBfaW9jdGxfb3BzLA0K KwkJLmZybXNpemVzID0gJihzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSkgew0KKwkJCS5pbmRleCA9 IDAsDQorCQkJLnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTLA0KKwkJCS5zdGVw d2lzZSA9IHsNCisJCQkJLm1heF93aWR0aCA9IElNR19NQVhfV0lEVEgsDQorCQkJCS5taW5fd2lk dGggPSBJTUdfTUlOX1dJRFRILA0KKwkJCQkubWF4X2hlaWdodCA9IElNR19NQVhfSEVJR0hULA0K KwkJCQkubWluX2hlaWdodCA9IElNR19NSU5fSEVJR0hULA0KKwkJCQkuc3RlcF9oZWlnaHQgPSAx LA0KKwkJCQkuc3RlcF93aWR0aCA9IDEsDQorCQkJfSwNCisJCX0sDQorCX0sDQorCXsNCisJCS5p ZCA9IE1US19DQU1fUDFfTUVUQV9PVVRfMCwNCisJCS5uYW1lID0gInBhcnRpYWwgbWV0YSAwIiwN CisJCS5jYXAgPSBWNEwyX0NBUF9NRVRBX0NBUFRVUkUsDQorCQkuYnVmX3R5cGUgPSBWNEwyX0JV Rl9UWVBFX01FVEFfQ0FQVFVSRSwNCisJCS5saW5rX2ZsYWdzID0gMCwNCisJCS5pbWFnZSA9IGZh bHNlLA0KKwkJLnNtZW1fYWxsb2MgPSBmYWxzZSwNCisJCS5kbWFfcG9ydCA9IFJfQUFPIHwgUl9G TEtPIHwgUl9QU08sDQorCQkuZm10cyA9IG1ldGFfZm10cywNCisJCS5kZWZhdWx0X2ZtdF9pZHgg PSAxLA0KKwkJLm1heF9idWZfY291bnQgPSA1LA0KKwkJLmlvY3RsX29wcyA9ICZtdGtfY2FtX3Y0 bDJfbWV0YV9jYXBfaW9jdGxfb3BzLA0KKwl9LA0KKwl7DQorCQkuaWQgPSBNVEtfQ0FNX1AxX01F VEFfT1VUXzEsDQorCQkubmFtZSA9ICJwYXJ0aWFsIG1ldGEgMSIsDQorCQkuY2FwID0gVjRMMl9D QVBfTUVUQV9DQVBUVVJFLA0KKwkJLmJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9NRVRBX0NBUFRV UkUsDQorCQkubGlua19mbGFncyA9IDAsDQorCQkuaW1hZ2UgPSBmYWxzZSwNCisJCS5zbWVtX2Fs bG9jID0gZmFsc2UsDQorCQkuZG1hX3BvcnQgPSBSX0FGTywNCisJCS5mbXRzID0gbWV0YV9mbXRz LA0KKwkJLmRlZmF1bHRfZm10X2lkeCA9IDIsDQorCQkubWF4X2J1Zl9jb3VudCA9IDUsDQorCQku aW9jdGxfb3BzID0gJm10a19jYW1fdjRsMl9tZXRhX2NhcF9pb2N0bF9vcHMsDQorCX0sDQorCXsN CisJCS5pZCA9IE1US19DQU1fUDFfTUVUQV9PVVRfMiwNCisJCS5uYW1lID0gInBhcnRpYWwgbWV0 YSAyIiwNCisJCS5jYXAgPSBWNEwyX0NBUF9NRVRBX0NBUFRVUkUsDQorCQkuYnVmX3R5cGUgPSBW NEwyX0JVRl9UWVBFX01FVEFfQ0FQVFVSRSwNCisJCS5saW5rX2ZsYWdzID0gMCwNCisJCS5pbWFn ZSA9IGZhbHNlLA0KKwkJLnNtZW1fYWxsb2MgPSBmYWxzZSwNCisJCS5kbWFfcG9ydCA9IFJfTENT TywNCisJCS5mbXRzID0gbWV0YV9mbXRzLA0KKwkJLmRlZmF1bHRfZm10X2lkeCA9IDMsDQorCQku bWF4X2J1Zl9jb3VudCA9IDEwLA0KKwkJLmlvY3RsX29wcyA9ICZtdGtfY2FtX3Y0bDJfbWV0YV9j YXBfaW9jdGxfb3BzLA0KKwl9LA0KKwl7DQorCQkuaWQgPSBNVEtfQ0FNX1AxX01FVEFfT1VUXzMs DQorCQkubmFtZSA9ICJwYXJ0aWFsIG1ldGEgMyIsDQorCQkuY2FwID0gVjRMMl9DQVBfTUVUQV9D QVBUVVJFLA0KKwkJLmJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9NRVRBX0NBUFRVUkUsDQorCQku bGlua19mbGFncyA9IDAsDQorCQkuaW1hZ2UgPSBmYWxzZSwNCisJCS5zbWVtX2FsbG9jID0gZmFs c2UsDQorCQkuZG1hX3BvcnQgPSBSX0xNVk8sDQorCQkuZm10cyA9IG1ldGFfZm10cywNCisJCS5k ZWZhdWx0X2ZtdF9pZHggPSA0LA0KKwkJLm1heF9idWZfY291bnQgPSAxMCwNCisJCS5pb2N0bF9v cHMgPSAmbXRrX2NhbV92NGwyX21ldGFfY2FwX2lvY3RsX29wcywNCisJfSwNCit9Ow0KKw0KKy8q IFRoZSBoZWxwZXIgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UgY29udGV4dCAqLw0KK3N0YXRpYyB2 b2lkIG10a19jYW1fZGV2X3F1ZXVlX3NldHVwKHN0cnVjdCBtdGtfY2FtX2RldiAqY2FtKQ0KK3sN CisJdW5zaWduZWQgaW50IG5vZGVfaWR4Ow0KKwlpbnQgaTsNCisNCisJbm9kZV9pZHggPSAwOw0K KwkvKiBTZXR1cCB0aGUgb3V0cHV0IHF1ZXVlICovDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKG91dHB1dF9xdWV1ZXMpOyBpKyspDQorCQljYW0tPnZkZXZfbm9kZXNbbm9kZV9pZHgrK10u ZGVzYyA9IG91dHB1dF9xdWV1ZXNbaV07DQorDQorCS8qIFNldHVwIHRoZSBjYXB0dXJlIHF1ZXVl ICovDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhcHR1cmVfcXVldWVzKTsgaSsrKQ0K KwkJY2FtLT52ZGV2X25vZGVzW25vZGVfaWR4KytdLmRlc2MgPSBjYXB0dXJlX3F1ZXVlc1tpXTsN Cit9DQorDQoraW50IG10a19jYW1fZGV2X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwNCisJCSAgICAgc3RydWN0IG10a19jYW1fZGV2ICpjYW0pDQorew0KKwlpbnQgcmV0Ow0KKw0K KwljYW0tPmRldiA9ICZwZGV2LT5kZXY7DQorCW10a19jYW1fZGV2X3F1ZXVlX3NldHVwKGNhbSk7 DQorDQorCXNwaW5fbG9ja19pbml0KCZjYW0tPnBlbmRpbmdfam9iX2xvY2spOw0KKwlzcGluX2xv Y2tfaW5pdCgmY2FtLT5ydW5uaW5nX2pvYl9sb2NrKTsNCisJSU5JVF9MSVNUX0hFQUQoJmNhbS0+ cGVuZGluZ19qb2JfbGlzdCk7DQorCUlOSVRfTElTVF9IRUFEKCZjYW0tPnJ1bm5pbmdfam9iX2xp c3QpOw0KKwltdXRleF9pbml0KCZjYW0tPm9wX2xvY2spOw0KKw0KKwkvKiB2NGwyIHN1Yi1kZXZp Y2UgcmVnaXN0cmF0aW9uICovDQorCXJldCA9IG10a19jYW1fdjRsMl9yZWdpc3RlcihjYW0pOw0K KwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gbXRrX2NhbV92NGwyX2FzeW5j X3JlZ2lzdGVyKGNhbSk7DQorCWlmIChyZXQpDQorCQlnb3RvIGZhaWxfdjRsMl91bnJlZzsNCisN CisJcmV0dXJuIDA7DQorDQorZmFpbF92NGwyX3VucmVnOg0KKwltdXRleF9kZXN0cm95KCZjYW0t Pm9wX2xvY2spOw0KKwltdGtfY2FtX3Y0bDJfdW5yZWdpc3RlcihjYW0pOw0KKw0KKwlyZXR1cm4g cmV0Ow0KK30NCisNCit2b2lkIG10a19jYW1fZGV2X2NsZWFudXAoc3RydWN0IG10a19jYW1fZGV2 ICpjYW0pDQorew0KKwltdGtfY2FtX3Y0bDJfYXN5bmNfdW5yZWdpc3RlcihjYW0pOw0KKwltdGtf Y2FtX3Y0bDJfdW5yZWdpc3RlcihjYW0pOw0KKwltdXRleF9kZXN0cm95KCZjYW0tPm9wX2xvY2sp Ow0KK30NCisNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNw XzUwL2NhbS9tdGtfY2FtLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUw L2NhbS9tdGtfY2FtLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAu LjBhMzQwYTFlNjVlYQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS5oDQpAQCAtMCwwICsxLDI0NCBAQA0KKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoNCisgKiBDb3B5cmlnaHQgKGMp IDIwMTkgTWVkaWFUZWsgSW5jLg0KKyAqLw0KKw0KKyNpZm5kZWYgX19NVEtfQ0FNX0hfXw0KKyNk ZWZpbmUgX19NVEtfQ0FNX0hfXw0KKw0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2 Mi5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92 NGwyLWN0cmxzLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+DQorI2luY2x1ZGUg PG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+DQorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi12NGwy Lmg+DQorDQorI2luY2x1ZGUgIm10a19jYW0taXBpLmgiDQorDQorI2RlZmluZSBJTUdfTUFYX1dJ RFRICQk1Mzc2DQorI2RlZmluZSBJTUdfTUFYX0hFSUdIVAkJNDAzMg0KKyNkZWZpbmUgSU1HX01J Tl9XSURUSAkJODANCisjZGVmaW5lIElNR19NSU5fSEVJR0hUCQk2MA0KKw0KKy8qDQorICogSUQg ZW51bSB2YWx1ZSBmb3Igc3RydWN0IG10a19jYW1fZGV2X25vZGVfZGVzYzppZA0KKyAqIG9yIG10 a19jYW1fdmlkZW9fZGV2aWNlOmlkDQorICovDQorZW51bSAgew0KKwlNVEtfQ0FNX1AxX01FVEFf SU5fMCA9IDAsDQorCU1US19DQU1fUDFfTUFJTl9TVFJFQU1fT1VULA0KKwlNVEtfQ0FNX1AxX1BB Q0tFRF9CSU5fT1VULA0KKwlNVEtfQ0FNX1AxX01FVEFfT1VUXzAsDQorCU1US19DQU1fUDFfTUVU QV9PVVRfMSwNCisJTVRLX0NBTV9QMV9NRVRBX09VVF8yLA0KKwlNVEtfQ0FNX1AxX01FVEFfT1VU XzMsDQorCU1US19DQU1fUDFfVE9UQUxfTk9ERVMNCit9Ow0KKw0KKy8qIFN1cHBvcnRlZCBpbWFn ZSBmb3JtYXQgbGlzdCAqLw0KKyNkZWZpbmUgTVRLX0NBTV9JTUdfRk1UX1VOS05PV04JCTB4MDAw MA0KKyNkZWZpbmUgTVRLX0NBTV9JTUdfRk1UX0JBWUVSOAkJMHgyMjAwDQorI2RlZmluZSBNVEtf Q0FNX0lNR19GTVRfQkFZRVIxMAkJMHgyMjAxDQorI2RlZmluZSBNVEtfQ0FNX0lNR19GTVRfQkFZ RVIxMgkJMHgyMjAyDQorI2RlZmluZSBNVEtfQ0FNX0lNR19GTVRfQkFZRVIxNAkJMHgyMjAzDQor I2RlZmluZSBNVEtfQ0FNX0lNR19GTVRfRkdfQkFZRVI4CTB4MjIwNA0KKyNkZWZpbmUgTVRLX0NB TV9JTUdfRk1UX0ZHX0JBWUVSMTAJMHgyMjA1DQorI2RlZmluZSBNVEtfQ0FNX0lNR19GTVRfRkdf QkFZRVIxMgkweDIyMDYNCisjZGVmaW5lIE1US19DQU1fSU1HX0ZNVF9GR19CQVlFUjE0CTB4MjIw Nw0KKw0KKy8qIFN1cHBvcnRlZCBiYXllciBwaXhlbCBvcmRlciAqLw0KKyNkZWZpbmUgTVRLX0NB TV9SQVdfUFhMX0lEX0IJCTANCisjZGVmaW5lIE1US19DQU1fUkFXX1BYTF9JRF9HQgkJMQ0KKyNk ZWZpbmUgTVRLX0NBTV9SQVdfUFhMX0lEX0dSCQkyDQorI2RlZmluZSBNVEtfQ0FNX1JBV19QWExf SURfUgkJMw0KKyNkZWZpbmUgTVRLX0NBTV9SQVdfUFhMX0lEX1VOS05PV04JNA0KKw0KKy8qDQor ICogc3RydWN0IG10a19wMV9mcmFtZV9wYXJhbSAtIE1USyBJU1AgUDEgZHJpdmVyIGZyYW1lIHBh cmFtZXRlcnMuDQorICoNCisgKiBAZnJhbWVfc2VxX25vOiBUaGUgZnJhbWUgc2VxdWVuY2Ugb2Yg ZnJhbWUgaW4gZHJpdmVyIGxheWVyLg0KKyAqIEBkbWFfYnVmczogVGhlIERNQSBidWZmZXIgYWRk cmVzcyBpbmZvcm1hdGlvbiBvZiBlbmFibGVkIERNQSBub2Rlcy4NCisgKg0KKyAqLw0KK3N0cnVj dCBtdGtfcDFfZnJhbWVfcGFyYW0gew0KKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2VxX25vOw0KKwlz dHJ1Y3QgZG1hX2J1ZmZlciBkbWFfYnVmc1tNVEtfQ0FNX1AxX1RPVEFMX05PREVTXTsNCit9IF9f cGFja2VkOw0KKw0KKy8qDQorICogc3RydWN0IG10a19jYW1fZGV2X3JlcXVlc3QgLSBNVEsgY2Ft ZXJhIGRldmljZSByZXF1ZXN0Lg0KKyAqDQorICogQHJlcTogRW1iZWRkZWQgc3RydWN0IG1lZGlh IHJlcXVlc3QuDQorICogQGZyYW1lX3BhcmFtczogVGhlIGZyYW1lIGluZm8uICYgYWRkcmVzcyBp bmZvLiBvZiBlbmFibGVkIERNQSBub2Rlcy4NCisgKiBAZnJhbWVfd29yazogd29yayBxdWV1ZSBl bnRyeSBmb3IgZnJhbWUgdHJhbnNtaXNzaW9uIHRvIFNDUC4NCisgKiBAbGlzdDogTGlzdCBlbnRy eSBvZiB0aGUgb2JqZWN0IGZvciBAc3RydWN0IG10a19jYW1fZGV2Og0KKyAqICAgICAgICBwZW5k aW5nX2pvYl9saXN0IG9yIHJ1bm5pbmdfam9iX2xpc3QuDQorICogQHRpbWVzdGFtcDogU3RhcnQg b2YgZnJhbWUgdGltZXN0YW1wIGluIG5zDQorICoNCisgKi8NCitzdHJ1Y3QgbXRrX2NhbV9kZXZf cmVxdWVzdCB7DQorCXN0cnVjdCBtZWRpYV9yZXF1ZXN0IHJlcTsNCisJc3RydWN0IG10a19wMV9m cmFtZV9wYXJhbSBmcmFtZV9wYXJhbXM7DQorCXN0cnVjdCB3b3JrX3N0cnVjdCBmcmFtZV93b3Jr Ow0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQorCXU2NCB0aW1lc3RhbXA7DQorfTsNCisNCisv Kg0KKyAqIHN0cnVjdCBtdGtfY2FtX2Rldl9idWZmZXIgLSBNVEsgY2FtZXJhIGRldmljZSBidWZm ZXIuDQorICoNCisgKiBAdmJiOiBFbWJlZGRlZCBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyLg0KKyAq IEBsaXN0OiBMaXN0IGVudHJ5IG9mIHRoZSBvYmplY3QgZm9yIEBzdHJ1Y3QgbXRrX2NhbV92aWRl b19kZXZpY2U6DQorICogICAgICAgIGJ1Zl9saXN0Lg0KKyAqIEBkYWRkcjogVGhlIERNQSBhZGRy ZXNzIG9mIHRoaXMgYnVmZmVyLg0KKyAqIEBzY3BfYWRkcjogVGhlIFNDUCBhZGRyZXNzIG9mIHRo aXMgYnVmZmVyIHdoaWNoDQorICogICAgICAgICAgICBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgbWV0 YSBpbnB1dCBub2RlLg0KKyAqIEBub2RlX2lkOiBUaGUgdmlkb2Ugbm9kZSBpZCB3aGljaCB0aGlz IGJ1ZmZlciBiZWxvbmdzIHRvLg0KKyAqDQorICovDQorc3RydWN0IG10a19jYW1fZGV2X2J1ZmZl ciB7DQorCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgdmJiOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxp c3Q7DQorCS8qIEludGVuYWwgcGFydCAqLw0KKwlkbWFfYWRkcl90IGRhZGRyOw0KKwlkbWFfYWRk cl90IHNjcF9hZGRyOw0KKwl1bnNpZ25lZCBpbnQgbm9kZV9pZDsNCit9Ow0KKw0KKy8qDQorICog c3RydWN0IG10a19jYW1fZGV2X25vZGVfZGVzYyAtIE1USyBjYW1lcmEgZGV2aWNlIG5vZGUgZGVz Y3JpcHRvcg0KKyAqDQorICogQGlkOiBpZCBvZiB0aGUgbm9kZQ0KKyAqIEBuYW1lOiBuYW1lIG9m IHRoZSBub2RlDQorICogQGNhcDogc3VwcG9ydGVkIFY0TDIgY2FwYWJpbGl0aWVzDQorICogQGJ1 Zl90eXBlOiBzdXBwb3J0ZWQgVjRMMiBidWZmZXIgdHlwZQ0KKyAqIEBkbWFfcG9ydDogdGhlIGRt YSBwb3J0cyBhc3NvY2lhdGVkIHRvIHRoZSBub2RlDQorICogQGxpbmtfZmxhZ3M6IGRlZmF1bHQg bWVkaWEgbGluayBmbGFncw0KKyAqIEBzbWVtX2FsbG9jOiB1c2luZyB0aGUgc21lbV9kZXYgYXMg YWxsb2MgZGV2aWNlIG9yIG5vdA0KKyAqIEBpbWFnZTogdHJ1ZSBmb3IgaW1hZ2Ugbm9kZSwgZmFs c2UgZm9yIG1ldGEgbm9kZQ0KKyAqIEBudW1fZm10czogdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQg bm9kZSBmb3JtYXRzDQorICogQGRlZmF1bHRfZm10X2lkeDogZGVmYXVsdCBmb3JtYXQgb2YgdGhp cyBub2RlDQorICogQG1heF9idWZfY291bnQ6IG1heGltdW0gVkIyIGJ1ZmZlciBjb3VudA0KKyAq IEBpb2N0bF9vcHM6ICBtYXBwZWQgdG8gdjRsMl9pb2N0bF9vcHMNCisgKiBAZm10czogc3VwcG9y dGVkIGZvcm1hdA0KKyAqIEBmcm1zaXplczogc3VwcG9ydGVkIFY0TDIgZnJhbWUgc2l6ZSBudW1i ZXINCisgKg0KKyAqLw0KK3N0cnVjdCBtdGtfY2FtX2Rldl9ub2RlX2Rlc2Mgew0KKwl1OCBpZDsN CisJY29uc3QgY2hhciAqbmFtZTsNCisJdTMyIGNhcDsNCisJdTMyIGJ1Zl90eXBlOw0KKwl1MzIg ZG1hX3BvcnQ7DQorCXUzMiBsaW5rX2ZsYWdzOw0KKwl1OCBzbWVtX2FsbG9jOjE7DQorCXU4IGlt YWdlOjE7DQorCXU4IG51bV9mbXRzOw0KKwl1OCBkZWZhdWx0X2ZtdF9pZHg7DQorCXU4IG1heF9i dWZfY291bnQ7DQorCWNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyAqaW9jdGxfb3BzOw0KKwlj b25zdCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdHM7DQorCWNvbnN0IHN0cnVjdCB2NGwyX2ZybXNp emVlbnVtICpmcm1zaXplczsNCit9Ow0KKw0KKy8qDQorICogc3RydWN0IG10a19jYW1fdmlkZW9f ZGV2aWNlIC0gTWVkaWF0ZWsgdmlkZW8gZGV2aWNlIHN0cnVjdHVyZQ0KKyAqDQorICogQGlkOiBJ ZCBmb3IgaW5kZXggb2YgbXRrX2NhbV9kZXY6dmRldl9ub2RlcyBhcnJheQ0KKyAqIEBlbmFibGVk OiBJbmRpY2F0ZSB0aGUgdmlkZW8gZGV2aWNlIGlzIGVuYWJsZWQgb3Igbm90DQorICogQGRlc2M6 IFRoZSBub2RlIGRlc2NyaXB0aW9uIG9mIHZpZGVvIGRldmljZQ0KKyAqIEB2ZGV2X2ZtdDogVGhl IFY0TDIgZm9ybWF0IG9mIHZpZGVvIGRldmljZQ0KKyAqIEB2ZGV2X3BhZDogVGhlIG1lZGlhIHBh ZCBncmFwaCBvYmplY3Qgb2YgdmlkZW8gZGV2aWNlDQorICogQHZicTogQSB2aWRlb2J1ZiBxdWV1 ZSBvZiB2aWRlbyBkZXZpY2UNCisgKiBAdmRldjogVGhlIHZpZGVvIGRldmljZSBpbnN0YW5jZQ0K KyAqIEB2ZGV2X2xvY2s6IFNlcmlhbGl6ZXMgdmIyIHF1ZXVlIGFuZCB2aWRlbyBkZXZpY2Ugb3Bl cmF0aW9ucw0KKyAqIEBidWZfbGlzdDogTGlzdCBmb3IgZW5xdWV1ZSBidWZmZXJzDQorICogQGJ1 Zl9saXN0X2xvY2s6IExvY2sgdXNlZCB0byBwcm90ZWN0IGJ1ZmZlciBsaXN0Lg0KKyAqDQorICov DQorc3RydWN0IG10a19jYW1fdmlkZW9fZGV2aWNlIHsNCisJdW5zaWduZWQgaW50IGlkOw0KKwl1 bnNpZ25lZCBpbnQgZW5hYmxlZDsNCisJc3RydWN0IG10a19jYW1fZGV2X25vZGVfZGVzYyBkZXNj Ow0KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgdmRldl9mbXQ7DQorCXN0cnVjdCBtZWRpYV9wYWQgdmRl dl9wYWQ7DQorCXN0cnVjdCB2YjJfcXVldWUgdmJxOw0KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZk ZXY7DQorCS8qIFNlcmlhbGl6ZXMgdmIyIHF1ZXVlIGFuZCB2aWRlbyBkZXZpY2Ugb3BlcmF0aW9u cyAqLw0KKwlzdHJ1Y3QgbXV0ZXggdmRldl9sb2NrOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1Zl9s aXN0Ow0KKwkvKiBMb2NrIHVzZWQgdG8gcHJvdGVjdCBidWZmZXIgbGlzdCAqLw0KKwlzcGlubG9j a190IGJ1Zl9saXN0X2xvY2s7DQorfTsNCisNCisvKg0KKyAqIHN0cnVjdCBtdGtfY2FtX2RldiAt IE1lZGlhdGVrIGNhbWVyYSBkZXZpY2Ugc3RydWN0dXJlLg0KKyAqDQorICogQGRldjogUG9pbnRl ciB0byBkZXZpY2UuDQorICogQHNtZW1fcGRldjogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IGRl dmljZS4NCisgKiBAcGlwZWxpbmU6IE1lZGlhIHBpcGVsaW5lIGluZm9ybWF0aW9uLg0KKyAqIEBt ZWRpYV9kZXY6IE1lZGlhIGRldmljZSBpbnN0YW5jZS4NCisgKiBAc3ViZGV2OiBUaGUgVjRMMiBz dWItZGV2aWNlIGluc3RhbmNlLg0KKyAqIEB2NGwyX2RldjogVGhlIFY0TDIgZGV2aWNlIGRyaXZl ciBpbnN0YW5jZS4NCisgKiBAbm90aWZpZXI6IFRoZSB2NGwyX2RldmljZSBub3RpZmllciBkYXRh Lg0KKyAqIEBzdWJkZXZfcGFkczogUG9pbnRlciB0byB0aGUgbnVtYmVyIG9mIG1lZGlhIHBhZHMg b2YgdGhpcyBzdWItZGV2aWNlLg0KKyAqIEB2ZGV2X25vZGVzOiBUaGUgYXJyYXkgbGlzdCBvZiBt dGtfY2FtX3ZpZGVvX2RldmljZSBub2Rlcy4NCisgKiBAc2VuaW5mOiBQb2ludGVyIHRvIHRoZSBz ZW5pbmYgc3ViLWRldmljZS4NCisgKiBAc2Vuc29yOiBQb2ludGVyIHRvIHRoZSBhY3RpdmUgc2Vu c29yIFY0TDIgc3ViLWRldmljZSB3aGVuIHN0cmVhbWluZyBvbi4NCisgKiBAc3RyZWFtaW5nOiBJ bmRpY2F0ZSB0aGUgb3ZlcmFsbCBzdHJlYW1pbmcgc3RhdHVzIGlzIG9uIG9yIG9mZi4NCisgKiBA ZW5hYmxlZF9kbWFzOiBUaGUgZW5hYmxlZCBkbWEgcG9ydCBpbmZvcm1hdGlvbiB3aGVuIHN0cmVh bWluZyBvbi4NCisgKiBAZW5hYmxlZF9jb3VudDogTnVtYmVyIG9mIGVuYWJsZWQgdmlkZW8gbm9k ZXMNCisgKiBAc3RyZWFtX2NvdW50OiBOdW1iZXIgb2Ygc3RyZWFtaW5nIHZpZGVvIG5vZGVzDQor ICogQHJ1bm5pbmdfam9iX2NvdW50OiBOdW5iZXIgb2YgcnVubmluZyBqb2JzIGluIHRoZSBIVyBk cml2ZXIuDQorICogQHBlbmRpbmdfam9iX2xpc3Q6IExpc3QgdG8ga2VlcCB0aGUgbWVkaWEgcmVx dWVzdHMgYmVmb3JlIGVuLXF1ZXVlIGludG8NCisgKiAgICAgICAgICAgICAgICAgICAgSFcgZHJp dmVyLg0KKyAqIEBwZW5kaW5nX2pvYl9sb2NrOiBQcm90ZWN0IHRoZSBwZW5kaW5nX2pvYl9saXN0 IGRhdGEgJiBydW5uaW5nX2pvYl9jb3VudC4NCisgKiBAcnVubmluZ19qb2JfbGlzdDogTGlzdCB0 byBrZWVwIHRoZSBtZWRpYSByZXF1ZXN0cyBhZnRlciBlbi1xdWV1ZSBpbnRvDQorICogICAgICAg ICAgICAgICAgICAgIEhXIGRyaXZlci4NCisgKiBAcnVubmluZ19qb2JfbG9jazogUHJvdGVjdCB0 aGUgcnVubmluZ19qb2JfbGlzdCBkYXRhLg0KKyAqIEBvcF9sb2NrOiBTZXJpYWxpemVzIGRyaXZl cidzIFZCMiBjYWxsYmFjayBvcGVyYXRpb25zLg0KKyAqDQorICovDQorc3RydWN0IG10a19jYW1f ZGV2IHsNCisJc3RydWN0IGRldmljZSAqZGV2Ow0KKwlzdHJ1Y3QgZGV2aWNlICpzbWVtX2RldjsN CisJc3RydWN0IG1lZGlhX3BpcGVsaW5lIHBpcGVsaW5lOw0KKwlzdHJ1Y3QgbWVkaWFfZGV2aWNl IG1lZGlhX2RldjsNCisJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsNCisJc3RydWN0IHY0bDJf ZGV2aWNlIHY0bDJfZGV2Ow0KKwlzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciBub3RpZmllcjsN CisJc3RydWN0IG1lZGlhX3BhZCAqc3ViZGV2X3BhZHM7DQorCXN0cnVjdCBtdGtfY2FtX3ZpZGVv X2RldmljZSB2ZGV2X25vZGVzW01US19DQU1fUDFfVE9UQUxfTk9ERVNdOw0KKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNlbmluZjsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3I7DQorCXVuc2ln bmVkIGludCBzdHJlYW1pbmc7DQorCXVuc2lnbmVkIGludCBlbmFibGVkX2RtYXM7DQorCXVuc2ln bmVkIGludCBlbmFibGVkX2NvdW50Ow0KKwl1bnNpZ25lZCBpbnQgc3RyZWFtX2NvdW50Ow0KKwl1 bnNpZ25lZCBpbnQgcnVubmluZ19qb2JfY291bnQ7DQorCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGlu Z19qb2JfbGlzdDsNCisJLyogUHJvdGVjdCB0aGUgcGVuZGluZ19qb2JfbGlzdCBkYXRhICovDQor CXNwaW5sb2NrX3QgcGVuZGluZ19qb2JfbG9jazsNCisJc3RydWN0IGxpc3RfaGVhZCBydW5uaW5n X2pvYl9saXN0Ow0KKwkvKiBQcm90ZWN0IHRoZSBydW5uaW5nX2pvYl9saXN0IGRhdGEgJiBydW5u aW5nX2pvYl9jb3VudCAqLw0KKwlzcGlubG9ja190IHJ1bm5pbmdfam9iX2xvY2s7DQorCS8qIFNl cmlhbGl6ZXMgZHJpdmVyJ3MgVkIyIGNhbGxiYWNrIG9wZXJhdGlvbnMgKi8NCisJc3RydWN0IG11 dGV4IG9wX2xvY2s7DQorfTsNCisNCitpbnQgbXRrX2NhbV9kZXZfaW5pdChzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2LA0KKwkJICAgICBzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbV9kZXYpOw0K K3ZvaWQgbXRrX2NhbV9kZXZfY2xlYW51cChzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbV9kZXYpOw0K K3ZvaWQgbXRrX2NhbV9kZXZfcmVxX3RyeV9xdWV1ZShzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbV9k ZXYpOw0KK3ZvaWQgbXRrX2NhbV9kZXZfZGVxdWV1ZV9yZXFfZnJhbWUoc3RydWN0IG10a19jYW1f ZGV2ICpjYW1fZGV2LA0KKwkJCQkgICB1bnNpZ25lZCBpbnQgZnJhbWVfc2VxX25vKTsNCit2b2lk IG10a19jYW1fZGV2X2V2ZW50X2ZyYW1lX3N5bmMoc3RydWN0IG10a19jYW1fZGV2ICpjYW1fZGV2 LA0KKwkJCQkgIHVuc2lnbmVkIGludCBmcmFtZV9zZXFfbm8pOw0KK3N0cnVjdCBtdGtfY2FtX2Rl dl9yZXF1ZXN0ICptdGtfY2FtX2Rldl9nZXRfcmVxKHN0cnVjdCBtdGtfY2FtX2RldiAqY2FtLA0K KwkJCQkJCXVuc2lnbmVkIGludCBmcmFtZV9zZXFfbm8pOw0KKw0KKyNlbmRpZiAvKiBfX01US19D QU1fSF9fICovDQotLSANCjIuMTguMA0K