Received: by 2002:a05:7412:bb8d:b0:d7:7d3a:4fe2 with SMTP id js13csp502324rdb; Tue, 15 Aug 2023 03:39:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGs6/CyyHhB+uvkLUJxFx1ilknwdxam86L4TqdnVXv0Vq8Erl2dDdg0RRheXke+YgVG0jEa X-Received: by 2002:a05:6a00:1682:b0:687:1be4:46e7 with SMTP id k2-20020a056a00168200b006871be446e7mr12508945pfc.9.1692095955444; Tue, 15 Aug 2023 03:39:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692095955; cv=none; d=google.com; s=arc-20160816; b=bwGn83NUo8gJriNgr4CJOGE3fagzvzP25a6LizyYcuD9PmMtb3CPyl9ND+w18wRxjG ZUuka3GWmwou8YXYRqQGMjlVmsg0aWD2mp7aAt51UPoeWLM4K/lv08u1zheBbQDhnXj3 7Tsti7qHX2kekeDbKhljmrqAvTfsOpomFtJkprilqY1Z65wtYjTvdaIFmVSdCzbYtjBD MsfCUjhDPqt/elMGIxL5bSjIoD9/nVooV6gawPP0uKLssRrnqW/aACn//Hz3k1fVcFsu MSAWdiQWw5YGV6Y+0fqVFwdzNetQraTOQ/naOTGND3KMOHjp8MzwJ0pTRq2jBbn43yrJ t4dQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:authenticated-by; bh=BBaoUrdi/ocNOaopRK3tNrv9YMUOPJajD2lsWYs/DpI=; fh=T9XGBtMKnxEmIujS2zzqwXyNDhH+24P8NJcYuaqeovk=; b=HdvIIw68Vz3ahUPGIUyqsYIlae8jFN9P8b6nSOivHhK8NmsBhNUorjxstDrBqBySmC +zl7gnUCNzzV5UORX3eMuQn84MNp/cyX6wqClpisqDwI6y4uiSU50U17eXAz0JTDPVmQ H3AXBgdDU5sFd5taTSyjiEtMJpooiJzu98JQpbJmrK6FoVZTZNVVV3+76sfU+jQGp7Ht S/9+uL7yVecQZfPf5gLfXH12wuVCVRULwsUUhh+gzjwOnB7hqcFJhXa3QO/SnnLQTpI6 zd4tQWSpth2syx7US0X2fMYpwfc1Cvvwi49cFoHV1RILVoDwF+lgnitRr//QyiDCr68g 8RGQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e3-20020a6558c3000000b0055ba60a3301si9300687pgu.295.2023.08.15.03.39.01; Tue, 15 Aug 2023 03:39:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234717AbjHOFok (ORCPT + 99 others); Tue, 15 Aug 2023 01:44:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234852AbjHOFmI (ORCPT ); Tue, 15 Aug 2023 01:42:08 -0400 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 64FB71FCD; Mon, 14 Aug 2023 22:39:10 -0700 (PDT) Authenticated-By: X-SpamFilter-By: ArmorX SpamTrap 5.77 with qID 37F5cK511015630, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36506.realtek.com.tw[172.21.6.27]) by rtits2.realtek.com.tw (8.15.2/2.81/5.90) with ESMTPS id 37F5cK511015630 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 15 Aug 2023 13:38:20 +0800 Received: from RTEXDAG01.realtek.com.tw (172.21.6.100) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Tue, 15 Aug 2023 13:38:02 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXDAG01.realtek.com.tw (172.21.6.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Tue, 15 Aug 2023 13:38:02 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d]) by RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d%5]) with mapi id 15.01.2375.007; Tue, 15 Aug 2023 13:38:02 +0800 From: Justin Lai To: Heiner Kallweit , "kuba@kernel.org" CC: "davem@davemloft.net" , "edumazet@google.com" , "pabeni@redhat.com" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" Subject: RE: [PATCH net-next v2 1/2] net/ethernet/realtek: Add Realtek automotive PCIe driver code Thread-Topic: [PATCH net-next v2 1/2] net/ethernet/realtek: Add Realtek automotive PCIe driver code Thread-Index: AQHZy1QCmgVf5/SQ0U+g6HlrD3yFj6/pCJAAgAHVltA= Date: Tue, 15 Aug 2023 05:38:01 +0000 Message-ID: <965d9b23921e419a8ac7a9222d23bd90@realtek.com> References: <20230810062915.252881-1-justinlai0215@realtek.com> <20230810062915.252881-2-justinlai0215@realtek.com> <8f202abf-e84d-28f8-af6f-9232a6696ac9@gmail.com> In-Reply-To: <8f202abf-e84d-28f8-af6f-9232a6696ac9@gmail.com> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.21.210.185] x-kse-serverinfo: RTEXDAG01.realtek.com.tw, 9 x-kse-antispam-interceptor-info: fallback x-kse-antivirus-interceptor-info: fallback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSE-AntiSpam-Interceptor-Info: fallback X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,LOTS_OF_MONEY, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBPbiAxMC4wOC4yMDIzIDA4OjI5LCBKdXN0aW4gTGFpIHdyb3RlOg0KPiA+IFRoaXMgcGF0Y2gg aXMgdG8gYWRkIHRoZSBldGhlcm5ldCBkZXZpY2UgZHJpdmVyIGZvciB0aGUgUENJZSBpbnRlcmZh Y2Ugb2YNCj4gUmVhbHRlayBBdXRvbW90aXZlIEV0aGVybmV0IFN3aXRjaCwNCj4gPiBhcHBsaWNh YmxlIHRvIFJUTDkwNTQsIFJUTDkwNjgsIFJUTDkwNzIsIFJUTDkwNzUsIFJUTDkwNjgsIFJUTDkw NzEuDQo+ID4NCj4gUGF0Y2ggaXMgbWlzc2luZyBhIGNoYW5nZSBsb2cuIEEgc2VlIGZldyByZXZp ZXcgY29tbWVudHMgYWRkcmVzc2VkLA0KPiBzZXZlcmFsIG90aGVycyBub3QgKGUuZy4gcmVtb3Zl IGZ1bmN0aW9uIGZvcndhcmQgZGVjbGFyYXRpb25zKS4NCg0KVGhhbmtzLCBJIHdpbGwgYWRkIHRo aXMgbWVzc2FnZSBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+IEFsc28gUEhZIGhhbmRsaW5nIGlz IHN0aWxsIG1pc3NpbmcgKGV2ZW4gaWYgdHlwaWNhbCB1c2UgY2FzZQ0KPiBpcyBkaXJlY3Qgc3dp dGNoIGNvbm5lY3Rpb24sIHNlZSBEU0EgZG9jdW1lbnRhdGlvbikuDQoNClRoYW5rIHlvdSBmb3Ig cHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IHBoeSBoYW5kbGluZy4gSSB3aWxsIHN0dWR5IHdo YXQgb3VyIGNvZGUgbmVlZHMgdG8gZG8uDQoNCj4gDQo+ID4gU2lnbmVkLW9mZi1ieTogSnVzdGlu IExhaSA8anVzdGlubGFpMDIxNUByZWFsdGVrLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9u ZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnICAgICAgICAgIHwgICAxNyArDQo+ID4gIGRyaXZl cnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUgICAgICAgICB8ICAgIDEgKw0KPiA+ICBk cml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlICAgfCAgIDEwICsNCj4g PiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oICAgIHwgIDU0MCAr KysNCj4gPiAgLi4uL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYyAgIHwg Mjg4NCArKysrKysrKysrKysrKysrKw0KPiA+ICAuLi4vbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRh c2UvcnRhc2Vfc3Jpb3YuYyAgfCAgMzE4ICsrDQo+ID4gIC4uLi9uZXQvZXRoZXJuZXQvcmVhbHRl ay9ydGFzZS9ydGFzZV9zcmlvdi5oICB8ICAgMjAgKw0KPiA+ICA3IGZpbGVzIGNoYW5nZWQsIDM3 OTAgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRo ZXJuZXQvcmVhbHRlay9ydGFzZS9NYWtlZmlsZQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZS5oDQo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYw0K PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFz ZS9ydGFzZV9zcmlvdi5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhl cm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX3NyaW92LmgNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcNCj4gYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9yZWFsdGVrL0tjb25maWcNCj4gPiBpbmRleCA5M2Q5ZGY1NWIzNjEuLjAyNTBkMWMzODc0 YiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcN Cj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcNCj4gPiBAQCAt MTEzLDQgKzExMywyMSBAQCBjb25maWcgUjgxNjkNCj4gPiAgICAgICAgIFRvIGNvbXBpbGUgdGhp cyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUNCj4gPiAgICAg ICAgIHdpbGwgYmUgY2FsbGVkIHI4MTY5LiAgVGhpcyBpcyByZWNvbW1lbmRlZC4NCj4gPg0KPiA+ ICtjb25maWcgUlRBU0UNCj4gPiArICAgICB0cmlzdGF0ZSAiUmVhbHRlayBBdXRvbW90aXZlIFN3 aXRjaA0KPiA5MDU0LzkwNjgvOTA3Mi85MDc1LzkwNjgvOTA3MSBQQ0llIEludGVyZmFjZSBzdXBw b3J0Ig0KPiA+ICsgICAgIGRlcGVuZHMgb24gUENJDQo+ID4gKyAgICAgc2VsZWN0IENSQzMyDQo+ ID4gKyAgICAgaGVscA0KPiA+ICsgICAgICAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0 ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG8NCj4gPiArICAgICAgIHRoZSBmb2xsb3dp bmcgZmFtaWxpZXM6DQo+ID4gKyAgICAgICBSVEw5MDU0IDVHQml0IEV0aGVybmV0DQo+ID4gKyAg ICAgICBSVEw5MDY4IDVHQml0IEV0aGVybmV0DQo+ID4gKyAgICAgICBSVEw5MDcyIDVHQml0IEV0 aGVybmV0DQo+ID4gKyAgICAgICBSVEw5MDc1IDVHQml0IEV0aGVybmV0DQo+ID4gKyAgICAgICBS VEw5MDY4IDVHQml0IEV0aGVybmV0DQo+ID4gKyAgICAgICBSVEw5MDcxIDVHQml0IEV0aGVybmV0 DQo+ID4gKw0KPiA+ICsgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwg Y2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQ0KPiA+ICsgICAgICAgd2lsbCBiZSBjYWxsZWQgcnRh c2UuICBUaGlzIGlzIHJlY29tbWVuZGVkLg0KPiA+ICsNCj4gPiAgZW5kaWYgIyBORVRfVkVORE9S X1JFQUxURUsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9N YWtlZmlsZQ0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUNCj4gPiBp bmRleCAyZTFkNzhiMTA2YjAuLjBjMWMxNmY2M2U5YSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvcmVhbHRlay9NYWtlZmlsZQ0KPiA+IEBAIC04LDMgKzgsNCBAQCBvYmotJChDT05GSUdf ODEzOVRPTykgKz0gODEzOXRvby5vDQo+ID4gIG9iai0kKENPTkZJR19BVFApICs9IGF0cC5vDQo+ ID4gIHI4MTY5LW9ianMgKz0gcjgxNjlfbWFpbi5vIHI4MTY5X2Zpcm13YXJlLm8gcjgxNjlfcGh5 X2NvbmZpZy5vDQo+ID4gIG9iai0kKENPTkZJR19SODE2OSkgKz0gcjgxNjkubw0KPiA+ICtvYmot JChDT05GSUdfUlRBU0UpICs9IHJ0YXNlLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9l dGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlDQo+IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQv cmVhbHRlay9ydGFzZS9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMDAwLi42MWZlMmY5ZTAzNDQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9NYWtlZmlsZQ0KPiA+IEBAIC0w LDAgKzEsMTAgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ ICsjIENvcHlyaWdodChjKSAyMDIzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmln aHRzIHJlc2VydmVkLg0KPiA+ICsNCj4gPiArIw0KPiA+ICsjIE1ha2VmaWxlIGZvciB0aGUgUmVh bHRlayBQQ0llIGRyaXZlcg0KPiA+ICsjDQo+ID4gKw0KPiA+ICtvYmotJChDT05GSUdfUlRBU0Up ICs9IHJ0YXNlLm8NCj4gPiArDQo+ID4gK3J0YXNlLW9ianMgOj0gcnRhc2VfbWFpbi5vIHJ0YXNl X3NyaW92Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9y dGFzZS9ydGFzZS5oDQo+IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFz ZS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE2 NjI0MDFlNTQzOA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmgNCj4gPiBAQCAtMCwwICsxLDU0MCBAQA0KPiA+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiAg cnRhc2UgaXMgdGhlIExpbnV4IGRldmljZSBkcml2ZXIgcmVsZWFzZWQgZm9yIFJlYWx0ZWsgQXV0 b21vdGl2ZSBTd2l0Y2gNCj4gPiArICogIGNvbnRyb2xsZXJzIHdpdGggUENJLUV4cHJlc3MgaW50 ZXJmYWNlLg0KPiA+ICsgKg0KPiA+ICsgKiAgQ29weXJpZ2h0KGMpIDIwMjMgUmVhbHRlayBTZW1p Y29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyAqDQo+ID4gKyAqICBB dXRob3I6DQo+ID4gKyAqICBSZWFsdGVrIEFSRCBzb2Z0d2FyZSB0ZWFtDQo+ID4gKyAqICBOby4g MiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywgSHNpbmNodSAzMDAs IFRhaXdhbg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4NCj4gKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioq KioqKioqKioqKioqDQo+ID4gKyAqICBUaGlzIHByb2R1Y3QgaXMgY292ZXJlZCBieSBvbmUgb3Ig bW9yZSBvZiB0aGUgZm9sbG93aW5nIHBhdGVudHM6DQo+ID4gKyAqICBVUzYsNTcwLDg4NCwgVVM2 LDExNSw3NzYsIGFuZCBVUzYsMzI3LDYyNS4NCj4gPiArDQo+ICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioq KioqKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIFJUQVNFX0hfDQo+ID4gKyNkZWZpbmUgUlRBU0Vf SF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9ldGh0b29sLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJUTF9BTExPQ19TS0JfSU5U UihuYXBpLCBsZW5ndGgpIG5hcGlfYWxsb2Nfc2tiKCYobmFwaSksIGxlbmd0aCkNCj4gPiArDQo+ ID4gKyNkZWZpbmUgTkVUSUZfRl9BTExfQ1NVTSBORVRJRl9GX0NTVU1fTUFTSw0KPiA+ICsNCj4g PiArI2RlZmluZSBORVRJRl9GX0hXX1ZMQU5fUlggTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgNCj4g PiArI2RlZmluZSBORVRJRl9GX0hXX1ZMQU5fVFggTkVUSUZfRl9IV19WTEFOX0NUQUdfVFgNCj4g PiArDQo+ID4gKyNkZWZpbmUgQ09ORklHX1NSSU9WIDENCj4gPiArDQo+ID4gKyNpZm5kZWYgTkVU SUZfRl9SWEFMTA0KPiA+ICsjZGVmaW5lIE5FVElGX0ZfUlhBTEwgMHUNCj4gPiArI2VuZGlmDQo+ ID4gKw0KPiA+ICsjaWZuZGVmIE5FVElGX0ZfUlhGQ1MNCj4gPiArI2RlZmluZSBORVRJRl9GX1JY RkNTIDB1DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBTRVRfTkVUREVWX0RFVg0K PiA+ICsjZGVmaW5lIFNFVF9ORVRERVZfREVWKG5ldCwgcGRldikNCj4gPiArI2VuZGlmDQo+ID4g Kw0KPiA+ICsjaWZuZGVmIFNFVF9NT0RVTEVfT1dORVINCj4gPiArI2RlZmluZSBTRVRfTU9EVUxF X09XTkVSKGRldikNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIFNBX1NISVJRDQo+ ID4gKyNkZWZpbmUgU0FfU0hJUlEgSVJRRl9TSEFSRUQNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ ICsjaWZuZGVmIE5FVElGX0ZfR1NPDQo+ID4gKyNkZWZpbmUgZ3NvX3NpemUgdHNvX3NpemUNCj4g PiArI2RlZmluZSBnc29fc2VncyB0c29fc2Vncw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNp Zm5kZWYgZG1hX21hcHBpbmdfZXJyb3INCj4gPiArI2RlZmluZSBkbWFfbWFwcGluZ19lcnJvcihh LCBiKSAwDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBuZXRpZl9lcnINCj4gPiAr I2RlZmluZSBuZXRpZl9lcnIoYSwgYiwgYywgZCkNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsj aWZuZGVmIEZBTFNFDQo+ID4gKyNkZWZpbmUgRkFMU0UgMA0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ ID4gKyNpZm5kZWYgVFJVRQ0KPiA+ICsjZGVmaW5lIFRSVUUgMQ0KPiA+ICsjZW5kaWYNCj4gPiAr DQo+ID4gKyNpZm5kZWYgZmFsc2UNCj4gPiArI2RlZmluZSBmYWxzZSAwDQo+ID4gKyNlbmRpZg0K PiA+ICsNCj4gPiArI2lmbmRlZiB0cnVlDQo+ID4gKyNkZWZpbmUgdHJ1ZSAxDQo+ID4gKyNlbmRp Zg0KPiA+ICsNCj4gPiArLyogdGhlIGxvdyAzMiBiaXQgYWRkcmVzcyBvZiByZWNlaXZlIGJ1ZmZl ciBtdXN0IGJlIDgtYnl0ZSBhbGlnbm1lbnQuICovDQo+ID4gKyNkZWZpbmUgUlRLX1JYX0FMSUdO ICg4dSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgTkFQSV9TVUZGSVggIi1OQVBJIg0KPiA+ICsjZGVm aW5lIFBGWCAgICAgICAgIEtCVUlMRF9NT0ROQU1FICI6ICINCj4gPiArDQo+ID4gKyNkZWZpbmUg R1BMX0NMQUlNIFwNCj4gPiArICAgICAicnRhc2UgIENvcHlyaWdodCAoQykgMjAyMSAgUmVhbHRl ayBBUkQgc29mdHdhcmUgdGVhbVxuXA0KPiA+ICsgICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRo IEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7XG5cDQo+ID4gKyAgICAgZm9yIGRldGFpbHMsIHBsZWFz ZSBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuXA0KPiA+ICsgICAgIFRoaXMg aXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQg dW5kZXINCj4gY2VydGFpbiBjb25kaXRpb25zOyBcbiBcDQo+ID4gKyAgICAgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiINCj4gPiArDQo+ID4gKyNpZmRlZiBSVEFTRV9ERUJV Rw0KPiA+ICsjZGVmaW5lIGFzc2VydChleHByKQ0KPiBcDQo+ID4gKyAgICAgZG8NCj4gew0KPiAg ICAgICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgICAgICBpZiAoIShleHByKSkN Cj4gew0KPiAgICAgICBcDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIkFzc2Vy dGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsDQo+ICNleHByLCBfX0ZJTEVfXywgX19m dW5jX18sIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0xJTkVfXyk7DQo+ IFwNCj4gPiArICAgICAgICAgICAgIH0NCj4gXA0KPiA+ICsgICAgIH0gd2hpbGUgKDApDQo+ID4g KyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pIHByX2luZm8oUEZYIGZtdCwgIyNhcmdzKQ0K PiA+ICsjZWxzZQ0KPiA+ICsjZGVmaW5lIGFzc2VydChleHByKQ0KPiA+ICsjZGVmaW5lIGRwcmlu dGsoZm10LCBhcmdzLi4uKQ0KPiA+ICsjZW5kaWYgLyogUlRBU0VfREVCVUcgKi8NCj4gPiArDQo+ ID4gKyNkZWZpbmUgUlRBU0VfTVNHX0RFRkFVTFQgKE5FVElGX01TR19EUlYgfCBORVRJRl9NU0df UFJPQkUgfA0KPiBORVRJRl9NU0dfSUZVUCB8IE5FVElGX01TR19JRkRPV04pDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFRYX0JVRkZTX0FWQUlMKHJpbmcpICgocmluZyktPmRpcnR5X2lkeCArIE5VTV9E RVNDIC0NCj4gKHJpbmcpLT5jdXJfaWR4IC0gMSkNCj4gPiArDQo+ID4gKyNpZm5kZWYgTkVUSUZf Rl9UU082DQo+ID4gKyNkZWZpbmUgTkVUSUZfRl9UU082IDB1DQo+ID4gKyNlbmRpZg0KPiA+ICsN Cj4gPiArI2RlZmluZSBSWF9ETUFfQlVSU1RfMjU2ICAgICAgIDR1DQo+ID4gKyNkZWZpbmUgVFhf RE1BX0JVUlNUX1VOTElNSVRFRCA3dQ0KPiA+ICsjZGVmaW5lIEpVTUJPX0ZSQU1FXzFLICAgICAg ICAgKEVUSF9EQVRBX0xFTikNCj4gPiArI2RlZmluZSBKVU1CT19GUkFNRV85SyAgICAgICAgICgo OSAqIDEwMjQpIC0gRVRIX0hMRU4gLQ0KPiBWTEFOX0hMRU4gLSBFVEhfRkNTX0xFTikNCj4gPiAr DQo+ID4gKy8qIDMgbWVhbnMgSW50ZXJGcmFtZUdhcCA9IHRoZSBzaG9ydGVzdCBvbmUgKi8NCj4g PiArI2RlZmluZSBJTlRFUkZSQU1FR0FQIDB4MDN1DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJUQVNF X1JFR1NfU0laRSAgICgyNTZ1KQ0KPiA+ICsjZGVmaW5lIFJUQVNFX05BUElfV0VJR0hUICg2NCkN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUlRBU0VfVFhfVElNRU9VVCAoNiAqIEhaKQ0KPiA+ICsNCj4g PiArI2RlZmluZSBUWF9EVVBMSUNBVEVfRElSVFlJRFhfQ09VTlQgM3UNCj4gPiArLyogU2V0IHRp bWVvdXQgdG8gMXMgKDB4NzczNTk0MCA9IDFzIC8gOG5zKSAqLw0KPiA+ICsjZGVmaW5lIFRJTUVP VVRfU0VUX1RJTUUgMHg3NzM1OTQwdQ0KPiA+ICsNCj4gPiArI2RlZmluZSBWTEFOX0ZJTFRFUl9F TlRSWV9OVU0gMzJ1DQo+ID4gKy8qIE51bWJlciBvZiBUeCBxdWV1ZXMgKi8NCj4gPiArI2RlZmlu ZSBOVU1fVFhfUVVFVUUgOHUNCj4gPiArLyogTnVtYmVyIG9mIFJ4IHF1ZXVlcyAqLw0KPiA+ICsj ZGVmaW5lIE5VTV9SWF9RVUVVRSA0dQ0KPiA+ICsNCj4gPiArLyogZGVmYXVsdCB0eCBpbnRlcnJ1 cHQgbWl0aWdhdGlvbiwgbnVtID0gNjQsIHRpbWUgPSAxMzEuMDcydXMgKi8NCj4gPiArI2RlZmlu ZSBUWF9JTlRfTUlUSUdBVElPTiAweDM0NDh1DQo+ID4gKy8qIGRlZmF1bHQgcnggaW50ZXJydXB0 IG1pdGlnYXRpb24sIG51bSA9IDY0LCB0aW1lID0gMTMxLjA3MnVzICovDQo+ID4gKyNkZWZpbmUg UlhfSU5UX01JVElHQVRJT04gMHgzNDQ4dQ0KPiA+ICsNCj4gPiArI2RlZmluZSBOVU1fTVNJWCA0 dQ0KPiA+ICsNCj4gPiArLyogMHgwNUYzID0gMTUyMmJ5ZSArIDEgKi8NCj4gPiArI2RlZmluZSBS WF9CVUZfU0laRSAweDA1RjN1DQo+ID4gKw0KPiA+ICsvKiB3cml0ZS9yZWFkIE1NSU8gcmVnaXN0 ZXIgKi8NCj4gPiArI2RlZmluZSBSVExfVzgocmVnLCB2YWw4KSAgIHdyaXRlYigodmFsOCksIGlv YWRkciArIChyZWcpKQ0KPiA+ICsjZGVmaW5lIFJUTF9XMTYocmVnLCB2YWwxNikgd3JpdGV3KCh2 YWwxNiksIGlvYWRkciArIChyZWcpKQ0KPiA+ICsjZGVmaW5lIFJUTF9XMzIocmVnLCB2YWwzMikg d3JpdGVsKCh2YWwzMiksIGlvYWRkciArIChyZWcpKQ0KPiA+ICsjZGVmaW5lIFJUTF9SOChyZWcp ICAgICAgICAgcmVhZGIoaW9hZGRyICsgKHJlZykpDQo+ID4gKyNkZWZpbmUgUlRMX1IxNihyZWcp ICAgICAgICByZWFkdyhpb2FkZHIgKyAocmVnKSkNCj4gPiArI2RlZmluZSBSVExfUjMyKHJlZykg ICAgICAgIHJlYWRsKGlvYWRkciArIChyZWcpKQ0KPiA+ICsNCj4gPg0KPiArLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioqKioqKioqKi8NCj4gPiArI2RlZmluZSBSVExfTkVUSUZfUlhfU0NIRURVTEVfUFJFUChk ZXYsIG5hcGkpDQo+IG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKQ0KPiA+ICsjZGVmaW5lIF9fUlRM X05FVElGX1JYX1NDSEVEVUxFKGRldiwgbmFwaSkgICAgX19uYXBpX3NjaGVkdWxlKG5hcGkpDQo+ ID4gKw0KPiA+DQo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKioqLw0KPiA+ICsjaWZuZGVmIG1v ZHVsZV9wYXJhbQ0KPiA+ICsjZGVmaW5lIG1vZHVsZV9wYXJhbSh2LCB0LCBwKSBNT0RVTEVfUEFS TSh2LCAiaSIpDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBQQ0lfREVWSUNFDQo+ ID4gKyNkZWZpbmUgUENJX0RFVklDRSh2ZW5kLCBkZXYpIFwNCj4gPiArICAgICAudmVuZG9yID0g KHZlbmQpLCAuZGV2aWNlID0gKGRldiksIC5zdWJ2ZW5kb3IgPQ0KPiBQQ0lfQU5ZX0lELCAuc3Vi ZGV2aWNlID0gUENJX0FOWV9JRA0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4NCj4gKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K PiAqKioqKioqKioqKioqKiovDQo+ID4gK2VudW0gcnRhc2VfcmVnaXN0ZXJzIHsNCj4gPiArICAg ICBNQUMwID0gMHgwMDAwdSwNCj4gPiArICAgICBNQUM0ID0gMHgwMDA0dSwNCj4gPiArICAgICBN QVIwID0gMHgwMDA4dSwNCj4gPiArICAgICBNQVIxID0gMHgwMDBDdSwNCj4gPiArICAgICBEVEND UjAgPSAweDAwMTB1LA0KPiA+ICsgICAgIERUQ0NSNCA9IDB4MDAxNHUsDQo+ID4gKyAgICAgRkNS ID0gMHgwMDE4dSwNCj4gPiArICAgICBMQktfQ1RSTCA9IDB4MDAxQXUsDQo+ID4gKyAgICAgVFhf REVTQ19TVEFSVF9BRERSMCA9IDB4MDAyMHUsDQo+ID4gKyAgICAgVFhfREVTQ19TVEFSVF9BRERS NCA9IDB4MDAyNHUsDQo+ID4gKyAgICAgVFhfREVTQ19DT01NQU5EID0gMHgwMDI4dSwNCj4gPiAr ICAgICBDSElQX0NNRCA9IDB4MDAzN3UsDQo+ID4gKyAgICAgSU1SMCA9IDB4MDAzOHUsDQo+ID4g KyAgICAgSVNSMCA9IDB4MDAzQ3UsDQo+ID4gKyAgICAgSU1SMSA9IDB4MDgwMHUsDQo+ID4gKyAg ICAgSVNSMSA9IDB4MDgwMnUsDQo+ID4gKyAgICAgVFhfQ09ORklHXzAgPSAweDAwNDB1LA0KPiA+ ICsgICAgIFJYX0NPTkZJR18wID0gMHgwMDQ0dSwNCj4gPiArICAgICBSWF9DT05GSUdfMSA9IDB4 MDA0NnUsDQo+ID4gKyAgICAgRUVNID0gMHgwMDUwdSwNCj4gPiArICAgICBUREZOUiA9IDB4MDA1 N3UsDQo+ID4gKyAgICAgVFBQT0xMID0gMHgwMDkwdSwNCj4gPiArICAgICBQRFIgPSAweDAwQjB1 LA0KPiA+ICsgICAgIEZJRk9SID0gMHgwMEQzdSwNCj4gPiArICAgICBQQ1BSID0gMHgwMEQ4dSwN Cj4gPiArICAgICBSTVMgPSAweDAwREF1LA0KPiA+ICsgICAgIENQTFVTX0NNRCA9IDB4MDBEQXUs DQo+ID4gKyAgICAgUTBfUlhfREVTQ19BRERSMCA9IDB4MDBFNHUsDQo+ID4gKyAgICAgUTBfUlhf REVTQ19BRERSNCA9IDB4MDBFOHUsDQo+ID4gKyAgICAgUTFfUlhfREVTQ19BRERSMCA9IDB4NDAw MHUsDQo+ID4gKyAgICAgUTFfUlhfREVTQ19BRERSNCA9IDB4NDAwNHUsDQo+ID4gKyAgICAgTVRQ UyA9IDB4MDBFQ3UsDQo+ID4gKyAgICAgTUlTQyA9IDB4MDBGMnUsDQo+ID4gKw0KPiA+ICsgICAg IFRGVU5fQ1RSTCA9IDB4MDQwMHUsDQo+ID4gKyAgICAgVFhfQ09ORklHXzEgPSAweDIwM0V1LA0K PiA+ICsgICAgIFRPS1NFTCA9IDB4MjA0NnUsDQo+ID4gKyAgICAgVFhRQ1JEVF8wID0gMHgyNTAw dSwNCj4gPiArICAgICBSRklGT05GVUxMID0gMHg0NDA2dSwNCj4gPiArICAgICBWUUNUUkwgPSAw eDQ4MDB1LA0KPiA+ICsgICAgIElOVF9NSVRJX1RYID0gMHgwQTAwdSwNCj4gPiArICAgICBJTlRf TUlUSV9SWCA9IDB4MEE4MHUsDQo+ID4gKw0KPiA+ICsgICAgIFZGTVNHREFUQV8wID0gMHg3MTAw dSwNCj4gPiArICAgICBWRk1TR0RBVEFfMiA9IDB4NzEwNHUsDQo+ID4gKyAgICAgUEZNU0dJQ1JS RVEgPSAweDcxNDB1LA0KPiA+ICsgICAgIFBGTVNHSU1SID0gMHg3MTQ4dSwNCj4gPiArICAgICBQ Rk1TR1ZGMSA9IDB4NzIwMHUsDQo+ID4gKw0KPiA+ICsgICAgIFZGX01BQ18wID0gMHg3Mjk0dSwN Cj4gPiArICAgICBWRl9NQUNfMiA9IDB4NzI5NnUsDQo+ID4gKyAgICAgVkZfTUFDXzQgPSAweDcy OTh1LA0KPiA+ICsNCj4gPiArICAgICBWTEFOX0VOVFJZX01FTV8wID0gMHg3MjM0dSwNCj4gPiAr ICAgICBWTEFOX0VOVFJZXzAgPSAweEFDODB1LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSBy dGFzZV9yZWdpc3Rlcl9jb250ZW50IHsNCj4gPiArICAgICAvKiBJbnRlcnJ1cHRTdGF0dXNCaXRz IDAgKi8NCj4gPiArICAgICBUT0s3ID0gQklUKDMwKSwNCj4gPiArICAgICBUT0s2ID0gQklUKDI4 KSwNCj4gPiArICAgICBUT0s1ID0gQklUKDI2KSwNCj4gPiArICAgICBUT0s0ID0gQklUKDI0KSwN Cj4gPiArICAgICBNQlggPSBCSVQoMTYpLA0KPiA+ICsgICAgIFRJTUVPVVQwID0gQklUKDE0KSwN Cj4gPiArICAgICBGT1ZXID0gQklUKDYpLA0KPiA+ICsgICAgIFJEVSA9IEJJVCg0KSwNCj4gPiAr ICAgICBUT0sgPSBCSVQoMiksDQo+ID4gKyAgICAgUk9LID0gQklUKDApLA0KPiA+ICsNCj4gPiAr ICAgICAvKiBJbnRlcnJ1cHRTdGF0dXNCaXRzIDF+MyAqLw0KPiA+ICsgICAgIFFfVE9LID0gQklU KDQpLA0KPiA+ICsgICAgIFFfUkRVID0gQklUKDEpLA0KPiA+ICsgICAgIFFfUk9LID0gQklUKDAp LA0KPiA+ICsNCj4gPiArICAgICAvKiBDaGlwQ21kUmVnQml0cyAqLw0KPiA+ICsgICAgIFNUT1Bf UkVRID0gQklUKDcpLA0KPiA+ICsgICAgIFNUT1BfUkVRX0RPTkUgPSBCSVQoNiksDQo+ID4gKyAg ICAgUkUgPSBCSVQoMyksDQo+ID4gKyAgICAgVEUgPSBCSVQoMiksDQo+ID4gKw0KPiA+ICsgICAg IC8qIENmZzkzNDZCaXRzICovDQo+ID4gKyAgICAgRUVNX1VOTE9DSyA9IDB4QzB1LA0KPiA+ICsN Cj4gPiArICAgICAvKiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMCAqLw0KPiA+ICsgICAgIFJYX1NJ TkdMRV9GRVRDSCA9IEJJVCgxNCksDQo+ID4gKyAgICAgUlhfU0lOR0xFX1RBRyA9IEJJVCgxMyks DQo+ID4gKyAgICAgUlhfTVhfRE1BX01BU0sgPSAweDcsDQo+ID4gKyAgICAgUlhfTVhfRE1BX1NI SUZUID0gOHUsDQo+ID4gKyAgICAgQUNQVF9GTE9XID0gQklUKDcpLA0KPiA+ICsgICAgIEFDQ0VQ VF9FUlIgPSBCSVQoNSksDQo+ID4gKyAgICAgQUNDRVBUX1JVTlQgPSBCSVQoNCksDQo+ID4gKyAg ICAgQUNDRVBUX0JST0FEQ0FTVCA9IEJJVCgzKSwNCj4gPiArICAgICBBQ0NFUFRfTVVMVElDQVNU ID0gQklUKDIpLA0KPiA+ICsgICAgIEFDQ0VQVF9NWVBIWVMgPSBCSVQoMSksDQo+ID4gKyAgICAg QUNDRVBUX0FMTFBIWVMgPSBCSVQoMCksDQo+ID4gKyAgICAgQUNDRVBUX01BU0sgPSAoQUNQVF9G TE9XIHwgQUNDRVBUX0VSUiB8IEFDQ0VQVF9SVU5UIHwNCj4gQUNDRVBUX0JST0FEQ0FTVCB8IEFD Q0VQVF9NVUxUSUNBU1QNCj4gPiArICAgICAgICAgICAgICAgICAgICB8IEFDQ0VQVF9NWVBIWVMg fCBBQ0NFUFRfQUxMUEhZUyksDQo+ID4gKw0KPiA+ICsgICAgIC8qIFJlY2VpdmUgQ29uZmlndXJh dGlvbiAxICovDQo+ID4gKyAgICAgUlhfTUFYX0ZFVENIX0RFU0NfTUFTSyA9IDB4MUYsDQo+ID4g KyAgICAgUlhfTUFYX0ZFVENIX0RFU0NfU0hJRlQgPSAxMXUsDQo+ID4gKyAgICAgUlhfTkVXX0RF U0NfRk9STUFUX0VOID0gQklUKDgpLA0KPiA+ICsgICAgIE9VVEVSX1ZMQU5fREVUQUdfRU4gPSBC SVQoNyksDQo+ID4gKyAgICAgSU5ORVJfVkxBTl9ERVRBR19FTiA9IEJJVCg2KSwNCj4gPiArICAg ICBQQ0lFX05FV19GTE9XID0gQklUKDIpLA0KPiA+ICsgICAgIFBDSUVfUkVMT0FEX0VuID0gQklU KDApLA0KPiA+ICsNCj4gPiArICAgICAvKiBUeENvbmZpZ0JpdHMgKi8NCj4gPiArICAgICBUWF9J TlRFUl9GUkFNRV9HQVBfTUFTSyA9IDB4M3UsDQo+ID4gKyAgICAgVFhfSU5URVJfRlJBTUVfR0FQ X1NISUZUID0gMjR1LA0KPiA+ICsgICAgIFRYX0RNQV9NQVNLID0gMHg3dSwNCj4gPiArICAgICAv KiBETUEgYnVyc3QgdmFsdWUgKDAtNykgaXMgc2hpZnQgdGhpcyBtYW55IGJpdHMgKi8NCj4gPiAr ICAgICBUWF9ETUFfU0hJRlQgPSA4dSwNCj4gPiArDQo+ID4gKyAgICAgLyogVEZ1bkN0cmwgKi8N Cj4gPiArICAgICBUWF9ORVdfREVTQ19GT1JNQVRfRU4gPSBCSVQoMCksDQo+ID4gKw0KPiA+ICsg ICAgIC8qIFR4RGVzY0NvbW1hbmQgKi8NCj4gPiArICAgICBUWF9ERVNDX0NNRF9DUyA9IEJJVCgx NSksDQo+ID4gKyAgICAgVFhfREVTQ19DTURfV0UgPSBCSVQoMTQpLA0KPiA+ICsNCj4gPiArICAg ICAvKiBDUGx1c0NtZCAqLw0KPiA+ICsgICAgIEZPUkNFX1JYRkxPV19FTiA9IEJJVCgxMSksDQo+ ID4gKyAgICAgRk9SQ0VfVFhGTE9XX0VOID0gQklUKDEwKSwNCj4gPiArICAgICBSWF9DSEtTVU0g PSBCSVQoNSksDQo+ID4gKw0KPiA+ICsgICAgIC8qIE1JU0MgKi8NCj4gPiArICAgICBSWF9EVl9H QVRFX0VOID0gQklUKDMpLA0KPiA+ICsNCj4gPiArICAgICAvKiBSZXNldENvdW50ZXJDb21tYW5k ICovDQo+ID4gKyAgICAgQ09VTlRFUl9SRVNFVCA9IEJJVCgwKSwNCj4gPiArICAgICAvKiBEdW1w Q291bnRlckNvbW1hbmQgKi8NCj4gPiArICAgICBDT1VOVEVSX0RVTVAgPSBCSVQoMyksDQo+ID4g Kw0KPiA+ICsgICAgIC8qIE9DUCBhY2Nlc3MgKi8NCj4gPiArICAgICBPQ1BSX1dSSVRFID0gMHg4 MDAwMDAwMHUsDQo+ID4gKyAgICAgT0NQUl9BRERSX1JFR19TSElGVCA9IDE2dSwNCj4gPiArDQo+ ID4gKyAgICAgLyogTUNVIENvbW1hbmQgKi8NCj4gPiArICAgICBUWF9GSUZPX0VNUFRZID0gQklU KDUpLA0KPiA+ICsgICAgIFJYX0ZJRk9fRU1QVFkgPSBCSVQoNCksDQo+ID4gKw0KPiA+ICsgICAg IC8qIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8NCj4gPiArICAgICBGQ1JfVFhfTE9PUEJB Q0tfRU4gPSBCSVQoOSksDQo+ID4gKyAgICAgRkNSX1RFID0gQklUKDgpLA0KPiA+ICsgICAgIEZD Ul9SWFFfTUFTSyA9IDB4M3UsDQo+ID4gKyAgICAgRkNSX1JYUV9TSElGVCA9IDR1LA0KPiA+ICsg ICAgIEZDUl9NQVJfRU4gPSBCSVQoMyksDQo+ID4gKyAgICAgRkNSX0JBUl9FTiA9IEJJVCgyKSwN Cj4gPiArICAgICBGQ1JfVkxBTl9GVFJfRU4gPSBCSVQoMSksDQo+ID4gKyAgICAgRkNSX1JFID0g QklUKDApLA0KPiA+ICsNCj4gPiArICAgICAvKiBMb29wYmFjayBDb250cm9sICovDQo+ID4gKyAg ICAgTEJLX0FUTEQgPSBCSVQoMSksDQo+ID4gKyAgICAgTEJLX0NMUiA9IEJJVCgwKSwNCj4gPiAr DQo+ID4gKyAgICAgLyogUENQIFJlZ2lzdGVyICovDQo+ID4gKyAgICAgUENQUl9WTEFOX0ZUUl9F TiA9IEJJVCg2KSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gZGVzY19zdGF0dXNfYml0IHsN Cj4gPiArICAgICBERVNDX09XTiA9IEJJVCgzMSksIC8qIERlc2NyaXB0b3IgaXMgb3duZWQgYnkg TklDICovDQo+ID4gKyAgICAgUklOR19FTkQgPSBCSVQoMzApLCAvKiBFbmQgb2YgZGVzY3JpcHRv ciByaW5nICovDQo+ID4gKw0KPiA+ICsgICAgIC8qIFR4IHByaXZhdGUgKi8NCj4gPiArICAgICAv Ki0tLS0tLSBvZmZzZXQgMCBvZiB0eCBkZXNjcmlwdG9yIC0tLS0tLSovDQo+ID4gKyAgICAgVFhf RklSU1RfRlJBRyA9IEJJVCgyOSksIC8qIFR4IEZpcnN0IHNlZ21lbnQgb2YgYSBwYWNrZXQgKi8N Cj4gPiArICAgICBUWF9MQVNUX0ZSQUcgPSBCSVQoMjgpLCAgLyogVHggRmluYWwgc2VnbWVudCBv ZiBhIHBhY2tldCAqLw0KPiA+ICsgICAgIEdJQU5UX1NFTkRfVjQgPSBCSVQoMjYpLCAvKiBUQ1Ag R2lhbnQgU2VuZCBPZmZsb2FkIFY0IChHU092NCkgKi8NCj4gPiArICAgICBHSUFOVF9TRU5EX1Y2 ID0gQklUKDI1KSwgLyogVENQIEdpYW50IFNlbmQgT2ZmbG9hZCBWNiAoR1NPdjYpICovDQo+ID4g KyAgICAgVFhfVkxBTl9UQUcgPSBCSVQoMTcpLCAgIC8qIEFkZCBWTEFOIHRhZyAqLw0KPiA+ICsN Cj4gPiArICAgICAvKi0tLS0tLSBvZmZzZXQgNCBvZiB0eCBkZXNjcmlwdG9yIC0tLS0tLSovDQo+ ID4gKyAgICAgVFhfVURQQ1NfQyA9IEJJVCgzMSksIC8qIENhbGN1bGF0ZSBVRFAvSVAgY2hlY2tz dW0gKi8NCj4gPiArICAgICBUWF9UQ1BDU19DID0gQklUKDMwKSwgLyogQ2FsY3VsYXRlIFRDUC9J UCBjaGVja3N1bSAqLw0KPiA+ICsgICAgIFRYX0lQQ1NfQyA9IEJJVCgyOSksICAvKiBDYWxjdWxh dGUgSVAgY2hlY2tzdW0gKi8NCj4gPiArICAgICBUWF9JUFY2Rl9DID0gQklUKDI4KSwgLyogSW5k aWNhdGUgaXQgaXMgYW4gSVB2NiBwYWNrZXQgKi8NCj4gPiArDQo+ID4gKyAgICAgLyogUnggcHJp dmF0ZSAqLw0KPiA+ICsgICAgIC8qLS0tLS0tIG9mZnNldCAyOCBvZiByeCBkZXNjcmlwdG9yIC0t LS0tLSovDQo+ID4gKyAgICAgUlhfRklSU1RfRlJBRyA9IEJJVCgyNSksIC8qIFJ4IEZpcnN0IHNl Z21lbnQgb2YgYSBwYWNrZXQgKi8NCj4gPiArICAgICBSWF9MQVNUX0ZSQUcgPSBCSVQoMjQpLCAg LyogUnggRmluYWwgc2VnbWVudCBvZiBhIHBhY2tldCAqLw0KPiA+ICsgICAgIFJYX1JFUyA9IEJJ VCgyMCksDQo+ID4gKyAgICAgUlhfUlVOVCA9IEJJVCgxOSksDQo+ID4gKyAgICAgUlhfUldUID0g QklUKDE4KSwNCj4gPiArICAgICBSWF9DUkMgPSBCSVQoMTYpLA0KPiA+ICsNCj4gPiArICAgICBS WF9WNkYgPSBCSVQoMzEpLA0KPiA+ICsgICAgIFJYX1Y0RiA9IEJJVCgzMCksDQo+ID4gKyAgICAg UlhfVURQVCA9IEJJVCgyOSksDQo+ID4gKyAgICAgUlhfVENQVCA9IEJJVCgyOCksDQo+ID4gKyAg ICAgUlhfSVBGID0gQklUKDI2KSwgICAgICAgICAgIC8qIElQIGNoZWNrc3VtIGZhaWxlZCAqLw0K PiA+ICsgICAgIFJYX1VEUEYgPSBCSVQoMjUpLCAgICAgICAgICAvKiBVRFAvSVAgY2hlY2tzdW0g ZmFpbGVkICovDQo+ID4gKyAgICAgUlhfVENQRiA9IEJJVCgyNCksICAgICAgICAgIC8qIFRDUC9J UCBjaGVja3N1bSBmYWlsZWQgKi8NCj4gPiArICAgICBSWF9MQktfRklGT19GVUxMID0gQklUKDE3 KSwgLyogTG9vcGJhY2sgRklGTyBGdWxsICovDQo+ID4gKyAgICAgUlhfVkxBTl9UQUcgPSBCSVQo MTYpLCAgICAgIC8qIFZMQU4gdGFnIGF2YWlsYWJsZSAqLw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr ZW51bSBzd19mbGFnX2NvbnRlbnQgew0KPiA+ICsgICAgIFNXRl9TUklPVl9FTkFCTEVEID0gQklU KDApLA0KPiA+ICsgICAgIFNXRl9NU0lfRU5BQkxFRCA9IEJJVCgxKSwNCj4gPiArICAgICBTV0Zf TVNJWF9FTkFCTEVEID0gQklUKDIpLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArI2RlZmluZSBSU1ZE X01BU0sgMHgzRkZGQzAwMHUNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICAg ICB1MzIgb3B0czE7DQo+ID4gKyAgICAgdTMyIG9wdHMyOw0KPiA+ICsgICAgIHU2NCBhZGRyOw0K PiA+ICsgICAgIHUzMiBvcHRzMzsNCj4gPiArICAgICB1MzIgcmVzZXJ2ZWQxOw0KPiA+ICsgICAg IHUzMiByZXNlcnZlZDI7DQo+ID4gKyAgICAgdTMyIHJlc2VydmVkMzsNCj4gPiArfSB0eF9kZXNj Ow0KPiA+ICsNCj4gPiArdHlwZWRlZiB1bmlvbiB7DQo+ID4gKyAgICAgc3RydWN0IHsNCj4gPiAr ICAgICAgICAgICAgIHU2NCBoZWFkZXJfYnVmX2FkZHI7DQo+ID4gKyAgICAgICAgICAgICB1MzIg cmVzZXJ2ZWQxOw0KPiA+ICsgICAgICAgICAgICAgdTMyIG9wdHNfaGVhZGVyX2xlbjsNCj4gPiAr ICAgICAgICAgICAgIHU2NCBhZGRyOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHJlc2VydmVkMjsN Cj4gPiArICAgICAgICAgICAgIHUzMiBvcHRzMTsNCj4gPiArICAgICB9IGRlc2NfY21kOw0KPiA+ ICsNCj4gPiArICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICAgdTMyIHJlc2VydmVkMTsN Cj4gPiArICAgICAgICAgICAgIHUzMiByZXNlcnZlZDI7DQo+ID4gKyAgICAgICAgICAgICB1MzIg cnNzOw0KPiA+ICsgICAgICAgICAgICAgdTMyIG9wdHM0Ow0KPiA+ICsgICAgICAgICAgICAgdTMy IHJlc2VydmVkMzsNCj4gPiArICAgICAgICAgICAgIHUzMiBvcHRzMzsNCj4gPiArICAgICAgICAg ICAgIHUzMiBvcHRzMjsNCj4gPiArICAgICAgICAgICAgIHUzMiBvcHRzMTsNCj4gPiArICAgICB9 IGRlc2Nfc3RhdHVzOw0KPiA+ICt9IHJ4X2Rlc2M7DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklH X1NSSU9WDQo+ID4gK3N0cnVjdCB2Zl9pbmZvIHsNCj4gPiArICAgICBzdHJ1Y3QgcGNpX2RldiAq dmZfcGNpX2RldjsNCj4gPiArICAgICB1OCBzdGF0dXM7DQo+ID4gKyAgICAgdTggdmZfbWFjW0VU SF9BTEVOXTsNCj4gPiArICAgICB1MzIgbWNfZmlsdGVyWzJdOw0KPiA+ICt9Ow0KPiA+ICsjZW5k aWYNCj4gPiArDQo+ID4gKyNkZWZpbmUgTlVNX0RFU0MgICAgICAgICAgICAgICAgMTAyNHUNCj4g PiArI2RlZmluZSBSVEFTRV9UWF9SSU5HX0RFU0NfU0laRSAoTlVNX0RFU0MgKiBzaXplb2YodHhf ZGVzYykpDQo+ID4gKyNkZWZpbmUgUlRBU0VfUlhfUklOR19ERVNDX1NJWkUgKE5VTV9ERVNDICog c2l6ZW9mKHJ4X2Rlc2MpKQ0KPiA+ICsjZGVmaW5lIFZMQU5fRU5UUllfQ0FSRUJJVCAgICAgIDB4 RjAwMDAwMDB1DQo+ID4gKw0KPiA+ICsvKiB0eHFvcyBoYXJkd2FyZSBkZWZpbml0aW9ucyAqLw0K PiA+ICsjZGVmaW5lIFJUQVNFXzFUX0NMT0NLICAgICAgICAgICAgNjR1DQo+ID4gKyNkZWZpbmUg UlRBU0VfMVRfUE9XRVIgICAgICAgICAgICAxMDAwMDAwMHUNCj4gPiArI2RlZmluZSBSVEFTRV9J RExFU0xPUEVfSU5UX1NISUZUIDI1dQ0KPiA+ICsNCj4gPiArc3RydWN0IHJ0YXNlX2ludF92ZWN0 b3Igew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cDsNCj4gPiArICAgICB1bnNp Z25lZCBpbnQgaXJxOw0KPiA+ICsgICAgIHU4IHN0YXR1czsNCj4gPiArICAgICB1OCBuYW1lWzIw XTsNCj4gPiArICAgICB1MTYgaW5kZXg7DQo+ID4gKyAgICAgdTE2IGltcl9hZGRyOw0KPiA+ICsg ICAgIHUxNiBpc3JfYWRkcjsNCj4gPiArICAgICB1MzIgaW1yOw0KPiA+ICsgICAgIHN0cnVjdCBs aXN0X2hlYWQgcmluZ19saXN0Ow0KPiA+ICsgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOw0K PiA+ICsgICAgIGludCB3ZWlnaHQ7DQo+ID4gKyAgICAgaW50ICgqcG9sbCkoc3RydWN0IG5hcGlf c3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBy dGFzZV9yaW5nIHsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYzsNCj4g PiArICAgICB2b2lkICpkZXNjOw0KPiA+ICsgICAgIGRtYV9hZGRyX3QgcGh5X2FkZHI7DQo+ID4g KyAgICAgdTMyIGN1cl9pZHg7DQo+ID4gKyAgICAgdTMyIGRpcnR5X2lkeDsNCj4gPiArICAgICB1 MTYgaW5kZXg7DQo+ID4gKw0KPiA+ICsgICAgIHN0cnVjdCBza19idWZmICpza2J1ZmZbTlVNX0RF U0NdOw0KPiA+ICsgICAgIHVuaW9uIHsNCj4gPiArICAgICAgICAgICAgIHUzMiBsZW5bTlVNX0RF U0NdOw0KPiA+ICsgICAgICAgICAgICAgZG1hX2FkZHJfdCBkYXRhX3BoeV9hZGRyW05VTV9ERVND XTsNCj4gPiArICAgICB9IG1pczsNCj4gPiArDQo+ID4gKyAgICAgc3RydWN0IGxpc3RfaGVhZCBy aW5nX2VudHJ5Ow0KPiA+ICsgICAgIHMzMiAoKnJpbmdfaGFuZGxlcikoc3RydWN0IHJ0YXNlX3Jp bmcgKnJpbmcsIHMzMiBidWRnZXQpOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHJ0YXNl X3R4cW9zIHsNCj4gPiArICAgICBzMzIgaGljcmVkaXQ7DQo+ID4gKyAgICAgczMyIGxvY3JlZGl0 Ow0KPiA+ICsgICAgIHMzMiBpZGxlc2xvcGU7DQo+ID4gKyAgICAgczMyIHNlbmRzbG9wZTsNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBydGFzZV9wcml2YXRlIHsNCj4gPiArICAgICB2b2lk IF9faW9tZW0gKm1taW9fYWRkcjsgLyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovDQo+ ID4gKyAgICAgdTMyIHN3X2ZsYWc7DQo+ID4gKyAgICAgc3RydWN0IHdvcmtfc3RydWN0IG1zZ193 b3JrOw0KPiA+ICsgICAgIHUzMiBtY19maWx0ZXJbMl07DQo+ID4gKw0KPiA+ICsgICAgIHN0cnVj dCBwY2lfZGV2ICpwZGV2OyAvKiBJbmRleCBvZiBQQ0kgZGV2aWNlICovDQo+ID4gKyAgICAgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldjsNCj4gPiArICAgICBzcGlubG9ja190IGxvY2s7ICAgICAgLyog c3BpbiBsb2NrIGZsYWcgKi8NCj4gPiArICAgICB1MzIgbXNnX2VuYWJsZTsNCj4gPiArICAgICB1 MTYgbWF4X2p1bWJvX2ZyYW1lX3NpemU7DQo+ID4gKyAgICAgdTggbWNmZzsNCj4gPiArICAgICB1 MzIgcnhfYnVmX3N6Ow0KPiA+ICsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcmluZyB0eF9yaW5n W05VTV9UWF9RVUVVRV07DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3R4cW9zIHR4X3Fvc1tOVU1f VFhfUVVFVUVdOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9yaW5nIHJ4X3JpbmdbTlVNX1JYX1FV RVVFXTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfY291bnRlcnMgKnRhbGx5X3ZhZGRyOw0KPiA+ ICsgICAgIGRtYV9hZGRyX3QgdGFsbHlfcGFkZHI7DQo+ID4gKw0KPiA+ICsgICAgIHUzMiB2bGFu X2ZpbHRlcl9jdHJsOw0KPiA+ICsgICAgIHUxNiB2bGFuX2ZpbHRlcl92aWRbVkxBTl9GSUxURVJf RU5UUllfTlVNXTsNCj4gPiArDQo+ID4gKyAgICAgc3RydWN0IGRlbGF5ZWRfd29yayB0YXNrOw0K PiA+ICsgICAgIHU4IGh3X2ljX3Zlcl91bmtub3duOw0KPiA+ICsgICAgIHU4IHJhbmRvbV9tYWM7 DQo+ID4gKyAgICAgdTggb3JnX21hY19hZGRyW0VUSF9BTEVOXTsNCj4gPiArI2lmZGVmIENPTkZJ R19TUklPVg0KPiA+ICsgICAgIHN0cnVjdCB2Zl9pbmZvICp2Zl9pbmZvOw0KPiA+ICsgICAgIHUx NiBudW1fdmZzOw0KPiA+ICsjZW5kaWYNCj4gPiArICAgICBzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4 X2VudHJ5W05VTV9NU0lYXTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciBpbnRf dmVjdG9yW05VTV9NU0lYXTsNCj4gPiArDQo+ID4gKyAgICAgdTE2IHR4X3F1ZXVlX2N0cmw7DQo+ ID4gKyAgICAgdTE2IGZ1bmNfdHhfcXVldWVfbnVtOw0KPiA+ICsgICAgIHUxNiBmdW5jX3J4X3F1 ZXVlX251bTsNCj4gPiArICAgICB1MTYgaW50X251bXM7DQo+ID4gKyAgICAgdTE2IHR4X2ludF9t aXQ7DQo+ID4gKyAgICAgdTE2IHJ4X2ludF9taXQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtlbnVt IG1jZmcgew0KPiA+ICsgICAgIENGR19NRVRIT0RfMSA9ICgwdSksDQo+ID4gKyAgICAgQ0ZHX01F VEhPRF9ERUZBVUxUID0gKDF1KSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgTFNPXzY0 SyA2NDAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBOSUNfTUFYX1BIWVNfQlVGX0NPVU5UX0xTTzIg KDE2ICogNCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgR1RUQ1BIT19TSElGVCAxOA0KPiA+ICsNCj4g PiArI2RlZmluZSBUQ1BIT19TSElGVCAxOHUNCj4gPiArI2RlZmluZSBUQ1BIT19NQVggICAweDNG RnUNCj4gPiArDQo+ID4gKyNkZWZpbmUgTVNTX01BWCAweDA3RkZ1IC8qIE1TUyB2YWx1ZSAqLw0K PiA+ICsNCj4gPiArdm9pZCBydGFzZV9od19yZXNldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KTsNCj4gPiArdm9pZCBydGFzZV90eF9jbGVhcihzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAp Ow0KPiA+ICt2b2lkIHJ0YXNlX3J4X2NsZWFyKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCk7DQo+ ID4gK3MzMiBydGFzZV9pbml0X3JpbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQo+ ID4gK3ZvaWQgcnRhc2VfaHdfc3RhcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQo+ ID4gK3ZvaWQgcnRhc2VfaHdfc2V0X3J4X3BhY2tldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7DQo+ID4gK3ZvaWQgcnRhc2VfZnVuY19lbmFibGUoY29uc3Qgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwKTsNCj4gPiArdm9pZCBydGFzZV9mdW5jX2Rpc2FibGUoY29uc3Qgc3RydWN0IHJ0 YXNlX3ByaXZhdGUgKnRwKTsNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBSVEFTRV9IXyAqLw0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21h aW4uYw0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5j DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjIyNzlm NjlhYjdmMQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYw0KPiA+IEBAIC0wLDAgKzEsMjg4NCBAQA0KPiA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiAg cnRhc2UgaXMgdGhlIExpbnV4IGRldmljZSBkcml2ZXIgcmVsZWFzZWQgZm9yIFJlYWx0ZWsgQXV0 b21vdGl2ZSBTd2l0Y2gNCj4gPiArICogIGNvbnRyb2xsZXJzIHdpdGggUENJLUV4cHJlc3MgaW50 ZXJmYWNlLg0KPiA+ICsgKg0KPiA+ICsgKiAgQ29weXJpZ2h0KGMpIDIwMjMgUmVhbHRlayBTZW1p Y29uZHVjdG9yIENvcnAuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvY2Rldi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaWZf dmxhbi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW4uaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2lwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC90Y3AuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2gu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGVwYXJhbS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbWRpby5oPg0KPiA+ICsj aW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPg0KPiA+ICsjaW5jbHVkZSA8bmV0L3BrdF9jbHMu aD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8YXNt L2lycS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInJ0YXNlLmgiDQo+ID4gKyNpZmRlZiBDT05G SUdfU1JJT1YNCj4gPiArI2luY2x1ZGUgInJ0YXNlX3NyaW92LmgiDQo+ID4gKyNlbmRpZg0KPiA+ ICsNCj4gPiArLyogTWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBmaWx0 ZXIgKHZzLiBSeC1hbGwtbXVsdGljYXN0KS4NCj4gPiArICogVGhlIFJUTCBjaGlwcyB1c2UgYSA2 NCBlbGVtZW50IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIEV0aGVybmV0IENSQy4NCj4gPiArICov DQo+ID4gK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya19xdWV1ZTsNCj4gPiAr DQo+ID4gKyNkZWZpbmUgX1IoTkFNRSwgTUFDLCBKVU1fRlJBTUVfU1opDQo+IFwNCj4gPiArDQo+ IHsNCj4gICBcDQo+ID4gKyAgICAgICAgICAgICAubmFtZSA9IE5BTUUsIC5tY2ZnID0gTUFDLCAu anVtYm9fZnJhbWVfc3ogPQ0KPiBKVU1fRlJBTUVfU1ogXA0KPiA+ICsgICAgIH0NCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KPiA+ICsgICAgIGNvbnN0IGNoYXIgKm5hbWU7DQo+ ID4gKyAgICAgdTggbWNmZzsNCj4gPiArICAgICB1MTYganVtYm9fZnJhbWVfc3o7DQo+ID4gK30g cnRsX2NoaXBfaW5mb1tdID0ge19SKCJSVEw5MDcyIiwgQ0ZHX01FVEhPRF8xLCBKVU1CT19GUkFN RV85SyksDQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICBfUigiVW5rbm93biIsIENGR19N RVRIT0RfREVGQVVMVCwNCj4gSlVNQk9fRlJBTUVfMUspfTsNCj4gPiArI3VuZGVmIF9SDQo+ID4g Kw0KPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRhc2VfcGNpX3RibFtdID0gew0K PiA+ICsgICAgIHsNCj4gPiArICAgICAgICAgICAgIFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9S RUFMVEVLLCAweDkwNkEpLA0KPiA+ICsgICAgIH0sDQo+ID4gKyAgICAgew0KPiA+ICsgICAgICAg ICAgICAgMCwNCj4gPiArICAgICB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhP UigiUmVhbHRlayBBUkQgU29mdHdhcmUgVGVhbSIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04o IlJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQgYW5kIE5ldHdvcmsNCj4gUENJZSBE cml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+ICsNCj4gPg0KPiArLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiArICogTW9kdWxlIFBhcmFtZXRlcnMNCj4gPiAr DQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCj4gKioqKioqKioqKioqKiovDQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQg dHhxX2N0cmwgPSAxOw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGZ1bmNfdHhxX251bSA9IDE7 DQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZnVuY19yeHFfbnVtID0gMTsNCj4gPiArc3RhdGlj IHVuc2lnbmVkIGludCBpbnRlcnJ1cHRfbnVtID0gMTsNCj4gPiArc3RhdGljIGludCByeF9jb3B5 YnJlYWs7DQo+ID4gKw0KPiA+ICttb2R1bGVfcGFyYW0odHhxX2N0cmwsIHVpbnQsIDApOw0KPiA+ ICtNT0RVTEVfUEFSTV9ERVNDKHR4cV9jdHJsLCAiVGhlIG1heGltdW0gbnVtYmVyIG9mIFRYIHF1 ZXVlcyBmb3INCj4gUEYgYW5kIFZGcy4iKTsNCj4gPiArDQo+ID4gK21vZHVsZV9wYXJhbShmdW5j X3R4cV9udW0sIHVpbnQsIDApOw0KPiA+ICtNT0RVTEVfUEFSTV9ERVNDKGZ1bmNfdHhxX251bSwg IlRYIHF1ZXVlIG51bWJlciBmb3IgdGhpcw0KPiBmdW5jdGlvbi4iKTsNCj4gPiArDQo+ID4gK21v ZHVsZV9wYXJhbShmdW5jX3J4cV9udW0sIHVpbnQsIDApOw0KPiA+ICtNT0RVTEVfUEFSTV9ERVND KGZ1bmNfcnhxX251bSwgIlJYIHF1ZXVlIG51bWJlciBmb3IgdGhpcw0KPiBmdW5jdGlvbi4iKTsN Cj4gPiArDQo+ID4gK21vZHVsZV9wYXJhbShpbnRlcnJ1cHRfbnVtLCB1aW50LCAwKTsNCj4gPiAr TU9EVUxFX1BBUk1fREVTQyhpbnRlcnJ1cHRfbnVtLCAiSW50ZXJydXB0IFZlY3RvciBudW1iZXIg Zm9yIHRoaXMNCj4gZnVuY3Rpb24uIik7DQo+ID4gKw0KPiA+ICttb2R1bGVfcGFyYW0ocnhfY29w eWJyZWFrLCBpbnQsIDApOw0KPiA+ICtNT0RVTEVfUEFSTV9ERVNDKHJ4X2NvcHlicmVhaywgIkNv cHkgYnJlYWtwb2ludCBmb3INCj4gY29weS1vbmx5LXRpbnktZnJhbWVzIik7DQo+ID4gKw0KPiA+ DQo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCj4gKioqKioqKioqKioqKioqKg0KPiA+ICsgKiBGdW5jdGlvbiBQcm90b3R5 cGUNCj4gPiArDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKiovDQo+ID4gK3N0YXRpYyBpbnQg cnRhc2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArc3RhdGljIG5ldGRldl90 eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZp Y2UNCj4gKmRldik7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3NldF9yeF9tb2RlKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpOw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3NldF9tYWNfYWRkcmVzcyhz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTsNCj4gPiArc3RhdGljIGludCBydGFzZV9j aGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsNCj4gPiArc3Rh dGljIHZvaWQgcnRhc2VfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25l ZCBpbnQgdHhxdWV1ZSk7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2dldF9zdGF0czY0KHN0cnVj dCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NA0KPiAqc3RhdHMpOw0K PiA+ICtzdGF0aWMgaW50IHJ0YXNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LCBfX2JlMTYgcHJvdG9jb2wsDQo+IHUxNiB2aWQpOw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNl X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvY29s LA0KPiB1MTYgdmlkKTsNCj4gPiArc3RhdGljIGludCBydGFzZV9zZXR1cF90YyhzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwNCj4gdm9pZCAqdHlwZV9kYXRh KTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBydGFzZV9pbnRlcnJ1cHQoaW50IGly cSwgdm9pZCAqZGV2X2luc3RhbmNlKTsNCj4gPiArc3RhdGljIGlycXJldHVybl90IHJ0YXNlX3Ff aW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7DQo+ID4gK3N0YXRpYyB2b2lk IHJ0YXNlX2h3X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArc3RhdGljIGlu dCBydGFzZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArc3RhdGljIHZvaWQg cnRhc2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArc3RhdGljIHZvaWQgcnRh c2VfaW5pdF9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiA+ICtzdGF0aWMg dm9pZCBydGFzZV9yYXJfc2V0KGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgY29uc3Qg dWludDhfdA0KPiAqYWRkcik7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2Rlc2NfYWRkcl9maWxs KGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCk7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNl X3R4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIHUxNiBpZHgpOw0KPiA+ICtz dGF0aWMgdm9pZCBydGFzZV9yeF9kZXNjX2luaXQoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCB1 MTYgaWR4KTsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vfc2V0X21hcihjb25zdCBzdHJ1Y3QgcnRh c2VfcHJpdmF0ZSAqdHApOw0KPiA+ICtzdGF0aWMgczMyIHR4X2hhbmRsZXIoc3RydWN0IHJ0YXNl X3JpbmcgKnJpbmcsIHMzMiBidWRnZXQpOw0KPiA+ICtzdGF0aWMgczMyIHJ4X2hhbmRsZXIoc3Ry dWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHMzMiBidWRnZXQpOw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNl X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsNCj4gPiArc3RhdGlj IHZvaWQgcnRhc2Vfc3dfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQo+ID4gK3N0YXRp YyB2b2lkIHJ0YXNlX2R1bXBfdGFsbHlfY291bnRlcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAsDQo+IGRtYV9hZGRyX3QgcGFkZHIpOw0KPiA+ICtzdGF0aWMgdm9pZCBtYWNfb2NwX3dy aXRlKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTE2IHJlZ19hZGRyLCB1MTYNCj4g dmFsdWUpOw0KPiA+ICsNCj4gPg0KPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiAr ICogRnVuY3Rpb24NCj4gPiArDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKiovDQo+ID4gKyNp Zm5kZWYgU0VUX0VUSFRPT0xfT1BTDQo+ID4gKyNkZWZpbmUgU0VUX0VUSFRPT0xfT1BTKG5ldGRl diwgb3BzKSAoKG5ldGRldiktPmV0aHRvb2xfb3BzID0gKG9wcykpDQo+ID4gKyNlbmRpZiAvKiBT RVRfRVRIVE9PTF9PUFMgKi8NCj4gPiArDQo+ID4gK3N0cnVjdCBydGFzZV9jb3VudGVycyB7DQo+ ID4gKyAgICAgdTY0IHR4X3BhY2tldHM7DQo+ID4gKyAgICAgdTY0IHJ4X3BhY2tldHM7DQo+ID4g KyAgICAgdTY0IHR4X2Vycm9yczsNCj4gPiArICAgICB1MzIgcnhfZXJyb3JzOw0KPiA+ICsgICAg IHUxNiByeF9taXNzZWQ7DQo+ID4gKyAgICAgdTE2IGFsaWduX2Vycm9yczsNCj4gPiArICAgICB1 MzIgdHhfb25lX2NvbGxpc2lvbjsNCj4gPiArICAgICB1MzIgdHhfbXVsdGlfY29sbGlzaW9uOw0K PiA+ICsgICAgIHU2NCByeF91bmljYXN0Ow0KPiA+ICsgICAgIHU2NCByeF9icm9hZGNhc3Q7DQo+ ID4gKyAgICAgdTMyIHJ4X211bHRpY2FzdDsNCj4gPiArICAgICB1MTYgdHhfYWJvcnRlZDsNCj4g PiArICAgICB1MTYgdHhfdW5kZXJ1bjsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHJ0YXNlX2R1bXBfdGFsbHlfY291bnRlcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAs DQo+IGRtYV9hZGRyX3QgcGFkZHIpDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlv YWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIHdhaXRfY250Ow0KPiA+ICsgICAg IHUzMiBjbWQ7DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMzIoRFRDQ1I0LCAocGFkZHIgPj4gMzIp KTsNCj4gPiArICAgICBjbWQgPSBwYWRkciAmIERNQV9CSVRfTUFTSygzMik7DQo+ID4gKyAgICAg UlRMX1czMihEVENDUjAsIGNtZCk7DQo+ID4gKyAgICAgUlRMX1czMihEVENDUjAsIChjbWQgfCBD T1VOVEVSX0RVTVApKTsNCj4gPiArDQo+ID4gKyAgICAgd2FpdF9jbnQgPSAwOw0KPiA+ICsgICAg IHdoaWxlICgoUlRMX1IzMihEVENDUjApICYgQ09VTlRFUl9EVU1QKSAhPSAwdSkgew0KPiA+ICsg ICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEwLCAyMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgd2FpdF9jbnQrKzsNCj4gPiArICAgICAgICAgICAgIGlmICh3YWl0X2NudCA+IDIwdSkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBtYWNfb2NwX3dyaXRlKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2 YXRlICp0cCwgdTE2IHJlZ19hZGRyLCB1MTYNCj4gdmFsdWUpDQo+ID4gK3sNCj4gPiArICAgICB2 b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIGRhdGEz MjsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTl9PTkNFKHJlZ19hZGRyICUgMnUpOw0KPiA+ICsN Cj4gPiArICAgICBkYXRhMzIgPSByZWdfYWRkciAvIDJ1Ow0KPiA+ICsgICAgIGRhdGEzMiA8PD0g T0NQUl9BRERSX1JFR19TSElGVDsNCj4gPiArICAgICBkYXRhMzIgKz0gdmFsdWU7DQo+ID4gKyAg ICAgZGF0YTMyIHw9IE9DUFJfV1JJVEU7DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMzIoUERSLCBk YXRhMzIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9pbnRlcnJ1cHRf bWl0aWdhdGlvbihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiAr ICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMy IGkgPSAwOw0KPiA+ICsNCj4gPiArICAgICAvKiB0eCBpbnRlcnJ1cHQgbWl0aWdhdGlvbiAqLw0K PiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNfdHhfcXVldWVfbnVtOyBpKyspDQo+ ID4gKyAgICAgICAgICAgICBSVExfVzE2KChJTlRfTUlUSV9UWCArIChpICogMnUpKSwgdHAtPnR4 X2ludF9taXQpOw0KPiA+ICsNCj4gPiArICAgICAvKiByeCBpbnRlcnJ1cHQgbWl0aWdhdGlvbiAq Lw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNfcnhfcXVldWVfbnVtOyBpKysp DQo+ID4gKyAgICAgICAgICAgICBSVExfVzE2KChJTlRfTUlUSV9SWCArIChpICogMnUpKSwgdHAt PnJ4X2ludF9taXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRh c2VfZW5hYmxlX2h3X2ludGVycnVwdChjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9ICZ0 cC0+aW50X3ZlY3RvclswXTsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5t bWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIGkgPSAwOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzMy KGl2ZWMtPmltcl9hZGRyLCBpdmVjLT5pbXIpOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAx OyBpIDwgdHAtPmludF9udW1zOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAt PmludF92ZWN0b3JbaV07DQo+ID4gKyAgICAgICAgICAgICBSVExfVzE2KGl2ZWMtPmltcl9hZGRy LCBpdmVjLT5pbXIpOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgcnRhc2VfaXJxX21hc2tfYW5kX2Fjayhjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAp DQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9 ICZ0cC0+aW50X3ZlY3RvclswXTsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRw LT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTggaSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9X MzIoaXZlYy0+aW1yX2FkZHIsIDApOw0KPiA+ICsgICAgIFJUTF9XMzIoaXZlYy0+aXNyX2FkZHIs IFJUTF9SMzIoaXZlYy0+aXNyX2FkZHIpKTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMTsg aSA8IHRwLT5pbnRfbnVtczsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBpdmVjID0gJnRwLT5p bnRfdmVjdG9yW2ldOw0KPiA+ICsgICAgICAgICAgICAgUlRMX1cxNihpdmVjLT5pbXJfYWRkciwg MCk7DQo+ID4gKyAgICAgICAgICAgICBSVExfVzE2KGl2ZWMtPmlzcl9hZGRyLCBSVExfUjE2KGl2 ZWMtPmlzcl9hZGRyKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBydGFzZV9uaWNfcmVzZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiAr ew0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2 KGRldik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0K PiA+ICsgICAgIHUxNiByeF9jb25maWc7DQo+ID4gKyAgICAgdTE2IGkgPSAwOw0KPiA+ICsNCj4g PiArICAgICByeF9jb25maWcgPSBSVExfUjE2KFJYX0NPTkZJR18wKTsNCj4gPiArICAgICBSVExf VzE2KFJYX0NPTkZJR18wLCAocnhfY29uZmlnICYgfkFDQ0VQVF9NQVNLKSk7DQo+ID4gKw0KPiA+ ICsgICAgIC8qIHJ4ZHZfZ2F0ZWRfZW4gLSBtYXNrIHJ4ZHYgaW4gUEhZSU8gKi8NCj4gPiArICAg ICBSVExfVzgoTUlTQywgKFJUTF9SOChNSVNDKSB8IFJYX0RWX0dBVEVfRU4pKTsNCj4gPiArICAg ICAvKiBzdG9wIGFueSBUTFAgcmVxdWVzdCBmcm9tIFBDSWUgKi8NCj4gPiArICAgICBSVExfVzgo Q0hJUF9DTUQsIChSVExfUjgoQ0hJUF9DTUQpIHwgU1RPUF9SRVEpKTsNCj4gPiArICAgICBtZGVs YXkoMik7DQo+ID4gKw0KPiA+ICsgICAgIC8qIHdhaXQgVExQIHJlcXVlc3QgZG9uZSAqLw0KPiA+ ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgMTUwMHU7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAg aWYgKChSVExfUjgoQ0hJUF9DTUQpICYgU1RPUF9SRVFfRE9ORSkgIT0gMHUpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHVzbGVlcF9y YW5nZSgxMDAsIDExMCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiB3YWl0IEZJ Rk8gZW1wdHkgKi8NCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IDEwMDB1OyBpKyspIHsNCj4g PiArICAgICAgICAgICAgIGlmICgoUlRMX1I4KEZJRk9SKSAmIChUWF9GSUZPX0VNUFRZIHwgUlhf RklGT19FTVBUWSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgPT0gKFRYX0ZJRk9fRU1QVFkgfCBS WF9GSUZPX0VNUFRZKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKw0K PiA+ICsgICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsNCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIFJUTF9XOChDSElQX0NNRCwgKFJUTF9SOChDSElQX0NNRCkgJiB+KFRF IHwgUkUpKSk7DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XOChDSElQX0NNRCwgKFJUTF9SOChDSElQ X0NNRCkgJiB+U1RPUF9SRVEpKTsNCj4gPiArDQo+ID4gKyAgICAgUlRMX1cxNihSWF9DT05GSUdf MCwgcnhfY29uZmlnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vfbmlj X2VuYWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAg Y29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiAr ICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2 IHJjciA9IFJUTF9SMTYoUlhfQ09ORklHXzEpOw0KPiA+ICsNCj4gPiArICAgICAvKiBQQ0llIFBM QSByZWxvYWQgKi8NCj4gPiArICAgICBSVExfVzE2KFJYX0NPTkZJR18xLCAocmNyICYgflBDSUVf UkVMT0FEX0VuKSk7DQo+ID4gKyAgICAgUlRMX1cxNihSWF9DT05GSUdfMSwgKHJjciB8IFBDSUVf UkVMT0FEX0VuKSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFNldCBQQ0llIFRFICYgUkUgKi8NCj4g PiArICAgICBSVExfVzgoQ0hJUF9DTUQsIChSVExfUjgoQ0hJUF9DTUQpIHwgKFRFIHwgUkUpKSk7 DQo+ID4gKw0KPiA+ICsgICAgIC8qIENsZWFyIHJ4ZHZfZ2F0ZWRfZW4gKi8NCj4gPiArICAgICBS VExfVzgoTUlTQywgKFJUTF9SOChNSVNDKSAmIH5SWF9EVl9HQVRFX0VOKSk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3ZvaWQgcnRhc2VfZnVuY19lbmFibGUoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZh dGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1p b19hZGRyOw0KPiA+ICsgICAgIHUxNiBjciA9IDB1Ow0KPiA+ICsgICAgIHUxNiBpID0gMHU7DQo+ ID4gKw0KPiA+ICsgICAgIC8qIFBvbGxpbmcgZnVuY3Rpb24gVEUgJiBSRSAqLw0KPiA+ICsgICAg IGZvciAoaSA9IDB1OyBpIDwgMTUwMHU7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgaWYgKChS VExfUjE2KEZDUikgJiAoRkNSX1RFIHwgRkNSX1JFKSkgPT0gMHUpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgx MDAsIDExMCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBTZXQgZnVuY3Rpb24g VEUgJiBSRSAqLw0KPiA+ICsgICAgIGNyID0gUlRMX1IxNihGQ1IpOw0KPiA+ICsgICAgIGNyIHw9 IChGQ1JfVEUgfCBGQ1JfUkUpOw0KPiA+ICsgICAgIFJUTF9XMTYoRkNSLCBjcik7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3ZvaWQgcnRhc2VfZnVuY19kaXNhYmxlKGNvbnN0IHN0cnVjdCBydGFzZV9w cml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAt Pm1taW9fYWRkcjsNCj4gPiArICAgICB1MTYgaSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIC8qIENs ZWFyIGZ1bmN0aW9uIFRFICYgUkUgKi8NCj4gPiArICAgICBSVExfVzE2KEZDUiwgKFJUTF9SMTYo RkNSKSAmIH4oRkNSX1RFIHwgRkNSX1JFKSkpOw0KPiA+ICsNCj4gPiArICAgICAvKiBQb2xsaW5n IGZ1bmN0aW9uIFRFICYgUkUgKi8NCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IDE1MDB1OyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIGlmICgoUlRMX1IxNihGQ1IpICYgKEZDUl9URSB8IEZD Ul9SRSkpID09IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICB1c2xlZXBfcmFuZ2UoMTAwLCAxMTApOw0KPiA+ICsgICAgIH0NCj4g PiArfQ0KPiA+ICsNCj4gPiArdm9pZCBydGFzZV9od19yZXNldChjb25zdCBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUg KnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgLyogZGlzYWJsZSAmIGNs ZWFyIGludGVycnVwdHMgKi8NCj4gPiArICAgICBydGFzZV9pcnFfbWFza19hbmRfYWNrKHRwKTsN Cj4gPiArDQo+ID4gKyAgICAgLyogbmljIHJlc2V0ICovDQo+ID4gKyAgICAgcnRhc2VfbmljX3Jl c2V0KGRldik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2VuYWJsZV9F RU1fd3JpdGUoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAg ICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsNCj4gPiArICAg ICBSVExfVzgoRUVNLCAoUlRMX1I4KEVFTSkgfCBFRU1fVU5MT0NLKSk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2Rpc2FibGVfRUVNX3dyaXRlKGNvbnN0IHN0cnVjdCBy dGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRy ID0gdHAtPm1taW9fYWRkcjsNCj4gPiArDQo+ID4gKyAgICAgUlRMX1c4KEVFTSwgKFJUTF9SOChF RU0pICYgfkVFTV9VTkxPQ0spKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1 MzIgcnRhc2VfdHhfdmxhbl90YWcoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCBjb25z dA0KPiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHRhZzsNCj4g PiArDQo+ID4gKyAgICAgdGFnID0gKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgIT0gMHUpID8g KFRYX1ZMQU5fVEFHIHwNCj4gc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSkpDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMHU7DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiB0YWc7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzMzIg cnRhc2Vfcnhfdmxhbl9za2IocnhfZGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikNCj4g PiArew0KPiA+ICsgICAgIHUzMiBvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtPmRlc2Nfc3RhdHVz Lm9wdHMyKTsNCj4gPiArICAgICBzMzIgcmV0ID0gLTE7DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRB U0VfREVCVUcNCj4gPiArICAgICBpZiAob3B0czIgJiBSWF9MQktfRklGT19GVUxMKQ0KPiA+ICsg ICAgICAgICAgICAgcHJfYWxlcnQoIlBGIHJlY2VpdmUgbG9vcGJhY2sgZmlmbyBmdWxsLi4uIik7 DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyAgICAgaWYgKChvcHRzMiAmIFJYX1ZM QU5fVEFHKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIF9fdmxhbl9od2FjY2VsX3B1dF90YWco c2tiLCBodG9ucyhFVEhfUF84MDIxUSksDQo+IHN3YWIxNihvcHRzMiAmIDB4RkZGRnUpKTsNCj4g PiArDQo+ID4gKyAgICAgZGVzYy0+ZGVzY19zdGF0dXMub3B0czIgPSAwOw0KPiA+ICsgICAgIHJl dHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBy dGFzZV9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gbmV0ZGV2X2ZlYXR1 cmVzX3QgZmVhdHVyZXMpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAq dHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1 cmVzX2ZpeCA9IGZlYXR1cmVzOw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4g Kw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsg ICAgIGlmIChkZXYtPm10dSA+IE1TU19NQVgpDQo+ID4gKyAgICAgICAgICAgICBmZWF0dXJlc19m aXggJj0gfk5FVElGX0ZfQUxMX1RTTzsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGRldi0+bXR1ID4g RVRIX0RBVEFfTEVOKSB7DQo+ID4gKyAgICAgICAgICAgICBmZWF0dXJlc19maXggJj0gfk5FVElG X0ZfQUxMX1RTTzsNCj4gPiArICAgICAgICAgICAgIGZlYXR1cmVzX2ZpeCAmPSB+TkVUSUZfRl9B TExfQ1NVTTsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGZlYXR1cmVzX2ZpeDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9od19zZXRfZmVhdHVyZXMoY29u c3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMp DQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRk ZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9f YWRkcjsNCj4gPiArICAgICB1MTYgcnhfY29uZmlnOw0KPiA+ICsNCj4gPiArICAgICByeF9jb25m aWcgPSBSVExfUjE2KFJYX0NPTkZJR18wKTsNCj4gPiArICAgICBpZiAoKGZlYXR1cmVzICYgTkVU SUZfRl9SWEFMTCkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICByeF9jb25maWcgfD0gKEFDQ0VQ VF9FUlIgfCBBQ0NFUFRfUlVOVCk7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAg cnhfY29uZmlnICY9IH4oQUNDRVBUX0VSUiB8IEFDQ0VQVF9SVU5UKTsNCj4gPiArDQo+ID4gKyAg ICAgUlRMX1cxNihSWF9DT05GSUdfMCwgcnhfY29uZmlnKTsNCj4gPiArDQo+ID4gKyAgICAgcnhf Y29uZmlnID0gUlRMX1IxNihSWF9DT05GSUdfMSk7DQo+ID4gKyAgICAgaWYgKChkZXYtPmZlYXR1 cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJ4X2Nv bmZpZyB8PSAoSU5ORVJfVkxBTl9ERVRBR19FTiB8DQo+IE9VVEVSX1ZMQU5fREVUQUdfRU4pOw0K PiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHJ4X2NvbmZpZyAmPSB+KElOTkVSX1ZM QU5fREVUQUdfRU4gfA0KPiBPVVRFUl9WTEFOX0RFVEFHX0VOKTsNCj4gPiArDQo+ID4gKyAgICAg UlRMX1cxNihSWF9DT05GSUdfMSwgcnhfY29uZmlnKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKChm ZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIFJUTF9X MTYoQ1BMVVNfQ01ELCAoUlRMX1IxNihDUExVU19DTUQpIHwNCj4gUlhfQ0hLU1VNKSk7DQo+ID4g KyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgUlRMX1cxNihDUExVU19DTUQsIChSVExfUjE2 KENQTFVTX0NNRCkgJg0KPiB+UlhfQ0hLU1VNKSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3NldF9mZWF0dXJlcyhzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2LCBuZXRkZXZfZmVhdHVyZXNfdA0KPiBmZWF0dXJlcykNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7 DQo+ID4gKyAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXNfc2V0ID0gZmVhdHVyZXM7DQo+ ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKyAgICAgZmVhdHVyZXNf c2V0ICY9IE5FVElGX0ZfUlhBTEwgfCBORVRJRl9GX1JYQ1NVTSB8DQo+IE5FVElGX0ZfSFdfVkxB Tl9SWDsNCj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFn cyk7DQo+ID4gKyAgICAgaWYgKChmZWF0dXJlc19zZXQgXiBkZXYtPmZlYXR1cmVzKSAhPSAwdSkg ew0KPiA+ICsgICAgICAgICAgICAgaWYgKHJ0YXNlX2h3X3NldF9mZWF0dXJlcyhkZXYsIGZlYXR1 cmVzX3NldCkgIT0gMCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X2FsZXJ0KGRl diwgInVuYWJsZSB0byBzZXQgaHcgZmVhdHVyZVxuIik7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAg IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsg ICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciBydGFz ZV9nc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7DQo+ID4gKyAgICAgInR4X3BhY2tldHMi LCAgICJyeF9wYWNrZXRzIiwgICAgICAgICAgICJ0eF9lcnJvcnMiLA0KPiAicnhfZXJyb3JzIiwg InJ4X21pc3NlZCIsDQo+ID4gKyAgICAgImFsaWduX2Vycm9ycyIsICJ0eF9zaW5nbGVfY29sbGlz aW9ucyIsICJ0eF9tdWx0aV9jb2xsaXNpb25zIiwgInVuaWNhc3QiLA0KPiAiYnJvYWRjYXN0IiwN Cj4gPiArICAgICAibXVsdGljYXN0IiwgICAgInR4X2Fib3J0ZWQiLCAgICAgICAgICAgInR4X3Vu ZGVycnVuIiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2dldF9tYWNf dmVyc2lvbihzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIGNvbnN0IHZvaWQNCj4gX19pb21lbSAq aW9hZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHJlZ192YWwsIGh3X3ZlcjsNCj4gPiArDQo+ ID4gKyAgICAgcmVnX3ZhbCA9IFJUTF9SMzIoVFhfQ09ORklHXzApOw0KPiA+ICsgICAgIGh3X3Zl ciA9IHJlZ192YWwgJiAweDdDODAwMDAwdTsNCj4gPiArDQo+ID4gKyAgICAgc3dpdGNoIChod192 ZXIpIHsNCj4gPiArICAgICBjYXNlIDB4MDA4MDAwMDA6DQo+ID4gKyAgICAgY2FzZSAweDA0MDAw MDAwOg0KPiA+ICsgICAgIGNhc2UgMHgwNDgwMDAwMDoNCj4gPiArICAgICAgICAgICAgIHRwLT5t Y2ZnID0gQ0ZHX01FVEhPRF8xOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2LCAi dW5rbm93biBjaGlwIHZlcnNpb24gKCV4KVxuIiwNCj4gaHdfdmVyKTsNCj4gPiArICAgICAgICAg ICAgIHRwLT5tY2ZnID0gQ0ZHX01FVEhPRF9ERUZBVUxUOw0KPiA+ICsgICAgICAgICAgICAgdHAt Pmh3X2ljX3Zlcl91bmtub3duID0gVFJVRTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfcHJpbnRfbWFj X3ZlcnNpb24oY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAg ICAgYm9vbCBmbGFnID0gZmFsc2U7DQo+ID4gKyAgICAgczE2IGk7DQo+ID4gKw0KPiA+ICsgICAg IGZvciAoaSA9IEFSUkFZX1NJWkUocnRsX2NoaXBfaW5mbykgLSAxdTsgaSA+PSAwOyBpLS0pIHsN Cj4gPiArICAgICAgICAgICAgIGlmICh0cC0+bWNmZyA9PSBydGxfY2hpcF9pbmZvW2ldLm1jZmcp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZHByaW50aygiUmVhbHRlayBQQ0llIEZhbWls eSBDb250cm9sbGVyIG1jZmcgPQ0KPiAlMDRkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJ0bF9jaGlwX2luZm9baV0ubWNmZyk7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGZsYWcgPSB0cnVlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZmxhZykN Cj4gPiArICAgICAgICAgICAgIGRwcmludGsoIm1hY192ZXJzaW9uID09IFVua25vd25cbiIpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV90YWxseV9jb3VudGVyX2FkZHJf ZmlsbChjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2 b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKw0KPiA+ICsgICAgIGlm ICh0cC0+dGFsbHlfcGFkZHIgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIFJUTF9XMzIoRFRD Q1I0LCAodTMyKSh0cC0+dGFsbHlfcGFkZHIgPj4gMzIpKTsNCj4gPiArICAgICAgICAgICAgIFJU TF9XMzIoRFRDQ1IwLCAodTMyKSh0cC0+dGFsbHlfcGFkZHIgJg0KPiAoRE1BX0JJVF9NQVNLKDMy KSkpKTsNCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNl X3RhbGx5X2NvdW50ZXJfY2xlYXIoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ ICsNCj4gPiArICAgICBpZiAodHAtPnRhbGx5X3BhZGRyICE9IDB1KSB7DQo+ID4gKyAgICAgICAg ICAgICBSVExfVzMyKERUQ0NSNCwgKHUzMikodHAtPnRhbGx5X3BhZGRyID4+IDMyKSk7DQo+ID4g KyAgICAgICAgICAgICBSVExfVzMyKERUQ0NSMCwgKHUzMikoKHRwLT50YWxseV9wYWRkciAmDQo+ IChETUFfQklUX01BU0soMzIpKSkgfCBDT1VOVEVSX1JFU0VUKSk7DQo+ID4gKyAgICAgfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVINCj4gPiAr DQo+ID4gKy8qIFBvbGxpbmcgJ2ludGVycnVwdCcgLSB1c2VkIGJ5IHRoaW5ncyBsaWtlIG5ldGNv bnNvbGUgdG8gc2VuZCBza2JzDQo+ID4gKyAqIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWVuYWJsZSBp bnRlcnJ1cHRzLiBJdCdzIG5vdCBjYWxsZWQgd2hpbGUNCj4gPiArICogdGhlIGludGVycnVwdCBy b3V0aW5lIGlzIGV4ZWN1dGluZy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX25l dHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0 cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgY29u c3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGRldjsNCj4gPiArDQo+ID4gKyAgICAgZGlz YWJsZV9pcnEocGRldi0+aXJxKTsNCj4gPiArICAgICBydGFzZV9pbnRlcnJ1cHQocGRldi0+aXJx LCBkZXYpOw0KPiA+ICsgICAgIGVuYWJsZV9pcnEocGRldi0+aXJxKTsNCj4gPiArfQ0KPiA+ICsj ZW5kaWYNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX21ieF9zZXRfdmZtYyhjb25zdCBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIHU4IHZmbikNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0 IHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArDQo+ID4gKyAgICAg dHAtPnZmX2luZm9bdmZuXS5tY19maWx0ZXJbMF0gPSBSVExfUjMyKFZGTVNHREFUQV8wICsgKHZm biAqIDh1KSk7DQo+ID4gKyAgICAgdHAtPnZmX2luZm9bdmZuXS5tY19maWx0ZXJbMV0gPSBSVExf UjMyKFZGTVNHREFUQV8yICsgKHZmbiAqIDh1KSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHJ0YXNlX21zZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gPiArew0K PiA+ICsgICAgIHN0YXRpYyB2b2lkICgqY29uc3QgcnRhc2VfbWJ4X2Z1bmNbXSkoY29uc3Qgc3Ry dWN0IHJ0YXNlX3ByaXZhdGUgKnRwLA0KPiB1OCB2Zm4pID0gew0KPiA+ICsgICAgICAgICAgICAg cnRhc2VfbWJ4X3NldF92Zm1jLA0KPiA+ICsgICAgIH07DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0 IHJ0YXNlX3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdA0KPiBydGFzZV9w cml2YXRlLCBtc2dfd29yayk7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+ bW1pb19hZGRyOw0KPiA+ICsgICAgIHU4IHN0YXR1cyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHN0 YXR1cyA9IFJUTF9SOChQRk1TR0lDUlJFUSk7DQo+ID4gKyAgICAgaWYgKHN0YXR1cyAhPSAwdSkg ew0KPiA+ICsgICAgICAgICAgICAgdTE2IGkgPSAwdTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICBmb3IgKGkgPSAwdTsgaSA8IHRwLT5udW1fdmZzOyBpKyspIHsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgaWYgKChzdGF0dXMgJiBCSVQoaSkpICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcnRhc2VfbWJ4X2Z1bmNbMF0odHAsIGkpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJUTF9XOChQRk1TR1ZGMSArIChpICogNHUpLA0KPiAoUlRM X1I4KFBGTVNHVkYxICsgKGkgKiA0dSkpIHwgQklUKDEpKSk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3Nl dF9tYXIodHApOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgUlRMX1c4KFBGTVNHSUNS UkVRLCBzdGF0dXMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9pbml0 X2ludF92ZWN0b3Ioc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAg dTE2IGkgPSAwdTsNCj4gPiArDQo+ID4gKyAgICAgLyogaW50ZXJydXB0IHZlY3RvciAwICovDQo+ ID4gKyAgICAgdHAtPmludF92ZWN0b3JbMF0udHAgPSB0cDsNCj4gPiArICAgICBtZW1zZXQodHAt PmludF92ZWN0b3JbMF0ubmFtZSwgMHgwLCAyMCk7DQo+ID4gKyAgICAgdHAtPmludF92ZWN0b3Jb MF0uaW5kZXggPSAwOw0KPiA+ICsgICAgIHRwLT5pbnRfdmVjdG9yWzBdLmltcl9hZGRyID0gSU1S MDsNCj4gPiArICAgICB0cC0+aW50X3ZlY3RvclswXS5pc3JfYWRkciA9IElTUjA7DQo+ID4gKyAg ICAgdHAtPmludF92ZWN0b3JbMF0uaW1yID0gUk9LIHwgUkRVIHwgVE9LIHwgTUJYIHwgVE9LNCB8 IFRPSzUgfA0KPiBUT0s2IHwgVE9LNzsNCj4gPiArICAgICBJTklUX0xJU1RfSEVBRCgmdHAtPmlu dF92ZWN0b3JbMF0ucmluZ19saXN0KTsNCj4gPiArICAgICB0cC0+aW50X3ZlY3RvclswXS53ZWln aHQgPSBSVEFTRV9OQVBJX1dFSUdIVDsNCj4gPiArICAgICB0cC0+aW50X3ZlY3RvclswXS5wb2xs ID0gcnRhc2VfcG9sbDsNCj4gPiArICAgICBuZXRpZl9uYXBpX2FkZCh0cC0+ZGV2LCAmdHAtPmlu dF92ZWN0b3JbMF0ubmFwaSwNCj4gdHAtPmludF92ZWN0b3JbMF0ucG9sbCwNCj4gPiArICAgICAg ICAgICAgICAgICAgICB0cC0+aW50X3ZlY3RvclswXS53ZWlnaHQpOw0KPiA+ICsgICAgIG5hcGlf ZW5hYmxlKCZ0cC0+aW50X3ZlY3RvclswXS5uYXBpKTsNCj4gPiArDQo+ID4gKyAgICAgLyogaW50 ZXJydXB0IHZlY3RvciAxIH4gMyAqLw0KPiA+ICsgICAgIGZvciAoaSA9IDE7IGkgPCB0cC0+aW50 X251bXM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0udHAgPSB0 cDsNCj4gPiArICAgICAgICAgICAgIG1lbXNldCh0cC0+aW50X3ZlY3RvcltpXS5uYW1lLCAweDAs IDIwKTsNCj4gPiArICAgICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLmluZGV4ID0gaTsNCj4g PiArICAgICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLmltcl9hZGRyID0gKElNUjEgKyAoKGkg LSAxdSkgKiA0dSkpOw0KPiA+ICsgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0uaXNyX2Fk ZHIgPSAoSVNSMSArICgoaSAtIDF1KSAqIDR1KSk7DQo+ID4gKyAgICAgICAgICAgICB0cC0+aW50 X3ZlY3RvcltpXS5pbXIgPSBRX1JPSyB8IFFfUkRVIHwgUV9UT0s7DQo+ID4gKyAgICAgICAgICAg ICBJTklUX0xJU1RfSEVBRCgmdHAtPmludF92ZWN0b3JbaV0ucmluZ19saXN0KTsNCj4gPiArICAg ICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLndlaWdodCA9IFJUQVNFX05BUElfV0VJR0hUOw0K PiA+ICsgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0ucG9sbCA9IHJ0YXNlX3BvbGw7DQo+ ID4gKyAgICAgICAgICAgICBuZXRpZl9uYXBpX2FkZCh0cC0+ZGV2LCAmdHAtPmludF92ZWN0b3Jb aV0ubmFwaSwNCj4gdHAtPmludF92ZWN0b3JbaV0ucG9sbCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLndlaWdodCk7DQo+ID4gKyAgICAgICAgICAg ICBuYXBpX2VuYWJsZSgmdHAtPmludF92ZWN0b3JbaV0ubmFwaSk7DQo+ID4gKyAgICAgfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9pbml0X3NvZnR3YXJlX3ZhcmlhYmxl KHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIHNwaW5fbG9ja19p bml0KCZ0cC0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGFzc2lnbiBtb2R1bGUgcGFyYW1l dGVycyAqLw0KPiA+ICsgICAgIHRwLT50eF9xdWV1ZV9jdHJsID0gdHhxX2N0cmw7DQo+ID4gKyAg ICAgdHAtPmZ1bmNfdHhfcXVldWVfbnVtID0gZnVuY190eHFfbnVtOw0KPiA+ICsgICAgIHRwLT5m dW5jX3J4X3F1ZXVlX251bSA9IGZ1bmNfcnhxX251bTsNCj4gPiArICAgICB0cC0+aW50X251bXMg PSBpbnRlcnJ1cHRfbnVtOw0KPiA+ICsgICAgIHRwLT50eF9pbnRfbWl0ID0gVFhfSU5UX01JVElH QVRJT047DQo+ID4gKyAgICAgdHAtPnJ4X2ludF9taXQgPSBSWF9JTlRfTUlUSUdBVElPTjsNCj4g PiArDQo+ID4gKyAgICAgdHAtPnN3X2ZsYWcgPSAwOw0KPiA+ICsgICAgIHRwLT5udW1fdmZzID0g MDsNCj4gPiArDQo+ID4gKyAgICAgLyogbmV3LCBpbnRlcnJ1dHAgdmFyaWFibGVzIGluaXQgKi8N Cj4gPiArICAgICBydGFzZV9pbml0X2ludF92ZWN0b3IodHApOw0KPiA+ICsNCj4gPiArICAgICB0 cC0+bWF4X2p1bWJvX2ZyYW1lX3NpemUgPQ0KPiBydGxfY2hpcF9pbmZvW3RwLT5tY2ZnXS5qdW1i b19mcmFtZV9zejsNCj4gPiArICAgICAvKiBNVFUgcmFuZ2U6IDYwIC0gaHctc3BlY2lmaWMgbWF4 ICovDQo+ID4gKyAgICAgdHAtPmRldi0+bWluX210dSA9IEVUSF9aTEVOOw0KPiA+ICsgICAgIHRw LT5kZXYtPm1heF9tdHUgPSB0cC0+bWF4X2p1bWJvX2ZyYW1lX3NpemU7DQo+ID4gKw0KPiA+ICsg ICAgIElOSVRfV09SSygmdHAtPm1zZ193b3JrLCBydGFzZV9tc2dfd29yayk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2luaXRfaGFyZHdhcmUoY29uc3Qgc3RydWN0IHJ0 YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIg PSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUxNiBpOw0KPiA+ICsNCj4gPiArICAgICAvKiB2 bGFuIGZpbHRlciB0YWJsZSAqLw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgVkxBTl9GSUxU RVJfRU5UUllfTlVNOyBpKyspDQo+ID4gKyAgICAgICAgICAgICBSVExfVzMyKChWTEFOX0VOVFJZ XzAgKyAoaSAqIDR1KSksIDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFz ZV9yZWxlYXNlX2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZQ0K PiAqZGV2LCB2b2lkIF9faW9tZW0gKmlvYWRkcikNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0 cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKw0KPiA+ICsg ICAgIHJ0YXNlX3Jhcl9zZXQodHAsIHRwLT5vcmdfbWFjX2FkZHIpOw0KPiA+ICsgICAgIGlvdW5t YXAoaW9hZGRyKTsNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX01TSVhfRU5BQkxF RCkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICBwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOw0KPiA+ ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHBjaV9kaXNhYmxlX21zaShwZGV2KTsNCj4g PiArDQo+ID4gKyAgICAgcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsNCj4gPiArICAgICBwY2lf ZGlzYWJsZV9kZXZpY2UocGRldik7DQo+ID4gKyAgICAgZnJlZV9uZXRkZXYoZGV2KTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfaHdfYWRkcmVzc19zZXQoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwgY29uc3QgdTgNCj4gbWFjX2FkZHJbRVRIX0FMRU5dKQ0KPiA+ICt7DQo+ ID4gKyAgICAgZXRoX2h3X2FkZHJfc2V0KGRldiwgbWFjX2FkZHIpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBydGFzZV9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2Ug KmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRl dl9wcml2KGRldik7DQo+ID4gKyAgICAgY29uc3Qgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+ bW1pb19hZGRyOw0KPiA+ICsgICAgIHU4IG1hY19hZGRyW0VUSF9BTEVOXTsNCj4gPiArICAgICB1 MzIgaTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspDQo+ ID4gKyAgICAgICAgICAgICBtYWNfYWRkcltpXSA9IFJUTF9SOChNQUMwICsgaSk7DQo+ID4gKw0K PiA+ICsgICAgIGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHsNCj4gPiArICAg ICAgICAgICAgIG5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwgIkludmFsaWQgZXRoZXIgYWRkciAl cE1cbiIsDQo+IG1hY19hZGRyKTsNCj4gPiArICAgICAgICAgICAgIGV0aF9od19hZGRyX3JhbmRv bShkZXYpOw0KPiA+ICsgICAgICAgICAgICAgZXRoZXJfYWRkcl9jb3B5KG1hY19hZGRyLCBkZXYt PmRldl9hZGRyKTsNCj4gPiArICAgICAgICAgICAgIG5ldGlmX2luZm8odHAsIHByb2JlLCBkZXYs ICJSYW5kb20gZXRoZXIgYWRkciAlcE1cbiIsDQo+IG1hY19hZGRyKTsNCj4gPiArICAgICAgICAg ICAgIHRwLT5yYW5kb21fbWFjID0gMTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJ0 YXNlX2h3X2FkZHJlc3Nfc2V0KGRldiwgbWFjX2FkZHIpOw0KPiA+ICsgICAgIHJ0YXNlX3Jhcl9z ZXQodHAsIG1hY19hZGRyKTsNCj4gPiArDQo+ID4gKyAgICAgLyoga2VlcCB0aGUgb3JpZ2luYWwg TUFDIGFkZHJlc3MgKi8NCj4gPiArICAgICBtZW1jcHkodHAtPm9yZ19tYWNfYWRkciwgZGV2LT5k ZXZfYWRkciwgRVRIX0FMRU4pOw0KPiA+ICsgICAgIG1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2 LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHJ0YXNl X3NldF9tYWNfYWRkcmVzcyAtIENoYW5nZSB0aGUgRXRoZXJuZXQgQWRkcmVzcyBvZiB0aGUgTklD DQo+ID4gKyAqIEBkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiAr ICogQHA6ICAgcG9pbnRlciB0byBhbiBhZGRyZXNzIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsg KiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW50IHJ0YXNlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 LCB2b2lkICpwKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0g bmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIg PSBwOw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKyAgICAgczMyIHJjID0g MDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCh1OCAqKSZhZGRy LT5zYV9kYXRhKSkgew0KPiA+ICsgICAgICAgICAgICAgcmMgPSAtRUFERFJOT1RBVkFJTDsNCj4g PiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRw LT5sb2NrLCBmbGFncyk7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19hZGRyZXNzX3NldChk ZXYsICh1OCAqKSZhZGRyLT5zYV9kYXRhKTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3Jhcl9z ZXQodHAsIGRldi0+ZGV2X2FkZHIpOw0KPiA+ICsgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAg IHJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogcnRhc2VfcmFyX3NldCAtIFB1dHMg YW4gZXRoZXJuZXQgYWRkcmVzcyBpbnRvIGEgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyLg0KPiA+ ICsgKg0KPiA+ICsgKiB0cCAtIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIGZvciBkcml2ZXIN Cj4gPiArICogYWRkciAtIEFkZHJlc3MgdG8gcHV0IGludG8gcmVjZWl2ZSBhZGRyZXNzIHJlZ2lz dGVyDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9yYXJfc2V0KGNvbnN0IHN0cnVj dCBydGFzZV9wcml2YXRlICp0cCwgY29uc3QgdWludDhfdCAqYWRkcikNCj4gPiArew0KPiA+ICsg ICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAgICB1MzIg cmFyX2hpZ2ggPSAwOw0KPiA+ICsgICAgIHUzMiByYXJfbG93ID0gMDsNCj4gPiArDQo+ID4gKyAg ICAgcmFyX2xvdyA9ICgodWludDMyX3QpYWRkclswXSB8ICgodWludDMyX3QpYWRkclsxXSA8PCA4 KSB8DQo+ICgodWludDMyX3QpYWRkclsyXSA8PCAxNikNCj4gPiArICAgICAgICAgICAgICAgIHwg KCh1aW50MzJfdClhZGRyWzNdIDw8IDI0KSk7DQo+ID4gKw0KPiA+ICsgICAgIHJhcl9oaWdoID0g KCh1aW50MzJfdClhZGRyWzRdIHwgKCh1aW50MzJfdClhZGRyWzVdIDw8IDgpKTsNCj4gPiArDQo+ ID4gKyAgICAgcnRhc2VfZW5hYmxlX0VFTV93cml0ZSh0cCk7DQo+ID4gKyAgICAgUlRMX1czMihN QUMwLCByYXJfbG93KTsNCj4gPiArICAgICBSVExfVzMyKE1BQzQsIHJhcl9oaWdoKTsNCj4gPiAr ICAgICBydGFzZV9kaXNhYmxlX0VFTV93cml0ZSh0cCk7DQo+ID4gKyAgICAgUlRMX1cxNihMQktf Q1RSTCwgKExCS19BVExEIHwgTEJLX0NMUikpOw0KPiA+ICt9DQo+ID4gKw0KPiA+DQo+ICsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioNCj4gKioqKioqKioqKioqKioqKg0KPiA+ICsgKiBFdGh0b29sIE9wZXJhdGlvbnMNCj4gPiAr DQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCj4gKioqKioqKioqKioqKiovDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2dl dF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8N Cj4gKmRydmluZm8pDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsNCj4gPiArICAgICBzdHJzY3B5KGRydmlu Zm8tPmRyaXZlciwgS0JVSUxEX01PRE5BTUUsIDMyKTsNCj4gPiArICAgICBzdHJzY3B5KGRydmlu Zm8tPmJ1c19pbmZvLCBwY2lfbmFtZSh0cC0+cGRldiksIDMyKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArI3VuZGVmIGV0aHRvb2xfb3BfZ2V0X2xpbmsNCj4gPiArI2RlZmluZSBldGh0b29sX29wX2dl dF9saW5rIF9rY19ldGh0b29sX29wX2dldF9saW5rDQo+ID4gK3N0YXRpYyB1MzIgX2tjX2V0aHRv b2xfb3BfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAg IHJldHVybiBuZXRpZl9jYXJyaWVyX29rKGRldikgPyAxdSA6IDB1Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHJ0YXNlX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 LCBzdHJ1Y3QNCj4gZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQ0KPiA+ICt7DQo+ID4gKyAg ICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4g PiArICAgICBjb25zdCB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4g KyAgICAgdTMyIGFkdmVydGlzaW5nID0gMDsNCj4gPiArICAgICB1MzIgc3VwcG9ydGVkID0gMDsN Cj4gPiArICAgICB1MzIgc3BlZWQgPSAwOw0KPiA+ICsgICAgIHUxNiB2YWx1ZSA9IDA7DQo+ID4g Kw0KPiA+ICsgICAgIHN1cHBvcnRlZCB8PSBTVVBQT1JURURfTUlJIHwgU1VQUE9SVEVEX1BhdXNl Ow0KPiA+ICsNCj4gPiArICAgICBhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX01JSTsNCj4gPiAr DQo+ID4gKyAgICAgLyogc3BlZWQgKi8NCj4gPiArICAgICBzd2l0Y2ggKHRwLT5wZGV2LT5idXMt PmN1cl9idXNfc3BlZWQpIHsNCj4gPiArICAgICBjYXNlIFBDSUVfU1BFRURfMl81R1Q6DQo+ID4g KyAgICAgICAgICAgICBzcGVlZCA9IFNQRUVEXzEwMDA7DQo+ID4gKyAgICAgICAgICAgICBicmVh azsNCj4gPiArICAgICBjYXNlIFBDSUVfU1BFRURfNV8wR1Q6DQo+ID4gKyAgICAgICAgICAgICBz cGVlZCA9IFNQRUVEXzI1MDA7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBj YXNlIFBDSUVfU1BFRURfOF8wR1Q6DQo+ID4gKyAgICAgICAgICAgICBzcGVlZCA9IFNQRUVEXzUw MDA7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBkZWZhdWx0Og0KPiA+ICsg ICAgICAgICAgICAgLyogbm90aGluZyB0byBkby4gKi8NCj4gPiArICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogcGF1c2UgKi8NCj4gPiArICAgICB2 YWx1ZSA9IFJUTF9SMTYoQ1BMVVNfQ01EKTsNCj4gPiArICAgICBpZiAoKHZhbHVlICYgKEZPUkNF X1RYRkxPV19FTiB8IEZPUkNFX1JYRkxPV19FTikpID09DQo+IChGT1JDRV9UWEZMT1dfRU4gfCBG T1JDRV9SWEZMT1dfRU4pKQ0KPiA+ICsgICAgICAgICAgICAgYWR2ZXJ0aXNpbmcgfD0gQURWRVJU SVNFRF9QYXVzZTsNCj4gPiArICAgICBlbHNlIGlmICgodmFsdWUgJiBGT1JDRV9UWEZMT1dfRU4p ICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3lt X1BhdXNlOw0KPiA+ICsgICAgIGVsc2UgaWYgKCh2YWx1ZSAmIEZPUkNFX1JYRkxPV19FTikgIT0g MHUpDQo+ID4gKyAgICAgICAgICAgICBhZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9QYXVzZSB8 DQo+IEFEVkVSVElTRURfQXN5bV9QYXVzZSk7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAg ICAgICAgbmV0ZGV2X2luZm8oZGV2LCAicGF1c2UgaXMgZGlzYWJsZVxuIik7DQo+ID4gKw0KPiA+ ICsNCj4gZXRodG9vbF9jb252ZXJ0X2xlZ2FjeV91MzJfdG9fbGlua19tb2RlKGNtZC0+bGlua19t b2Rlcy5zdXBwb3J0ZWQsDQo+IHN1cHBvcnRlZCk7DQo+ID4gKw0KPiBldGh0b29sX2NvbnZlcnRf bGVnYWN5X3UzMl90b19saW5rX21vZGUoY21kLT5saW5rX21vZGVzLmFkdmVydGlzaW5nLA0KPiBh ZHZlcnRpc2luZyk7DQo+ID4gKyAgICAgY21kLT5iYXNlLnNwZWVkID0gc3BlZWQ7DQo+ID4gKyAg ICAgY21kLT5iYXNlLmR1cGxleCA9IERVUExFWF9GVUxMOw0KPiA+ICsgICAgIGNtZC0+YmFzZS5w b3J0ID0gUE9SVF9NSUk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCBzdHJ1Y3QNCj4gZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkNCj4gPiArew0KPiA+ ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7 DQo+ID4gKyAgICAgY29uc3Qgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0K PiA+ICsgICAgIHUxNiB2YWx1ZSA9IFJUTF9SMTYoQ1BMVVNfQ01EKTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKCh2YWx1ZSAmIChGT1JDRV9UWEZMT1dfRU4gfCBGT1JDRV9SWEZMT1dfRU4pKSA9PQ0K PiAoRk9SQ0VfVFhGTE9XX0VOIHwgRk9SQ0VfUlhGTE9XX0VOKSkgew0KPiA+ICsgICAgICAgICAg ICAgcGF1c2UtPnJ4X3BhdXNlID0gMTsNCj4gPiArICAgICAgICAgICAgIHBhdXNlLT50eF9wYXVz ZSA9IDE7DQo+ID4gKyAgICAgfSBlbHNlIGlmICgodmFsdWUgJiBGT1JDRV9UWEZMT1dfRU4pICE9 IDB1KSB7DQo+ID4gKyAgICAgICAgICAgICBwYXVzZS0+dHhfcGF1c2UgPSAxOw0KPiA+ICsgICAg IH0gZWxzZSBpZiAoKHZhbHVlICYgRk9SQ0VfUlhGTE9XX0VOKSAhPSAwdSkgew0KPiA+ICsgICAg ICAgICAgICAgcGF1c2UtPnJ4X3BhdXNlID0gMTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgICAgICAgLyogbm90IGVuYWJsZSBwYXVzZSAqLw0KPiA+ICsgICAgIH0NCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCBzdHJ1Y3QNCj4gZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkNCj4gPiArew0K PiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRl dik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ ICsgICAgIHUxNiB2YWx1ZSA9IFJUTF9SMTYoQ1BMVVNfQ01EKTsNCj4gPiArDQo+ID4gKyAgICAg dmFsdWUgJj0gfihGT1JDRV9UWEZMT1dfRU4gfCBGT1JDRV9SWEZMT1dfRU4pOw0KPiA+ICsNCj4g PiArICAgICBpZiAocGF1c2UtPnR4X3BhdXNlID09IDF1KQ0KPiA+ICsgICAgICAgICAgICAgdmFs dWUgfD0gRk9SQ0VfVFhGTE9XX0VOOw0KPiA+ICsNCj4gPiArICAgICBpZiAocGF1c2UtPnJ4X3Bh dXNlID09IDF1KQ0KPiA+ICsgICAgICAgICAgICAgdmFsdWUgfD0gRk9SQ0VfUlhGTE9XX0VOOw0K PiA+ICsNCj4gPiArICAgICBSVExfVzE2KENQTFVTX0NNRCwgdmFsdWUpOw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTMyIHJ0YXNlX2dldF9tc2dsZXZl bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0 IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIHRwLT5tc2dfZW5hYmxlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBy dGFzZV9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQ0KPiA+ ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2 KTsNCj4gPiArDQo+ID4gKyAgICAgdHAtPm1zZ19lbmFibGUgPSB2YWx1ZTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2Ug KmRldiwgdTMyIHN0cmluZ3NldCwgdTgNCj4gKmRhdGEpDQo+ID4gK3sNCj4gPiArICAgICBzd2l0 Y2ggKHN0cmluZ3NldCkgew0KPiA+ICsgICAgIGNhc2UgRVRIX1NTX1NUQVRTOg0KPiA+ICsgICAg ICAgICAgICAgbWVtY3B5KGRhdGEsICpydGFzZV9nc3RyaW5ncywgc2l6ZW9mKHJ0YXNlX2dzdHJp bmdzKSk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBkZWZhdWx0Og0KPiA+ ICsgICAgICAgICAgICAgLyogbm90aGluZyB0byBkby4gKi8NCj4gPiArICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV9n ZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkNCj4gPiArew0K PiA+ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBzd2l0Y2ggKHNzZXQpIHsN Cj4gPiArICAgICBjYXNlIEVUSF9TU19TVEFUUzoNCj4gPiArICAgICAgICAgICAgIHJldCA9IEFS UkFZX1NJWkUocnRhc2VfZ3N0cmluZ3MpOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FT1BOT1RTVVBQOw0KPiA+ ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9nZXRfZXRodG9v bF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QNCj4gZXRodG9vbF9zdGF0cyAq c3RhdHMsIHU2NCAqZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRl ICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX2Nv dW50ZXJzICpjb3VudGVyczsNCj4gPiArICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsg ICAgIGRtYV9hZGRyX3QgcGFkZHI7DQo+ID4gKw0KPiA+ICsgICAgIEFTU0VSVF9SVE5MKCk7DQo+ ID4gKw0KPiA+ICsgICAgIGNvdW50ZXJzID0gdHAtPnRhbGx5X3ZhZGRyOw0KPiA+ICsgICAgIHBh ZGRyID0gdHAtPnRhbGx5X3BhZGRyOw0KPiA+ICsgICAgIGlmICghY291bnRlcnMpDQo+ID4gKyAg ICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUo JnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKyAgICAgcnRhc2VfZHVtcF90YWxseV9jb3VudGVyKHRw LCBwYWRkcik7DQo+ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZs YWdzKTsNCj4gPiArDQo+ID4gKyAgICAgZGF0YVswXSA9IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50 eF9wYWNrZXRzKTsNCj4gPiArICAgICBkYXRhWzFdID0gbGU2NF90b19jcHUoY291bnRlcnMtPnJ4 X3BhY2tldHMpOw0KPiA+ICsgICAgIGRhdGFbMl0gPSBsZTY0X3RvX2NwdShjb3VudGVycy0+dHhf ZXJyb3JzKTsNCj4gPiArICAgICBkYXRhWzNdID0gbGUzMl90b19jcHUoY291bnRlcnMtPnJ4X2Vy cm9ycyk7DQo+ID4gKyAgICAgZGF0YVs0XSA9IGxlMTZfdG9fY3B1KGNvdW50ZXJzLT5yeF9taXNz ZWQpOw0KPiA+ICsgICAgIGRhdGFbNV0gPSBsZTE2X3RvX2NwdShjb3VudGVycy0+YWxpZ25fZXJy b3JzKTsNCj4gPiArICAgICBkYXRhWzZdID0gbGUzMl90b19jcHUoY291bnRlcnMtPnR4X29uZV9j b2xsaXNpb24pOw0KPiA+ICsgICAgIGRhdGFbN10gPSBsZTMyX3RvX2NwdShjb3VudGVycy0+dHhf bXVsdGlfY29sbGlzaW9uKTsNCj4gPiArICAgICBkYXRhWzhdID0gbGU2NF90b19jcHUoY291bnRl cnMtPnJ4X3VuaWNhc3QpOw0KPiA+ICsgICAgIGRhdGFbOV0gPSBsZTY0X3RvX2NwdShjb3VudGVy cy0+cnhfYnJvYWRjYXN0KTsNCj4gPiArICAgICBkYXRhWzEwXSA9IGxlMzJfdG9fY3B1KGNvdW50 ZXJzLT5yeF9tdWx0aWNhc3QpOw0KPiA+ICsgICAgIGRhdGFbMTFdID0gbGUxNl90b19jcHUoY291 bnRlcnMtPnR4X2Fib3J0ZWQpOw0KPiA+ICsgICAgIGRhdGFbMTJdID0gbGUxNl90b19jcHUoY291 bnRlcnMtPnR4X3VuZGVydW4pOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybjsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGFz ZV9ldGh0b29sX29wcyA9IHsNCj4gPiArICAgICAuZ2V0X2RydmluZm8gPSBydGFzZV9nZXRfZHJ2 aW5mbywNCj4gPiArICAgICAuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLA0KPiA+ICsg ICAgIC5nZXRfbGlua19rc2V0dGluZ3MgPSBydGFzZV9nZXRfc2V0dGluZ3MsDQo+ID4gKyAgICAg LmdldF9wYXVzZXBhcmFtID0gcnRhc2VfZ2V0X3BhdXNlcGFyYW0sDQo+ID4gKyAgICAgLnNldF9w YXVzZXBhcmFtID0gcnRhc2Vfc2V0X3BhdXNlcGFyYW0sDQo+ID4gKyAgICAgLmdldF9tc2dsZXZl bCA9IHJ0YXNlX2dldF9tc2dsZXZlbCwNCj4gPiArICAgICAuc2V0X21zZ2xldmVsID0gcnRhc2Vf c2V0X21zZ2xldmVsLA0KPiA+ICsgICAgIC5nZXRfc3RyaW5ncyA9IHJ0YXNlX2dldF9zdHJpbmdz LA0KPiA+ICsgICAgIC5nZXRfc3NldF9jb3VudCA9IHJ0YXNlX2dldF9zc2V0X2NvdW50LA0KPiA+ ICsgICAgIC5nZXRfZXRodG9vbF9zdGF0cyA9IHJ0YXNlX2dldF9ldGh0b29sX3N0YXRzLA0KPiA+ ICsgICAgIC5nZXRfdHNfaW5mbyA9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdGF0aWMgczMyIHJ0YXNlX2FsbG9jX21zaXgoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIHMzMiByYyA9 IDA7DQo+ID4gKyAgICAgdTE2IGkgPSAwOw0KPiA+ICsNCj4gPiArICAgICBtZW1zZXQodHAtPm1z aXhfZW50cnksIDB4MCwgTlVNX01TSVggKiBzaXplb2Yoc3RydWN0DQo+IG1zaXhfZW50cnkpKTsN Cj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IE5VTV9NU0lYOyBpKyspDQo+ID4gKyAgICAgICAg ICAgICB0cC0+bXNpeF9lbnRyeVtpXS5lbnRyeSA9IGk7DQo+ID4gKw0KPiA+ICsgICAgIHJjID0g cGNpX2VuYWJsZV9tc2l4X3JhbmdlKHBkZXYsIHRwLT5tc2l4X2VudHJ5LCB0cC0+aW50X251bXMs DQo+IHRwLT5pbnRfbnVtcyk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChyYyA9PSB0cC0+aW50X251 bXMpIHsNCj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmludF9udW1zOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0uaXJxID0g cGNpX2lycV92ZWN0b3IocGRldiwgaSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRwLT5p bnRfdmVjdG9yW2ldLnN0YXR1cyA9IDE7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAg fQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBzMzIgcnRhc2VfYWxsb2NfaW50ZXJydXB0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qg cnRhc2VfcHJpdmF0ZQ0KPiAqdHApDQo+ID4gK3sNCj4gPiArICAgICBzMzIgcmMgPSAwOw0KPiA+ ICsNCj4gPiArICAgICByYyA9IHJ0YXNlX2FsbG9jX21zaXgocGRldiwgdHApOw0KPiA+ICsgICAg IGlmIChyYyAhPSB0cC0+aW50X251bXMpIHsNCj4gPiArICAgICAgICAgICAgIHJjID0gcGNpX2Vu YWJsZV9tc2kocGRldik7DQo+ID4gKyAgICAgICAgICAgICBpZiAocmMgIT0gMCkNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jDQo+ IGludGVycnVwdC4oTVNJKVxuIik7DQo+ID4gKyAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHRwLT5zd19mbGFnIHw9IFNXRl9NU0lfRU5BQkxFRDsNCj4gPiArICAg ICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgdHAtPnN3X2ZsYWcgfD0gU1dGX01TSVhfRU5B QkxFRDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByYzsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfcmVzZXRfaW50ZXJydXB0KHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QNCj4gcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4g PiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX01TSVhfRU5BQkxFRCkgIT0gMHUpDQo+ID4g KyAgICAgICAgICAgICBwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOw0KPiA+ICsgICAgIGVsc2UgaWYg KCh0cC0+c3dfZmxhZyAmIFNXRl9NU0lfRU5BQkxFRCkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAg ICBwY2lfZGlzYWJsZV9tc2kocGRldik7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAg ICAgbmV0ZGV2X2luZm8odHAtPmRldiwgImludGVycnVwdCBpcyBuZXZlciBlbmFibGVkXG4iKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyogcnRhc2VfaW5pdF9ib2FyZCAtDQo+ID4gKyAqIEBwZGV2 OiBQQ0kgZGV2aWNlIHN0cnVjdA0KPiA+ICsgKiBAZGV2X291dDoNCj4gPiArICogQGlvYWRkcl9v dXQ6DQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZh aWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2VfaW5pdF9ib2FyZChzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UNCj4gKipkZXZfb3V0LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCBfX2lvbWVtICoqaW9hZGRyX291dCkNCj4gPiArew0K PiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cDsNCj4gPiArICAgICBzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2Ow0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyOw0KPiA+ICsgICAg IGludCByYyA9IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIGFzc2VydChpb2FkZHJfb3V0KTsN Cj4gPiArDQo+ID4gKyAgICAgLyogZGV2IHplcm9lZCBpbiBhbGxvY19ldGhlcmRldiAqLw0KPiA+ ICsgICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSksDQo+IGZ1bmNfdHhxX251bSk7DQo+ID4gKyAgICAgaWYgKCFkZXYpDQo+ID4gKyAgICAgICAg ICAgICBnb3RvIGVycl9vdXQ7DQo+ID4gKw0KPiA+ICsgICAgIFNFVF9ORVRERVZfREVWKGRldiwg JnBkZXYtPmRldik7DQo+ID4gKyAgICAgdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAg IHRwLT5kZXYgPSBkZXY7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGVuYWJsZSBkZXZpY2UgKGluY2wu IFBDSSBQTSB3YWtldXAgYW5kIGhvdHBsdWcgc2V0dXApICovDQo+ID4gKyAgICAgcmMgPSBwY2lf ZW5hYmxlX2RldmljZShwZGV2KTsNCj4gPiArICAgICBpZiAocmMgPCAwKQ0KPiA+ICsgICAgICAg ICAgICAgZ290byBlcnJfb3V0X2ZyZWVfZGV2Ow0KPiA+ICsNCj4gPiArICAgICAvKiBtYWtlIHN1 cmUgUENJIGJhc2UgYWRkciAxIGlzIE1NSU8gKi8NCj4gPiArICAgICBpZiAoKHBjaV9yZXNvdXJj ZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfTUVNKSA9PSAwdSkgew0KPiA+ICsgICAgICAg ICAgICAgcmMgPSAtRU5PREVWOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0X2Rpc2Fi bGU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBjaGVjayBmb3Igd2VpcmQvYnJv a2VuIFBDSSByZWdpb24gcmVwb3J0aW5nICovDQo+ID4gKyAgICAgaWYgKHBjaV9yZXNvdXJjZV9s ZW4ocGRldiwgMikgPCBSVEFTRV9SRUdTX1NJWkUpIHsNCj4gPiArICAgICAgICAgICAgIHJjID0g LUVOT0RFVjsNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX291dF9kaXNhYmxlOw0KPiA+ICsg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEtC VUlMRF9NT0ROQU1FKTsNCj4gPiArICAgICBpZiAocmMgPCAwKQ0KPiA+ICsgICAgICAgICAgICAg Z290byBlcnJfb3V0X2Rpc2FibGU7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChkbWFfc2V0X21hc2tf YW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpDQo+ID09IDApDQo+ID4g KyAgICAgICAgICAgICBkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsNCj4gPiArICAg ICBlbHNlIGlmIChkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsDQo+IERNQV9C SVRfTUFTSygzMikpICE9IDApDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9vdXRfZnJlZV9y ZXM7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgcHJfaW5mbygiRE1BX0JJVF9N QVNLOiAzMlxuIik7DQo+ID4gKw0KPiA+ICsgICAgIHBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KPiA+ ICsNCj4gPiArICAgICAvKiBpb3JlbWFwIE1NSU8gcmVnaW9uICovDQo+ID4gKyAgICAgaW9hZGRy ID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMiksIHBjaV9yZXNvdXJjZV9sZW4o cGRldiwNCj4gMikpOw0KPiA+ICsgICAgIGlmICghaW9hZGRyKSB7DQo+ID4gKyAgICAgICAgICAg ICByYyA9IC1FSU87DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9vdXRfZnJlZV9yZXM7DQo+ ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBJZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRv IGJvYXJkICovDQo+ID4gKyAgICAgcnRhc2VfZ2V0X21hY192ZXJzaW9uKHRwLCBpb2FkZHIpOw0K PiA+ICsgICAgIHJ0YXNlX3ByaW50X21hY192ZXJzaW9uKHRwKTsNCj4gPiArDQo+ID4gKyAgICAg KmlvYWRkcl9vdXQgPSBpb2FkZHI7DQo+ID4gKyAgICAgKmRldl9vdXQgPSBkZXY7DQo+ID4gKyAg ICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICtlcnJfb3V0X2ZyZWVfcmVzOg0KPiA+ICsgICAgIHBj aV9yZWxlYXNlX3JlZ2lvbnMocGRldik7DQo+ID4gKw0KPiA+ICtlcnJfb3V0X2Rpc2FibGU6DQo+ ID4gKyAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOw0KPiA+ICsNCj4gPiArZXJyX291dF9m cmVlX2RldjoNCj4gPiArICAgICBmcmVlX25ldGRldihkZXYpOw0KPiA+ICsNCj4gPiArZXJyX291 dDoNCj4gPiArICAgICAqaW9hZGRyX291dCA9IE5VTEw7DQo+ID4gKyAgICAgKmRldl9vdXQgPSBO VUxMOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByYzsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGFzZV9uZXRkZXZf b3BzID0gew0KPiA+ICsgICAgIC5uZG9fb3BlbiA9IHJ0YXNlX29wZW4sDQo+ID4gKyAgICAgLm5k b19zdG9wID0gcnRhc2VfY2xvc2UsDQo+ID4gKyAgICAgLm5kb19zdGFydF94bWl0ID0gcnRhc2Vf c3RhcnRfeG1pdCwNCj4gPiArICAgICAubmRvX3NldF9yeF9tb2RlID0gcnRhc2Vfc2V0X3J4X21v ZGUsDQo+ID4gKyAgICAgLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBydGFzZV9zZXRfbWFjX2FkZHJl c3MsDQo+ID4gKyAgICAgLm5kb19jaGFuZ2VfbXR1ID0gcnRhc2VfY2hhbmdlX210dSwNCj4gPiAr ICAgICAubmRvX3R4X3RpbWVvdXQgPSBydGFzZV90eF90aW1lb3V0LA0KPiA+ICsgICAgIC5uZG9f Z2V0X3N0YXRzNjQgPSBydGFzZV9nZXRfc3RhdHM2NCwNCj4gPiArICAgICAubmRvX3ZsYW5fcnhf YWRkX3ZpZCA9IHJ0YXNlX3ZsYW5fcnhfYWRkX3ZpZCwNCj4gPiArICAgICAubmRvX3ZsYW5fcnhf a2lsbF92aWQgPSBydGFzZV92bGFuX3J4X2tpbGxfdmlkLA0KPiA+ICsjaWZkZWYgQ09ORklHX05F VF9QT0xMX0NPTlRST0xMRVINCj4gPiArICAgICAubmRvX3BvbGxfY29udHJvbGxlciA9IHJ0YXNl X25ldHBvbGwsDQo+ID4gKyNlbmRpZg0KPiA+ICsjaWZkZWYgSUZMQV9WRl9NQVgNCj4gPiArICAg ICAubmRvX3NldF92Zl9tYWMgPSBydGFzZV9zZXRfdmZfbWFjLA0KPiA+ICsgICAgIC5uZG9fZ2V0 X3ZmX2NvbmZpZyA9IHJ0YXNlX2dldF92Zl9jb25maWcsDQo+ID4gKyNlbmRpZiAvKiBJRkxBX1ZG X01BWCAqLw0KPiA+ICsgICAgIC5uZG9fc2V0dXBfdGMgPSBydGFzZV9zZXR1cF90YywNCj4gPiAr ICAgICAubmRvX2ZpeF9mZWF0dXJlcyA9IHJ0YXNlX2ZpeF9mZWF0dXJlcywNCj4gPiArICAgICAu bmRvX3NldF9mZWF0dXJlcyA9IHJ0YXNlX3NldF9mZWF0dXJlcywNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2luaXRfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgZGV2LT5uZXRkZXZfb3BzID0gJnJ0YXNlX25ldGRldl9v cHM7DQo+ID4gKw0KPiA+ICsgICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZydGFzZV9ldGh0b29s X29wcyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHJ0YXNlX2luaXRfb25lIC0gUENJIERldmlj ZSBJbml0aWFsaXphdGlvbg0KPiA+ICsgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3QNCj4gPiAr ICogQGVudDogZW50cnkgaW4gcnRseHh4X3BjaV90YmwNCj4gPiArICoNCj4gPiArICogUmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBj aV9kZXZpY2VfaWQNCj4gKmVudCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYgPSBOVUxMOw0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDsNCj4g PiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHA7DQo+ID4gKyAgICAgaW50IHJjOw0KPiA+ ICsNCj4gPiArICAgICBpZiAoKHBkZXYtPmlzX3BoeXNmbiA9PSAwdSkgJiYgKHBkZXYtPmlzX3Zp cnRmbiAhPSAwdSkpIHsNCj4gPiArICAgICAgICAgICAgIHByX2luZm8oIlRoaXMgbW9kdWxlIGRv ZXMgbm90IHN1cHBvcnQgYSB2aXJ0dWFsIGZ1bmN0aW9uLiIpOw0KPiA+ICsgICAgICAgICAgICAg cmMgPSAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICBwcl9pbmZvKCJBdXRvbW90aXZlIFN3aXRjaCBFdGhlcm5ldCBkcml2 ZXIgbG9hZGVkXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgcmMgPSBydGFzZV9pbml0X2JvYXJkKHBk ZXYsICZkZXYsICZpb2FkZHIpOw0KPiA+ICsgICAgIGlmIChyYyAhPSAwKQ0KPiA+ICsgICAgICAg ICAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAgIHRwID0gbmV0ZGV2X3ByaXYoZGV2KTsN Cj4gPiArICAgICB0cC0+bW1pb19hZGRyID0gaW9hZGRyOw0KPiA+ICsgICAgIHRwLT5wZGV2ID0g cGRldjsNCj4gPiArICAgICBkZXYtPnRzdGF0cyA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0 cnVjdCBwY3B1X3N3X25ldHN0YXRzKTsNCj4gPiArICAgICBpZiAoIWRldi0+dHN0YXRzKQ0KPiA+ ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0XzE7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX2lu aXRfc29mdHdhcmVfdmFyaWFibGUodHApOw0KPiA+ICsgICAgIHJ0YXNlX2luaXRfaGFyZHdhcmUo dHApOw0KPiA+ICsNCj4gPiArICAgICByYyA9IHJ0YXNlX2FsbG9jX2ludGVycnVwdChwZGV2LCB0 cCk7DQo+ID4gKyAgICAgaWYgKHJjIDwgMCkNCj4gPiArICAgICAgICAgICAgIHByX2VycigidW5h YmxlIHRvIGFsbG9jIE1TSVgvTVNJXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2VfaW5pdF9u ZXRkZXZfb3BzKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBS VEFTRV9UWF9USU1FT1VUOw0KPiA+ICsgICAgIGRldi0+aXJxID0gcGRldi0+aXJxOw0KPiA+ICsg ICAgIGRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9hZGRyOw0KPiA+ICsNCj4gPiAr ICAgICBkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxB Tl9SWDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHRwLT5tY2ZnICE9IENGR19NRVRIT0RfREVGQVVM VCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07 DQo+ID4gKyAgICAgICAgICAgICBkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNIHwgTkVU SUZfRl9TRyB8DQo+IE5FVElGX0ZfVFNPOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5od19mZWF0 dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfA0KPiBORVRJRl9GX1RTTyB8IE5F VElGX0ZfUlhDU1VNDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVRJ Rl9GX0hXX1ZMQU5fVFggfA0KPiBORVRJRl9GX0hXX1ZMQU5fUlg7DQo+ID4gKyAgICAgICAgICAg ICBkZXYtPnZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwNCj4g TkVUSUZfRl9UU08gfCBORVRJRl9GX0hJR0hETUE7DQo+ID4gKyAgICAgICAgICAgICBkZXYtPnBy aXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7DQo+ID4gKyAgICAgICAgICAgICBkZXYt Pmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhBTEw7DQo+ID4gKyAgICAgICAgICAgICBkZXYtPmh3 X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhGQ1M7DQo+ID4gKyAgICAgICAgICAgICBkZXYtPmh3X2Zl YXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082Ow0KPiA+ICsgICAgICAg ICAgICAgZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNjsN Cj4gPiArICAgICAgICAgICAgIG5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LCBMU09fNjRLKTsN Cj4gPiArICAgICAgICAgICAgIG5ldGlmX3NldF90c29fbWF4X3NlZ3MoZGV2LA0KPiBOSUNfTUFY X1BIWVNfQlVGX0NPVU5UX0xTTzIpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcnRh c2VfZ2V0X21hY19hZGRyZXNzKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHRwLT50YWxseV92YWRk ciA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LA0KPiBzaXplb2YoKnRwLT50YWxseV92 YWRkciksICZ0cC0+dGFsbHlfcGFkZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgIGlmICghdHAtPnRhbGx5X3Zh ZGRyKSB7DQo+ID4gKyAgICAgICAgICAgICByYyA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAg ICBnb3RvIGVycl9vdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBydGFzZV90YWxs eV9jb3VudGVyX2NsZWFyKHRwKTsNCj4gPiArDQo+ID4gKyAgICAgcGNpX3NldF9kcnZkYXRhKHBk ZXYsIGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7DQo+ ID4gKyAgICAgaWYgKHJjICE9IDApDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7DQo+ ID4gKw0KPiA+ICsgICAgIG5ldGRldl9pbmZvKGRldiwgIiVzLCAlcE0sIElSUSAlZFxuIiwgZGV2 LT5uYW1lLCBkZXYtPmRldl9hZGRyLA0KPiBkZXYtPmlycSk7DQo+ID4gKw0KPiA+ICsgICAgIG5l dGlmX2NhcnJpZXJfb2ZmKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIGdvdG8gb3V0Ow0KPiA+ICsN Cj4gPiArZXJyX291dDoNCj4gPiArICAgICBpZiAodHAtPnRhbGx5X3ZhZGRyKSB7DQo+ID4gKyAg ICAgICAgICAgICBkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKnRwLT50YWxs eV92YWRkciksDQo+IHRwLT50YWxseV92YWRkciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRwLT50YWxseV9wYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgdHAt PnRhbGx5X3ZhZGRyID0gTlVMTDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICtlcnJfb3V0XzE6 DQo+ID4gKyAgICAgcnRhc2VfcmVsZWFzZV9ib2FyZChwZGV2LCBkZXYsIGlvYWRkcik7DQo+ID4g Kw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBydGFzZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2 KTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYp Ow0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjOw0KPiA+ICsgICAgIHUz MiBpID0gMHU7DQo+ID4gKw0KPiA+ICsgICAgIGFzc2VydChkZXYpOw0KPiA+ICsgICAgIGFzc2Vy dCh0cCk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmludF9udW1zOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAtPmludF92ZWN0b3JbaV07DQo+ID4g KyAgICAgICAgICAgICBuZXRpZl9uYXBpX2RlbCgmaXZlYy0+bmFwaSk7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19TUklPVg0KPiA+ICsgICAgIGlmICh0cC0+bnVtX3Zm cyAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHJ0YXNlX2Rpc2FibGVfc3Jpb3YodHAp ICE9IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2FsZXJ0KCJ1bmFibGUgdG8gZGlz YWJsZSBzcmlvdlxuIik7DQo+ID4gKyAgICAgfQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyAg ICAgdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsNCj4gPiArICAgICBydGFzZV9yZXNldF9pbnRlcnJ1 cHQocGRldiwgdHApOw0KPiA+ICsgICAgIGlmICh0cC0+dGFsbHlfdmFkZHIpIHsNCj4gPiArICAg ICAgICAgICAgIGRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqdHAtPnRhbGx5 X3ZhZGRyKSwNCj4gdHAtPnRhbGx5X3ZhZGRyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHAtPnRhbGx5X3BhZGRyKTsNCj4gPiArICAgICAgICAgICAgIHRwLT50YWxseV92 YWRkciA9IE5VTEw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBydGFzZV9yZWxlYXNl X2JvYXJkKHBkZXYsIGRldiwgdHAtPm1taW9fYWRkcik7DQo+ID4gKyAgICAgcGNpX3NldF9kcnZk YXRhKHBkZXYsIE5VTEwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9z ZXRfcnhidWZzaXplKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgY29uc3Qgc3RydWN0DQo+IG5l dF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHUzMiBtdHUgPSBkZXYtPm10dTsNCj4g PiArDQo+ID4gKyAgICAgdHAtPnJ4X2J1Zl9zeiA9IChtdHUgPiBFVEhfREFUQV9MRU4pID8gKG10 dSArIEVUSF9ITEVOICsgOHUgKw0KPiAxdSkgOiBSWF9CVUZfU0laRTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgcnRhc2VfZnJlZV9kZXNjKHN0cnVjdCBydGFzZV9wcml2YXRlICp0 cCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7DQo+ ID4gKyAgICAgdTMyIGkgPSAwOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IHRw LT5mdW5jX3R4X3F1ZXVlX251bTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAodHAtPnR4 X3JpbmdbaV0uZGVzYykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkbWFfZnJlZV9jb2hl cmVudCgmcGRldi0+ZGV2LA0KPiBSVEFTRV9UWF9SSU5HX0RFU0NfU0laRSwgdHAtPnR4X3Jpbmdb aV0uZGVzYywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAt PnR4X3JpbmdbaV0ucGh5X2FkZHIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0cC0+dHhf cmluZ1tpXS5kZXNjID0gTlVMTDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNfcnhfcXVldWVfbnVtOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIGlmICh0cC0+cnhfcmluZ1tpXS5kZXNjKSB7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsDQo+IFJU QVNFX1JYX1JJTkdfREVTQ19TSVpFLCB0cC0+cnhfcmluZ1tpXS5kZXNjLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+cnhfcmluZ1tpXS5waHlfYWRkcik7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRwLT5yeF9yaW5nW2ldLmRlc2MgPSBOVUxMOw0K PiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHMzMiBydGFzZV9hbGxvY19kZXNjKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7DQo+ID4gKyAgICAg czMyIHJldHZhbCA9IDA7DQo+ID4gKyAgICAgdTMyIGkgPSAwOw0KPiA+ICsNCj4gPiArICAgICAv KiBSeCBhbmQgVHggZGVzY3JpcHRvcnMgbmVlZHMgMjU2IGJ5dGVzIGFsaWdubWVudC4NCj4gPiAr ICAgICAgKiBkbWFfYWxsb2NfY29oZXJlbnQgcHJvdmlkZXMgbW9yZS4NCj4gPiArICAgICAgKi8N Cj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IHRwLT5mdW5jX3R4X3F1ZXVlX251bTsgaSsrKSB7 DQo+ID4gKyAgICAgICAgICAgICB0cC0+dHhfcmluZ1tpXS5kZXNjID0gZG1hX2FsbG9jX2NvaGVy ZW50KCZwZGV2LT5kZXYsDQo+IFJUQVNFX1RYX1JJTkdfREVTQ19TSVpFLA0KPiA+ICsNCj4gJnRw LT50eF9yaW5nW2ldLnBoeV9hZGRyLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgICAgICAgIGlm ICghdHAtPnR4X3JpbmdbaV0uZGVzYykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR2 YWwgPSAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAg ICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChyZXR2YWwgPT0g MCkgew0KPiA+ICsgICAgICAgICAgICAgZm9yIChpID0gMHU7IGkgPCB0cC0+ZnVuY19yeF9xdWV1 ZV9udW07IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0cC0+cnhfcmluZ1tpXS5k ZXNjID0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWxsb2NfY29oZXJl bnQoJnBkZXYtPmRldiwNCj4gUlRBU0VfUlhfUklOR19ERVNDX1NJWkUsDQo+ID4gKw0KPiAmdHAt PnJ4X3JpbmdbaV0ucGh5X2FkZHIsIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBpZiAoIXRwLT5yeF9yaW5nW2ldLmRlc2MpIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR2YWwgPSAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAg ICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0dmFsOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2Ug KmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRl dl9wcml2KGRldik7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX2ludF92ZWN0b3IgKml2ZWMgPSAm dHAtPmludF92ZWN0b3JbMF07DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYg PSB0cC0+cGRldjsNCj4gPiArICAgICBpbnQgcmV0dmFsOw0KPiA+ICsgICAgIHUxNiBpOw0KPiA+ ICsNCj4gPiArICAgICBydGFzZV9zZXRfcnhidWZzaXplKHRwLCBkZXYpOw0KPiA+ICsNCj4gPiAr ICAgICByZXR2YWwgPSBydGFzZV9hbGxvY19kZXNjKHRwKTsNCj4gPiArICAgICBpZiAocmV0dmFs IDwgMCkNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX2ZyZWVfYWxsX2FsbG9jYXRlZF9tZW07 DQo+ID4gKw0KPiA+ICsgICAgIHJldHZhbCA9IHJ0YXNlX2luaXRfcmluZyhkZXYpOw0KPiA+ICsg ICAgIGlmIChyZXR2YWwgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfZnJlZV9hbGxf YWxsb2NhdGVkX21lbTsNCj4gPiArDQo+ID4gKyAgICAgSU5JVF9ERUxBWUVEX1dPUksoJnRwLT50 YXNrLCBOVUxMKTsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2VfaHdfY29uZmlnKGRldik7DQo+ID4g Kw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfTVNJWF9FTkFCTEVEKSAhPSAwdSkg ew0KPiA+ICsgICAgICAgICAgICAgcmV0dmFsID0gcmVxdWVzdF9pcnEoaXZlYy0+aXJxLCBydGFz ZV9pbnRlcnJ1cHQsIDAsDQo+IGRldi0+bmFtZSwgZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAvKiByZXF1ZXN0IG90aGVyIGludGVycnVwdHMgdG8gaGFuZGxlIG11bHRpcXVldWUgKi8N Cj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCB0cC0+aW50X251bXM7IGkrKykgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpdmVjID0gJnRwLT5pbnRfdmVjdG9yW2ldOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdmVjLT5zdGF0dXMgPT0gMXUpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKikm aXZlYy0+bmFtZSwNCj4gIiVzX2ludCVpIiwgZGV2LT5uYW1lLCBpKTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlcXVlc3RfaXJxKGl2ZWMtPmly cSwNCj4gcnRhc2VfcV9pbnRlcnJ1cHQsIDAsDQo+ID4gKw0KPiAoY2hhciAqKSZpdmVjLT5uYW1l LCBpdmVjKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9IGVsc2Ug aWYgKCh0cC0+c3dfZmxhZyAmIFNXRl9NU0lfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAg ICAgICAgIHJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcnRhc2VfaW50ZXJydXB0LCAw LA0KPiBkZXYtPm5hbWUsIGRldik7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg ICAgIHJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcnRhc2VfaW50ZXJydXB0LCBTQV9T SElSUSwNCj4gZGV2LT5uYW1lLCBkZXYpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg aWYgKHJldHZhbCAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfZXJyKGRldiwgIiVz OiBjYW4ndCByZXF1ZXN0IE1TSVggaW50ZXJydXB0LiBFcnJvcjoNCj4gJWQiLCBkZXYtPm5hbWUs IHJldHZhbCk7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9mcmVlX2FsbF9hbGxvY2F0ZWRf bWVtOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogYWx3YXlzIGxpbmssIHNvIHN0 YXJ0IHRvIHRyYW5zbWl0ICYgcmVjZWl2ZSAqLw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcg JiBTV0ZfU1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2Z1 bmNfZW5hYmxlKHRwKTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2VuYWJsZV9od19pbnRlcnJ1 cHQodHApOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19z dGFydChkZXYpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7 DQo+ID4gKyAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsgICAgIG5ldGRldl9pbmZv KGRldiwgUEZYICIlczogbGluayB1cFxuIiwgZGV2LT5uYW1lKTsNCj4gPiArDQo+ID4gKyAgICAg Z290byBvdXQ7DQo+ID4gKw0KPiA+ICtlcnJfZnJlZV9hbGxfYWxsb2NhdGVkX21lbToNCj4gPiAr ICAgICBydGFzZV9mcmVlX2Rlc2ModHApOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJl dHVybiByZXR2YWw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3NldF9t YXIoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9p ZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUzMiBtY19maWx0 ZXJbMl07DQo+ID4gKw0KPiA+ICsgICAgIG1jX2ZpbHRlclswXSA9IHRwLT5tY19maWx0ZXJbMF07 DQo+ID4gKyAgICAgbWNfZmlsdGVyWzFdID0gdHAtPm1jX2ZpbHRlclsxXTsNCj4gPiArDQo+ID4g KyAgICAgaWYgKCh0cC0+c3dfZmxhZyAmIFNXRl9TUklPVl9FTkFCTEVEKSAhPSAwdSkgew0KPiA+ ICsgICAgICAgICAgICAgdTggaSA9IDB1Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGZvciAo aSA9IDB1OyBpIDwgdHAtPm51bV92ZnM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBtY19maWx0ZXJbMF0gfD0gdHAtPnZmX2luZm9baV0ubWNfZmlsdGVyWzBdOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBtY19maWx0ZXJbMV0gfD0gdHAtPnZmX2luZm9baV0ubWNfZmlsdGVy WzFdOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg UlRMX1czMihNQVIwLCBtY19maWx0ZXJbMF0pOw0KPiA+ICsgICAgIFJUTF9XMzIoTUFSMSwgbWNf ZmlsdGVyWzFdKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBydGFzZV9od19zZXRfcnhfcGFj a2V0X2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3Rh dGljIGNvbnN0IHMzMiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7DQo+ID4gKyAgICAgc3Ry dWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICB2b2lk IF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIG1jX2ZpbHRl clsyXTsNCj4gPiArICAgICB1MTYgcnhfbW9kZTsNCj4gPiArDQo+ID4gKyAgICAgcnhfbW9kZSA9 IChSVExfUjE2KFJYX0NPTkZJR18wKSAmIH5BQ0NFUFRfTUFTSyk7DQo+ID4gKw0KPiA+ICsgICAg IGlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAg ICAgcnhfbW9kZSB8PSBBQ0NFUFRfQlJPQURDQVNUIHwgQUNDRVBUX01VTFRJQ0FTVCB8DQo+IEFD Q0VQVF9NWVBIWVMgfCBBQ0NFUFRfQUxMUEhZUzsNCj4gPiArICAgICAgICAgICAgIG1jX2ZpbHRl clswXSA9IDB4RkZGRkZGRkZ1Ow0KPiA+ICsgICAgICAgICAgICAgbWNfZmlsdGVyWzFdID0gMHhG RkZGRkZGRnU7DQo+ID4gKyAgICAgfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBt dWx0aWNhc3RfZmlsdGVyX2xpbWl0KQ0KPiA+ICsgICAgICAgICAgICAgICAgfHwgKChkZXYtPmZs YWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwdSkpIHsNCj4gPiArICAgICAgICAgICAgIC8qIFRvbyBt YW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLw0KPiA+ ICsgICAgICAgICAgICAgcnhfbW9kZSB8PSBBQ0NFUFRfQlJPQURDQVNUIHwgQUNDRVBUX01VTFRJ Q0FTVCB8DQo+IEFDQ0VQVF9NWVBIWVM7DQo+ID4gKyAgICAgICAgICAgICBtY19maWx0ZXJbMF0g PSAweEZGRkZGRkZGdTsNCj4gPiArICAgICAgICAgICAgIG1jX2ZpbHRlclsxXSA9IDB4RkZGRkZG RkZ1Ow0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg bmV0ZGV2X2h3X2FkZHIgKmhhOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHJ4X21vZGUgfD0g QUNDRVBUX0JST0FEQ0FTVCB8IEFDQ0VQVF9NWVBIWVM7DQo+ID4gKyAgICAgICAgICAgICBtY19m aWx0ZXJbMF0gPSAwdTsNCj4gPiArICAgICAgICAgICAgIG1jX2ZpbHRlclsxXSA9IDB1Ow0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8NCj4gPiArICAgICAg ICAgICAgIG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgdTMyIGJpdF9uciA9IChldGhlcl9jcmMoRVRIX0FMRU4sIGhhLT5hZGRyKSA+ Pg0KPiAyNik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBtY19maWx0ZXJbYml0 X25yID4+IDVdIHw9ICgxdSA8PCAoYml0X25yICYgMzF1KSk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHJ4X21vZGUgfD0gQUNDRVBUX01VTFRJQ0FTVDsNCj4gPiArICAgICAgICAgICAgIH0N Cj4gPiArICAgICAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgaWYgKChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEFMTCkgIT0gMHUp DQo+ID4gKyAgICAgICAgICAgICByeF9tb2RlIHw9IChBQ0NFUFRfRVJSIHwgQUNDRVBUX1JVTlQp Ow0KPiA+ICsNCj4gPiArICAgICB0cC0+bWNfZmlsdGVyWzBdID0gc3dhYjMyKG1jX2ZpbHRlclsx XSk7DQo+ID4gKyAgICAgdHAtPm1jX2ZpbHRlclsxXSA9IHN3YWIzMihtY19maWx0ZXJbMF0pOw0K PiA+ICsNCj4gPiArICAgICBydGFzZV9zZXRfbWFyKHRwKTsNCj4gPiArICAgICBSVExfVzE2KFJY X0NPTkZJR18wLCByeF9tb2RlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRh c2Vfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAg IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAg dW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUo JnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX2h3X3NldF9yeF9wYWNr ZXRfZmlsdGVyKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNl X2h3X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29u c3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAg ICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIHJl Z19kYXRhID0gMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCh0cC0+c3dfZmxhZyAmIFNXRl9TUklP Vl9FTkFCTEVEKSA9PSAwdSkNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2h3X3Jlc2V0KGRldik7 DQo+ID4gKw0KPiA+ICsgICAgIC8qIFNldCBSeCBETUEgYnVyc3QgKi8NCj4gPiArICAgICByZWdf ZGF0YSA9IFJUTF9SMTYoUlhfQ09ORklHXzApOw0KPiA+ICsgICAgIHJlZ19kYXRhICY9IH4oUlhf U0lOR0xFX1RBRyB8IFJYX1NJTkdMRV9GRVRDSCk7DQo+ID4gKyAgICAgcmVnX2RhdGEgJj0gfihS WF9NWF9ETUFfTUFTSyA8PCBSWF9NWF9ETUFfU0hJRlQpOw0KPiA+ICsgICAgIHJlZ19kYXRhIHw9 IChSWF9ETUFfQlVSU1RfMjU2IDw8IFJYX01YX0RNQV9TSElGVCk7DQo+ID4gKyAgICAgUlRMX1cx NihSWF9DT05GSUdfMCwgcmVnX2RhdGEpOw0KPiA+ICsNCj4gPiArICAgICAvKiBOZXcgUnggRGVz Y3JpdHBvciAqLw0KPiA+ICsgICAgIHJlZ19kYXRhID0gUlRMX1IxNihSWF9DT05GSUdfMSk7DQo+ ID4gKyAgICAgcmVnX2RhdGEgfD0gUlhfTkVXX0RFU0NfRk9STUFUX0VOOw0KPiA+ICsgICAgIHJl Z19kYXRhIHw9IFBDSUVfTkVXX0ZMT1c7DQo+ID4gKyAgICAgLyogUnggRmV0Y2ggRGVzYyBOdW1i ZXIgKi8NCj4gPiArICAgICByZWdfZGF0YSAmPSB+KFJYX01BWF9GRVRDSF9ERVNDX01BU0sgPDwN Cj4gUlhfTUFYX0ZFVENIX0RFU0NfU0hJRlQpOw0KPiA+ICsgICAgIHJlZ19kYXRhIHw9ICgweEYg PDwgUlhfTUFYX0ZFVENIX0RFU0NfU0hJRlQpOw0KPiA+ICsgICAgIFJUTF9XMTYoUlhfQ09ORklH XzEsIHJlZ19kYXRhKTsNCj4gPiArDQo+ID4gKyAgICAgLyogUnggcXVldWUgbnVtYmVycyAqLw0K PiA+ICsgICAgIHJlZ19kYXRhID0gUlRMX1IxNihGQ1IpOw0KPiA+ICsgICAgIHJlZ19kYXRhICY9 IH4oRkNSX1JYUV9NQVNLIDw8IEZDUl9SWFFfU0hJRlQpOw0KPiA+ICsgICAgIHN3aXRjaCAodHAt PmZ1bmNfcnhfcXVldWVfbnVtKSB7DQo+ID4gKyAgICAgY2FzZSAxOg0KPiA+ICsgICAgICAgICAg ICAgcmVnX2RhdGEgfD0gKDB4MXUgPDwgRkNSX1JYUV9TSElGVCk7DQo+ID4gKyAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICBjYXNlIDI6DQo+ID4gKyAgICAgICAgICAgICByZWdfZGF0YSB8 PSAoMHgydSA8PCBGQ1JfUlhRX1NISUZUKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgIGNhc2UgNDoNCj4gPiArICAgICAgICAgICAgIHJlZ19kYXRhIHw9ICgweDN1IDw8IEZD Ul9SWFFfU0hJRlQpOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgZGVmYXVs dDoNCj4gPiArICAgICAgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8uICovDQo+ID4gKyAgICAgICAg ICAgICBicmVhazsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgUlRMX1cxNihGQ1IsIHJlZ19kYXRh KTsNCj4gPiArDQo+ID4gKyAgICAgLyogaW50ZXJydXB0IG1pdGlnYXRpb24gKi8NCj4gPiArICAg ICBydGFzZV9pbnRlcnJ1cHRfbWl0aWdhdGlvbih0cCk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFNl dCBUeCBETUEgYnVyc3Qgc2l6ZSBhbmQgSW50ZXJmcmFtZSBHYXAgVGltZSAqLw0KPiA+ICsgICAg IHJlZ19kYXRhID0gUlRMX1IzMihUWF9DT05GSUdfMCk7DQo+ID4gKyAgICAgcmVnX2RhdGEgJj0g figoVFhfRE1BX01BU0sgPDwgVFhfRE1BX1NISUZUKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg fCAoVFhfSU5URVJfRlJBTUVfR0FQX01BU0sgPDwNCj4gVFhfSU5URVJfRlJBTUVfR0FQX1NISUZU KSk7DQo+ID4gKyAgICAgcmVnX2RhdGEgfD0gKChUWF9ETUFfQlVSU1RfVU5MSU1JVEVEIDw8IFRY X0RNQV9TSElGVCkNCj4gPiArICAgICAgICAgICAgICAgICAgfCAoSU5URVJGUkFNRUdBUCA8PA0K PiBUWF9JTlRFUl9GUkFNRV9HQVBfU0hJRlQpKTsNCj4gPiArICAgICBSVExfVzMyKFRYX0NPTkZJ R18wLCByZWdfZGF0YSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIE5ldyBUeCBEZXNjcmlwdG9yICov DQo+ID4gKyAgICAgUlRMX1cxNihURlVOX0NUUkwsIChSVExfUjE2KFRGVU5fQ1RSTCkgfA0KPiBU WF9ORVdfREVTQ19GT1JNQVRfRU4pKTsNCj4gPiArDQo+ID4gKyAgICAgLyogVHggRmV0Y2ggRGVz YyBOdW1iZXIgKi8NCj4gPiArICAgICBSVExfVzgoVERGTlIsIDB4MTApOw0KPiA+ICsNCj4gPiAr ICAgICAvKiB0YWcgbnVtIHNlbGVjdCAqLw0KPiA+ICsgICAgIHJlZ19kYXRhID0gUlRMX1IxNihN VFBTKTsNCj4gPiArICAgICByZWdfZGF0YSAmPSB+KDB4N3UgPDwgOCk7DQo+ID4gKyAgICAgcmVn X2RhdGEgfD0gKDB4NHUgPDwgOCk7DQo+ID4gKyAgICAgUlRMX1cxNihNVFBTLCByZWdfZGF0YSk7 DQo+ID4gKw0KPiA+ICsgICAgIC8qIFR4IHF1ZXVlIG51bWJlcnMgKi8NCj4gPiArICAgICByZWdf ZGF0YSA9IFJUTF9SMTYoVFhfQ09ORklHXzEpOw0KPiA+ICsgICAgIHJlZ19kYXRhICY9IH4oMHgz dSA8PCAxMCk7DQo+ID4gKyAgICAgc3dpdGNoICh0cC0+dHhfcXVldWVfY3RybCkgew0KPiA+ICsg ICAgIGNhc2UgMToNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgMjoN Cj4gPiArICAgICAgICAgICAgIHJlZ19kYXRhIHw9ICgweDF1IDw8IDEwKTsNCj4gPiArICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgMzoNCj4gPiArICAgICBjYXNlIDQ6DQo+ID4g KyAgICAgICAgICAgICByZWdfZGF0YSB8PSAoMHgydSA8PCAxMCk7DQo+ID4gKyAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgcmVnX2RhdGEg fD0gKDB4M3UgPDwgMTApOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0K PiA+ICsgICAgIFJUTF9XMTYoVFhfQ09ORklHXzEsIHJlZ19kYXRhKTsNCj4gPiArDQo+ID4gKyAg ICAgLyogVE9LIGNvbmRpdGlvbiAqLw0KPiA+ICsgICAgIFJUTF9XMTYoVE9LU0VMLCAweDU1NTUp Ow0KPiA+ICsNCj4gPiArICAgICBydGFzZV90YWxseV9jb3VudGVyX2FkZHJfZmlsbCh0cCk7DQo+ ID4gKyAgICAgcnRhc2VfZGVzY19hZGRyX2ZpbGwodHApOw0KPiA+ICsNCj4gPiArICAgICBpZiAo cnRhc2VfaHdfc2V0X2ZlYXR1cmVzKGRldiwgZGV2LT5mZWF0dXJlcykgIT0gMCkNCj4gPiArICAg ICAgICAgICAgIG5ldGRldl9hbGVydChkZXYsICJ1bmFibGUgdG8gc2V0IGh3IGZlYXR1cmVzXG4i KTsNCj4gPiArDQo+ID4gKyAgICAgLyogVEJEOiBlbmFibGUgZmxvdyBjb250cm9sICovDQo+ID4g KyAgICAgcmVnX2RhdGEgPSBSVExfUjE2KENQTFVTX0NNRCk7DQo+ID4gKyAgICAgcmVnX2RhdGEg fD0gKEZPUkNFX1RYRkxPV19FTiB8IEZPUkNFX1JYRkxPV19FTik7DQo+ID4gKyAgICAgUlRMX1cx NihDUExVU19DTUQsIHJlZ19kYXRhKTsNCj4gPiArICAgICAvKiBTZXQgTmVhciBGSUZPIFRocmVz aG9sZCAtIHJ4IG1pc3NlZCBpc3N1ZS4gKi8NCj4gPiArICAgICBSVExfVzE2KFJGSUZPTkZVTEws IDB4MTkwKTsNCj4gPiArDQo+ID4gKyAgICAgUlRMX1cxNihSTVMsIHRwLT5yeF9idWZfc3opOw0K PiA+ICsNCj4gPiArICAgICAvKiBTZXQgUnggcGFja2V0IGZpbHRlciAqLw0KPiA+ICsgICAgIHJ0 YXNlX2h3X3NldF9yeF9wYWNrZXRfZmlsdGVyKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGVu YWJsZSBlcGh5IGludGVycnVwdCAqLw0KPiA+ICsgICAgIG1hY19vY3Bfd3JpdGUodHAsIDB4RUFE MCwgMHhGRjA3KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBydGFzZV9od19zdGFydChjb25z dCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0 IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAg cnRhc2VfbmljX2VuYWJsZShkZXYpOw0KPiA+ICsgICAgIHJ0YXNlX2VuYWJsZV9od19pbnRlcnJ1 cHQodHApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX2NoYW5nZV9tdHUo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsg ICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfU1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiAr ICAgICAgICAgICAgIHJldCA9IC1FUEVSTTsNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX291 dDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+ bG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgIGRldi0+bXR1ID0gbmV3X210dTsNCj4gPiArICAgICBz cGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAg ICBpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0K PiA+ICsNCj4gPiArICAgICBydGFzZV9kb3duKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5f bG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICBydGFzZV9z ZXRfcnhidWZzaXplKHRwLCBkZXYpOw0KPiA+ICsNCj4gPiArICAgICByZXQgPSBydGFzZV9pbml0 X3JpbmcoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJldCA8IDApIHsNCj4gPiArICAgICAg ICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKyAg ICAgICAgICAgICBnb3RvIGVycl9vdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBu ZXRpZl9zdG9wX3F1ZXVlKGRldik7DQo+ID4gKyAgICAgbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsN Cj4gPiArICAgICBydGFzZV9od19jb25maWcoZGV2KTsNCj4gPiArICAgICBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICAvKiBhbHdheXMg bGluaywgc28gc3RhcnQgdG8gdHJhbnNtaXQgJiByZWNlaXZlICovDQo+ID4gKyAgICAgcnRhc2Vf aHdfc3RhcnQoZGV2KTsNCj4gPiArICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7DQo+ID4gKyAg ICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIG5l dGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsNCj4gPiArDQo+ID4gK2Vycl9vdXQ6DQo+ID4gKyAg ICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHJ0 YXNlX21ha2VfdW51c2FibGVfYnlfYXNpYyhyeF9kZXNjICpkZXNjKQ0KPiA+ICt7DQo+ID4gKyAg ICAgZGVzYy0+ZGVzY19jbWQuYWRkciA9IDB4MEJBREJBREJBREJBREJBRHVMTDsNCj4gPiArICAg ICBkZXNjLT5kZXNjX2NtZC5vcHRzMSAmPSB+Y3B1X3RvX2xlMzIoREVTQ19PV04gfCBSU1ZEX01B U0spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRhc2VfbWFya190 b19hc2ljKHJ4X2Rlc2MgKmRlc2MsIHUzMiByeF9idWZfc3opDQo+ID4gK3sNCj4gPiArICAgICB1 MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy0+ZGVzY19jbWQub3B0czEpICYgUklOR19FTkQ7DQo+ ID4gKw0KPiA+ICsgICAgIGRlc2MtPmRlc2NfY21kLm9wdHMxID0gY3B1X3RvX2xlMzIoREVTQ19P V04gfCBlb3IgfCByeF9idWZfc3opOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5l IHZvaWQgcnRhc2VfbWFwX3RvX2FzaWMocnhfZGVzYyAqZGVzYywgZG1hX2FkZHJfdCBtYXBwaW5n LA0KPiB1MzIgcnhfYnVmX3N6KQ0KPiA+ICt7DQo+ID4gKyAgICAgZGVzYy0+ZGVzY19jbWQuYWRk ciA9IGNwdV90b19sZTY0KG1hcHBpbmcpOw0KPiA+ICsgICAgIC8qIG1ha2Ugc3VyZSB0aGUgcGh5 c2ljYWwgYWRkcmVzcyBoYXMgYmVlbiB1cGRhdGVkICovDQo+ID4gKyAgICAgd21iKCk7DQo+ID4g KyAgICAgcnRhc2VfbWFya190b19hc2ljKGRlc2MsIHJ4X2J1Zl9zeik7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBzMzIgcnRhc2VfYWxsb2Nfcnhfc2tiKGNvbnN0IHN0cnVjdCBydGFzZV9y aW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZg0KPiAqKnBfc2tfYnVmZiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgcnhfZGVzYyAqZGVzYywgZG1hX2FkZHJfdCAqcnhfcGh5X2FkZHIs DQo+IHUzMiByeF9idWZfc3osIHU4IGluX2ludHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qg cnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9IHJpbmctPml2ZWM7DQo+ID4gKyAgICAgY29uc3Qgc3Ry dWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gaXZlYy0+dHA7DQo+ID4gKyAgICAgc3RydWN0IHNrX2J1 ZmYgKnNrYiA9IE5VTEw7DQo+ID4gKyAgICAgZG1hX2FkZHJfdCBtYXBwaW5nOw0KPiA+ICsgICAg IHMzMiByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBpZiAoaW5faW50ciAhPSAwdSkNCj4gPiAr ICAgICAgICAgICAgIHNrYiA9IFJUTF9BTExPQ19TS0JfSU5UUihpdmVjLT5uYXBpLCAocnhfYnVm X3N6ICsNCj4gUlRLX1JYX0FMSUdOKSk7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAg ICAgc2tiID0gZGV2X2FsbG9jX3NrYigocnhfYnVmX3N6ICsgUlRLX1JYX0FMSUdOKSk7DQo+ID4g Kw0KPiA+ICsgICAgIGlmICh1bmxpa2VseSghc2tiKSkNCj4gPiArICAgICAgICAgICAgIGdvdG8g ZXJyX291dDsNCj4gPiArDQo+ID4gKyAgICAgc2tiX3Jlc2VydmUoc2tiLCBSVEtfUlhfQUxJR04p Ow0KPiA+ICsNCj4gPiArICAgICBtYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJnRwLT5wZGV2LT5k ZXYsIHNrYi0+ZGF0YSwgcnhfYnVmX3N6LA0KPiBETUFfRlJPTV9ERVZJQ0UpOw0KPiA+ICsgICAg IGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcigmdHAtPnBkZXYtPmRldiwgbWFwcGluZykp KSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAodW5saWtlbHkobmV0X3JhdGVsaW1pdCgpKSkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgbmV0aWZfZXJyKHRwLCBkcnYsIHRwLT5kZXYsICJGYWls ZWQgdG8gbWFwIFJYDQo+IERNQSFcbiIpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGdvdG8g ZXJyX291dDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICpwX3NrX2J1ZmYgPSBza2I7 DQo+ID4gKyAgICAgKnJ4X3BoeV9hZGRyID0gbWFwcGluZzsNCj4gPiArICAgICBydGFzZV9tYXBf dG9fYXNpYyhkZXNjLCBtYXBwaW5nLCByeF9idWZfc3opOw0KPiA+ICsgICAgIGdvdG8gb3V0Ow0K PiA+ICsNCj4gPiArZXJyX291dDoNCj4gPiArICAgICBpZiAoc2tiKQ0KPiA+ICsgICAgICAgICAg ICAgZGV2X2tmcmVlX3NrYihza2IpOw0KPiA+ICsNCj4gPiArICAgICByZXQgPSAtRU5PTUVNOw0K PiA+ICsgICAgIHJ0YXNlX21ha2VfdW51c2FibGVfYnlfYXNpYyhkZXNjKTsNCj4gPiArDQo+ID4g K291dDoNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBydGFzZV9yeF9yaW5nX2NsZWFyKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nKQ0KPiA+ICt7 DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gcmluZy0+aXZlYy0+ dHA7DQo+ID4gKyAgICAgcnhfZGVzYyAqZGVzYzsNCj4gPiArICAgICB1MzIgaTsNCj4gPiArDQo+ ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCBOVU1fREVTQzsgaSsrKSB7DQo+ID4gKyAgICAgICAg ICAgICBkZXNjID0gcmluZy0+ZGVzYyArIChzaXplb2YocnhfZGVzYykgKiBpKTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICBpZiAocmluZy0+c2tidWZmW2ldKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGRtYV91bm1hcF9zaW5nbGUoJnRwLT5wZGV2LT5kZXYsDQo+IHJpbmctPm1pcy5k YXRhX3BoeV9hZGRyW2ldLCB0cC0+cnhfYnVmX3N6LA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERNQV9GUk9NX0RFVklDRSk7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiKHJpbmctPnNrYnVmZltpXSk7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICByaW5nLT5za2J1ZmZbaV0gPSBOVUxMOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgcnRhc2VfbWFrZV91bnVzYWJsZV9ieV9hc2ljKGRlc2Mp Ow0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiAr dm9pZCBydGFzZV9yeF9jbGVhcihzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4g PiArICAgICB1MzIgaTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCB0cC0+ZnVu Y19yeF9xdWV1ZV9udW07IGkrKykNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3J4X3JpbmdfY2xl YXIoJnRwLT5yeF9yaW5nW2ldKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBydGFz ZV9yeF9yaW5nX2ZpbGwoc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHUzMiByaW5nX3N0YXJ0LCB1 MzINCj4gcmluZ19lbmQsIHU4IGluX2ludHIpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1 Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSByaW5nLT5pdmVjLT50cDsNCj4gPiArICAgICB1MzIgY3Vy Ow0KPiA+ICsNCj4gPiArICAgICBmb3IgKGN1ciA9IHJpbmdfc3RhcnQ7IChyaW5nX2VuZCAtIGN1 cikgPiAwdTsgY3VyKyspIHsNCj4gPiArICAgICAgICAgICAgIHMzMiByZXQgPSAwOw0KPiA+ICsg ICAgICAgICAgICAgdTMyIGkgPSBjdXIgJSBOVU1fREVTQzsNCj4gPiArICAgICAgICAgICAgIHJ4 X2Rlc2MgKmRlc2MgPSByaW5nLT5kZXNjICsgKHNpemVvZihyeF9kZXNjKSAqIGkpOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgIGlmIChyaW5nLT5za2J1ZmZbaV0pDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHJldCA9IHJ0YXNl X2FsbG9jX3J4X3NrYihyaW5nLCAmcmluZy0+c2tidWZmW2ldLCBkZXNjLA0KPiAmcmluZy0+bWlz LmRhdGFfcGh5X2FkZHJbaV0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHAtPnJ4X2J1Zl9zeiwgaW5faW50cik7DQo+ID4gKyAgICAgICAgICAgICBpZiAocmV0 IDwgMCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICByZXR1cm4gKGN1ciAtIHJpbmdfc3RhcnQpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRhc2VfbWFya19hc19sYXN0X2Rlc2NyaXB0b3Iocnhf ZGVzYyAqZGVzYykNCj4gPiArew0KPiA+ICsgICAgIGRlc2MtPmRlc2NfY21kLm9wdHMxIHw9IGNw dV90b19sZTMyKFJJTkdfRU5EKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRh c2VfZGVzY19hZGRyX2ZpbGwoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7 DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsg ICAgIGNvbnN0IHN0cnVjdCBydGFzZV9yaW5nICpyaW5nOw0KPiA+ICsgICAgIHUxNiBjbWQgPSAw Ow0KPiA+ICsgICAgIHUxNiBpID0gMDsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkg PCB0cC0+ZnVuY190eF9xdWV1ZV9udW07IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgcmluZyA9 ICZ0cC0+dHhfcmluZ1tpXTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBSVExfVzMyKFRYX0RF U0NfU1RBUlRfQUREUjAsICh1MzIpKHJpbmctPnBoeV9hZGRyICYNCj4gRE1BX0JJVF9NQVNLKDMy KSkpOw0KPiA+ICsgICAgICAgICAgICAgUlRMX1czMihUWF9ERVNDX1NUQVJUX0FERFI0LCAodTMy KShyaW5nLT5waHlfYWRkcg0KPiA+PiAzMikpOw0KPiA+ICsgICAgICAgICAgICAgY21kID0gaSB8 IFRYX0RFU0NfQ01EX1dFIHwgVFhfREVTQ19DTURfQ1M7DQo+ID4gKyAgICAgICAgICAgICBSVExf VzE2KFRYX0RFU0NfQ09NTUFORCwgY21kKTsNCj4gPiArICAgICAgICAgICAgIHVzbGVlcF9yYW5n ZSgxMDAsIDExMCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwdTsg aSA8IHRwLT5mdW5jX3J4X3F1ZXVlX251bTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICByaW5n ID0gJnRwLT5yeF9yaW5nW2ldOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmIChpID09IDB1 KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XMzIoUTBfUlhfREVTQ19BRERSMCwN Cj4gKHUzMikoKHJpbmctPnBoeV9hZGRyICYgRE1BX0JJVF9NQVNLKDMyKSkpKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgUlRMX1czMihRMF9SWF9ERVNDX0FERFI0LA0KPiAodTMyKShyaW5n LT5waHlfYWRkciA+PiAzMikpOw0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgUlRMX1czMigoUTFfUlhfREVTQ19BRERSMCArICgoaSAtIDF1KSAq IDh1KSksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMikocmluZy0+cGh5 X2FkZHIgJg0KPiBETUFfQklUX01BU0soMzIpKSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IFJUTF9XMzIoKFExX1JYX0RFU0NfQUREUjQgKyAoKGkgLSAxdSkgKiA4dSkpLA0KPiAodTMyKShy aW5nLT5waHlfYWRkciA+PiAzMikpOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfdHhfZGVzY19pbml0KHN0cnVj dCBydGFzZV9wcml2YXRlICp0cCwgdTE2IGlkeCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBy dGFzZV9yaW5nICpyaW5nID0gJnRwLT50eF9yaW5nW2lkeF07DQo+ID4gKyAgICAgdHhfZGVzYyAq ZGVzYzsNCj4gPiArICAgICB1MzIgaSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIG1lbXNldChyaW5n LT5kZXNjLCAweDAsIFJUQVNFX1RYX1JJTkdfREVTQ19TSVpFKTsNCj4gPiArICAgICBtZW1zZXQo cmluZy0+c2tidWZmLCAweDAsIChOVU1fREVTQyAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSkp Ow0KPiA+ICsgICAgIHJpbmctPmN1cl9pZHggPSAwOw0KPiA+ICsgICAgIHJpbmctPmRpcnR5X2lk eCA9IDA7DQo+ID4gKyAgICAgcmluZy0+aW5kZXggPSBpZHg7DQo+ID4gKw0KPiA+ICsgICAgIGZv ciAoaSA9IDB1OyBpIDwgTlVNX0RFU0M7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgcmluZy0+ bWlzLmxlbltpXSA9IDA7DQo+ID4gKyAgICAgICAgICAgICBpZiAoKE5VTV9ERVNDIC0gMXUpID09 IGkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHJpbmctPmRlc2MgKyAoc2l6 ZW9mKHR4X2Rlc2MpICogaSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRlc2MtPm9wdHMx ID0gY3B1X3RvX2xlMzIoUklOR19FTkQpOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgcmluZy0+cmluZ19oYW5kbGVyID0gdHhfaGFuZGxlcjsNCj4g PiArICAgICBpZiAoaWR4IDwgNHUpIHsNCj4gPiArICAgICAgICAgICAgIHJpbmctPml2ZWMgPSAm dHAtPmludF92ZWN0b3JbaWR4XTsNCj4gPiArICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJnJp bmctPnJpbmdfZW50cnksDQo+ICZ0cC0+aW50X3ZlY3RvcltpZHhdLnJpbmdfbGlzdCk7DQo+ID4g KyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHJpbmctPml2ZWMgPSAmdHAtPmludF92 ZWN0b3JbMF07DQo+ID4gKyAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZyaW5nLT5yaW5nX2Vu dHJ5LA0KPiAmdHAtPmludF92ZWN0b3JbMF0ucmluZ19saXN0KTsNCj4gPiArICAgICB9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRh c2VfcHJpdmF0ZSAqdHAsIHUxNiBpZHgpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2Vf cmluZyAqcmluZyA9ICZ0cC0+cnhfcmluZ1tpZHhdOw0KPiA+ICsgICAgIHUxNiBpID0gMDsNCj4g PiArDQo+ID4gKyAgICAgbWVtc2V0KHJpbmctPmRlc2MsIDB4MCwgUlRBU0VfUlhfUklOR19ERVND X1NJWkUpOw0KPiA+ICsgICAgIG1lbXNldChyaW5nLT5za2J1ZmYsIDB4MCwgKE5VTV9ERVNDICog c2l6ZW9mKHN0cnVjdCBza19idWZmICopKSk7DQo+ID4gKyAgICAgcmluZy0+Y3VyX2lkeCA9IDA7 DQo+ID4gKyAgICAgcmluZy0+ZGlydHlfaWR4ID0gMDsNCj4gPiArICAgICByaW5nLT5pbmRleCA9 IGlkeDsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCBOVU1fREVTQzsgaSsrKQ0K PiA+ICsgICAgICAgICAgICAgcmluZy0+bWlzLmRhdGFfcGh5X2FkZHJbaV0gPSAwOw0KPiA+ICsN Cj4gPiArICAgICByaW5nLT5yaW5nX2hhbmRsZXIgPSByeF9oYW5kbGVyOw0KPiA+ICsgICAgIHJp bmctPml2ZWMgPSAmdHAtPmludF92ZWN0b3JbaWR4XTsNCj4gPiArICAgICBsaXN0X2FkZF90YWls KCZyaW5nLT5yaW5nX2VudHJ5LCAmdHAtPmludF92ZWN0b3JbaWR4XS5yaW5nX2xpc3QpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzMzIgcnRhc2VfaW5pdF9yaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBu ZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIHMzMiByYyA9IDA7DQo+ID4gKyAgICAgdTE2IGkg PSAwOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IHRwLT5mdW5jX3R4X3F1ZXVl X251bTsgaSsrKQ0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfdHhfZGVzY19pbml0KHRwLCBpKTsN Cj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCB0cC0+ZnVuY19yeF9xdWV1ZV9udW07 IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfcnhfZGVzY19pbml0KHRwLCBpKTsNCj4g PiArICAgICAgICAgICAgIGlmIChydGFzZV9yeF9yaW5nX2ZpbGwoJnRwLT5yeF9yaW5nW2ldLCAw LCBOVU1fREVTQywgMCkgIT0NCj4gTlVNX0RFU0MpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGdvdG8gZXJyX291dDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBydGFzZV9tYXJrX2FzX2xh c3RfZGVzY3JpcHRvcih0cC0+cnhfcmluZ1tpXS5kZXNjDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArIChzaXplb2YocnhfZGVzYykgKg0KPiAoTlVNX0RF U0MgLSAxdSkpKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGdvdG8gb3V0Ow0KPiA+ ICsNCj4gPiArZXJyX291dDoNCj4gPiArICAgICBydGFzZV9yeF9jbGVhcih0cCk7DQo+ID4gKyAg ICAgcmMgPSAtRU5PTUVNOw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuIHJjOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJUS19PUFRTMV9ERUJVR19WQUxVRSAweDBCQURCRUVGDQo+ ID4gKyNkZWZpbmUgUlRLX01BR0lDX05VTUJFUiAgICAgIDB4MEJBREJBREJBREJBREJBRHVMTA0K PiA+ICtzdGF0aWMgdm9pZCBydGFzZV91bm1hcF90eF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYs IHUzMiBsZW4sIHR4X2Rlc2MNCj4gKmRlc2MpDQo+ID4gK3sNCj4gPiArICAgICBkbWFfdW5tYXBf c2luZ2xlKCZwZGV2LT5kZXYsIGxlNjRfdG9fY3B1KGRlc2MtPmFkZHIpLCBsZW4sDQo+IERNQV9U T19ERVZJQ0UpOw0KPiA+ICsgICAgIGRlc2MtPm9wdHMxID0gY3B1X3RvX2xlMzIoUlRLX09QVFMx X0RFQlVHX1ZBTFVFKTsNCj4gPiArICAgICBkZXNjLT5vcHRzMiA9IDB4MDA7DQo+ID4gKyAgICAg ZGVzYy0+YWRkciA9IFJUS19NQUdJQ19OVU1CRVI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHJ0YXNlX3R4X2NsZWFyX3JhbmdlKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCB1MzIg c3RhcnQsIHUzMiBuKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZh dGUgKnRwID0gcmluZy0+aXZlYy0+dHA7DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRl diA9IHRwLT5kZXY7DQo+ID4gKyAgICAgdTMyIGk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9 IDB1OyBpIDwgbjsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICB1MzIgZW50cnkgPSAoc3RhcnQg KyBpKSAlIE5VTV9ERVNDOw0KPiA+ICsgICAgICAgICAgICAgdTMyIGxlbiA9IHJpbmctPm1pcy5s ZW5bZW50cnldOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmIChsZW4gIT0gMHUpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJpbmctPnNrYnVm ZltlbnRyeV07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGFzZV91bm1hcF90 eF9za2IodHAtPnBkZXYsIGxlbiwgcmluZy0+ZGVzYyArDQo+IChzaXplb2YodHhfZGVzYykgKiBl bnRyeSkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByaW5nLT5taXMubGVuW2VudHJ5XSA9 IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChza2IpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPnNrYnVmZltlbnRyeV0gPSBOVUxMOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAg fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHJ0YXNlX3R4X2NsZWFyKHN0cnVjdCBydGFzZV9w cml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9yaW5nICpyaW5nOw0K PiA+ICsgICAgIHUxNiBpOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IHRwLT5m dW5jX3R4X3F1ZXVlX251bTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICByaW5nID0gJnRwLT50 eF9yaW5nW2ldOw0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfdHhfY2xlYXJfcmFuZ2UocmluZywg cmluZy0+ZGlydHlfaWR4LCBOVU1fREVTQyk7DQo+ID4gKyAgICAgICAgICAgICByaW5nLT5jdXJf aWR4ID0gMDsNCj4gPiArICAgICAgICAgICAgIHJpbmctPmRpcnR5X2lkeCA9IDA7DQo+ID4gKyAg ICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV93YWl0X2Zvcl9xdWll c2NlbmNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIHN0 cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjOw0KPiA+ICsgICAgIHUzMiBpOw0KPiA+ICsNCj4g PiArICAgICBmb3IgKGkgPSAwOyBpIDwgdHAtPmludF9udW1zOyBpKyspIHsNCj4gPiArICAgICAg ICAgICAgIGl2ZWMgPSAmdHAtPmludF92ZWN0b3JbaV07DQo+ID4gKyAgICAgICAgICAgICBzeW5j aHJvbml6ZV9pcnEoaXZlYy0+aXJxKTsNCj4gPiArICAgICAgICAgICAgIC8qIFdhaXQgZm9yIGFu eSBwZW5kaW5nIE5BUEkgdGFzayB0byBjb21wbGV0ZSAqLw0KPiA+ICsgICAgICAgICAgICAgbmFw aV9kaXNhYmxlKCZpdmVjLT5uYXBpKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJ0 YXNlX2lycV9tYXNrX2FuZF9hY2sodHApOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwOyBp IDwgdHAtPmludF9udW1zOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAtPmlu dF92ZWN0b3JbaV07DQo+ID4gKyAgICAgICAgICAgICBuYXBpX2VuYWJsZSgmaXZlYy0+bmFwaSk7 DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9zd19y ZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0 YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICB1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiA+ICsNCj4gPiArICAgICBuZXRkZXZfaW5mbyhkZXYsICIlcyBpcyB0cmln Z2VyZWQuIiwgX19mdW5jX18pOw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9j aywgZmxhZ3MpOw0KPiA+ICsgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsNCj4gPiArICAgICBu ZXRpZl9jYXJyaWVyX29mZihkZXYpOw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0Zf U1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2lycV9tYXNr X2FuZF9hY2sodHApOw0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfZnVuY19kaXNhYmxlKHRwKTsN Cj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfaHdfcmVzZXQoZGV2 KTsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxv Y2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgLyogTGV0J3Mgd2FpdCBhIGJpdCB3aGlsZSBh bnkgKGFzeW5jKSBpcnEgbGFuZHMgb24gKi8NCj4gPiArICAgICBydGFzZV93YWl0X2Zvcl9xdWll c2NlbmNlKGRldik7DQo+ID4gKyAgICAgcnRhc2VfdHhfY2xlYXIodHApOw0KPiA+ICsgICAgIHJ0 YXNlX3J4X2NsZWFyKHRwKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJ0YXNlX2luaXRfcmluZyhk ZXYpICE9IDApDQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfYWxlcnQoZGV2LCAidW5hYmxlIHRv IGluaXQgcmluZ1xuIik7DQo+ID4gKw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0Zf U1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2Z1bmNfZW5h YmxlKHRwKTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2VuYWJsZV9od19pbnRlcnJ1cHQodHAp Ow0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19jb25maWco ZGV2KTsNCj4gPiArICAgICAgICAgICAgIC8qIGFsd2F5cyBsaW5rLCBzbyBzdGFydCB0byB0cmFu c21pdCAmIHJlY2VpdmUgKi8NCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2h3X3N0YXJ0KGRldik7 DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG5ldGlmX2NhcnJpZXJfb24oZGV2KTsNCj4gPiArICAg ICBuZXRpZl93YWtlX3F1ZXVlKGRldik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHJ0YXNlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHR4 cXVldWUpDQo+ID4gK3sNCj4gPiArICAgICBydGFzZV9zd19yZXNldChkZXYpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgczMyIHJ0YXNlX3htaXRfZnJhZ3Moc3RydWN0IHJ0YXNlX3Jpbmcg KnJpbmcsIHN0cnVjdCBza19idWZmICpza2IsIHUzMg0KPiBvcHRzMSwgdTMyIG9wdHMyKQ0KPiA+ ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqaW5mbyA9IHNrYl9z aGluZm8oc2tiKTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBy aW5nLT5pdmVjLT50cDsNCj4gPiArICAgICBjb25zdCB1OCBucl9mcmFncyA9IGluZm8tPm5yX2Zy YWdzOw0KPiA+ICsgICAgIHUzMiBjdXJfZnJhZywgZW50cnk7DQo+ID4gKyAgICAgdHhfZGVzYyAq dHhkID0gTlVMTDsNCj4gPiArICAgICB1NjQgcGt0X2xlbl9jbnQgPSAwOw0KPiA+ICsgICAgIHMz MiByYyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGVudHJ5ID0gcmluZy0+Y3VyX2lkeDsNCj4gPiAr ICAgICBmb3IgKGN1cl9mcmFnID0gMDsgY3VyX2ZyYWcgPCBucl9mcmFnczsgY3VyX2ZyYWcrKykg ew0KPiA+ICsgICAgICAgICAgICAgY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZyA9ICZpbmZvLT5mcmFn c1tjdXJfZnJhZ107DQo+ID4gKyAgICAgICAgICAgICBkbWFfYWRkcl90IG1hcHBpbmc7DQo+ID4g KyAgICAgICAgICAgICB1MzIgc3RhdHVzLCBsZW47DQo+ID4gKyAgICAgICAgICAgICB2b2lkICph ZGRyOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGVudHJ5ID0gKGVudHJ5ICsgMXUpICUgTlVN X0RFU0M7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgdHhkID0gcmluZy0+ZGVzYyArIChzaXpl b2YodHhfZGVzYykgKiBlbnRyeSk7DQo+ID4gKyAgICAgICAgICAgICBsZW4gPSBza2JfZnJhZ19z aXplKGZyYWcpOw0KPiA+ICsgICAgICAgICAgICAgYWRkciA9IHNrYl9mcmFnX2FkZHJlc3MoZnJh Zyk7DQo+ID4gKyAgICAgICAgICAgICBtYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoJnRwLT5wZGV2 LT5kZXYsIGFkZHIsIGxlbiwNCj4gRE1BX1RPX0RFVklDRSk7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKCZ0cC0+cGRldi0+ZGV2LA0KPiBt YXBwaW5nKSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KG5ldF9y YXRlbGltaXQoKSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfZXJy KHRwLCBkcnYsIHRwLT5kZXYsICJGYWlsZWQgdG8NCj4gbWFwIFRYIGZyYWdtZW50cyBETUEhXG4i KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsNCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAoKChlbnRyeSArIDF1 KSAlIE5VTV9ERVNDKSA9PSAwdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0g KG9wdHMxIHwgbGVuIHwgUklOR19FTkQpOw0KPiA+ICsgICAgICAgICAgICAgZWxzZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBvcHRzMSB8IGxlbjsNCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICBpZiAoY3VyX2ZyYWcgPT0gKG5yX2ZyYWdzIC0gMXUpKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJpbmctPnNrYnVmZltlbnRyeV0gPSBza2I7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHN0YXR1cyB8PSBUWF9MQVNUX0ZSQUc7DQo+ID4gKyAgICAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgdHhkLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwcGlu Zyk7DQo+ID4gKyAgICAgICAgICAgICByaW5nLT5taXMubGVuW2VudHJ5XSA9IGxlbjsNCj4gPiAr ICAgICAgICAgICAgIHR4ZC0+b3B0czIgPSBjcHVfdG9fbGUzMihvcHRzMik7DQo+ID4gKyAgICAg ICAgICAgICAvKiBtYWtlIHN1cmUgdGhlIG9wZXJhdGluZyBmaWVsZHMgaGF2ZSBiZWVuIHVwZGF0 ZWQgKi8NCj4gPiArICAgICAgICAgICAgIHdtYigpOw0KPiA+ICsgICAgICAgICAgICAgdHhkLT5v cHRzMSA9IGNwdV90b19sZTMyKHN0YXR1cyk7DQo+ID4gKyAgICAgICAgICAgICBwa3RfbGVuX2Nu dCArPSBsZW47DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByYyA9IGN1cl9mcmFnOw0K PiA+ICsgICAgIGdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArZXJyX291dDoNCj4gPiArICAgICBydGFz ZV90eF9jbGVhcl9yYW5nZShyaW5nLCByaW5nLT5jdXJfaWR4ICsgMXUsIGN1cl9mcmFnKTsNCj4g PiArICAgICByYyA9IC1FSU87DQo+ID4gK291dDoNCj4gPiArICAgICByZXR1cm4gcmM7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgX19iZTE2IGdldF9wcm90b2NvbChjb25zdCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KPiA+ICt7DQo+ID4gKyAgICAgX19iZTE2IHByb3RvY29sOw0K PiA+ICsNCj4gPiArICAgICBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkp DQo+ID4gKyAgICAgICAgICAgICBwcm90b2NvbCA9IHZsYW5fZXRoX2hkcihza2IpLT5oX3ZsYW5f ZW5jYXBzdWxhdGVkX3Byb3RvOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHBy b3RvY29sID0gc2tiLT5wcm90b2NvbDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHByb3RvY29s Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHUzMiBydGFzZV90eF9jc3VtKHN0 cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlDQo+ICpkZXYpDQo+ID4g K3sNCj4gPiArICAgICB1MzIgY3N1bV9jbWQgPSAwOw0KPiA+ICsgICAgIHU4IGlwX3Byb3RvY29s Ow0KPiA+ICsNCj4gPiArICAgICBzd2l0Y2ggKHZsYW5fZ2V0X3Byb3RvY29sKHNrYikpIHsNCj4g PiArICAgICBjYXNlIGh0b25zKEVUSF9QX0lQKToNCj4gPiArICAgICAgICAgICAgIGNzdW1fY21k ID0gVFhfSVBDU19DOw0KPiA+ICsgICAgICAgICAgICAgaXBfcHJvdG9jb2wgPSBpcF9oZHIoc2ti KS0+cHJvdG9jb2w7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAg Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToNCj4gPiArICAgICAgICAgICAgIGNzdW1fY21kID0gVFhf SVBWNkZfQzsNCj4gPiArICAgICAgICAgICAgIGlwX3Byb3RvY29sID0gaXB2Nl9oZHIoc2tiKS0+ bmV4dGhkcjsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICBkZWZh dWx0Og0KPiA+ICsgICAgICAgICAgICAgaXBfcHJvdG9jb2wgPSBJUFBST1RPX1JBVzsNCj4gPiAr ICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKGlw X3Byb3RvY29sID09IElQUFJPVE9fVENQKQ0KPiA+ICsgICAgICAgICAgICAgY3N1bV9jbWQgfD0g VFhfVENQQ1NfQzsNCj4gPiArICAgICBlbHNlIGlmIChpcF9wcm90b2NvbCA9PSBJUFBST1RPX1VE UCkNCj4gPiArICAgICAgICAgICAgIGNzdW1fY21kIHw9IFRYX1VEUENTX0M7DQo+ID4gKyAgICAg ZWxzZQ0KPiA+ICsgICAgICAgICAgICAgV0FSTl9PTl9PTkNFKDEpOw0KPiA+ICsNCj4gPiArICAg ICBjc3VtX2NtZCB8PSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpIDw8IFRDUEhPX1NISUZUOw0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gY3N1bV9jbWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB1bnNpZ25lZCBpbnQgcnRhc2VfdHhfYXZhaWwoc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcp DQo+ID4gK3sNCj4gPiArICAgICByZXR1cm4gUkVBRF9PTkNFKHJpbmctPmRpcnR5X2lkeCkgKyBO VU1fREVTQyAtDQo+IFJFQURfT05DRShyaW5nLT5jdXJfaWR4KSAtIDE7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBuZXRkZXZfdHhfdCBydGFzZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlDQo+ICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7DQo+ID4gKyAgICAg c3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICB2 b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIHFfaWR4 LCBlbnRyeSwgbGVuLCBvcHRzMSwgb3B0czI7DQo+ID4gKyAgICAgdTMyIG1zcyA9IHNoaW5mby0+ Z3NvX3NpemU7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmc7DQo+ID4gKyAgICAg dW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArICAgICBkbWFfYWRkcl90IG1hcHBpbmc7DQo+ID4g KyAgICAgdHhfZGVzYyAqdHhkOw0KPiA+ICsgICAgIHMzMiBmcmFnczsNCj4gPiArDQo+ID4gKyAg ICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsgICAg IC8qIG11bHRpcXVldWVzICovDQo+ID4gKyAgICAgcV9pZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBp bmcoc2tiKTsNCj4gPiArICAgICByaW5nID0gJnRwLT50eF9yaW5nW3FfaWR4XTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKHVubGlrZWx5KHJ0YXNlX3R4X2F2YWlsKHJpbmcpIDwgc2hpbmZvLT5ucl9m cmFncykpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChuZXRfcmF0ZWxpbWl0KCkpDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIG5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hl biBxdWV1ZQ0KPiBhd2FrZSFcbiIpOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfc3RvcDsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGVudHJ5ID0gcmluZy0+Y3VyX2lkeCAlIE5V TV9ERVNDOw0KPiA+ICsgICAgIHR4ZCA9IHJpbmctPmRlc2MgKyAoc2l6ZW9mKHR4X2Rlc2MpICog ZW50cnkpOw0KPiA+ICsNCj4gPiArICAgICBvcHRzMSA9IERFU0NfT1dOOw0KPiA+ICsgICAgIG9w dHMyID0gcnRhc2VfdHhfdmxhbl90YWcodHAsIHNrYik7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFRD UCBTZWdtZW50YXRpb24gT2ZmbG9hZCAob3IgVENQIExhcmdlIFNlbmQpICovDQo+ID4gKyAgICAg aWYgKG1zcykgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHNoaW5mby0+Z3NvX3R5cGUgJiBTS0Jf R1NPX1RDUFY0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG9wdHMxIHw9IEdJQU5UX1NF TkRfVjQ7DQo+ID4gKyAgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaW5mby0+Z3NvX3R5cGUgJiBT S0JfR1NPX1RDUFY2KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChza2JfY293X2hl YWQoc2tiLCAwKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9k bWFfMDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRjcF92Nl9nc29fY3N1bV9w cmVwKHNrYik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG9wdHMxIHw9IEdJQU5UX1NFTkRf VjY7DQo+ID4gKyAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBXQVJOX09OX09OQ0UoMSk7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAg ICAgICAgICAgb3B0czEgfD0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSA8PCBHVFRDUEhPX1NI SUZUOw0KPiA+ICsgICAgICAgICAgICAgb3B0czIgfD0gbXNzIDw8IDE4Ow0KPiA+ICsgICAgIH0g ZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgew0KPiA+ICsgICAg ICAgICAgICAgb3B0czIgfD0gcnRhc2VfdHhfY3N1bShza2IsIGRldik7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICBmcmFncyA9IHJ0YXNlX3htaXRfZnJhZ3MocmluZywgc2tiLCBvcHRz MSwgb3B0czIpOw0KPiA+ICsgICAgIGlmICh1bmxpa2VseShmcmFncyA8IDApKQ0KPiA+ICsgICAg ICAgICAgICAgZ290byBlcnJfZG1hXzA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChmcmFncykgew0K PiA+ICsgICAgICAgICAgICAgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsNCj4gPiArICAgICAgICAg ICAgIG9wdHMxIHw9IFRYX0ZJUlNUX0ZSQUc7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgIGxlbiA9IHNrYi0+bGVuOw0KPiA+ICsgICAgICAgICAgICAgcmluZy0+c2tidWZm W2VudHJ5XSA9IHNrYjsNCj4gPiArICAgICAgICAgICAgIG9wdHMxIHw9IChUWF9GSVJTVF9GUkFH IHwgVFhfTEFTVF9GUkFHKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmICgoKChl bnRyeSArIDF1KSAlIE5VTV9ERVNDKSA9PSAwdSkpDQo+ID4gKyAgICAgICAgICAgICBvcHRzMSB8 PSAobGVuIHwgUklOR19FTkQpOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIG9w dHMxIHw9IGxlbjsNCj4gPiArDQo+ID4gKyAgICAgbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKCZ0 cC0+cGRldi0+ZGV2LCBza2ItPmRhdGEsIGxlbiwNCj4gRE1BX1RPX0RFVklDRSk7DQo+ID4gKw0K PiA+ICsgICAgIGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcigmdHAtPnBkZXYtPmRldiwg bWFwcGluZykpKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAodW5saWtlbHkobmV0X3JhdGVsaW1p dCgpKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV0aWZfZXJyKHRwLCBkcnYsIGRldiwg IkZhaWxlZCB0byBtYXAgVFgNCj4gRE1BIVxuIik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg Z290byBlcnJfZG1hXzE7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByaW5nLT5taXMu bGVuW2VudHJ5XSA9IGxlbjsNCj4gPiArICAgICB0eGQtPmFkZHIgPSBjcHVfdG9fbGU2NChtYXBw aW5nKTsNCj4gPiArICAgICB0eGQtPm9wdHMyID0gY3B1X3RvX2xlMzIob3B0czIpOw0KPiA+ICsg ICAgIHR4ZC0+b3B0czEgPSBjcHVfdG9fbGUzMihvcHRzMSAmIH5ERVNDX09XTik7DQo+ID4gKyAg ICAgLyogbWFrZSBzdXJlIHRoZSBvcGVyYXRpbmcgZmllbGRzIGhhdmUgYmVlbiB1cGRhdGVkICov DQo+ID4gKyAgICAgd21iKCk7DQo+ID4gKyAgICAgdHhkLT5vcHRzMSA9IGNwdV90b19sZTMyKG9w dHMxKTsNCj4gPiArICAgICBza2JfdHhfdGltZXN0YW1wKHNrYik7DQo+ID4gKw0KPiA+ICsgICAg IC8qIHR4IG5lZWRzIHRvIHNlZSBkZXNjcmlwdG9yIGNoYW5nZXMgYmVmb3JlIHVwZGF0ZWQgY3Vy X2lkeCAqLw0KPiA+ICsgICAgIHNtcF93bWIoKTsNCj4gPiArICAgICBXUklURV9PTkNFKHJpbmct PmN1cl9pZHgsIHJpbmctPmN1cl9pZHggKyBmcmFncyArIDF1KTsNCj4gPiArDQo+ID4gKyAgICAg Lyogc2V0IHBvbGxpbmcgYml0ICovDQo+ID4gKyAgICAgUlRMX1c4KFRQUE9MTCwgQklUKHJpbmct PmluZGV4KSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChydGFzZV90eF9hdmFpbChyaW5nKSA8IE1B WF9TS0JfRlJBR1MpIHsNCj4gPiArICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsN Cj4gPiArICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBjdXJfaWR4IGFuZCBkaXJ0eV9pZHggaGF2 ZSBiZWVuIHVwZGF0ZWQgKi8NCj4gPiArICAgICAgICAgICAgIHNtcF9ybWIoKTsNCj4gPiArICAg ICAgICAgICAgIGlmIChydGFzZV90eF9hdmFpbChyaW5nKSA+PSBNQVhfU0tCX0ZSQUdTKQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7DQo+ID4gKyAgICAg fQ0KPiA+ICsNCj4gPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxh Z3MpOw0KPiA+ICsgICAgIHJldHVybiBORVRERVZfVFhfT0s7DQo+ID4gKw0KPiA+ICtlcnJfZG1h XzE6DQo+ID4gKyAgICAgcmluZy0+c2tidWZmW2VudHJ5XSA9IE5VTEw7DQo+ID4gKyAgICAgcnRh c2VfdHhfY2xlYXJfcmFuZ2UocmluZywgcmluZy0+Y3VyX2lkeCArIDF1LCBmcmFncyk7DQo+ID4g Kw0KPiA+ICtlcnJfZG1hXzA6DQo+ID4gKyAgICAgZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7DQo+ ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsNCj4gPiAr ICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KPiA+ICsgICAgIHJldHVybiBORVRERVZfVFhf T0s7DQo+ID4gKw0KPiA+ICtlcnJfc3RvcDoNCj4gPiArICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRl dik7DQo+ID4gKyAgICAgZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7DQo+ID4gKyAgICAgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArICAgICByZXR1cm4gTkVU REVWX1RYX0JVU1k7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzMzIgdHhfaGFuZGxlcihz dHJ1Y3QgcnRhc2VfcmluZyAqcmluZywgczMyIGJ1ZGdldCkNCj4gPiArew0KPiA+ICsgICAgIGNv bnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IHJpbmctPml2ZWMtPnRwOw0KPiA+ICsgICAg IHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAgICBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2ID0gdHAtPmRldjsNCj4gPiArICAgICBzMzIgd29ya2RvbmUgPSAwOw0K PiA+ICsgICAgIHUzMiBkaXJ0eV90eDsNCj4gPiArICAgICB1MzIgdHhfbGVmdDsNCj4gPiArDQo+ ID4gKyAgICAgZGlydHlfdHggPSByaW5nLT5kaXJ0eV9pZHg7DQo+ID4gKyAgICAgLyogbWFrZSBz dXJlIHRoZSBpbmRleCBoYXMgYmVlbiB1cGRhdGVkICovDQo+ID4gKyAgICAgc21wX3JtYigpOw0K PiA+ICsgICAgIHR4X2xlZnQgPSByaW5nLT5jdXJfaWR4IC0gZGlydHlfdHg7DQo+ID4gKw0KPiA+ ICsgICAgIHdoaWxlICh0eF9sZWZ0ID4gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHUzMiBlbnRy eSA9IGRpcnR5X3R4ICUgTlVNX0RFU0M7DQo+ID4gKyAgICAgICAgICAgICB0eF9kZXNjICpkZXNj ID0gcmluZy0+ZGVzYyArIChzaXplb2YodHhfZGVzYykgKiBlbnRyeSk7DQo+ID4gKyAgICAgICAg ICAgICB1MzIgbGVuID0gcmluZy0+bWlzLmxlbltlbnRyeV07DQo+ID4gKyAgICAgICAgICAgICB1 MzIgc3RhdHVzOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBkaXNjcmlw dG9yIGhhcyBiZWVuIHVwZGF0ZWQgKi8NCj4gPiArICAgICAgICAgICAgIHJtYigpOw0KPiA+ICsg ICAgICAgICAgICAgc3RhdHVzID0gbGUzMl90b19jcHUoZGVzYy0+b3B0czEpOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgREVTQ19PV04pICE9IDB1KSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHR4X2xlZnQgPSAwOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsNCj4gPiArICAgICAgICAgICAgIGRldi0+c3Rh dHMudHhfcGFja2V0cysrOw0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfdW5tYXBfdHhfc2tiKHRw LT5wZGV2LCBsZW4sIGRlc2MpOw0KPiA+ICsgICAgICAgICAgICAgcmluZy0+bWlzLmxlbltlbnRy eV0gPSAwOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJpbmctPnNrYnVmZltlbnRyeV0pIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgZGV2X2NvbnN1bWVfc2tiX2FueShyaW5nLT5za2J1ZmZb ZW50cnldKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmluZy0+c2tidWZmW2VudHJ5XSA9 IE5VTEw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBkaXJ0eV90eCsr Ow0KPiA+ICsgICAgICAgICAgICAgdHhfbGVmdC0tOw0KPiA+ICsgICAgICAgICAgICAgd29ya2Rv bmUrKzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAod29ya2RvbmUgPT0gYnVkZ2V0KSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHR4X2xlZnQgPSAwOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIGlmIChyaW5nLT5kaXJ0eV9pZHggIT0gZGlydHlfdHgpIHsNCj4gPiAr ICAgICAgICAgICAgIHJpbmctPmRpcnR5X2lkeCA9IGRpcnR5X3R4Ow0KPiA+ICsgICAgICAgICAg ICAgLyogbWFrZSBzdXJlIHRoZSBpbmRleCBoYXMgYmVlbiB1cGRhdGVkICovDQo+ID4gKyAgICAg ICAgICAgICBzbXBfd21iKCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKG5ldGlmX3F1 ZXVlX3N0b3BwZWQoZGV2KSAmJiAocnRhc2VfdHhfYXZhaWwocmluZykgPj0NCj4gTUFYX1NLQl9G UkFHUykpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsN Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgdGhlIGluZGV4IGhhcyBiZWVu IHVwZGF0ZWQgKi8NCj4gPiArICAgICAgICAgICAgIHNtcF9ybWIoKTsNCj4gPiArICAgICAgICAg ICAgIGlmIChyaW5nLT5jdXJfaWR4ICE9IGRpcnR5X3R4KQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBSVExfVzgoVFBQT0xMLCBCSVQocmluZy0+aW5kZXgpKTsNCj4gPiArICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiB3b3JrZG9uZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSBzMzIgcnRhc2VfZnJhZ21lbnRlZF9mcmFtZSh1MzIgc3RhdHVzKQ0KPiA+ICt7DQo+ ID4gKyAgICAgczMyIHJldDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKChzdGF0dXMgJiAoUlhfRklS U1RfRlJBRyB8IFJYX0xBU1RfRlJBRykpICE9IChSWF9GSVJTVF9GUkFHIHwNCj4gUlhfTEFTVF9G UkFHKSkNCj4gPiArICAgICAgICAgICAgIHJldCA9IDE7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsg ICAgICAgICAgICAgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHJ0YXNlX3J4X2NzdW0oY29uc3Qgc3Ry dWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCBzdHJ1Y3QNCj4gc2tfYnVmZiAqc2tiLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByeF9kZXNjICpkZXNjKQ0KPiA+ICt7DQo+ ID4gKyAgICAgdTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy0+ZGVzY19zdGF0dXMub3B0czIp Ow0KPiA+ICsNCj4gPiArICAgICAvKiByeCBjc3VtIG9mZmxvYWQgKi8NCj4gPiArICAgICBpZiAo KCgob3B0czIgJiBSWF9WNEYpICE9IDB1KSAmJiAoKG9wdHMyICYgUlhfSVBGKSA9PSAwdSkpIHx8 ICgob3B0czINCj4gJiBSWF9WNkYpICE9IDB1KSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKCgo KG9wdHMyICYgUlhfVENQVCkgIT0gMHUpICYmICgob3B0czIgJiBSWF9UQ1BGKSA9PQ0KPiAwdSkp DQo+ID4gKyAgICAgICAgICAgICAgICAgfHwgKCgob3B0czIgJiBSWF9VRFBUKSAhPSAwdSkgJiYg KChvcHRzMiAmIFJYX1VEUEYpDQo+ID09IDB1KSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsNCj4gPiArICAgICAgICAg ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHNrYi0+aXBfc3VtbWVkID0g Q0hFQ0tTVU1fTk9ORTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOw0KPiA+ICsg ICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBzMzIgcnRhc2VfdHJ5X3J4 X2NvcHkoY29uc3Qgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVjdA0KPiBza19idWZmICoq cF9za19idWZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGt0 X3NpemUsIHJ4X2Rlc2MgKmRlc2MsIHUzMg0KPiByeF9idWZfc3opDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9IHJpbmctPml2ZWM7DQo+ID4gKyAgICAg czMyIHJldCA9IC0xOw0KPiA+ICsNCj4gPiArICAgICBpZiAocGt0X3NpemUgPCByeF9jb3B5YnJl YWspIHsNCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2I7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgc2tiID0gUlRMX0FMTE9DX1NLQl9JTlRSKGl2ZWMtPm5hcGksIChwa3Rf c2l6ZSArDQo+IFJUS19SWF9BTElHTikpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHNrYikgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqcF9za19idWZmX2RhdGE7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBwX3NrX2J1ZmZfZGF0YSA9IHBfc2tfYnVmZlsw XS0+ZGF0YTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUoc2tiLCBSVEtf UlhfQUxJR04pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcmVmZXRjaChwX3NrX2J1ZmZf ZGF0YSAtIFJUS19SWF9BTElHTik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG1lbWNweShz a2ItPmRhdGEsIHBfc2tfYnVmZl9kYXRhLCBwa3Rfc2l6ZSk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICpwX3NrX2J1ZmYgPSBza2I7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNl X21hcmtfdG9fYXNpYyhkZXNjLCByeF9idWZfc3opOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICByZXQgPSAwOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArICAgICBy ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRhc2Vf cnhfc2tiKGNvbnN0IHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZg0KPiAq c2tiKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX2ludF92ZWN0b3IgKml2ZWMgPSBy aW5nLT5pdmVjOw0KPiA+ICsNCj4gPiArICAgICBuYXBpX2dyb19yZWNlaXZlKCZpdmVjLT5uYXBp LCBza2IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgczMyIHJ4X2hhbmRsZXIoc3RydWN0 IHJ0YXNlX3JpbmcgKnJpbmcsIHMzMiBidWRnZXQpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSByaW5nLT5pdmVjLT50cDsNCj4gPiArICAgICB1MzIg cGt0X3NpemUsIGN1cl9yeCwgZGVsdGEsIGVudHJ5LCBzdGF0dXM7DQo+ID4gKyAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IHRwLT5kZXY7DQo+ID4gKyAgICAgc3RydWN0IHNrX2J1ZmYgKnNr YjsNCj4gPiArICAgICBzMzIgd29ya2RvbmUgPSAwOw0KPiA+ICsgICAgIHJ4X2Rlc2MgKmRlc2M7 DQo+ID4gKw0KPiA+ICsgICAgIGlmICghcmluZy0+ZGVzYykNCj4gPiArICAgICAgICAgICAgIGdv dG8gcnhfb3V0Ow0KPiA+ICsNCj4gPiArICAgICBjdXJfcnggPSByaW5nLT5jdXJfaWR4Ow0KPiA+ ICsgICAgIGVudHJ5ID0gY3VyX3J4ICUgTlVNX0RFU0M7DQo+ID4gKyAgICAgZGVzYyA9IHJpbmct PmRlc2MgKyAoc2l6ZW9mKHJ4X2Rlc2MpICogZW50cnkpOw0KPiA+ICsNCj4gPiArICAgICBkbyB7 DQo+ID4gKyAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgZGlzY3JpcHRvciBoYXMgYmVlbiB1cGRh dGVkICovDQo+ID4gKyAgICAgICAgICAgICBybWIoKTsNCj4gPiArICAgICAgICAgICAgIHN0YXR1 cyA9IGxlMzJfdG9fY3B1KGRlc2MtPmRlc2Nfc3RhdHVzLm9wdHMxKTsNCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICBpZiAoc3RhdHVzICYgREVTQ19PV04pDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICh1bmxpa2VseShzdGF0dXMg JiBSWF9SRVMpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRfcmF0ZWxpbWl0 KCkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X3dhcm4oZGV2LCAi UnggRVJST1IuIHN0YXR1cyA9DQo+ICUwOHhcbiIsIHN0YXR1cyk7DQo+ID4gKw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIChSWF9SV1QgfCBSWF9SVU5UKSkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMr KzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBSWF9DUkMp DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5zdGF0cy5yeF9jcmNfZXJy b3JzKys7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoZGV2LT5mZWF0dXJl cyAmIE5FVElGX0ZfUlhBTEwpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBwcm9jZXNzX3BrdDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNlX21h cmtfdG9fYXNpYyhkZXNjLCB0cC0+cnhfYnVmX3N6KTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgZ290byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICtwcm9jZXNzX3Br dDoNCj4gPiArICAgICAgICAgICAgIHBrdF9zaXplID0gc3RhdHVzICYgR0VOTUFTSygxMywgMCk7 DQo+ID4gKyAgICAgICAgICAgICBpZiAobGlrZWx5KCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0Zf UlhGQ1MpKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcGt0X3NpemUgLT0gRVRIX0ZDU19M RU47DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgLyogVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBw b3J0IGluY29taW5nIGZyYWdtZW50ZWQNCj4gPiArICAgICAgICAgICAgICAqIGZyYW1lcy4gVGhl eSBhcmUgc2VlbiBhcyBhIHN5bXB0b20gb2Ygb3Zlci1tdHUNCj4gPiArICAgICAgICAgICAgICAq IHNpemVkIGZyYW1lcy4NCj4gPiArICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAg aWYgKHVubGlrZWx5KHJ0YXNlX2ZyYWdtZW50ZWRfZnJhbWUoc3RhdHVzKSkpIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBydGFzZV9tYXJrX3RvX2FzaWMoZGVzYywgdHAtPnJ4X2J1Zl9zeik7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgICAgICAgIHNrYiA9IHJpbmctPnNrYnVmZltlbnRyeV07DQo+ID4g KyAgICAgICAgICAgICBkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmdHAtPnBkZXYtPmRldiwNCj4g cmluZy0+bWlzLmRhdGFfcGh5X2FkZHJbZW50cnldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHAtPnJ4X2J1Zl9zeiwNCj4gRE1BX0ZST01fREVWSUNFKTsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICBpZiAocnRhc2VfdHJ5X3J4X2NvcHkocmluZywgJnNrYiwg cGt0X3NpemUsIGRlc2MsDQo+IHRwLT5yeF9idWZfc3opICE9IDApIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgZG1hX3VubWFwX3NpbmdsZSgmdHAtPnBkZXYtPmRldiwNCj4gcmluZy0+bWlz LmRhdGFfcGh5X2FkZHJbZW50cnldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRwLT5yeF9idWZfc3osDQo+IERNQV9GUk9NX0RFVklDRSk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJpbmctPnNrYnVmZltlbnRyeV0gPSBOVUxMOw0KPiA+ICsgICAgICAg ICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZG1hX3N5bmNfc2luZ2xl X2Zvcl9kZXZpY2UoJnRwLT5wZGV2LT5kZXYsDQo+IHJpbmctPm1pcy5kYXRhX3BoeV9hZGRyW2Vu dHJ5XSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHAtPnJ4X2J1Zl9zeiwNCj4gRE1BX0ZST01fREVWSUNFKTsNCj4gPiArICAgICAgICAgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9G X1JYQ1NVTSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNlX3J4X2NzdW0o dHAsIHNrYiwgZGVzYyk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgc2tiLT5kZXYgPSBkZXY7 DQo+ID4gKyAgICAgICAgICAgICBza2JfcHV0KHNrYiwgcGt0X3NpemUpOw0KPiA+ICsgICAgICAg ICAgICAgc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICBpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLm11bHRpY2FzdCsrOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgIGlmIChydGFzZV9yeF92bGFuX3NrYihkZXNjLCBza2IpIDwgMCkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcnRhc2Vfcnhfc2tiKHJpbmcsIHNrYik7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsNCj4g PiArICAgICAgICAgICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOw0KPiA+ICtvdXQ6DQo+ID4g KyAgICAgICAgICAgICB3b3JrZG9uZSsrOw0KPiA+ICsgICAgICAgICAgICAgY3VyX3J4Kys7DQo+ ID4gKyAgICAgICAgICAgICBlbnRyeSA9IGN1cl9yeCAlIE5VTV9ERVNDOw0KPiA+ICsgICAgICAg ICAgICAgZGVzYyA9IHJpbmctPmRlc2MgKyAoc2l6ZW9mKHJ4X2Rlc2MpICogZW50cnkpOw0KPiA+ ICsgICAgICAgICAgICAgcHJlZmV0Y2goZGVzYyk7DQo+ID4gKw0KPiA+ICsgICAgIH0gd2hpbGUg KHdvcmtkb25lICE9IGJ1ZGdldCk7DQo+ID4gKw0KPiA+ICsgICAgIHJpbmctPmN1cl9pZHggPSBj dXJfcng7DQo+ID4gKyAgICAgZGVsdGEgPSBydGFzZV9yeF9yaW5nX2ZpbGwocmluZywgcmluZy0+ ZGlydHlfaWR4LCByaW5nLT5jdXJfaWR4LCAxKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKChkZWx0 YSA9PSAwdSkgJiYgKHdvcmtkb25lICE9IDApKQ0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2lu Zm8oZGV2LCAiJXM6IG5vIFJ4IGJ1ZmZlciBhbGxvY2F0ZWRcbiIsDQo+IGRldi0+bmFtZSk7DQo+ ID4gKw0KPiA+ICsgICAgIHJpbmctPmRpcnR5X2lkeCArPSBkZWx0YTsNCj4gPiArDQo+ID4gKyAg ICAgLyogRklYTUU6IHVudGlsIHRoZXJlIGlzIHBlcmlvZGljIHRpbWVyIHRvIHRyeSBhbmQgcmVm aWxsIHRoZSByaW5nLA0KPiA+ICsgICAgICAqIGEgdGVtcG9yYXJ5IHNob3J0YWdlIG1heSBkZWZp bml0ZWx5IGtpbGwgdGhlIFJ4IHByb2Nlc3MuDQo+ID4gKyAgICAgICogLSBkaXNhYmxlIHRoZSBh c2ljIHRvIHRyeSBhbmQgYXZvaWQgYW4gb3ZlcmZsb3cgYW5kIGtpY2sgaXQgYWdhaW4NCj4gPiAr ICAgICAgKiAgIGFmdGVyIHJlZmlsbCA/DQo+ID4gKyAgICAgICogLSBob3cgZG8gb3RoZXJzIGRy aXZlciBoYW5kbGUgdGhpcyBjb25kaXRpb24gKFVoIG9oLi4uKS4NCj4gPiArICAgICAgKi8NCj4g PiArICAgICBpZiAoKChyaW5nLT5kaXJ0eV9pZHggKyBOVU1fREVTQykgPT0gcmluZy0+Y3VyX2lk eCkpDQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfZW1lcmcoZGV2LCAiJXM6IFJ4IGJ1ZmZlcnMg ZXhoYXVzdGVkXG4iLA0KPiBkZXYtPm5hbWUpOw0KPiA+ICsNCj4gPiArcnhfb3V0Og0KPiA+ICsg ICAgIHJldHVybiB3b3JrZG9uZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogIFRoZSBpbnRlcnJ1 cHQgaGFuZGxlciBkb2VzIFJYUTAgYW5kIFRYUTAsIFRYUTR+NyBpbnRlcnJ1dHAgc3RhdHVzLg0K PiA+ICsgKi8NCj4gPiArc3RhdGljIGlycXJldHVybl90IHJ0YXNlX2ludGVycnVwdChpbnQgaXJx LCB2b2lkICpkZXZfaW5zdGFuY2UpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2luc3RhbmNlOw0KPiA+ICsgICAgIHN0 cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgc3Ry dWN0IHJ0YXNlX2ludF92ZWN0b3IgKml2ZWMgPSAmdHAtPmludF92ZWN0b3JbMF07DQo+ID4gKyAg ICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHMzMiBo YW5kbGVkID0gMDsNCj4gPiArICAgICB1MzIgc3RhdHVzOw0KPiA+ICsNCj4gPiArICAgICBkbyB7 DQo+ID4gKyAgICAgICAgICAgICBzdGF0dXMgPSBSVExfUjMyKGl2ZWMtPmlzcl9hZGRyKTsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIE1CWCkgIT0gMHUpDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHF1ZXVlX3dvcmsod29ya19xdWV1ZSwgJnRwLT5tc2dfd29yayk7 DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRMREJHDQo+ID4gKyAgICAgICAgICAgICBpZiAoc3RhdHVz ICYgUkRVKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZXRkZXZfaW5mbyhkZXYsICJQRiBy ZWNlaXZlIFJEVSAhISEhISEhISEiKTsNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgIGhhbmRsZWQgPSAxOw0KPiA+ICsgICAgICAgICAgICAgUlRMX1czMihpdmVj LT5pbXJfYWRkciwgMHgwKTsNCj4gPiArICAgICAgICAgICAgIFJUTF9XMzIoaXZlYy0+aXNyX2Fk ZHIsIChzdGF0dXMgJiB+Rk9WVykpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHN0YXR1cyAm PSB+TUJYOw0KPiA+ICsgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBpdmVjLT5pbXIpICE9IDB1 KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChsaWtlbHkoUlRMX05FVElGX1JYX1ND SEVEVUxFX1BSRVAoZGV2LA0KPiAmaXZlYy0+bmFwaSkpKQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fUlRMX05FVElGX1JYX1NDSEVEVUxFKGRldiwNCj4gJml2ZWMtPm5hcGkp Ow0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg UlRMX1czMihpdmVjLT5pbXJfYWRkciwgKGl2ZWMtPmltciAmIH5NQlgpKTsNCj4gPiArICAgICAg ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgfSB3aGlsZSAoZmFsc2UpOw0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog IFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIFJYUTEmVFhRMSBvciBSWFEyJlRYUTIgb3INCj4g UlhRMyZUWFEzIGludGVycnV0cA0KPiA+ICsgKiAgc3RhdHVzIGFjY29yZGluZyB0byBpbnRlcnJ1 cHQgdmVjdG9yLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlycXJldHVybl90IHJ0YXNlX3FfaW50 ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjID0gKHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yDQo+ ICopZGV2X2luc3RhbmNlOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0 cCA9IGl2ZWMtPnRwOw0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9f YWRkcjsNCj4gPiArICAgICBpbnQgaGFuZGxlZCA9IDA7DQo+ID4gKyAgICAgdTE2IHN0YXR1czsN Cj4gPiArDQo+ID4gKyAgICAgZG8gew0KPiA+ICsgICAgICAgICAgICAgc3RhdHVzID0gUlRMX1Ix NihpdmVjLT5pc3JfYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaGFuZGxlZCA9IDE7 DQo+ID4gKyAgICAgICAgICAgICBSVExfVzE2KGl2ZWMtPmltcl9hZGRyLCAweDApOw0KPiA+ICsg ICAgICAgICAgICAgUlRMX1cxNihpdmVjLT5pc3JfYWRkciwgc3RhdHVzKTsNCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAvKiBkb24ndCBzdXBwb3J0IHdpdGhvdXQgTkFQSSAqLw0KPiA+ICsgICAg ICAgICAgICAgaWYgKGxpa2VseShSVExfTkVUSUZfUlhfU0NIRURVTEVfUFJFUChkZXYsDQo+ICZp dmVjLT5uYXBpKSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIF9fUlRMX05FVElGX1JYX1ND SEVEVUxFKGRldiwgJml2ZWMtPm5hcGkpOw0KPiA+ICsgICAgICAgICAgICAgZWxzZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2LCAiJXM6IGludGVycnVwdCAl MDR4IGluDQo+IHBvbGxcbiIsIGl2ZWMtPm5hbWUsIHN0YXR1cyk7DQo+ID4gKw0KPiA+ICsgICAg IH0gd2hpbGUgKGZhbHNlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIElSUV9SRVRWQUwoaGFu ZGxlZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2VfcG9sbChzdHJ1Y3Qg bmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBz dHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QN Cj4gcnRhc2VfaW50X3ZlY3RvciwgbmFwaSk7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNl X3ByaXZhdGUgKnRwID0gaXZlYy0+dHA7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIg PSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9yaW5nICpyaW5nOw0KPiA+ ICsgICAgIGludCB0b3RhbF93b3JrZG9uZSA9IDA7DQo+ID4gKyAgICAgczMyIGNsZWFuX2ZsYWcg PSAxOw0KPiA+ICsgICAgIHMzMiB3b3JrZG9uZSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGNs YW5nLWZvcm1hdCBvZmYgKi8NCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJpbmcsICZp dmVjLT5yaW5nX2xpc3QsIHJpbmdfZW50cnkpIHsNCj4gPiArICAgICAgICAgICAgIHdvcmtkb25l ID0gcmluZy0+cmluZ19oYW5kbGVyKHJpbmcsIGJ1ZGdldCk7DQo+ID4gKyAgICAgICAgICAgICB0 b3RhbF93b3JrZG9uZSArPSB3b3JrZG9uZTsNCj4gPiArICAgICAgICAgICAgIGlmICh3b3JrZG9u ZSA9PSBidWRnZXQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNsZWFuX2ZsYWcgPSAwOw0K PiA+ICsgICAgIH0NCj4gPiArICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8NCj4gPiArDQo+ID4g KyAgICAgaWYgKGNsZWFuX2ZsYWcgIT0gMCkgew0KPiA+ICsgICAgICAgICAgICAgdG90YWxfd29y a2RvbmUgPSBtaW4odG90YWxfd29ya2RvbmUsIGJ1ZGdldCAtIDEpOw0KPiA+ICsgICAgICAgICAg ICAgaWYgKGxpa2VseShuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgdG90YWxfd29ya2RvbmUpKSkg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoaXZlYy0+aW5kZXggPT0gMHUpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMX1czMihpdmVjLT5pbXJfYWRkciwgaXZl Yy0+aW1yKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJUTF9XMTYoaXZlYy0+aW1yX2FkZHIsIGl2ZWMtPmltcik7DQo+ ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAg IC8qIHN0aWxsIG5lZWQgdG8gcG9sbCAqLw0KPiA+ICsgICAgICAgICAgICAgdG90YWxfd29ya2Rv bmUgPSBidWRnZXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gdG90YWxf d29ya2RvbmU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2Rvd24oc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2 YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFn czsNCj4gPiArICAgICB1MzIgaSA9IDB1Ow0KPiA+ICsNCj4gPiArICAgICBuZXRpZl9zdG9wX3F1 ZXVlKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94 bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi8NCj4gPiArICAgICBzeW5jaHJvbml6ZV9y Y3UoKTsNCj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFn cyk7DQo+ID4gKw0KPiA+ICsgICAgIG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7DQo+ID4gKw0KPiA+ ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfU1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4g PiArICAgICAgICAgICAgIHJ0YXNlX2lycV9tYXNrX2FuZF9hY2sodHApOw0KPiA+ICsgICAgICAg ICAgICAgcnRhc2VfZnVuY19kaXNhYmxlKHRwKTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgICAgICAgcnRhc2VfaHdfcmVzZXQoZGV2KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0K PiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmludF9udW1zOyBpKyspDQo+ID4gKyAgICAg ICAgICAgICBzeW5jaHJvbml6ZV9pcnEodHAtPmludF92ZWN0b3JbaV0uaXJxKTsNCj4gPiArDQo+ ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ ICsgICAgIHJ0YXNlX3R4X2NsZWFyKHRwKTsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2VfcnhfY2xl YXIodHApOw0KPiA+ICsNCj4gPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9j aywgZmxhZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX2Nsb3NlKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJp dmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBwY2lf ZGV2ICpwZGV2ID0gdHAtPnBkZXY7DQo+ID4gKyAgICAgdTMyIGkgPSAwOw0KPiA+ICsNCj4gPiAr ICAgICBydGFzZV9kb3duKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcg JiBTV0ZfTVNJWF9FTkFCTEVEKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgZnJlZV9pcnEo dHAtPmludF92ZWN0b3JbaV0uaXJxLCBkZXYpOw0KPiA+ICsgICAgICAgICAgICAgZm9yIChpID0g MTsgaSA8IHRwLT5pbnRfbnVtczsgaSsrKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBmcmVl X2lycSh0cC0+aW50X3ZlY3RvcltpXS5pcnEsICZ0cC0+aW50X3ZlY3RvcltpXSk7DQo+ID4gKw0K PiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBmcmVlX2lycShwZGV2LT5pcnEs IGRldik7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBydGFzZV9mcmVlX2Rlc2ModHAp Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgcnRhc2Vfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7 DQo+ID4gKw0KPiA+ICsgICAgIGlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsNCj4gPiArICAgICAg ICAgICAgIGlmIChydGFzZV9jbG9zZShkZXYpICE9IDApDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIG5ldGRldl9hbGVydChkZXYsICJ1bmFibGUgdG8gY2xvc2VcbiIpOw0KPiA+ICsgICAgIH0N Cj4gPiArICAgICBydGFzZV9yZXNldF9pbnRlcnJ1cHQocGRldiwgdHApOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQNCj4gKnN0YXRzKQ0KPiA+ICt7DQo+ID4gKyAg ICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4g PiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfY291bnRlcnMgKmNvdW50ZXJzID0gdHAtPnRhbGx5 X3ZhZGRyOw0KPiA+ICsgICAgIGRtYV9hZGRyX3QgcGFkZHIgPSB0cC0+dGFsbHlfcGFkZHI7DQo+ ID4gKw0KPiA+ICsgICAgIGlmIChjb3VudGVycykgew0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2 X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsICZkZXYtPnN0YXRzKTsNCj4gPiArICAgICAgICAgICAg IGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdGF0cywgZGV2LT50c3RhdHMpOw0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgIC8qIEZldGNoIGFkZGl0aW9uYWwgY291bnRlciB2YWx1ZXMgbWlzc2luZyBp biBzdGF0cyBjb2xsZWN0ZWQNCj4gYnkgZHJpdmVyIGZyb20gdGFsbHkNCj4gPiArICAgICAgICAg ICAgICAqIGNvdW50ZXINCj4gPiArICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAg cnRhc2VfZHVtcF90YWxseV9jb3VudGVyKHRwLCBwYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgc3RhdHMtPnR4X2Vycm9ycyA9IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50eF9lcnJvcnMp Ow0KPiA+ICsgICAgICAgICAgICAgc3RhdHMtPmNvbGxpc2lvbnMgPQ0KPiBsZTY0X3RvX2NwdShj b3VudGVycy0+dHhfbXVsdGlfY29sbGlzaW9uKTsNCj4gPiArICAgICAgICAgICAgIHN0YXRzLT50 eF9hYm9ydGVkX2Vycm9ycyA9DQo+IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50eF9hYm9ydGVkKTsN Cj4gPiArICAgICAgICAgICAgIHN0YXRzLT5yeF9taXNzZWRfZXJyb3JzID0NCj4gbGU2NF90b19j cHUoY291bnRlcnMtPnJ4X21pc3NlZCk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBydGFzZV92bGFuX2ZpbHRlcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAsIHU4IGVuYWJsZWQpDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRk ciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2IHRtcCA9IDA7DQo+ID4gKw0KPiA+ICsg ICAgIGlmIChlbmFibGVkID09IDF1KSB7DQo+ID4gKyAgICAgICAgICAgICAvKiBQRkNSICovDQo+ ID4gKyAgICAgICAgICAgICB0bXAgPSBSVExfUjE2KEZDUik7DQo+ID4gKyAgICAgICAgICAgICBp ZiAoKHRtcCAmIEZDUl9WTEFOX0ZUUl9FTikgPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIFJUTF9XMTYoRkNSLCAodG1wIHwgRkNSX1ZMQU5fRlRSX0VOKSk7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgLyogUENQUiAqLw0KPiA+ICsgICAgICAgICAgICAgdG1wID0gUlRMX1IxNihQ Q1BSKTsNCj4gPiArICAgICAgICAgICAgIGlmICgodG1wICYgUENQUl9WTEFOX0ZUUl9FTikgPT0g MHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XMTYoUENQUiwgKHRtcCB8IFBDUFJf VkxBTl9GVFJfRU4pKTsNCj4gPiArDQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg ICAgIC8qIFBGQ1IgKi8NCj4gPiArICAgICAgICAgICAgIHRtcCA9IFJUTF9SMTYoRkNSKTsNCj4g PiArICAgICAgICAgICAgIGlmICgodG1wICYgRkNSX1ZMQU5fRlRSX0VOKSAhPSAwdSkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgUlRMX1cxNihGQ1IsICh0bXAgJiB+RkNSX1ZMQU5fRlRSX0VO KSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgLyogUENQUiAqLw0KPiA+ICsgICAgICAgICAg ICAgdG1wID0gUlRMX1IxNihQQ1BSKTsNCj4gPiArICAgICAgICAgICAgIGlmICgodG1wICYgUENQ Ul9WTEFOX0ZUUl9FTikgPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XMTYo UENQUiwgKHRtcCAmIH5QQ1BSX1ZMQU5fRlRSX0VOKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCBfX2JlMTYgcHJvdG9jb2wsDQo+IHUxNiB2aWQpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAg IHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAgICB1MTYgdG1w X21lbSA9IDA7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKyAgICAgdTE2IGkgPSAwdTsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKGJlMTZfdG9fY3B1KHByb3RvY29sKSAhPSBFVEhfUF84MDIx USkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAg IGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogdmxhbiBmaWx0ZXIg dGFibGUgKi8NCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IFZMQU5fRklMVEVSX0VOVFJZX05V TTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoKHRwLT52bGFuX2ZpbHRlcl9jdHJsICYg QklUKGkpKSA9PSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0cC0+dmxhbl9maWx0 ZXJfY3RybCB8PSBCSVQoaSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRwLT52bGFuX2Zp bHRlcl92aWRbaV0gPSB2aWQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XMzIoKFZM QU5fRU5UUllfMCArIChpICogNHUpKSwgKHZpZCB8DQo+IFZMQU5fRU5UUllfQ0FSRUJJVCkpOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdG1wX21lbSA9IFJUTF9SMTYoKFZMQU5f RU5UUllfTUVNXzAgKw0KPiAoKGkgLyAydSkgKiAydSkpKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgdG1wX21lbSB8PSAoMHgxdSA8PCAoKGkgJSAydSkgKiA4dSkpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBSVExfVzE2KChWTEFOX0VOVFJZX01FTV8wICsgKChpIC8gMnUpICogMnUp KSwNCj4gdG1wX21lbSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKGkgPT0gVkxB Tl9GSUxURVJfRU5UUllfTlVNKSB7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOw0K PiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAvKiBjaGVjayB2bGFuIGZpbHRl ciBlbmFibGVkICovDQo+ID4gKyAgICAgICAgICAgICBydGFzZV92bGFuX2ZpbHRlcih0cCwgMXUp Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICByZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3ZsYW5fcnhfa2lsbF92aWQoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvY29sLA0KPiB1MTYgdmlkKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsN Cj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAg ICAgdTE2IHRtcF9tZW0gPSAwdTsNCj4gPiArICAgICB1MTYgaSA9IDB1Ow0KPiA+ICsgICAgIHMz MiByYyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChiZTE2X3RvX2NwdShwcm90b2NvbCkgIT0g RVRIX1BfODAyMVEpIHsNCj4gPiArICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsNCj4gPiArICAg ICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogdmxh biBmaWx0ZXIgdGFibGUgKi8NCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IFZMQU5fRklMVEVS X0VOVFJZX05VTTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAodHAtPnZsYW5fZmlsdGVy X3ZpZFtpXSA9PSB2aWQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdHAtPnZsYW5fZmls dGVyX2N0cmwgJj0gfkJJVChpKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdHAtPnZsYW5f ZmlsdGVyX3ZpZFtpXSA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XMzIoKFZM QU5fRU5UUllfMCArIChpICogNHUpKSwgMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICB0bXBfbWVtID0gUlRMX1IxNigoVkxBTl9FTlRSWV9NRU1fMCArDQo+ICgoaSAvIDJ1KSAq IDJ1KSkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0bXBfbWVtICY9ICh+KDB4MXUgPDwg KChpICUgMnUpICogOHUpKSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XMTYoKFZM QU5fRU5UUllfTUVNXzAgKyAoKGkgLyAydSkgKiAydSkpLA0KPiB0bXBfbWVtKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAvKiBjaGVjayB2bGFuIGZpbHRlciBlbmFibGVkICovDQo+ID4g KyAgICAgaWYgKHRwLT52bGFuX2ZpbHRlcl9jdHJsID09IDB1KSB7DQo+ID4gKyAgICAgICAgICAg ICAvKiBkaXNhYmxlIHZsYW4gZmlsdGVyICovDQo+ID4gKyAgICAgICAgICAgICBydGFzZV92bGFu X2ZpbHRlcih0cCwgMHUpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAg ICByZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3NldF9o d19jYnMoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCB1MzIgcXVldWUpDQo+ID4gK3sN Cj4gPiArICAgICB1MzIgaWRsZSA9IHRwLT50eF9xb3NbcXVldWVdLmlkbGVzbG9wZSAqIFJUQVNF XzFUX0NMT0NLOw0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRk cjsNCj4gPiArICAgICB1MzIgcmVnViA9IDA7DQo+ID4gKyAgICAgdTMyIGkgPSAwOw0KPiA+ICsN Cj4gPiArICAgICByZWdWID0gaWRsZSAvIFJUQVNFXzFUX1BPV0VSOw0KPiA+ICsgICAgIHJlZ1Yg PDw9IFJUQVNFX0lETEVTTE9QRV9JTlRfU0hJRlQ7DQo+ID4gKyAgICAgaWRsZSAlPSBSVEFTRV8x VF9QT1dFUjsNCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgUlRBU0VfSURMRVNMT1BFX0lOVF9T SElGVDsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBpZGxlICo9IDJ1Ow0KPiA+ICsgICAgICAg ICAgICAgaWYgKChpZGxlIC8gUlRBU0VfMVRfUE9XRVIpID09IDF1KQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICByZWdWIHw9ICgweDF1IDw8IChSVEFTRV9JRExFU0xPUEVfSU5UX1NISUZUIC0N Cj4gaSAtIDF1KSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWRsZSAlPSBSVEFTRV8xVF9Q T1dFUjsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgUlRMX1czMigoVFhRQ1JEVF8wICsgKHF1ZXVl ICogNHUpKSwgcmVnVik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2Vfc2V0 dXBfdGNfY2JzKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgY29uc3Qgc3RydWN0DQo+IHRjX2Ni c19xb3B0X29mZmxvYWQgKnFvcHQpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgcXVldWUgPSBxb3B0 LT5xdWV1ZTsNCj4gPiArDQo+ID4gKyAgICAgLyogcmVjb3JkIHNldHRpbmdzICovDQo+ID4gKyAg ICAgdHAtPnR4X3Fvc1txdWV1ZV0uaGljcmVkaXQgPSBxb3B0LT5oaWNyZWRpdDsNCj4gPiArICAg ICB0cC0+dHhfcW9zW3F1ZXVlXS5sb2NyZWRpdCA9IHFvcHQtPmxvY3JlZGl0Ow0KPiA+ICsgICAg IHRwLT50eF9xb3NbcXVldWVdLmlkbGVzbG9wZSA9IHFvcHQtPmlkbGVzbG9wZTsNCj4gPiArICAg ICB0cC0+dHhfcW9zW3F1ZXVlXS5zZW5kc2xvcGUgPSBxb3B0LT5zZW5kc2xvcGU7DQo+ID4gKw0K PiA+ICsgICAgIC8qIHNldCBoYXJkd2FyZSBjYnMgKi8NCj4gPiArICAgICBydGFzZV9zZXRfaHdf Y2JzKHRwLCBxdWV1ZSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLA0KPiB2b2lkICp0eXBlX2RhdGEpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBzd2l0Y2ggKHR5cGUpIHsNCj4g PiArICAgICBjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoNCj4gPiArICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgIGNhc2UgVENfU0VUVVBfQkxPQ0s6DQo+ID4gKyAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICBjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzoNCj4gPiArICAgICAgICAg ICAgIHJldCA9IHJ0YXNlX3NldHVwX3RjX2Nicyh0cCwgdHlwZV9kYXRhKTsNCj4gPiArICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXQg PSAtRU9QTk9UU1VQUDsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2lmZGVmIENP TkZJR19QTQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV9zdXNwZW5kKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICAgIHN0cnVj dCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFuZXRpZl9ydW5uaW5nKGRldikp DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgbmV0aWZfc3Rv cF9xdWV1ZShkZXYpOw0KPiA+ICsNCj4gPiArICAgICBuZXRpZl9jYXJyaWVyX29mZihkZXYpOw0K PiA+ICsNCj4gPiArICAgICBuZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7DQo+ID4gKw0KPiA+ICsg ICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAg ICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9WX0VOQUJMRUQpICE9IDB1KSB7DQo+ID4gKyAg ICAgICAgICAgICBydGFzZV9pcnFfbWFza19hbmRfYWNrKHRwKTsNCj4gPiArICAgICAgICAgICAg IHJ0YXNlX2Z1bmNfZGlzYWJsZSh0cCk7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAg ICAgICAgIHJ0YXNlX2h3X3Jlc2V0KGRldik7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiAr b3V0Og0KPiA+ICsgICAgIHBjaV9zYXZlX3N0YXRlKHBkZXYpOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV9yZXN1bWUoc3Ry dWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2 YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHBjaV9zZXRfcG93 ZXJfc3RhdGUocGRldiwgUENJX0QwKTsNCj4gPiArICAgICBwY2lfcmVzdG9yZV9zdGF0ZShwZGV2 KTsNCj4gPiArICAgICBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsNCj4gPiArDQo+ ID4gKyAgICAgLyogcmVzdG9yZSBsYXN0IG1vZGlmaWVkIG1hYyBhZGRyZXNzICovDQo+ID4gKyAg ICAgcnRhc2VfcmFyX3NldCh0cCwgZGV2LT5kZXZfYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgIGlm ICghbmV0aWZfcnVubmluZyhkZXYpKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4g Kw0KPiA+ICsgICAgIHJ0YXNlX3dhaXRfZm9yX3F1aWVzY2VuY2UoZGV2KTsNCj4gPiArICAgICBu ZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX3R4X2NsZWFy KHRwKTsNCj4gPiArICAgICBydGFzZV9yeF9jbGVhcih0cCk7DQo+ID4gKw0KPiA+ICsgICAgIGlm IChydGFzZV9pbml0X3JpbmcoZGV2KSAhPSAwKQ0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2Fs ZXJ0KGRldiwgInVuYWJsZSB0byBpbml0IHJpbmdcbiIpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo KHRwLT5zd19mbGFnICYgU1dGX1NSSU9WX0VOQUJMRUQpICE9IDB1KSB7DQo+ID4gKyAgICAgICAg ICAgICBydGFzZV9mdW5jX2VuYWJsZSh0cCk7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9lbmFi bGVfaHdfaW50ZXJydXB0KHRwKTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAg ICAgcnRhc2VfaHdfY29uZmlnKGRldik7DQo+ID4gKyAgICAgICAgICAgICAvKiBhbHdheXMgbGlu aywgc28gc3RhcnQgdG8gdHJhbnNtaXQgJiByZWNlaXZlICovDQo+ID4gKyAgICAgICAgICAgICBy dGFzZV9od19zdGFydChkZXYpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBuZXRpZl9jYXJyaWVy X29uKGRldik7DQo+ID4gKyAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsNCj4gPiAr b3V0Og0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyog Q09ORklHX1BNICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRhc2Vf cGNpX2RyaXZlciA9IHsNCj4gPiArICAgICAubmFtZSA9IEtCVUlMRF9NT0ROQU1FLA0KPiA+ICsg ICAgIC5pZF90YWJsZSA9IHJ0YXNlX3BjaV90YmwsDQo+ID4gKyAgICAgLnByb2JlID0gcnRhc2Vf aW5pdF9vbmUsDQo+ID4gKyAgICAgLnJlbW92ZSA9IHJ0YXNlX3JlbW92ZV9vbmUsDQo+ID4gKyAg ICAgLnNodXRkb3duID0gcnRhc2Vfc2h1dGRvd24sDQo+ID4gKyNpZmRlZiBDT05GSUdfUE0NCj4g PiArICAgICAuc3VzcGVuZCA9IHJ0YXNlX3N1c3BlbmQsDQo+ID4gKyAgICAgLnJlc3VtZSA9IHJ0 YXNlX3Jlc3VtZSwNCj4gPiArI2VuZGlmDQo+ID4gKyNpZmRlZiBDT05GSUdfU1JJT1YNCj4gPiAr ICAgICAuc3Jpb3ZfY29uZmlndXJlID0gcnRhc2VfcGNpX3NyaW92X2NvbmZpZ3VyZSwNCj4gPiAr I2VuZGlmDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9faW5pdCBydGFzZV9pbml0 X21vZHVsZSh2b2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ ICsgICAgIHdvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicnRhc2Vf d29ya19xdWV1ZSIpOw0KPiA+ICsgICAgIGlmICghd29ya19xdWV1ZSkgew0KPiA+ICsgICAgICAg ICAgICAgcmV0ID0gLUVOT01FTTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAg ICAgcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnRhc2VfcGNpX2RyaXZlcik7DQo+ID4gKyAg ICAgICAgICAgICBpZiAocmV0ICE9IDApIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGVz dHJveV93b3JrcXVldWUod29ya19xdWV1ZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBy X2FsZXJ0KCJydGFzZV9wY2lfZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZC4iKTsNCj4gPiArICAgICAg ICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCBydGFzZV9jbGVhbnVwX21vZHVsZSh2 b2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydGFzZV9wY2lf ZHJpdmVyKTsNCj4gPiArICAgICBkZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3F1ZXVlKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArbW9kdWxlX2luaXQocnRhc2VfaW5pdF9tb2R1bGUpOw0KPiA+ICttb2R1 bGVfZXhpdChydGFzZV9jbGVhbnVwX21vZHVsZSk7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2Vfc3Jpb3YuYw0KPiBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2Vfc3Jpb3YuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi40MjBjMTVjZGRiYzMNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFz ZV9zcmlvdi5jDQo+ID4gQEAgLTAsMCArMSwzMTggQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogIENvcHlyaWdodChjKSAyMDIzIFJl YWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0K PiA+ICsgKiAgQXV0aG9yOg0KPiA+ICsgKiAgUmVhbHRlayBBUkQxIHNvZnR3YXJlIHRlYW0NCj4g PiArICovDQo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L25ldGRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUg InJ0YXNlLmgiDQo+ID4gKyNpbmNsdWRlICJydGFzZV9zcmlvdi5oIg0KPiA+ICsNCj4gPg0KPiAr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiArICogIEZ1bmN0aW9uDQo+ID4gKw0KPiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqDQo+ICoqKioqKioqKioqKioqLw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX2FsbG9jYXRl X3ZmX2RhdGEoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCBpbnQgbnVtX3ZmcykNCj4gPiArew0K PiA+ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICB0cC0+dmZfaW5mbyA9IGtj YWxsb2MobnVtX3Zmcywgc2l6ZW9mKHN0cnVjdCB2Zl9pbmZvKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KyAgICAgaWYgKCF0cC0+dmZfaW5mbykNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07 DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgdHAtPm51bV92ZnMgPSBudW1fdmZz Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCBydGFzZV9nZXRfdmZzKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4g PiArew0KPiA+ICsgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7DQo+ID4gKyAg ICAgc3RydWN0IHBjaV9kZXYgKnZmX3BkZXYgPSBOVUxMOw0KPiA+ICsgICAgIHUxNiB2ZW5kb3Ig PSBwZGV2LT52ZW5kb3I7DQo+ID4gKyAgICAgaW50IGluZGV4ID0gMDsNCj4gPiArICAgICB1MTYg dmZfaWQgPSAwOw0KPiA+ICsgICAgIGludCBzcmlvdl9wb3MgPSAwOw0KPiA+ICsNCj4gPiArICAg ICBzcmlvdl9wb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9J RF9TUklPVik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChzcmlvdl9wb3MgPT0gMCkgew0KPiA+ICsg ICAgICAgICAgICAgbmV0ZGV2X3dhcm4odHAtPmRldiwgIlx0Y2FuJ3QgZmluZCBzcmlvdiBwb3Np dGlvbi4iKTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgcGNpX3JlYWRf Y29uZmlnX3dvcmQocGRldiwgc3Jpb3ZfcG9zICsgUENJX1NSSU9WX1ZGX0RJRCwNCj4gJnZmX2lk KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICB2Zl9wZGV2ID0gcGNpX2dldF9kZXZpY2UodmVu ZG9yLCB2Zl9pZCwgTlVMTCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgZm9yICg7IHZmX3Bk ZXYgIT0gTlVMTDsgdmZfcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwNCj4gdmZfaWQsIHZm X3BkZXYpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICh2Zl9wZGV2LT5pc192aXJ0 Zm4gPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX1BDSV9JT1YNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgaWYgKHZmX3BkZXYtPnBoeXNmbiAhPSBwZGV2KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBwY2lfZGV2X2dldCh2Zl9wZGV2KTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgdHAtPnZmX2luZm9baW5kZXhdLnZmX3BjaV9kZXYgPSB2Zl9wZGV2Ow0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKCsraW5kZXggPj0gdHAtPm51bV92ZnMpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9z cmlvdl9od19zZXR0aW5ncyhzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiAr ICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2 IHRtcF9yZWcgPSAwOw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKw0KPiA+ ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgIGlm ICh0cC0+bnVtX3ZmcyAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgLyogc2VsZWN0IHJ4cSBu dW1iZXIgKi8NCj4gPiArICAgICAgICAgICAgIHRtcF9yZWcgPSBSVExfUjE2KFZRQ1RSTCk7DQo+ ID4gKyAgICAgICAgICAgICB0bXBfcmVnICY9IH4oMHg3dSA8PCAydSk7DQo+ID4gKyAgICAgICAg ICAgICBpZiAodHAtPm51bV92ZnMgPT0gMXUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRt cF9yZWcgfD0gKDB4M3UgPDwgMnUpOw0KPiA+ICsgICAgICAgICAgICAgZWxzZSBpZiAodHAtPm51 bV92ZnMgPD0gM3UpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRtcF9yZWcgfD0gKDB4NHUg PDwgMnUpOw0KPiA+ICsgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICB0bXBfcmVnIHw9ICgweDV1IDw8IDJ1KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBSVExf VzE2KFZRQ1RSTCwgdG1wX3JlZyk7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ ZGV2LCAiVlFDVFJMID0gJTA0eCIsDQo+IFJUTF9SMTYoVlFDVFJMKSk7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgLyogTWFpbGJveCBpbnRlcnJ1cHQgbWFzayAqLw0KPiA+ICsgICAgICAgICAg ICAgUlRMX1c4KFBGTVNHSU1SLCAweDdGKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICB0cC0+ c3dfZmxhZyB8PSBTV0ZfU1JJT1ZfRU5BQkxFRDsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgICAgICAgLyogcmVzdG9yZSByeHEgbnVtYmVyIFRCRDogcmVzdG9yZSBQRiByeHEgKi8N Cj4gPiArICAgICAgICAgICAgIHRtcF9yZWcgPSBSVExfUjE2KFZRQ1RSTCk7DQo+ID4gKyAgICAg ICAgICAgICB0bXBfcmVnICY9IH4oMHg3dSA8PCAydSk7DQo+ID4gKyAgICAgICAgICAgICB0bXBf cmVnIHw9ICgweDJ1IDw8IDJ1KTsNCj4gPiArICAgICAgICAgICAgIFJUTF9XMTYoVlFDVFJMLCB0 bXBfcmVnKTsNCj4gPiArICAgICAgICAgICAgIG5ldGRldl9pbmZvKHRwLT5kZXYsICJWUUNUUkwg PSAlMDR4IiwNCj4gUlRMX1IxNihWUUNUUkwpKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAv KiBNYWlsYm94IGludGVycnVwdCBtYXNrICovDQo+ID4gKyAgICAgICAgICAgICBSVExfVzgoUEZN U0dJTVIsIDB4MCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgdHAtPnN3X2ZsYWcgJj0gflNX Rl9TUklPVl9FTkFCTEVEOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzMzIgcnRhc2Vf ZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAg ICB1MTYgbnVtX3ZmcyA9IHRwLT5udW1fdmZzOw0KPiA+ICsgICAgIHUxNiBpbmRleCA9IDA7DQo+ ID4gKyAgICAgczMyIHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHRwLT5udW1fdmZzID0gMDsN Cj4gPiArICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1fdmZzOyBpbmRleCsrKSB7DQo+ ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqdmZfcGRldiA9IHRwLT52Zl9pbmZvW2lu ZGV4XS52Zl9wY2lfZGV2Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICh2Zl9wZGV2KSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBjaV9kZXZfcHV0KHZmX3BkZXYpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICB0cC0+dmZfaW5mb1tpbmRleF0udmZfcGNpX2RldiA9IE5VTEw7 DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBm cmVlIHZmX2luZm8gKi8NCj4gPiArICAgICBrZnJlZSh0cC0+dmZfaW5mbyk7DQo+ID4gKyAgICAg dHAtPnZmX2luZm8gPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICAvKiBwY2kgZGlzYWJlIHNyaW92 Ki8NCj4gPiArICAgICBpZiAocGNpX3Zmc19hc3NpZ25lZCh0cC0+cGRldikgIT0gMCkgew0KPiA+ ICsgICAgICAgICAgICAgbmV0ZGV2X3dhcm4odHAtPmRldiwgIlZGcyBhcmUgYXNzaWduZWQgISIp Ow0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVQRVJNOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ ID4gKyAgICAgICAgICAgICBwY2lfZGlzYWJsZV9zcmlvdih0cC0+cGRldik7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgLyogc3Jpb3YgaGFyZHdhcmUgc2V0dGluZ3MgKi8NCj4gPiArICAgICAg ICAgICAgIHJ0YXNlX3NyaW92X2h3X3NldHRpbmdzKHRwKTsNCj4gPiArICAgICB9DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRh c2VfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpDQo+ ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9k cnZkYXRhKHBkZXYpOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRl dl9wcml2KGRldik7DQo+ID4gKyAgICAgaW50IGVyciA9IDA7DQo+ID4gKyAgICAgdTE2IGV4aXN0 ZWRfdmZzID0gcGNpX251bV92ZihwZGV2KTsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKHRwLT5udW1fdmZzID09IG51bV92ZnMpDQo+ID4gKyAgICAgICAgICAg ICByZXQgPSAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKGV4aXN0ZWRfdmZzICE9IDB1 KSAmJiAoZXhpc3RlZF92ZnMgIT0gbnVtX3ZmcykpIHsNCj4gPiArICAgICAgICAgICAgIGVyciA9 IHJ0YXNlX2Rpc2FibGVfc3Jpb3YodHApOw0KPiA+ICsgICAgICAgICAgICAgaWYgKGVyciAhPSAw KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVycjsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfSBl bHNlIGlmICgoZXhpc3RlZF92ZnMgIT0gMHUpICYmIChleGlzdGVkX3ZmcyA9PSBudW1fdmZzKSkg ew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gbnVtX3ZmczsNCj4gPiArICAgICAgICAgICAgIGdv dG8gb3V0Ow0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfd2Fy bihkZXYsICJleGlzdGVkX3ZmcyA9IDBcbiIpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgZXJyID0gcnRhc2VfYWxsb2NhdGVfdmZfZGF0YSh0cCwgbnVtX3Zmcyk7DQo+ID4gKyAgICAg aWYgKGVyciAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfd2FybihkZXYsICJhbGxv Y2F0ZSB2ZiBkYXRhIGZhaWxlZC4iKTsNCj4gPiArICAgICAgICAgICAgIHJldCA9IGVycjsNCj4g PiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTsNCj4gPiArICAgICBpZiAoZXJy ICE9IDApIHsNCj4gPiArICAgICAgICAgICAgIG5ldGRldl93YXJuKGRldiwgInBjaV9lbmFibGVf c3Jpb3YgZmFpbGVkOiAlZFxuIiwgZXJyKTsNCj4gPiArICAgICAgICAgICAgIHJldCA9IGVycjsN Cj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgLyogc3Jpb3YgaGFyZHdhcmUgc2V0dGluZ3MgKi8NCj4gPiArICAgICBydGFzZV9zcmlvdl9o d19zZXR0aW5ncyh0cCk7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX2dldF92ZnModHApOw0KPiA+ ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgcnRhc2VfcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYp DQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dl dF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5l dGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgaW50IGVycjsNCj4gPiArDQo+ID4gKyAgICAgaWYg KCh0cC0+bnVtX3ZmcyA9PSAwdSkgJiYgKHBjaV9udW1fdmYocGRldikgPT0gMCkpDQo+ID4gKyAg ICAgICAgICAgICBlcnIgPSAtRUlOVkFMOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAg ICAgIGVyciA9IHJ0YXNlX2Rpc2FibGVfc3Jpb3YodHApOw0KPiA+ICsNCj4gPiArICAgICByZXR1 cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBUQkQ6IG5lZWQgdG8gbW9kaWZ5LCBub3cg YWxsIGVuYWJsZSAqLw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9zcmlvdl9jcihjb25zdCBzdHJ1 Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlv YWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2IGNyID0gUlRMX1IxNihGQ1IpOw0K PiA+ICsNCj4gPiArICAgICBjciB8PSAoRkNSX0JBUl9FTiB8IEZDUl9NQVJfRU4gfCBGQ1JfVFhf TE9PUEJBQ0tfRU4pOw0KPiA+ICsgICAgIFJUTF9XMTYoRkNSLCBjcik7DQo+ID4gKw0KPiA+ICsg ICAgIFJUTF9XMTYoTEJLX0NUUkwsIChMQktfQVRMRCB8IExCS19DTFIpKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiAraW50IHJ0YXNlX3BjaV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIGludCBudW1fdmZzKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRl diA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsN Cj4gPiArICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7DQo+ID4gKyAgICAgaWYgKCh0cC0+c3df ZmxhZyAmIFNXRl9TUklPVl9FTkFCTEVEKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJ0YXNl X2Z1bmNfZGlzYWJsZSh0cCk7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX2h3X3Jlc2V0KGRldik7 DQo+ID4gKyAgICAgcnRhc2VfdHhfY2xlYXIodHApOw0KPiA+ICsgICAgIHJ0YXNlX3J4X2NsZWFy KHRwKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJ0YXNlX2luaXRfcmluZyhkZXYpICE9IDApDQo+ ID4gKyAgICAgICAgICAgICBuZXRkZXZfd2Fybih0cC0+ZGV2LCAidW5hYmxlIHRvIGluaXQgcmlu Z1xuIik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChudW1fdmZzID09IDApDQo+ID4gKyAgICAgICAg ICAgICByZXQgPSBydGFzZV9wY2lfc3Jpb3ZfZGlzYWJsZShwZGV2KTsNCj4gPiArICAgICBlbHNl DQo+ID4gKyAgICAgICAgICAgICByZXQgPSBydGFzZV9wY2lfc3Jpb3ZfZW5hYmxlKHBkZXYsIG51 bV92ZnMpOw0KPiA+ICsNCj4gPiArICAgICBpZiAocmV0ICE9IC1FSU5WQUwpIHsNCj4gPiArICAg ICAgICAgICAgIG1kZWxheSgxMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfaHdf c2V0X3J4X3BhY2tldF9maWx0ZXIoZGV2KTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2h3X3N0 YXJ0KGRldik7DQo+ID4gKyAgICAgICAgICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9W X0VOQUJMRUQpICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNlX2Z1bmNf ZW5hYmxlKHRwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcnRhc2Vfc3Jpb3ZfY3IodHAp Ow0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIG5ldGlmX3dh a2VfcXVldWUoZGV2KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0bF9zZXRfdmZfbWFjKHN0cnVjdCBy dGFzZV9wcml2YXRlICp0cCwgaW50IHZmLCBjb25zdCB1OCAqbWFjKQ0KPiA+ICt7DQo+ID4gKyAg ICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7DQo+ID4gKyAgICAgdTE2IHRtcDsNCj4gPiArDQo+ID4gKyAgICAgc3Bp bl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsgICAgIHRtcCA9 IChtYWNbMF0gPDwgOCkgfCBtYWNbMV07DQo+ID4gKyAgICAgUlRMX1cxNigoVkZfTUFDXzAgKyAo dmYgKiA4KSksIHRtcCk7DQo+ID4gKyAgICAgdG1wID0gKG1hY1syXSA8PCA4KSB8IG1hY1szXTsN Cj4gPiArICAgICBSVExfVzE2KChWRl9NQUNfMiArICh2ZiAqIDgpKSwgdG1wKTsNCj4gPiArICAg ICB0bXAgPSAobWFjWzRdIDw8IDgpIHwgbWFjWzVdOw0KPiA+ICsgICAgIFJUTF9XMTYoKFZGX01B Q180ICsgKHZmICogOCkpLCB0bXApOw0KPiA+ICsNCj4gPiArICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjaWZkZWYgSUZM QV9WRl9NQVgNCj4gPiAraW50IHJ0YXNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5l dGRldiwgaW50IHZmLCB1OCAqbWFjKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsNCj4gPiArICAgICBzdHJ1Y3QgdmZfaW5m byAqdmZfaW5mbyA9IE5VTEw7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsg ICAgIGlmICh2ZiA+PSB0cC0+bnVtX3Zmcykgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVJ TlZBTDsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgdmZfaW5mbyA9ICZ0 cC0+dmZfaW5mb1t2Zl07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKGlzX3ZhbGlkX2V0 aGVyX2FkZHIobWFjKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGxfc2V0X3ZmX21h Yyh0cCwgdmYsIG1hYyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG1lbWNweSh2Zl9pbmZv LT52Zl9tYWMsIG1hYywgRVRIX0FMRU4pOw0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIGlmIChp c196ZXJvX2V0aGVyX2FkZHIobWFjKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGxf c2V0X3ZmX21hYyh0cCwgdmYsIG1hYyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG1lbWNw eSh2Zl9pbmZvLT52Zl9tYWMsIG1hYywgRVRIX0FMRU4pOw0KPiA+ICsgICAgICAgICAgICAgfSBl bHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAg ICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK2ludCBydGFzZV9nZXRfdmZfY29uZmlnKHN0cnVjdCBuZXRfZGV2 aWNlICpuZXRkZXYsIGludCB2Ziwgc3RydWN0IGlmbGFfdmZfaW5mbw0KPiAqaXZpKQ0KPiA+ICt7 DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYo bmV0ZGV2KTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgdmZfaW5mbyAqdmZfaW5mbyA9IE5VTEw7 DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmICh2ZiA+PSB0cC0+ bnVtX3Zmcykgew0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X3dhcm4odHAtPmRldiwgIiVzLi4u JWkgRUlOVkFMIiwgX19mdW5jX18sIHZmKTsNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FSU5W QUw7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHZmX2luZm8gPSAmdHAt PnZmX2luZm9bdmZdOw0KPiA+ICsgICAgICAgICAgICAgaXZpLT52ZiA9IHZmOw0KPiA+ICsgICAg ICAgICAgICAgbWVtY3B5KGl2aS0+bWFjLCB2Zl9pbmZvLT52Zl9tYWMsIEVUSF9BTEVOKTsNCj4g PiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArI2Vu ZGlmDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2Uv cnRhc2Vfc3Jpb3YuaA0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRh c2Vfc3Jpb3YuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi44ZDFiNGE0OTEwNWYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9zcmlvdi5oDQo+ID4gQEAgLTAsMCArMSwy MCBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsv Kg0KPiA+ICsgKiAgQ29weXJpZ2h0KGMpIDIwMjMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAu IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyAqDQo+ID4gKyAqICBBdXRob3I6DQo+ID4gKyAq ICBSZWFsdGVrIEFSRCBzb2Z0d2FyZSB0ZWFtDQo+ID4gKyAqLw0KPiA+ICsjaWZuZGVmIFJUQVNF X1NSSU9WX0hfDQo+ID4gKyNkZWZpbmUgUlRBU0VfU1JJT1ZfSF8NCj4gPiArDQo+ID4gKy8qICBG dW5jdGlvbiBQcm90b3R5cGUNCj4gPiArICovDQo+ID4gK3MzMiBydGFzZV9kaXNhYmxlX3NyaW92 KHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCk7DQo+ID4gK2ludCBydGFzZV9wY2lfc3Jpb3ZfY29u ZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3Zmcyk7DQo+ID4gKyNpZmRlZiBJ RkxBX1ZGX01BWA0KPiA+ICtpbnQgcnRhc2Vfc2V0X3ZmX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAq bmV0ZGV2LCBpbnQgdmYsIHU4ICptYWMpOw0KPiA+ICtpbnQgcnRhc2VfZ2V0X3ZmX2NvbmZpZyhz dHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHN0cnVjdCBpZmxhX3ZmX2luZm8NCj4g Kml2aSk7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIFJUQVNFX1NSSU9WX0hf ICovDQo+IA0KPiANCj4gLS0tLS0tUGxlYXNlIGNvbnNpZGVyIHRoZSBlbnZpcm9ubWVudCBiZWZv cmUgcHJpbnRpbmcgdGhpcyBlLW1haWwuDQo=