From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F34EC4363A for ; Fri, 30 Oct 2020 10:14:35 +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 44CC4206E3 for ; Fri, 30 Oct 2020 10:14:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="bzX38tIe" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 44CC4206E3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=rock-chips.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=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:Message-ID:Mime-Version:References:Subject:To:From: Date:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:List-Owner; bh=O6GIzJ1RE86UuP8bFcFULuN0VT1LAyzPUcNDFYZ0c2o=; b=bzX38tIesveGdDhMWxvjKQEV6 x2+vOMS3uVmbKBVrgZzkmvtM5EKVSg1GCdtv1PBK5tmPZuwg/Zq+4EWJeNWqGloaJcYHi7ybPolIN Aif33MFy2BrZjKPiFXmGTny5s0zKh3M7dZuWGUGL5wHca1TNIiDIE7Hh4iXirO22rTiQ+ndRAN2t6 v9KGBO6V+fjEXRt+sCrD4i2QqtS28vp8rlgk6o8XCZvoe/QIFftIe0o/xwKGCvq9+xQW5ttXLyqqp JWo+//2/PxCnxZMZpWWUXniA00Tn3GRBHgslhr0piJWodO1KyJsLE24rwDn/bCcqpE0iF6JnUILvC jsvl+/tBQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYRQJ-0001UA-6k; Fri, 30 Oct 2020 10:14:19 +0000 Received: from regular1.263xmail.com ([211.150.70.203]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYRP1-0000sU-Ds; Fri, 30 Oct 2020 10:13:08 +0000 Received: from localhost (unknown [192.168.167.69]) by regular1.263xmail.com (Postfix) with ESMTP id 00BEC867; Fri, 30 Oct 2020 18:12:52 +0800 (CST) X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-ADDR-CHECKED4: 1 X-ANTISPAM-LEVEL: 2 X-SKE-CHECKED: 1 X-ABS-CHECKED: 1 Received: from hp1216 (unknown [58.22.7.114]) by smtp.263.net (postfix) whith ESMTP id P28983T139936207890176S1604052769999471_; Fri, 30 Oct 2020 18:12:50 +0800 (CST) X-IP-DOMAINF: 1 X-UNIQUE-TAG: X-RL-SENDER: zyf@rock-chips.com X-SENDER: zyf@rock-chips.com X-LOGIN-NAME: zyf@rock-chips.com X-FST-TO: miquel.raynal@bootlin.com X-SENDER-IP: 58.22.7.114 X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 X-System-Flag: 0 Date: Fri, 30 Oct 2020 18:12:52 +0800 Organization: =?utf-8?B?55Ge6Iqv5b6u55S15a2Q?= From: =?utf-8?B?6LW15Luq5bOw?= To: "Miquel Raynal" Subject: Re: Re: [PATCH v13 2/8] mtd: rawnand: rockchip: NFC drivers for RK3308, RK2928 and others References: <20201028095326.15562-1-yifeng.zhao@rock-chips.com>, <20201028095326.15562-3-yifeng.zhao@rock-chips.com>, <20201028114826.6cd6b841@xps13> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.18.111[cn] Mime-Version: 1.0 Message-ID: <20201030181152443876127@rock-chips.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201030_061300_328547_E443D7A7 X-CRM114-Status: GOOD ( 21.36 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree , vigneshr , richard , linux-kernel , linux-rockchip , robh+dt , linux-mtd , linux-arm-kernel , =?utf-8?B?SGVpa29TdMO8Ym5lcg==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgTWlxdWVsLAoKPkhpIFlpZmVuZywKPgo+QSBmZXcgbW9yZSBjb21tZW50cyBiZWxvdywgYnV0 IG92ZXJhbGwgbG9va3MgYmV0dGVyLgo+Cj5ZaWZlbmcgWmhhbyA8eWlmZW5nLnpoYW9Acm9jay1j aGlwcy5jb20+IHdyb3RlIG9uIFdlZCwgMjggT2N0IDIwMjAKPjE3OjUzOjI0ICswODAwOgo+Cj4+ IFRoaXMgZHJpdmVyIHN1cHBvcnRzIFJvY2tjaGlwIE5GQyAoTkFORCBGbGFzaCBDb250cm9sbGVy KSBmb3VuZCBvbiBSSzMzMDgsCj4+IFJLMjkyOCwgUktQWDMwLCBSVjExMDggYW5kIG90aGVyIFNP Q3MuIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHVzaW5nCj4+IDgtYml0IE5BTkQgaW50ZXJm YWNlIG9uIHRoZSBBUk0gYmFzZWQgUkszMzA4IHBsYXRmb3JtLgo+Pgo+PiBTdXBwb3J0IFJvY2tj aGlwIFNvQ3MgYW5kIE5GQyB2ZXJzaW9uczoKPj4gLSBQWDMwIGFuZCBSSzMzMjYoTkZDdjkwMCku Cj4+IEVDQzogMTYvNDAvNjAvNzAgYml0cy8xS0IuCj4+IENMT0NLOiBhaGIgYW5kIG5mYy4KPj4g LSBSSzMzMDggYW5kIFJWMTEwOChORkN2ODAwKS4KPj4gRUNDOiAxNiBiaXRzLzFLQi4KPj4gQ0xP Q0s6IGFoYiBhbmQgbmZjLgo+PiAtIFJLMzAzNiBhbmQgUkszMTI4KE5GQ3Y2MjIpLgo+PiBFQ0M6 IDE2LzI0LzQwLzYwIGJpdHMvMUtCLgo+PiBDTE9DSzogYWhiIGFuZCBuZmMuCj4+IC0gUkszMDY2 LCBSSzMxODggYW5kIFJLMjkyOChORkN2NjAwKS4KPj4gRUNDOiAxNi8yNC80MC82MCBiaXRzLzFL Qi4KPj4gQ0xPQ0s6IGFoYi4KPj4KPj4gU3VwcG9ydGVkIGZlYXR1cmVzOgo+PiAtIFJlYWQgZnVs bCBwYWdlIGRhdGEgYnkgRE1BLgo+PiAtIFN1cHBvcnQgSFcgRUNDKG9uZSBzdGVwIGlzIDFLQiku Cj4+IC0gU3VwcG9ydCAyIC0gMzJLIHBhZ2Ugc2l6ZS4KPj4gLSBTdXBwb3J0IDggQ1MoZGVwZW5k IG9uIFNvQ3MpCj4+Cj4+IExpbWl0YXRpb25zOgo+PiAtIE5vIHN1cHBvcnQgZm9yIHRoZSBlY2Mg c3RlcCBzaXplIGlzIDUxMi4KPj4gLSBVbnRlc3RlZCBvbiBzb21lIFNvQ3MuCj4+IC0gTm8gc3Vw cG9ydCBmb3Igc3VicGFnZXMuCj4+IC0gTm8gc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gcmFuZG9t aXplci4KPj4gLSBUaGUgb3JpZ2luYWwgYmFkIGJsb2NrIG1hc2sgaXMgbm90IHN1cHBvcnRlZC4g SXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlCj4+wqDCoCB0aGUgQkJUKGJhZCBibG9jayB0YWJsZSku Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFlpZmVuZyBaaGFvIDx5aWZlbmcuemhhb0Byb2NrLWNoaXBz LmNvbT4KPj4gLS0tCj4+Cj4+IENoYW5nZXMgaW4gdjEzOgo+PiAtIFRoZSBuZmMtPmJ1ZmZlciB3 aWxsIHJlYWxsb2Mgd2hpbGUgdGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgc2Vjb25kIG10ZAo+PsKgwqAg aXMgbGFyZ2UgdGhhbiB0aGUgZmlyc3Qgb25lLgo+PiAtIEZpeCBjb2Rpbmcgc3R5bGUuCj4+IC0g Rml4IHNvbWUgY29tbWVudHMuCj4+Cj4+IENoYW5nZXMgaW4gdjEyOiBOb25lCj4+IENoYW5nZXMg aW4gdjExOgo+PiAtIEZpeCBjb21waWxlIGVycm9yLgo+Pgo+PiBDaGFuZ2VzIGluIHYxMDoKPj4g LSBGaXggY29tcGlsZSBlcnJvciBvbiBtYXN0ZXIgdjUuOS1yYzcuCj4+Cj4+IENoYW5nZXMgaW4g djk6Cj4+IC0gVGhlIG5mYy0+YnVmZmVyIHdpbGwgcmVhbGxvYyB3aGlsZSB0aGUgcGFnZSBzaXpl IG9mIHRoZSBzZWNvbmQgbXRkCj4+wqDCoCBpcyBsYXJnZSB0aGFuIHRoZSBmaXJzdCBvbmUKPj4g LSBGaXggY29kaW5nIHN0eWxlLgo+PiAtIFJlbW92ZSBzdHJ1Y3QgcmtfbmZjX2Nsay4KPj4gLSBQ cmVwZW5kIHNvbWUgZnVuY3Rpb24gd2l0aCBya19uZmNfLgo+PiAtIFJlcGxhY2UgZnVuY3Rpb24g cmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYyB3aXRoIHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0 Lgo+PiAtIFJlbW92ZSBmdW5jdGlvbiBya19uZmNfcmVhZF9ieXRlIGFuZCBya19uZmNfd3JpdGVf Ynl0ZS4KPj4gLSBEb24ndCBzZWxlY3QgdGhlIGRpZSBpZiAnY2hlY2tfb25seSA9PSB0cnVlJyBp biBmdW5jdGlvbiBya19uZmNfZXhlY19vcC4KPj4gLSBNb2RpZnkgZnVuY3Rpb24gcmtfbmZjX3dy aXRlX3BhZ2UgYW5kIHJrX25mY193cml0ZV9wYWdlX3Jhdy4KPj4KPj4gQ2hhbmdlcyBpbiB2ODog Tm9uZQo+PiBDaGFuZ2VzIGluIHY3Ogo+PiAtIFJlYmFzZSB0byBsaW51eC1uZXh0Lgo+PiAtIEZp eCBjb2Rpbmcgc3R5bGUuCj4+IC0gUmVzZXJ2ZWQgNCBieXRlcyBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBvb2IgYXJlYS4KPj4gLSBQYWdlIHJhdyByZWFkIGFuZCB3cml0ZSBpbmNsdWRlZCBlY2Mg ZGF0YS4KPj4KPj4gQ2hhbmdlcyBpbiB2NjoKPj4gLSBUaGUgbXRkLT5uYW1lIHNldCBieSBOQU5E IGxhYmVsIHByb3BlcnR5Lgo+PiAtIEFkZCBzb21lIGNvbW1lbnRzLgo+PiAtIEZpeCBjb21waWxl IGVycm9yLgo+Pgo+PiBDaGFuZ2VzIGluIHY1Ogo+PiAtIEFkZCBib290IGJsb2NrcyBzdXBwb3J0 wqAgd2l0aCBkaWZmZXJlbnQgRUNDIGZvciBib290Uk9NLgo+PiAtIFJlbmFtZSByb2NrY2hpcC1u YW5kLmMgdG8gcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmMuCj4+IC0gVW5pZmljYXRpb24gb2Yg b3RoZXIgdmFyaWFibGUgbmFtZXMuCj4+IC0gUmVtb3ZlIHNvbWUgY29tcGF0aWJsZSBkZWZpbmUu Cj4+Cj4+IENoYW5nZXMgaW4gdjQ6Cj4+IC0gRGVmaW5lIHBsYXRmb3JtIGRhdGEgc3RydWN0dXJl IGZvciB0aGUgcmVnaXN0ZXIgb2Zmc2V0cy4KPj4gLSBUaGUgY29tcGF0aWJsZSBkZWZpbmUgd2l0 aCBya3h4X25mYy4KPj4gLSBVc2UgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMgdG8gZGVmaW5lIFBN X09QUy4KPj4gLSBVc2UgZXhlY19vcCBpbnN0ZWFkIG9mIGxlZ2FjeSBob29rcy4KPj4KPj4gQ2hh bmdlcyBpbiB2MzogTm9uZQo+PiBDaGFuZ2VzIGluIHYyOgo+PiAtIEZpeCBjb21waWxlIGVycm9y Lgo+PiAtIEluY2x1ZGUgaGVhZGVyIGZpbGVzIHNvcnRlZCBieSBmaWxlIG5hbWUuCj4+Cj4+wqAg ZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgwqAgMTIgKwo+PsKgIGRyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoCAxICsKPj7CoCAuLi4vbXRkL25hbmQv cmF3L3JvY2tjaGlwLW5hbmQtY29udHJvbGxlci5jwqDCoCB8IDE0NjAgKysrKysrKysrKysrKysr KysKPj7CoCAzIGZpbGVzIGNoYW5nZWQsIDE0NzMgaW5zZXJ0aW9ucygrKQo+PsKgIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hpcC1uYW5kLWNvbnRyb2xsZXIu Ywo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyBiL2RyaXZl cnMvbXRkL25hbmQvcmF3L0tjb25maWcKPj4gaW5kZXggNmM0NmYyNWI1N2UyLi4yY2M1MzNlNGUy MzkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcKPj4gKysrIGIv ZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZwo+PiBAQCAtNDYyLDYgKzQ2MiwxOCBAQCBjb25m aWcgTVREX05BTkRfQVJBU0FOCj4+wqAgwqAgRW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgQXJh c2FuIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbgo+PsKgIMKgIFp5bnEgVWx0cmFzY2FsZSsgTVBT b0MuCj4+wqAKPj4gK2NvbmZpZyBNVERfTkFORF9ST0NLQ0hJUAo+PiArCXRyaXN0YXRlICJSb2Nr Y2hpcCBOQU5EIGNvbnRyb2xsZXIiCj4+ICsJZGVwZW5kcyBvbiBBUkNIX1JPQ0tDSElQICYmIEhB U19JT01FTQo+PiArCWhlbHAKPj4gKwnCoCBFbmFibGVzIHN1cHBvcnQgZm9yIE5BTkQgY29udHJv bGxlciBvbiBSb2NrY2hpcCBTb0NzLgo+PiArCcKgIFRoZXJlIGFyZSBmb3VyIGRpZmZlcmVudCB2 ZXJzaW9ucyBvZiBOQU5EIEZMQVNIIENvbnRyb2xsZXJzLAo+PiArCcKgIGluY2x1ZGluZzoKPj4g KwnCoMKgwqAgTkZDIHY2MDA6IFJLMjkyOCwgUkszMDY2LCBSSzMxODgKPj4gKwnCoMKgwqAgTkZD IHY2MjI6IFJLMzAzNiwgUkszMTI4Cj4+ICsJwqDCoMKgIE5GQyB2ODAwOiBSSzMzMDgsIFJWMTEw OAo+PiArCcKgwqDCoCBORkMgdjkwMDogUFgzMCwgUkszMzI2Cj4+ICsKPj7CoCBjb21tZW50ICJN aXNjIgo+PsKgCj4+wqAgY29uZmlnIE1URF9TTV9DT01NT04KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbXRkL25hbmQvcmF3L01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUK Pj4gaW5kZXggMjkzMGY1YjkwMTVkLi45NjBjOWJlMjUyMDQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01h a2VmaWxlCj4+IEBAIC01OCw2ICs1OCw3IEBAIG9iai0kKENPTkZJR19NVERfTkFORF9TVE0zMl9G TUMyKQkrPSBzdG0zMl9mbWMyX25hbmQubwo+PsKgIG9iai0kKENPTkZJR19NVERfTkFORF9NRVNP TikJKz0gbWVzb25fbmFuZC5vCj4+wqAgb2JqLSQoQ09ORklHX01URF9OQU5EX0NBREVOQ0UpCSs9 IGNhZGVuY2UtbmFuZC1jb250cm9sbGVyLm8KPj7CoCBvYmotJChDT05GSUdfTVREX05BTkRfQVJB U0FOKQkrPSBhcmFzYW4tbmFuZC1jb250cm9sbGVyLm8KPj4gK29iai0kKENPTkZJR19NVERfTkFO RF9ST0NLQ0hJUCkJKz0gcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLm8KPj7CoAo+PsKgIG5hbmQt b2JqcyA6PSBuYW5kX2Jhc2UubyBuYW5kX2xlZ2FjeS5vIG5hbmRfYmJ0Lm8gbmFuZF90aW1pbmdz Lm8gbmFuZF9pZHMubwo+PsKgIG5hbmQtb2JqcyArPSBuYW5kX29uZmkubwo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmMgYi9kcml2 ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hpcC1uYW5kLWNvbnRyb2xsZXIuYwo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjJlOTZmZDMxNDM0Ngo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3JvY2tjaGlwLW5hbmQtY29udHJv bGxlci5jCj4+IEBAIC0wLDAgKzEsMTQ2MCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgT1IgTUlUCj4+ICsvKgo+PiArICogUm9ja2NoaXAgTkFORCBGbGFzaCBjb250 cm9sbGVyIGRyaXZlci4KPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBSb2NrY2hpcCBJbmMuCj4+ ICsgKiBBdXRob3I6IFlpZmVuZyBaaGFvIDx5aWZlbmcuemhhb0Byb2NrLWNoaXBzLmNvbT4KPj4g KyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L2RtYWVuZ2luZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvcmF3 bmFuZC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvc2xhYi5oPgo+PiArCj4+ICsvKgo+PiArICogTkZDIFBhZ2UgRGF0YSBMYXlv dXQ6Cj4+ICsgKgkxMDI0IEJ5dGVzIERhdGEgKyA0Qnl0ZXMgc3lzIGRhdGEgKyAyOEJ5dGVzfjEy NEJ5dGVzIGVjYyArCj4+ICsgKgkxMDI0IEJ5dGVzIERhdGEgKyA0Qnl0ZXMgc3lzIGRhdGEgKyAy OEJ5dGVzfjEyNEJ5dGVzIGVjYyArCj4+ICsgKgkuLi4uLi4KPj4gKyAqIE5BTkQgUGFnZSBEYXRh IExheW91dDoKPj4gKyAqCTEwMjQgKiBuIERhdGEgKyBtIEJ5dGVzIG9vYgo+PiArICogT3JpZ2lu YWwgQmFkIEJsb2NrIE1hc2sgTG9jYXRpb246Cj4+ICsgKglGaXJzdCBieXRlIG9mIG9vYihzcGFy ZSkuCj4+ICsgKiBuYW5kX2NoaXAtPm9vYl9wb2kgZGF0YSBsYXlvdXQ6Cj4+ICsgKgk0Qnl0ZXMg c3lzIGRhdGEgKyAuLi4uICsgNEJ5dGVzIHN5cyBkYXRhICsgZWNjIGRhdGEuCj4+ICsgKi8KPj4g Kwo+PiArLyogTkFORCBjb250cm9sbGVyIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KPj4gKyNkZWZp bmUgTkZDX1JFQUQJKDApCj4+ICsjZGVmaW5lIE5GQ19XUklURQkoMSkKPj4gKwo+PiArI2RlZmlu ZSBORkNfRk1DVEwJKDB4MDApCj4+ICsjZGVmaW5lwqDCoCBGTUNUTF9DRV9TRUxfTQkweEZGCj4+ ICsjZGVmaW5lwqDCoCBGTUNUTF9DRV9TRUwoeCkJKDEgPDwgKHgpKQo+PiArI2RlZmluZcKgwqAg Rk1DVExfV1AJQklUKDgpCj4+ICsjZGVmaW5lwqDCoCBGTUNUTF9SRFkJQklUKDkpCj4+ICsKPj4g KyNkZWZpbmUgTkZDX0ZNV0FJVAkoMHgwNCkKPj4gKyNkZWZpbmXCoMKgIEZMQ1RMX1JTVAlCSVQo MCkKPj4gKyNkZWZpbmXCoMKgIEZMQ1RMX1dSCSgxKQkvKiAwOiByZWFkLCAxOiB3cml0ZSAqLwo+ PiArI2RlZmluZcKgwqAgRkxDVExfWEZFUl9TVAlCSVQoMikKPj4gKyNkZWZpbmXCoMKgIEZMQ1RM X1hGRVJfRU4JQklUKDMpCj4+ICsjZGVmaW5lwqDCoCBGTENUTF9BQ09SUkVDVAlCSVQoMTApIC8q IEF1dG8gY29ycmVjdCBlcnJvciBiaXRzLiAqLwo+PiArI2RlZmluZcKgwqAgRkxDVExfWEZFUl9S RUFEWQlCSVQoMjApCj4+ICsjZGVmaW5lwqDCoCBGTENUTF9YRkVSX1NFQ1RPUgkoMjIpCj4+ICsj ZGVmaW5lwqDCoCBGTENUTF9UT0dfRklYCUJJVCgyOSkKPj4gKwo+PiArI2RlZmluZcKgwqAgQkNI Q1RMX0JBTktfTQkoNyA8PCA1KQo+PiArI2RlZmluZcKgwqAgQkNIQ1RMX0JBTksJKDUpCj4+ICsK Pj4gKyNkZWZpbmXCoMKgIERNQV9TVAlCSVQoMCkKPj4gKyNkZWZpbmXCoMKgIERNQV9XUgkoMSkJ LyogMDogd3JpdGUsIDE6IHJlYWQgKi8KPj4gKyNkZWZpbmXCoMKgIERNQV9FTglCSVQoMikKPj4g KyNkZWZpbmXCoMKgIERNQV9BSEJfU0laRQkoMykJLyogMDogMSwgMTogMiwgMjogNCAqLwo+PiAr I2RlZmluZcKgwqAgRE1BX0JVUlNUX1NJWkUJKDYpCS8qIDA6IDEsIDM6IDQsIDU6IDgsIDc6IDE2 ICovCj4+ICsjZGVmaW5lwqDCoCBETUFfSU5DX05VTQkoOSkJLyogMSAtIDE2ICovCj4+ICsKPj4g KyNkZWZpbmUgRUNDX0VSUl9DTlQoeCwgZSkgKCgoKHgpID4+IChlKS5sb3cpICYgKGUpLmxvd19t YXNrKSB8XAo+PiArCcKgICgoKHgpID4+IChlKS5oaWdoKSAmIChlKS5oaWdoX21hc2spIDw8IChl KS5sb3dfYm4pCj4+ICsjZGVmaW5lwqDCoCBJTlRfRE1BCUJJVCgwKQo+PiArI2RlZmluZSBORkNf QkFOSwkoMHg4MDApCj4+ICsjZGVmaW5lIE5GQ19CQU5LX1NURVAJKDB4MTAwKQo+PiArI2RlZmlu ZcKgwqAgQkFOS19EQVRBCSgweDAwKQo+PiArI2RlZmluZcKgwqAgQkFOS19BRERSCSgweDA0KQo+ PiArI2RlZmluZcKgwqAgQkFOS19DTUQJKDB4MDgpCj4+ICsjZGVmaW5lIE5GQ19TUkFNMAkoMHgx MDAwKQo+PiArI2RlZmluZSBORkNfU1JBTTEJKDB4MTQwMCkKPj4gKyNkZWZpbmUgTkZDX1NSQU1f U0laRQkoMHg0MDApCj4+ICsjZGVmaW5lIE5GQ19USU1FT1VUCSg1MDAwMDApCj4+ICsjZGVmaW5l IE5GQ19NQVhfT09CX1BFUl9TVEVQCTEyOAo+PiArI2RlZmluZSBORkNfTUlOX09PQl9QRVJfU1RF UAk2NAo+PiArI2RlZmluZSBNQVhfREFUQV9TSVpFCTB4RkZGQwo+PiArI2RlZmluZSBNQVhfQURE UkVTU19DWUMJNgo+PiArI2RlZmluZSBORkNfRUNDX01BWF9NT0RFUwk0Cj4+ICsjZGVmaW5lIE5G Q19NQVhfTlNFTFMJKDgpIC8qIFNvbWUgU29jcyBvbmx5IGhhdmUgMSBvciAyIENTcy4gKi8KPj4g KyNkZWZpbmUgTkZDX1NZU19EQVRBX1NJWkUJKDQpIC8qIDQgYnl0ZXMgc3lzIGRhdGEgaW4gb29i IHByZSAxMDI0IGRhdGEuKi8KPj4gKyNkZWZpbmUgUktfREVGQVVMVF9DTE9DS19SQVRFCSgxNTAg KiAxMDAwICogMTAwMCkgLyogMTUwIE1oeiAqLwo+PiArI2RlZmluZSBBQ0NUSU1JTkcoY3Nydywg cndwdywgcndjcykJKChjc3J3KSA8PCAxMiB8IChyd3B3KSA8PCA1IHwgKHJ3Y3MpKQo+PiArCj4+ ICtlbnVtIG5mY190eXBlIHsKPj4gKwlORkNfVjYsCj4+ICsJTkZDX1Y4LAo+PiArCU5GQ19WOSwK Pj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IHJrX2VjY19jbnRfc3RhdHVzOiByZXBy ZXNlbnQgYSBlY2Mgc3RhdHVzIGRhdGEuCj4+ICsgKiBAZXJyX2ZsYWdfYml0OiBlcnJvciBmbGFn IGJpdCBpbmRleCBhdCByZWdpc3Rlci4KPj4gKyAqIEBsb3c6IGVjYyBjb3VudCBsb3cgYml0IGlu ZGV4IGF0IHJlZ2lzdGVyLgo+PiArICogQGxvd19tYXNrOiBtYXNrIGJpdC4KPj4gKyAqIEBsb3df Ym46IGVjYyBjb3VudCBsb3cgYml0IG51bWJlci4KPj4gKyAqIEBoaWdoOiBlY2MgY291bnQgaGln aCBiaXQgaW5kZXggYXQgcmVnaXN0ZXIuCj4+ICsgKiBAaGlnaF9tYXNrOiBtYXNrIGJpdAo+PiAr ICovCj4+ICtzdHJ1Y3QgZWNjX2NudF9zdGF0dXMgewo+PiArCXU4IGVycl9mbGFnX2JpdDsKPj4g Kwl1OCBsb3c7Cj4+ICsJdTggbG93X21hc2s7Cj4+ICsJdTggbG93X2JuOwo+PiArCXU4IGhpZ2g7 Cj4+ICsJdTggaGlnaF9tYXNrOwo+PiArfTsKPj4gKwo+PiArLyoKPj4gKyAqIEB0eXBlOiBuZmMg dmVyc2lvbgo+PiArICogQGVjY19zdHJlbmd0aHM6IGVjYyBzdHJlbmd0aHMKPj4gKyAqIEBlY2Nf Y2ZnczogZWNjIGNvbmZpZyB2YWx1ZXMKPj4gKyAqIEBmbGN0bF9vZmY6IEZMQ1RMIHJlZ2lzdGVy IG9mZnNldAo+PiArICogQGJjaGN0bF9vZmY6IEJDSENUTCByZWdpc3RlciBvZmZzZXQKPj4gKyAq IEBkbWFfZGF0YV9idWZfb2ZmOiBETUFfREFUQV9CVUYgcmVnaXN0ZXIgb2Zmc2V0Cj4+ICsgKiBA ZG1hX29vYl9idWZfb2ZmOiBETUFfT09CX0JVRiByZWdpc3RlciBvZmZzZXQKPj4gKyAqIEBkbWFf Y2ZnX29mZjogRE1BX0NGRyByZWdpc3RlciBvZmZzZXQKPj4gKyAqIEBkbWFfc3Rfb2ZmOiBETUFf U1QgcmVnaXN0ZXIgb2Zmc2V0Cj4+ICsgKiBAYmNoX3N0X29mZjogQkNHX1NUIHJlZ2lzdGVyIG9m ZnNldAo+PiArICogQHJhbmRtel9vZmY6IFJBTkRNWiByZWdpc3RlciBvZmZzZXQKPj4gKyAqIEBp bnRfZW5fb2ZmOiBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIG9mZnNldAo+PiArICogQGludF9j bHJfb2ZmOiBpbnRlcnJ1cHQgY2xlYW4gcmVnaXN0ZXIgb2Zmc2V0Cj4+ICsgKiBAaW50X3N0X29m ZjogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBvZmZzZXQKPj4gKyAqIEBvb2IwX29mZjogb29i MCByZWdpc3RlciBvZmZzZXQKPj4gKyAqIEBvb2IxX29mZjogb29iMSByZWdpc3RlciBvZmZzZXQK Pj4gKyAqIEBlY2MwOiByZXByZXNlbnQgRUNDMCBzdGF0dXMgZGF0YQo+PiArICogQGVjYzE6IHJl cHJlc2VudCBFQ0MxIHN0YXR1cyBkYXRhCj4+ICsgKi8KPj4gK3N0cnVjdCBuZmNfY2ZnIHsKPj4g KwllbnVtIG5mY190eXBlIHR5cGU7Cj4+ICsJdTggZWNjX3N0cmVuZ3Roc1tORkNfRUNDX01BWF9N T0RFU107Cj4+ICsJdTMyIGVjY19jZmdzW05GQ19FQ0NfTUFYX01PREVTXTsKPj4gKwl1MzIgZmxj dGxfb2ZmOwo+PiArCXUzMiBiY2hjdGxfb2ZmOwo+PiArCXUzMiBkbWFfY2ZnX29mZjsKPj4gKwl1 MzIgZG1hX2RhdGFfYnVmX29mZjsKPj4gKwl1MzIgZG1hX29vYl9idWZfb2ZmOwo+PiArCXUzMiBk bWFfc3Rfb2ZmOwo+PiArCXUzMiBiY2hfc3Rfb2ZmOwo+PiArCXUzMiByYW5kbXpfb2ZmOwo+PiAr CXUzMiBpbnRfZW5fb2ZmOwo+PiArCXUzMiBpbnRfY2xyX29mZjsKPj4gKwl1MzIgaW50X3N0X29m ZjsKPj4gKwl1MzIgb29iMF9vZmY7Cj4+ICsJdTMyIG9vYjFfb2ZmOwo+PiArCXN0cnVjdCBlY2Nf Y250X3N0YXR1cyBlY2MwOwo+PiArCXN0cnVjdCBlY2NfY250X3N0YXR1cyBlY2MxOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IHJrX25mY19uYW5kX2NoaXAgewo+PiArCXN0cnVjdCBsaXN0X2hlYWQg bm9kZTsKPj4gKwlzdHJ1Y3QgbmFuZF9jaGlwIGNoaXA7Cj4+ICsKPj4gKwl1MTYgc3BhcmVfcGVy X3NlY3RvcjsKPj4gKwl1MTYgb29iX2J1Zl9wZXJfc2VjdG9yOwo+PiArCXUxNiBib290X2Jsa3M7 Cj4+ICsJdTE2IGJvb3RfZWNjOwo+PiArCXUxNiBtZXRhZGF0YV9zaXplOwo+PiArCj4+ICsJdTgg bnNlbHM7Cj4+ICsJdTggc2Vsc1swXTsKPj4gKwkvKiBOb3RoaW5nIGFmdGVyIHRoaXMgZmllbGQu ICovCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgcmtfbmZjIHsKPj4gKwlzdHJ1Y3QgbmFuZF9jb250 cm9sbGVyIGNvbnRyb2xsZXI7Cj4+ICsJY29uc3Qgc3RydWN0IG5mY19jZmcgKmNmZzsKPj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsKPj4gKwlzdHJ1Y3QgY2xrICpuZmNfY2xrOwo+PiArCXN0 cnVjdCBjbGsgKmFoYl9jbGs7Cj4+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+PiArCj4+ICsJdTMy IHNlbGVjdGVkX2Jhbms7Cj4+ICsJdTMyIGJhbmRfb2Zmc2V0Owo+PiArCXUzMiBjdXJfY2xrOwo+ PiArCj4+ICsJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGNo aXBzOwo+PiArCj4+ICsJdTggKmJ1ZmZlcjsKPj4gKwl1OCAqcGFnZV9idWY7Cj4+ICsJdTMyICpv b2JfYnVmOwo+PiArCXUzMiBidWZmZXJfc2l6ZTsKPj4gKwl1MzIgb29iX2J1Zl9zaXplOwo+PiAr Cj4+ICsJdW5zaWduZWQgbG9uZyBhc3NpZ25lZF9jczsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrX25mY190b19ya25hbmQoc3RydWN0IG5h bmRfY2hpcCAqY2hpcCkKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVj dCBya19uZmNfbmFuZF9jaGlwLCBjaGlwKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB1 OCAqcmtfbmZjX2J1Zl90b19kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1 OCAqcCwgaW50IGkpCj4+ICt7Cj4+ICsJcmV0dXJuICh1OCAqKXAgKyBpICogY2hpcC0+ZWNjLnNp emU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdTggKnJrX25mY19idWZfdG9fb29iX3B0 cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgaSkKPj4gK3sKPj4gKwl1OCAqcG9pOwo+PiAr Cj4+ICsJcG9pID0gY2hpcC0+b29iX3BvaSArIGkgKiBORkNfU1lTX0RBVEFfU0laRTsKPj4gKwo+ PiArCXJldHVybiBwb2k7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdTggKnJrX25mY19i dWZfdG9fb29iX2VjY19wdHIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IGkpCj4+ICt7Cj4+ ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHJrX25mY190b19ya25hbmQoY2hp cCk7Cj4+ICsJdTggKnBvaTsKPj4gKwo+PiArCXBvaSA9IGNoaXAtPm9vYl9wb2kgKyBya25hbmQt Pm1ldGFkYXRhX3NpemUgKwo+PiArCcKgwqDCoMKgwqAgY2hpcC0+ZWNjLmJ5dGVzICogaTsKPj4g Kwo+PiArCXJldHVybiBwb2k7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgaW50IHJrX25m Y19kYXRhX2xlbihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQo+PiArewo+PiArCXN0cnVjdCBya19u ZmNfbmFuZF9jaGlwICpya25hbmQgPSBya19uZmNfdG9fcmtuYW5kKGNoaXApOwo+PiArCj4+ICsJ cmV0dXJuIGNoaXAtPmVjYy5zaXplICsgcmtuYW5kLT5zcGFyZV9wZXJfc2VjdG9yOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW5saW5lIHU4ICpya19uZmNfZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hp cCAqY2hpcCzCoCBpbnQgaSkKPj4gK3sKPj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dl dF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsKPj4gKwlyZXR1cm4gbmZjLT5idWZmZXIgKyBp ICogcmtfbmZjX2RhdGFfbGVuKGNoaXApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHU4 ICpya19uZmNfb29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgaSkKPj4gK3sKPj4g KwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ ICsKPj4gKwlyZXR1cm4gbmZjLT5idWZmZXIgKyBpICogcmtfbmZjX2RhdGFfbGVuKGNoaXApICsg Y2hpcC0+ZWNjLnNpemU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJrX25mY19zZWxlY3Rf Y2hpcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgY3MpCj4+ICt7Cj4+ICsJc3RydWN0IHJr X25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCXN0cnVjdCBy a19uZmNfbmFuZF9jaGlwICpya25hbmQgPSBya19uZmNfdG9fcmtuYW5kKGNoaXApOwo+PiArCXUz MiB2YWw7Cj4+ICsKPj4gKwlpZiAoY3MgPCAwKSB7Cj4+ICsJbmZjLT5zZWxlY3RlZF9iYW5rID0g LTE7Cj4+ICsJLyogRGVzZWxlY3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YXJnZXQuICovCj4+ ICsJdmFsID0gcmVhZGxfcmVsYXhlZChuZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+PiArCXZhbCAm PSB+Rk1DVExfQ0VfU0VMX007Cj4+ICsJd3JpdGVsKHZhbCwgbmZjLT5yZWdzICsgTkZDX0ZNQ1RM KTsKPj4gKwlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJbmZjLT5zZWxlY3RlZF9iYW5rID0gcmtu YW5kLT5zZWxzW2NzXTsKPj4gKwluZmMtPmJhbmRfb2Zmc2V0ID0gTkZDX0JBTksgKyBuZmMtPnNl bGVjdGVkX2JhbmsgKiBORkNfQkFOS19TVEVQOwo+PiArCj4+ICsJdmFsID0gcmVhZGxfcmVsYXhl ZChuZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+PiArCXZhbCAmPSB+Rk1DVExfQ0VfU0VMX007Cj4+ ICsJdmFsIHw9IEZNQ1RMX0NFX1NFTChuZmMtPnNlbGVjdGVkX2JhbmspOwo+PiArCj4+ICsJd3Jp dGVsKHZhbCwgbmZjLT5yZWdzICsgTkZDX0ZNQ1RMKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu bGluZSBpbnQgcmtfbmZjX3dhaXRfaW9yZWFkeShzdHJ1Y3QgcmtfbmZjICpuZmMpCj4+ICt7Cj4+ ICsJaW50IHJjOwo+PiArCXUzMiB2YWw7Cj4+ICsKPj4gKwlyYyA9IHJlYWRsX3JlbGF4ZWRfcG9s bF90aW1lb3V0KG5mYy0+cmVncyArIE5GQ19GTUNUTCwgdmFsLAo+PiArCXZhbCAmIEZNQ1RMX1JE WSwgMTAsIE5GQ19USU1FT1VUKTsKPj4gKwo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgcmtfbmZjX3JlYWRfYnVmKHN0cnVjdCBya19uZmMgKm5mYywgdTggKmJ1Ziwg aW50IGxlbikKPj4gK3sKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBsZW47 IGkrKykKPj4gKwlidWZbaV0gPSByZWFkYl9yZWxheGVkKG5mYy0+cmVncyArIG5mYy0+YmFuZF9v ZmZzZXQgKwo+PiArCcKgwqDCoMKgwqDCoCBCQU5LX0RBVEEpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBya19uZmNfd3JpdGVfYnVmKHN0cnVjdCBya19uZmMgKm5mYywgY29uc3QgdTggKmJ1 ZiwgaW50IGxlbikKPj4gK3sKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykKPj4gKwl3cml0ZWIoYnVmW2ldLCBuZmMtPnJlZ3MgKyBuZmMtPmJhbmRfb2Zmc2V0 ICsgQkFOS19EQVRBKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfY21kKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgbmFuZF9zdWJv cCAqc3Vib3ApCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJv bGxlcl9kYXRhKGNoaXApOwo+PiArCXVuc2lnbmVkIGludCBpLCBqLCByZW1haW5pbmcsIHN0YXJ0 Owo+PiArCWludCByZWdfb2Zmc2V0ID0gbmZjLT5iYW5kX29mZnNldDsKPj4gKwl1OCAqaW5idWYg PSBOVUxMOwo+PiArCWNvbnN0IHU4ICpvdXRidWY7Cj4+ICsJdTMyIGNudCA9IDA7Cj4+ICsJaW50 IHJldCA9IDA7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgc3Vib3AtPm5pbnN0cnM7IGkrKykg ewo+PiArCWNvbnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICppbnN0ciA9ICZzdWJvcC0+aW5zdHJz W2ldOwo+PiArCj4+ICsJc3dpdGNoIChpbnN0ci0+dHlwZSkgewo+PiArCWNhc2UgTkFORF9PUF9D TURfSU5TVFI6Cj4+ICsJd3JpdGViKGluc3RyLT5jdHguY21kLm9wY29kZSwKPj4gKwnCoMKgwqDC oMKgwqAgbmZjLT5yZWdzICsgcmVnX29mZnNldCArIEJBTktfQ01EKTsKPj4gKwlicmVhazsKPj4g Kwo+PiArCWNhc2UgTkFORF9PUF9BRERSX0lOU1RSOgo+PiArCXJlbWFpbmluZyA9IG5hbmRfc3Vi b3BfZ2V0X251bV9hZGRyX2N5YyhzdWJvcCwgaSk7Cj4+ICsJc3RhcnQgPSBuYW5kX3N1Ym9wX2dl dF9hZGRyX3N0YXJ0X29mZihzdWJvcCwgaSk7Cj4+ICsKPj4gKwlmb3IgKGogPSAwOyBqIDwgOCAm JiBqICsgc3RhcnQgPCByZW1haW5pbmc7IGorKykKPj4gKwl3cml0ZWIoaW5zdHItPmN0eC5hZGRy LmFkZHJzW2ogKyBzdGFydF0sCj4+ICsJwqDCoMKgwqDCoMKgIG5mYy0+cmVncyArIHJlZ19vZmZz ZXQgKyBCQU5LX0FERFIpOwo+PiArCWJyZWFrOwo+PiArCj4+ICsJY2FzZSBOQU5EX09QX0RBVEFf SU5fSU5TVFI6Cj4+ICsJY2FzZSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSOgo+PiArCXN0YXJ0ID0g bmFuZF9zdWJvcF9nZXRfZGF0YV9zdGFydF9vZmYoc3Vib3AsIGkpOwo+PiArCWNudCA9IG5hbmRf c3Vib3BfZ2V0X2RhdGFfbGVuKHN1Ym9wLCBpKTsKPj4gKwo+PiArCWlmIChpbnN0ci0+dHlwZSA9 PSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSKSB7Cj4+ICsJb3V0YnVmID0gaW5zdHItPmN0eC5kYXRh LmJ1Zi5vdXQgKyBzdGFydDsKPj4gKwlya19uZmNfd3JpdGVfYnVmKG5mYywgb3V0YnVmLCBjbnQp Owo+PiArCX0gZWxzZSB7Cj4+ICsJaW5idWYgPSBpbnN0ci0+Y3R4LmRhdGEuYnVmLmluICsgc3Rh cnQ7Cj4+ICsJcmtfbmZjX3JlYWRfYnVmKG5mYywgaW5idWYsIGNudCk7Cj4+ICsJfQo+PiArCWJy ZWFrOwo+PiArCj4+ICsJY2FzZSBOQU5EX09QX1dBSVRSRFlfSU5TVFI6Cj4+ICsJaWYgKHJrX25m Y193YWl0X2lvcmVhZHkobmZjKSA8IDApIHsKPj4gKwlyZXQgPSAtRVRJTUVET1VUOwo+PiArCWRl dl9lcnIobmZjLT5kZXYsICJJTyBub3QgcmVhZHlcbiIpOwo+PiArCX0KPj4gKwlicmVhazsKPj4g Kwl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBuYW5kX29wX3BhcnNlciBya19uZmNfb3BfcGFyc2VyID0gTkFORF9PUF9QQVJT RVIoCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTigKPj4gKwlya19uZmNfY21kLAo+PiArCU5B TkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwKPj4gKwlOQU5EX09QX1BBUlNFUl9QQVRf QUREUl9FTEVNKHRydWUsIE1BWF9BRERSRVNTX0NZQyksCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFU X0NNRF9FTEVNKHRydWUpLAo+PiArCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0odHJ1 ZSksCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFUX0RBVEFfSU5fRUxFTSh0cnVlLCBNQVhfREFUQV9T SVpFKSksCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTigKPj4gKwlya19uZmNfY21kLAo+PiAr CU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwKPj4gKwlOQU5EX09QX1BBUlNFUl9Q QVRfQUREUl9FTEVNKHRydWUsIE1BWF9BRERSRVNTX0NZQyksCj4+ICsJTkFORF9PUF9QQVJTRVJf UEFUX0RBVEFfT1VUX0VMRU0odHJ1ZSwgTUFYX0RBVEFfU0laRSksCj4+ICsJTkFORF9PUF9QQVJT RVJfUEFUX0NNRF9FTEVNKHRydWUpLAo+PiArCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VM RU0odHJ1ZSkpLAo+PiArKTsKPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfZXhlY19vcChzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLAo+PiArCcKgIGNvbnN0IHN0cnVjdCBuYW5kX29wZXJhdGlvbiAq b3AsCj4+ICsJwqAgYm9vbCBjaGVja19vbmx5KQo+PiArewo+PiArCWlmICghY2hlY2tfb25seSkK Pj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgb3AtPmNzKTsKPj4gKwo+PiArCXJldHVybiBu YW5kX29wX3BhcnNlcl9leGVjX29wKGNoaXAsICZya19uZmNfb3BfcGFyc2VyLCBvcCwKPj4gKwnC oMKgwqDCoMKgIGNoZWNrX29ubHkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY19z ZXR1cF9kYXRhX2ludGVyZmFjZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgY3NsaW5lLAo+ PiArCcKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgbmFuZF9pbnRlcmZhY2VfY29uZmlnICpjb25m KQo+Cj5QbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBjb3Jl LCB0aGlzIGhlbHBlcgo+c2hvdWxkIGJlIG5hbWVkICJzZXR1cF9pbnRlcmZhY2UiLgo+Cj4+ICt7 Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXAp Owo+PiArCWNvbnN0IHN0cnVjdCBuYW5kX3Nkcl90aW1pbmdzICp0aW1pbmdzOwo+PiArCXUzMiBy YXRlLCB0YzJydywgdHJ3cHcsIHRydzJjOwo+PiArCXUzMiB0ZW1wOwo+PiArCj4+ICsJaWYgKGNz bGluZSA9PSBOQU5EX0RBVEFfSUZBQ0VfQ0hFQ0tfT05MWSkKPj4gKwlyZXR1cm4gMDsKPj4gKwo+ PiArCXRpbWluZ3MgPSBuYW5kX2dldF9zZHJfdGltaW5ncyhjb25mKTsKPj4gKwlpZiAoSVNfRVJS KHRpbWluZ3MpKQo+PiArCXJldHVybiAtRU9QTk9UU1VQUDsKPj4gKwo+PiArCWlmIChJU19FUlIo bmZjLT5uZmNfY2xrKSkKPj4gKwlyYXRlID0gY2xrX2dldF9yYXRlKG5mYy0+YWhiX2Nsayk7Cj4+ ICsJZWxzZQo+PiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUobmZjLT5uZmNfY2xrKTsKPj4gKwo+PiAr CS8qIFR1cm4gY2xvY2sgcmF0ZSBpbnRvIGtIei4gKi8KPj4gKwlyYXRlIC89IDEwMDA7Cj4+ICsK Pj4gKwl0YzJydyA9IDE7Cj4+ICsJdHJ3MmMgPSAxOwo+PiArCj4+ICsJdHJ3cHcgPSBtYXgodGlt aW5ncy0+dFdDX21pbiwgdGltaW5ncy0+dFJDX21pbikgLyAxMDAwOwo+PiArCXRyd3B3ID0gRElW X1JPVU5EX1VQKHRyd3B3ICogcmF0ZSwgMTAwMDAwMCk7Cj4+ICsKPj4gKwl0ZW1wID0gdGltaW5n cy0+dFJFQV9tYXggLyAxMDAwOwo+PiArCXRlbXAgPSBESVZfUk9VTkRfVVAodGVtcCAqIHJhdGUs IDEwMDAwMDApOwo+PiArCj4+ICsJaWYgKHRyd3B3IDwgdGVtcCkKPj4gKwl0cndwdyA9IHRlbXA7 Cj4+ICsKPj4gKwkvKgo+PiArCSogQUNDT046IGFjY2VzcyB0aW1pbmcgY29udHJvbCByZWdpc3Rl cgo+PiArCSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiArCSogMzE6 MTg6IHJlc2VydmVkCj4+ICsJKiAxNzoxMjogY3NydywgY2xvY2sgY3ljbGVzIGZyb20gdGhlIGZh bGxpbmcgZWRnZSBvZiBDU24gdG8gdGhlCj4+ICsJKsKgwqAgZmFsbGluZyBlZGdlIG9mIFJEbiBv ciBXUm4KPj4gKwkqIDExOjExOiByZXNlcnZlZAo+PiArCSogMTA6MDU6IHJ3cHcsIHRoZSB3aWR0 aCBvZiBSRG4gb3IgV1JuIGluIHByb2Nlc3NvciBjbG9jayBjeWNsZXMKPj4gKwkqIDA0OjAwOiBy d2NzLCBjbG9jayBjeWNsZXMgZnJvbSB0aGUgcmlzaW5nIGVkZ2Ugb2YgUkRuIG9yIFdSbiB0byB0 aGUKPj4gKwkqwqDCoCByaXNpbmcgZWRnZSBvZiBDU24KPj4gKwkqLwo+PiArCXRlbXAgPSBBQ0NU SU1JTkcodGMycncsIHRyd3B3LCB0cncyYyk7Cj4+ICsJd3JpdGVsKHRlbXAsIG5mYy0+cmVncyAr IE5GQ19GTVdBSVQpOwo+Cj5Zb3Ugc2hvdWxkIHNhdmUgdGhlIGNoaXAncyB0aW1pbmcgY29uZmln dXJhdGlvbiBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQKPmhlcmUsIGFuZCBzZXR0aW5nIHRoZSByZWdp c3RlciB2YWx1ZSBkdXJpbmcgY2hpcCBzZWxlY3Rpb24uIFRoaXMgd2F5Cj55b3UgbWF5IGhhbmRs ZSBzZXZlcmFsIGNoaXBzIHdpdGggZGlmZmVyZW50IHRpbWluZwo+Y29uc3RyYWludHMvY29uZmln dXJhdGlvbnMuCj4KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IHJrX25mY19od19lY2Nfc2V0dXAoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPj4gKwnCoMKgwqDC oMKgwqAgc3RydWN0IG5hbmRfZWNjX2N0cmwgKmVjYywKPj4gKwnCoMKgwqDCoMKgwqAgdWludDMy X3Qgc3RyZW5ndGgpCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29u dHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCXUzMiByZWcsIGk7Cj4+ICsKPj4gKwlmb3IgKGkgPSAw OyBpIDwgTkZDX0VDQ19NQVhfTU9ERVM7IGkrKykgewo+PiArCWlmIChlY2MtPnN0cmVuZ3RoID09 IG5mYy0+Y2ZnLT5lY2Nfc3RyZW5ndGhzW2ldKSB7Cj4+ICsJcmVnID0gbmZjLT5jZmctPmVjY19j ZmdzW2ldOwo+PiArCWJyZWFrOwo+PiArCX0KPj4gKwl9Cj4+ICsKPj4gKwlpZiAoaSA+PSBORkNf RUNDX01BWF9NT0RFUykKPj4gKwlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCXdyaXRlbChyZWcs IG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxfb2ZmKTsKPgo+U2FtZSBoZXJlLCBpZiB5b3Ug aGFuZGxlIGRpZmZlcmVudCBjaGlwcywgdGhleSBtYXkgdXNlIGRpZmZlcmVudCBFQ0MKPmNvbmZp Z3VyYXRpb25zLCB0aGlzIHNob3VsZCBiZSBoYW5kbGVkLgo+Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgcmtfbmZjX3hmZXJfc3RhcnQoc3RydWN0IHJrX25m YyAqbmZjLCB1OCBydywgdTggbl9LQiwKPj4gKwnCoMKgwqDCoMKgIGRtYV9hZGRyX3QgZG1hX2Rh dGEsIGRtYV9hZGRyX3QgZG1hX29vYikKPj4gK3sKPj4gKwl1MzIgZG1hX3JlZywgZmxfcmVnLCBi Y2hfcmVnOwo+PiArCj4+ICsJZG1hX3JlZyA9IERNQV9TVCB8ICgoIXJ3KSA8PCBETUFfV1IpIHwg RE1BX0VOIHwgKDIgPDwgRE1BX0FIQl9TSVpFKSB8Cj4+ICsJwqDCoMKgwqDCoCAoNyA8PCBETUFf QlVSU1RfU0laRSkgfCAoMTYgPDwgRE1BX0lOQ19OVU0pOwo+PiArCj4+ICsJZmxfcmVnID0gKHJ3 IDw8IEZMQ1RMX1dSKSB8IEZMQ1RMX1hGRVJfRU4gfCBGTENUTF9BQ09SUkVDVCB8Cj4+ICsJKG5f S0IgPDwgRkxDVExfWEZFUl9TRUNUT1IpIHwgRkxDVExfVE9HX0ZJWDsKPj4gKwo+PiArCWlmIChu ZmMtPmNmZy0+dHlwZSA9PSBORkNfVjYgfHwgbmZjLT5jZmctPnR5cGUgPT0gTkZDX1Y4KSB7Cj4+ ICsJYmNoX3JlZyA9IHJlYWRsX3JlbGF4ZWQobmZjLT5yZWdzICsgbmZjLT5jZmctPmJjaGN0bF9v ZmYpOwo+PiArCWJjaF9yZWcgPSAoYmNoX3JlZyAmICh+QkNIQ1RMX0JBTktfTSkpIHwKPj4gKwnC oCAobmZjLT5zZWxlY3RlZF9iYW5rIDw8IEJDSENUTF9CQU5LKTsKPj4gKwl3cml0ZWwoYmNoX3Jl ZywgbmZjLT5yZWdzICsgbmZjLT5jZmctPmJjaGN0bF9vZmYpOwo+PiArCX0KPj4gKwo+PiArCXdy aXRlbChkbWFfcmVnLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZG1hX2NmZ19vZmYpOwo+PiArCXdy aXRlbCgodTMyKWRtYV9kYXRhLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZG1hX2RhdGFfYnVmX29m Zik7Cj4+ICsJd3JpdGVsKCh1MzIpZG1hX29vYiwgbmZjLT5yZWdzICsgbmZjLT5jZmctPmRtYV9v b2JfYnVmX29mZik7Cj4+ICsJd3JpdGVsKGZsX3JlZywgbmZjLT5yZWdzICsgbmZjLT5jZmctPmZs Y3RsX29mZik7Cj4+ICsJZmxfcmVnIHw9IEZMQ1RMX1hGRVJfU1Q7Cj4+ICsJd3JpdGVsKGZsX3Jl ZywgbmZjLT5yZWdzICsgbmZjLT5jZmctPmZsY3RsX29mZik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgcmtfbmZjX3dhaXRfZm9yX3hmZXJfZG9uZShzdHJ1Y3QgcmtfbmZjICpuZmMpCj4+ICt7 Cj4+ICsJdm9pZCBfX2lvbWVtICpwdHI7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJdTMyIHJlZzsK Pj4gKwo+PiArCXB0ciA9IG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5mbGN0bF9vZmY7Cj4+ICsKPj4g KwlyZXQgPSByZWFkbF9yZWxheGVkX3BvbGxfdGltZW91dChwdHIsIHJlZywKPj4gKwlyZWcgJiBG TENUTF9YRkVSX1JFQURZLAo+PiArCTEwLCBORkNfVElNRU9VVCk7Cj4+ICsKPj4gKwlyZXR1cm4g cmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY193cml0ZV9wYWdlX3JhdyhzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLAo+PiArCWludCBvb2Jfb24sIGludCBw YWdlKQo+PiArewo+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7 Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXAp Owo+PiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNjOwo+PiArCWludCBy ZXQgPSAwOwo+PiArCXUzMiBpOwo+PiArCj4+ICsJaWYgKCFidWYpCj4+ICsJbWVtc2V0KG5mYy0+ YnVmZmVyLCAweGZmLCBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZSk7Cj4+ICsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgZWNjLT5zdGVwczsgaSsrKSB7Cj4+ICsJLyogQ29weSBkYXRhIHRvIG5m YyBidWZmZXIuICovCj4+ICsJaWYgKGJ1ZikKPj4gKwltZW1jcHkocmtfbmZjX2RhdGFfcHRyKGNo aXAsIGkpLAo+PiArCcKgwqDCoMKgwqDCoCBya19uZmNfYnVmX3RvX2RhdGFfcHRyKGNoaXAsIGJ1 ZiwgaSksCj4+ICsJwqDCoMKgwqDCoMKgIGVjYy0+c2l6ZSk7Cj4+ICsJLyoKPj4gKwkqIFRoZSBm aXJzdCBmb3VyIGJ5dGVzIG9mIE9PQiBhcmUgcmVzZXJ2ZWQgZm9yIHRoZQo+PiArCSogYm9vdCBS T00uIEluIHNvbWUgZGVidWdnaW5nIGNhc2VzLCBzdWNoIGFzIHdpdGggYQo+PiArCSogcmVhZCwg ZXJhc2UgYW5kIHdyaXRlIGJhY2sgdGVzdCB0aGVzZSA0IGJ5dGVzIHN0b3JlZAo+PiArCSogaW4g T09CIGFsc28gbmVlZCB0byBiZSB3cml0dGVuIGJhY2suCj4+ICsJKi8KPgo+VGhlIGNvbnRyb2xs ZXIgZHJpdmVyIHNob3VsZCBub3QgYXJiaXRyYXRlIHRoaXMuIElmIHlvdSBkb24ndCB3YW50IHRv Cj5leHBvc2UgdGhlc2UgYnl0ZXMsIHRoZXkgc2hvdWxkIG5vdCBhcHBlYXIgImZyZWUiIGluIHRo ZSBPT0IgbGF5b3V0LAo+YnV0IGEgcmF3IGFjY2VzcyAqbXVzdCogYnV0IGFibGUgdG8gYWRkcmVz cyB0aGUgZW50aXJlIHBhZ2Uvb29iLgoKSSBkb24ndCBoYXZlIGEgc29sdXRpb24gdG8gZml4IGl0 LgpUaGUgZnVuY3Rpb27CoG5hbmRfYmxvY2tfYmFkIGRldGVjdCBiYWQgYmxvY2sgbGlrZSBpdDoK wqAgwqDCoGJhZCA9IGNoaXAtPm9vYl9wb2lbY2hpcC0+YmFkYmxvY2twb3NdOyAvL2NoaXAtPmJh ZGJsb2NrcG9zID0gMCBmb3IgbGFyZ2UgcGFnZSBOQU5EIEZsYXNoLgpTb8KgY2hpcC0+b29iX3Bv aVswXSBpcyBiYWQgbWFza2VyLgoKVGhlIG9vYiBkYXRhIGxheW91dCBmb3IgcmsgbmZjIGlzOgrC oFBBMCBQQTEgUEEyIFBBMyB8IEJCTSBPT0IxIE9PQjIgT09CMyB8IC4uLgpvcgrCoDB4RkYgMHhG RiAweEZGIDB4RkYgfCBCQk0gT09CMSBPT0IyIE9PQjMgfCAuLi4KClRoZSBjb2RlIGhlcmUganVz dCB0byBzd2FwIHRoZSBmaXJzdCA0IGJ5dGVzIHdpdGggdGhlIGxhc3QgNCBieXRlcyBhbmQgd2l0 aG91dCBkcm9wZWQgYW55IMKgZGF0YS4KYW5kIHRoZSBjaGlwLT5vb2JfcG9pIGRhdGEgbGF5b3V0 OgpCQk0gT09CMSBPT0IyIE9PQjN8Li4uLi4ufMKgUEEwIFBBMSBQQTIgUEEzwqAKClRoZSBPT0Ig bGF5b3V0IGZyZWUgYWxyZWFkeSByZXNlcnZlZCB0aGlzIDQgYnl0ZXM6Cm9vYl9yZWdpb24tPm9m ZnNldCA9IE5GQ19TWVNfREFUQV9TSVpFICsgMjsKCj4+ICsJaWYgKCFpKQo+PiArCW1lbWNweShy a19uZmNfb29iX3B0cihjaGlwLCBpKSwKPj4gKwnCoMKgwqDCoMKgwqAgcmtfbmZjX2J1Zl90b19v b2JfcHRyKGNoaXAsIGVjYy0+c3RlcHMgLSAxKSwKPj4gKwnCoMKgwqDCoMKgwqAgTkZDX1NZU19E QVRBX1NJWkUpOwo+PiArCWVsc2UKPj4gKwltZW1jcHkocmtfbmZjX29vYl9wdHIoY2hpcCwgaSks Cj4+ICsJwqDCoMKgwqDCoMKgIHJrX25mY19idWZfdG9fb29iX3B0cihjaGlwLCBpIC0gMSksCj4+ ICsJwqDCoMKgwqDCoMKgIE5GQ19TWVNfREFUQV9TSVpFKTsKPj4gKwkvKiBDb3B5IEVDQyBkYXRh IHRvIHRoZSBORkMgYnVmZmVyLiAqLwo+PiArCW1lbWNweShya19uZmNfb29iX3B0cihjaGlwLCBp KSArIE5GQ19TWVNfREFUQV9TSVpFLAo+PiArCcKgwqDCoMKgwqDCoCBya19uZmNfYnVmX3RvX29v Yl9lY2NfcHRyKGNoaXAsIGkpLAo+PiArCcKgwqDCoMKgwqDCoCBlY2MtPmJ5dGVzKTsKPj4gKwl9 Cj4+ICsKPj4gKwluYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChjaGlwLCBwYWdlLCAwLCBOVUxMLCAw KTsKPj4gKwlya19uZmNfd3JpdGVfYnVmKG5mYywgYnVmLCBtdGQtPndyaXRlc2l6ZSArIG10ZC0+ b29ic2l6ZSk7Cj4+ICsJcmV0ID0gbmFuZF9wcm9nX3BhZ2VfZW5kX29wKGNoaXApOwo+PiArCj4+ ICsJLyoKPj4gKwkqIERlc2VsZWN0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFyZ2V0IGFmdGVy IHRoZSBvcHMgaXMgZG9uZQo+PiArCSogdG8gcmVkdWNlIHRoZSBwb3dlciBjb25zdW1wdGlvbi4K Pj4gKwkqLwo+PiArCXJrX25mY19zZWxlY3RfY2hpcChjaGlwLCAtMSk7Cj4+ICsKPj4gKwlyZXR1 cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY193cml0ZV9vb2Ioc3RydWN0 IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCj4+ICt7Cj4+ICsJcmV0dXJuIHJrX25mY193cml0 ZV9wYWdlX3JhdyhjaGlwLCBOVUxMLCAxLCBwYWdlKTsKPgo+Tm90IHN1cmUgdGhpcyBpcyByZWxl dmFudC4gWW91IHNob3VsZCBub3QgZG8gdGhhdCwgSSBndWVzcyB0aGUgY29yZQo+d2lsbCBhdXRv bWF0aWNhbGx5IHRha2UgY2FyZSBvZiBpdC4KPgo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJr X25mY193cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICpi dWYsCj4+ICsJwqDCoCBpbnQgb29iX29uLCBpbnQgcGFnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+PiArCXN0cnVjdCBya19uZmMgKm5mYyA9 IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRf Y2hpcCAqcmtuYW5kID0gcmtfbmZjX3RvX3JrbmFuZChjaGlwKTsKPj4gKwlzdHJ1Y3QgbmFuZF9l Y2NfY3RybCAqZWNjID0gJmNoaXAtPmVjYzsKPj4gKwlpbnQgb29iX3N0ZXAgPSAoZWNjLT5ieXRl cyA+IDYwKSA/IE5GQ19NQVhfT09CX1BFUl9TVEVQIDoKPj4gKwlORkNfTUlOX09PQl9QRVJfU1RF UDsKPj4gKwlpbnQgcGFnZXNfcGVyX2JsayA9IG10ZC0+ZXJhc2VzaXplIC8gbXRkLT53cml0ZXNp emU7Cj4+ICsJaW50IHJldCA9IDAsIGksIGJvb3Rfcm9tX21vZGUgPSAwOwo+PiArCWRtYV9hZGRy X3QgZG1hX2RhdGEsIGRtYV9vb2I7Cj4+ICsJdTMyIHJlZzsKPj4gKwl1OCAqb29iOwo+PiArCj4+ ICsJbmFuZF9wcm9nX3BhZ2VfYmVnaW5fb3AoY2hpcCwgcGFnZSwgMCwgTlVMTCwgMCk7Cj4+ICsK Pj4gKwltZW1jcHkobmZjLT5wYWdlX2J1ZiwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7Cj4+ICsKPj4g KwkvKgo+PiArCSogVGhlIGZpcnN0IGJsb2NrcyAoNCwgOCBvciAxNiBkZXBlbmRpbmcgb24gdGhl IGRldmljZSkgYXJlIHVzZWQKPj4gKwkqIGJ5IHRoZSBib290IFJPTSBhbmQgdGhlIGZpcnN0IDMy IGJpdHMgb2YgT09CIG5lZWQgdG8gbGluayB0bwo+PiArCSogdGhlIG5leHQgcGFnZSBhZGRyZXNz IGluIHRoZSBzYW1lIGJsb2NrLiBXZSBjYW4ndCBkaXJlY3RseSBjb3B5Cj4+ICsJKiBPT0IgZGF0 YSBmcm9tIHRoZSBNVEQgZnJhbWV3b3JrLCBiZWNhdXNlIHRoaXMgcGFnZSBhZGRyZXNzCj4+ICsJ KiBjb25mbGljdHMgZm9yIGV4YW1wbGUgd2l0aCB0aGUgYmFkIGJsb2NrIG1hcmtlciAoQkJNKSwK Pj4gKwkqIHNvIHdlIHNoaWZ0IGFsbCBPT0IgZGF0YSBpbmNsdWRpbmcgdGhlIEJCTSB3aXRoIDQg Ynl0ZSBwb3NpdGlvbnMuCj4+ICsJKiBBcyBhIGNvbnNlcXVlbmNlIHRoZSBPT0Igc2l6ZSBhdmFp bGFibGUgdG8gdGhlIE1URCBmcmFtZXdvcmsgaXMKPj4gKwkqIGFsc28gcmVkdWNlZCB3aXRoIDQg Ynl0ZXMuCj4+ICsJKgo+PiArCSrCoMKgwqAgUEEwIFBBMSBQQTIgUEEzIHwgQkJNIE9PQjEgT09C MiBPT0IzIHwgLi4uCj4+ICsJKgo+PiArCSogSWYgYSBOQU5EIGlzIG5vdCBhIGJvb3QgbWVkaXVt IG9yIHRoZSBwYWdlIGlzIG5vdCBhIGJvb3QgYmxvY2ssCj4+ICsJKiB0aGUgZmlyc3QgNCBieXRl cyBhcmUgbGVmdCB1bnRvdWNoZWQgYnkgd3JpdGluZyAweEZGIHRvIHRoZW0uCj4+ICsJKgo+PiAr CSrCoMKgIDB4RkYgMHhGRiAweEZGIDB4RkYgfCBCQk0gT09CMSBPT0IyIE9PQjMgfCAuLi4KPj4g KwkqCj4+ICsJKiBDb25maWd1cmUgdGhlIEVDQyBhbGdvcml0aG0gc3VwcG9ydGVkIGJ5IHRoZSBi b290IFJPTS4KPj4gKwkqLwo+PiArCWlmICgocGFnZSA8IHBhZ2VzX3Blcl9ibGsgKiBya25hbmQt PmJvb3RfYmxrcykgJiYKPj4gKwnCoMKgwqAgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0lTX0JPT1Rf TUVESVVNKSkgewo+PiArCWJvb3Rfcm9tX21vZGUgPSAxOwo+PiArCWlmIChya25hbmQtPmJvb3Rf ZWNjICE9IGVjYy0+c3RyZW5ndGgpCj4+ICsJcmtfbmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2Ms Cj4+ICsJwqDCoMKgIHJrbmFuZC0+Ym9vdF9lY2MpOwo+PiArCX0KPj4gKwo+PiArCWZvciAoaSA9 IDA7IGkgPCBlY2MtPnN0ZXBzOyBpKyspIHsKPj4gKwlpZiAoIWkpIHsKPj4gKwlyZWcgPSAweEZG RkZGRkZGOwo+PiArCX0gZWxzZSB7Cj4+ICsJb29iID0gY2hpcC0+b29iX3BvaSArIChpIC0gMSkg KiBORkNfU1lTX0RBVEFfU0laRTsKPj4gKwlyZWcgPSBvb2JbMF0gfCBvb2JbMV0gPDwgOCB8IG9v YlsyXSA8PCAxNiB8Cj4+ICsJwqDCoMKgwqDCoCBvb2JbM10gPDwgMjQ7Cj4+ICsJfQo+PiArCWlm ICghaSAmJiBib290X3JvbV9tb2RlKQo+PiArCXJlZyA9IChwYWdlICYgKHBhZ2VzX3Blcl9ibGsg LSAxKSkgKiA0Owo+PiArCj4+ICsJaWYgKG5mYy0+Y2ZnLT50eXBlID09IE5GQ19WOSkKPj4gKwlu ZmMtPm9vYl9idWZbaV0gPSByZWc7Cj4+ICsJZWxzZQo+PiArCW5mYy0+b29iX2J1ZltpICogKG9v Yl9zdGVwIC8gNCldID0gcmVnOwo+PiArCX0KPj4gKwo+PiArCWRtYV9kYXRhID0gZG1hX21hcF9z aW5nbGUobmZjLT5kZXYsICh2b2lkICopbmZjLT5wYWdlX2J1ZiwKPj4gKwnCoCBtdGQtPndyaXRl c2l6ZSwgRE1BX1RPX0RFVklDRSk7Cj4+ICsJZG1hX29vYiA9IGRtYV9tYXBfc2luZ2xlKG5mYy0+ ZGV2LCBuZmMtPm9vYl9idWYsCj4+ICsJZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+PiArCURNQV9U T19ERVZJQ0UpOwo+PiArCj4+ICsJcmVpbml0X2NvbXBsZXRpb24oJm5mYy0+ZG9uZSk7Cj4+ICsJ d3JpdGVsKElOVF9ETUEsIG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5pbnRfZW5fb2ZmKTsKPj4gKwo+ PiArCXJrX25mY194ZmVyX3N0YXJ0KG5mYywgTkZDX1dSSVRFLCBlY2MtPnN0ZXBzLCBkbWFfZGF0 YSwKPj4gKwnCoCBkbWFfb29iKTsKPj4gKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJm5mYy0+ZG9uZSwKPj4gKwnCoCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwo+PiArCWlmICgh cmV0KQo+PiArCWRldl93YXJuKG5mYy0+ZGV2LCAid3JpdGU6IHdhaXQgZG1hIGRvbmUgdGltZW91 dC5cbiIpOwo+PiArCS8qCj4+ICsJKiBXaGV0aGVyIHRoZSBETUEgdHJhbnNmZXIgaXMgY29tcGxl dGVkIG9yIG5vdC4gVGhlIGRyaXZlcgo+PiArCSogbmVlZHMgdG8gY2hlY2sgdGhlIE5GQ2BzIHN0 YXR1cyByZWdpc3RlciB0byBzZWUgaWYgdGhlIGRhdGEKPj4gKwkqIHRyYW5zZmVyIHdhcyBjb21w bGV0ZWQuCj4+ICsJKi8KPj4gKwlyZXQgPSBya19uZmNfd2FpdF9mb3JfeGZlcl9kb25lKG5mYyk7 Cj4+ICsKPj4gKwlkbWFfdW5tYXBfc2luZ2xlKG5mYy0+ZGV2LCBkbWFfZGF0YSwgbXRkLT53cml0 ZXNpemUsCj4+ICsJRE1BX1RPX0RFVklDRSk7Cj4+ICsJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRl diwgZG1hX29vYiwgZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+PiArCURNQV9UT19ERVZJQ0UpOwo+ PiArCj4+ICsJaWYgKGJvb3Rfcm9tX21vZGUgJiYgcmtuYW5kLT5ib290X2VjYyAhPSBlY2MtPnN0 cmVuZ3RoKQo+PiArCXJrX25mY19od19lY2Nfc2V0dXAoY2hpcCwgZWNjLCBlY2MtPnN0cmVuZ3Ro KTsKPj4gKwo+PiArCWlmIChyZXQpIHsKPj4gKwlyZXQgPSAtRUlPOwo+PiArCWRldl9lcnIobmZj LT5kZXYsCj4+ICsJIndyaXRlOiB3YWl0IHRyYW5zZmVyIGRvbmUgdGltZW91dC5cbiIpOwo+PiAr CX0KPj4gKwo+PiArCWlmIChyZXQpCj4+ICsJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IG5h bmRfcHJvZ19wYWdlX2VuZF9vcChjaGlwKTsKPj4gKwo+PiArCS8qCj4+ICsJKiBEZXNlbGVjdCB0 aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhcmdldCBhZnRlciB0aGUgb3BzIGlzIGRvbmUKPj4gKwkq IHRvIHJlZHVjZSB0aGUgcG93ZXIgY29uc3VtcHRpb24uCj4+ICsJKi8KPgo+SWYgeW91IGZvcmNl IHRoaXMgZGVzZWxlY3Rpb24sIHlvdXIgc2hvdWxkIHByb2JhYmx5IGRvIGl0IGV2ZW4gaW4gY2Fz ZQo+b2YgZXJyb3I/Cj4KPj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgLTEpOwo+PiArCj4+ ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfcmVhZF9wYWdl X3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLCBpbnQgb29iX29uLAo+PiArCWlu dCBwYWdlKQo+PiArewo+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hp cCk7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNo aXApOwo+PiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNjOwo+PiArCWlu dCBpOwo+PiArCj4+ICsJbmFuZF9yZWFkX3BhZ2Vfb3AoY2hpcCwgcGFnZSwgMCwgTlVMTCwgMCk7 Cj4+ICsJcmtfbmZjX3JlYWRfYnVmKG5mYywgbmZjLT5idWZmZXIsIG10ZC0+d3JpdGVzaXplICsg bXRkLT5vb2JzaXplKTsKPj4gKwo+PiArCS8qCj4+ICsJKiBEZXNlbGVjdCB0aGUgY3VycmVudGx5 IHNlbGVjdGVkIHRhcmdldCBhZnRlciB0aGUgb3BzIGlzIGRvbmUKPj4gKwkqIHRvIHJlZHVjZSB0 aGUgcG93ZXIgY29uc3VtcHRpb24uCj4+ICsJKi8KPj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hp cCwgLTEpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IGVjYy0+c3RlcHM7IGkrKykgewo+PiAr CS8qCj4+ICsJKiBUaGUgZmlyc3QgZm91ciBieXRlcyBvZiBPT0IgYXJlIHJlc2VydmVkIGZvciB0 aGUKPj4gKwkqIGJvb3QgUk9NLiBJbiBzb21lIGRlYnVnZ2luZyBjYXNlcywgc3VjaCBhcyB3aXRo IGEgcmVhZCwKPj4gKwkqIGVyYXNlIGFuZCB3cml0ZSBiYWNrIHRlc3QsIHRoZXNlIDQgYnl0ZXMg YWxzbyBtdXN0IGJlCj4+ICsJKiBzYXZlZCBzb21ld2hlcmUsIG90aGVyd2lzZSB0aGlzIGluZm9y bWF0aW9uIHdpbGwgYmUKPj4gKwkqIGxvc3QgZHVyaW5nIGEgd3JpdGUgYmFjay4KPgo+RGl0dG8K Pgo+PiArCSovCj4+ICsJaWYgKCFpKQo+PiArCW1lbWNweShya19uZmNfYnVmX3RvX29vYl9wdHIo Y2hpcCwgZWNjLT5zdGVwcyAtIDEpLAo+PiArCcKgwqDCoMKgwqDCoCBya19uZmNfb29iX3B0cihj aGlwLCBpKSwKPj4gKwnCoMKgwqDCoMKgwqAgTkZDX1NZU19EQVRBX1NJWkUpOwo+PiArCWVsc2UK Pj4gKwltZW1jcHkocmtfbmZjX2J1Zl90b19vb2JfcHRyKGNoaXAsIGkgLSAxKSwKPj4gKwnCoMKg wqDCoMKgwqAgcmtfbmZjX29vYl9wdHIoY2hpcCwgaSksCj4+ICsJwqDCoMKgwqDCoMKgIE5GQ19T WVNfREFUQV9TSVpFKTsKPj4gKwkvKiBDb3B5IEVDQyBkYXRhIGZyb20gdGhlIE5GQyBidWZmZXIu ICovCj4+ICsJbWVtY3B5KHJrX25mY19idWZfdG9fb29iX2VjY19wdHIoY2hpcCwgaSksCj4+ICsJ wqDCoMKgwqDCoMKgIHJrX25mY19vb2JfcHRyKGNoaXAsIGkpICsgTkZDX1NZU19EQVRBX1NJWkUs Cj4+ICsJwqDCoMKgwqDCoMKgIGVjYy0+Ynl0ZXMpOwo+PiArCS8qIENvcHkgZGF0YSBmcm9tIHRo ZSBORkMgYnVmZmVyLiAqLwo+PiArCWlmIChidWYpCj4+ICsJbWVtY3B5KHJrX25mY19idWZfdG9f ZGF0YV9wdHIoY2hpcCwgYnVmLCBpKSwKPj4gKwnCoMKgwqDCoMKgwqAgcmtfbmZjX2RhdGFfcHRy KGNoaXAsIGkpLAo+PiArCcKgwqDCoMKgwqDCoCBlY2MtPnNpemUpOwo+PiArCX0KPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY19yZWFkX29vYihzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSkKPj4gK3sKPj4gKwlyZXR1cm4gcmtfbmZjX3Jl YWRfcGFnZV9yYXcoY2hpcCwgTlVMTCwgMSwgcGFnZSk7Cj4KPkRpdHRvCj4KPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBya19uZmNfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKmNo aXAsIHU4ICpidWYsIGludCBvb2Jfb24sCj4+ICsJwqAgaW50IHBhZ2UpCj4+ICt7Cj4+ICsJc3Ry dWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPj4gKwlzdHJ1Y3QgcmtfbmZj ICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsJc3RydWN0IHJrX25m Y19uYW5kX2NoaXAgKnJrbmFuZCA9IHJrX25mY190b19ya25hbmQoY2hpcCk7Cj4+ICsJc3RydWN0 IG5hbmRfZWNjX2N0cmwgKmVjYyA9ICZjaGlwLT5lY2M7Cj4+ICsJaW50IG9vYl9zdGVwID0gKGVj Yy0+Ynl0ZXMgPiA2MCkgPyBORkNfTUFYX09PQl9QRVJfU1RFUCA6Cj4+ICsJTkZDX01JTl9PT0Jf UEVSX1NURVA7Cj4+ICsJaW50IHBhZ2VzX3Blcl9ibGsgPSBtdGQtPmVyYXNlc2l6ZSAvIG10ZC0+ d3JpdGVzaXplOwo+PiArCWRtYV9hZGRyX3QgZG1hX2RhdGEsIGRtYV9vb2I7Cj4+ICsJaW50IHJl dCA9IDAsIGksIGJvb3Rfcm9tX21vZGUgPSAwOwo+PiArCWludCBiaXRmbGlwcyA9IDAsIGJjaF9z dDsKPj4gKwl1OCAqb29iOwo+PiArCXUzMiB0bXA7Cj4+ICsKPj4gKwluYW5kX3JlYWRfcGFnZV9v cChjaGlwLCBwYWdlLCAwLCBOVUxMLCAwKTsKPj4gKwo+PiArCWRtYV9kYXRhID0gZG1hX21hcF9z aW5nbGUobmZjLT5kZXYsIG5mYy0+cGFnZV9idWYsCj4+ICsJwqAgbXRkLT53cml0ZXNpemUsCj4+ ICsJwqAgRE1BX0ZST01fREVWSUNFKTsKPj4gKwlkbWFfb29iID0gZG1hX21hcF9zaW5nbGUobmZj LT5kZXYsIG5mYy0+b29iX2J1ZiwKPj4gKwllY2MtPnN0ZXBzICogb29iX3N0ZXAsCj4+ICsJRE1B X0ZST01fREVWSUNFKTsKPj4gKwo+PiArCS8qCj4+ICsJKiBUaGUgZmlyc3QgYmxvY2tzICg0LCA4 IG9yIDE2IGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlKQo+PiArCSogYXJlIHVzZWQgYnkgdGhlIGJv b3QgUk9NLgo+PiArCSogQ29uZmlndXJlIHRoZSBFQ0MgYWxnb3JpdGhtIHN1cHBvcnRlZCBieSB0 aGUgYm9vdCBST00uCj4+ICsJKi8KPj4gKwlpZiAoKHBhZ2UgPCBwYWdlc19wZXJfYmxrICogcmtu YW5kLT5ib290X2Jsa3MpICYmCj4+ICsJwqDCoMKgIChjaGlwLT5vcHRpb25zICYgTkFORF9JU19C T09UX01FRElVTSkpIHsKPj4gKwlib290X3JvbV9tb2RlID0gMTsKPj4gKwlpZiAocmtuYW5kLT5i b290X2VjYyAhPSBlY2MtPnN0cmVuZ3RoKQo+PiArCXJrX25mY19od19lY2Nfc2V0dXAoY2hpcCwg ZWNjLAo+PiArCcKgwqDCoCBya25hbmQtPmJvb3RfZWNjKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZWlu aXRfY29tcGxldGlvbigmbmZjLT5kb25lKTsKPj4gKwl3cml0ZWwoSU5UX0RNQSwgbmZjLT5yZWdz ICsgbmZjLT5jZmctPmludF9lbl9vZmYpOwo+PiArCXJrX25mY194ZmVyX3N0YXJ0KG5mYywgTkZD X1JFQUQsIGVjYy0+c3RlcHMsIGRtYV9kYXRhLAo+PiArCcKgIGRtYV9vb2IpOwo+PiArCXJldCA9 IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbmZjLT5kb25lLAo+PiArCcKgIG1zZWNzX3Rv X2ppZmZpZXMoMTAwKSk7Cj4+ICsJaWYgKCFyZXQpCj4+ICsJZGV2X3dhcm4obmZjLT5kZXYsICJy ZWFkOiB3YWl0IGRtYSBkb25lIHRpbWVvdXQuXG4iKTsKPj4gKwkvKgo+PiArCSogV2hldGhlciB0 aGUgRE1BIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvciBub3QuIFRoZSBkcml2ZXIKPj4gKwkqIG5l ZWRzIHRvIGNoZWNrIHRoZSBORkNgcyBzdGF0dXMgcmVnaXN0ZXIgdG8gc2VlIGlmIHRoZSBkYXRh Cj4+ICsJKiB0cmFuc2ZlciB3YXMgY29tcGxldGVkLgo+PiArCSovCj4+ICsJcmV0ID0gcmtfbmZj X3dhaXRfZm9yX3hmZXJfZG9uZShuZmMpOwo+PiArCWRtYV91bm1hcF9zaW5nbGUobmZjLT5kZXYs IGRtYV9kYXRhLCBtdGQtPndyaXRlc2l6ZSwKPj4gKwlETUFfRlJPTV9ERVZJQ0UpOwo+PiArCWRt YV91bm1hcF9zaW5nbGUobmZjLT5kZXYsIGRtYV9vb2IsIGVjYy0+c3RlcHMgKiBvb2Jfc3RlcCwK Pj4gKwlETUFfRlJPTV9ERVZJQ0UpOwo+PiArCj4+ICsJaWYgKHJldCkgewo+PiArCWJpdGZsaXBz ID0gLUVJTzsKPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LAo+PiArCSJyZWFkOiB3YWl0IHRyYW5zZmVy IGRvbmUgdGltZW91dC5cbiIpOwo+PiArCWdvdG8gb3V0Owo+PiArCX0KPj4gKwo+PiArCWZvciAo aSA9IDE7IGkgPCBlY2MtPnN0ZXBzOyBpKyspIHsKPj4gKwlvb2IgPSBjaGlwLT5vb2JfcG9pICsg KGkgLSAxKSAqIE5GQ19TWVNfREFUQV9TSVpFOwo+PiArCWlmIChuZmMtPmNmZy0+dHlwZSA9PSBO RkNfVjkpCj4+ICsJdG1wID0gbmZjLT5vb2JfYnVmW2ldOwo+PiArCWVsc2UKPj4gKwl0bXAgPSBu ZmMtPm9vYl9idWZbaSAqIChvb2Jfc3RlcCAvIDQpXTsKPj4gKwkqb29iKysgPSAodTgpdG1wOwo+ PiArCSpvb2IrKyA9ICh1OCkodG1wID4+IDgpOwo+PiArCSpvb2IrKyA9ICh1OCkodG1wID4+IDE2 KTsKPj4gKwkqb29iKysgPSAodTgpKHRtcCA+PiAyNCk7Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChp ID0gMDsgaSA8IChlY2MtPnN0ZXBzIC8gMik7IGkrKykgewo+PiArCWJjaF9zdCA9IHJlYWRsX3Jl bGF4ZWQobmZjLT5yZWdzICsKPj4gKwnCoMKgwqDCoMKgwqAgbmZjLT5jZmctPmJjaF9zdF9vZmYg KyBpICogNCk7Cj4+ICsJaWYgKGJjaF9zdCAmIEJJVChuZmMtPmNmZy0+ZWNjMC5lcnJfZmxhZ19i aXQpIHx8Cj4+ICsJwqDCoMKgIGJjaF9zdCAmIEJJVChuZmMtPmNmZy0+ZWNjMS5lcnJfZmxhZ19i aXQpKSB7Cj4+ICsJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7Cj4+ICsJYml0ZmxpcHMgPSAwOwo+ PiArCX0gZWxzZSB7Cj4+ICsJcmV0ID0gRUNDX0VSUl9DTlQoYmNoX3N0LCBuZmMtPmNmZy0+ZWNj MCk7Cj4+ICsJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHJldDsKPj4gKwliaXRmbGlwcyA9 IG1heF90KHUzMiwgYml0ZmxpcHMsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBFQ0NfRVJSX0NOVChi Y2hfc3QsIG5mYy0+Y2ZnLT5lY2MxKTsKPj4gKwltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0g cmV0Owo+PiArCWJpdGZsaXBzID0gbWF4X3QodTMyLCBiaXRmbGlwcywgcmV0KTsKPj4gKwl9Cj4+ ICsJfQo+PiArb3V0Ogo+PiArCW1lbWNweShidWYsIG5mYy0+cGFnZV9idWYsIG10ZC0+d3JpdGVz aXplKTsKPj4gKwo+PiArCWlmIChib290X3JvbV9tb2RlICYmIHJrbmFuZC0+Ym9vdF9lY2MgIT0g ZWNjLT5zdHJlbmd0aCkKPj4gKwlya19uZmNfaHdfZWNjX3NldHVwKGNoaXAsIGVjYywgZWNjLT5z dHJlbmd0aCk7Cj4+ICsKPj4gKwlpZiAoYml0ZmxpcHMgPiBlY2MtPnN0cmVuZ3RoKQo+PiArCWRl dl9lcnIobmZjLT5kZXYsICJyZWFkIHBhZ2U6ICV4IGVjYyBlcnJvciFcbiIsIHBhZ2UpOwo+PiAr Cj4+ICsJLyoKPj4gKwkqIERlc2VsZWN0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFyZ2V0IGFm dGVyIHRoZSBvcHMgaXMgZG9uZQo+PiArCSogdG8gcmVkdWNlIHRoZSBwb3dlciBjb25zdW1wdGlv bi4KPj4gKwkqLwo+PiArCXJrX25mY19zZWxlY3RfY2hpcChjaGlwLCAtMSk7Cj4+ICsKPj4gKwly ZXR1cm4gYml0ZmxpcHM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBya19uZmNf aHdfaW5pdChzdHJ1Y3QgcmtfbmZjICpuZmMpCj4+ICt7Cj4+ICsJLyogRGlzYWJsZSBmbGFzaCB3 cC4gKi8KPj4gKwl3cml0ZWwoRk1DVExfV1AsIG5mYy0+cmVncyArIE5GQ19GTUNUTCk7Cj4+ICsJ LyogQ29uZmlnIGRlZmF1bHQgdGltaW5nIDQwbnMgYXQgMTUwIE1oeiBuZmMgY2xvY2suICovCj4+ ICsJd3JpdGVsKDB4MTA4MSwgbmZjLT5yZWdzICsgTkZDX0ZNV0FJVCk7Cj4+ICsJLyogRGlzYWJs ZSByYW5kb21pemVyIGFuZCBETUEuICovCj4+ICsJd3JpdGVsKDAsIG5mYy0+cmVncyArIG5mYy0+ Y2ZnLT5yYW5kbXpfb2ZmKTsKPj4gKwl3cml0ZWwoMCwgbmZjLT5yZWdzICsgbmZjLT5jZmctPmRt YV9jZmdfb2ZmKTsKPj4gKwl3cml0ZWwoRkxDVExfUlNULCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ ZmxjdGxfb2ZmKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90IHJrX25mY19pcnEo aW50IGlycSwgdm9pZCAqaWQpCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gaWQ7Cj4+ ICsJdTMyIHN0YSwgaWVuOwo+PiArCj4+ICsJc3RhID0gcmVhZGxfcmVsYXhlZChuZmMtPnJlZ3Mg KyBuZmMtPmNmZy0+aW50X3N0X29mZik7Cj4+ICsJaWVuID0gcmVhZGxfcmVsYXhlZChuZmMtPnJl Z3MgKyBuZmMtPmNmZy0+aW50X2VuX29mZik7Cj4+ICsKPj4gKwlpZiAoIShzdGEgJiBpZW4pKQo+ PiArCXJldHVybiBJUlFfTk9ORTsKPj4gKwo+PiArCXdyaXRlbChzdGEsIG5mYy0+cmVncyArIG5m Yy0+Y2ZnLT5pbnRfY2xyX29mZik7Cj4+ICsJd3JpdGVsKH5zdGEgJiBpZW4sIG5mYy0+cmVncyAr IG5mYy0+Y2ZnLT5pbnRfZW5fb2ZmKTsKPj4gKwo+PiArCWNvbXBsZXRlKCZuZmMtPmRvbmUpOwo+ PiArCj4+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJr X25mY19lbmFibGVfY2xrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBya19uZmMgKm5mYykK Pj4gK3sKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKCFJU19FUlIobmZjLT5uZmNfY2xrKSkg ewo+PiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShuZmMtPm5mY19jbGspOwo+PiArCWlmIChy ZXQpIHsKPj4gKwlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgbmZjIGNsa1xuIik7Cj4+ ICsJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKG5mYy0+YWhiX2Nsayk7Cj4+ICsJaWYgKHJldCkgewo+PiArCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGVuYWJsZSBhaGIgY2xrXG4iKTsKPj4gKwlpZiAoIUlTX0VSUihuZmMtPm5mY19j bGspKQo+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShuZmMtPm5mY19jbGspOwo+PiArCXJldHVy biByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIHJrX25mY19kaXNhYmxlX2Nsa3Moc3RydWN0IHJrX25mYyAqbmZjKQo+PiArewo+PiArCWlm ICghSVNfRVJSKG5mYy0+bmZjX2NsaykpCj4+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG5mYy0+ bmZjX2Nsayk7Cj4+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG5mYy0+YWhiX2Nsayk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcmtfbmZjX29vYmxheW91dF9mcmVlKHN0cnVjdCBtdGRfaW5m byAqbXRkLCBpbnQgc2VjdGlvbiwKPj4gKwlzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYl9yZWdp b24pCj4+ICt7Cj4+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7 Cj4+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHJrX25mY190b19ya25hbmQo Y2hpcCk7Cj4+ICsKPj4gKwlpZiAoc2VjdGlvbikKPj4gKwlyZXR1cm4gLUVSQU5HRTsKPj4gKwo+ PiArCS8qCj4+ICsJKiBUaGUgYmVnaW5uaW5nIG9mIHRoZSBPT0IgYXJlYSBzdG9yZXMgdGhlIHJl c2VydmVkIGRhdGEgZm9yIHRoZSBORkMsCj4+ICsJKiB0aGUgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQg ZGF0YSBpcyBORkNfU1lTX0RBVEFfU0laRSBieXRlcy4KPj4gKwkqLwo+PiArCW9vYl9yZWdpb24t Pmxlbmd0aCA9IHJrbmFuZC0+bWV0YWRhdGFfc2l6ZSAtIE5GQ19TWVNfREFUQV9TSVpFIC0gMjsK Pj4gKwlvb2JfcmVnaW9uLT5vZmZzZXQgPSBORkNfU1lTX0RBVEFfU0laRSArIDI7Cj4+ICsKPj4g KwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfb29ibGF5b3V0X2Vj YyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4+ICsJc3RydWN0IG10ZF9vb2Jf cmVnaW9uICpvb2JfcmVnaW9uKQo+PiArewo+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBt dGRfdG9fbmFuZChtdGQpOwo+PiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpya25hbmQgPSBy a19uZmNfdG9fcmtuYW5kKGNoaXApOwo+PiArCj4+ICsJaWYgKHNlY3Rpb24pCj4+ICsJcmV0dXJu IC1FUkFOR0U7Cj4+ICsKPj4gKwlvb2JfcmVnaW9uLT5sZW5ndGggPSBtdGQtPm9vYnNpemUgLSBy a25hbmQtPm1ldGFkYXRhX3NpemU7Cj4+ICsJb29iX3JlZ2lvbi0+b2Zmc2V0ID0gcmtuYW5kLT5t ZXRhZGF0YV9zaXplOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcmtfbmZjX29vYmxheW91dF9vcHMgPSB7Cj4+ ICsJLmZyZWUgPSBya19uZmNfb29ibGF5b3V0X2ZyZWUsCj4+ICsJLmVjYyA9IHJrX25mY19vb2Js YXlvdXRfZWNjLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfZWNjX2luaXQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKPj4gK3sKPj4gKwlzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsKPj4gKwlzdHJ1Y3QgcmtfbmZjICpu ZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsJc3RydWN0IG5hbmRfZWNj X2N0cmwgKmVjYyA9ICZjaGlwLT5lY2M7Cj4+ICsJY29uc3QgdTggKnN0cmVuZ3RocyA9IG5mYy0+ Y2ZnLT5lY2Nfc3RyZW5ndGhzOwo+PiArCXU4IG1heF9zdHJlbmd0aCwgbmZjX21heF9zdHJlbmd0 aDsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCW5mY19tYXhfc3RyZW5ndGggPSBuZmMtPmNmZy0+ZWNj X3N0cmVuZ3Roc1swXTsKPj4gKwkvKiBJZiBvcHRpb25hbCBkdCBzZXR0aW5ncyBub3QgcHJlc2Vu dC4gKi8KPj4gKwlpZiAoIWVjYy0+c2l6ZSB8fCAhZWNjLT5zdHJlbmd0aCB8fAo+PiArCcKgwqDC oCBlY2MtPnN0cmVuZ3RoID4gbmZjX21heF9zdHJlbmd0aCkgewo+PiArCWNoaXAtPmVjYy5zaXpl ID0gMTAyNDsKPj4gKwllY2MtPnN0ZXBzID0gbXRkLT53cml0ZXNpemUgLyBlY2MtPnNpemU7Cj4+ ICsKPj4gKwkvKgo+PiArCSogSFcgRUNDIGFsd2F5cyByZXF1ZXN0cyB0aGUgbnVtYmVyIG9mIEVD QyBieXRlcyBwZXIgMTAyNCBieXRlCj4+ICsJKiBibG9ja3MuIFRoZSBmaXJzdCA0IE9PQiBieXRl cyBhcmUgcmVzZXJ2ZWQgZm9yIHN5cyBkYXRhLgo+PiArCSovCj4+ICsJbWF4X3N0cmVuZ3RoID0g KChtdGQtPm9vYnNpemUgLyBlY2MtPnN0ZXBzKSAtIDQpICogOCAvCj4+ICsJZmxzKDggKiAxMDI0 KTsKPj4gKwlpZiAobWF4X3N0cmVuZ3RoID4gbmZjX21heF9zdHJlbmd0aCkKPj4gKwltYXhfc3Ry ZW5ndGggPSBuZmNfbWF4X3N0cmVuZ3RoOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IDQ7IGkr Kykgewo+PiArCWlmIChtYXhfc3RyZW5ndGggPj0gc3RyZW5ndGhzW2ldKQo+PiArCWJyZWFrOwo+ PiArCX0KPj4gKwo+PiArCWlmIChpID49IDQpIHsKPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LCAiVW5z dXBwb3J0ZWQgRUNDIHN0cmVuZ3RoXG4iKTsKPj4gKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4+ICsJ fQo+PiArCj4+ICsJZWNjLT5zdHJlbmd0aCA9IHN0cmVuZ3Roc1tpXTsKPj4gKwl9Cj4+ICsJZWNj LT5zdGVwcyA9IG10ZC0+d3JpdGVzaXplIC8gZWNjLT5zaXplOwo+PiArCWVjYy0+Ynl0ZXMgPSBE SVZfUk9VTkRfVVAoZWNjLT5zdHJlbmd0aCAqIGZscyg4ICogMTAyNCksIDgpOwo+Cj5IZXJlIHlv dSBhc3N1bWUgMTAyNCBFQ0Mgc3RlcCBzaXplLCB0aGlzIGlzIHdyb25nLiBFaXRoZXIgdGhlCj5j b250cm9sbGVyIG9ubHkgc3VwcG9ydHMgMTAyNCBieXRlcyBvciB5b3Ugb2ZmaWNpYWxseSBzdGF0 ZSBzb21ld2hlcmUKPnRoYXQgeW91IGRvbid0IHN1cHBvcnQgbW9yZSBFQ0Mgc3RlcCBzaXplcyB5 ZXQuCj4KPj4gKwkvKiBIVyBFQ0MgYWx3YXlzIHdvcmsgd2l0aCBldmVuIG51bWJlcnMgb2YgRUND IGJ5dGVzLiAqLwo+PiArCWVjYy0+Ynl0ZXMgPSBBTElHTihlY2MtPmJ5dGVzLCAyKTsKPgo+U2hv dWxkbid0IHlvdSBlbnN1cmUgdGhlIG51bWJlciBvZiBieXRlcyBpcyByb3VuZGVkIHVwID8KClRo ZSBWNiBhbmTCoFY5IGNvbnRyb2xsZXIgc3VwcG9ydHMgRERSIG1vZGUsIHNvIEVDQyBieXRlcyBu ZWVkIHRvIGJlIGFsaWduZWQgdG8gYW4gZXZlbiBudW1iZXIgaWYgZW5hYmxlIEREUiBtb2RlLgpU aGlzIGRyaXZlcnMgbm8gc3VwcG9ydCBkZHIgbW9kZSBub3fvvIxJIHdpbGwgZHJvcCB0aGlzIGNv ZGUuCgo+PiArCj4+ICsJcmtfbmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2MsIGVjYy0+c3RyZW5n dGgpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPgo+Cj5UaGFua3MsCj5NaXF1w6hs Cj4KPgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxp bnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9j a2NoaXAK