From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83A44C433DB for ; Tue, 22 Dec 2020 21:37:19 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8AE6622AAE for ; Tue, 22 Dec 2020 21:37:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8AE6622AAE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=holtmann.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:References:Message-Id:Date:In-Reply-To:From: Subject:Mime-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=yhix8JPxtLDI3Yh7oR3uHLxPL6oTdLkiFBY2bNaN2H4=; b=n+L09H7dYAD5Vaz+R+L3DqNt2 SmwkzyrwG4y+2St0pgv9oHZdrlmzbVaxRS73e7SOxSg8MhXoXcdjllmXAZVUyplNKFUp0lKC2swwY suXKeLwErofMi+DEWJsLROnRDeQoeq6XBOUTGsGe2w7k8SShPKnZQnKlB7P12djuXBdYKfD1xDqEu VeqftMBOg7/KctGDIWjpGmm9VCh3I5DNNqJppH80uHKgTBpd7OhOfCYOL0faph0p4Ihy539qTanAC X9TORgO18RtiZ4HOkupWV37TQl8BgS7Uy8iMiz7WiLLagmWIFZSMiQhu5YIrw6UAJFfzdsRkusysA 6P4GFVsYA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1krpL2-0003r5-S1; Tue, 22 Dec 2020 21:37:00 +0000 Received: from coyote.holtmann.net ([212.227.132.17] helo=mail.holtmann.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1krpKy-0003qL-GT for linux-mediatek@lists.infradead.org; Tue, 22 Dec 2020 21:36:59 +0000 Received: from marcel-macbook.holtmann.net (p4ff9fbc9.dip0.t-ipconnect.de [79.249.251.201]) by mail.holtmann.org (Postfix) with ESMTPSA id 56777CECC3; Tue, 22 Dec 2020 22:44:07 +0100 (CET) Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.40.0.2.32\)) Subject: Re: [PATCH 1/1] [Add support Mediatek mt7921U] From: Marcel Holtmann In-Reply-To: <20201222150527.22904-1-Mark-YW.Chen@mediatek.com> Date: Tue, 22 Dec 2020 22:36:49 +0100 Message-Id: <06C876AD-8232-418E-B3CB-96B88579BAF7@holtmann.org> References: <20201222150527.22904-1-Mark-YW.Chen@mediatek.com> To: Mark-YW.Chen@mediatek.com X-Mailer: Apple Mail (2.3654.40.0.2.32) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201222_163656_915859_34D2D328 X-CRM114-Status: GOOD ( 37.11 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Johan Hedberg , sean.wang@mediatek.com, LKML , linux-bluetooth , linux-mediatek@lists.infradead.org, peter.tsao@mediatek.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgTWFyaywKCj4gVGhpcyBwYXRjaCBhZGRzIHRoZSBzdXBwb3J0IG9mIGVuYWJsaW5nIE1UNzky MVUsIGl0J3MgVVNCLWJhc2VkCj4gQmx1ZXRvb3RoIGZ1bmN0aW9uLgo+IAo+IFRoZXJlIGFyZSBz b21lIGNvbXBvbmVudCBpbiB0aGUgTWVkaWF0ZWsgZHJpdmVyLgo+IDEuIEJ0bXRrX21haW46IGl0 J3MgY29tbW9uIGNvZGUgZm9yIE1lZGlhdGVrIGRldmljZXMsCj4gICBzdWNoIGFzIGZpcm13YXJl IGRvd25sb2FkLCBjaGlwIGluaXRpYWxpemF0aW9uLAo+ICAgc3RhdGUgbWFjaGluZSBoYW5kbGlu ZyBhbmQgZXRjLgo+IDIuIEJ0bXRrdXNiOiBpdCdzIGZvciB1c2IgaW50ZXJmYWNlLAo+ICAgc3Vj aCBhcyB1c2IgZW5kcG9pbnQgZW51bWVyYXRpb24sIHVyYiBoYW5kbGluZyBhbmQgZXRjLgo+IAo+ IEZpcnN0bHksIHdlIHVwZGF0ZSB0aGUgY29tbW9uIHBhcnQgYW5kIHVzYiBwYXJ0IGZvciBNVDc5 MjFVLgo+IFNlY29uZGx5LCB3ZSB3aWxsIGFkZCB0aGUgc3VwcG9ydCBNVDc5MjFTLCBpdCdzIFNE SU8tYmFzZWQgZGV2aWNlLgo+IEZpbmFsbHksIHdlIHdpbGwgYWRkIHRoZSBwcm9jZWR1cmUgdG8g c3VwcG9ydCB1YXJ0L3BjaWUgaW50ZXJmYWNlcy4KCmNyZWF0ZSBhIGJ0bXRrLltjaF0gbW9kdWxl IGxpa2UgdGhlIG90aGVyIHZlbmRvcnMgZGlkIGlmIGl0IG1ha2VzIHNlbnNlLiBPdGhlcndpc2Ug anVzdCBza2lwIHRoYXQgcGFydCBmb3Igbm93IGFuZCBnZXQgYnRtdGt1c2IuYyBkcml2ZXIgd29y a2luZy4gWW91IGNhbiBsYXRlciB1bmlmeSBiZXR3ZWVuIGFsbCAzIHRyYW5zcG9ydHMuCgpJIHdv dWxkIGRvIHRoZSBsYXR0ZXIgc2luY2UgaXQgd291bGQgZmlyc3QgbWFrZSBzZW5zZSB0byByZWFs bHkgc2VlIHdoZXJlIHRoZSBjb21tb24gcGFydHMgYXJlLiBBbmQgSSBoYXZlIHRvIGJlIGZyYW5r LCB0aGlzIGRyaXZlciBuZWVkcyBtYXNzaXZlIGNsZWFudXAuIEkgYW0gbm90IGdvaW5nIHRvIGFj Y2VwdCB0aGlzIHRvbnMgb2YgY29weS1hbmQtcGFzdGUgbGVmdCBhbmQgcmlnaHQuCgpQbGVhc2Ug cHJvdmlkZSB0aGUgY29udGVudCBvZiAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBpbiB0 aGUgY29tbWl0IG1lc3NhZ2UuCgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1hcmstWVcgQ2hlbiA8bWFy ay15dy5jaGVuQG1lZGlhdGVrLmNvbT4KPiAtLS0KPiBkcml2ZXJzL2JsdWV0b290aC9idG10a19t YWluLmMgfCAxNzM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IGRyaXZlcnMvYmx1ZXRv b3RoL2J0bXRrX21haW4uaCB8ICA1NzggKysrKysrKysrCj4gZHJpdmVycy9ibHVldG9vdGgvYnRt dGtfdXNiLmggIHwgICA2MCArCj4gZHJpdmVycy9ibHVldG9vdGgvYnRtdGt1c2IuYyAgIHwgMjA1 MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IDQgZmlsZXMgY2hhbmdlZCwgNDQy MyBpbnNlcnRpb25zKCspCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYmx1ZXRvb3RoL2J0 bXRrX21haW4uYwo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2JsdWV0b290aC9idG10a19t YWluLmgKPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ibHVldG9vdGgvYnRtdGtfdXNiLmgK PiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ibHVldG9vdGgvYnRtdGt1c2IuYwo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG10a19tYWluLmMgYi9kcml2ZXJzL2JsdWV0 b290aC9idG10a19tYWluLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMzAzOGVkYTA1N2U4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvYmx1ZXRv b3RoL2J0bXRrX21haW4uYwo+IEBAIC0wLDAgKzEsMTczNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5j Lgo+ICsKPiArLyoKPiArICogQmx1ZXRvb3RoIHN1cHBvcnQgZm9yIE1lZGlhVGVrIFNESU8vVVNC L1VBUlQgZGV2aWNlcwo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJx Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG1fd2Fr ZXVwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3N0 cmluZy5oPgo+ICsjaW5jbHVkZSAiYnRtdGtfbWFpbi5oIgo+ICsKPiArI2RlZmluZSBNVEtCVF9V TlNMRUVQQUJMRV9MT0NLKHgsIHkpCXNwaW5fbG9ja19pcnFzYXZlKHgsIHkpCj4gKyNkZWZpbmUg TVRLQlRfVU5TTEVFUEFCTEVfVU5MT0NLKHgsIHkpCXNwaW5fdW5sb2NrX2lycXNhdmUoeCwgeSkK Ck5PLiBQZXJpb2QuCgpQbGVhc2UgZG9u4oCZdCBoYXZlIHRoZXNlIGFic3RyYWN0aW9ucy4KCj4g Kwo+ICsvKiBUT0RPLCBuZWVkIHRvIG1vZGlmeSB0aGUgc3RhdGUgbXV0ZXggZm9yIGVhY2ggaGNp IGRldiovCj4gK3N0YXRpYyBERUZJTkVfTVVURVgoYnRtdGtfY2hpcF9zdGF0ZV9tdXRleCk7Cj4g KyNkZWZpbmUgQ0hJUF9TVEFURV9NVVRFWF9MT0NLKCkJbXV0ZXhfbG9jaygmYnRtdGtfY2hpcF9z dGF0ZV9tdXRleCkKPiArI2RlZmluZSBDSElQX1NUQVRFX01VVEVYX1VOTE9DSygpCW11dGV4X3Vu bG9jaygmYnRtdGtfY2hpcF9zdGF0ZV9tdXRleCkKPiArc3RhdGljIERFRklORV9NVVRFWChidG10 a19mb3BzX3N0YXRlX211dGV4KTsKPiArI2RlZmluZSBGT1BTX01VVEVYX0xPQ0soKQltdXRleF9s b2NrKCZidG10a19mb3BzX3N0YXRlX211dGV4KQo+ICsjZGVmaW5lIEZPUFNfTVVURVhfVU5MT0NL KCkJbXV0ZXhfdW5sb2NrKCZidG10a19mb3BzX3N0YXRlX211dGV4KQo+ICsKCkkgaGF2ZSBubyBp ZGVhIHdoeSB5b3UgbmVlZCBnbG9iYWwgbG9ja3MuIFlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIHdy b25nIGlmIHlvdSBkby4KCj4gK3N0YXRpYyBpbnQgYnRtdGtfZm9wc19nZXRfc3RhdGUoc3RydWN0 IGJ0bXRrX2RldiAqYmRldik7Cj4gK3U4IGJ0bXRrX2xvZ19sdmwgPSBCVE1US19MT0dfTFZMX0RF RjsKPiArCgpOby4gVXNlIGJ0X2Rldl9kYmcoKSBvciBCVF9EQkcoKSB3aGljaCBib3RoIGFyZSBk eW5hbWljX2RlYnVnIGNhcGFibGUuCgo+ICsvKiBUbyBzdXBwb3J0IGR5bmFtaWMgbW91bnQgb2Yg aW50ZXJmYWNlIGNhbiBiZSBwcm9iZWQgKi8KPiArc3RhdGljIGludCBidG10a19pbnRmX251bSA9 IEJUX01DVV9NSU5JTVVNX0lOVEVSRkFDRV9OVU07Cj4gKy8qIFRvIGFsbG93IGdfYmRldiBiZWlu ZyBzaXplZCBmcm9tIGJ0bXRrX2ludGZfbnVtIHNldHRpbmcgKi8KPiArc3RhdGljIHN0cnVjdCBi dG10a19kZXYgKipnX2JkZXY7CgpOTy4gUGVyaW9kLiBObyBnbG9iYWwgZGV2IGluc3RhbmNlcy4K Cj4gKwo+ICtjb25zdCB1OCBSRVNFVF9FVkVOVFtdID0geyAweDBFLCAweDA0LCAweDAxLCAweDAz LCAweDBjLCAweDAwIH07Cj4gK2NvbnN0IHU4IFJFQURfSVNPX1BBQ0tFVF9TSVpFX0NNRFtdID0g eyAweDAxLCAweDk4LCAweEZELCAweDAyIH07Cj4gKwo+ICt1OCB3bXRfb3Zlcl9oY2lfaGVhZGVy W10gPSB7IDB4MDEsIDB4NkYsIDB4RkN9Owo+ICsKCk5lZWQgdG8gYmUgYWxsIHN0YXRpYyBhbmQg SSB3b3VsZCByYXRoZXIgaGF2ZSBpdCBpbmxpbmUgd2hlcmUgdGhleSBhcmUgdXNlZC4KCj4gKy8q YnRtdGsgbWFpbiBpbmZvcm1hdGlvbiovCj4gK3N0YXRpYyBzdHJ1Y3QgYnRtdGtfbWFpbl9pbmZv IG1haW5faW5mbzsKCk5PLiBQZXJpb2QuIFNhbWUgYXMgYWJvdmUsIG5vIGdsb2JhbCBzdHJ1Y3Rz LgoKPiArCj4gKy8qIFN0YXRlIG1hY2hpbmUgdGFibGUgdGhhdCBjbGFyaWZ5IHRocm91Z2ggZWFj aCBISUYgZXZlbnRzLAo+ICsgKiBUbyBzcGVjaWZ5IEhJRiBldmVudCBvbgo+ICsgKiBFbnRlcmlu ZyAvIEVuZCAvIEVycm9yCj4gKyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGJ0bXRrX2NpZl9z dGF0ZSBnX2NpZl9zdGF0ZVtdID0gewo+ICsJLyogSElGX0VWRU5UX1BST0JFICovCj4gKwl7QlRN VEtfU1RBVEVfUFJPQkUsIEJUTVRLX1NUQVRFX1dPUktJTkcsIEJUTVRLX1NUQVRFX0RJU0NPTk5F Q1R9LAo+ICsJLyogSElGX0VWRU5UX0RJU0NPTk5FQ1QgKi8KPiArCXtCVE1US19TVEFURV9ESVND T05ORUNULCBCVE1US19TVEFURV9ESVNDT05ORUNULCBCVE1US19TVEFURV9ESVNDT05ORUNUfSwK PiArCS8qIEhJRl9FVkVOVF9TVVNQRU5EICovCj4gKwl7QlRNVEtfU1RBVEVfU1VTUEVORCwgQlRN VEtfU1RBVEVfU1VTUEVORCwgQlRNVEtfU1RBVEVfRldfRFVNUH0sCj4gKwkvKiBISUZfRVZFTlRf UkVTVU1FICovCj4gKwl7QlRNVEtfU1RBVEVfUkVTVU1FLCBCVE1US19TVEFURV9XT1JLSU5HLCBC VE1US19TVEFURV9GV19EVU1QfSwKPiArCS8qIEhJRl9FVkVOVF9TVEFOREJZICovCj4gKwl7QlRN VEtfU1RBVEVfU1RBTkRCWSwgQlRNVEtfU1RBVEVfU1RBTkRCWSwgQlRNVEtfU1RBVEVfRldfRFVN UH0sCj4gKwkvKiBCVE1US19TVEFURV9GV19EVU1QICovCj4gKwl7QlRNVEtfU1RBVEVfU1VCU1lT X1JFU0VULCBCVE1US19TVEFURV9XT1JLSU5HLCBCVE1US19TVEFURV9GV19EVU1QfSwKPiArCS8q IEJUTVRLX1NUQVRFX0ZXX0RVTVAgKi8KPiArCXtCVE1US19TVEFURV9GV19EVU1QLCBCVE1US19T VEFURV9ESVNDT05ORUNULCBCVE1US19TVEFURV9GV19EVU1QfSwKPiArCS8qIEJUTVRLX1NUQVRF X0ZXX0RVTVAgKi8KPiArCXtCVE1US19TVEFURV9GV19EVU1QLCBCVE1US19TVEFURV9GV19EVU1Q LCBCVE1US19TVEFURV9GV19EVU1QfSwKPiArfTsKPiArCj4gK19fd2VhayBpbnQgYnRtdGtfY2lm X3JlZ2lzdGVyKHZvaWQpCj4gK3sKPiArCUJUTVRLX0VSUigiTm8gY2lmIHJlZ2lzdGVyIGZ1bmN0 aW9uIik7Cj4gKwlyZXR1cm4gLTE7Cj4gK30KPiArCj4gK19fd2VhayBpbnQgYnRtdGtfY2lmX2Rl cmVnaXN0ZXIodm9pZCkKPiArewo+ICsJQlRNVEtfRVJSKCJObyBjaWYgZGVyZWdpc3RlciBmdW5j dGlvbiIpOwo+ICsJcmV0dXJuIC0xOwo+ICt9CgpSZW1vdmUgdGhpcy4gVGhpcyBpcyBqdXN0IHBv aW50bGVzcy4KCj4gKwo+ICtpbnQgYnRtdGtfZ2V0X2NoaXBfc3RhdGUoc3RydWN0IGJ0bXRrX2Rl diAqYmRldikKPiArewo+ICsJaW50IHN0YXRlID0gQlRNVEtfU1RBVEVfSU5JVDsKPiArCj4gKwlD SElQX1NUQVRFX01VVEVYX0xPQ0soKTsKPiArCXN0YXRlID0gYmRldi0+aW50ZXJmYWNlX3N0YXRl Owo+ICsJQ0hJUF9TVEFURV9NVVRFWF9VTkxPQ0soKTsKPiArCj4gKwlyZXR1cm4gc3RhdGU7Cj4g K30KPiArCj4gK3ZvaWQgYnRtdGtfc2V0X2NoaXBfc3RhdGUoc3RydWN0IGJ0bXRrX2RldiAqYmRl diwgaW50IG5ld19zdGF0ZSkKPiArewo+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzdGF0 ZV9tc2dbXSA9IHsKPiArCQkiVU5LTk9XTiIsICJJTklUIiwgIkRJU0NPTk5FQ1QiLCAiUFJPQkUi LCAiV09SS0lORyIsICJTVVNQRU5EIiwgIlJFU1VNRSIsCj4gKwkJIkZXX0RVTVAiLCAiU1RBTkRC WSIsICJTVUJTWVNfUkVTRVQiLAo+ICsJfTsKPiArCj4gKwlCVE1US19JTkZPKCIlczogJXMoJWQp IC0+ICVzKCVkKSIsIF9fZnVuY19fLCBzdGF0ZV9tc2dbYmRldi0+aW50ZXJmYWNlX3N0YXRlXSwK PiArCQkgICBiZGV2LT5pbnRlcmZhY2Vfc3RhdGUsIHN0YXRlX21zZ1tuZXdfc3RhdGVdLCBuZXdf c3RhdGUpOwo+ICsKPiArCUNISVBfU1RBVEVfTVVURVhfTE9DSygpOwo+ICsJYmRldi0+aW50ZXJm YWNlX3N0YXRlID0gbmV3X3N0YXRlOwo+ICsJQ0hJUF9TVEFURV9NVVRFWF9VTkxPQ0soKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBidG10a19mb3BzX2dldF9zdGF0ZShzdHJ1Y3QgYnRtdGtfZGV2 ICpiZGV2KQo+ICt7Cj4gKwlpbnQgc3RhdGUgPSBCVE1US19GT1BTX1NUQVRFX0lOSVQ7Cj4gKwo+ ICsJRk9QU19NVVRFWF9MT0NLKCk7Cj4gKwlzdGF0ZSA9IGJkZXYtPmZvcHNfc3RhdGU7Cj4gKwlG T1BTX01VVEVYX1VOTE9DSygpOwo+ICsKPiArCXJldHVybiBzdGF0ZTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgYnRtdGtfZm9wc19zZXRfc3RhdGUoc3RydWN0IGJ0bXRrX2RldiAqYmRldiwgaW50 IG5ld19zdGF0ZSkKPiArewo+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmc3RhdGVfbXNn W10gPSB7Cj4gKwkJIlVOS05PV04iLCAiSU5JVCIsICJPUEVOSU5HIiwgIk9QRU5FRCIsICJDTE9T SU5HIiwgIkNMT1NFRCIsCj4gKwl9Owo+ICsKPiArCUJUTVRLX0lORk8oIiVzOiBGT1BTXyVzKCVk KSAtPiBGT1BTXyVzKCVkKSIsIF9fZnVuY19fLCBmc3RhdGVfbXNnW2JkZXYtPmZvcHNfc3RhdGVd LAo+ICsJCSAgIGJkZXYtPmZvcHNfc3RhdGUsIGZzdGF0ZV9tc2dbbmV3X3N0YXRlXSwgbmV3X3N0 YXRlKTsKPiArCUZPUFNfTVVURVhfTE9DSygpOwo+ICsJYmRldi0+Zm9wc19zdGF0ZSA9IG5ld19z dGF0ZTsKPiArCUZPUFNfTVVURVhfVU5MT0NLKCk7Cj4gK30KPiArCj4gK3N0cnVjdCBidG10a19t YWluX2luZm8gKmJ0bXRrX2dldF9tYWluX2luZm8odm9pZCkKPiArewo+ICsJcmV0dXJuICZtYWlu X2luZm87Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWFpbl9pbml0KHZvaWQpCj4gK3sKPiArCWlu dCBpID0gMDsKPiArCj4gKwlCVE1US19JTkZPKCIlcyIsIF9fZnVuY19fKTsKPiArCj4gKwkvKiBD aGVjayBpZiB1c2VyIGNoYW5nZXMgZGVmYXVsdCBtaW5pbXVtIHN1cHBvcnRlZCBpbnRmIGNvdW50 ICovCj4gKwlpZiAoYnRtdGtfaW50Zl9udW0gPCBCVF9NQ1VfTUlOSU1VTV9JTlRFUkZBQ0VfTlVN KSB7Cj4gKwkJYnRtdGtfaW50Zl9udW0gPSBCVF9NQ1VfTUlOSU1VTV9JTlRFUkZBQ0VfTlVNOwo+ ICsJCUJUTVRLX1dBUk4oIiVzIG1pbmltdW0gaW50ZXJmYWNlIGlzICVkIiwgX19mdW5jX18sIGJ0 bXRrX2ludGZfbnVtKTsKPiArCX0KPiArCj4gKwlnX2JkZXYgPSBremFsbG9jKChzaXplb2YoKmdf YmRldikgKiBidG10a19pbnRmX251bSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFnX2JkZXYpIHsK PiArCQlCVE1US19XQVJOKCIlcyBpbnN1ZmZpY2llbnQgbWVtb3J5IiwgX19mdW5jX18pOwo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBidG10a19pbnRm X251bTsgaSsrKSB7Cj4gKwkJZ19iZGV2W2ldID0gYnRtdGtfYWxsb2NhdGVfZGV2X21lbW9yeShO VUxMKTsKPiArCQlpZiAoZ19iZGV2W2ldKQo+ICsJCQlidG10a19mb3BzX3NldF9zdGF0ZShnX2Jk ZXZbaV0sIEJUTVRLX0ZPUFNfU1RBVEVfSU5JVCk7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gLUVO T01FTTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWlu X2V4aXQodm9pZCkKPiArewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCUJUTVRLX0lORk8oIiVzIHJl bGVhc2luZyBpbnRmIGNvdW50IDwlZD4iLCBfX2Z1bmNfXywgYnRtdGtfaW50Zl9udW0pOwo+ICsK PiArCWlmICghZ19iZGV2KSB7Cj4gKwkJQlRNVEtfV0FSTigiJXMgZ19kYXRhIGlzIE5VTEwiLCBf X2Z1bmNfXyk7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJQlRNVEtfSU5GTygiJXM6IFJl Z2lzdGVyIHJlYm9vdF9ub3RpZmllciBjYWxsYmFjayBzdWNjZXNzLiIsIF9fZnVuY19fKTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgYnRtdGtfaW50Zl9udW07IGkrKykgewo+ICsJCWlmICghZ19i ZGV2W2ldKQo+ICsJCQlidG10a19mcmVlX2Rldl9tZW1vcnkoTlVMTCwgZ19iZGV2W2ldKTsKPiAr CX0KPiArCj4gKwlrZnJlZShnX2JkZXYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmg0X3JlY3ZfYnVmKHN0cnVjdCBoY2lfZGV2ICpoZGV2 LAo+ICsJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKPiArCQkJCQkgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmJ1ZmZlciwKPiArCQkJCQkgIGludCBjb3VudCwKPiArCQkJCQkgIGNvbnN0IHN0cnVj dCBoNF9yZWN2X3BrdCAqcGt0cywKPiArCQkJCQkgIGludCBwa3RzX2NvdW50KQo+ICt7CgpOTy4g UGVyaW9kLiBZb3UgYXJlIG5vdCBnb2luZyB0byBjb3B5IG9mIHRoaXMgZnVuY3Rpb24uIFdlIHBy b3ZpZGUgaDRfcmVjdi5oIGZvciB0aGlzLgoKPiArCj4gKwlpZiAoIWhkZXYgfHwgIWJ1ZmZlcikg ewo+ICsJCUJUTVRLX0VSUigiJXMsIGludmFsaWQgcGFyYW1ldGVycyEiLCBfX2Z1bmNfXyk7Cj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwl9Cj4gKwo+ICsJYmRldiA9IGhjaV9nZXRf ZHJ2ZGF0YShoZGV2KTsKPiArCWlmICghYmRldikgewo+ICsJCUJUTVRLX0VSUigiJXMsIGJkZXYg aXMgaW52YWxpZCIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAr CX0KPiArCWlmIChJU19FUlIoc2tiKSkKPiArCQlza2IgPSBOVUxMOwo+ICsKPiArCXdoaWxlIChj b3VudCkgewo+ICsJCWludCBpLCBsZW47Cj4gKwo+ICsJCWlmICghc2tiKSB7Cj4gKwkJCWZvciAo aSA9IDA7IGkgPCBwa3RzX2NvdW50OyBpKyspIHsKPiArCQkJCWlmIChidWZmZXJbMF0gIT0gKCZw a3RzW2ldKS0+dHlwZSkKPiArCQkJCQljb250aW51ZTsKPiArCj4gKwkJCQlza2IgPSBidF9za2Jf YWxsb2MoKCZwa3RzW2ldKS0+bWF4bGVuLAo+ICsJCQkJCQkgICBHRlBfQVRPTUlDKTsKPiArCQkJ CWlmICghc2tiKSB7Cj4gKwkJCQkJQlRNVEtfRVJSKCIlcywgYWxsb2Mgc2tiIGZhaWxlZCEiLCBf X2Z1bmNfXyk7Cj4gKwkJCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwkJCQl9Cj4gKwo+ ICsJCQkJaGNpX3NrYl9wa3RfdHlwZShza2IpID0gKCZwa3RzW2ldKS0+dHlwZTsKPiArCQkJCWhj aV9za2JfZXhwZWN0KHNrYikgPSAoJnBrdHNbaV0pLT5obGVuOwo+ICsJCQkJYnJlYWs7Cj4gKwkJ CX0KPiArCj4gKwkJCS8qIENoZWNrIGZvciBpbnZhbGlkIHBhY2tldCB0eXBlICovCj4gKwkJCWlm ICghc2tiKSB7Cj4gKwkJCQlCVE1US19FUlIoIiVzLHNrYiBpcyBpbnZhbGlkLCBidWZmZXJbMF0g PSAlZCEiLCBfX2Z1bmNfXywKPiArCQkJCQkgIGJ1ZmZlclswXSk7Cj4gKwkJCQlyZXR1cm4gRVJS X1BUUigtRUlMU0VRKTsKPiArCQkJfQo+ICsKPiArCQkJY291bnQgLT0gMTsKPiArCQkJYnVmZmVy ICs9IDE7Cj4gKwkJfQo+ICsKPiArCQlsZW4gPSBtaW5fdCh1aW50LCBoY2lfc2tiX2V4cGVjdChz a2IpIC0gc2tiLT5sZW4sIGNvdW50KTsKPiArCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGJ1 ZmZlciwgbGVuKTsKPiArCj4gKwkJY291bnQgLT0gbGVuOwo+ICsJCWJ1ZmZlciArPSBsZW47Cj4g Kwo+ICsJCWlmIChza2ItPmxlbiA8IGhjaV9za2JfZXhwZWN0KHNrYikpCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgcGt0c19jb3VudDsgaSsrKSB7Cj4gKwkJCWlmICho Y2lfc2tiX3BrdF90eXBlKHNrYikgPT0gKCZwa3RzW2ldKS0+dHlwZSkKPiArCQkJCWJyZWFrOwo+ ICsJCX0KPiArCj4gKwkJaWYgKGkgPj0gcGt0c19jb3VudCkgewo+ICsJCQlCVE1US19FUlIoIiVz LCBwa3QgdHlwZSBpcyBpbnZhbGlkISIsIF9fZnVuY19fKTsKPiArCQkJa2ZyZWVfc2tiKHNrYik7 Cj4gKwkJCXJldHVybiBFUlJfUFRSKC1FSUxTRVEpOwo+ICsJCX0KPiArCj4gKwkJaWYgKHNrYi0+ bGVuID09ICgmcGt0c1tpXSktPmhsZW4pIHsKPiArCQkJdTE2IGRsZW47Cj4gKwo+ICsJCQlzd2l0 Y2ggKCgmcGt0c1tpXSktPmxzaXplKSB7Cj4gKwkJCWNhc2UgMDoKPiArCQkJCS8qIE5vIHZhcmlh YmxlIGRhdGEgbGVuZ3RoICovCj4gKwkJCQlkbGVuID0gMDsKPiArCQkJCWJyZWFrOwo+ICsJCQlj YXNlIDE6Cj4gKwkJCQlkbGVuID0gc2tiLT5kYXRhWygmcGt0c1tpXSktPmxvZmZdOwo+ICsJCQkJ aGNpX3NrYl9leHBlY3Qoc2tiKSArPSBkbGVuOwo+ICsKPiArCQkJCWlmIChza2JfdGFpbHJvb20o c2tiKSA8IGRsZW4pIHsKPiArCQkJCQlCVE1US19FUlIoIiVzLCBza2JfdGFpbHJvb20gaXMgbm90 IGVub3VnaCwgZGxlbjolZCEiLAo+ICsJCQkJCQkgIF9fZnVuY19fLCBkbGVuKTsKPiArCQkJCQlr ZnJlZV9za2Ioc2tiKTsKPiArCQkJCQlyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpOwo+ICsJCQkJ fQo+ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2UgMjoKPiArCQkJCS8qIERvdWJsZSBvY3RldCB2YXJp YWJsZSBsZW5ndGggKi8KPiArCQkJCWRsZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRh ICsKPiArCQkJCQkJCSAgKCZwa3RzW2ldKS0+bG9mZik7Cj4gKwkJCQloY2lfc2tiX2V4cGVjdChz a2IpICs9IGRsZW47Cj4gKwo+ICsJCQkJaWYgKHNrYl90YWlscm9vbShza2IpIDwgZGxlbikgewo+ ICsJCQkJCUJUTVRLX0VSUigiJXMsIHRhaWxyb29tIGlzbid0IGVub3VnaCBpbiBjYXNlIDIsIGRs ZW46JWQhIiwKPiArCQkJCQkJICBfX2Z1bmNfXywgZGxlbik7Cj4gKwkJCQkJa2ZyZWVfc2tiKHNr Yik7Cj4gKwkJCQkJcmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTsKPiArCQkJCX0KPiArCQkJCWJy ZWFrOwo+ICsJCQlkZWZhdWx0Ogo+ICsJCQkJLyogVW5zdXBwb3J0ZWQgdmFyaWFibGUgbGVuZ3Ro ICovCj4gKwkJCQlCVE1US19FUlIoIiVzLCBVbnN1cHBvcnRlZCB2YXJpYWJsZSBsZW5ndGghIiwg X19mdW5jX18pOwo+ICsJCQkJa2ZyZWVfc2tiKHNrYik7Cj4gKwkJCQlyZXR1cm4gRVJSX1BUUigt RUlMU0VRKTsKPiArCQkJfQo+ICsKPiArCQkJaWYgKCFkbGVuKSB7Cj4gKwkJCQkvKiBObyBtb3Jl IGRhdGEsIGNvbXBsZXRlIGZyYW1lICovCj4gKwkJCQkoJnBrdHNbaV0pLT5yZWN2KGhkZXYsIHNr Yik7Cj4gKwkJCQlza2IgPSBOVUxMOwo+ICsJCQl9Cj4gKwkJfSBlbHNlIHsKPiArCQkJLyogQ29t cGxldGUgZnJhbWUgKi8KPiArCQkJKCZwa3RzW2ldKS0+cmVjdihoZGV2LCBza2IpOwo+ICsJCQlz a2IgPSBOVUxMOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gc2tiOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGg0X3JlY3ZfcGt0IG10a19yZWN2X3BrdHNbXSA9IHsKPiArCXsg SDRfUkVDVl9BQ0wsICAgICAgLnJlY3YgPSBidG10a19yZWN2X2FjbCB9LAo+ICsJeyBINF9SRUNW X1NDTywgICAgICAucmVjdiA9IGhjaV9yZWN2X2ZyYW1lIH0sCj4gKwl7IEg0X1JFQ1ZfRVZFTlQs ICAgIC5yZWN2ID0gYnRtdGtfcmVjdl9ldmVudCB9LAo+ICt9Owo+ICsKPiAraW50IGJ0bXRrX3Jl Y3Yoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgY291bnQpCj4g K3sKPiArCXN0cnVjdCBidG10a19kZXYgKmJkZXYgPSBOVUxMOwo+ICsJY29uc3QgdW5zaWduZWQg Y2hhciAqcF9sZWZ0ID0gZGF0YTsKPiArCWludCBzel9sZWZ0ID0gY291bnQ7Cj4gKwlpbnQgZXJy Owo+ICsKPiArCWlmICghaGRldiB8fCAhZGF0YSkgewo+ICsJCUJUTVRLX0VSUigiJXMsIGludmFs aWQgcGFyYW1ldGVycyEiLCBfX2Z1bmNfXyk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJYmRldiA9IGhjaV9nZXRfZHJ2ZGF0YShoZGV2KTsKPiArCWlmICghYmRldikgewo+ICsJ CUJUTVRLX0VSUigiJXMsIGJkZXYgaXMgTlVMTCEiLCBfX2Z1bmNfXyk7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJd2hpbGUgKHN6X2xlZnQgPiAwKSB7Cj4gKwkJLyogIFRoZSBz ZXJpYWwgZGF0YSByZWNlaXZlZCBmcm9tIE1UNzYyMiBCVCBjb250cm9sbGVyIGlzCj4gKwkJICog IGF0IGFsbCB0aW1lIHBhZGRlZCBhcm91bmQgd2l0aCB0aGUgU1RQIGhlYWRlciBhbmQgdGFpbGVy Lgo+ICsJCSAqCj4gKwkJICogIEEgZnVsbCBTVFAgcGFja2V0IGlzIGxvb2tpbmcgbGlrZQo+ICsJ CSAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCQkgKiAgfCBTVFAg aGVhZGVyICB8ICBIOjQgICB8IFNUUCB0YWlsZXIgfAo+ICsJCSAqICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCQkgKiAgYnV0IGl0IGRvZXNuJ3QgZ3VhcmFudGVlIHRv IGNvbnRhaW4gYSBmdWxsIEg6NCBwYWNrZXQgd2hpY2gKPiArCQkgKiAgbWVhbnMgdGhhdCBpdCdz IHBvc3NpYmxlIGZvciBtdWx0aXBsZSBTVFAgcGFja2V0cyBmb3JtcyBhCj4gKwkJICogIGZ1bGwg SDo0IHBhY2tldCB0aGF0IG1lYW5zIGV4dHJhIFNUUCBoZWFkZXIgKyBsZW5ndGggZG9lc24ndAo+ ICsJCSAqICBpbmRpY2F0ZSBhIGZ1bGwgSDo0IGZyYW1lLCB0aGluZ3MgY2FuIGZyYWdtZW50LiBX aG9zZSBsZW5ndGgKPiArCQkgKiAgcmVjb3JkZWQgaW4gU1RQIGhlYWRlciBqdXN0IHNob3dzIHVw IHRoZSBtb3N0IGxlbmd0aCB0aGUKPiArCQkgKiAgSDo0IGVuZ2luZSBjYW4gaGFuZGxlIGN1cnJl bnRseS4KPiArCQkgKi8KPiArCj4gKwkJYmRldi0+cnhfc2tiID0gaDRfcmVjdl9idWYoaGRldiwg YmRldi0+cnhfc2tiLCBkYXRhLAo+ICsJCQkJCSAgIGNvdW50LCBtdGtfcmVjdl9wa3RzLAo+ICsJ CQkJCSAgIEFSUkFZX1NJWkUobXRrX3JlY3ZfcGt0cykpOwo+ICsKPiArCQlpZiAoSVNfRVJSKGJk ZXYtPnJ4X3NrYikpIHsKPiArCQkJZXJyID0gUFRSX0VSUihiZGV2LT5yeF9za2IpOwo+ICsJCQlw cl9lcnIoIkZyYW1lIHJlYXNzZW1ibHkgZmFpbGVkICglZCkiLCBlcnIpOwo+ICsJCQliZGV2LT5y eF9za2IgPSBOVUxMOwo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCj4gKwkJc3pfbGVmdCAt PSBjb3VudDsKPiArCQlwX2xlZnQgKz0gY291bnQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgYnRtdGtfZGlzcGF0Y2hfcGt0KHN0cnVjdCBoY2lfZGV2ICpo ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQo+ICt7Cj4gKwlzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2 ID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOwo+ICsJaW50IHN0YXRlID0gQlRNVEtfU1RBVEVfSU5J VDsKPiArCj4gKwlpZiAoKGJ0X2NiKHNrYiktPnBrdF90eXBlID09IEhDSV9BQ0xEQVRBX1BLVCkg JiYKPiArCSAgICBza2ItPmRhdGFbMF0gPT0gMHg2ZiAmJgo+ICsJICAgIHNrYi0+ZGF0YVsxXSA9 PSAweGZjKSB7Cj4gKwkJc3RhdGljIGludCBkdW1wX2RhdGFfY291bnRlcjsKPiArCQlzdGF0aWMg aW50IGR1bXBfZGF0YV9sZW5ndGg7Cj4gKwo+ICsJCXN0YXRlID0gYnRtdGtfZ2V0X2NoaXBfc3Rh dGUoYmRldik7Cj4gKwkJaWYgKHN0YXRlICE9IEJUTVRLX1NUQVRFX0ZXX0RVTVApIHsKPiArCQkJ QlRNVEtfSU5GTygiJXM6IEZXIGR1bXAgYmVnaW4iLCBfX2Z1bmNfXyk7Cj4gKwkJCWR1bXBfZGF0 YV9jb3VudGVyID0gMDsKPiArCQkJZHVtcF9kYXRhX2xlbmd0aCA9IDA7Cj4gKwkJCWJ0bXRrX3Nl dF9jaGlwX3N0YXRlKGJkZXYsIEJUTVRLX1NUQVRFX0ZXX0RVTVApOwo+ICsJCX0KPiArCj4gKwkJ ZHVtcF9kYXRhX2NvdW50ZXIrKzsKPiArCQlkdW1wX2RhdGFfbGVuZ3RoICs9IHNrYi0+bGVuOwo+ ICsKPiArCQlpZiAoZHVtcF9kYXRhX2NvdW50ZXIgJSAxMDAwID09IDApIHsKPiArCQkJQlRNVEtf SU5GTygiJXM6IEZXIGR1bXAgb24tZ29pbmcsIHRvdGFsX3BhY2tldCA9ICVkLCB0b3RhbF9sZW5n dGggPSAlZCIsCj4gKwkJCQkgICBfX2Z1bmNfXywgZHVtcF9kYXRhX2NvdW50ZXIsIGR1bXBfZGF0 YV9sZW5ndGgpOwo+ICsJCX0KPiArCj4gKwkJaWYgKGR1bXBfZGF0YV9jb3VudGVyIDwgMjApCj4g KwkJCUJUTVRLX0lORk8oIiVzOiBGVyBkdW1wIGRhdGEgKCVkKTogJXMiLAo+ICsJCQkJICAgX19m dW5jX18sIGR1bXBfZGF0YV9jb3VudGVyLCAmc2tiLT5kYXRhWzRdKTsKPiArCj4gKwkJaWYgKHNr Yi0+ZGF0YVtza2ItPmxlbiAtIDRdID09ICdlJyAmJgo+ICsJCSAgICBza2ItPmRhdGFbc2tiLT5s ZW4gLSAzXSA9PSAnbicgJiYKPiArCQkgICAgc2tiLT5kYXRhW3NrYi0+bGVuIC0gMl0gPT0gJ2Qn KSB7Cj4gKwkJCUJUTVRLX0lORk8oIiVzOiBGVyBkdW1wIGVuZCwgZHVtcF9kYXRhX2NvdW50ZXIg PSAlZCIsCj4gKwkJCQkgICBfX2Z1bmNfXywgZHVtcF9kYXRhX2NvdW50ZXIpOwo+ICsJCX0KPiAr CX0gZWxzZSBpZiAobWVtY21wKHNrYi0+ZGF0YSwgUkVTRVRfRVZFTlQsIHNpemVvZihSRVNFVF9F VkVOVCkpID09IDApIHsKPiArCQlCVE1US19JTkZPKCIlczogR2V0IFJFU0VUX0VWRU5UIiwgX19m dW5jX18pOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBidG10a19yZWN2X2Fj bChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKPiArewo+ICsJc3Ry dWN0IGJ0bXRrX2RldiAqYmRldiA9IE5VTEw7Cj4gKwo+ICsJaWYgKCFoZGV2IHx8ICFza2IpIHsK PiArCQlCVE1US19FUlIoIiVzLCBpbnZhbGlkIHBhcmFtZXRlcnMhIiwgX19mdW5jX18pOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWJkZXYgPSBoY2lfZ2V0X2RydmRhdGEoaGRl dik7Cj4gKwlpZiAoIWJkZXYgfHwgIWJkZXYtPndvcmtxdWV1ZSkgewo+ICsJCUJUTVRLX0VSUigi JXMsIGJkZXYgb3Igd29ya3F1ZXVlIGlzIGludmFsaWQhIiwgX19mdW5jX18pOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXNrYl9xdWV1ZV90YWlsKCZiZGV2LT5yeF9xLCBza2Ip Owo+ICsJcXVldWVfd29yayhiZGV2LT53b3JrcXVldWUsICZiZGV2LT5yeF93b3JrKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGJ0bXRrX3JlY3ZfZXZlbnQoc3RydWN0IGhjaV9k ZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCj4gK3sKPiArCXN0cnVjdCBidG10a19kZXYg KmJkZXYgPSBOVUxMOwo+ICsKPiArCWlmICghaGRldiB8fCAhc2tiKSB7Cj4gKwkJQlRNVEtfRVJS KCIlcywgaW52YWxpZCBwYXJhbWV0ZXJzISIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwliZGV2ID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOwo+ICsJaWYgKCFi ZGV2IHx8ICFiZGV2LT53b3JrcXVldWUpIHsKPiArCQlCVE1US19FUlIoIiVzLCBiZGV2IG9yIHdv cmtxdWV1ZSBpcyBpbnZhbGlkISIsIF9fZnVuY19fKTsKPiArCQlrZnJlZV9za2Ioc2tiKTsKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlza2JfcXVldWVfdGFpbCgmYmRldi0+cnhf cSwgc2tiKTsKPiArCXF1ZXVlX3dvcmsoYmRldi0+d29ya3F1ZXVlLCAmYmRldi0+cnhfd29yayk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBidG10a19tYWluX3NlbmRfY21kKHN0 cnVjdCBidG10a19kZXYgKmJkZXYsIGNvbnN0IHU4ICpjbWQsCj4gKwkJCWNvbnN0IGludCBjbWRf bGVuLCBjb25zdCB1OCAqZXZlbnQsIGNvbnN0IGludCBldmVudF9sZW4sCj4gKwkJCWludCBkZWxh eSwgaW50IHJldHJ5LCBpbnQgcGt0X3R5cGUpCj4gK3sKPiArCXN0cnVjdCBza19idWZmICpza2Ig PSBOVUxMOwo+ICsJaW50IHJldCA9IDA7Cj4gKwlpbnQgc3RhdGUgPSBCVE1US19TVEFURV9JTklU Owo+ICsKPiArCWlmICghYmRldiB8fCAhYmRldi0+aGRldiB8fCAhY21kIHx8IGNtZF9sZW4gPD0g MCkgewo+ICsJCUJUTVRLX0VSUigiJXMsIGludmFsaWQgcGFyYW1ldGVycyEiLCBfX2Z1bmNfXyk7 Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKG1l bWNtcChjbWQsIHdtdF9vdmVyX2hjaV9oZWFkZXIsIHNpemVvZih3bXRfb3Zlcl9oY2lfaGVhZGVy KSkgJiYKPiArCSAgICBwa3RfdHlwZSAhPSBCVE1US19UWF9BQ0xfRlJPTV9EUlYgJiYKPiArCSAg ICBiZGV2LT5wb3dlcl9zdGF0ZSAhPSBCVE1US19ET05HTEVfU1RBVEVfUE9XRVJfT04pIHsKPiAr CQlCVE1US19XQVJOKCIlczogY2hpcCBwb3dlciBpc24ndCBvbiwgaWdub3JlIHRoaXMgY29tbWFu ZCwgc3RhdGUgaXMgJWQiLAo+ICsJCQkgICBfX2Z1bmNfXywgYmRldi0+cG93ZXJfc3RhdGUpOwo+ ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlzdGF0ZSA9IGJ0bXRrX2dldF9jaGlwX3N0YXRl KGJkZXYpOwo+ICsJaWYgKHN0YXRlID09IEJUTVRLX1NUQVRFX0ZXX0RVTVApIHsKPiArCQlCVE1U S19XQVJOKCIlczogRlcgZHVtcGluZyBvbmdvaW5nLCBkb24ndCBzZW5kIGFueSBjbWQgdG8gRlch ISEiLCBfX2Z1bmNfXyk7Cj4gKwkJcmV0ID0gLTE7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsK PiArCXNrYiA9IGFsbG9jX3NrYihjbWRfbGVuICsgQlRfU0tCX1JFU0VSVkUsIEdGUF9BVE9NSUMp Owo+ICsJaWYgKCFza2IpIHsKPiArCQlCVE1US19FUlIoIiVzIGFsbG9jYXRlIHNrYiBmYWlsZWQh ISIsIF9fZnVuY19fKTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJc2tiX3Jlc2VydmUo c2tiLCA3KTsKPiArCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gSENJX0NPTU1BTkRfUEtUOwo+ICsJ bWVtY3B5KHNrYi0+ZGF0YSwgY21kLCBjbWRfbGVuKTsKPiArCXNrYi0+bGVuID0gY21kX2xlbjsK PiArCj4gKwlyZXQgPSBtYWluX2luZm8uaGlmX2hvb2suc2VuZF9hbmRfcmVjdihiZGV2LAo+ICsJ CQkJCSAgICAgICBza2IsCj4gKwkJCQkJICAgICAgIGV2ZW50LCBldmVudF9sZW4sCj4gKwkJCQkJ ICAgICAgIGRlbGF5LCByZXRyeSwgcGt0X3R5cGUpOwo+ICsKPiArCWlmIChyZXQgPCAwKQo+ICsJ CUJUTVRLX0VSUigiJXMgc2VuZF9hbmRfcmVjdiBmYWlsZWQhISIsIF9fZnVuY19fKTsKPiArCj4g K2V4aXQ6Cj4gKwlCVE1US19EQkcoIiVzIGVuZCEhIiwgX19mdW5jX18pOwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYnRtdGtfbG9hZF9jb2RlX2Zyb21fYmluKGNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqKmZ3X2Zpcm13YXJlLAo+ICsJCQkJICAgICBjaGFyICpiaW5fbmFt ZSwgc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJICAgICB1OCAqKmltYWdlLCB1MzIgKmNvZGVf bGVuKQo+ICt7Cj4gKwlpbnQgZXJyID0gMDsKPiArCWludCByZXRyeSA9IDEwOwo+ICsKPiArCWlm ICghYmluX25hbWUpIHsKPiArCQlCVE1US19FUlIoIiVzLCBpbnZhbGlkIHBhcmFtZXRlcnMhIiwg X19mdW5jX18pOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkbyB7Cj4gKwkJZXJyID0gcmVx dWVzdF9maXJtd2FyZShmd19maXJtd2FyZSwgYmluX25hbWUsIGRldik7Cj4gKwkJaWYgKGVyciA9 PSAwKSB7Cj4gKwkJCWJyZWFrOwo+ICsJCX0gZWxzZSBpZiAocmV0cnkgPD0gMCkgewo+ICsJCQkq ZndfZmlybXdhcmUgPSBOVUxMOwo+ICsJCQlCVE1US19JTkZPKCIlczogcmVxdWVzdF9maXJtd2Fy ZSAlZCB0aW1lcyBmYWlsLCBmaWxlIG5vdCBleGlzdCwgZXJyID0gJWQiLAo+ICsJCQkJICAgX19m dW5jX18sIDEwLCBlcnIpOwo+ICsJCQlyZXR1cm47Cj4gKwkJfQo+ICsJCUJUTVRLX0lORk8oIiVz OiByZXF1ZXN0X2Zpcm13YXJlIGZhaWwsIGZpbGUgbm90IGV4aXN0LCBlcnIgPSAlZCwgcmV0cnkg PSAlZCIsCj4gKwkJCSAgIF9fZnVuY19fLCBlcnIsIHJldHJ5KTsKPiArCQltc2xlZXAoMTAwKTsK PiArCX0gd2hpbGUgKHJldHJ5LS0gPiAwKTsKPiArCj4gKwkqaW1hZ2UgPSAodTggKikoKmZ3X2Zp cm13YXJlKS0+ZGF0YTsKPiArCSpjb2RlX2xlbiA9ICgqZndfZmlybXdhcmUpLT5zaXplOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBidG10a19wcmludF9idF9wYXRjaF9pbmZvKHN0cnVjdCBidG10 a19kZXYgKmJkZXYsIHU4ICpmd2J1ZikKPiArewo+ICsJc3RydWN0IF9QQVRDSF9IRUFERVIgKnBh dGNoaGRyID0gTlVMTDsKPiArCXN0cnVjdCBfR0xPQkFMX0RFU0NSICpnbG9iYWxkZXNyYyA9IE5V TEw7Cj4gKwo+ICsJaWYgKCFmd2J1Zikgewo+ICsJCUJUTVRLX1dBUk4oIiVzLCBmd2J1ZiBpcyBO VUxMISIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcGF0Y2hoZHIgPSAo c3RydWN0IF9QQVRDSF9IRUFERVIgKilmd2J1ZjsKPiArCj4gKwlpZiAoaXNfbXQ3OTIyKGJkZXYt PmNoaXBfaWQpIHx8IGlzX210Nzk2MShiZGV2LT5jaGlwX2lkKSkKPiArCQlnbG9iYWxkZXNyYyA9 IChzdHJ1Y3QgX0dMT0JBTF9ERVNDUiAqKShmd2J1ZiArIEZXX1JPTV9QQVRDSF9IRUFERVJfU0la RSk7Cj4gKwo+ICsJQlRNVEtfSU5GTygiW2J0bXRrXSA9PT09PT09PT09PT09PT0gUGF0Y2ggSW5m byA9PT09PT09PT09PT09PSIpOwo+ICsJaWYgKHBhdGNoaGRyKSB7Cj4gKwkJQlRNVEtfSU5GTygi W2J0bXRrXSBCdWlsdCBUaW1lID0gJXMiLCBwYXRjaGhkci0+dWNkYXRldGltZSk7Cj4gKwkJQlRN VEtfSU5GTygiW2J0bXRrXSBIdyBWZXIgPSAweCUwNHgiLCBwYXRjaGhkci0+dTJod3Zlcik7Cj4g KwkJQlRNVEtfSU5GTygiW2J0bXRrXSBTdyBWZXIgPSAweCUwNHgiLCBwYXRjaGhkci0+dTJzd3Zl cik7Cj4gKwkJQlRNVEtfSU5GTygiW2J0bXRrXSBNYWdpYyBOdW1iZXIgPSAweCUwOHgiLCBwYXRj aGhkci0+dTRtYWdpY251bSk7Cj4gKwo+ICsJCUJUTVRLX0lORk8oIltidG10a10gUGxhdGZvcm0g PSAlYyVjJWMlYyIsCj4gKwkJCSAgIHBhdGNoaGRyLT51Y3BsYXRmb3JtWzBdLAo+ICsJCQkgICBw YXRjaGhkci0+dWNwbGF0Zm9ybVsxXSwKPiArCQkJICAgcGF0Y2hoZHItPnVjcGxhdGZvcm1bMl0s Cj4gKwkJCSAgIHBhdGNoaGRyLT51Y3BsYXRmb3JtWzNdKTsKPiArCX0KPiArCj4gKwlpZiAoZ2xv YmFsZGVzcmMpIHsKPiArCQlCVE1US19JTkZPKCJbYnRtdGtdIFBhdGNoIFZlciA9IDB4JTA4eCIs IGdsb2JhbGRlc3JjLT51NHBhdGNodmVyKTsKPiArCQlCVE1US19JTkZPKCJbYnRtdGtdIFNlY3Rp b24gbnVtID0gMHglMDh4IiwgZ2xvYmFsZGVzcmMtPnU0c2VjdGlvbm51bSk7Cj4gKwl9Cj4gKwo+ ICsJQlRNVEtfSU5GTygiW2J0bXRrXSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBidG10a19wcmludF93aWZpX3BhdGNo X2luZm8oc3RydWN0IGJ0bXRrX2RldiAqYmRldiwgdTggKmZ3YnVmKQo+ICt7Cj4gKwlzdHJ1Y3Qg X1BBVENIX0hFQURFUiAqcGF0Y2hoZHIgPSBOVUxMOwo+ICsJc3RydWN0IF9HTE9CQUxfREVTQ1Ig Kmdsb2JhbGRlc3JjID0gTlVMTDsKPiArCj4gKwlpZiAoIWZ3YnVmKSB7Cj4gKwkJQlRNVEtfV0FS TigiJXMsIGZ3YnVmIGlzIE5VTEwhIiwgX19mdW5jX18pOwo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlwYXRjaGhkciA9IChzdHJ1Y3QgX1BBVENIX0hFQURFUiAqKWZ3YnVmOwo+ICsKPiArCWlm IChpc19tdDc5MjIoYmRldi0+Y2hpcF9pZCkgfHwgaXNfbXQ3OTYxKGJkZXYtPmNoaXBfaWQpKQo+ ICsJCWdsb2JhbGRlc3JjID0gKHN0cnVjdCBfR0xPQkFMX0RFU0NSICopKGZ3YnVmICsgRldfUk9N X1BBVENIX0hFQURFUl9TSVpFKTsKPiArCj4gKwlCVE1US19JTkZPKCJbYnRtdGtdID09PT09PT09 PT09PT09PSBXaWZpIFBhdGNoIEluZm8gPT09PT09PT09PT09PT0iKTsKPiArCWlmIChwYXRjaGhk cikgewo+ICsJCUJUTVRLX0lORk8oIltidG10a10gQnVpbHQgVGltZSA9ICVzIiwgcGF0Y2hoZHIt PnVjZGF0ZXRpbWUpOwo+ICsJCUJUTVRLX0lORk8oIltidG10a10gSHcgVmVyID0gMHglMDR4IiwK PiArCQkJICAgKChwYXRjaGhkci0+dTJod3ZlciAmIDB4MDBmZikgPDwgOCkgfAo+ICsJCQkgICAo KHBhdGNoaGRyLT51Mmh3dmVyICYgMHhmZjAwKSA+PiA4KSk7Cj4gKwkJQlRNVEtfSU5GTygiW2J0 bXRrXSBTdyBWZXIgPSAweCUwNHgiLAo+ICsJCQkgICAoKHBhdGNoaGRyLT51MnN3dmVyICYgMHgw MGZmKSA8PCA4KSB8Cj4gKwkJCSAgICgocGF0Y2hoZHItPnUyc3d2ZXIgJiAweGZmMDApID4+IDgp KTsKPiArCQlCVE1US19JTkZPKCJbYnRtdGtdIE1hZ2ljIE51bWJlciA9IDB4JTA4eCIsIGJlMmNw dTMyKHBhdGNoaGRyLT51NG1hZ2ljbnVtKSk7Cj4gKwo+ICsJCUJUTVRLX0lORk8oIltidG10a10g UGxhdGZvcm0gPSAlYyVjJWMlYyIsCj4gKwkJCSAgIHBhdGNoaGRyLT51Y3BsYXRmb3JtWzBdLAo+ ICsJCQkgICBwYXRjaGhkci0+dWNwbGF0Zm9ybVsxXSwKPiArCQkJICAgcGF0Y2hoZHItPnVjcGxh dGZvcm1bMl0sCj4gKwkJCSAgIHBhdGNoaGRyLT51Y3BsYXRmb3JtWzNdKTsKPiArCX0KPiArCj4g KwlpZiAoZ2xvYmFsZGVzcmMpIHsKPiArCQlCVE1US19JTkZPKCJbYnRtdGtdIFBhdGNoIFZlciA9 IDB4JTA4eCIsCj4gKwkJCSAgIGJlMmNwdTMyKGdsb2JhbGRlc3JjLT51NHBhdGNodmVyKSk7Cj4g KwkJQlRNVEtfSU5GTygiW2J0bXRrXSBTZWN0aW9uIG51bSA9IDB4JTA4eCIsCj4gKwkJCSAgIGJl MmNwdTMyKGdsb2JhbGRlc3JjLT51NHNlY3Rpb25udW0pKTsKPiArCX0gZWxzZSB7Cj4gKwkJQlRN VEtfV0FSTigiJXMsIGdsb2JhbGRlc3JjIGlzIE5VTEwhIiwgX19mdW5jX18pOwo+ICsJfQo+ICsK PiArCUJUTVRLX0lORk8oIltidG10a10gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0iKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBidG10a19zZW5kX3dtdF9kb3dubG9h ZF9jbWQoc3RydWN0IGJ0bXRrX2RldiAqYmRldiwgdTggKmNtZCwKPiArCQkJCSAgICAgICBpbnQg Y21kX2xlbiwgdTggKmV2ZW50LCBpbnQgZXZlbnRfbGVuLAo+ICsJCQkJICAgICAgIHN0cnVjdCBf U0VDVElPTl9NQVAgKnNlY3Rpb25tYXAsCj4gKwkJCQkgICAgICAgdTggZndfc3RhdGUsIHU4IGRt YV9mbGFnLCBib29sIHBhdGNoX2ZsYWcpCj4gK3sKPiArCWludCBwYXlsb2FkX2xlbiA9IDA7Cj4g KwlpbnQgcmV0ID0gLTE7Cj4gKwlpbnQgaSA9IDA7Cj4gKwl1MzIgcmV2ZXJ0X3NlY3NwZWMgPSAw Owo+ICsKPiArCWlmICghYmRldiB8fCAhY21kIHx8ICFldmVudCB8fCAhc2VjdGlvbm1hcCkgewo+ ICsJCUJUTVRLX0VSUigiJXM6IGludmFsaWQgcGFyYW1ldGVyISIsIF9fZnVuY19fKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8qIHByZXBhcmUgSENJIGhlYWRlciAqLwo+ICsJY21k WzBdID0gMHgwMTsKPiArCWNtZFsxXSA9IDB4NkY7Cj4gKwljbWRbMl0gPSAweEZDOwo+ICsKPiAr CS8qIHByZXBhcmUgV01UIGhlYWRlciAqLwo+ICsJY21kWzRdID0gMHgwMTsKPiArCWNtZFs1XSA9 IDB4MDE7Cj4gKwo+ICsJaWYgKGZ3X3N0YXRlID09IDApIHsKPiArCQkvKiBwcmVwYXJlIFdNVCBE TCBjbWQgKi8KPiArCQlwYXlsb2FkX2xlbiA9IFNFQ19NQVBfTkVFRF9TRU5EX1NJWkUgKyAyOwo+ ICsKPiArCQljbWRbM10gPSAocGF5bG9hZF9sZW4gKyA0KSAmIDB4RkY7Cj4gKwkJY21kWzZdID0g cGF5bG9hZF9sZW4gJiAweEZGOwo+ICsJCWNtZFs3XSA9IChwYXlsb2FkX2xlbiA+PiA4KSAmIDB4 RkY7Cj4gKwkJY21kWzhdID0gMHgwMDsKPiArCQljbWRbOV0gPSBkbWFfZmxhZzsgLyogMTp1c2lu ZyBETUEgdG8gZG93bmxvYWQsIDA6dXNpbmcgbGVnYWN5IHdtdCBjbWQqLwo+ICsJCWNtZF9sZW4g PSBTRUNfTUFQX05FRURfU0VORF9TSVpFICsgUEFUQ0hfSEVBREVSX1NJWkU7Cj4gKwo+ICsJCWlm IChwYXRjaF9mbGFnKQo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgU0VDVElPTl9TUEVDX05VTTsgaSsr KSB7Cj4gKwkJCQlyZXZlcnRfc2Vjc3BlYyA9IGJlMmNwdTMyKHNlY3Rpb25tYXAtPnU0c2Vjc3Bl Y1tpXSk7Cj4gKwkJCQltZW1jcHkoJmNtZFtQQVRDSF9IRUFERVJfU0laRV0gKyBpICogc2l6ZW9m KHUzMiksCj4gKwkJCQkgICAgICAgKHU4ICopJnJldmVydF9zZWNzcGVjLCBzaXplb2YodTMyKSk7 Cj4gKwkJCX0KPiArCQllbHNlCj4gKwkJCW1lbWNweSgmY21kW1BBVENIX0hFQURFUl9TSVpFXSwg KHU4ICopKHNlY3Rpb25tYXAtPnU0c2Vjc3BlYyksCj4gKwkJCSAgICAgICBTRUNfTUFQX05FRURf U0VORF9TSVpFKTsKPiArCj4gKwkJcmV0ID0gYnRtdGtfbWFpbl9zZW5kX2NtZChiZGV2LCBjbWQs IGNtZF9sZW4sCj4gKwkJCQkJICBldmVudCwgZXZlbnRfbGVuLCBERUxBWV9USU1FUywgUkVUUllf VElNRVMsCj4gKwkJCQkJICBCVE1US19UWF9DTURfRlJPTV9EUlYpOwo+ICsJCWlmIChyZXQgPCAw KSB7Cj4gKwkJCUJUTVRLX0VSUigiJXM6IHNlbmQgd21kIGRsIGNtZCBmYWlsZWQsIHRlcm1pbmF0 ZSEiLCBfX2Z1bmNfXyk7Cj4gKwkJCXJldHVybiBQQVRDSF9FUlI7Cj4gKwkJfQo+ICsKPiArCQlp ZiAoYmRldi0+cmVjdl9ldnRfbGVuID49IGV2ZW50X2xlbikKPiArCQkJcmV0dXJuIGJkZXYtPmlv X2J1ZltQQVRDSF9TVEFUVVNdOwo+ICsKPiArCQlyZXQgPSBQQVRDSF9FUlI7Cj4gKwl9IGVsc2Ug ewo+ICsJCUJUTVRLX0VSUigiJXM6IGZ3IHN0YXRlIGlzIGVycm9yISIsIF9fZnVuY19fKTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJ0bXRrX2xvYWRf ZndfcGF0Y2hfdXNpbmdfd210X2NtZChzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2LAo+ICsJCQkJCSAg ICAgdTggKmltYWdlLCB1OCAqZndidWYsIHU4ICpldmVudCwKPiArCQkJCQkgICAgIGludCBldmVu dF9sZW4sIHUzMiBwYXRjaF9sZW4sIGludCBvZmZzZXQpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ ICsJdTMyIGN1cl9sZW4gPSAwOwo+ICsJczMyIHNlbnRfbGVuOwo+ICsJaW50IGZpcnN0X2Jsb2Nr ID0gMTsKPiArCXU4IHBoYXNlOwo+ICsJaW50IGRlbGF5ID0gUEFUQ0hfRE9XTkxPQURfUEhBU0Ux XzJfREVMQVlfVElNRTsKPiArCWludCByZXRyeSA9IFBBVENIX0RPV05MT0FEX1BIQVNFMV8yX1JF VFJZOwo+ICsKPiArCWlmICghYmRldiB8fCAhaW1hZ2UgfHwgIWZ3YnVmKSB7Cj4gKwkJQlRNVEtf V0FSTigiJXMsIGludmFsaWQgcGFyYW1ldGVycyEiLCBfX2Z1bmNfXyk7Cj4gKwkJcmV0ID0gLTE7 Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCS8qIGxvYWRpbmcgcm9tIHBhdGNoICovCj4g Kwl3aGlsZSAoMSkgewo+ICsJCXMzMiBzZW50X2xlbl9tYXggPSBVUExPQURfUEFUQ0hfVU5JVCAt IFBBVENIX0hFQURFUl9TSVpFOwo+ICsKPiArCQlzZW50X2xlbiA9IChwYXRjaF9sZW4gLSBjdXJf bGVuKSA+PSBzZW50X2xlbl9tYXggPwo+ICsJCQkgICAgc2VudF9sZW5fbWF4IDogKHBhdGNoX2xl biAtIGN1cl9sZW4pOwo+ICsKPiArCQlpZiAoc2VudF9sZW4gPiAwKSB7Cj4gKwkJCWlmIChmaXJz dF9ibG9jayA9PSAxKSB7Cj4gKwkJCQlpZiAoc2VudF9sZW4gPCBzZW50X2xlbl9tYXgpCj4gKwkJ CQkJcGhhc2UgPSBQQVRDSF9QSEFTRTM7Cj4gKwkJCQllbHNlCj4gKwkJCQkJcGhhc2UgPSBQQVRD SF9QSEFTRTE7Cj4gKwkJCQlmaXJzdF9ibG9jayA9IDA7Cj4gKwkJCX0gZWxzZSBpZiAoc2VudF9s ZW4gPT0gc2VudF9sZW5fbWF4KSB7Cj4gKwkJCQlpZiAocGF0Y2hfbGVuIC0gY3VyX2xlbiA9PSBz ZW50X2xlbl9tYXgpCj4gKwkJCQkJcGhhc2UgPSBQQVRDSF9QSEFTRTM7Cj4gKwkJCQllbHNlCj4g KwkJCQkJcGhhc2UgPSBQQVRDSF9QSEFTRTI7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlwaGFzZSA9 IFBBVENIX1BIQVNFMzsKPiArCQkJfQo+ICsKPiArCQkJLyogcHJlcGFyZSBIQ0kgaGVhZGVyICov Cj4gKwkJCWltYWdlWzBdID0gMHgwMjsKPiArCQkJaW1hZ2VbMV0gPSAweDZGOwo+ICsJCQlpbWFn ZVsyXSA9IDB4RkM7Cj4gKwkJCWltYWdlWzNdID0gKHNlbnRfbGVuICsgNSkgJiAweEZGOwo+ICsJ CQlpbWFnZVs0XSA9ICgoc2VudF9sZW4gKyA1KSA+PiA4KSAmIDB4RkY7Cj4gKwo+ICsJCQkvKiBw cmVwYXJlIFdNVCBoZWFkZXIgKi8KPiArCQkJaW1hZ2VbNV0gPSAweDAxOwo+ICsJCQlpbWFnZVs2 XSA9IDB4MDE7Cj4gKwkJCWltYWdlWzddID0gKHNlbnRfbGVuICsgMSkgJiAweEZGOwo+ICsJCQlp bWFnZVs4XSA9ICgoc2VudF9sZW4gKyAxKSA+PiA4KSAmIDB4RkY7Cj4gKwo+ICsJCQlpbWFnZVs5 XSA9IHBoYXNlOwo+ICsJCQltZW1jcHkoJmltYWdlWzEwXSwgZndidWYgKyBvZmZzZXQgKyBjdXJf bGVuLCBzZW50X2xlbik7Cj4gKwkJCWlmIChwaGFzZSA9PSBQQVRDSF9QSEFTRTMpIHsKPiArCQkJ CWRlbGF5ID0gUEFUQ0hfRE9XTkxPQURfUEhBU0UzX0RFTEFZX1RJTUU7Cj4gKwkJCQlyZXRyeSA9 IFBBVENIX0RPV05MT0FEX1BIQVNFM19SRVRSWTsKPiArCQkJfQo+ICsKPiArCQkJY3VyX2xlbiAr PSBzZW50X2xlbjsKPiArCQkJQlRNVEtfREJHKCIlczogc2VudF9sZW4gPSAlZCwgY3VyX2xlbiA9 ICVkLCBwaGFzZSA9ICVkIiwgX19mdW5jX18sCj4gKwkJCQkgIHNlbnRfbGVuLCBjdXJfbGVuLCBw aGFzZSk7Cj4gKwo+ICsJCQlyZXQgPSBidG10a19tYWluX3NlbmRfY21kKGJkZXYsIGltYWdlLCBz ZW50X2xlbiArIFBBVENIX0hFQURFUl9TSVpFLAo+ICsJCQkJCQkgIGV2ZW50LCBldmVudF9sZW4s IGRlbGF5LCByZXRyeSwKPiArCQkJCQkJICBCVE1US19UWF9BQ0xfRlJPTV9EUlYpOwo+ICsJCQlp ZiAocmV0IDwgMCkgewo+ICsJCQkJQlRNVEtfSU5GTygiJXM6IHNlbmQgcGF0Y2ggZmFpbGVkLCB0 ZXJtaW5hdGUiLCBfX2Z1bmNfXyk7Cj4gKwkJCQlnb3RvIGV4aXQ7Cj4gKwkJCX0KPiArCQl9IGVs c2Ugewo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICtleGl0Ogo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBidG10a19zZW5kX2Z3X3JvbV9wYXRjaF83OXh4KHN0 cnVjdCBidG10a19kZXYgKmJkZXYsCj4gKwkJCQkJdTggKmZ3YnVmLCBib29sIHBhdGNoX2ZsYWcp Cj4gK3sKPiArCXU4ICpwb3M7Cj4gKwlpbnQgbG9vcF9jb3VudCA9IDA7Cj4gKwlpbnQgcmV0ID0g MDsKPiArCXUzMiBzZWN0aW9uX251bSA9IDA7Cj4gKwl1MzIgc2VjdGlvbl9vZmZzZXQgPSAwOwo+ ICsJdTMyIGRsX3NpemUgPSAwOwo+ICsJaW50IHBhdGNoX3N0YXR1cyA9IDA7Cj4gKwlpbnQgcmV0 cnkgPSAyMDsKPiArCXU4IGRtYV9mbGFnID0gUEFUQ0hfRE9XTkxPQURfVVNJTkdfV01UOwo+ICsJ c3RydWN0IF9TRUNUSU9OX01BUCAqc2VjdGlvbm1hcDsKPiArCXN0cnVjdCBfR0xPQkFMX0RFU0NS ICpnbG9iYWxkZXNjcjsKPiArCXU4IGV2ZW50W10gPSB7MHgwNCwgMHhFNCwgMHgwNSwgMHgwMiwg MHgwMSwgMHgwMSwgMHgwMCwgMHgwMH07IC8qIGV2ZW50WzddIGlzIHN0YXR1cyovCj4gKwo+ICsJ aWYgKCFmd2J1Zikgewo+ICsJCUJUTVRLX1dBUk4oIiVzLCBmd2J1ZiBpcyBOVUxMISIsIF9fZnVu Y19fKTsKPiArCQlyZXQgPSAtMTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJZ2xvYmFs ZGVzY3IgPSAoc3RydWN0IF9HTE9CQUxfREVTQ1IgKikoZndidWYgKyBGV19ST01fUEFUQ0hfSEVB REVSX1NJWkUpOwo+ICsKPiArCUJUTVRLX0lORk8oIiVzOiBsb2FkaW5nIHJvbSBwYXRjaC4uLlxu IiwgX19mdW5jX18pOwo+ICsKPiArCWlmIChwYXRjaF9mbGFnKQo+ICsJCXNlY3Rpb25fbnVtID0g YmUyY3B1MzIoZ2xvYmFsZGVzY3ItPnU0c2VjdGlvbm51bSk7Cj4gKwllbHNlCj4gKwkJc2VjdGlv bl9udW0gPSBnbG9iYWxkZXNjci0+dTRzZWN0aW9ubnVtOwo+ICsJQlRNVEtfSU5GTygiJXM6IHNl Y3Rpb25fbnVtID0gMHglMDh4XG4iLCBfX2Z1bmNfXywgc2VjdGlvbl9udW0pOwo+ICsKPiArCXBv cyA9IGttYWxsb2MoVVBMT0FEX1BBVENIX1VOSVQsIEdGUF9BVE9NSUMpOwo+ICsJaWYgKCFwb3Mp IHsKPiArCQlCVE1US19FUlIoIiVzOiBhbGxvYyBtZW1vcnkgZmFpbGVkIiwgX19mdW5jX18pOwo+ ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlkbyB7Cj4gKwkJc2VjdGlvbm1hcCA9IChzdHJ1 Y3QgX1NFQ1RJT05fTUFQICopKGZ3YnVmICsgRldfUk9NX1BBVENIX0hFQURFUl9TSVpFICsKPiAr CQkJCUZXX1JPTV9QQVRDSF9HRF9TSVpFICsgRldfUk9NX1BBVENIX1NFQ19NQVBfU0laRSAqIGxv b3BfY291bnQpOwo+ICsJCWRtYV9mbGFnID0gUEFUQ0hfRE9XTkxPQURfVVNJTkdfV01UOwo+ICsJ CWlmIChwYXRjaF9mbGFnKSB7Cj4gKwkJCS8qIHdpZmkgaXMgYmlnLWVuZGlhbiAqLwo+ICsJCQlz ZWN0aW9uX29mZnNldCA9IGJlMmNwdTMyKHNlY3Rpb25tYXAtPnU0c2Vjb2Zmc2V0KTsKPiArCQkJ ZGxfc2l6ZSA9IGJlMmNwdTMyKHNlY3Rpb25tYXAtPmJpbl9pbmZvX3NwZWMudTRkbHNpemUpOwo+ ICsJCQlkbWFfZmxhZyA9IGJlMmNwdTMyKHNlY3Rpb25tYXAtPmJpbl9pbmZvX3NwZWMudTRkbG1v ZGVjcmN0eXBlKSAmIDB4RkY7Cj4gKwkJfSBlbHNlIHsKPiArCQkJLyogQlQgaXMgbGl0dGxlLWVu ZGlhbiAqLwo+ICsJCQlzZWN0aW9uX29mZnNldCA9IHNlY3Rpb25tYXAtPnU0c2Vjb2Zmc2V0Owo+ ICsJCQlkbF9zaXplID0gc2VjdGlvbm1hcC0+YmluX2luZm9fc3BlYy51NGRsc2l6ZTsKPiArCQkJ LyoKPiArCQkJICogbG9vcF9jb3VudCA9IDA6IEJHRiBwYXRjaAo+ICsJCQkgKiAgICAgICAgICAg ICAgMTogQlQgSUxNCj4gKwkJCSAqIG9ubHkgQlQgSUxNIHN1cHBvcnQgREwgRE1BIGZvciBCdXp6 YXJkCj4gKwkJCSAqLwo+ICsJCQlkbWFfZmxhZyA9IGxlMmNwdTMyKHNlY3Rpb25tYXAtPmJpbl9p bmZvX3NwZWMudTRkbG1vZGVjcmN0eXBlKSAmIDB4RkY7Cj4gKwkJfQo+ICsJCUJUTVRLX0lORk8o IiVzOmxvb3A9JWQsIHNlY19vZmZzZXQ9MHglMDh4LCBkbCBwYXRjaF9sZW49MHglMDh4LCBkbCBt b2RlPSVkIiwKPiArCQkJICAgX19mdW5jX18sIGxvb3BfY291bnQsIHNlY3Rpb25fb2Zmc2V0LCBk bF9zaXplLCBkbWFfZmxhZyk7Cj4gKwkJaWYgKGRsX3NpemUgPiAwKSB7Cj4gKwkJCXJldHJ5ID0g MjA7Cj4gKwkJCWRvIHsKPiArCQkJCXBhdGNoX3N0YXR1cyA9IGJ0bXRrX3NlbmRfd210X2Rvd25s b2FkX2NtZChiZGV2LCBwb3MsIDAsCj4gKwkJCQkJCQkJCSAgIGV2ZW50LCBzaXplb2YoZXZlbnQp IC0gMSwKPiArCQkJCQkJCQkJICAgc2VjdGlvbm1hcCwgMCwgZG1hX2ZsYWcsCj4gKwkJCQkJCQkJ CSAgIHBhdGNoX2ZsYWcpOwo+ICsJCQkJQlRNVEtfSU5GTygiJXM6IHBhdGNoX3N0YXR1cyAlZCIs IF9fZnVuY19fLCBwYXRjaF9zdGF0dXMpOwo+ICsKPiArCQkJCWlmIChwYXRjaF9zdGF0dXMgPiBQ QVRDSF9SRUFEWSB8fCBwYXRjaF9zdGF0dXMgPT0gUEFUQ0hfRVJSKSB7Cj4gKwkJCQkJQlRNVEtf RVJSKCIlczogcGF0Y2hfc3RhdHVzIGVycm9yIiwgX19mdW5jX18pOwo+ICsJCQkJCXJldCA9IC0x Owo+ICsJCQkJCWdvdG8gZXJyOwo+ICsJCQkJfSBlbHNlIGlmIChwYXRjaF9zdGF0dXMgPT0gUEFU Q0hfUkVBRFkpIHsKPiArCQkJCQlCVE1US19JTkZPKCIlczogbm8gbmVlZCB0byBsb2FkIHJvbSBw YXRjaCBzZWN0aW9uJWQiLAo+ICsJCQkJCQkgICBfX2Z1bmNfXywgbG9vcF9jb3VudCk7Cj4gKwkJ CQkJZ290byBuZXh0X3NlY3Rpb247Cj4gKwkJCQl9IGVsc2UgaWYgKHBhdGNoX3N0YXR1cyA9PSBQ QVRDSF9JU19ET1dOTE9BRF9CWV9PVEhFUikgewo+ICsJCQkJCW1zbGVlcCgxMDApOwo+ICsJCQkJ CXJldHJ5LS07Cj4gKwkJCQl9IGVsc2UgaWYgKHBhdGNoX3N0YXR1cyA9PSBQQVRDSF9ORUVEX0RP V05MT0FEKSB7Cj4gKwkJCQkJYnJlYWs7ICAvKiBEb3dubG9hZCBST00gcGF0Y2ggZGlyZWN0bHkg Ki8KPiArCQkJCX0KPiArCQkJfSB3aGlsZSAocmV0cnkgPiAwKTsKPiArCj4gKwkJCWlmIChwYXRj aF9zdGF0dXMgPT0gUEFUQ0hfSVNfRE9XTkxPQURfQllfT1RIRVIpIHsKPiArCQkJCUJUTVRLX1dB Uk4oIiVzOiBIb2xkIGJ5IGFub3RoZXIgZnVuIG1vcmUgdGhhbiAyIHNlY29uZHMiLCBfX2Z1bmNf Xyk7Cj4gKwkJCQlyZXQgPSAtMTsKPiArCQkJCWdvdG8gZXJyOwo+ICsJCQl9Cj4gKwo+ICsJCQlp ZiAoZG1hX2ZsYWcgPT0gUEFUQ0hfRE9XTkxPQURfVVNJTkdfRE1BICYmIG1haW5faW5mby5oaWZf aG9vay5kbF9kbWEpIHsKPiArCQkJCS8qIHVzaW5nIERNQSB0byBkb3dubG9hZCBmdyBwYXRjaCov Cj4gKwkJCQlyZXQgPSBtYWluX2luZm8uaGlmX2hvb2suZGxfZG1hKGJkZXYsCj4gKwkJCQkJcG9z LCBmd2J1ZiwKPiArCQkJCQlkbF9zaXplLCBzZWN0aW9uX29mZnNldCk7Cj4gKwkJCQlpZiAocmV0 IDwgMCkgewo+ICsJCQkJCUJUTVRLX0VSUigiJXM6IGRsIHVzaW5nIGRtYSBmYWlsZWQhIiwgX19m dW5jX18pOwo+ICsJCQkJCWdvdG8gZXJyOwo+ICsJCQkJfQo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJ LyogdXNpbmcgbGVnYWN5IHdtdCBjbWQgdG8gZG93bmxvYWQgZncgcGF0Y2ggKi8KPiArCQkJCXJl dCA9IGJ0bXRrX2xvYWRfZndfcGF0Y2hfdXNpbmdfd210X2NtZChiZGV2LCBwb3MsIGZ3YnVmLCBl dmVudCwKPiArCQkJCQkJCQkJc2l6ZW9mKGV2ZW50KSAtIDEsCj4gKwkJCQkJCQkJCWRsX3NpemUs IHNlY3Rpb25fb2Zmc2V0KTsKPiArCQkJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCQkJQlRNVEtfRVJS KCIlczogZGwgdXNpbmcgd210IGNtZCBmYWlsZWQhIiwgX19mdW5jX18pOwo+ICsJCQkJCWdvdG8g ZXJyOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJfQo+ICtuZXh0X3NlY3Rpb246Cj4gKwkJY29udGlu dWU7Cj4gKwl9IHdoaWxlICgrK2xvb3BfY291bnQgPCBzZWN0aW9uX251bSk7Cj4gKwo+ICtlcnI6 Cj4gKwlrZnJlZShwb3MpOwo+ICsJcG9zID0gTlVMTDsKPiArCj4gK2V4aXQ6Cj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtpbnQgYnRtdGtfbG9hZF9yb21fcGF0Y2hfNzl4eChzdHJ1Y3QgYnRt dGtfZGV2ICpiZGV2LCBib29sIHBhdGNoX2ZsYWcpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJ Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19maXJtd2FyZSA9IE5VTEw7Cj4gKwl1OCAqcm9tX3Bh dGNoID0gTlVMTDsKPiArCXVuc2lnbmVkIGludCByb21fcGF0Y2hfbGVuID0gMDsKPiArCj4gKwlC VE1US19FUlIoIiVzLCBwYXRjaF9mbGFnID0gJWQhIiwgX19mdW5jX18sIHBhdGNoX2ZsYWcpOwo+ ICsKPiArCWlmICghYmRldikgewo+ICsJCUJUTVRLX0VSUigiJXMsIGludmFsaWQgcGFyYW1ldGVy cyEiLCBfX2Z1bmNfXyk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKHBh dGNoX2ZsYWcpIHsKPiArCQlpZiAoYmRldi0+Zmxhdm9yKQo+ICsJCQkvKiBpZiBmbGF2b3IgZXF1 YWxzIDEsIGl0IHJlcHJlc2VudCA3OTIwLCBlbHNlIGl0IHJlcHJlc2VudCA3OTIxKi8KPiArCQkJ c25wcmludGYoYmRldi0+cm9tX3BhdGNoX2Jpbl9maWxlX25hbWUsIE1BWF9CSU5fRklMRV9OQU1F X0xFTiwKPiArCQkJCSAiV0lGSV9NVCUwNHhfcGF0Y2hfbWN1XzFhXyV4X2hkci5iaW4iLAo+ICsJ CQkJIGJkZXYtPmNoaXBfaWQgJiAweGZmZmYsIChiZGV2LT5md192ZXJzaW9uICYgMHhmZikgKyAx KTsKPiArCQllbHNlCj4gKwkJCXNucHJpbnRmKGJkZXYtPnJvbV9wYXRjaF9iaW5fZmlsZV9uYW1l LCBNQVhfQklOX0ZJTEVfTkFNRV9MRU4sCj4gKwkJCQkgIldJRklfTVQlMDR4X3BhdGNoX21jdV8x XyV4X2hkci5iaW4iLAo+ICsJCQkJIGJkZXYtPmNoaXBfaWQgJiAweGZmZmYsIChiZGV2LT5md192 ZXJzaW9uICYgMHhmZikgKyAxKTsKPiArCX0KPiArCj4gKwlidG10a19sb2FkX2NvZGVfZnJvbV9i aW4oJmZ3X2Zpcm13YXJlLCBiZGV2LT5yb21fcGF0Y2hfYmluX2ZpbGVfbmFtZSwgTlVMTCwKPiAr CQkJCSAmcm9tX3BhdGNoLCAmcm9tX3BhdGNoX2xlbik7Cj4gKwo+ICsJaWYgKCFyb21fcGF0Y2gp IHsKPiArCQlCVE1US19FUlIoIiVzOiBwbGVhc2UgYXNzaWduIGEgcm9tIHBhdGNoKC9ldGMvZmly bXdhcmUvJXMpb3IoL2xpYi9maXJtd2FyZS8lcykiLAo+ICsJCQkgIF9fZnVuY19fLCBiZGV2LT5y b21fcGF0Y2hfYmluX2ZpbGVfbmFtZSwgYmRldi0+cm9tX3BhdGNoX2Jpbl9maWxlX25hbWUpOwo+ ICsJCXJldCA9IC0xOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWlmIChwYXRjaF9mbGFn KQo+ICsJCS8qRGlzcGxheSByb20gcGF0Y2ggaW5mbyovCj4gKwkJYnRtdGtfcHJpbnRfd2lmaV9w YXRjaF9pbmZvKGJkZXYsIHJvbV9wYXRjaCk7Cj4gKwllbHNlCj4gKwkJYnRtdGtfcHJpbnRfYnRf cGF0Y2hfaW5mbyhiZGV2LCByb21fcGF0Y2gpOwo+ICsKPiArCXJldCA9IGJ0bXRrX3NlbmRfZndf cm9tX3BhdGNoXzc5eHgoYmRldiwgcm9tX3BhdGNoLCBwYXRjaF9mbGFnKTsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgYnRtdGtfc2VuZF9md19yb21fcGF0Y2hfNzl4eCBm YWlsZWQhIiwgX19mdW5jX18pOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWJkZXYtPnBv d2VyX3N0YXRlID0gQlRNVEtfRE9OR0xFX1NUQVRFX1BPV0VSX09GRjsKPiArCUJUTVRLX0lORk8o IiVzIGVuZCIsIF9fZnVuY19fKTsKPiArCj4gK2VycjoKPiArCWlmIChmd19maXJtd2FyZSkKPiAr CQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2Zpcm13YXJlKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK2ludCBidG10a19sb2FkX3JvbV9wYXRjaChzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2KQo+ICt7 Cj4gKwlpbnQgZXJyID0gLTE7Cj4gKwo+ICsJaWYgKCFiZGV2IHx8ICFiZGV2LT5oZGV2KSB7Cj4g KwkJQlRNVEtfRVJSKCIlczogaW52YWxpZCBwYXJhbWV0ZXJzISIsIF9fZnVuY19fKTsKPiArCQly ZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWlmIChpc19tdDc5MjIoYmRldi0+Y2hpcF9pZCkgfHwg aXNfbXQ3OTYxKGJkZXYtPmNoaXBfaWQpKSB7Cj4gKwkJZXJyID0gYnRtdGtfbG9hZF9yb21fcGF0 Y2hfNzl4eChiZGV2LCBCVF9ET1dOTE9BRCk7Cj4gKwkJaWYgKGVyciA8IDApIHsKPiArCQkJQlRN VEtfRVJSKCIlczogYnRtdGtfbG9hZF9yb21fcGF0Y2hfNzl4eCBidCBwYXRjaCBmYWlsZWQhIiwg X19mdW5jX18pOwo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCj4gKwkJZXJyID0gYnRtdGtf bG9hZF9yb21fcGF0Y2hfNzl4eChiZGV2LCBXSUZJX0RPV05MT0FEKTsKPiArCQlpZiAoZXJyIDwg MCkgewo+ICsJCQlCVE1US19XQVJOKCIlczogYnRtdGtfbG9hZF9yb21fcGF0Y2hfNzl4eCB3aWZp IHBhdGNoIGZhaWxlZCEiLCBfX2Z1bmNfXyk7Cj4gKwkJCWVyciA9IDA7Cj4gKwkJfQo+ICsJfSBl bHNlIHsKPiArCQlCVE1US19XQVJOKCIlczogdW5rbm93biBjaGlwIGlkICglZCkiLCBfX2Z1bmNf XywgYmRldi0+Y2hpcF9pZCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAr c3RydWN0IGJ0bXRrX2RldiAqYnRtdGtfZ2V0X2Rldih2b2lkKQo+ICt7Cj4gKwlpbnQgaSA9IDA7 Cj4gKwlzdHJ1Y3QgYnRtdGtfZGV2ICp0bXBfYmRldiA9IE5VTEw7Cj4gKwo+ICsJQlRNVEtfSU5G TygiJXMiLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGJ0bXRrX2ludGZfbnVt OyBpKyspIHsKPiArCQlpZiAoIWdfYmRldltpXS0+aGRldikgewo+ICsJCQlpZiAoaSA9PSAwKQo+ ICsJCQkJZ19iZGV2W2ldLT5kb25nbGVfaW5kZXggPSBpOwo+ICsJCQllbHNlCj4gKwkJCQlnX2Jk ZXZbaV0tPmRvbmdsZV9pbmRleCA9IGdfYmRldltpIC0gMV0tPmRvbmdsZV9pbmRleCArIDE7Cj4g Kwo+ICsJCQl0bXBfYmRldiA9IGdfYmRldltpXTsKPiArCj4gKwkJCS8qIEhvb2sgcHJlLWRlZmlu ZWQgdGFibGUgb24gc3RhdGUgbWFjaGluZSAqLwo+ICsJCQlnX2JkZXZbaV0tPmNpZl9zdGF0ZSA9 IChzdHJ1Y3QgYnRtdGtfY2lmX3N0YXRlICopZ19jaWZfc3RhdGU7Cj4gKwkJCWJyZWFrOwo+ICsJ CX0KPiArCX0KPiArCj4gKwlyZXR1cm4gdG1wX2JkZXY7Cj4gK30KPiArCj4gK3ZvaWQgYnRtdGtf cmVsZWFzZV9kZXYoc3RydWN0IGJ0bXRrX2RldiAqYmRldikKPiArewo+ICsJaW50IGkgPSAwOwo+ ICsJc3RydWN0IGJ0bXRrX2RldiAqdG1wX2JkZXYgPSBOVUxMOwo+ICsKPiArCXRtcF9iZGV2ID0g YmRldjsKPiArCWlmICghdG1wX2JkZXYpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgYnRtdGtfaW50 Zl9udW07IGkrKykgewo+ICsJCQlpZiAobWVtY21wKHRtcF9iZGV2LCBnX2JkZXZbaV0sIHNpemVv ZigqdG1wX2JkZXYpKSA9PSAwKSB7Cj4gKwkJCQltZW1zZXQodG1wX2JkZXYsIDAsIHNpemVvZigq dG1wX2JkZXYpKTsKPiArCj4gKwkJCQl0bXBfYmRldiA9IE5VTEw7Cj4gKwkJCQlicmVhazsKPiAr CQkJfQo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RydWN0IGJ0bXRrX2RldiAqYnRtdGtfYWxs b2NhdGVfZGV2X21lbW9yeShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBidG10 a19kZXYgKmJkZXY7Cj4gKwlzaXplX3QgbGVuID0gc2l6ZW9mKCpiZGV2KTsKPiArCj4gKwlpZiAo IWRldikKPiArCQliZGV2ID0gZGV2bV9remFsbG9jKGRldiwgbGVuLCBHRlBfS0VSTkVMKTsKPiAr CWVsc2UKPiArCQliZGV2ID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwo+ICsKPiArCWlmICgh YmRldikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlidG10a19zZXRfY2hpcF9zdGF0ZShiZGV2 LCBCVE1US19TVEFURV9JTklUKTsKPiArCj4gKwlyZXR1cm4gYmRldjsKPiArfQo+ICsKPiArdm9p ZCBidG10a19mcmVlX2Rldl9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnRtdGtf ZGV2ICpiZGV2KQo+ICt7Cj4gKwlpZiAoIWJkZXYpIHsKPiArCQlpZiAoIWRldikKPiArCQkJZGV2 bV9rZnJlZShkZXYsIGJkZXYpOwo+ICsJCWVsc2UKPiArCQkJa2ZyZWUoYmRldik7Cj4gKwl9Cj4g K30KPiArCj4gK2ludCBidG10a19zZW5kX3dtdF9wb3dlcl9vbl9jbWQoc3RydWN0IGJ0bXRrX2Rl diAqYmRldikKPiArewo+ICsJLyogU3VwcG9ydCA3NjY4IGFuZCA3OTYxICovCj4gKwl1OCBjbWRb XSA9IHsgMHgwMSwgMHg2RiwgMHhGQywgMHgwNiwgMHgwMSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgw MCwgMHgwMSB9Owo+ICsJdTggZXZlbnRbXSA9IHsgMHgwNCwgMHhFNCwgMHgwNSwgMHgwMiwgMHgw NiwgMHgwMSwgMHgwMCB9Owo+ICsJaW50IHJldCA9IC0xLCByZXRyeSA9IFJFVFJZX1RJTUVTOwo+ ICsKPiArCWlmICghYmRldikgewo+ICsJCUJUTVRLX0VSUigiJXM6IGJkZXYgaXMgTlVMTCAhIiwg X19mdW5jX18pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICtyZXRyeV9hZ2FpbjoKPiAr Cj4gKwlyZXQgPSBidG10a19tYWluX3NlbmRfY21kKGJkZXYsIGNtZCwgc2l6ZW9mKGNtZCksIGV2 ZW50LCBzaXplb2YoZXZlbnQpLAo+ICsJCQkJICBXTVRfREVMQVlfVElNRVMsIFJFVFJZX1RJTUVT LCBCVE1US19UWF9DTURfRlJPTV9EUlYpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlCVE1US19F UlIoIiVzOiBmYWlsZWQoJWQpIiwgX19mdW5jX18sIHJldCk7Cj4gKwkJYmRldi0+cG93ZXJfc3Rh dGUgPSBCVE1US19ET05HTEVfU1RBVEVfRVJST1I7Cj4gKwkJcmV0ID0gLTE7Cj4gKwl9IGVsc2Ug aWYgKHJldCA9PSAwICYmIGJkZXYtPnJlY3ZfZXZ0X2xlbiA+IDApIHsKPiArCQlzd2l0Y2ggKGJk ZXYtPmlvX2J1Zls2XSkgewo+ICsJCWNhc2UgMDoJCQkgLyogc3VjY2Vzc2Z1bCAqLwo+ICsJCQlC VE1US19JTkZPKCIlczogT0siLCBfX2Z1bmNfXyk7Cj4gKwkJCWJkZXYtPnBvd2VyX3N0YXRlID0g QlRNVEtfRE9OR0xFX1NUQVRFX1BPV0VSX09OOwo+ICsJCQlicmVhazsKPiArCQljYXNlIDI6CQkJ IC8qIFRPRE86cmV0cnkgKi8KPiArCQkJaWYgKHJldHJ5ID4gMCkgewo+ICsJCQkJcmV0cnktLTsK PiArCQkJCUJUTVRLX0lORk8oIiVzOiBuZWVkIHRvIHRyeSBhZ2FpbiIsIF9fZnVuY19fKTsKPiAr CQkJCW1kZWxheSg1MCk7Cj4gKwkJCQlnb3RvIHJldHJ5X2FnYWluOwo+ICsJCQl9Cj4gKwkJCWJy ZWFrOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCUJUTVRLX1dBUk4oIiVzOiBVbmtub3duIHJlc3VsdDog JTAyWCIsIF9fZnVuY19fLCBiZGV2LT5pb19idWZbNl0pOwo+ICsJCQliZGV2LT5wb3dlcl9zdGF0 ZSA9IEJUTVRLX0RPTkdMRV9TVEFURV9FUlJPUjsKPiArCQkJcmV0ID0gLTE7Cj4gKwkJCWJyZWFr Owo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgYnRtdGtf c2VuZF93bXRfcG93ZXJfb2ZmX2NtZChzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2KQo+ICt7Cj4gKwkv KiBTdXBwb3J0IDc2NjggYW5kIDc5NjEgKi8KPiArCXU4IGNtZFtdID0geyAweDAxLCAweDZGLCAw eEZDLCAweDA2LCAweDAxLCAweDA2LCAweDAyLCAweDAwLCAweDAwLCAweDAwIH07Cj4gKwkvKiBU by1EbywgZm9yIGV2ZW50IGNoZWNrICovCj4gKwl1OCBldmVudFtdID0geyAweDA0LCAweEU0LCAw eDA1LCAweDAyLCAweDA2LCAweDAxLCAweDAwIH07Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwo+ICsJ aWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlczogYmRldiBpcyBOVUxMICEiLCBfX2Z1bmNf Xyk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpZiAoYmRldi0+cG93ZXJfc3RhdGUg PT0gQlRNVEtfRE9OR0xFX1NUQVRFX1BPV0VSX09GRikgewo+ICsJCUJUTVRLX1dBUk4oIiVzOiBw b3dlcl9zdGF0ZSBhbHJlYWR5IHBvd2VyIG9mZiIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwlyZXQgPSBidG10a19tYWluX3NlbmRfY21kKGJkZXYsIGNtZCwgc2l6ZW9m KGNtZCksIGV2ZW50LCBzaXplb2YoZXZlbnQpLAo+ICsJCQkJICBERUxBWV9USU1FUywgUkVUUllf VElNRVMsIEJUTVRLX1RYX0NNRF9GUk9NX0RSVik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCUJU TVRLX0VSUigiJXM6IGZhaWxlZCglZCkiLCBfX2Z1bmNfXywgcmV0KTsKPiArCQliZGV2LT5wb3dl cl9zdGF0ZSA9IEJUTVRLX0RPTkdMRV9TVEFURV9FUlJPUjsKPiArCQlyZXR1cm4gcmV0Owo+ICsJ fQo+ICsKPiArCWJkZXYtPnBvd2VyX3N0YXRlID0gQlRNVEtfRE9OR0xFX1NUQVRFX1BPV0VSX09G RjsKPiArCUJUTVRLX0lORk8oIiVzIGRvbmUiLCBfX2Z1bmNfXyk7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtpbnQgYnRtdGtfY2FwX2luaXQoc3RydWN0IGJ0bXRrX2RldiAqYmRldikKPiAr ewo+ICsJaWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgYmRldiBpcyBOVUxMISIsIF9f ZnVuY19fKTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJbWFpbl9pbmZvLmhpZl9ob29r LnJlZ19yZWFkKGJkZXYsIENISVBfSUQsICZiZGV2LT5jaGlwX2lkKTsKPiArCWlmIChpc19tdDc5 MjIoYmRldi0+Y2hpcF9pZCkgfHwgaXNfbXQ3OTYxKGJkZXYtPmNoaXBfaWQpKSB7Cj4gKwkJbWFp bl9pbmZvLmhpZl9ob29rLnJlZ19yZWFkKGJkZXYsIEZMQVZPUiwgJmJkZXYtPmZsYXZvcik7Cj4g KwkJbWFpbl9pbmZvLmhpZl9ob29rLnJlZ19yZWFkKGJkZXYsIEZXX1ZFUlNJT04sICZiZGV2LT5m d192ZXJzaW9uKTsKPiArCX0gZWxzZSB7Cj4gKwkJQlRNVEtfRVJSKCJVbmtub3duIE1lZGlhdGVr IGRldmljZSglMDRYKVxuIiwgYmRldi0+Y2hpcF9pZCk7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ ICsKPiArCUJUTVRLX0lORk8oIiVzOiBDaGlwIElEID0gMHgleCIsIF9fZnVuY19fLCBiZGV2LT5j aGlwX2lkKTsKPiArCUJUTVRLX0lORk8oIiVzOiBmbGF2b3IgPSAweCV4IiwgX19mdW5jX18sIGJk ZXYtPmZsYXZvcik7Cj4gKwlCVE1US19JTkZPKCIlczogRlcgVmVyID0gMHgleCIsIF9fZnVuY19f LCBiZGV2LT5md192ZXJzaW9uKTsKPiArCj4gKwltZW1zZXQoYmRldi0+cm9tX3BhdGNoX2Jpbl9m aWxlX25hbWUsIDAsIE1BWF9CSU5fRklMRV9OQU1FX0xFTik7Cj4gKwlpZiAoKGJkZXYtPmZ3X3Zl cnNpb24gJiAweGZmKSA9PSAweGZmKSB7Cj4gKwkJQlRNVEtfRVJSKCIlczogZmFpbGVkLCB3cm9u ZyBGVyB2ZXJzaW9uIDogMHgleCAhIiwgX19mdW5jX18sIGJkZXYtPmZ3X3ZlcnNpb24pOwo+ICsJ CXJldHVybiAtMTsKPiArCX0KPiArCj4gKwkvKiBCaW4gZmlsZW5hbWUgZm9ybWF0IDogIkJUX1JB TV9DT0RFX01UJTA0eF8leF8leF9oZHIuYmluIgo+ICsJICogICQkJCQgOiBjaGlwIGlkCj4gKwkg KiAgJSA6IGZ3IHZlcnNpb24gJiAweEZGICsgMSAoaW4gSEVYKQo+ICsJICovCj4gKwliZGV2LT5m bGF2b3IgPSAoYmRldi0+Zmxhdm9yICYgMHgwMDAwMDA4MCkgPj4gNzsKPiArCUJUTVRLX0lORk8o IiVzOiBmbGF2b3IxID0gMHgleCIsIF9fZnVuY19fLCBiZGV2LT5mbGF2b3IpOwo+ICsKPiArCS8q IGlmIGZsYXZvciBlcXVhbHMgMSwgaXQgcmVwcmVzZW50IDc5MjAsIGVsc2UgaXQgcmVwcmVzZW50 IDc5MjEgKi8KPiArCWlmIChiZGV2LT5mbGF2b3IpCj4gKwkJc25wcmludGYoYmRldi0+cm9tX3Bh dGNoX2Jpbl9maWxlX25hbWUsIE1BWF9CSU5fRklMRV9OQU1FX0xFTiwKPiArCQkJICJCVF9SQU1f Q09ERV9NVCUwNHhfMWFfJXhfaGRyLmJpbiIsCj4gKwkJCSBiZGV2LT5jaGlwX2lkICYgMHhmZmZm LCAoYmRldi0+ZndfdmVyc2lvbiAmIDB4ZmYpICsgMSk7Cj4gKwllbHNlCj4gKwkJc25wcmludGYo YmRldi0+cm9tX3BhdGNoX2Jpbl9maWxlX25hbWUsIE1BWF9CSU5fRklMRV9OQU1FX0xFTiwKPiAr CQkJICJCVF9SQU1fQ09ERV9NVCUwNHhfMV8leF9oZHIuYmluIiwKPiArCQkJIGJkZXYtPmNoaXBf aWQgJiAweGZmZmYsIChiZGV2LT5md192ZXJzaW9uICYgMHhmZikgKyAxKTsKPiArCj4gKwlCVE1U S19JTkZPKCIlczogcm9tIHBhdGNoIGZpbGUgbmFtZSBpcyAlcyIsIF9fZnVuY19fLCBiZGV2LT5y b21fcGF0Y2hfYmluX2ZpbGVfbmFtZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2lu dCBidG10a19zZW5kX2luaXRfY21kcyhzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2KQo+ICt7Cj4gKwlp bnQgcmV0ID0gLTE7Cj4gKwo+ICsJaWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlczogYmRl diBpcyBOVUxMICEiLCBfX2Z1bmNfXyk7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCUJU TVRLX0lORk8oIiVzIiwgX19mdW5jX18pOwo+ICsKPiArCXJldCA9IGJ0bXRrX3NlbmRfd210X3Bv d2VyX29uX2NtZChiZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJaWYgKGJkZXYtPnBvd2Vy X3N0YXRlICE9IEJUTVRLX0RPTkdMRV9TVEFURV9QT1dFUl9PTikKPiArCQkJQlRNVEtfRVJSKCIl cywgYnRtdGtfc2VuZF93bXRfcG93ZXJfb25fY21kIGZhaWxlZCEiLCBfX2Z1bmNfXyk7Cj4gKwkJ Z290byBleGl0Owo+ICsJfQo+ICsKPiArZXhpdDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K2ludCBidG10a19zZW5kX2RlaW5pdF9jbWRzKHN0cnVjdCBidG10a19kZXYgKmJkZXYpCj4gK3sK PiArCWludCByZXQgPSAtMTsKPiArCj4gKwlpZiAoIWJkZXYpIHsKPiArCQlCVE1US19FUlIoIiVz OiBiZGV2IGlzIE5VTEwgISIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsK PiArCUJUTVRLX0lORk8oIiVzIiwgX19mdW5jX18pOwo+ICsKPiArCXJldCA9IGJ0bXRrX3NlbmRf d210X3Bvd2VyX29mZl9jbWQoYmRldik7Cj4gKwlpZiAoYmRldi0+cG93ZXJfc3RhdGUgIT0gQlRN VEtfRE9OR0xFX1NUQVRFX1BPV0VSX09GRikgewo+ICsJCUJUTVRLX1dBUk4oIlBvd2VyIG9mZiBm YWlsZWQsIHJlc2V0IGl0Iik7Cj4gKwkJYnRtdGtfc2VuZF9hc3NlcnRfY21kKGJkZXYpOwo+ICsJ fQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCBidG10a19zZW5kX2Fzc2VydF9j bWQoc3RydWN0IGJ0bXRrX2RldiAqYmRldikKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwlpbnQg c3RhdGU7Cj4gKwl1OCBidWZbXSA9IHsgMHgwMSwgMHg2RiwgMHhGQywgMHgwNSwgMHgwMSwgMHgw MiwgMHgwMSwgMHgwMCwgMHgwOCB9Owo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Cj4g Kwo+ICsJaWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgaW52YWxpZCBwYXJhbWV0ZXJz ISIsIF9fZnVuY19fKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0K PiArCj4gKwlzdGF0ZSA9IGJ0bXRrX2dldF9jaGlwX3N0YXRlKGJkZXYpOwo+ICsJaWYgKHN0YXRl ID09IEJUTVRLX1NUQVRFX0ZXX0RVTVApIHsKPiArCQlCVE1US19XQVJOKCIlczogRlcgZHVtcGlu ZyBhbHJlYWR5ISEhIiwgX19mdW5jX18pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJ QlRNVEtfSU5GTygiJXM6IHNlbmQgYXNzZXJ0IGNtZCIsIF9fZnVuY19fKTsKPiArCj4gKwlza2Ig PSBhbGxvY19za2Ioc2l6ZW9mKGJ1ZikgKyBCVF9TS0JfUkVTRVJWRSwgR0ZQX0FUT01JQyk7Cj4g KwlpZiAoIXNrYikgewo+ICsJCUJUTVRLX0VSUigiJXMgYWxsb2NhdGUgc2tiIGZhaWxlZCEhIiwg X19mdW5jX18pOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCWJ0X2NiKHNrYiktPnBrdF90eXBl ID0gSENJX0NPTU1BTkRfUEtUOwo+ICsJbWVtY3B5KHNrYi0+ZGF0YSwgYnVmLCBzaXplb2YoYnVm KSk7Cj4gKwlza2ItPmxlbiA9IHNpemVvZihidWYpOwo+ICsKPiArCXJldCA9IG1haW5faW5mby5o aWZfaG9vay5zZW5kX2NtZChiZGV2LCBza2IsIDEwMCwgMjAsIChpbnQpQlRNVEtfVFhfQ01EX0ZS T01fRFJWKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCUJUTVRLX0VSUigiJXMgZmFpbGVkISEiLCBf X2Z1bmNfXyk7Cj4gKwllbHNlCj4gKwkJQlRNVEtfSU5GTygiJXM6IE9LIiwgX19mdW5jX18pOwo+ ICsKPiArZXhpdDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYnRfZmx1 c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9CgpQbGVhc2Ug Zm9sbG93IHRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGhlIEhDSSBvcHMgY2FsbGJhY2tzLiBT ZWUgdGhlIHR3byBvdGhlciBNVEsgZHJpdmVycy4KCj4gKwo+ICtzdGF0aWMgaW50IGJ0X2Nsb3Nl KHN0cnVjdCBoY2lfZGV2ICpoZGV2KQo+ICt7Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwlpbnQgc3Rh dGUgPSBCVE1US19TVEFURV9JTklUOwo+ICsJaW50IGZzdGF0ZSA9IEJUTVRLX0ZPUFNfU1RBVEVf SU5JVDsKPiArCXN0cnVjdCBidG10a19kZXYgKmJkZXYgPSBOVUxMOwo+ICsKPiArCWlmICghaGRl dikgewo+ICsJCUJUTVRLX0VSUigiJXM6IGludmFsaWQgcGFyYW1ldGVycyEiLCBfX2Z1bmNfXyk7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwliZGV2ID0gaGNpX2dldF9kcnZkYXRhKGhk ZXYpOwo+ICsJaWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlczogYmRldiBpcyBpbnZhbGlk ISIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWZzdGF0ZSA9IGJ0 bXRrX2ZvcHNfZ2V0X3N0YXRlKGJkZXYpOwo+ICsJaWYgKGZzdGF0ZSAhPSBCVE1US19GT1BTX1NU QVRFX09QRU5FRCkgewo+ICsJCUJUTVRLX1dBUk4oIiVzOiBmb3BzIGlzIG5vdCBhbGxvdyBjbG9z ZSglZCkiLCBfX2Z1bmNfXywgZnN0YXRlKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCWJ0bXRr X2ZvcHNfc2V0X3N0YXRlKGJkZXYsIEJUTVRLX0ZPUFNfU1RBVEVfQ0xPU0lORyk7Cj4gKwo+ICsJ c3RhdGUgPSBidG10a19nZXRfY2hpcF9zdGF0ZShiZGV2KTsKPiArCWlmIChzdGF0ZSAhPSBCVE1U S19TVEFURV9XT1JLSU5HICYmIHN0YXRlICE9IEJUTVRLX1NUQVRFX1NUQU5EQlkpIHsKPiArCQlC VE1US19XQVJOKCIlczogbm90IGluIHdvcmtpbmcgc3RhdGUgYW5kIHN0YW5kYnkgc3RhdGUoJWQp LiIsIF9fZnVuY19fLCBzdGF0ZSk7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCUJUTVRL X0lORk8oIiVzLCBlbnRlciIsIF9fZnVuY19fKTsKPiArCj4gKwlpZiAobWFpbl9pbmZvLmhpZl9o b29rLmNpZl9tdXRleF9sb2NrKQo+ICsJCW1haW5faW5mby5oaWZfaG9vay5jaWZfbXV0ZXhfbG9j ayhiZGV2KTsKPiArCj4gKwlpZiAoc3RhdGUgIT0gQlRNVEtfU1RBVEVfU1RBTkRCWSkgewo+ICsJ CXJldCA9IGJ0bXRrX3NlbmRfZGVpbml0X2NtZHMoYmRldik7Cj4gKwkJaWYgKHJldCA8IDApIHsK PiArCQkJQlRNVEtfRVJSKCIlcywgYnRtdGtfc2VuZF9kZWluaXRfY21kcyBmYWlsZWQiLCBfX2Z1 bmNfXyk7Cj4gKwkJCWdvdG8gdW5sb2NrOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBGbHVzaCBS WCB3b3JrcyAqLwo+ICsJZmx1c2hfd29yaygmYmRldi0+cnhfd29yayk7Cj4gKwo+ICsJLyogRHJv cCBxdWV1ZXMgKi8KPiArCXNrYl9xdWV1ZV9wdXJnZSgmYmRldi0+cnhfcSk7Cj4gKwo+ICsJbWFp bl9pbmZvLmhpZl9ob29rLmNsb3NlKGhkZXYpOwo+ICsKPiArdW5sb2NrOgo+ICsJaWYgKG1haW5f aW5mby5oaWZfaG9vay5jaWZfbXV0ZXhfdW5sb2NrKQo+ICsJCW1haW5faW5mby5oaWZfaG9vay5j aWZfbXV0ZXhfdW5sb2NrKGJkZXYpOwo+ICtleGl0Ogo+ICsJYnRtdGtfZm9wc19zZXRfc3RhdGUo YmRldiwgQlRNVEtfRk9QU19TVEFURV9DTE9TRUQpOwo+ICsKPiArZXJyOgo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYnRfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKPiAr ewo+ICsJaW50IHJldCA9IC0xOwo+ICsJaW50IHN0YXRlID0gQlRNVEtfU1RBVEVfSU5JVDsKPiAr CWludCBmc3RhdGUgPSBCVE1US19GT1BTX1NUQVRFX0lOSVQ7Cj4gKwlzdHJ1Y3QgYnRtdGtfZGV2 ICpiZGV2ID0gTlVMTDsKPiArCj4gKwlCVE1US19JTkZPKCIlczogTVRLIEJUIERyaXZlciBWZXJz aW9uIDogJXMiLCBfX2Z1bmNfXywgVkVSU0lPTik7Cj4gKwo+ICsJaWYgKCFoZGV2KSB7Cj4gKwkJ QlRNVEtfRVJSKCIlczogaW52YWxpZCBwYXJhbWV0ZXJzISIsIF9fZnVuY19fKTsKPiArCQlyZXR1 cm4gLUVGQVVMVDsKPiArCX0KPiArCj4gKwliZGV2ID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOwo+ ICsJaWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlczogYmRldiBpcyBpbnZhbGlkIiwgX19m dW5jX18pOwo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCXN0YXRlID0gYnRtdGtf Z2V0X2NoaXBfc3RhdGUoYmRldik7Cj4gKwlpZiAoc3RhdGUgPT0gQlRNVEtfU1RBVEVfSU5JVCB8 fCBzdGF0ZSA9PSBCVE1US19TVEFURV9ESVNDT05ORUNUKSB7Cj4gKwkJcmV0ID0gLUVBR0FJTjsK PiArCQlnb3RvIGZhaWxlZDsKPiArCX0KPiArCj4gKwlpZiAoc3RhdGUgIT0gQlRNVEtfU1RBVEVf V09SS0lORyAmJiBzdGF0ZSAhPSBCVE1US19TVEFURV9TVEFOREJZKSB7Cj4gKwkJQlRNVEtfV0FS TigiJXM6IG5vdCBpbiB3b3JraW5nIHN0YXRlIGFuZCBzdGFuZGJ5IHN0YXRlKCVkKS4iLCBfX2Z1 bmNfXywgc3RhdGUpOwo+ICsJCXJldCA9IC1FTk9ERVY7Cj4gKwkJZ290byBmYWlsZWQ7Cj4gKwl9 Cj4gKwo+ICsJZnN0YXRlID0gYnRtdGtfZm9wc19nZXRfc3RhdGUoYmRldik7Cj4gKwlpZiAoZnN0 YXRlID09IEJUTVRLX0ZPUFNfU1RBVEVfT1BFTkVEKSB7Cj4gKwkJQlRNVEtfV0FSTigiJXM6IGZv cHMgb3BlbmVkISIsIF9fZnVuY19fKTsKPiArCQlyZXQgPSAwOwo+ICsJCWdvdG8gZmFpbGVkOwo+ ICsJfSBlbHNlIGlmICgoZnN0YXRlID09IEJUTVRLX0ZPUFNfU1RBVEVfQ0xPU0lORykgfHwKPiAr CSAgICAoZnN0YXRlID09IEJUTVRLX0ZPUFNfU1RBVEVfT1BFTklORykpIHsKPiArCQlCVE1US19X QVJOKCIlczogZm9wcyBvcGVuL2Nsb3NlIGlzIG9uLWdvaW5nICEiLCBfX2Z1bmNfXyk7Cj4gKwkJ cmV0ID0gLUVBR0FJTjsKPiArCQlnb3RvIGZhaWxlZDsKPiArCX0KPiArCj4gKwlCVE1US19JTkZP KCIlcyIsIF9fZnVuY19fKTsKPiArCWJ0bXRrX2ZvcHNfc2V0X3N0YXRlKGJkZXYsIEJUTVRLX0ZP UFNfU1RBVEVfT1BFTklORyk7Cj4gKwlyZXQgPSBtYWluX2luZm8uaGlmX2hvb2sub3BlbihoZGV2 KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgY2lmX29wZW4gZmFpbGVk IiwgX19mdW5jX18pOwo+ICsJCWdvdG8gZmFpbGVkOwo+ICsJfQo+ICsKPiArCXJldCA9IGJ0bXRr X3NlbmRfaW5pdF9jbWRzKGJkZXYpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlCVE1US19FUlIo IiVzLCBidG10a19zZW5kX2luaXRfY21kcyBmYWlsZWQiLCBfX2Z1bmNfXyk7Cj4gKwkJZ290byBm YWlsZWQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKG1haW5faW5mby5oaWZfaG9vay5vcGVuX2RvbmUpCj4g KwkJbWFpbl9pbmZvLmhpZl9ob29rLm9wZW5fZG9uZShiZGV2KTsKPiArCj4gKwlidG10a19mb3Bz X3NldF9zdGF0ZShiZGV2LCBCVE1US19GT1BTX1NUQVRFX09QRU5FRCk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtmYWlsZWQ6Cj4gKwlidG10a19mb3BzX3NldF9zdGF0ZShiZGV2LCBCVE1US19G T1BTX1NUQVRFX0NMT1NFRCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBidF9zZW5kX2ZyYW1lKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQo+ICt7Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwlpbnQgc3RhdGUgPSBCVE1US19TVEFURV9J TklUOwo+ICsJaW50IGZzdGF0ZSA9IEJUTVRLX0ZPUFNfU1RBVEVfSU5JVDsKPiArCXN0cnVjdCBi dG10a19kZXYgKmJkZXYgPSBOVUxMOwo+ICsKPiArCWlmICghaGRldiB8fCAhc2tiKSB7Cj4gKwkJ QlRNVEtfRVJSKCIlcywgaW52YWxpZCBwYXJhbWV0ZXJzISIsIF9fZnVuY19fKTsKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwliZGV2ID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOwo+ ICsJaWYgKCFiZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgYmRldiBpcyBpbnZhbGlkISIsIF9f ZnVuY19fKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlmc3RhdGUgPSBidG10 a19mb3BzX2dldF9zdGF0ZShiZGV2KTsKPiArCWlmIChmc3RhdGUgIT0gQlRNVEtfRk9QU19TVEFU RV9PUEVORUQpIHsKPiArCQlCVE1US19XQVJOKCIlczogZm9wcyBpcyBub3Qgb3BlbiB5ZXQoJWQp ISIsIF9fZnVuY19fLCBmc3RhdGUpOwo+ICsJCXJldCA9IC1FTk9ERVY7Cj4gKwkJZ290byBleGl0 Owo+ICsJfQo+ICsKPiArCXN0YXRlID0gYnRtdGtfZ2V0X2NoaXBfc3RhdGUoYmRldik7Cj4gKwlp ZiAoc3RhdGUgIT0gQlRNVEtfU1RBVEVfV09SS0lORykgewo+ICsJCUJUTVRLX1dBUk4oIiVzOiBj aGlwIHN0YXRlIGlzICVkLiIsIF9fZnVuY19fLCBzdGF0ZSk7Cj4gKwkJaWYgKHN0YXRlID09IEJU TVRLX1NUQVRFX0RJU0NPTk5FQ1QpIHsKPiArCQkJcmV0ID0gLUVOT0RFVjsKPiArCQl9IGVsc2Ug ewo+ICsJCQltc2xlZXAoMzAwMCk7Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gKwkJfQo+ICsJCWdv dG8gZXhpdDsKPiArCX0KPiArCj4gKwlpZiAoYmRldi0+cG93ZXJfc3RhdGUgPT0gQlRNVEtfRE9O R0xFX1NUQVRFX1BPV0VSX09GRikgewo+ICsJCUJUTVRLX1dBUk4oIiVzOiBkb25nbGUgc3RhdGUg YWxyZWFkeSBwb3dlciBvZmYsIGRvIG5vdCB3cml0ZSIsIF9fZnVuY19fKTsKPiArCQlyZXQgPSAt RUZBVUxUOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwltZW1jcHkoc2tiX3B1c2goc2ti LCAxKSwgJmhjaV9za2JfcGt0X3R5cGUoc2tiKSwgMSk7Cj4gKwo+ICsJLyogRm9yIEJsZSBJU08g cGFja2V0IHNpemUgKi8KPiArCWlmIChtZW1jbXAoc2tiLT5kYXRhLCBSRUFEX0lTT19QQUNLRVRf U0laRV9DTUQsIHNpemVvZihSRUFEX0lTT19QQUNLRVRfU0laRV9DTUQpKSA9PSAwKSB7Cj4gKwkJ YmRldi0+aXNvX3RocmVzaG9sZCA9IHNrYi0+ZGF0YVtzaXplb2YoUkVBRF9JU09fUEFDS0VUX1NJ WkVfQ01EKV0gKwo+ICsJCQkJCShza2ItPmRhdGFbc2l6ZW9mKFJFQURfSVNPX1BBQ0tFVF9TSVpF X0NNRCkgKyAxXSAgPDwgOCk7Cj4gKwkJQlRNVEtfSU5GTygiJXM6IEJsZSBpc28gcGt0IHNpemUg aXMgJWQiLCBfX2Z1bmNfXywgYmRldi0+aXNvX3RocmVzaG9sZCk7Cj4gKwl9Cj4gKwo+ICsJcmV0 ID0gbWFpbl9pbmZvLmhpZl9ob29rLnNlbmRfY21kKGJkZXYsIHNrYiwgMCwgMCwgKGludClCVE1U S19UWF9QS1RfRlJPTV9IT1NUKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCUJUTVRLX0VSUigiJXMg ZmFpbGVkISEiLCBfX2Z1bmNfXyk7Cj4gK2V4aXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGJ0X3NldHVwKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQo+ICt7Cj4gKwlCVE1U S19JTkZPKCIlcyIsIF9fZnVuY19fKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGJ0 bXRrX3JlZ19oaWZfaG9vayhzdHJ1Y3QgaGlmX2hvb2tfcHRyICpob29rKQo+ICt7Cj4gKwltZW1j cHkoJm1haW5faW5mby5oaWZfaG9vaywgaG9vaywgc2l6ZW9mKHN0cnVjdCBoaWZfaG9va19wdHIp KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYnRtdGtfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCj4gK3sKPiArCWludCBlcnIgPSAwLCBza2lwX3BrdCA9IDA7Cj4gKwlzdHJ1Y3Qg YnRtdGtfZGV2ICpiZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBidG10a19kZXYsIHJ4 X3dvcmspOwo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKPiArCWludCBmc3RhdGUgPSBCVE1US19G T1BTX1NUQVRFX0lOSVQ7Cj4gKwlpbnQgc3RhdGUgPSAwOwo+ICsKPiArCUJUTVRLX0RCRygiJXMg ZW50ZXIiLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYmRl di0+cnhfcSkpKSB7Cj4gKwkJc2tpcF9wa3QgPSBidG10a19kaXNwYXRjaF9wa3QoYmRldi0+aGRl diwgc2tiKTsKPiArCQlpZiAoc2tpcF9wa3QgIT0gMCkgewo+ICsJCQlrZnJlZV9za2Ioc2tiKTsK PiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaGNpX3NrYl9wa3RfdHlwZShza2Ip ID09IEhDSV9FVkVOVF9QS1QpIHsKPiArCQkJaWYgKG1haW5faW5mby5oaWZfaG9vay5ldmVudF9m aWx0ZXIoYmRldiwgc2tiKSkgewo+ICsJCQkJa2ZyZWVfc2tiKHNrYik7Cj4gKwkJCQljb250aW51 ZTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJZnN0YXRlID0gYnRtdGtfZm9wc19nZXRfc3RhdGUo YmRldik7Cj4gKwkJaWYgKGZzdGF0ZSAhPSBCVE1US19GT1BTX1NUQVRFX09QRU5FRCkgewo+ICsJ CQlrZnJlZV9za2Ioc2tiKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlzdGF0ZSA9 IGJ0bXRrX2dldF9jaGlwX3N0YXRlKGJkZXYpOwo+ICsJCWlmIChzdGF0ZSAhPSBCVE1US19TVEFU RV9XT1JLSU5HKSB7Cj4gKwkJCWtmcmVlX3NrYihza2IpOwo+ICsJCQljb250aW51ZTsKPiArCQl9 Cj4gKwo+ICsJCWVyciA9IGhjaV9yZWN2X2ZyYW1lKGJkZXYtPmhkZXYsIHNrYik7Cj4gKwkJaWYg KGVyciA8IDApIHsKPiArCQkJaWYgKGVyciAhPSAtRU5YSU8pCj4gKwkJCQlCVE1US19FUlIoIiVz IGZhaWxlZCwgZXJyID0gJWQiLCBfX2Z1bmNfXywgZXJyKTsKPiArCQkJcmV0dXJuOwo+ICsJCX0K PiArCX0KPiArfQo+ICsKPiArdm9pZCBidG10a19mcmVlX2hjaV9kZXZpY2Uoc3RydWN0IGJ0bXRr X2RldiAqYmRldiwgaW50IGhjaV9idXNfdHlwZSkKPiArewo+ICsJaWYgKCFiZGV2KQo+ICsJCXJl dHVybjsKPiArCj4gKwlmbHVzaF93b3JrKCZiZGV2LT5yeF93b3JrKTsKPiArCj4gKwlza2JfcXVl dWVfcHVyZ2UoJmJkZXYtPnJ4X3EpOwo+ICsJZGVzdHJveV93b3JrcXVldWUoYmRldi0+d29ya3F1 ZXVlKTsKPiArCj4gKwlCVE1US19JTkZPKCIlcyIsIF9fZnVuY19fKTsKPiArCj4gKwlpZiAoYmRl di0+aGRldikKPiArCQloY2lfZnJlZV9kZXYoYmRldi0+aGRldik7Cj4gKwo+ICsJYmRldi0+Y2hp cF9yZXNldCA9IDA7Cj4gKwlCVE1US19JTkZPKCIlcyBkb25lIiwgX19mdW5jX18pOwo+ICt9Cj4g Kwo+ICtpbnQgYnRtdGtfYWxsb2NhdGVfaGNpX2RldmljZShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2 LCBpbnQgaGNpX2J1c190eXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKPiArCWlu dCBlcnIgPSAwOwo+ICsKPiArCWlmICghYmRldikgewo+ICsJCUJUTVRLX0VSUigiJXMsIGJkZXYg aXMgTlVMTCEiLCBfX2Z1bmNfXyk7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7 Cj4gKwl9Cj4gKwo+ICsJQlRNVEtfSU5GTygiJXMiLCBfX2Z1bmNfXyk7Cj4gKwloZGV2ID0gaGNp X2FsbG9jX2RldigpOwo+ICsJaWYgKCFoZGV2KSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgaGRldiBp cyBOVUxMISIsIF9fZnVuY19fKTsKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXhpdDsK PiArCX0KPiArCj4gKwloZGV2LT5idXMgPSBoY2lfYnVzX3R5cGU7Cj4gKwloY2lfc2V0X2RydmRh dGEoaGRldiwgYmRldik7Cj4gKwo+ICsJaGRldi0+ZGV2X3R5cGUgPSAweDAwOwo+ICsKPiArCWJk ZXYtPmhkZXYgPSBoZGV2Owo+ICsKPiArCWhkZXYtPm9wZW4JICAgPSBidF9vcGVuOwo+ICsJaGRl di0+Y2xvc2UgICAgPSBidF9jbG9zZTsKPiArCWhkZXYtPmZsdXNoICAgID0gYnRfZmx1c2g7Cj4g KwloZGV2LT5zZW5kCSAgID0gYnRfc2VuZF9mcmFtZTsKPiArCWhkZXYtPnNldHVwICAgID0gYnRf c2V0dXA7Cj4gKwo+ICsJSU5JVF9XT1JLKCZiZGV2LT5yeF93b3JrLCBidG10a19yeF93b3JrKTsK PiArCj4gKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZiZGV2LT5wX3dhaXRfZXZlbnRfcSk7Cj4gKwo+ ICsJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmRldi0+cnhfcSk7Cj4gKwo+ICsJYmRldi0+d29ya3F1 ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJCVE1US19SWF9XUSIsIFdRX0hJR0hQUkkgfCBXUV9VTkJP VU5EIHwKPiArCQkJCQkgIFdRX01FTV9SRUNMQUlNLCAxKTsKPiArCWlmICghYmRldi0+d29ya3F1 ZXVlKSB7Cj4gKwkJQlRNVEtfRVJSKCIlcywgYmRldi0+d29ya3F1ZXVlIGlzIE5VTEwhIiwgX19m dW5jX18pOwo+ICsJCWVyciA9IC1FTk9NRU07Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiAr CUJUTVRLX0lORk8oIiVzIGRvbmUiLCBfX2Z1bmNfXyk7Cj4gKwo+ICtleGl0Ogo+ICsJcmV0dXJu IGVycjsKPiArfQo+ICsKPiAraW50IGJ0bXRrX3JlZ2lzdGVyX2hjaV9kZXZpY2Uoc3RydWN0IGJ0 bXRrX2RldiAqYmRldikKPiArewo+ICsJc3RydWN0IGhjaV9kZXYgKmhkZXY7Cj4gKwlpbnQgZXJy ID0gMDsKPiArCj4gKwloZGV2ID0gYmRldi0+aGRldjsKPiArCj4gKwllcnIgPSBoY2lfcmVnaXN0 ZXJfZGV2KGhkZXYpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlCVE1US19JTkZPKCIlcyBjYW4n dCByZWdpc3RlciIsIF9fZnVuY19fKTsKPiArCQloY2lfZnJlZV9kZXYoaGRldik7Cj4gKwkJZ290 byBleGl0Owo+ICsJfQo+ICsKPiArCQl0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1NFVFVQLCAmaGRl di0+ZGV2X2ZsYWdzKTsKPiArCj4gK2V4aXQ6Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtp bnQgYnRtdGtfZGVyZWdpc3Rlcl9oY2lfZGV2aWNlKHN0cnVjdCBidG10a19kZXYgKmJkZXYpCj4g K3sKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWlmIChiZGV2ICYmIGJkZXYtPmhkZXYpCj4gKwkJ aGNpX3VucmVnaXN0ZXJfZGV2KGJkZXYtPmhkZXYpOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30K ClBsZWFzZSBhdm9pZCBhbnkgb2YgdGhlc2UgYWJzdHJhY3Rpb25zLgoKPiArCj4gK3N0YXRpYyBp bnQgYnRtdGtfbWFpbl9hbGxvY2F0ZV9tZW1vcnkoc3RydWN0IGJ0bXRrX2RldiAqYmRldikKPiAr ewo+ICsJQlRNVEtfSU5GTygiJXMiLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJaWYgKCFiZGV2LT5yb21f cGF0Y2hfYmluX2ZpbGVfbmFtZSkgewo+ICsJCWJkZXYtPnJvbV9wYXRjaF9iaW5fZmlsZV9uYW1l ID0ga3phbGxvYyhNQVhfQklOX0ZJTEVfTkFNRV9MRU4sIEdGUF9LRVJORUwpOwo+ICsJCWlmICgh YmRldi0+cm9tX3BhdGNoX2Jpbl9maWxlX25hbWUpIHsKPiArCQkJQlRNVEtfRVJSKCIlczogYWxs b2MgbWVtb3J5IGZhaWwgcm9tX3BhdGNoX2Jpbl9maWxlX25hbWUiLCBfX2Z1bmNfXyk7Cj4gKwkJ CXJldHVybiAtRU5PTUVNOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWJkZXYtPmlvX2J1Zikg ewo+ICsJCWJkZXYtPmlvX2J1ZiA9IGt6YWxsb2MoSU9fQlVGX1NJWkUsIEdGUF9LRVJORUwpOwo+ ICsJCWlmICghYmRldi0+aW9fYnVmKSB7Cj4gKwkJCUJUTVRLX0VSUigiJXM6IGFsbG9jIG1lbW9y eSBmYWlsIGlvX2J1ZiIsIF9fZnVuY19fKTsKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCUJUTVRLX0lORk8oIiVzOiBEb25lIiwgX19mdW5jX18pOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ0bXRrX21haW5fZnJlZV9tZW1vcnkoc3RydWN0 IGJ0bXRrX2RldiAqYmRldikKPiArewo+ICsJa2ZyZWUoYmRldi0+cm9tX3BhdGNoX2Jpbl9maWxl X25hbWUpOwo+ICsJYmRldi0+cm9tX3BhdGNoX2Jpbl9maWxlX25hbWUgPSBOVUxMOwo+ICsKPiAr CWtmcmVlKGJkZXYtPmlvX2J1Zik7Cj4gKwliZGV2LT5pb19idWYgPSBOVUxMOwo+ICsKPiArCUJU TVRLX0lORk8oIiVzOiBTdWNjZXNzIiwgX19mdW5jX18pOwo+ICt9Cj4gKwo+ICtpbnQgYnRtdGtf bWFpbl9jaWZfaW5pdGlhbGl6ZShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2LCBpbnQgaGNpX2J1cykK PiArewo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJZXJyID0gYnRtdGtfbWFpbl9hbGxvY2F0ZV9t ZW1vcnkoYmRldik7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCUJUTVRLX0VSUigiYnRtdGtfbWFp bl9hbGxvY2F0ZV9tZW1vcnkgZmFpbGVkISIpOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiAr CWVyciA9IGJ0bXRrX2FsbG9jYXRlX2hjaV9kZXZpY2UoYmRldiwgaGNpX2J1cyk7Cj4gKwlpZiAo ZXJyIDwgMCkgewo+ICsJCUJUTVRLX0VSUigiYnRtdGtfYWxsb2NhdGVfaGNpX2RldmljZSBmYWls ZWQhIik7Cj4gKwkJZ290byBmcmVlX21lbTsKPiArCX0KPiArCj4gKwllcnIgPSBidG10a19jYXBf aW5pdChiZGV2KTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJQlRNVEtfRVJSKCJidG10a19jYXBf aW5pdCBmYWlsZWQhIik7Cj4gKwkJZ290byBmcmVlX2hjaV9kZXY7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtmcmVlX2hjaV9kZXY6Cj4gKwlidG10a19mcmVlX2hjaV9kZXZpY2UoYmRl diwgaGNpX2J1cyk7Cj4gK2ZyZWVfbWVtOgo+ICsJYnRtdGtfbWFpbl9mcmVlX21lbW9yeShiZGV2 KTsKPiArZW5kOgo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArdm9pZCBidG10a19tYWluX2Np Zl91bmluaXRpYWxpemUoc3RydWN0IGJ0bXRrX2RldiAqYmRldiwgaW50IGhjaV9idXMpCj4gK3sK PiArCWJ0bXRrX2ZyZWVfaGNpX2RldmljZShiZGV2LCBoY2lfYnVzKTsKPiArCWJ0bXRrX21haW5f ZnJlZV9tZW1vcnkoYmRldik7Cj4gK30KPiArCj4gK2ludCBidG10a19tYWluX2NpZl9kaXNjb25u ZWN0X25vdGlmeShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2LCBpbnQgaGNpX2J1cykKPiArewo+ICsJ YnRtdGtfZGVyZWdpc3Rlcl9oY2lfZGV2aWNlKGJkZXYpOwo+ICsJYnRtdGtfZnJlZV9oY2lfZGV2 aWNlKGJkZXYsIGhjaV9idXMpOwo+ICsKPiArCWJkZXYtPnBvd2VyX3N0YXRlID0gQlRNVEtfRE9O R0xFX1NUQVRFX1BPV0VSX09GRjsKPiArCWJ0bXRrX3JlbGVhc2VfZGV2KGJkZXYpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogS2VybmVsIE1vZHVsZSBpbml0L2V4aXQg RnVuY3Rpb25zCj4gKyAqLwo+ICtzdGF0aWMgaW50IF9faW5pdCBtYWluX2RyaXZlcl9pbml0KHZv aWQpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGk7Cj4gKwo+ICsJLyogTWVkaWF0ZWsg RHJpdmVyIFZlcnNpb24gKi8KPiArCUJUTVRLX0lORk8oIiVzOiBNVEsgQlQgRHJpdmVyIFZlcnNp b24gOiAlcyIsIF9fZnVuY19fLCBWRVJTSU9OKTsKPiArCj4gKwlyZXQgPSBtYWluX2luaXQoKTsK PiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IGJ0bXRrX2ludGZfbnVtOyBpKyspCj4gKwkJYnRtdGtfc2V0X2NoaXBfc3RhdGUoZ19iZGV2W2ld LCBCVE1US19TVEFURV9ESVNDT05ORUNUKTsKPiArCj4gKwlyZXQgPSBidG10a19jaWZfcmVnaXN0 ZXIoKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJQlRNVEtfRVJSKCIqKiogVVNCIHJlZ2lzdHJh dGlvbiBmYWlsZWQoJWQpISAqKioiLCByZXQpOwo+ICsJCW1haW5fZXhpdCgpOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJQlRNVEtfSU5GTygiJXM6IERvbmUiLCBfX2Z1bmNfXyk7Cj4g KwlyZXR1cm4gcmV0Owo+ICt9CgpOTy4gUGVyaW9kLiBVc2UgbW9kdWxlX3VzYl9kcml2ZXIoKSBh bmQgaWYgeW91IG5lZWQgYW55dGhpbmcgbW9yZSwgeW91IGFyZSBkb2luZyBzb21ldGhpbmcgd3Jv bmcuCgo+ICsKPiArc3RhdGljIHZvaWQgX19leGl0IG1haW5fZHJpdmVyX2V4aXQodm9pZCkKPiAr ewo+ICsJQlRNVEtfSU5GTygiJXMiLCBfX2Z1bmNfXyk7Cj4gKwlidG10a19jaWZfZGVyZWdpc3Rl cigpOwo+ICsJbWFpbl9leGl0KCk7Cj4gK30KPiArbW9kdWxlX2luaXQobWFpbl9kcml2ZXJfaW5p dCk7Cj4gK21vZHVsZV9leGl0KG1haW5fZHJpdmVyX2V4aXQpOwo+ICsKPiArLyoqCj4gKyAqIE1v ZHVsZSBDb21tb24gSW5mb3JtYXRpb24KPiArICovCj4gK01PRFVMRV9ERVNDUklQVElPTigiTWVk aWF0ZWsgQmx1ZXRvb3RoIERyaXZlciIpOwo+ICtNT0RVTEVfVkVSU0lPTihWRVJTSU9OIFNVQlZF Uik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArbW9kdWxlX3BhcmFtKGJ0bXRrX2ludGZf bnVtLCBpbnQsIDA0NDQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG10a19t YWluLmggYi9kcml2ZXJzL2JsdWV0b290aC9idG10a19tYWluLmgKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2U4NDQ3ZmYwNDg0Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXRrX21haW4uaAo+IEBAIC0wLDAgKzEsNTc4IEBA Cj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8vIENvcHlyaWdo dCAoYykgMjAyMCBNZWRpYVRlayBJbmMuCj4gKwo+ICsvKgo+ICsgKiBCbHVldG9vdGggc3VwcG9y dCBmb3IgTWVkaWFUZWsgU0RJTy9VU0IvVUFSVCBkZXZpY2VzCj4gKyAqCj4gKyAqLwo+ICsKPiAr I2lmbmRlZiBfX0JUTVRLX01BSU5fSF9fCj4gKyNkZWZpbmUgX19CVE1US19NQUlOX0hfXwo+ICsj aW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ ICsKPiArI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+Cj4gKyNpbmNsdWRlIDxu ZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2su aD4KPiArI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4KPiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KPiArCj4gKy8qIERlZmluZSBmb3Ig cHJvY2Ugbm9kZSAqLwo+ICsjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgo+ICsjaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KPiArCj4gKy8qIERlZmluZSBmb3Igd2hvbGUgY2hpcCByZXNldCAq Lwo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4K PiArCj4gKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mcmVl emVyLmg+Cj4gKwo+ICsvKiogRHJpdmVyIHZlcnNpb24gKi8KPiArI2RlZmluZSBWRVJTSU9OICI3 LjAuMjAyMDExMDMwMSIKPiArI2RlZmluZSBTVUJWRVIgIjp0dXJua2V5Igo+ICsKPiArI2RlZmlu ZSBCVE1US1VBUlRfUlhfU1RBVEVfQUNUSVZFCTEKPiArI2RlZmluZSBCVE1US1VBUlRfUlhfU1RB VEVfV0FLRVVQCTIKPiArI2RlZmluZSBCVE1US1VBUlRfUlhfU1RBVEVfUkVTRVQJMwo+ICsKPiAr LyoqCj4gKyAqIE1heGltdW0gcm9tIHBhdGNoIGZpbGUgbmFtZSBsZW5ndGgKPiArICovCj4gKyNk ZWZpbmUgTUFYX0JJTl9GSUxFX05BTUVfTEVOIDY0Cj4gKwo+ICsvKioKPiArICogVHlwZSBkZWZp bml0aW9uCj4gKyAqLwo+ICsjaWZuZGVmIFRSVUUKPiArCSNkZWZpbmUgVFJVRSAxCj4gKyNlbmRp Zgo+ICsjaWZuZGVmIEZBTFNFCj4gKwkjZGVmaW5lIEZBTFNFIDAKPiArI2VuZGlmCj4gKwo+ICsj ZGVmaW5lIE1JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCj4gKyNkZWZpbmUgTUFY KGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKCk5vLCBubyBhbmQgbm8uIExpbnV4IGhh cyBkZWZpbml0aW9ucyBmb3IgdGhpcy4KCj4gKwo+ICsvKioKPiArICogTG9nIGFuZCBsZXZlbCBk ZWZpbml0aW9uCj4gKyAqLwo+ICsjZGVmaW5lIEJUTVRLX0xPR19MVkxfRVJSCTEKPiArI2RlZmlu ZSBCVE1US19MT0dfTFZMX1dBUk4JMgo+ICsjZGVmaW5lIEJUTVRLX0xPR19MVkxfSU5GTwkzCj4g KyNkZWZpbmUgQlRNVEtfTE9HX0xWTF9EQkcJNAo+ICsjZGVmaW5lIEJUTVRLX0xPR19MVkxfTUFY CUJUTVRLX0xPR19MVkxfREJHCj4gKyNkZWZpbmUgQlRNVEtfTE9HX0xWTF9ERUYJQlRNVEtfTE9H X0xWTF9JTkZPCS8qIGRlZmF1bHQgc2V0dGluZyAqLwoKVXNlIGJ0X2Rldl97d2FybixlcnIsaW5m byxkZWJ1Z30gZnVuY3Rpb24uCgo+ICsKPiArI2RlZmluZSBIQ0lfTE9HX01BWF9CVUZfU0laRQk2 Ngo+ICsjZGVmaW5lIFdNVF9PVkVSX0hDSV9IRUFERVJfU0laRQkzCj4gKwo+ICtleHRlcm4gdTgg YnRtdGtfbG9nX2x2bDsKPiArCj4gKyNkZWZpbmUgQlRNVEtfRVJSKGZtdCwgLi4uKQkgXAo+ICsJ ZG8geyBpZiAoYnRtdGtfbG9nX2x2bCA+PSBCVE1US19MT0dfTFZMX0VSUikgXAo+ICsJCXByX3dh cm4oIltidG10a19lcnJdICoqKiIgZm10IioqKlxuIiwgIyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUg KDApCj4gKyNkZWZpbmUgQlRNVEtfV0FSTihmbXQsIC4uLikJXAo+ICsJZG8geyBpZiAoYnRtdGtf bG9nX2x2bCA+PSBCVE1US19MT0dfTFZMX1dBUk4pIFwKPiArCQlwcl93YXJuKCJbYnRtdGtfd2Fy bl0gIiBmbXQiXG4iLCAjI19fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKPiArI2RlZmluZSBCVE1U S19JTkZPKGZtdCwgLi4uKQlcCj4gKwlkbyB7IGlmIChidG10a19sb2dfbHZsID49IEJUTVRLX0xP R19MVkxfSU5GTykgXAo+ICsJCXByX3dhcm4oIltidG10a19pbmZvXSAiIGZtdCJcbiIsICMjX19W QV9BUkdTX18pOyB9IHdoaWxlICgwKQo+ICsjZGVmaW5lIEJUTVRLX0RCRyhmbXQsIC4uLikJIFwK PiArCWRvIHsgaWYgKGJ0bXRrX2xvZ19sdmwgPj0gQlRNVEtfTE9HX0xWTF9EQkcpIFwKPiArCQlw cl93YXJuKCJbYnRtdGtfZGJnXSAiIGZtdCJcbiIsICMjX19WQV9BUkdTX18pOyB9IHdoaWxlICgw KQo+ICsKPiArI2RlZmluZSBCVE1US19JTkZPX1JBVyhwLCBsLCBmbXQsIC4uLikJCQkJCQlcCj4g KwlkbyB7CQkJCQkJCQkJXAo+ICsJCWlmIChidG10a19sb2dfbHZsID49IEJUTVRLX0xPR19MVkxf SU5GTykgewkJCVwKPiArCQkJaW50IHJhd19jb3VudCA9IDA7CQkJCQlcCj4gKwkJCWNoYXIgc3Ry W0hDSV9MT0dfTUFYX0JVRl9TSVpFICogMyArIDFdOwkJCVwKPiArCQkJY2hhciAqcF9zdHIgPSBz dHI7CQkJCQlcCj4gKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9IHA7CQkJCVwKPiArCQkJ cHJfd2FybigiW2J0bXRrX2luZm9dICIgZm10LCAjI19fVkFfQVJHU19fKTsJCVwKPiArCQkJZm9y IChyYXdfY291bnQgPSAwOyByYXdfY291bnQgPCBNSU4obCwgSENJX0xPR19NQVhfQlVGX1NJWkUp OyArK3Jhd19jb3VudClcCj4gKwkJCQlwX3N0ciArPSBzcHJpbnRmKHBfc3RyLCAiICUwMlgiLCBw dHJbcmF3X2NvdW50XSk7CQlcCj4gKwkJCSpwX3N0ciA9ICdcMCc7CQkJCQkJCQlcCj4gKwkJCXBy X3dhcm4oIiVzXG4iLCBzdHIpOwkJCQkJXAo+ICsJCX0JCQkJCQkJCVwKPiArCX0gd2hpbGUgKDAp Cj4gKwo+ICsjZGVmaW5lIEJUTVRLX0RCR19SQVcocCwgbCwgZm10LCAuLi4pCQkJCQkJXAo+ICsJ ZG8gewkJCQkJCQkJCVwKPiArCQlpZiAoYnRtdGtfbG9nX2x2bCA+PSBCVE1US19MT0dfTFZMX0RC RykgewkJCVwKPiArCQkJaW50IHJhd19jb3VudCA9IDA7CQkJCQlcCj4gKwkJCWNoYXIgc3RyW0hD SV9MT0dfTUFYX0JVRl9TSVpFICogMyArIDFdOwkJCVwKPiArCQkJY2hhciAqcF9zdHIgPSBzdHI7 CQkJCQlcCj4gKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9IHA7CQkJCVwKPiArCQkJcHJf d2FybigiW2J0bXRrX2RlYnVnXSAiIGZtdCwgIyNfX1ZBX0FSR1NfXyk7CQlcCj4gKwkJCWZvciAo cmF3X2NvdW50ID0gMDsgcmF3X2NvdW50IDwgTUlOKGwsIEhDSV9MT0dfTUFYX0JVRl9TSVpFKTsg KytyYXdfY291bnQpXAo+ICsJCQkJcF9zdHIgKz0gc3ByaW50ZihwX3N0ciwgIiAlMDJYIiwgcHRy W3Jhd19jb3VudF0pOwkJXAo+ICsJCQkqcF9zdHIgPSAnXDAnOwkJCQkJCVwKPiArCQkJcHJfd2Fy bigiJXNcbiIsIHN0cik7CQkJCQlcCj4gKwkJfQkJCQkJCQkJXAo+ICsJfSB3aGlsZSAoMCkKPiAr CgpOTy4gUGVyaW9kLiBXZSBoYXZlIGhleGR1bXAgaGVscGVycyBpZiB0aGlzIGlzIHJlYWxseSB3 YW50ZWQuIEFsc28gdXNlIGJ0bW9uIHRvIHRyYWNlIHlvdXIgSENJIHBhY2tldHMuCgo+ICsjZGVm aW5lIEJUTVRLX0NJRl9JU19OVUxMKGJkZXYsIGNpZl9ldmVudCkgXAo+ICsJKCFiZGV2IHx8ICEo JmJkZXYtPmNpZl9zdGF0ZVtjaWZfZXZlbnRdKSkKPiArCj4gKy8qKgo+ICsgKgo+ICsgKiBIQ0kg cGFja2V0IHR5cGUKPiArICovCj4gKyNkZWZpbmUgTVRLX0hDSV9DT01NQU5EX1BLVAkJMHgwMQo+ ICsjZGVmaW5lIE1US19IQ0lfQUNMREFUQV9QS1QJCTB4MDIKPiArI2RlZmluZSBNVEtfSENJX1ND T0RBVEFfUEtUCQkweDAzCj4gKyNkZWZpbmUgTVRLX0hDSV9FVkVOVF9QS1QJCTB4MDQKPiArI2Rl ZmluZSBIQ0lfSVNPX1BLVAkJCTB4MDUKPiArI2RlZmluZSBIQ0lfSVNPX1BLVF9IRUFERVJfU0la RQk0Cj4gKyNkZWZpbmUgSENJX0lTT19QS1RfV0lUSF9BQ0xfSEVBREVSX1NJWkUJNQoKTk8uIFBs ZWFzZSBzdG9wIGNvcHlpbmcgZGVmaW5lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQuCgo+ICsK PiArLyoqCj4gKyAqIFJPTSBwYXRjaCByZWxhdGVkCj4gKyAqLwo+ICsjZGVmaW5lIFBBVENIX0hD SV9IRUFERVJfU0laRQk0Cj4gKyNkZWZpbmUgUEFUQ0hfV01UX0hFQURFUl9TSVpFCTUKPiArI2Rl ZmluZSBQQVRDSF9IRUFERVJfU0laRQkoUEFUQ0hfSENJX0hFQURFUl9TSVpFICsgUEFUQ0hfV01U X0hFQURFUl9TSVpFICsgMSkKPiArCj4gKyNkZWZpbmUgVVBMT0FEX1BBVENIX1VOSVQJMjA0OAo+ ICsjZGVmaW5lIFBBVENIX0lORk9fU0laRQkJMzAKPiArI2RlZmluZSBQQVRDSF9QSEFTRTEJCTEK PiArI2RlZmluZSBQQVRDSF9QSEFTRTIJCTIKPiArI2RlZmluZSBQQVRDSF9QSEFTRTMJCTMKPiAr Cj4gKy8qIEl0IGlzIGZvciBtdDc5NjEgZG93bmxvYWQgcm9tIHBhdGNoKi8KPiArI2RlZmluZSBG V19ST01fUEFUQ0hfSEVBREVSX1NJWkUJMzIKPiArI2RlZmluZSBGV19ST01fUEFUQ0hfR0RfU0la RQk2NAo+ICsjZGVmaW5lIEZXX1JPTV9QQVRDSF9TRUNfTUFQX1NJWkUJNjQKPiArI2RlZmluZSBT RUNfTUFQX05FRURfU0VORF9TSVpFCTUyCj4gKyNkZWZpbmUgUEFUQ0hfU1RBVFVTCTcKPiArCj4g KyNkZWZpbmUgSU9fQlVGX1NJWkUJCShIQ0lfTUFYX0VWRU5UX1NJWkUgPiAyNTYgPyBIQ0lfTUFY X0VWRU5UX1NJWkUgOiAyNTYpCj4gKyNkZWZpbmUgRVZFTlRfQ09NUEFSRV9TSVpFCTY0Cj4gKwo+ ICsjZGVmaW5lIFNFQ1RJT05fU1BFQ19OVU0JMTMKPiArCj4gKy8qKgo+ICsgKiBEaXNhYmxlIFJF U1VNRV9SRVNVTUUKPiArICovCj4gKyNpZm5kZWYgQlRfRElTQUJMRV9SRVNFVF9SRVNVTUUKPiAr I2RlZmluZSBCVF9ESVNBQkxFX1JFU0VUX1JFU1VNRSAwCj4gKyNlbmRpZgo+ICsKPiArI2RlZmlu ZSBXSUZJX0RPV05MT0FECVRSVUUKPiArI2RlZmluZSBCVF9ET1dOTE9BRAlGQUxTRQo+ICsKPiAr I2RlZmluZSBTV0FQMzIoeClcCj4gKwkoKHUzMikoXAo+ICsJKCgodTMyKSh4KSAmICh1MzIpMHgw MDAwMDBmZlVMKSA8PCAyNCkgfFwKPiArCSgoKHUzMikoeCkgJiAodTMyKTB4MDAwMGZmMDBVTCkg PDwgOCkgfFwKPiArCSgoKHUzMikoeCkgJiAodTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfFwKPiAr CSgoKHUzMikoeCkgJiAodTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpKSkKPiArCj4gKy8qIEVuZGlh biBieXRlIHN3YXBwaW5nIGNvZGVzICovCj4gKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KPiArI2Rl ZmluZSBjcHUybGUzMih4KSAoKHVpbnQzMl90KSh4KSkKPiArI2RlZmluZSBsZTJjcHUzMih4KSAo KHVpbnQzMl90KSh4KSkKPiArI2RlZmluZSBjcHUyYmUzMih4KSBTV0FQMzIoKHgpKQo+ICsjZGVm aW5lIGJlMmNwdTMyKHgpIFNXQVAzMigoeCkpCj4gKyNlbHNlCj4gKyNkZWZpbmUgY3B1MmxlMzIo eCkgU1dBUDMyKCh4KSkKPiArI2RlZmluZSBsZTJjcHUzMih4KSBTV0FQMzIoKHgpKQo+ICsjZGVm aW5lIGNwdTJiZTMyKHgpICgodWludDMyX3QpKHgpKQo+ICsjZGVmaW5lIGJlMmNwdTMyKHgpICgo dWludDMyX3QpKHgpKQo+ICsjZW5kaWYKCk5PLiBQZXJpb2QuIFdlIGhhdmUgcHJvcGVyIGVuZGlh biBmdW5jdGlvbmFsaXR5LgoKPiArCj4gKyNkZWZpbmUgRldfVkVSU0lPTgkweDgwMDIxMDA0Cj4g KyNkZWZpbmUgQ0hJUF9JRAkweDcwMDEwMjAwCj4gKyNkZWZpbmUgRkxBVk9SCTB4NzAwMTAwMjAK PiArI2RlZmluZSBDT01QX0VWRU5UX1RJTU8JCTUwMDAKPiArCj4gKyNkZWZpbmUgaGNpX2Rldl90 ZXN0X2FuZF9jbGVhcl9mbGFnKGhkZXYsIG5yKSAgdGVzdF9hbmRfY2xlYXJfYml0KChuciksICho ZGV2KS0+ZGV2X2ZsYWdzKQo+ICsKPiArLyogaDRfcmVjdiAqLwo+ICsjZGVmaW5lIGhjaV9za2Jf cGt0X3R5cGUoc2tiKSBidF9jYigoc2tiKSktPnBrdF90eXBlCj4gKyNkZWZpbmUgaGNpX3NrYl9l eHBlY3Qoc2tiKSBidF9jYigoc2tiKSktPmV4cGVjdAo+ICsjZGVmaW5lIGhjaV9za2Jfb3Bjb2Rl KHNrYikgYnRfY2IoKHNrYikpLT5oY2kub3Bjb2RlCj4gKwo+ICsvKiBIQ0kgYnVzIHR5cGVzICov Cj4gKyNkZWZpbmUgSENJX1ZJUlRVQUwJMAo+ICsjZGVmaW5lIEhDSV9VU0IJCTEKPiArI2RlZmlu ZSBIQ0lfUENDQVJECTIKPiArI2RlZmluZSBIQ0lfVUFSVAkzCj4gKyNkZWZpbmUgSENJX1JTMjMy CTQKPiArI2RlZmluZSBIQ0lfUENJCQk1Cj4gKyNkZWZpbmUgSENJX1NESU8JNgo+ICsjZGVmaW5l IEhDSV9TUEkJCTcKPiArI2RlZmluZSBIQ0lfSTJDCQk4Cj4gKyNkZWZpbmUgSENJX1NNRAkJOQo+ ICsKCk5PLiBQZXJpb2QuIFNlZSBjb21tZW50cyBhYm92ZS4KCkZyYW5rbHkgaXQgaXMgaW5zdWx0 aW5nIHRoYXQgSSBoYXZlIHRvIHJldmlldyBhIHBhdGNoIGxpa2UgdGhpcy4gUGxlYXNlIGRvIGNs ZWFudXBzIGFuZCBub3QganVzdCBkdW1wIGEgcGF0Y2ggdG8gbWUgdGhhdCBoYXMgYWxsIHRoZXNl IGR1cGxpY2F0ZXMgaW4gdGhlcmUuCgo+ICsjZGVmaW5lIEhDSV9UWVBFX1NJWkUJMQo+ICsvKiB0 aGlzIGZvciA3OVhYIG5lZWQgZG93bmxvYWQgcGF0Y2ggc3RhdXMKPiArICogMDoKPiArICogcGF0 Y2ggZG93bmxvYWQgaXMgbm90IGNvbXBsZXRlLCBCVCBkcml2ZXIgbmVlZCB0byBkb3dubG9hZCBw YXRjaAo+ICsgKiAxOgo+ICsgKiBwYXRjaCBpcyBkb3dubG9hZGluZyBieSBXaWZpLEJUIGRyaXZl ciBuZWVkIHRvIHJldHJ5IHVudGlsIHN0YXR1cyA9IFBBVENIX1JFQURZCj4gKyAqIDI6Cj4gKyAq IHBhdGNoIGRvd25sb2FkIGlzIGNvbXBsZXRlLCBCVCBkcml2ZXIgbm8gbmVlZCB0byBkb3dubG9h ZCBwYXRjaAo+ICsgKi8KPiArI2RlZmluZSBQQVRDSF9FUlIgLTEKPiArI2RlZmluZSBQQVRDSF9O RUVEX0RPV05MT0FEIDAKPiArI2RlZmluZSBQQVRDSF9JU19ET1dOTE9BRF9CWV9PVEhFUiAxCj4g KyNkZWZpbmUgUEFUQ0hfUkVBRFkgMgo+ICsKPiArLyogMDoKPiArICogdXNpbmcgbGVnYWN5IHdt dCBjbWQvZXZ0IHRvIGRvd25sb2FkIGZ3IHBhdGNoLCB1c2Ivc2RpbyBqdXN0IHN1cHBvcnQgMCBu b3cKPiArICogMToKPiArICogdXNpbmcgRE1BIHRvIGRvd25sb2FkIGZ3IHBhdGNoCj4gKyAqLwo+ ICsjZGVmaW5lIFBBVENIX0RPV05MT0FEX1VTSU5HX1dNVCAwCj4gKyNkZWZpbmUgUEFUQ0hfRE9X TkxPQURfVVNJTkdfRE1BIDEKPiArCj4gKyNkZWZpbmUgUEFUQ0hfRE9XTkxPQURfUEhBU0UxXzJf REVMQVlfVElNRSAxCj4gKyNkZWZpbmUgUEFUQ0hfRE9XTkxPQURfUEhBU0UxXzJfUkVUUlkgNQo+ ICsjZGVmaW5lIFBBVENIX0RPV05MT0FEX1BIQVNFM19ERUxBWV9USU1FIDIwCj4gKyNkZWZpbmUg UEFUQ0hfRE9XTkxPQURfUEhBU0UzX1JFVFJZIDIwCj4gKwo+ICsvKiAqIGRlbGF5IGFuZCByZXRy ZXkgZm9yIG1haW5fc2VuZF9jbWQgKi8KPiArI2RlZmluZSBXTVRfREVMQVlfVElNRVMgMTAwCj4g KyNkZWZpbmUgREVMQVlfVElNRVMgMjAKPiArI2RlZmluZSBSRVRSWV9USU1FUyAyMAo+ICsKPiAr LyogRXhwZWN0ZWQgbWluaW11bSBzdXBwb3J0ZWQgaW50ZXJmYWNlICovCj4gKyNkZWZpbmUgQlRf TUNVX01JTklNVU1fSU5URVJGQUNFX05VTQk0Cj4gKwo+ICsvKiBCdXMgZXZlbnQgKi8KPiArI2Rl ZmluZSBISUZfRVZFTlRfUFJPQkUJCTAKPiArI2RlZmluZSBISUZfRVZFTlRfRElTQ09OTkVDVAkx Cj4gKyNkZWZpbmUgSElGX0VWRU5UX1NVU1BFTkQJMgo+ICsjZGVmaW5lIEhJRl9FVkVOVF9SRVNV TUUJMwo+ICsjZGVmaW5lIEhJRl9FVkVOVF9TVEFOREJZCTQKPiArI2RlZmluZSBISUZfRVZFTlRf U1VCU1lTX1JFU0VUCTUKPiArI2RlZmluZSBISUZfRVZFTlRfV0hPTEVfQ0hJUF9SRVNFVAk2Cj4g KyNkZWZpbmUgSElGX0VWRU5UX0ZXX0RVTVAJNwo+ICsKPiArI2RlZmluZSBDSEFSMkhFWF9TSVpF CTQKPiArCj4gKyNkZWZpbmUgRURSX01JTgkJLTMyCj4gKyNkZWZpbmUgRURSX01BWAkJMjAKPiAr I2RlZmluZSBFRFJfTUlOX0xWOQkxMwo+ICsjZGVmaW5lIEJMRV9NSU4JCS0yOQo+ICsjZGVmaW5l IEJMRV9NQVgJCTIwCj4gKyNkZWZpbmUgRURSX01JTl9SMQktNjQKPiArI2RlZmluZSBFRFJfTUFY X1IxCTQwCj4gKyNkZWZpbmUgRURSX01JTl9MVjlfUjEJMjYKPiArI2RlZmluZSBCTEVfTUlOX1Ix CS01OAo+ICsjZGVmaW5lIEJMRV9NQVhfUjEJNDAKPiArI2RlZmluZSBFRFJfTUlOX1IyCS0xMjgK PiArI2RlZmluZSBFRFJfTUFYX1IyCTgwCj4gKyNkZWZpbmUgRURSX01JTl9MVjlfUjIJNTIKPiAr I2RlZmluZSBCTEVfTUlOX1IyCS0xMTYKPiArI2RlZmluZSBCTEVfTUFYX1IyCTgwCj4gKwo+ICsj ZGVmaW5lIEVSUl9QV1IJCS05OTk5Cj4gKwo+ICtlbnVtIHsKPiArCVJFU18xID0gMCwKPiArCVJF U19ET1RfNSwKPiArCVJFU19ET1RfMjUKPiArfTsKPiArCj4gK2VudW0gewo+ICsJQ0hFQ0tfU0lO R0xFX1NLVV9QV1JfTU9ERQk9IDAsCj4gKwlDSEVDS19TSU5HTEVfU0tVX0VEUl9NQVgsCj4gKwlD SEVDS19TSU5HTEVfU0tVX0JMRSwKPiArCUNIRUNLX1NJTkdMRV9TS1VfQkxFXzJNLAo+ICsJQ0hF Q0tfU0lOR0xFX1NLVV9CTEVfTFJfUzIsCj4gKwlDSEVDS19TSU5HTEVfU0tVX0JMRV9MUl9TOCwK PiArCUNIRUNLX1NJTkdMRV9TS1VfQUxMCj4gK307Cj4gKwo+ICtzdHJ1Y3QgYnRtdGtfY2lmX3N0 YXRlIHsKPiArCXVuc2lnbmVkIGNoYXIgb3BzX2VudGVyOwo+ICsJdW5zaWduZWQgY2hhciBvcHNf ZW5kOwo+ICsJdW5zaWduZWQgY2hhciBvcHNfZXJyb3I7Cj4gK307Cj4gKwo+ICtlbnVtIFRYX1RZ UEUgewo+ICsJQlRNVEtfVFhfQ01EX0ZST01fRFJWID0gMCwJLyogc2VuZCBoY2kgY21kIGFuZCB3 bXQgY21kIGJ5IGRyaXZlciAqLwo+ICsJQlRNVEtfVFhfQUNMX0ZST01fRFJWLAkvKiBzZW5kIGFj bCBwa3Qgd2l0aCBsb2FkIHJvbXBhdGNoIGJ5IGRyaXZlciAqLwo+ICsJQlRNVEtfVFhfUEtUX0ZS T01fSE9TVCwJLyogc2VuZCBwa3QgZnJvbSBob3N0LCBpbmNsdWRlIGFjbCBhbmQgaGNpICovCj4g K307Cj4gKwo+ICtlbnVtIHsKPiArCUJUTVRLX0RPTkdMRV9TVEFURV9VTktOT1dOLAo+ICsJQlRN VEtfRE9OR0xFX1NUQVRFX1BPV0VSX09OLAo+ICsJQlRNVEtfRE9OR0xFX1NUQVRFX1BPV0VSX09G RiwKPiArCUJUTVRLX0RPTkdMRV9TVEFURV9FUlJPUiwKPiArfTsKPiArCj4gK2VudW0gewo+ICsJ SFdfRVJSX05PTkUgPSAweDAwLAo+ICsJSFdfRVJSX0NPREVfQ0hJUF9SRVNFVCA9IDB4RjAsCj4g KwlIV19FUlJfQ09ERV9VU0JfRElTQyA9IDB4RjEsCj4gKwlIV19FUlJfQ09ERV9DT1JFX0RVTVAg PSAweEYyLAo+ICsJSFdfRVJSX0NPREVfUE9XRVJfT04gPSAweEYzLAo+ICsJSFdfRVJSX0NPREVf UE9XRVJfT0ZGID0gMHhGNCwKPiArCUhXX0VSUl9DT0RFX1NFVF9TTEVFUF9DTUQgPSAweEY1LAo+ ICsJSFdfRVJSX0NPREVfUkVTRVRfU1RBQ0tfQUZURVJfV09CTEUgPSAweEY2LAo+ICt9Owo+ICsK PiArLyogUGxlYXNlIGtlZXAgc3luYyB3aXRoIGJ0bXRrX3NldF9zdGF0ZSBmdW5jdGlvbiAqLwo+ ICtlbnVtIHsKPiArCS8qIEJUTVRLX1NUQVRFX1VOS05PV04gPSAwLCAqLwo+ICsJQlRNVEtfU1RB VEVfSU5JVCA9IDEsCj4gKwlCVE1US19TVEFURV9ESVNDT05ORUNULAo+ICsJQlRNVEtfU1RBVEVf UFJPQkUsCj4gKwlCVE1US19TVEFURV9XT1JLSU5HLAo+ICsJQlRNVEtfU1RBVEVfU1VTUEVORCwK PiArCUJUTVRLX1NUQVRFX1JFU1VNRSwKPiArCUJUTVRLX1NUQVRFX0ZXX0RVTVAsCj4gKwlCVE1U S19TVEFURV9TVEFOREJZLAo+ICsJQlRNVEtfU1RBVEVfU1VCU1lTX1JFU0VULAo+ICt9Owo+ICsK PiArLyogUGxlYXNlIGtlZXAgc3luYyB3aXRoIGJ0bXRrX2ZvcHNfc2V0X3N0YXRlIGZ1bmN0aW9u ICovCj4gK2VudW0gewo+ICsJLyogQlRNVEtfRk9QU19TVEFURV9VTktOT1dOID0gMCwgKi8KPiAr CUJUTVRLX0ZPUFNfU1RBVEVfSU5JVCA9IDEsCj4gKwlCVE1US19GT1BTX1NUQVRFX09QRU5JTkcs CS8qIGR1cmluZyBvcGVuaW5nICovCj4gKwlCVE1US19GT1BTX1NUQVRFX09QRU5FRCwJLyogb3Bl biBpbiBmb3BzX29wZW4gKi8KPiArCUJUTVRLX0ZPUFNfU1RBVEVfQ0xPU0lORywJLyogZHVyaW5n IGNsb3NpbmcgKi8KPiArCUJUTVRLX0ZPUFNfU1RBVEVfQ0xPU0VELAkvKiBjbG9zZWQgKi8KPiAr fTsKPiArCj4gK2VudW0gewo+ICsJQlRNVEtfRVZFTlRfQ09NUEFSRV9TVEFURV9VTktOT1dOLAo+ ICsJQlRNVEtfRVZFTlRfQ09NUEFSRV9TVEFURV9OT1RISU5HX05FRURfQ09NUEFSRSwKPiArCUJU TVRLX0VWRU5UX0NPTVBBUkVfU1RBVEVfTkVFRF9DT01QQVJFLAo+ICsJQlRNVEtfRVZFTlRfQ09N UEFSRV9TVEFURV9DT01QQVJFX1NVQ0NFU1MsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaDRfcmVjdl9w a3Qgewo+ICsJdTggIHR5cGU7CS8qIFBhY2tldCB0eXBlICovCj4gKwl1OCAgaGxlbjsJLyogSGVh ZGVyIGxlbmd0aCAqLwo+ICsJdTggIGxvZmY7CS8qIERhdGEgbGVuZ3RoIG9mZnNldCBpbiBoZWFk ZXIgKi8KPiArCXU4ICBsc2l6ZTsJLyogRGF0YSBsZW5ndGggZmllbGQgc2l6ZSAqLwo+ICsJdTE2 IG1heGxlbjsJLyogTWF4IG92ZXJhbGwgcGFja2V0IGxlbmd0aCAqLwo+ICsJaW50ICgqcmVjdiko c3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwo+ICt9Owo+ICsKPiAr c3RydWN0IF9QQVRDSF9IRUFERVIgewo+ICsJdTggdWNkYXRldGltZVsxNl07Cj4gKwl1OCB1Y3Bs YXRmb3JtWzRdOwo+ICsJdTE2IHUyaHd2ZXI7Cj4gKwl1MTYgdTJzd3ZlcjsKPiArCXUzMiB1NG1h Z2ljbnVtOwo+ICt9Owo+ICsKPiArc3RydWN0IF9HTE9CQUxfREVTQ1Igewo+ICsJdTMyIHU0cGF0 Y2h2ZXI7Cj4gKwl1MzIgdTRzdWJzeXM7Cj4gKwl1MzIgdTRmZWF0dXJlb3B0Owo+ICsJdTMyIHU0 c2VjdGlvbm51bTsKPiArfTsKPiArCj4gK3N0cnVjdCBfU0VDVElPTl9NQVAgewo+ICsJdTMyIHU0 c2VjdHlwZTsKPiArCXUzMiB1NHNlY29mZnNldDsKPiArCXUzMiB1NHNlY3NpemU7Cj4gKwl1bmlv biB7Cj4gKwkJdTMyIHU0c2Vjc3BlY1tTRUNUSU9OX1NQRUNfTlVNXTsKPiArCQlzdHJ1Y3Qgewo+ ICsJCQl1MzIgdTRkbGFkZHI7Cj4gKwkJCXUzMiB1NGRsc2l6ZTsKPiArCQkJdTMyIHU0c2Vja2V5 aWR4Owo+ICsJCQl1MzIgdTRhbGlnbmxlbjsKPiArCQkJdTMyIHU0c2VjdHlwZTsKPiArCQkJdTMy IHU0ZGxtb2RlY3JjdHlwZTsKPiArCQkJdTMyIHU0Y3JjOwo+ICsJCQl1MzIgcmVzZXJ2ZWRbNl07 Cj4gKwkJfSBiaW5faW5mb19zcGVjOwo+ICsJfTsKPiArfTsKPiArCj4gKyNkZWZpbmUgSDRfUkVD Vl9BQ0wgXAo+ICsJLnR5cGUgPSBIQ0lfQUNMREFUQV9QS1QsIFwKPiArCS5obGVuID0gSENJX0FD TF9IRFJfU0laRSwgXAo+ICsJLmxvZmYgPSAyLCBcCj4gKwkubHNpemUgPSAyLCBcCj4gKwkubWF4 bGVuID0gSENJX01BWF9GUkFNRV9TSVpFIFwKPiArCj4gKyNkZWZpbmUgSDRfUkVDVl9TQ08gXAo+ ICsJLnR5cGUgPSBIQ0lfU0NPREFUQV9QS1QsIFwKPiArCS5obGVuID0gSENJX1NDT19IRFJfU0la RSwgXAo+ICsJLmxvZmYgPSAyLCBcCj4gKwkubHNpemUgPSAxLCBcCj4gKwkubWF4bGVuID0gSENJ X01BWF9TQ09fU0laRQo+ICsKPiArI2RlZmluZSBINF9SRUNWX0VWRU5UIFwKPiArCS50eXBlID0g SENJX0VWRU5UX1BLVCwgXAo+ICsJLmhsZW4gPSBIQ0lfRVZFTlRfSERSX1NJWkUsIFwKPiArCS5s b2ZmID0gMSwgXAo+ICsJLmxzaXplID0gMSwgXAo+ICsJLm1heGxlbiA9IEhDSV9NQVhfRVZFTlRf U0laRQo+ICsKPiArc3RydWN0IGJ0bXRrX2RldiB7Cj4gKwlzdHJ1Y3QgaGNpX2RldgkqaGRldjsK PiArCXVuc2lnbmVkIGxvbmcJaGRldl9mbGFnczsKPiArCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cj4g Kwl2b2lkICppbnRmX2RldjsKPiArCXZvaWQgKmNpZl9kZXY7Cj4gKwo+ICsJc3RydWN0IHdvcmtf c3RydWN0CXdvcms7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd2FrZXI7Cj4gKwlzdHJ1Y3Qgd29y a19zdHJ1Y3QJcmVzZXRfd2FrZXI7Cj4gKwo+ICsJaW50IHJlY3ZfZXZ0X2xlbjsKPiArCWludCB0 eF9pbl9mbGlnaHQ7Cj4gKwkvKiBmb3IgdHggc2tiIGJ1ZmZlciAqLwo+ICsJc3BpbmxvY2tfdCB0 eGxvY2s7Cj4gKwkvKiBmb3Igcnggc2tiIGJ1ZmZlciAqLwo+ICsJc3BpbmxvY2tfdCByeGxvY2s7 Cj4gKwlzdHJ1Y3Qgc2tfYnVmZgkqZXZ0X3NrYjsKPiArCXN0cnVjdCBza19idWZmCSpzY29fc2ti Owo+ICsKPiArCS8qIEZvciBibGUgaXNvIHBhY2tldCBzaXplICovCj4gKwlpbnQgaXNvX3RocmVz aG9sZDsKPiArCj4gKwl1bnNpZ25lZCBpbnQJc2NvX251bTsKPiArCWludAlpc29jX2FsdHNldHRp bmc7Cj4gKwo+ICsJaW50CXN1c3BlbmRfY291bnQ7Cj4gKwo+ICsJLyogRm9yIHR4IHF1ZXVlICov Cj4gKwl1bnNpZ25lZCBsb25nCXR4X3N0YXRlOwo+ICsKPiArCS8qIEZvciByeCBxdWV1ZSAqLwo+ ICsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtxdWV1ZTsKPiArCXN0cnVjdCBza19idWZm X2hlYWQJcnhfcTsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdAlyeF93b3JrOwo+ICsJc3RydWN0IHNr X2J1ZmYJCSpyeF9za2I7Cj4gKwo+ICsJd2FpdF9xdWV1ZV9oZWFkX3QJcF93YWl0X2V2ZW50X3E7 Cj4gKwo+ICsJdW5zaWduZWQgaW50CXN1YnN5c19yZXNldDsKPiArCXVuc2lnbmVkIGludAljaGlw X3Jlc2V0Owo+ICsJdW5zaWduZWQgY2hhcgkqcm9tX3BhdGNoX2Jpbl9maWxlX25hbWU7Cj4gKwl1 bnNpZ25lZCBpbnQJY2hpcF9pZDsKPiArCXVuc2lnbmVkIGludAlmbGF2b3I7Cj4gKwl1bnNpZ25l ZCBpbnQJZndfdmVyc2lvbjsKPiArCXVuc2lnbmVkIGNoYXIJZG9uZ2xlX2luZGV4Owo+ICsJdW5z aWduZWQgY2hhcglwb3dlcl9zdGF0ZTsKPiArCXVuc2lnbmVkIGNoYXIJZm9wc19zdGF0ZTsKPiAr CXVuc2lnbmVkIGNoYXIJaW50ZXJmYWNlX3N0YXRlOwo+ICsJc3RydWN0IGJ0bXRrX2NpZl9zdGF0 ZSAqY2lmX3N0YXRlOwo+ICsKPiArCS8qIGlvIGJ1ZmZlciBmb3IgdXNiIGNvbnRyb2wgdHJhbnNm ZXIgKi8KPiArCXVuc2lnbmVkIGNoYXIJKmlvX2J1ZjsKPiArfTsKPiArCj4gK3R5cGVkZWYgaW50 ICgqY2lmX29wZW5fcHRyKShzdHJ1Y3QgaGNpX2RldiAqaGRldik7Cj4gK3R5cGVkZWYgaW50ICgq Y2lmX2Nsb3NlX3B0cikoc3RydWN0IGhjaV9kZXYgKmhkZXYpOwo+ICt0eXBlZGVmIGludCAoKmNp Zl9yZWdfcmVhZF9wdHIpKHN0cnVjdCBidG10a19kZXYgKmJkZXYsIHUzMiByZWcsIHUzMiAqdmFs KTsKPiArdHlwZWRlZiBpbnQgKCpjaWZfcmVnX3dyaXRlX3B0cikoc3RydWN0IGJ0bXRrX2RldiAq YmRldiwgdTMyIHJlZywgdTMyIHZhbCk7Cj4gK3R5cGVkZWYgaW50ICgqY2lmX3NlbmRfY21kX3B0 cikoc3RydWN0IGJ0bXRrX2RldiAqYmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKPiArCQlpbnQg ZGVsYXksIGludCByZXRyeSwgaW50IHBrdF90eXBlKTsKPiArdHlwZWRlZiBpbnQgKCpjaWZfc2Vu ZF9hbmRfcmVjdl9wdHIpKHN0cnVjdCBidG10a19kZXYgKmJkZXYsCj4gKwkJc3RydWN0IHNrX2J1 ZmYgKnNrYiwKPiArCQljb25zdCB1OCAqZXZlbnQsIGNvbnN0IGludCBldmVudF9sZW4sCj4gKwkJ aW50IGRlbGF5LCBpbnQgcmV0cnksIGludCBwa3RfdHlwZSk7Cj4gK3R5cGVkZWYgaW50ICgqY2lm X2V2ZW50X2ZpbHRlcl9wdHIpKHN0cnVjdCBidG10a19kZXYgKmJkZXYsIHN0cnVjdCBza19idWZm ICpza2IpOwo+ICt0eXBlZGVmIGludCAoKmNpZl9zdWJzeXNfcmVzZXRfcHRyKShzdHJ1Y3QgYnRt dGtfZGV2ICpiZGV2KTsKPiArdHlwZWRlZiBpbnQgKCpjaWZfd2hvbGVfcmVzZXRfcHRyKShzdHJ1 Y3QgYnRtdGtfZGV2ICpiZGV2KTsKPiArdHlwZWRlZiB2b2lkICgqY2lmX2NoaXBfcmVzZXRfbm90 aWZ5X3B0cikoc3RydWN0IGJ0bXRrX2RldiAqYmRldik7Cj4gK3R5cGVkZWYgdm9pZCAoKmNpZl9t dXRleF9sb2NrX3B0cikoc3RydWN0IGJ0bXRrX2RldiAqYmRldik7Cj4gK3R5cGVkZWYgdm9pZCAo KmNpZl9tdXRleF91bmxvY2tfcHRyKShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2KTsKPiArdHlwZWRl ZiB2b2lkICgqY2lmX29wZW5fZG9uZV9wdHIpKHN0cnVjdCBidG10a19kZXYgKmJkZXYpOwo+ICt0 eXBlZGVmIGludCAoKmNpZl9kbF9kbWFfcHRyKShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2LCB1OCAq aW1hZ2UsCj4gKwkJdTggKmZ3YnVmLCBpbnQgc2VjdGlvbl9kbF9zaXplLCBpbnQgc2VjdGlvbl9v ZmZzZXQpOwo+ICsKPiArc3RydWN0IGhpZl9ob29rX3B0ciB7Cj4gKwljaWZfb3Blbl9wdHIJCQlv cGVuOwo+ICsJY2lmX2Nsb3NlX3B0cgkJCWNsb3NlOwo+ICsJY2lmX3JlZ19yZWFkX3B0cgkJcmVn X3JlYWQ7Cj4gKwljaWZfcmVnX3dyaXRlX3B0cgkJcmVnX3dyaXRlOwo+ICsJY2lmX3NlbmRfY21k X3B0cgkJc2VuZF9jbWQ7Cj4gKwljaWZfc2VuZF9hbmRfcmVjdl9wdHIJCXNlbmRfYW5kX3JlY3Y7 Cj4gKwljaWZfZXZlbnRfZmlsdGVyX3B0cgkJZXZlbnRfZmlsdGVyOwo+ICsJY2lmX3N1YnN5c19y ZXNldF9wdHIJCXN1YnN5c19yZXNldDsKPiArCWNpZl93aG9sZV9yZXNldF9wdHIJCXdob2xlX3Jl c2V0Owo+ICsJY2lmX2NoaXBfcmVzZXRfbm90aWZ5X3B0cgljaGlwX3Jlc2V0X25vdGlmeTsKPiAr CWNpZl9tdXRleF9sb2NrX3B0cgkJY2lmX211dGV4X2xvY2s7Cj4gKwljaWZfbXV0ZXhfdW5sb2Nr X3B0cgkJY2lmX211dGV4X3VubG9jazsKPiArCWNpZl9vcGVuX2RvbmVfcHRyCQlvcGVuX2RvbmU7 Cj4gKwljaWZfZGxfZG1hX3B0cgkJCWRsX2RtYTsKPiArfTsKPiArCj4gK3N0cnVjdCBidG10a19t YWluX2luZm8gewo+ICsJc3RydWN0IGhpZl9ob29rX3B0ciBoaWZfaG9vazsKPiArfTsKPiArCj4g K3N0YXRpYyBpbmxpbmUgaW50IGlzX210NzkyMih1MzIgY2hpcF9pZCkKPiArewo+ICsJY2hpcF9p ZCAmPSAweEZGRkY7Cj4gKwlpZiAoY2hpcF9pZCA9PSAweDc5MjIpCj4gKwkJcmV0dXJuIDE7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgaXNfbXQ3OTYxKHUzMiBj aGlwX2lkKQo+ICt7Cj4gKwljaGlwX2lkICY9IDB4RkZGRjsKPiArCWlmIChjaGlwX2lkID09IDB4 Nzk2MSkKPiArCQlyZXR1cm4gMTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgYnRtdGtf Z2V0X2NoaXBfc3RhdGUoc3RydWN0IGJ0bXRrX2RldiAqYmRldik7Cj4gK3ZvaWQgYnRtdGtfc2V0 X2NoaXBfc3RhdGUoc3RydWN0IGJ0bXRrX2RldiAqYmRldiwgaW50IG5ld19zdGF0ZSk7Cj4gK2lu dCBidG10a19hbGxvY2F0ZV9oY2lfZGV2aWNlKHN0cnVjdCBidG10a19kZXYgKmJkZXYsIGludCBo Y2lfYnVzX3R5cGUpOwo+ICt2b2lkIGJ0bXRrX2ZyZWVfaGNpX2RldmljZShzdHJ1Y3QgYnRtdGtf ZGV2ICpiZGV2LCBpbnQgaGNpX2J1c190eXBlKTsKPiAraW50IGJ0bXRrX3JlZ2lzdGVyX2hjaV9k ZXZpY2Uoc3RydWN0IGJ0bXRrX2RldiAqYmRldik7Cj4gK2ludCBidG10a19kZXJlZ2lzdGVyX2hj aV9kZXZpY2Uoc3RydWN0IGJ0bXRrX2RldiAqYmRldik7Cj4gK2ludCBidG10a19yZWN2KHN0cnVj dCBoY2lfZGV2ICpoZGV2LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGNvdW50KTsKPiAraW50IGJ0 bXRrX3JlY3ZfZXZlbnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2Ip Owo+ICtpbnQgYnRtdGtfcmVjdl9hY2woc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19i dWZmICpza2IpOwo+ICtpbnQgYnRtdGtfc2VuZF9pbml0X2NtZHMoc3RydWN0IGJ0bXRrX2RldiAq aGRldik7Cj4gK2ludCBidG10a19zZW5kX2RlaW5pdF9jbWRzKHN0cnVjdCBidG10a19kZXYgKmhk ZXYpOwo+ICtpbnQgYnRtdGtfbWFpbl9zZW5kX2NtZChzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2LCBj b25zdCB1OCAqY21kLAo+ICsJCQljb25zdCBpbnQgY21kX2xlbiwgY29uc3QgdTggKmV2ZW50LCBj b25zdCBpbnQgZXZlbnRfbGVuLAo+ICsJCQlpbnQgZGVsYXksIGludCByZXRyeSwgaW50IHBrdF90 eXBlKTsKPiAraW50IGJ0bXRrX3NlbmRfd210X3Bvd2VyX29uX2NtZChzdHJ1Y3QgYnRtdGtfZGV2 ICpoZGV2KTsKPiAraW50IGJ0bXRrX3NlbmRfd210X3Bvd2VyX29mZl9jbWQoc3RydWN0IGJ0bXRr X2RldiAqaGRldik7Cj4gK2ludCBidG10a191YXJ0X3NlbmRfd2FrZXVwX2NtZChzdHJ1Y3QgaGNp X2RldiAqaGRldik7Cj4gK2ludCBidG10a191YXJ0X3NlbmRfc2V0X3VhcnRfY21kKHN0cnVjdCBo Y2lfZGV2ICpoZGV2KTsKPiAraW50IGJ0bXRrX2xvYWRfcm9tX3BhdGNoKHN0cnVjdCBidG10a19k ZXYgKmJkZXYpOwo+ICtzdHJ1Y3QgYnRtdGtfZGV2ICpidG10a19nZXRfZGV2KHZvaWQpOwo+ICt2 b2lkIGJ0bXRrX3JlbGVhc2VfZGV2KHN0cnVjdCBidG10a19kZXYgKmJkZXYpOwo+ICtzdHJ1Y3Qg YnRtdGtfZGV2ICpidG10a19hbGxvY2F0ZV9kZXZfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7 Cj4gK3ZvaWQgYnRtdGtfZnJlZV9kZXZfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGJ0bXRrX2RldiAqYmRldik7Cj4gK3ZvaWQgYnRtdGtfcmVzZXRfd2FrZXIoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKTsKPiArc3RydWN0IGJ0bXRrX21haW5faW5mbyAqYnRtdGtfZ2V0X21haW5f aW5mbyh2b2lkKTsKPiArLyoqIGZpbGVfb3BlcmF0aW9uczogc3RwYnRmd2xvZyAqLwo+ICtpbnQg YnRtdGtfZm9wc19vcGVuZndsb2coc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpOwo+ICtpbnQgYnRtdGtfZm9wc19jbG9zZWZ3bG9nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKTsKPiArc3NpemVfdCBidG10a19mb3BzX3JlYWRmd2xvZyhzdHJ1Y3Qg ZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9z KTsKPiArc3NpemVfdCBidG10a19mb3BzX3dyaXRlZndsb2coc3RydWN0IGZpbGUgKmZpbHAsIGNv bnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKPiArCQkJICAgICAgbG9mZl90ICpm X3Bvcyk7Cj4gK3Vuc2lnbmVkIGludCBidG10a19mb3BzX3BvbGxmd2xvZyhzdHJ1Y3QgZmlsZSAq ZmlscCwgcG9sbF90YWJsZSAqd2FpdCk7Cj4gK2xvbmcgYnRtdGtfZm9wc191bmxvY2tlZF9pb2N0 bGZ3bG9nKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25n IGFyZyk7Cj4gKwo+ICsvKiBBdXRvIGVuYWJsZSBwaWN1cyAqLwo+ICtpbnQgYnRtdGtfcGljdXNf ZW5hYmxlKHN0cnVjdCBidG10a19kZXYgKmJkZXYpOwo+ICtpbnQgYnRtdGtfcGljdXNfZGlzYWJs ZShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2KTsKPiArCj4gK3ZvaWQgYnRtdGtfcmVnX2hpZl9ob29r KHN0cnVjdCBoaWZfaG9va19wdHIgKmhvb2spOwo+ICtpbnQgYnRtdGtfbWFpbl9jaWZfaW5pdGlh bGl6ZShzdHJ1Y3QgYnRtdGtfZGV2ICpiZGV2LCBpbnQgaGNpX2J1cyk7Cj4gK3ZvaWQgYnRtdGtf bWFpbl9jaWZfdW5pbml0aWFsaXplKHN0cnVjdCBidG10a19kZXYgKmJkZXYsIGludCBoY2lfYnVz KTsKPiAraW50IGJ0bXRrX21haW5fY2lmX2Rpc2Nvbm5lY3Rfbm90aWZ5KHN0cnVjdCBidG10a19k ZXYgKmJkZXYsIGludCBoY2lfYnVzKTsKPiAraW50IGJ0bXRrX3NlbmRfYXNzZXJ0X2NtZChzdHJ1 Y3QgYnRtdGtfZGV2ICpiZGV2KTsKPiAraW50IGJ0bXRrX2VmdXNlX3JlYWQoc3RydWN0IGJ0bXRr X2RldiAqYmRldiwgdTE2IGFkZHIsIHU4ICp2YWx1ZSk7Cj4gKwo+ICt2b2lkIGJ0bXRrX3NldF9j b3VudHJ5X2NvZGVfZnJvbV93aWZpKGNoYXIgKmNvZGUpOwo+ICsKPiArI2VuZGlmIC8qIF9fQlRN VEtfTUFJTl9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtdGtfdXNi LmggYi9kcml2ZXJzL2JsdWV0b290aC9idG10a191c2IuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi45MmQxMWU4MDhlNzgKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ibHVldG9vdGgvYnRtdGtfdXNiLmgKPiBAQCAtMCwwICsxLDYwIEBACj4gKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8vIENvcHlyaWdodCAoYykg MjAyMCBNZWRpYVRlayBJbmMuCj4gKwo+ICsvKgo+ICsgKiBCbHVldG9vdGggc3VwcG9ydCBmb3Ig TWVkaWFUZWsgVVNCIGRldmljZXMKPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9CVE1US19V U0JfSF8KPiArI2RlZmluZSBfQlRNVEtfVVNCX0hfCj4gKyNpbmNsdWRlIDxsaW51eC91c2IuaD4K PiArI2luY2x1ZGUgImJ0bXRrX21haW4uaCIKPiArCj4gKyNkZWZpbmUgSENJX01BWF9DT01NQU5E X1NJWkUJMjU1Cj4gKyNkZWZpbmUgVVJCX01BWF9CVUZGRVJfU0laRQkoNCAqIDEwMjQpCj4gKwo+ ICsjZGVmaW5lIEJUMF9NQ1VfSU5URVJGQUNFX05VTSAwCj4gKyNkZWZpbmUgQlQxX01DVV9JTlRF UkZBQ0VfTlVNIDMKPiArI2RlZmluZSBCVF9NQ1VfSU5URVJGQUNFX05VTV9NQVggNAo+ICsjZGVm aW5lIEJUX01DVV9OVU1fTUFYIDIKPiArCj4gKy8qKgo+ICsgKiBTZW5kIGNtZCBkaXNwYXRjaCBl dnQKPiArICovCj4gKyNkZWZpbmUgSENJX0VWX1ZFTkRPUgkJCTB4ZmYKPiArI2RlZmluZSBIQ0lf VVNCX0lPX0JVRl9TSVpFCQkyNTYKPiArCj4gK2V4dGVybiB1OCB3bXRfb3Zlcl9oY2lfaGVhZGVy W107Cj4gKwo+ICtzdHJ1Y3QgYnRtdGtfdXNiX2RldiB7Cj4gKwlzdHJ1Y3QgdXNiX2VuZHBvaW50 X2Rlc2NyaXB0b3IJKmludHJfZXA7Cj4gKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJ KmJ1bGtfdHhfZXA7Cj4gKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmJ1bGtfcnhf ZXA7Cj4gKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmlzb2NfdHhfZXA7Cj4gKwlz dHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmlzb2NfcnhfZXA7Cj4gKwo+ICsJc3RydWN0 IHVzYl9kZXZpY2UJKnVkZXY7Cj4gKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKPiArCXN0 cnVjdCB1c2JfaW50ZXJmYWNlCSppc29jOwo+ICsJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmlzb19j aGFubmVsOwo+ICsKPiArCXN0cnVjdCB1c2JfYW5jaG9yCXR4X2FuY2hvcjsKPiArCXN0cnVjdCB1 c2JfYW5jaG9yCWludHJfYW5jaG9yOwo+ICsJc3RydWN0IHVzYl9hbmNob3IJYnVsa19hbmNob3I7 Cj4gKwlzdHJ1Y3QgdXNiX2FuY2hvcglpc29jX2FuY2hvcjsKPiArCXN0cnVjdCB1c2JfYW5jaG9y CWN0cmxfYW5jaG9yOwo+ICsKPiArCV9fdTgJY21kcmVxX3R5cGU7Cj4gKwlfX3U4CWNtZHJlcTsK PiArCj4gKwlpbnQgbmV3X2lzb2NfYWx0c2V0dGluZzsKPiArCWludCBuZXdfaXNvY19hbHRzZXR0 aW5nX2ludGVyZmFjZTsKPiArCj4gKwl1bnNpZ25lZCBjaGFyCSpvX3VzYl9idWY7Cj4gKwo+ICsJ dW5zaWduZWQgY2hhcgkqdXJiX2ludHJfYnVmOwo+ICsJdW5zaWduZWQgY2hhcgkqdXJiX2J1bGtf YnVmOwo+ICsJdW5zaWduZWQgY2hhcgkqdXJiX2JsZV9pc29jX2J1ZjsKPiArfTsKPiArI2VuZGlm Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXRrdXNiLmMgYi9kcml2ZXJzL2Js dWV0b290aC9idG10a3VzYi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjM2ZTAwZGRlYmU2Mgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2JsdWV0 b290aC9idG10a3VzYi5jCj4gQEAgLTAsMCArMSwyMDUwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8vIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMu Cj4gKwo+ICsvKgo+ICsgKiBCbHVldG9vdGggc3VwcG9ydCBmb3IgTWVkaWFUZWsgVVNCIGRldmlj ZXMKPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9maXJtd2FyZS5oPgo+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgo+ICsj aW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgo+ICsjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9i bHVldG9vdGguaD4KPiArI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KPiArI2lu Y2x1ZGUgImJ0bXRrX3VzYi5oIgo+ICsjaW5jbHVkZSAiYnRtdGtfbWFpbi5oIgo+ICsKPiArc3Rh dGljIHN0cnVjdCB1c2JfZHJpdmVyIGJ0dXNiX2RyaXZlcjsKPiArc3RhdGljIGludCBpbnRmX3Rv X2lkeFtCVF9NQ1VfSU5URVJGQUNFX05VTV9NQVhdID0gezAsIC0xLCAtMSwgMX07Cj4gK3N0YXRp YyBzdHJ1Y3QgYnRtdGtfdXNiX2RldiBnX3VzYl9kZXZbQlRfTUNVX01JTklNVU1fSU5URVJGQUNF X05VTV1bQlRfTUNVX05VTV9NQVhdOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2 aWNlX2lkIGJ0dXNiX3RhYmxlW10gPSB7Cj4gKwkvKiBNZWRpYXRlayBNVDc5NjEgKi8KPiArCXsg VVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwZThkLCAweDc5NjEsIDB4ZTAsIDB4MDEs IDB4MDEpIH0sCj4gKwkvKiBNZWRpYXRlayBNVDc5MjIgKi8KPiArCXsgVVNCX0RFVklDRV9BTkRf SU5URVJGQUNFX0lORk8oMHgwZThkLCAweDc5MjIsIDB4ZTAsIDB4MDEsIDB4MDEpIH0sCj4gKwo+ ICsJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCj4gK307Cj4gKwo+ICtzdGF0aWMgY2hhciBl dmVudF9uZWVkX2NvbXBhcmVbRVZFTlRfQ09NUEFSRV9TSVpFXSA9IHswfTsKPiArc3RhdGljIGNo YXIgZXZlbnRfbmVlZF9jb21wYXJlX2xlbjsKPiArc3RhdGljIGNoYXIgZXZlbnRfY29tcGFyZV9z dGF0dXM7Cj4gKwo+ICtzdGF0aWMgREVGSU5FX01VVEVYKGJ0bXRrX3VzYl9vcHNfbXV0ZXgpOwo+ ICsjZGVmaW5lIFVTQl9PUFNfTVVURVhfTE9DSygpCW11dGV4X2xvY2soJmJ0bXRrX3VzYl9vcHNf bXV0ZXgpCj4gKyNkZWZpbmUgVVNCX09QU19NVVRFWF9VTkxPQ0soKQltdXRleF91bmxvY2soJmJ0 bXRrX3VzYl9vcHNfbXV0ZXgpCj4gKwo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYnR1c2Jf dGFibGUpOwo+ICsKPiArI2RlZmluZSBCVFVTQl9NQVhfSVNPQ19GUkFNRVMJMjQKPiArCj4gKyNk ZWZpbmUgQlRVU0JfSU5UUl9SVU5OSU5HCTAKPiArI2RlZmluZSBCVFVTQl9CVUxLX1JVTk5JTkcJ MQo+ICsjZGVmaW5lIEJUVVNCX0lTT0NfUlVOTklORwkyCj4gKyNkZWZpbmUgQlRVU0JfU1VTUEVO RElORwkzCj4gKyNkZWZpbmUgQlRVU0JfRElEX0lTT19SRVNVTUUJNAo+ICsjZGVmaW5lIEJUVVNC X0JMRV9JU09DX1JVTk5JTkcJNQoKTG9va3MgbGlrZSBhIG1hc3NpdmUgY29weSBmcm9tIGJ0dXNi LmMgd2l0aG91dCBnaXZpbmcgYW55IGNyZWRpdC4KCkFueWhvdywgaXQgd291bGQgYmUgdXNlZnVs IHRoYXQgeW91IGRlc2NyaWJlIHdoYXQgZW5kcG9pbnRzIHRoZSBkZXZpY2UgaGFzIGFuZCB3aGF0 IGlzIHN1cHBvc2UgdG8gc2VuZCBhbmQgcmVjZWl2aW5nIG92ZXIgd2hhdCBlbmRwb2ludC4gVXNp bmcgYnR1c2IuYyBhcyBhIGJsdWVwcmludCBpcyBub3QgYSBnb29kIGlkZWEuIEl0IGlzIGEgbG90 IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB5b3Ugc3RhbmRhcmQgVVNCIGRyaXZlci4KClJlZ2FyZHMK Ck1hcmNlbAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkxpbnV4LW1lZGlhdGVrIG1haWxpbmcgbGlzdApMaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt bWVkaWF0ZWsK