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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 2709BC10F03 for ; Mon, 4 Mar 2019 09:43:24 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 CCD0F20836 for ; Mon, 4 Mar 2019 09:43:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Cay4xvZd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CCD0F20836 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KPODlDyBLDiaKkDN4tBQM/+hHc2UIFNk3qCkxRECLps=; b=Cay4xvZd0AyrZ6 Wlt6GtprEOtzYxHjSBXVDtg7WoTX6gYKbzzQ3rIvhXp+7aA2GDX+O9S4H05KtLAdGxoxPM23yG2wa IKhFDPCxZIfzk21CarSxltRJa9icT9X4lQlr4kZrB/YadFoI7u3Pjz8ZlNeXu/ZYEXWr9vmIqi7oi 8Q0S8WEMD4QjO2tHihJ441nYGO2bIwfeoVIsTvsboxAG5y+vtWwkUuo/pn3LfYADIOGe++K7uklHa hv8VFjDBzOK7I/7KcQcW6+SuIT9IUi0BER18tRbOK8PnOQ/imkvBCn0puSknu623TrANVfWv1Lkef CmmB+Wuzsgz/0r0WgUpA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h0k81-0002bj-0m; Mon, 04 Mar 2019 09:43:21 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h0k7u-0002aw-9H for linux-mtd@lists.infradead.org; Mon, 04 Mar 2019 09:43:19 +0000 Received: from xps13 (aaubervilliers-681-1-27-150.w90-88.abo.wanadoo.fr [90.88.147.150]) (Authenticated sender: miquel.raynal@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id B218C240015; Mon, 4 Mar 2019 09:43:02 +0000 (UTC) Date: Mon, 4 Mar 2019 10:43:01 +0100 From: Miquel Raynal To: Naga Sureshkumar Relli Subject: Re: [LINUX PATCH v13] rawnand: pl353: Add basic driver for arm pl353 smc nand interface Message-ID: <20190304104301.062ccc1e@xps13> In-Reply-To: <1549694247-24625-1-git-send-email-naga.sureshkumar.relli@xilinx.com> References: <1549694247-24625-1-git-send-email-naga.sureshkumar.relli@xilinx.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190304_014314_784993_404F1A66 X-CRM114-Status: GOOD ( 34.54 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bbrezillon@kernel.org, richard@nod.at, linux-kernel@vger.kernel.org, marek.vasut@gmail.com, linux-mtd@lists.infradead.org, nagasureshkumarrelli@gmail.com, michals@xilinx.com, computersforpeace@gmail.com, dwmw2@infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgTmFnYSwKCk5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkgPG5hZ2Euc3VyZXNoa3VtYXIucmVsbGlA eGlsaW54LmNvbT4gd3JvdGUgb24KU2F0LCA5IEZlYiAyMDE5IDEyOjA3OjI3ICswNTMwOgoKPiBB ZGQgZHJpdmVyIGZvciBhcm0gcGwzNTMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyIG5hbmQgaW50 ZXJmYWNlIHdpdGgKPiBIVyBFQ0Mgc3VwcG9ydC4gVGhpcyBjb250cm9sbGVyIGlzIHVzZWQgaW4g WGlsaW54IFp5bnEgU29DIGZvcgo+IGludGVyZmFjaW5nIHRoZSBOQU5EIGZsYXNoIG1lbW9yeS4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDxuYWdhLnN1cmVzaGt1 bWFyLnJlbGxpQHhpbGlueC5jb20+Cj4gLS0tCj4geGlsaW54IHp5bnEgVFJNIGxpbms6Cj4gaHR0 cHM6Ly93d3cueGlsaW54LmNvbS9zdXBwb3J0L2RvY3VtZW50YXRpb24vdXNlcl9ndWlkZXMvdWc1 ODUtWnlucS03MDAwLVRSTS5wZGYKPiAKPiBBUk0gcGwzNTMgc21jIFRSTSBsaW5rOgo+IGh0dHA6 Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZGkwMzgwZy9EREkw MzgwR19zbWNfcGwzNTBfc2VyaWVzX3IycDFfdHJtLnBkZgo+IAo+IFRlc3RlZCBNaWNyb24gTVQy OUYyRzA4QUJBRUFXUCAoT24tZGllIGNhcGFibGUpIGFuZCBBTUQvU3BhbnNpb24gUzM0TUwwMUcx Lgo+IAo+IFNNQyBtZW1vcnkgY29udHJvbGxlciBkcml2ZXIgaXMgYXQgZHJpdmVycy9tZW1vcnkv cGwzNTMtc21jLmMKPiAKPiBDaGFuZ2VzIGluIHYxMzoKPiAgLSBSZWJhc2VkIHRoZSBkcml2ZXIg dG8gbXRkL25leHQKPiBDaGFuZ2VzIGluIHYxMjoKPiAgLSBSZWJhc2VkIHRoZSBkcml2ZXIgb24g dG9wIG9mIHY0LjE5IG5hbmQgdHJlZQo+ICAtIFJlbW92ZWQgbmFuZF9zY2FuX2lkZW50KCkgYW5k IG5hbmRfc2Nhbl90YWlsKCksIGFuZCBhZGRlZCBuYW5kX2NvbnRyb2xsZXJfb3BzCj4gICAgd2l0 aCAtPmF0dGFjaF9jaGlwKCkgYW5kIHVzZWQgbmFuZF9zY2FuKCkgaW5zdGVhZC4KPiAgLSBSZW5h bWVkIHBsMzUzX25hbmRfaW5mbyBzdHJ1Y3R1cmUgdG8gcGwzNTNfbmFuZF9jb250cm9sbGVyCj4g IC0gUmVuYW1lZCBuYW5kX2Jhc2UgYW5kIG5hbmRhZGRyIGluIHBsMzUzX25hbmRfY29udHJvbGxl ciB0byAncmVncycgYW5kICdidWZfYWRkcicKPiAgLSBBZGRlZCBuZXcgQVBJIHBsMzUzX3dhaXRf Zm9yX2VjY19kb25lKCkgdG8gd2FpdCBmb3IgZWNjIGRvbmUgYW5kIGNhbGwgaXQgZnJvbQo+ICAg IHBsMzUzX25hbmRfd3JpdGVfcGFnZV9od2VjYygpIGFuZCBwbDM1M19uYW5kX3JlYWRfcGFnZV9o d2VjYygpCj4gIC0gRGVmaW5lZCBuZXcgbWFjcm8gZm9yIG1heCBFQ0MgYmxvY2tzCj4gIC0gQWRk ZWQgcmV0dXJuIHZhbHVlIGNoZWNrIGZvciBlY2MuY2FsY3VsYXRlKCkKPiAgLSBSZW5hbWVkIHBs MzUzX25hbmRfY21kX2Z1bmN0aW9uKCkgdG8gcGwzNTNfbmFuZF9leGVjX29wX2NtZCgpCj4gIC0g QWRkZWQgeDE2IGJ1cy13aWR0aCBzdXBwb3J0Cj4gIC0gVGhlIGRlcGVuZGVudCBkcml2ZXIgcGwz NTMtc21jIGlzIGFscmVhZHkgcmV2aWV3ZWQgYW5kIGhlbmNlIGRyb3BwZWQgdGhlCj4gICAgc21j IGRyaXZlcgo+IENoYW5nZXMgaW4gdjExOgo+ICAtIFJlbW92ZWQgRG9jdW1lbnRhdGlvbiBwYXRj aCBhbmQgYWRkZWQgdGhlIHJlcXVpcmVkIGluZm8gaW4gZHJpdmVyIGFzCj4gICAgcGVyIEJvcmlz IGNvbW1lbnRzLgo+ICAtIFJlbW92ZWQgdW53YW50ZWQgdmFyaWFibGVzIGZyb20gcGwzNTNfbmFu ZF9pbmZvIGFzIHBlciBNaXF1ZWwgY29tbWVudHMKPiAgLSBSZW1vdmVkIElPX0FERFJfUi9XLgo+ ICAtIFJlcGxhY2VkIG9uaG90KCkgd2l0aCBod2VpZ2h0MzIoKQo+ICAtIERlZmluZWQgbWFjcm9z IGZvciBzdGF0aWMgdmFsdWVzIGluIGZ1bmN0aW9uIHBsMzUzX25hbmRfY29ycmVjdF9kYXRhKCkK PiAgLSBSZW1vdmVkIGFsbCB1bm5lY2Vzc2FyeSBkZWxheXMKPiAgLSBVc2VkIG5hbmRfd2FpdF9y ZWFkeSgpIHdoZXJlIGV2ZXIgaXMgcmVxdWlyZWQKPiAgLSBNb2RpZmVkIHRoZSBwbDM1M19zZXR1 cF9kYXRhX2ludGVyZmFjZSgpIGxvZ2ljIGFzIHBlciBNaXF1ZWwgY29tbWVudHMuCj4gIC0gVGFr ZW4gYXJyYXkgaW5zdGVhZCBvZiA3IHZhbHVlcyBpbiBwbDM1M19zZXR1cF9kYXRhX2ludGVyZmFj ZSgpIGFuZCBwYXNzCj4gICAgaXQgdG8gc21jIGRyaXZlci4KPiAgLSBBZGRlZCBjaGVjayB0byBj b2xsZWN0IHRoZSByZXR1cm4gdmFsdWUgb2YgbXRkX2RldmljZV9yZWdpc3RlcigpLgo+IENoYW5n ZXMgaW4gMTA6Cj4gIC0gVHlwb3MgY29ycmVjdGlvbiBsaWtlIG5hbmQgdG8gTkFORCBhbmQgc29j IHRvIFNPQyBldGMuLgo+ICAtIERlZmluZWQgbWFjcm9zIGZvciB0aGUgdmFsdWVzIGluIHBsMzUz X25hbmRfY2FsY3VsYXRlX2h3ZWNjKCkKPiAgLSBNb2RpZmVkIGVjY19zdGF0dXMgZnJvbSBpbnQg dG8gY2hhciBpbiBwbDM1M19uYW5kX2NhbGN1bGF0ZV9od2VjYygpCj4gIC0gQ2hhbmdlZCB0aGUg cmV0dXJuIHR5cGUgZm9ybSBpbnQgdG8gYm9vbCB0byB0aGUgZnVuY3Rpb24KPiAgICBvbmVob3Qo KQo+ICAtIFJlbW92ZWQgdWRlbGF5KDEwMDApIGluIHBsMzUzX2NtZF9mdW5jdGlvbiwgYXMgaXQg aXMgbm90IHJlcXVpcmVkCj4gIC0gRHJvcHBlZCBlY2MtPmh3Y3RsID0gTlVMTCBpbiBwbDM1M19l Y2NfaW5pdCgpCj4gIC0gQWRkZWQgYW4gZXJyb3IgbWVzc2FnZSBpbiBwbDM1M19lY2NfaW5pdCgp LCB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nCj4gICAgb29ic2l6ZQo+ICAtIENoYW5nZWQgdGhl IHZhcmlhYmxlIGZyb20geG5hbmQgdG8geG5mYwo+ICAtIEFkZGVkIGxvZ2ljIHRvIGdldCBtdGQt Pm5hbWUgZnJvbSBEVCwgaWYgaXQgaXMgc3BlY2lmaWVkIGluIERUCj4gQ2hhbmdlcyBpbiB2OToK PiAgLSBBZGRyZXNzZWQgdGhlIGJlbG93IGNvbW1lbnRzIGdpdmVuIGJ5IE1pcXVlbAo+ICAtIGlu c3RlYWQgb2YgdXNpbmcgcGwzNTNfbmFuZF93cml0ZTMyLCB1c2UgZGlyZWN0bHkgd3JpdGVsX3Jl bGF4ZWQKPiAgLSBGaXhlZCBjaGVjayBwYXRjaCB3YXJuaW5ncwo+ICAtIFJlbmFtZWQgd3JpdGVf YnVmL3JlYWRfYnVmIHRvIHdyaXRlX2RhdGFfb3AvcmVhZF9kYXRhX29wCj4gIC0gdXNlIEJJVCBt YWNybyBpbnN0ZWFkIG9mIDEgPDwgbnIKPiAgLSBVc2UgTkFORF9ST1dfQUREUl8zIGZsYWcKPiAg LSBVc2UgbmFuZF93YWl0X3JlYWR5KCkKPiAgLSBSZW1vdmVkIHN3ZWNjIGZ1bmN0aW9ucwo+ICAt IFVzZSBhZGRyZXNzIGN5Y2xlcyBhcyBwZXIgc2l6ZSwgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZy b20gUGFyYW1ldGVyIHBhZ2UKPiAgLSBJbnN0ZWFkIG9mIHdyaXRpbmcgdG9vIG1hbnkgcGF0dGVy bnMsIHVzZSBvcHRpb25hbCBwcm9wZXJ0eQo+IENoYW5nZXMgaW4gdjg6Cj4gIC0gQWRkZWQgZXhl Y19vcCgpIGltcGxlbWVudGF0aW9uCj4gIC0gRml4ZWQgdGhlIGJlbG93IHY3IHJldmlldyBjb21t ZW50cwo+ICAtIHJlbW92ZWQgbXRkX2luZm8gZnJvbSBwbDM1M19uYW5kX2luZm8gc3RydWN0Cj4g IC0gQ29ycmVjdGVkIGVjYyBsYXlvdXQgb2Zmc2V0cwo+ICAtIEFkZGVkIG9uLWRpZSBlY2Mgc3Vw cG9ydAo+IENoYW5nZXMgaW4gdjc6Cj4gIC0gQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCB0aGUg bWVtY2xrIHJhdGUgYWRqdXN0bWVudHMuIEkgd2lsbAo+ICAgIGxvb2sgaW50byB0aGlzIGxhdGVy IGFuZCBvbmNlIHRoZSBiYXNpYyBkcml2ZXIgaXMgYWNjZXB0ZWQuCj4gIC0gRml4ZWQgR1BMIGxp Y2VuY2UgaWRlbnQKPiBDaGFuZ2VzIGluIHY2Ogo+ICAtIEZpeGVkIHRoZSBjaGVja3BhdGNoLnBs IHJlcG9ydGVkIHdhcm5pbmdzCj4gIC0gVXNpbmcgdGhlIGFkZHJlc3MgY3ljbGVzIGluZm9ybWF0 aW9uIGZyb20gdGhlIG9uZmkgcGFyYW0gcGFnZQo+ICAgIGVhcmxpZXIgaXQgaXMgaGFyZGNvZGVk IHRvIDUgaW4gZHJpdmVyCj4gQ2hhbmdlcyBpbiB2NToKPiAgLSBDb25maWd1cmUgdGhlIG5hbmQg dGltaW5nIHBhcmFtZXRlcnMgYXMgcGVyIHRoZSBvbmZpIHNwZWMgQ2hhbmdlcyBpbiB2NDoKPiAg LSBVcGRhdGVkIHRoZSBkcml2ZXIgdG8gc3luYyB3aXRoIHBsMzUzX3NtYyBkcml2ZXIgQVBJcwo+ IENoYW5nZXMgaW4gdjM6Cj4gIC0gaW1wbGVtZW50ZWQgdGhlIHByb3BlciBlcnJvciBjb2Rlcwo+ ICAtIGZ1cnRoZXIgYnJlYWtkb3duIHRoaXMgcGF0Y2ggdG8gbXVsdGlwbGUgc2V0cwo+ICAtIGFk ZGVkIHRoZSBjb250cm9sbGVyIGFuZCBkcml2ZXIgZGV0YWlscyB0byBEb2N1bWVudGF0aW9uIHNl Y3Rpb24KPiAgLSB1cGRhdGVkIHRoZSBsaWNlbmVjZSB0byBHUEx2Mgo+ICAtIHJlb3JnYW5pemVk IHRoZSBwbDM1M19uYW5kX2VjY19pbml0IGZ1bmN0aW9uCj4gQ2hhbmdlcyBpbiB2MjoKPiAgLSB1 c2UgImRlcGVuZHMgb24iIHJhdGhlciB0aGFuICJzZWxlY3QiIG9wdGlvbiBpbiBrY29uZmlnCj4g IC0gcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBwYXJ0cwo+IC0tLQo+ICBkcml2ZXJzL210ZC9uYW5k L3Jhdy9LY29uZmlnICAgICAgfCAgICA4ICsKPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZp bGUgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25hbmQuYyB8IDEz ODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5n ZWQsIDEzODkgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQv bmFuZC9yYXcvcGwzNTNfbmFuZC5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQv cmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4gaW5kZXggMWE1NWQz ZS4uYmM2YzBhMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4g KysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZwo+IEBAIC01NDEsNCArNTQxLDEyIEBA IGNvbmZpZyBNVERfTkFORF9URUdSQQo+ICAJICBpcyBzdXBwb3J0ZWQuIEV4dHJhIE9PQiBieXRl cyB3aGVuIHVzaW5nIEhXIEVDQyBhcmUgY3VycmVudGx5Cj4gIAkgIG5vdCBzdXBwb3J0ZWQuCj4g IAo+ICtjb25maWcgTVREX05BTkRfUEwzNTMKPiArCXRyaXN0YXRlICJBUk0gUGwzNTMgTkFORCBm bGFzaCBkcml2ZXIiCj4gKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEFSTQo+ICsJZGVwZW5kcyBv biBQTDM1M19TTUMKPiArCWhlbHAKPiArCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBQcmltZUNlbGwg U3RhdGljIE1lbW9yeSBDb250cm9sbGVyIFBMMzUzLgo+ICsKPiArCj4gIGVuZGlmICMgTVREX05B TkQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgYi9kcml2ZXJz L210ZC9uYW5kL3Jhdy9NYWtlZmlsZQo+IGluZGV4IDU3MTU5YjMuLjlkM2M0OGQgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL210ZC9u YW5kL3Jhdy9NYWtlZmlsZQo+IEBAIC01Niw2ICs1Niw3IEBAIG9iai0kKENPTkZJR19NVERfTkFO RF9CUkNNTkFORCkJCSs9IGJyY21uYW5kLwo+ICBvYmotJChDT05GSUdfTVREX05BTkRfUUNPTSkJ CSs9IHFjb21fbmFuZGMubwo+ICBvYmotJChDT05GSUdfTVREX05BTkRfTVRLKQkJKz0gbXRrX2Vj Yy5vIG10a19uYW5kLm8KPiAgb2JqLSQoQ09ORklHX01URF9OQU5EX1RFR1JBKQkJKz0gdGVncmFf bmFuZC5vCj4gK29iai0kKENPTkZJR19NVERfTkFORF9QTDM1MykJCSs9IHBsMzUzX25hbmQubwo+ ICAKPiAgbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfbGVnYWN5Lm8gbmFuZF9iYnQubyBu YW5kX3RpbWluZ3MubyBuYW5kX2lkcy5vCj4gIG5hbmQtb2JqcyArPSBuYW5kX29uZmkubwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1M19uYW5kLmMgYi9kcml2ZXJzL210 ZC9uYW5kL3Jhdy9wbDM1M19uYW5kLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLjFkYmFhZTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9y YXcvcGwzNTNfbmFuZC5jCj4gQEAgLTAsMCArMSwxMzgwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIEFSTSBQTDM1MyBOQU5EIGZsYXNoIGNvbnRy b2xsZXIgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBYaWxpbngsIEluYwo+ ICsgKiBBdXRob3I6IFB1bm5haWFoIGNob3dkYXJ5IGthbGx1cmkgPHB1bm5haWFoQHhpbGlueC5j b20+Cj4gKyAqIEF1dGhvcjogTmFnYSBTdXJlc2hrdW1hciBSZWxsaSA8bmFnYXN1cmVAeGlsaW54 LmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9pcnEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L210ZC9yYXduYW5kLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFu ZF9lY2MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BsMzUzLXNtYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKwo+ICsjZGVmaW5lIFBM MzUzX05BTkRfRFJJVkVSX05BTUUgInBsMzUzLW5hbmQiCj4gKwo+ICsvKiBOQU5EIGZsYXNoIGRy aXZlciBkZWZpbmVzICovCj4gKyNkZWZpbmUgUEwzNTNfTkFORF9DTURfUEhBU0UJMQkvKiBFbmQg Y29tbWFuZCB2YWxpZCBpbiBjb21tYW5kIHBoYXNlICovCj4gKyNkZWZpbmUgUEwzNTNfTkFORF9E QVRBX1BIQVNFCTIJLyogRW5kIGNvbW1hbmQgdmFsaWQgaW4gZGF0YSBwaGFzZSAqLwo+ICsjZGVm aW5lIFBMMzUzX05BTkRfRUNDX1NJWkUJNTEyCS8qIFNpemUgb2YgZGF0YSBmb3IgRUNDIG9wZXJh dGlvbiAqLwo+ICsKPiArLyogRmxhc2ggbWVtb3J5IGNvbnRyb2xsZXIgb3BlcmF0aW5nIHBhcmFt ZXRlcnMgKi8KPiArCj4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfQ09ORklHCShCSVQoNCkgIHwJ LyogRUNDIHJlYWQgYXQgZW5kIG9mIHBhZ2UgKi8gXAo+ICsJCQkJICgwIDw8IDUpKQkvKiBObyBK dW1waW5nICovCj4gKwo+ICsvKiBBWEkgQWRkcmVzcyBkZWZpbml0aW9ucyAqLwo+ICsjZGVmaW5l IFNUQVJUX0NNRF9TSElGVAkJMwo+ICsjZGVmaW5lIEVORF9DTURfU0hJRlQJCTExCj4gKyNkZWZp bmUgRU5EX0NNRF9WQUxJRF9TSElGVAkyMAo+ICsjZGVmaW5lIEFERFJfQ1lDTEVTX1NISUZUCTIx Cj4gKyNkZWZpbmUgQ0xFQVJfQ1NfU0hJRlQJCTIxCj4gKyNkZWZpbmUgRUNDX0xBU1RfU0hJRlQJ CTEwCj4gKyNkZWZpbmUgQ09NTUFORF9QSEFTRQkJKDAgPDwgMTkpCj4gKyNkZWZpbmUgREFUQV9Q SEFTRQkJQklUKDE5KQo+ICsKPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19MQVNUCUJJVChFQ0Nf TEFTVF9TSElGVCkJLyogU2V0IEVDQ19MYXN0ICovCj4gKyNkZWZpbmUgUEwzNTNfTkFORF9DTEVB Ul9DUwlCSVQoQ0xFQVJfQ1NfU0hJRlQpCS8qIENsZWFyIGNoaXAgc2VsZWN0ICovCj4gKwo+ICsj ZGVmaW5lIFBMMzUzX05BTkRfRUNDX0JVU1lfVElNRU9VVAkoMSAqIEhaKQo+ICsjZGVmaW5lIFBM MzUzX05BTkRfREVWX0JVU1lfVElNRU9VVAkoMSAqIEhaKQo+ICsjZGVmaW5lIFBMMzUzX05BTkRf TEFTVF9UUkFOU0ZFUl9MRU5HVEgJNAo+ICsjZGVmaW5lIFBMMzUzX05BTkRfRUNDX1ZBTElEX1NI SUZUCTI0Cj4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfVkFMSURfTUFTSwkweDQwCj4gKyNkZWZp bmUgUEwzNTNfRUNDX0JJVFNfQllURU9GRl9NQVNLCTB4MUZGCj4gKyNkZWZpbmUgUEwzNTNfRUND X0JJVFNfQklUT0ZGX01BU0sJMHg3Cj4gKyNkZWZpbmUgUEwzNTNfRUNDX0JJVF9NQVNLCQkweEZG Rgo+ICsjZGVmaW5lIFBMMzUzX1RSRUFfTUFYX1ZBTFVFCQkxCj4gKyNkZWZpbmUgUEwzNTNfTUFY X0VDQ19DSFVOS1MJCTQKPiArI2RlZmluZSBQTDM1M19NQVhfRUNDX0JZVEVTCQkzCj4gKwo+ICtz dHJ1Y3QgcGwzNTNfbmZjX29wIHsKPiArCXUzMiBjbW5kc1s0XTsKPiArCXUzMiBlbmRfY21kOwo+ ICsJdTMyIGFkZHJzOwo+ICsJdTMyIG5hZGRyczsKPiArCXUzMiBhZGRyNTsKPiArCXUzMiBhZGRy NjsKPiArCXVuc2lnbmVkIGludCBkYXRhX2luc3RyX2lkeDsKPiArCXVuc2lnbmVkIGludCByZHlf dGltZW91dF9tczsKPiArCXVuc2lnbmVkIGludCByZHlfZGVsYXlfbnM7Cj4gKwl1bnNpZ25lZCBp bnQgY2xlX2FsZV9kZWxheV9uczsKPiArCWNvbnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICpkYXRh X2luc3RyOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xs ZXIgLSBEZWZpbmVzIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgZHJpdmVyCj4gKyAqCQkJCSAg aW5zdGFuY2UKPiArICogQGNoaXA6CQlOQU5EIGNoaXAgaW5mb3JtYXRpb24gc3RydWN0dXJlCj4g KyAqIEBkZXY6CQlQYXJlbnQgZGV2aWNlICh1c2VkIHRvIHByaW50IGVycm9yIG1lc3NhZ2VzKQo+ ICsgKiBAcmVnczoJCVZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgTkFORCBmbGFzaCBkZXZpY2UKPiAr ICogQGJ1Zl9hZGRyOgkJVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBOQU5EIGZsYXNoIGRldmljZSBm b3IKPiArICoJCQlkYXRhIHJlYWQvd3JpdGVzCj4gKyAqIEBhZGRyX2N5Y2xlczoJQWRkcmVzcyBj eWNsZXMKPiArICogQG1jbGs6CQlNZW1vcnkgY29udHJvbGxlciBjbG9jawo+ICsgKiBAYnVzd2lk dGg6CQlCdXMgd2lkdGggOCBvciAxNgo+ICsgKi8KPiArc3RydWN0IHBsMzUzX25hbmRfY29udHJv bGxlciB7Cj4gKwlzdHJ1Y3QgbmFuZF9jb250cm9sbGVyIGNvbnRyb2xsZXI7Cj4gKwlzdHJ1Y3Qg bmFuZF9jaGlwIGNoaXA7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwl2b2lkIF9faW9tZW0g KnJlZ3M7Cj4gKwl2b2lkIF9faW9tZW0gKmJ1Zl9hZGRyOwo+ICsJdTggYWRkcl9jeWNsZXM7Cj4g KwlzdHJ1Y3QgY2xrICptY2xrOwo+ICsJdTMyIGJ1c3dpZHRoOwo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBwbDM1M19lY2Nfb29ibGF5b3V0MTZfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQg c2VjdGlvbiwKPiArCQkJCSAgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCj4g K3sKPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsKPiAr CWlmIChzZWN0aW9uID49IGNoaXAtPmVjYy5zdGVwcykKPiArCQlyZXR1cm4gLUVSQU5HRTsKPiAr Cj4gKwlvb2JyZWdpb24tPm9mZnNldCA9IChzZWN0aW9uICogY2hpcC0+ZWNjLmJ5dGVzKTsKPiAr CW9vYnJlZ2lvbi0+bGVuZ3RoID0gY2hpcC0+ZWNjLmJ5dGVzOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9mcmVlKHN0cnVjdCBt dGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiArCQkJCSAgICAgIHN0cnVjdCBtdGRfb29iX3Jl Z2lvbiAqb29icmVnaW9uKQo+ICt7Cj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3Rv X25hbmQobXRkKTsKPiArCj4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Muc3RlcHMpCj4gKwkJ cmV0dXJuIC1FUkFOR0U7Cj4gKwo+ICsJb29icmVnaW9uLT5vZmZzZXQgPSAoc2VjdGlvbiAqIGNo aXAtPmVjYy5ieXRlcykgKyA4Owo+ICsJb29icmVnaW9uLT5sZW5ndGggPSA4Owo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9vb2JsYXlvdXRfb3Bz IHBsMzUzX2VjY19vb2JsYXlvdXQxNl9vcHMgPSB7Cj4gKwkuZWNjID0gcGwzNTNfZWNjX29vYmxh eW91dDE2X2VjYywKPiArCS5mcmVlID0gcGwzNTNfZWNjX29vYmxheW91dDE2X2ZyZWUsCj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9lY2Moc3RydWN0IG10ZF9p bmZvICptdGQsIGludCBzZWN0aW9uLAo+ICsJCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24g Km9vYnJlZ2lvbikKPiArewo+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5k KG10ZCk7Cj4gKwo+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQo+ICsJCXJldHVy biAtRVJBTkdFOwo+ICsKPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKiBjaGlwLT5l Y2MuYnl0ZXMpICsgNTI7Cj4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IGNoaXAtPmVjYy5ieXRlczsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwbDM1M19lY2Nfb29ibGF5 b3V0NjRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gKwkJCQkgICAg ICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikKPiArewo+ICsJc3RydWN0IG5hbmRf Y2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7Cj4gKwo+ICsJaWYgKHNlY3Rpb24pCj4gKwkJ cmV0dXJuIC1FUkFOR0U7Cj4gKwo+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQo+ ICsJCXJldHVybiAtRVJBTkdFOwo+ICsKPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24g KiBjaGlwLT5lY2MuYnl0ZXMpICsgMjsKPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gNTA7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91 dF9vcHMgcGwzNTNfZWNjX29vYmxheW91dDY0X29wcyA9IHsKPiArCS5lY2MgPSBwbDM1M19lY2Nf b29ibGF5b3V0NjRfZWNjLAo+ICsJLmZyZWUgPSBwbDM1M19lY2Nfb29ibGF5b3V0NjRfZnJlZSwK PiArfTsKPiArCj4gKy8qIEdlbmVyaWMgZmxhc2ggYmJ0IGRlY3JpcHRvcnMgKi8KPiArc3RhdGlj IHU4IGJidF9wYXR0ZXJuW10gPSB7ICdCJywgJ2InLCAndCcsICcwJyB9Owo+ICtzdGF0aWMgdTgg bWlycm9yX3BhdHRlcm5bXSA9IHsgJzEnLCAndCcsICdiJywgJ0InIH07Cj4gKwo+ICtzdGF0aWMg c3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9tYWluX2Rlc2NyID0gewo+ICsJLm9wdGlvbnMgPSBO QU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfCBOQU5EX0JCVF9XUklURQo+ICsJ CXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLAo+ ICsJLm9mZnMgPSA0LAo+ICsJLmxlbiA9IDQsCj4gKwkudmVyb2ZmcyA9IDIwLAo+ICsJLm1heGJs b2NrcyA9IDQsCj4gKwkucGF0dGVybiA9IGJidF9wYXR0ZXJuCj4gK307Cj4gKwo+ICtzdGF0aWMg c3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9taXJyb3JfZGVzY3IgPSB7Cj4gKwkub3B0aW9ucyA9 IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8IE5BTkRfQkJUX1dSSVRFCj4g KwkJfCBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiB8IE5BTkRfQkJUX1BFUkNISVAs Cj4gKwkub2ZmcyA9IDQsCj4gKwkubGVuID0gNCwKPiArCS52ZXJvZmZzID0gMjAsCj4gKwkubWF4 YmxvY2tzID0gNCwKPiArCS5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm4KPiArfTsKPiArCj4gK3N0 YXRpYyB2b2lkIHBsMzUzX25mY19mb3JjZV9ieXRlX2FjY2VzcyhzdHJ1Y3QgbmFuZF9jaGlwICpj aGlwLAo+ICsJCQkJCWJvb2wgZm9yY2VfOGJpdCkKPiArewo+ICsJc3RydWN0IHBsMzUzX25hbmRf Y29udHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19u YW5kX2NvbnRyb2xsZXIsIGNoaXApOwo+ICsKPiArCWlmICghKGNoaXAtPm9wdGlvbnMgJiBOQU5E X0JVU1dJRFRIXzE2KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGZvcmNlXzhiaXQpCj4gKwkJ cGwzNTNfc21jX3NldF9idXN3aWR0aChQTDM1M19TTUNfTUVNX1dJRFRIXzgpOwo+ICsJZWxzZQo+ ICsJCXBsMzUzX3NtY19zZXRfYnVzd2lkdGgoUEwzNTNfU01DX01FTV9XSURUSF8xNik7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBwbDM1M19uYW5kX3JlYWRfZGF0YV9vcCAtIHJlYWQgY2hpcCBkYXRh IGludG8gYnVmZmVyCj4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBz dHJ1Y3R1cmUKPiArICogQGluOgkJUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlYWQg ZGF0YQo+ICsgKiBAbGVuOglOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAo+ICsgKiBAZm9yY2VfOGJp dDoJRm9yY2UgOC1iaXQgYnVzIGFjY2Vzcwo+ICsgKiBSZXR1cm46CUFsd2F5cyByZXR1cm4gemVy bwo+ICsgKi8KPiArc3RhdGljIGludCBwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwLAo+ICsJCQkJICAgdTggKmluLAo+ICsJCQkJICAgdW5zaWduZWQgaW50IGxl biwgYm9vbCBmb3JjZV84Yml0KQo+ICt7Cj4gKwlpbnQgaTsKPiArCXN0cnVjdCBwbDM1M19uYW5k X2NvbnRyb2xsZXIgKnhuZmMgPQo+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNf bmFuZF9jb250cm9sbGVyLCBjaGlwKTsKPiArCj4gKwlpZiAoZm9yY2VfOGJpdCkKPiArCQlwbDM1 M19uZmNfZm9yY2VfYnl0ZV9hY2Nlc3MoY2hpcCwgdHJ1ZSk7Cj4gKwo+ICsJaWYgKChJU19BTElH TkVEKCh1aW50MzJfdClpbiwgc2l6ZW9mKHVpbnQzMl90KSkgJiYKPiArCSAgICAgSVNfQUxJR05F RChsZW4sIHNpemVvZih1aW50MzJfdCkpKSB8fCAhZm9yY2VfOGJpdCkgewo+ICsJCXUzMiAqcHRy ID0gKHUzMiAqKWluOwo+ICsKPiArCQlsZW4gLz0gNDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspCj4gKwkJCXB0cltpXSA9IHJlYWRsKHhuZmMtPmJ1Zl9hZGRyKTsKPiArCX0gZWxzZSB7 Cj4gKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQo+ICsJCQlpbltpXSA9IHJlYWRiKHhuZmMt PmJ1Zl9hZGRyKTsKPiArCX0KPiArCWlmIChmb3JjZV84Yml0KQo+ICsJCXBsMzUzX25mY19mb3Jj ZV9ieXRlX2FjY2VzcyhjaGlwLCBmYWxzZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBwbDM1M19uYW5kX3dyaXRlX2J1ZiAtIHdyaXRlIGJ1ZmZlciB0byBjaGlwCj4g KyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQo+ICsgKiBAYnVmOglQ b2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc3RvcmUgd3JpdGUgZGF0YQo+ICsgKiBAbGVuOglOdW1i ZXIgb2YgYnl0ZXMgdG8gd3JpdGUKPiArICogQGZvcmNlXzhiaXQ6CUZvcmNlIDgtYml0IGJ1cyBh Y2Nlc3MKPiArICovCj4gK3N0YXRpYyB2b2lkIHBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLAo+ICsJCQkJICAgICBpbnQgbGVuLCBi b29sIGZvcmNlXzhiaXQpCj4gK3sKPiArCWludCBpOwo+ICsJc3RydWN0IHBsMzUzX25hbmRfY29u dHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5k X2NvbnRyb2xsZXIsIGNoaXApOwo+ICsKPiArCWlmIChmb3JjZV84Yml0KQo+ICsJCXBsMzUzX25m Y19mb3JjZV9ieXRlX2FjY2VzcyhjaGlwLCB0cnVlKTsKPiArCj4gKwlpZiAoKElTX0FMSUdORUQo KHVpbnQzMl90KWJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgJiYKPiArCSAgICAgSVNfQUxJR05FRChs ZW4sIHNpemVvZih1aW50MzJfdCkpKSB8fCAhZm9yY2VfOGJpdCkgewo+ICsJCXUzMiAqcHRyID0g KHUzMiAqKWJ1ZjsKPiArCj4gKwkJbGVuIC89IDQ7Cj4gKwkJZm9yIChpID0gMDsgaSA8IGxlbjsg aSsrKQo+ICsJCQl3cml0ZWwocHRyW2ldLCB4bmZjLT5idWZfYWRkcik7Cj4gKwl9IGVsc2Ugewo+ ICsJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPiArCQkJd3JpdGViKGJ1ZltpXSwgeG5mYy0+ YnVmX2FkZHIpOwo+ICsJfQo+ICsJaWYgKGZvcmNlXzhiaXQpCj4gKwkJcGwzNTNfbmZjX2ZvcmNl X2J5dGVfYWNjZXNzKGNoaXAsIGZhbHNlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBwbDM1M193 YWl0X2Zvcl9lY2NfZG9uZSh2b2lkKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBq aWZmaWVzICsgUEwzNTNfTkFORF9FQ0NfQlVTWV9USU1FT1VUOwo+ICsKPiArCWRvIHsKPiArCQlp ZiAocGwzNTNfc21jX2VjY19pc19idXN5KCkpCj4gKwkJCWNwdV9yZWxheCgpOwo+ICsJCWVsc2UK PiArCQkJYnJlYWs7Cj4gKwl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0 KSk7Cj4gKwo+ICsJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsKPiArCQlw cl9lcnIoIiVzIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOwo+ICsJCXJldHVybiAtRVRJTUVET1VU Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogcGwzNTNfbmFu ZF9jYWxjdWxhdGVfaHdlY2MgLSBDYWxjdWxhdGUgSGFyZHdhcmUgRUNDCj4gKyAqIEBtdGQ6CVBv aW50ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQo+ICsgKiBAZGF0YToJUG9pbnRlciB0byB0 aGUgcGFnZSBkYXRhCj4gKyAqIEBlY2M6CVBvaW50ZXIgdG8gdGhlIEVDQyBidWZmZXIgd2hlcmUg RUNDIGRhdGEgbmVlZHMgdG8gYmUgc3RvcmVkCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0 cmlldmVzIHRoZSBIYXJkd2FyZSBFQ0MgZGF0YSBmcm9tIHRoZSBjb250cm9sbGVyIGFuZCByZXR1 cm5zCj4gKyAqIEVDQyBkYXRhIGJhY2sgdG8gdGhlIE1URCBzdWJzeXN0ZW0uCj4gKyAqIEl0IG9w ZXJhdGVzIG9uIGEgbnVtYmVyIG9mIDUxMiBieXRlIGJsb2NrcyBvZiBOQU5EIG1lbW9yeSBhbmQg Y2FuIGJlCj4gKyAqIHByb2dyYW1tZWQgdG8gc3RvcmUgdGhlIEVDQyBjb2RlcyBhZnRlciB0aGUg ZGF0YSBpbiBtZW1vcnkuIEZvciB3cml0ZXMsCj4gKyAqIHRoZSBFQ0MgaXMgd3JpdHRlbiB0byB0 aGUgc3BhcmUgYXJlYSBvZiB0aGUgcGFnZS4gRm9yIHJlYWRzLCB0aGUgcmVzdWx0IG9mCj4gKyAq IGEgYmxvY2sgRUNDIGNoZWNrIGFyZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgZGV2aWNlIGRyaXZl ci4KPiArICoKPiArICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAqIHwgICAgICAgICAgICAgICBuICog NTEyIGJsb2NrcyAgICAgICAgICAgICAgICAgIHwgZXh0cmEgIHwgZWNjICAgIHwgICAgIHwKPiAr ICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBibG9j ayAgfCBjb2RlcyAgfCAgICAgfAo+ICsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICoKPiArICogVGhl IEVDQyBjYWxjdWxhdGlvbiB1c2VzIGEgc2ltcGxlIEhhbW1pbmcgY29kZSwgdXNpbmcgMS1iaXQg Y29ycmVjdGlvbiAyLWJpdAo+ICsgKiBkZXRlY3Rpb24uIEl0IHN0YXJ0cyB3aGVuIGEgdmFsaWQg cmVhZCBvciB3cml0ZSBjb21tYW5kIHdpdGggYSA1MTIgYnl0ZQo+ICsgKiBhbGlnbmVkIGFkZHJl c3MgaXMgZGV0ZWN0ZWQgb24gdGhlIG1lbW9yeSBpbnRlcmZhY2UuCj4gKyAqCj4gKyAqIFJldHVy bjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRp YyBpbnQgcGwzNTNfbmFuZF9jYWxjdWxhdGVfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwK PiArCQkJCSAgICAgIGNvbnN0IHU4ICpkYXRhLCB1OCAqZWNjKQo+ICt7Cj4gKwl1MzIgZWNjX3Zh bHVlOwo+ICsJdTggY2h1bmssIGVjY19ieXRlLCBlY2Nfc3RhdHVzOwo+ICsKPiArCWZvciAoY2h1 bmsgPSAwOyBjaHVuayA8IFBMMzUzX01BWF9FQ0NfQ0hVTktTOyBjaHVuaysrKSB7Cj4gKwkJLyog UmVhZCBFQ0MgdmFsdWUgZm9yIGVhY2ggYmxvY2sgKi8KPiArCQllY2NfdmFsdWUgPSBwbDM1M19z bWNfZ2V0X2VjY192YWwoY2h1bmspOwo+ICsJCWVjY19zdGF0dXMgPSAoZWNjX3ZhbHVlID4+IFBM MzUzX05BTkRfRUNDX1ZBTElEX1NISUZUKTsKPiArCj4gKwkJLyogRUNDIHZhbHVlIHZhbGlkICov Cj4gKwkJaWYgKGVjY19zdGF0dXMgJiBQTDM1M19OQU5EX0VDQ19WQUxJRF9NQVNLKSB7Cj4gKwkJ CWZvciAoZWNjX2J5dGUgPSAwOyBlY2NfYnl0ZSA8IFBMMzUzX01BWF9FQ0NfQllURVM7Cj4gKwkJ CSAgICAgZWNjX2J5dGUrKykgewo+ICsJCQkJLyogQ29weSBFQ0MgYnl0ZXMgdG8gTVREIGJ1ZmZl ciAqLwo+ICsJCQkJKmVjYyA9IH5lY2NfdmFsdWUgJiAweEZGOwo+ICsJCQkJZWNjX3ZhbHVlID0g ZWNjX3ZhbHVlID4+IDg7Cj4gKwkJCQllY2MrKzsKPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJ CXByX3dhcm4oIiVzIHN0YXR1cyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKPiArCQkJcmV0dXJuIC0x Owo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHBs MzUzX25hbmRfY29ycmVjdF9kYXRhIC0gRUNDIGNvcnJlY3Rpb24gZnVuY3Rpb24KPiArICogQG10 ZDoJUG9pbnRlciB0byB0aGUgbXRkX2luZm8gc3RydWN0dXJlCj4gKyAqIEBidWY6CVBvaW50ZXIg dG8gdGhlIHBhZ2UgZGF0YQo+ICsgKiBAcmVhZF9lY2M6CVBvaW50ZXIgdG8gdGhlIEVDQyB2YWx1 ZSByZWFkIGZyb20gc3BhcmUgZGF0YSBhcmVhCj4gKyAqIEBjYWxjX2VjYzoJUG9pbnRlciB0byB0 aGUgY2FsY3VsYXRlZCBFQ0MgdmFsdWUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjb3JyZWN0 cyB0aGUgRUNDIHNpbmdsZSBiaXQgZXJyb3JzICYgZGV0ZWN0cyAyLWJpdCBlcnJvcnMuCj4gKyAq Cj4gKyAqIFJldHVybjoJMCBpZiBubyBFQ0MgZXJyb3JzIGZvdW5kCj4gKyAqCQkxIGlmIHNpbmds ZSBiaXQgZXJyb3IgZm91bmQgYW5kIGNvcnJlY3RlZC4KPiArICoJCS0xIGlmIG11bHRpcGxlIHVu Y29ycmVjdGFibGUgRUNDIGVycm9ycyBmb3VuZC4KPiArICovCj4gK3N0YXRpYyBpbnQgcGwzNTNf bmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdW5zaWduZWQgY2hhciAq YnVmLAo+ICsJCQkJICAgdW5zaWduZWQgY2hhciAqcmVhZF9lY2MsCj4gKwkJCQkgICB1bnNpZ25l ZCBjaGFyICpjYWxjX2VjYykKCklzbid0IGl0IGEgcmVndWxhciBIYW1taW5nIHNvZnR3YXJlIEVD QyBhbGdvcml0aG0/IENhbid0IHlvdSByZS11c2UgdGhlCmltcGxlbWVudGF0aW9uIGFscmVhZHkg ZXhpc3Rpbmc/Cgo+ICt7Cj4gKwl1bnNpZ25lZCBjaGFyIGJpdF9hZGRyOwo+ICsJdW5zaWduZWQg aW50IGJ5dGVfYWRkcjsKPiArCXVuc2lnbmVkIHNob3J0IGVjY19vZGQsIGVjY19ldmVuLCByZWFk X2VjY19sb3dlciwgcmVhZF9lY2NfdXBwZXI7Cj4gKwl1bnNpZ25lZCBzaG9ydCBjYWxjX2VjY19s b3dlciwgY2FsY19lY2NfdXBwZXI7Cj4gKwo+ICsJcmVhZF9lY2NfbG93ZXIgPSAocmVhZF9lY2Nb MF0gfCAocmVhZF9lY2NbMV0gPDwgOCkpICYKPiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7Cj4g KwlyZWFkX2VjY191cHBlciA9ICgocmVhZF9lY2NbMV0gPj4gNCkgfCAocmVhZF9lY2NbMl0gPDwg NCkpICYKPiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7Cj4gKwo+ICsJY2FsY19lY2NfbG93ZXIg PSAoY2FsY19lY2NbMF0gfCAoY2FsY19lY2NbMV0gPDwgOCkpICYKPiArCQkJICBQTDM1M19FQ0Nf QklUX01BU0s7Cj4gKwljYWxjX2VjY191cHBlciA9ICgoY2FsY19lY2NbMV0gPj4gNCkgfCAoY2Fs Y19lY2NbMl0gPDwgNCkpICYKPiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7Cj4gKwo+ICsJZWNj X29kZCA9IHJlYWRfZWNjX2xvd2VyIF4gY2FsY19lY2NfbG93ZXI7Cj4gKwllY2NfZXZlbiA9IHJl YWRfZWNjX3VwcGVyIF4gY2FsY19lY2NfdXBwZXI7Cj4gKwo+ICsJLyogbm8gZXJyb3IgKi8KPiAr CWlmICghZWNjX29kZCAmJiAhZWNjX2V2ZW4pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGVj Y19vZGQgPT0gKH5lY2NfZXZlbiAmIFBMMzUzX0VDQ19CSVRfTUFTSykpIHsKPiArCQkvKiBiaXRz IFsxMTozXSBvZiBlcnJvciBjb2RlIGlzIGJ5dGUgb2Zmc2V0ICovCj4gKwkJYnl0ZV9hZGRyID0g KGVjY19vZGQgPj4gMykgJiBQTDM1M19FQ0NfQklUU19CWVRFT0ZGX01BU0s7Cj4gKwkJLyogYml0 cyBbMjowXSBvZiBlcnJvciBjb2RlIGlzIGJpdCBvZmZzZXQgKi8KPiArCQliaXRfYWRkciA9IGVj Y19vZGQgJiBQTDM1M19FQ0NfQklUU19CSVRPRkZfTUFTSzsKPiArCQkvKiBUb2dnbGluZyBlcnJv ciBiaXQgKi8KPiArCQlidWZbYnl0ZV9hZGRyXSBePSAoQklUKGJpdF9hZGRyKSk7Cj4gKwkJcmV0 dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJLyogb25lIGVycm9yIGluIHBhcml0eSAqLwo+ICsJaWYgKGh3 ZWlnaHQzMihlY2Nfb2RkIHwgZWNjX2V2ZW4pID09IDEpCj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJ LyogVW5jb3JyZWN0YWJsZSBlcnJvciAqLwo+ICsJcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBwbDM1M19wcmVwYXJlX2NtZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ICsJCQkg ICAgICBpbnQgcGFnZSwgaW50IGNvbHVtbiwgaW50IHN0YXJ0X2NtZCwgaW50IGVuZF9jbWQsCj4g KwkJCSAgICAgIGJvb2wgcmVhZCkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2Fk ZHI7Cj4gKwl1MzIgZW5kX2NtZF92YWxpZCA9IDA7Cj4gKwl1bnNpZ25lZCBsb25nIGNtZF9waGFz ZV9hZGRyID0gMCwgY21kX3BoYXNlX2RhdGEgPSAwOwo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQg PSBuYW5kX3RvX210ZChjaGlwKTsKPiArCj4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVy ICp4bmZjID0KPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJv bGxlciwgY2hpcCk7Cj4gKwo+ICsJZW5kX2NtZF92YWxpZCA9IHJlYWQgPyAxIDogMDsKPiArCj4g KwljbWRfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArCj4g KwkJCSAoKHhuZmMtPmFkZHJfY3ljbGVzCj4gKwkJCSA8PCBBRERSX0NZQ0xFU19TSElGVCkgfAo+ ICsJCQkgKGVuZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCkgfAo+ICsJCQkgKENP TU1BTkRfUEhBU0UpIHwKPiArCQkJIChlbmRfY21kIDw8IEVORF9DTURfU0hJRlQpIHwKPiArCQkJ IChzdGFydF9jbWQgPDwgU1RBUlRfQ01EX1NISUZUKSk7Cj4gKwo+ICsJLyogR2V0IHRoZSBkYXRh IHBoYXNlIGFkZHJlc3MgKi8KPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9f Zm9yY2UpeG5mYy0+cmVncyArCj4gKwkJCSAgKCgweDAgPDwgQ0xFQVJfQ1NfU0hJRlQpIHwKPiAr CQkJICAoMCA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKSB8Cj4gKwkJCSAgKERBVEFfUEhBU0UpIHwK PiArCQkJICAoZW5kX2NtZCA8PCBFTkRfQ01EX1NISUZUKSB8Cj4gKwkJCSAgKDB4MCA8PCBFQ0Nf TEFTVF9TSElGVCkpOwo+ICsKPiArCXhuZmMtPmJ1Zl9hZGRyID0gKHZvaWQgX19pb21lbSAqIF9f Zm9yY2UpZGF0YV9waGFzZV9hZGRyOwo+ICsKPiArCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9C VVNXSURUSF8xNikKPiArCQljb2x1bW4gLz0gMjsKPiArCWNtZF9waGFzZV9kYXRhID0gY29sdW1u Owo+ICsJaWYgKG10ZC0+d3JpdGVzaXplID4gUEwzNTNfTkFORF9FQ0NfU0laRSkgewo+ICsJCWNt ZF9waGFzZV9kYXRhIHw9IHBhZ2UgPDwgMTY7Cj4gKwkJLyogQW5vdGhlciBhZGRyZXNzIGN5Y2xl IGZvciBkZXZpY2VzID4gMTI4TWlCICovCj4gKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1JP V19BRERSXzMpIHsKPiArCQkJd3JpdGVsX3JlbGF4ZWQoY21kX3BoYXNlX2RhdGEsCj4gKwkJCQkg ICAgICAgKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpY21kX3BoYXNlX2FkZHIpOwo+ICsJCQljbWRf cGhhc2VfZGF0YSA9IChwYWdlID4+IDE2KTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWNtZF9w aGFzZV9kYXRhIHw9IHBhZ2UgPDwgODsKPiArCX0KPiArCj4gKwl3cml0ZWxfcmVsYXhlZChjbWRf cGhhc2VfZGF0YSwgKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpY21kX3BoYXNlX2FkZHIpOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogcGwzNTNfbmFuZF9yZWFkX29vYiAtIFtSRVBMQUNFQUJMRV0gdGhl IG1vc3QgY29tbW9uIE9PQiBkYXRhIHJlYWQgZnVuY3Rpb24KPiArICogQG10ZDoJUG9pbnRlciB0 byB0aGUgbXRkX2luZm8gc3RydWN0dXJlCj4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBuYW5k X2NoaXAgc3RydWN0dXJlCj4gKyAqIEBwYWdlOglQYWdlIG51bWJlciB0byByZWFkCj4gKyAqCj4g KyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBsMzUz X25hbmRfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPiArCQkJICAgICAgIGludCBw YWdlKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsKPiArCXU4ICpwOwo+ ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFpbmVyX29m KGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOwo+ICsJdW5zaWduZWQg bG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVnczsKPiAr CXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwo+ICsJY2hpcC0+ cGFnZWJ1ZiA9IC0xOwo+ICsJaWYgKG10ZC0+d3JpdGVzaXplIDwgUEwzNTNfTkFORF9FQ0NfU0la RSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlwbDM1M19wcmVwYXJlX2NtZChjaGlwLCBwYWdlLCBt dGQtPndyaXRlc2l6ZSwgTkFORF9DTURfUkVBRDAsCj4gKwkJCSAgTkFORF9DTURfUkVBRFNUQVJU LCAxKTsKPiArCj4gKwluYW5kX3dhaXRfcmVhZHkoY2hpcCk7Cj4gKwo+ICsJcCA9IGNoaXAtPm9v Yl9wb2k7Cj4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLAo+ICsJCQkJKG10ZC0+ b29ic2l6ZSAtCj4gKwkJCQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSwgZmFsc2Up Owo+ICsJcCArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdU SCk7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1 Zl9hZGRyOwo+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Owo+ICsJZGF0YV9waGFz ZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFu ZF9vZmZzZXQ7Cj4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRh dGFfcGhhc2VfYWRkcjsKPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsIFBMMzUz X05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgsCj4gKwkJCQlmYWxzZSk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBwbDM1M19uYW5kX3dyaXRlX29vYiAtIFtSRVBMQUNF QUJMRV0gdGhlIG1vc3QgY29tbW9uIE9PQiBkYXRhIHdyaXRlIGZ1bmN0aW9uCj4gKyAqIEBtdGQ6 CVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQo+ICsgKiBAY2hpcDoJUG9pbnRlciB0 byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlCj4gKyAqIEBwYWdlOglQYWdlIG51bWJlciB0 byB3cml0ZQo+ICsgKgo+ICsgKiBSZXR1cm46CVplcm8gb24gc3VjY2VzcyBhbmQgRUlPIG9uIGZh aWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF93cml0ZV9vb2Ioc3RydWN0IG5h bmRfY2hpcCAqY2hpcCwKPiArCQkJCWludCBwYWdlKQo+ICt7Cj4gKwljb25zdCB1OCAqYnVmID0g Y2hpcC0+b29iX3BvaTsKPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOwo+ICsJc3Ry dWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFpbmVyX29mKGNoaXAs IHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOwo+ICsJdW5zaWduZWQgbG9uZyBu YW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVnczsKPiArCXN0cnVj dCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwl1MzIgYWRkcmN5Y2xlcyA9 IDA7Cj4gKwo+ICsJY2hpcC0+cGFnZWJ1ZiA9IC0xOwo+ICsJYWRkcmN5Y2xlcyA9IHhuZmMtPmFk ZHJfY3ljbGVzOwo+ICsJcGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFnZSwgbXRkLT53cml0ZXNp emUsIE5BTkRfQ01EX1NFUUlOLAo+ICsJCQkgIE5BTkRfQ01EX1BBR0VQUk9HLCAwKTsKPiArCj4g KwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgYnVmLAo+ICsJCQkJIChtdGQtPm9vYnNp emUgLQo+ICsJCQkJIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxzZSk7Cj4g KwlidWYgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgp Owo+ICsKPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+ YnVmX2FkZHI7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7Cj4gKwlkYXRhX3Bo YXNlX2FkZHIgfD0gUEwzNTNfTkFORF9DTEVBUl9DUzsKPiArCWRhdGFfcGhhc2VfYWRkciB8PSAo MSA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKTsKPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29m ZnNldDsKPiArCXhuZmMtPmJ1Zl9hZGRyID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9w aGFzZV9hZGRyOwo+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIGJ1ZiwgUEwzNTNf TkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCwKPiArCQkJCSBmYWxzZSk7Cj4gKwluYW5kX3dhaXRf cmVhZHkoY2hpcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBwbDM1 M19uYW5kX3JlYWRfcGFnZV9yYXcgLSBbSW50ZXJuXSByZWFkIHJhdyBwYWdlIGRhdGEgd2l0aG91 dCBlY2MKPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQo+ICsg KiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQo+ICsgKiBA YnVmOgkJUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIKPiArICogQG9vYl9yZXF1aXJlZDoJQ2Fs bGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQo+ICsgKiBAcGFnZToJ CVBhZ2UgbnVtYmVyIHRvIHJlYWQKPiArICoKPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHpl cm8KPiArICovCj4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZWFkX3BhZ2VfcmF3KHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsCj4gKwkJCQkgICAgdTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwgaW50 IHBhZ2UpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOwo+ICsJdTggKnA7 Cj4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0KPiArCQljb250YWluZXJf b2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7Cj4gKwl1bnNpZ25l ZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5yZWdzOwo+ ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPiArCj4gKwlwbDM1 M19wcmVwYXJlX2NtZChjaGlwLCBwYWdlLCAwLCBOQU5EX0NNRF9SRUFEMCwKPiArCQkJICBOQU5E X0NNRF9SRUFEU1RBUlQsIDEpOwo+ICsJbmFuZF93YWl0X3JlYWR5KGNoaXApOwo+ICsJcGwzNTNf bmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgYnVmLCBtdGQtPndyaXRlc2l6ZSwgZmFsc2UpOwo+ICsJ cCA9IGNoaXAtPm9vYl9wb2k7Cj4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLAo+ ICsJCQkJKG10ZC0+b29ic2l6ZSAtCj4gKwkJCQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVO R1RIKSwgZmFsc2UpOwo+ICsJcCArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFORF9MQVNUX1RS QU5TRkVSX0xFTkdUSCk7Cj4gKwo+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcg X19mb3JjZSl4bmZjLT5idWZfYWRkcjsKPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNl dDsKPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOwo+ICsJZGF0YV9w aGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Owo+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lv bWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7Cj4gKwo+ICsJcGwzNTNfbmFuZF9yZWFkX2Rh dGFfb3AoY2hpcCwgcCwgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCwKPiArCQkJCWZh bHNlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHBsMzUzX25hbmRf d3JpdGVfcGFnZV9yYXcgLSBbSW50ZXJuXSByYXcgcGFnZSB3cml0ZSBmdW5jdGlvbgo+ICsgKiBA bXRkOgkJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0dXJlCj4gKyAqIEBjaGlwOgkJUG9p bnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlCj4gKyAqIEBidWY6CQlQb2ludGVy IHRvIHRoZSBkYXRhIGJ1ZmZlcgo+ICsgKiBAb29iX3JlcXVpcmVkOglDYWxsZXIgcmVxdWlyZXMg T09CIGRhdGEgcmVhZCB0byBjaGlwLT5vb2JfcG9pCj4gKyAqIEBwYWdlOgkJUGFnZSBudW1iZXIg dG8gd3JpdGUKPiArICoKPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8KPiArICovCj4g K3N0YXRpYyBpbnQgcGwzNTNfbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpj aGlwLAo+ICsJCQkJICAgICBjb25zdCB1OCAqYnVmLCBpbnQgb29iX3JlcXVpcmVkLAo+ICsJCQkJ ICAgICBpbnQgcGFnZSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7Cj4g Kwl1OCAqcDsKPiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIgKnhuZmMgPQo+ICsJCWNv bnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlwKTsKPiAr CXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMt PnJlZ3M7Cj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ICsK PiArCXBsMzUzX3ByZXBhcmVfY21kKGNoaXAsIHBhZ2UsIDAsIE5BTkRfQ01EX1NFUUlOLAo+ICsJ CQkgIE5BTkRfQ01EX1BBR0VQUk9HLCAwKTsKPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChj aGlwLCBidWYsIG10ZC0+d3JpdGVzaXplLCBmYWxzZSk7Cj4gKwlwID0gY2hpcC0+b29iX3BvaTsK PiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBwLAo+ICsJCQkJIChtdGQtPm9vYnNp emUgLQo+ICsJCQkJIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxzZSk7Cj4g KwlwICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsK PiArCj4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1 Zl9hZGRyOwo+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Owo+ICsJZGF0YV9waGFz ZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gKDEg PDwgRU5EX0NNRF9WQUxJRF9TSElGVCk7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZz ZXQ7Cj4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhh c2VfYWRkcjsKPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBwLCBQTDM1M19OQU5E X0xBU1RfVFJBTlNGRVJfTEVOR1RILAo+ICsJCQkJIGZhbHNlKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArLyoqCj4gKyAqIG5hbmRfd3JpdGVfcGFnZV9od2VjYyAtIEhhcmR3YXJlIEVD QyBiYXNlZCBwYWdlIHdyaXRlIGZ1bmN0aW9uCj4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBt dGQgaW5mbyBzdHJ1Y3R1cmUKPiArICogQGNoaXA6CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAg aW5mbyBzdHJ1Y3R1cmUKPiArICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyCj4g KyAqIEBvb2JfcmVxdWlyZWQ6CUNhbGxlciByZXF1aXJlcyBPT0IgZGF0YSByZWFkIHRvIGNoaXAt Pm9vYl9wb2kKPiArICogQHBhZ2U6CQlQYWdlIG51bWJlciB0byB3cml0ZQo+ICsgKgo+ICsgKiBU aGlzIGZ1bmN0aW9ucyB3cml0ZXMgZGF0YSBhbmQgaGFyZHdhcmUgZ2VuZXJhdGVkIEVDQyB2YWx1 ZXMgaW4gdG8gdGhlIHBhZ2UuCj4gKyAqCj4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJv Cj4gKyAqLwo+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfd3JpdGVfcGFnZV9od2VjYyhzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLAo+ICsJCQkJICAgICAgIGNvbnN0IHU4ICpidWYsIGludCBvb2JfcmVx dWlyZWQsCj4gKwkJCQkgICAgICAgaW50IHBhZ2UpCj4gK3sKPiArCWludCBlY2NzaXplID0gY2hp cC0+ZWNjLnNpemU7Cj4gKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7Cj4gKwl1OCAq ZWNjX2NhbGMgPSBjaGlwLT5lY2MuY2FsY19idWY7Cj4gKwl1OCAqb29iX3B0cjsKPiArCWNvbnN0 IHU4ICpwID0gYnVmOwo+ICsJdTMyIHJldDsKPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9h ZGRyOwo+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFp bmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOwo+ICsJdW5z aWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVn czsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwo+ICsJ cGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFnZSwgMCwgTkFORF9DTURfU0VRSU4sCj4gKwkJCSAg TkFORF9DTURfUEFHRVBST0csIDApOwo+ICsKPiArCWZvciAoIDsgKGVjY3N0ZXBzIC0gMSk7IGVj Y3N0ZXBzLS0pIHsKPiArCQlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgcCwgZWNjc2l6 ZSwgZmFsc2UpOwo+ICsJCXAgKz0gZWNjc2l6ZTsKPiArCX0KPiArCXBsMzUzX25hbmRfd3JpdGVf ZGF0YV9vcChjaGlwLCBwLAo+ICsJCQkJIChlY2NzaXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5T RkVSX0xFTkdUSCksCj4gKwkJCQkgZmFsc2UpOwo+ICsJcCArPSAoZWNjc2l6ZSAtIFBMMzUzX05B TkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOwo+ICsKPiArCS8qIFNldCBFQ0MgTGFzdCBiaXQgdG8g MSAqLwo+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5i dWZfYWRkcjsKPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsKPiArCWRhdGFfcGhh c2VfYWRkciB8PSBQTDM1M19OQU5EX0VDQ19MQVNUOwo+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5h bmRfb2Zmc2V0Owo+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlk YXRhX3BoYXNlX2FkZHI7Cj4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgcCwgUEwz NTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCwKPiArCQkJCSBmYWxzZSk7Cj4gKwo+ICsJLyog V2FpdCB0aWxsIHRoZSBFQ0Mgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIG9yIHRpbWVvdXQgKi8KPiAr CXJldCA9IHBsMzUzX3dhaXRfZm9yX2VjY19kb25lKCk7Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9l cnIoeG5mYy0+ZGV2LCAiRUNDIFRpbWVvdXRcbiIpOwo+ICsJcCA9IGJ1ZjsKPiArCXJldCA9IGNo aXAtPmVjYy5jYWxjdWxhdGUoY2hpcCwgcCwgJmVjY19jYWxjWzBdKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBXYWl0IGZvciBFQ0MgdG8gYmUgY2FsY3VsYXRlZCBh bmQgcmVhZCB0aGUgZXJyb3IgdmFsdWVzICovCj4gKwlyZXQgPSBtdGRfb29ibGF5b3V0X3NldF9l Y2NieXRlcyhtdGQsIGVjY19jYWxjLCBjaGlwLT5vb2JfcG9pLAo+ICsJCQkJCSAwLCBjaGlwLT5l Y2MudG90YWwpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJLyogQ2xlYXIgRUND IGxhc3QgYml0ICovCj4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNl KXhuZmMtPmJ1Zl9hZGRyOwo+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Owo+ICsJ ZGF0YV9waGFzZV9hZGRyICY9IH5QTDM1M19OQU5EX0VDQ19MQVNUOwo+ICsJZGF0YV9waGFzZV9h ZGRyICs9IG5hbmRfb2Zmc2V0Owo+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICog X19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7Cj4gKwo+ICsJLyogV3JpdGUgdGhlIHNwYXJlIGFyZWEg d2l0aCBFQ0MgYnl0ZXMgKi8KPiArCW9vYl9wdHIgPSBjaGlwLT5vb2JfcG9pOwo+ICsJcGwzNTNf bmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIG9vYl9wdHIsCj4gKwkJCQkgKG10ZC0+b29ic2l6ZSAt Cj4gKwkJCQkgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCksIGZhbHNlKTsKPiArCj4g KwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9hZGRy Owo+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Owo+ICsJZGF0YV9waGFzZV9hZGRy IHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gKDEgPDwgRU5E X0NNRF9WQUxJRF9TSElGVCk7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7Cj4g Kwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRk cjsKPiArCW9vYl9wdHIgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZF Ul9MRU5HVEgpOwo+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIG9vYl9wdHIsIFBM MzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgsCj4gKwkJCQkgZmFsc2UpOwo+ICsJbmFuZF93 YWl0X3JlYWR5KGNoaXApOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICog cGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2MgLSBIYXJkd2FyZSBFQ0MgYmFzZWQgcGFnZSByZWFk IGZ1bmN0aW9uCj4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUK PiArICogQGNoaXA6CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKPiAr ICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKPiArICog QG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29i X3BvaQo+ICsgKiBAcGFnZToJCVBhZ2UgbnVtYmVyIHRvIHJlYWQKPiArICoKPiArICogVGhpcyBm dW5jdGlvbnMgcmVhZHMgZGF0YSBhbmQgY2hlY2tzIHRoZSBkYXRhIGludGVncml0eSBieSBjb21w YXJpbmcKPiArICogaGFyZHdhcmUgZ2VuZXJhdGVkIEVDQyB2YWx1ZXMgYW5kIHJlYWQgRUNDIHZh bHVlcyBmcm9tIHNwYXJlIGFyZWEuCj4gKyAqIFRoZXJlIGlzIGEgbGltaXRhdGlvbiBpbiBTTUMg Y29udHJvbGxlciwgdGhhdCB3ZSBtdXN0IHNldCBFQ0MgTEFTVCBvbgo+ICsgKiBsYXN0IGRhdGEg cGhhc2UgYWNjZXNzLCB0byB0ZWxsIEVDQyBibG9jayBub3QgdG8gZXhwZWN0IGFueSBkYXRhIGZ1 cnRoZXIuCj4gKyAqIEV4OiAgV2hlbiBudW1iZXIgb2YgRUNDIFNURVBTIGFyZSA0LCB0aGVuIHRp bGwgMyB3ZSB3aWxsIHdyaXRlIHRvIGZsYXNoCj4gKyAqIHVzaW5nIFNNQyB3aXRoIEhXIEVDQyBl bmFibGVkLiBBbmQgZm9yIHRoZSBsYXN0IEVDQyBTVEVQLCB3ZSB3aWxsIHN1YnRyYWN0Cj4gKyAq IDRieXRlcyBmcm9tIHBhZ2Ugc2l6ZSwgYW5kIHdpbGwgaW5pdGlhdGUgYSB0cmFuc2Zlci4gQW5k IHRoZSByZW1haW5pbmcgNCBhcwo+ICsgKiBvbmUgbW9yZSB0cmFuc2ZlciB3aXRoIEVDQ19MQVNU IGJpdCBzZXQgaW4gTkFORCBkYXRhIHBoYXNlIHJlZ2lzdGVyIHRvCj4gKyAqIG5vdGlmeSBFQ0Mg YmxvY2sgbm90IHRvIGV4cGVjdCBhbnkgbW9yZSBkYXRhLiBUaGUgbGFzdCBibG9jayBzaG91bGQg YmUgYWxpZ24KPiArICogd2l0aCBlbmQgb2YgNTEyIGJ5dGUgYmxvY2suIEJlY2F1c2Ugb2YgdGhp cyBsaW1pdGF0aW9uLCB3ZSBhcmUgbm90IHVzaW5nCj4gKyAqIGNvcmUgcm91dGluZXMuCj4gKyAq Cj4gKyAqIFJldHVybjoJMCBhbHdheXMgYW5kIHVwZGF0ZXMgRUNDIG9wZXJhdGlvbiBzdGF0dXMg aW4gdG8gTVREIHN0cnVjdHVyZQo+ICsgKi8KPiArc3RhdGljIGludCBwbDM1M19uYW5kX3JlYWRf cGFnZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ICsJCQkJICAgICAgdTggKmJ1Ziwg aW50IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpCj4gK3sKPiArCWludCBpLCBzdGF0LCBlY2NzaXpl ID0gY2hpcC0+ZWNjLnNpemU7Cj4gKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7Cj4g KwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7Cj4gKwl1OCAqcCA9IGJ1ZjsKPiArCXU4 ICplY2NfY2FsYyA9IGNoaXAtPmVjYy5jYWxjX2J1ZjsKPiArCXU4ICplY2MgPSBjaGlwLT5lY2Mu Y29kZV9idWY7Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X2JpdGZsaXBzID0gMDsKPiArCXU4ICpvb2Jf cHRyOwo+ICsJdTMyIHJldDsKPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOwo+ICsJ c3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFpbmVyX29mKGNo aXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOwo+ICsJdW5zaWduZWQgbG9u ZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVnczsKPiArCXN0 cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwo+ICsJcGwzNTNfcHJl cGFyZV9jbWQoY2hpcCwgcGFnZSwgMCwgTkFORF9DTURfUkVBRDAsCj4gKwkJCSAgTkFORF9DTURf UkVBRFNUQVJULCAxKTsKPiArCW5hbmRfd2FpdF9yZWFkeShjaGlwKTsKPiArCj4gKwlmb3IgKCA7 IChlY2NzdGVwcyAtIDEpOyBlY2NzdGVwcy0tKSB7Cj4gKwkJcGwzNTNfbmFuZF9yZWFkX2RhdGFf b3AoY2hpcCwgcCwgZWNjc2l6ZSwgZmFsc2UpOwo+ICsJCXAgKz0gZWNjc2l6ZTsKPiArCX0KPiAr CXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsCj4gKwkJCQkoZWNjc2l6ZSAtIFBMMzUz X05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLAo+ICsJCQkJZmFsc2UpOwo+ICsJcCArPSAoZWNj c2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOwo+ICsKPiArCS8qIFNldCBF Q0MgTGFzdCBiaXQgdG8gMSAqLwo+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcg X19mb3JjZSl4bmZjLT5idWZfYWRkcjsKPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNl dDsKPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0VDQ19MQVNUOwo+ICsJZGF0YV9w aGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Owo+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lv bWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7Cj4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9v cChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RILAo+ICsJCQkJZmFsc2Up Owo+ICsKPiArCS8qIFdhaXQgdGlsbCB0aGUgRUNDIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSBvciB0 aW1lb3V0ICovCj4gKwlyZXQgPSBwbDM1M193YWl0X2Zvcl9lY2NfZG9uZSgpOwo+ICsJaWYgKHJl dCkKPiArCQlkZXZfZXJyKHhuZmMtPmRldiwgIkVDQyBUaW1lb3V0XG4iKTsKPiArCj4gKwkvKiBS ZWFkIHRoZSBjYWxjdWxhdGVkIEVDQyB2YWx1ZSAqLwo+ICsJcCA9IGJ1ZjsKPiArCXJldCA9IGNo aXAtPmVjYy5jYWxjdWxhdGUoY2hpcCwgcCwgJmVjY19jYWxjWzBdKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBDbGVhciBFQ0MgbGFzdCBiaXQgKi8KPiArCWRhdGFf cGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVmX2FkZHI7Cj4gKwlk YXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgJj0gflBM MzUzX05BTkRfRUNDX0xBU1Q7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7Cj4g Kwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRk cjsKPiArCj4gKwkvKiBSZWFkIHRoZSBzdG9yZWQgRUNDIHZhbHVlICovCj4gKwlvb2JfcHRyID0g Y2hpcC0+b29iX3BvaTsKPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIG9vYl9wdHIs Cj4gKwkJCQkobXRkLT5vb2JzaXplIC0KPiArCQkJCVBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9M RU5HVEgpLCBmYWxzZSk7Cj4gKwo+ICsJLyogZGUtYXNzZXJ0IGNoaXAgc2VsZWN0ICovCj4gKwlk YXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9hZGRyOwo+ ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Owo+ICsJZGF0YV9waGFzZV9hZGRyIHw9 IFBMMzUzX05BTkRfQ0xFQVJfQ1M7Cj4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7 Cj4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2Vf YWRkcjsKPiArCj4gKwlvb2JfcHRyICs9IChtdGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1Rf VFJBTlNGRVJfTEVOR1RIKTsKPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIG9vYl9w dHIsIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgsCj4gKwkJCQlmYWxzZSk7Cj4gKwo+ ICsJcmV0ID0gbXRkX29vYmxheW91dF9nZXRfZWNjYnl0ZXMobXRkLCBlY2MsIGNoaXAtPm9vYl9w b2ksIDAsCj4gKwkJCQkJIGNoaXAtPmVjYy50b3RhbCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICsJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7Cj4gKwlwID0gYnVmOwo+ ICsKPiArCS8qIENoZWNrIEVDQyBlcnJvciBmb3IgYWxsIGJsb2NrcyBhbmQgY29ycmVjdCBpZiBp dCBpcyBjb3JyZWN0YWJsZSAqLwo+ICsJZm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0t LCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKPiArCQlzdGF0ID0gY2hpcC0+ZWNjLmNv cnJlY3QoY2hpcCwgcCwgJmVjY1tpXSwgJmVjY19jYWxjW2ldKTsKPiArCQlpZiAoc3RhdCA8IDAp IHsKPiArCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7Cj4gKwkJfSBlbHNlIHsKPiArCQkJbXRk LT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7Cj4gKwkJCW1heF9iaXRmbGlwcyA9IG1heF90 KHVuc2lnbmVkIGludCwgbWF4X2JpdGZsaXBzLCBzdGF0KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIG1heF9iaXRmbGlwczsKPiArfQo+ICsKPiArLyogTkFORCBmcmFtZXdvcmsgLT5leGVj X29wKCkgaG9va3MgYW5kIHJlbGF0ZWQgaGVscGVycyAqLwo+ICtzdGF0aWMgdm9pZCBwbDM1M19u ZmNfcGFyc2VfaW5zdHJ1Y3Rpb25zKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4gKwkJCQkJIGNv bnN0IHN0cnVjdCBuYW5kX3N1Ym9wICpzdWJvcCwKPiArCQkJCQkgc3RydWN0IHBsMzUzX25mY19v cCAqbmZjX29wKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAqaW5zdHIgPSBO VUxMOwo+ICsJdW5zaWduZWQgaW50IG9wX2lkLCBvZmZzZXQsIG5hZGRyczsKPiArCWludCBpOwo+ ICsJY29uc3QgdTggKmFkZHJzOwo+ICsKPiArCW1lbXNldChuZmNfb3AsIDAsIHNpemVvZihzdHJ1 Y3QgcGwzNTNfbmZjX29wKSk7Cj4gKwlmb3IgKG9wX2lkID0gMDsgb3BfaWQgPCBzdWJvcC0+bmlu c3Ryczsgb3BfaWQrKykgewo+ICsJCWluc3RyID0gJnN1Ym9wLT5pbnN0cnNbb3BfaWRdOwo+ICsK PiArCQlzd2l0Y2ggKGluc3RyLT50eXBlKSB7Cj4gKwkJY2FzZSBOQU5EX09QX0NNRF9JTlNUUjoK PiArCQkJaWYgKG9wX2lkKQo+ICsJCQkJbmZjX29wLT5jbW5kc1sxXSA9IGluc3RyLT5jdHguY21k Lm9wY29kZTsKPiArCQkJZWxzZQo+ICsJCQkJbmZjX29wLT5jbW5kc1swXSA9IGluc3RyLT5jdHgu Y21kLm9wY29kZTsKPiArCQkJbmZjX29wLT5jbGVfYWxlX2RlbGF5X25zID0gaW5zdHItPmRlbGF5 X25zOwo+ICsJCQlicmVhazsKPiArCj4gKwkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6Cj4gKwkJ CW9mZnNldCA9IG5hbmRfc3Vib3BfZ2V0X2FkZHJfc3RhcnRfb2ZmKHN1Ym9wLCBvcF9pZCk7Cj4g KwkJCW5hZGRycyA9IG5hbmRfc3Vib3BfZ2V0X251bV9hZGRyX2N5YyhzdWJvcCwgb3BfaWQpOwo+ ICsJCQlhZGRycyA9ICZpbnN0ci0+Y3R4LmFkZHIuYWRkcnNbb2Zmc2V0XTsKPiArCQkJbmZjX29w LT5hZGRycyA9IGluc3RyLT5jdHguYWRkci5hZGRyc1tvZmZzZXRdOwo+ICsJCQlmb3IgKGkgPSAw OyBpIDwgbWluX3QodW5zaWduZWQgaW50LCA0LCBuYWRkcnMpOyBpKyspIHsKPiArCQkJCW5mY19v cC0+YWRkcnMgfD0gaW5zdHItPmN0eC5hZGRyLmFkZHJzW2ldIDw8Cj4gKwkJCQkJCSAoOCAqIGkp Owo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAobmFkZHJzID49IDUpCj4gKwkJCQluZmNfb3AtPmFkZHI1 ID0gYWRkcnNbNF07Cj4gKwkJCWlmIChuYWRkcnMgPj0gNikKPiArCQkJCW5mY19vcC0+YWRkcjYg PSBhZGRyc1s1XTsKPiArCQkJbmZjX29wLT5uYWRkcnMgPSBuYW5kX3N1Ym9wX2dldF9udW1fYWRk cl9jeWMoc3Vib3AsCj4gKwkJCQkJCQkJICAgICBvcF9pZCk7Cj4gKwkJCW5mY19vcC0+Y2xlX2Fs ZV9kZWxheV9ucyA9IGluc3RyLT5kZWxheV9uczsKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWNhc2Ug TkFORF9PUF9EQVRBX0lOX0lOU1RSOgo+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHIgPSBpbnN0cjsK PiArCQkJbmZjX29wLT5kYXRhX2luc3RyX2lkeCA9IG9wX2lkOwo+ICsJCQlicmVhazsKPiArCj4g KwkJY2FzZSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSOgo+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHIg PSBpbnN0cjsKPiArCQkJbmZjX29wLT5kYXRhX2luc3RyX2lkeCA9IG9wX2lkOwo+ICsJCQlicmVh azsKPiArCj4gKwkJY2FzZSBOQU5EX09QX1dBSVRSRFlfSU5TVFI6Cj4gKwkJCW5mY19vcC0+cmR5 X3RpbWVvdXRfbXMgPSBpbnN0ci0+Y3R4LndhaXRyZHkudGltZW91dF9tczsKPiArCQkJbmZjX29w LT5yZHlfZGVsYXlfbnMgPSBpbnN0ci0+ZGVsYXlfbnM7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr CX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29uZF9kZWxheSh1bnNpZ25lZCBpbnQgbnMpCj4g K3sKPiArCWlmICghbnMpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChucyA8IDEwMDAwKQo+ICsJ CW5kZWxheShucyk7Cj4gKwllbHNlCj4gKwkJdWRlbGF5KERJVl9ST1VORF9VUChucywgMTAwMCkp Owo+ICt9Cj4gKwo+ICsvKioKPiArICogcGwzNTNfbmFuZF9leGVjX29wX2NtZCAtIFNlbmQgY29t bWFuZCB0byBOQU5EIGRldmljZQo+ICsgKiBAY2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBjaGlw IGluZm8gc3RydWN0dXJlCj4gKyAqIEBzdWJvcDoJUG9pbnRlciB0byBhcnJheSBvZiBpbnN0cnVj dGlvbnMKPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8KPiArICovCj4gK3N0YXRpYyBp bnQgcGwzNTNfbmFuZF9leGVjX29wX2NtZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ICsJCQkJ ICBjb25zdCBzdHJ1Y3QgbmFuZF9zdWJvcCAqc3Vib3ApCj4gK3sKPiArCXN0cnVjdCBtdGRfaW5m byAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0 ciAqaW5zdHI7Cj4gKwlzdHJ1Y3QgcGwzNTNfbmZjX29wIG5mY19vcCA9IHt9Owo+ICsJc3RydWN0 IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9Cj4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0 cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOwo+ICsJdW5zaWduZWQgbG9uZyBjbWRf cGhhc2VfZGF0YSA9IDAsIGVuZF9jbWRfdmFsaWQgPSAwOwo+ICsJdW5zaWduZWQgbG9uZyBjbWRf cGhhc2VfYWRkciwgZGF0YV9waGFzZV9hZGRyLCBlbmRfY21kOwo+ICsJdW5zaWduZWQgaW50IG9w X2lkLCBsZW4sIG9mZnNldDsKPiArCWJvb2wgcmVhZGluZzsKPiArCj4gKwlwbDM1M19uZmNfcGFy c2VfaW5zdHJ1Y3Rpb25zKGNoaXAsIHN1Ym9wLCAmbmZjX29wKTsKPiArCWluc3RyID0gbmZjX29w LmRhdGFfaW5zdHI7Cj4gKwlvcF9pZCA9IG5mY19vcC5kYXRhX2luc3RyX2lkeDsKPiArCj4gKwlv ZmZzZXQgPSBuYW5kX3N1Ym9wX2dldF9kYXRhX3N0YXJ0X29mZihzdWJvcCwgb3BfaWQpOwo+ICsK PiArCXBsMzUzX3NtY19jbHJfbmFuZF9pbnQoKTsKPiArCS8qIEdldCB0aGUgY29tbWFuZCBwaGFz ZSBhZGRyZXNzICovCj4gKwlpZiAobmZjX29wLmNtbmRzWzFdICE9IDApIHsKPiArCQlpZiAobmZj X29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1NFUUlOKQo+ICsJCQllbmRfY21kX3ZhbGlkID0gMDsK PiArCQllbHNlCj4gKwkJCWVuZF9jbWRfdmFsaWQgPSAxOwo+ICsJCWVuZF9jbWQgPSBuZmNfb3Au Y21uZHNbMV07Cj4gKwl9ICBlbHNlIHsKPiArCQllbmRfY21kID0gMHgwOwo+ICsJfQo+ICsKPiAr CS8qCj4gKwkgKiBUaGUgU01DIGRlZmluZXMgdHdvIHBoYXNlcyBvZiBjb21tYW5kcyB3aGVuIHRy YW5zZmVycmluZyBkYXRhIHRvIG9yCj4gKwkgKiBmcm9tIE5BTkQgZmxhc2guCj4gKwkgKiBDb21t YW5kIHBoYXNlOiBDb21tYW5kcyBhbmQgb3B0aW9uYWwgYWRkcmVzcyBpbmZvcm1hdGlvbiBhcmUg d3JpdHRlbgo+ICsJICogdG8gdGhlIE5BTkQgZmxhc2guVGhlIGNvbW1hbmQgYW5kIGFkZHJlc3Mg Y2FuIGJlIGFzc29jaWF0ZWQgd2l0aAo+ICsJICogZWl0aGVyIGEgZGF0YSBwaGFzZSBvcGVyYXRp b24gdG8gd3JpdGUgdG8gb3IgcmVhZCBmcm9tIHRoZSBhcnJheSwKPiArCSAqIG9yIGEgc3RhdHVz L0lEIHJlZ2lzdGVyIHRyYW5zZmVyLgo+ICsJICogRGF0YSBwaGFzZTogRGF0YSBpcyBlaXRoZXIg d3JpdHRlbiB0byBvciByZWFkIGZyb20gdGhlIE5BTkQgZmxhc2guCj4gKwkgKiBUaGlzIGRhdGEg Y2FuIGJlIGVpdGhlciBkYXRhIHRyYW5zZmVycmVkIHRvIG9yIGZyb20gdGhlIGFycmF5LAo+ICsJ ICogb3Igc3RhdHVzL0lEIHJlZ2lzdGVyIGluZm9ybWF0aW9uLgo+ICsJICovCj4gKwljbWRfcGhh c2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArCj4gKwkJCSAoKG5m Y19vcC5uYWRkcnMgPDwgQUREUl9DWUNMRVNfU0hJRlQpIHwKPiArCQkJIChlbmRfY21kX3ZhbGlk IDw8IEVORF9DTURfVkFMSURfU0hJRlQpIHwKPiArCQkJIChDT01NQU5EX1BIQVNFKSB8Cj4gKwkJ CSAoZW5kX2NtZCA8PCBFTkRfQ01EX1NISUZUKSB8Cj4gKwkJCSAobmZjX29wLmNtbmRzWzBdIDw8 IFNUQVJUX0NNRF9TSElGVCkpOwo+ICsKPiArCS8qIEdldCB0aGUgZGF0YSBwaGFzZSBhZGRyZXNz ICovCj4gKwllbmRfY21kX3ZhbGlkID0gMDsKPiArCj4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5z aWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPnJlZ3MgKwo+ICsJCQkgICgoMHgwIDw8IENMRUFSX0NT X1NISUZUKSB8Cj4gKwkJCSAgKGVuZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCkg fAo+ICsJCQkgIChEQVRBX1BIQVNFKSB8Cj4gKwkJCSAgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElG VCkgfAo+ICsJCQkgICgweDAgPDwgRUNDX0xBU1RfU0hJRlQpKTsKPiArCXhuZmMtPmJ1Zl9hZGRy ID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOwo+ICsKPiArCS8qIENv bW1hbmQgcGhhc2UgQVhJIFJlYWQgJiBXcml0ZSAqLwo+ICsJaWYgKG5mY19vcC5uYWRkcnMgPj0g NSkgewo+ICsJCWlmIChtdGQtPndyaXRlc2l6ZSA+IFBMMzUzX05BTkRfRUNDX1NJWkUpIHsKPiAr CQkJY21kX3BoYXNlX2RhdGEgPSBuZmNfb3AuYWRkcnM7Cj4gKwkJCS8qIEFub3RoZXIgYWRkcmVz cyBjeWNsZSBmb3IgZGV2aWNlcyA+IDEyOE1pQiAqLwo+ICsJCQlpZiAoY2hpcC0+b3B0aW9ucyAm IE5BTkRfUk9XX0FERFJfMykgewo+ICsJCQkJd3JpdGVsX3JlbGF4ZWQoY21kX3BoYXNlX2RhdGEs Cj4gKwkJCQkJICAgICAgICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKQo+ICsJCQkJCSAgICAgICBj bWRfcGhhc2VfYWRkcik7Cj4gKwkJCQljbWRfcGhhc2VfZGF0YSA9IG5mY19vcC5hZGRyNTsKPiAr CQkJCWlmIChuZmNfb3AubmFkZHJzID49IDYpCj4gKwkJCQkJY21kX3BoYXNlX2RhdGEgfD0gKG5m Y19vcC5hZGRyNiA8PCA4KTsKPiArCQkJfQo+ICsJCX0KPiArCX0gIGVsc2Ugewo+ICsJCWlmIChu ZmNfb3AuYWRkcnMgIT0gLTEpIHsKPiArCQkJaW50IGNvbHVtbiA9IG5mY19vcC5hZGRyczsKPiAr CQkJLyoKPiArCQkJICogQ2hhbmdlIHJlYWQvd3JpdGUgY29sdW1uLCByZWFkIGlkIGV0Ywo+ICsJ CQkgKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1cyB3aWR0aAo+ICsJCQkgKi8KPiArCQkJ aWYgKChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgJiYKPiArCQkJICAgIChuZmNf b3AuY21uZHNbMF0gPT0gTkFORF9DTURfUkVBRDAgfHwKPiArCQkJCW5mY19vcC5jbW5kc1swXSA9 PSBOQU5EX0NNRF9TRVFJTiB8fAo+ICsJCQkJbmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1JO RE9VVCB8fAo+ICsJCQkJbmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1JORElOKSkgewo+ICsJ CQkJY29sdW1uID4+PSAxOwo+ICsJCQl9Cj4gKwkJCWNtZF9waGFzZV9kYXRhID0gY29sdW1uOwo+ ICsJCX0KPiArCX0KPiArCXdyaXRlbF9yZWxheGVkKGNtZF9waGFzZV9kYXRhLCAodm9pZCBfX2lv bWVtICogX19mb3JjZSljbWRfcGhhc2VfYWRkcik7Cj4gKwo+ICsJaWYgKCFuZmNfb3AuZGF0YV9p bnN0cikgewo+ICsJCWlmIChuZmNfb3AucmR5X3RpbWVvdXRfbXMpCj4gKwkJCW5hbmRfd2FpdF9y ZWFkeShjaGlwKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlyZWFkaW5nID0gKG5mY19v cC5kYXRhX2luc3RyLT50eXBlID09IE5BTkRfT1BfREFUQV9JTl9JTlNUUik7Cj4gKwlpZiAoIXJl YWRpbmcpIHsKPiArCQlsZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihzdWJvcCwgb3BfaWQp Owo+ICsJCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBpbnN0ci0+Y3R4LmRhdGEuYnVm Lm91dCwKPiArCQkJCQkgbGVuLCBpbnN0ci0+Y3R4LmRhdGEuZm9yY2VfOGJpdCk7Cj4gKwkJaWYg KG5mY19vcC5yZHlfdGltZW91dF9tcykKPiArCQkJbmFuZF93YWl0X3JlYWR5KGNoaXApOwo+ICsJ CWNvbmRfZGVsYXkobmZjX29wLnJkeV9kZWxheV9ucyk7Cj4gKwl9CgplbHNlID8KCj4gKwlpZiAo cmVhZGluZykgewo+ICsJCWxlbiA9IG5hbmRfc3Vib3BfZ2V0X2RhdGFfbGVuKHN1Ym9wLCBvcF9p ZCk7Cj4gKwkJY29uZF9kZWxheShuZmNfb3AucmR5X2RlbGF5X25zKTsKPiArCQlpZiAobmZjX29w LnJkeV90aW1lb3V0X21zKQo+ICsJCQluYW5kX3dhaXRfcmVhZHkoY2hpcCk7Cj4gKwkJcGwzNTNf bmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgaW5zdHItPmN0eC5kYXRhLmJ1Zi5pbiwgbGVuLAo+ICsJ CQkJCWluc3RyLT5jdHguZGF0YS5mb3JjZV84Yml0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBuYW5kX29wX3BhcnNlciBwbDM1M19uZmNf b3BfcGFyc2VyID0gTkFORF9PUF9QQVJTRVIKPiArCShOQU5EX09QX1BBUlNFUl9QQVRURVJOCj4g KwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQsCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9F TEVNKHRydWUpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1ZSwgNyksCj4g KwkJTkFORF9PUF9QQVJTRVJfUEFUX1dBSVRSRFlfRUxFTSh0cnVlKSwKPiArCQlOQU5EX09QX1BB UlNFUl9QQVRfREFUQV9JTl9FTEVNKGZhbHNlLCAyMDQ4KSksCj4gKwlOQU5EX09QX1BBUlNFUl9Q QVRURVJOCj4gKwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQsCj4gKwkJTkFORF9PUF9QQVJTRVJf UEFUX0NNRF9FTEVNKGZhbHNlKSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKGZh bHNlLCA3KSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLAo+ICsJCU5B TkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0oZmFsc2UpLAo+ICsJCU5BTkRfT1BfUEFSU0VS X1BBVF9EQVRBX0lOX0VMRU0oZmFsc2UsIDIwNDgpKSwKPiArCU5BTkRfT1BfUEFSU0VSX1BBVFRF Uk4KPiArCQkocGwzNTNfbmFuZF9leGVjX29wX2NtZCwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf Q01EX0VMRU0oZmFsc2UpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1ZSwg NyksCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKHRydWUpLAo+ICsJCU5BTkRfT1Bf UEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0oZmFsc2UpKSwKPiArCU5BTkRfT1BfUEFSU0VSX1BBVFRF Uk4KPiArCQkocGwzNTNfbmFuZF9leGVjX29wX2NtZCwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf Q01EX0VMRU0oZmFsc2UpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0oZmFsc2Us IDgpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9EQVRBX09VVF9FTEVNKGZhbHNlLCAyMDQ4KSwK PiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0odHJ1ZSksCj4gKwkJTkFORF9PUF9QQVJT RVJfUEFUX1dBSVRSRFlfRUxFTSh0cnVlKSksCj4gKwlOQU5EX09QX1BBUlNFUl9QQVRURVJOCj4g KwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQsCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9F TEVNKGZhbHNlKSksCj4gKwkpOwo+ICsKPiArc3RhdGljIGludCBwbDM1M19uZmNfZXhlY19vcChz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBuYW5kX29wZXJh dGlvbiAqb3AsCj4gKwkJCSAgICAgYm9vbCBjaGVja19vbmx5KQo+ICt7Cj4gKwlyZXR1cm4gbmFu ZF9vcF9wYXJzZXJfZXhlY19vcChjaGlwLCAmcGwzNTNfbmZjX29wX3BhcnNlciwKPiArCQkJCQkg ICAgICBvcCwgY2hlY2tfb25seSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBwbDM1M19uYW5kX2Rl dmljZV9yZWFkeSAtIENoZWNrIGRldmljZSByZWFkeS9idXN5IGxpbmUKPiArICogQG10ZDoJUG9p bnRlciB0byB0aGUgbXRkX2luZm8gc3RydWN0dXJlCj4gKyAqCj4gKyAqIFJldHVybjoJMCBvbiBi dXN5IG9yIDEgb24gcmVhZHkgc3RhdGUKPiArICovCj4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9k ZXZpY2VfcmVhZHkoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiArewo+ICsJaWYgKHBsMzUzX3Nt Y19nZXRfbmFuZF9pbnRfc3RhdHVzX3JhdygpKSB7Cj4gKwkJcGwzNTNfc21jX2Nscl9uYW5kX2lu dCgpOwo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICogcGwzNTNfbmFuZF9lY2NfaW5pdCAtIEluaXRpYWxpemUgdGhlIGVjYyBpbmZvcm1h dGlvbiBhcyBwZXIgdGhlIGVjYyBtb2RlCj4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZF9p bmZvIHN0cnVjdHVyZQo+ICsgKiBAZWNjOglQb2ludGVyIHRvIEVDQyBjb250cm9sIHN0cnVjdHVy ZQo+ICsgKiBAZWNjX21vZGU6CW9uZGllIGVjYyBzdGF0dXMKPiArICoKPiArICogVGhpcyBmdW5j dGlvbiBpbml0aWFsaXplcyB0aGUgZWNjIGJsb2NrIGFuZCBmdW5jdGlvbmFsIHBvaW50ZXJzIGFz IHBlciB0aGUKPiArICogZWNjIG1vZGUKPiArICoKPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3Mg b3IgbmVnYXRpdmUgZXJybm8uCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfZWNjX2lu aXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MsCj4gKwkJ CSAgICAgICBpbnQgZWNjX21vZGUpCj4gK3sKPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBt dGRfdG9fbmFuZChtdGQpOwo+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9 Cj4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNo aXApOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJZWNjLT53cml0ZV9wYWdlX3JhdyA9IHBsMzUz X25hbmRfd3JpdGVfcGFnZV9yYXc7Cj4gKwllY2MtPnJlYWRfcGFnZV9yYXcgPSBwbDM1M19uYW5k X3JlYWRfcGFnZV9yYXc7Cj4gKwllY2MtPnJlYWRfb29iID0gcGwzNTNfbmFuZF9yZWFkX29vYjsK PiArCWVjYy0+d3JpdGVfb29iID0gcGwzNTNfbmFuZF93cml0ZV9vb2I7Cj4gKwo+ICsJaWYgKGVj Y19tb2RlID09IE5BTkRfRUNDX09OX0RJRSkgewo+ICsJCXBsMzUzX3NtY19zZXRfZWNjX21vZGUo UEwzNTNfU01DX0VDQ01PREVfQllQQVNTKTsKPiArCQkvKgo+ICsJCSAqIE9uLURpZSBFQ0Mgc3Bh cmUgYnl0ZXMgb2Zmc2V0IDggaXMgdXNlZCBmb3IgRUNDIGNvZGVzCj4gKwkJICogVXNlIHRoZSBC QlQgcGF0dGVybiBkZXNjcmlwdG9ycwo+ICsJCSAqLwo+ICsJCWNoaXAtPmJidF90ZCA9ICZiYnRf bWFpbl9kZXNjcjsKPiArCQljaGlwLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsKPiArCX0g ZWxzZSB7Cj4gKwkJZWNjLT5tb2RlID0gTkFORF9FQ0NfSFc7Cj4gKwkJLyogSGFyZHdhcmUgRUND IGdlbmVyYXRlcyAzIGJ5dGVzIEVDQyBjb2RlIGZvciBlYWNoIDUxMiBieXRlcyAqLwo+ICsJCWVj Yy0+Ynl0ZXMgPSAzOwo+ICsJCWVjYy0+c3RyZW5ndGggPSAxOwo+ICsJCWVjYy0+Y2FsY3VsYXRl ID0gcGwzNTNfbmFuZF9jYWxjdWxhdGVfaHdlY2M7Cj4gKwkJZWNjLT5jb3JyZWN0ID0gcGwzNTNf bmFuZF9jb3JyZWN0X2RhdGE7Cj4gKwkJZWNjLT5yZWFkX3BhZ2UgPSBwbDM1M19uYW5kX3JlYWRf cGFnZV9od2VjYzsKPiArCQllY2MtPnNpemUgPSBQTDM1M19OQU5EX0VDQ19TSVpFOwo+ICsJCWVj Yy0+cmVhZF9wYWdlID0gcGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2M7Cj4gKwkJZWNjLT53cml0 ZV9wYWdlID0gcGwzNTNfbmFuZF93cml0ZV9wYWdlX2h3ZWNjOwo+ICsJCXBsMzUzX3NtY19zZXRf ZWNjX3BnX3NpemUobXRkLT53cml0ZXNpemUpOwo+ICsJCXN3aXRjaCAobXRkLT53cml0ZXNpemUp IHsKPiArCQljYXNlIFNaXzUxMjoKPiArCQljYXNlIFNaXzFLOgo+ICsJCWNhc2UgU1pfMks6Cj4g KwkJCXBsMzUzX3NtY19zZXRfZWNjX21vZGUoUEwzNTNfU01DX0VDQ01PREVfQVBCKTsKPiArCQkJ YnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJZWNjLT5jYWxjdWxhdGUgPSBuYW5kX2NhbGN1bGF0 ZV9lY2M7Cj4gKwkJCWVjYy0+Y29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOwo+ICsJCQllY2Mt PnNpemUgPSAyNTY7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYgKG10ZC0+b29ic2l6 ZSA9PSAxNikgewo+ICsJCQltdGRfc2V0X29vYmxheW91dChtdGQsICZwbDM1M19lY2Nfb29ibGF5 b3V0MTZfb3BzKTsKPiArCQl9IGVsc2UgaWYgKG10ZC0+b29ic2l6ZSA9PSA2NCkgewo+ICsJCQlt dGRfc2V0X29vYmxheW91dChtdGQsICZwbDM1M19lY2Nfb29ibGF5b3V0NjRfb3BzKTsKPiArCQl9 IGVsc2Ugewo+ICsJCQllcnIgPSAtRU5YSU87Cj4gKwkJCWRldl9lcnIoeG5mYy0+ZGV2LCAiVW5z dXBwb3J0ZWQgb29iIExheW91dFxuIik7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBlcnI7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGwzNTNfbmZjX3NldHVwX2RhdGFfaW50ZXJmYWNlKHN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBjc2xpbmUsCj4gKwkJCQkJICBjb25zdCBzdHJ1Y3Qg bmFuZF9kYXRhX2ludGVyZmFjZQo+ICsJCQkJCSAgKmNvbmYpCj4gK3sKPiArCXN0cnVjdCBwbDM1 M19uYW5kX2NvbnRyb2xsZXIgKnhuZmMgPQo+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qg cGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlwKTsKPiArCWNvbnN0IHN0cnVjdCBuYW5kX3Nkcl90 aW1pbmdzICpzZHI7Cj4gKwl1MzIgdGltaW5nc1s3XSwgbWNrcGVyaW9kcHM7Cj4gKwo+ICsJaWYg KGNzbGluZSA9PSBOQU5EX0RBVEFfSUZBQ0VfQ0hFQ0tfT05MWSkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlzZHIgPSBuYW5kX2dldF9zZHJfdGltaW5ncyhjb25mKTsKPiArCWlmIChJU19FUlIoc2Ry KSkKPiArCQlyZXR1cm4gUFRSX0VSUihzZHIpOwo+ICsKPiArCS8qCj4gKwkgKiBTRFIgdGltaW5n cyBhcmUgZ2l2ZW4gaW4gcGljby1zZWNvbmRzIHdoaWxlIE5GQyB0aW1pbmdzIG11c3QgYmUKPiAr CSAqIGV4cHJlc3NlZCBpbiBOQU5EIGNvbnRyb2xsZXIgY2xvY2sgY3ljbGVzLgo+ICsJICovCj4g KwltY2twZXJpb2RwcyA9IE5TRUNfUEVSX1NFQyAvIGNsa19nZXRfcmF0ZSh4bmZjLT5tY2xrKTsK PiArCW1ja3BlcmlvZHBzICo9IDEwMDA7Cj4gKwlpZiAoc2RyLT50UkNfbWluIDw9IDIwMDAwKQo+ ICsJCS8qCj4gKwkJICogUEwzNTMgU01DIG5lZWRzIG9uZSBleHRyYSByZWFkIGN5Y2xlIGluIFNE UiBNb2RlIDUKPiArCQkgKiBUaGlzIGlzIG5vdCB3cml0dGVuIGFueXdoZXJlIGluIHRoZSBkYXRh c2hlZXQgYnV0Cj4gKwkJICogdGhlIHJlc3VsdHMgb2JzZXJ2ZWQgZHVyaW5nIHRlc3RpbmcuCj4g KwkJICovCj4gKwkJdGltaW5nc1swXSA9IERJVl9ST1VORF9VUChzZHItPnRSQ19taW4sIG1ja3Bl cmlvZHBzKSArIDE7Cj4gKwllbHNlCj4gKwkJdGltaW5nc1swXSA9IERJVl9ST1VORF9VUChzZHIt PnRSQ19taW4sIG1ja3BlcmlvZHBzKTsKPiArCj4gKwl0aW1pbmdzWzFdID0gRElWX1JPVU5EX1VQ KHNkci0+dFdDX21pbiwgbWNrcGVyaW9kcHMpOwo+ICsJLyoKPiArCSAqIEZvciBhbGwgU0RSIG1v ZGVzLCBQTDM1MyBTTUMgbmVlZHMgdFJFQSBtYXggdmFsdWUgYXMgMSwKPiArCSAqIFJlc3VsdHMg b2JzZXJ2ZWQgZHVyaW5nIHRlc3RpbmcuCj4gKwkgKi8KPiArCXRpbWluZ3NbMl0gPSBQTDM1M19U UkVBX01BWF9WQUxVRTsKPiArCXRpbWluZ3NbM10gPSBESVZfUk9VTkRfVVAoc2RyLT50V1BfbWlu LCBtY2twZXJpb2Rwcyk7Cj4gKwl0aW1pbmdzWzRdID0gRElWX1JPVU5EX1VQKHNkci0+dENMUl9t aW4sIG1ja3BlcmlvZHBzKTsKPiArCXRpbWluZ3NbNV0gPSBESVZfUk9VTkRfVVAoc2RyLT50QVJf bWluLCBtY2twZXJpb2Rwcyk7Cj4gKwl0aW1pbmdzWzZdID0gRElWX1JPVU5EX1VQKHNkci0+dFJS X21pbiwgbWNrcGVyaW9kcHMpOwo+ICsJcGwzNTNfc21jX3NldF9jeWNsZXModGltaW5ncyk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9hdHRhY2hf Y2hpcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10 ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAq eG5mYyA9Cj4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xs ZXIsIGNoaXApOwo+ICsJdTMyIHJldDsKPiArCj4gKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRf QlVTV0lEVEhfMTYpCj4gKwkJcGwzNTNfc21jX3NldF9idXN3aWR0aChQTDM1M19TTUNfTUVNX1dJ RFRIXzE2KTsKPiArCj4gKwlpZiAobXRkLT53cml0ZXNpemUgPD0gU1pfNTEyKQo+ICsJCXhuZmMt PmFkZHJfY3ljbGVzID0gMTsKPiArCWVsc2UKPiArCQl4bmZjLT5hZGRyX2N5Y2xlcyA9IDI7Cj4g Kwo+ICsJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1JPV19BRERSXzMpCj4gKwkJeG5mYy0+YWRk cl9jeWNsZXMgKz0gMzsKPiArCWVsc2UKPiArCQl4bmZjLT5hZGRyX2N5Y2xlcyArPSAyOwo+ICsK PiArCXJldCA9IHBsMzUzX25hbmRfZWNjX2luaXQobXRkLCAmY2hpcC0+ZWNjLCBjaGlwLT5lY2Mu bW9kZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vycih4bmZjLT5kZXYsICJFQ0MgaW5pdCBm YWlsZWRcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFtdGQtPm5hbWUp IHsKPiArCQkvKgo+ICsJCSAqIElmIHRoZSBuZXcgYmluZGluZ3MgYXJlIHVzZWQgYW5kIHRoZSBi b290bG9hZGVyIGhhcyBub3QgYmVlbgo+ICsJCSAqIHVwZGF0ZWQgdG8gcGFzcyBhIG5ldyBtdGRw YXJ0cyBwYXJhbWV0ZXIgb24gdGhlIGNtZGxpbmUsIHlvdQo+ICsJCSAqIHNob3VsZCBkZWZpbmUg dGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB5b3VyIE5BTkQgbm9kZSwgaWU6Cj4gKwkJICoKPiAr CQkgKglsYWJlbCA9ICJwbDM1My1uYW5kIjsKPiArCQkgKgo+ICsJCSAqIFRoaXMgd2F5LCBtdGQt Pm5hbWUgd2lsbCBiZSBzZXQgYnkgdGhlIGNvcmUgd2hlbgo+ICsJCSAqIG5hbmRfc2V0X2ZsYXNo X25vZGUoKSBpcyBjYWxsZWQuCj4gKwkJICovCj4gKwkJbXRkLT5uYW1lID0gZGV2bV9rYXNwcmlu dGYoeG5mYy0+ZGV2LCBHRlBfS0VSTkVMLAo+ICsJCQkJCSAgICIlcyIsIFBMMzUzX05BTkRfRFJJ VkVSX05BTUUpOwo+ICsJCWlmICghbXRkLT5uYW1lKSB7Cj4gKwkJCWRldl9lcnIoeG5mYy0+ZGV2 LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG10ZC0+bmFtZVxuIik7Cj4gKwkJCXJldHVybiAtRU5PTUVN Owo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBuYW5kX2NvbnRyb2xsZXJfb3BzIHBsMzUzX25hbmRfY29udHJvbGxlcl9vcHMgPSB7 Cj4gKwkuYXR0YWNoX2NoaXAgPSBwbDM1M19uYW5kX2F0dGFjaF9jaGlwLAo+ICsJLmV4ZWNfb3Ag PSBwbDM1M19uZmNfZXhlY19vcCwKPiArCS5zZXR1cF9kYXRhX2ludGVyZmFjZSA9IHBsMzUzX25m Y19zZXR1cF9kYXRhX2ludGVyZmFjZSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBwbDM1M19uYW5k X3Byb2JlIC0gUHJvYmUgbWV0aG9kIGZvciB0aGUgTkFORCBkcml2ZXIKPiArICogQHBkZXY6CVBv aW50ZXIgdG8gdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUKPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBpbml0aWFsaXplcyB0aGUgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIGhh cmR3YXJlLgo+ICsgKiBUaGUgTkFORCBkcml2ZXIgaGFzIGRlcGVuZGVuY3kgd2l0aCB0aGUgcGwz NTNfc21jIG1lbW9yeSBjb250cm9sbGVyCj4gKyAqIGRyaXZlciBmb3IgaW5pdGlhbGl6aW5nIHRo ZSBOQU5EIHRpbWluZyBwYXJhbWV0ZXJzLCBidXMgd2lkdGgsIEVDQyBtb2RlcywKPiArICogY29u dHJvbCBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLgo+ICsgKgo+ICsgKiBSZXR1cm46CTAgb24gc3Vj Y2VzcyBvciBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBsMzUz X25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0 IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYzsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwo+ ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcDsKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ICsJ c3RydWN0IGRldmljZV9ub2RlICpucCwgKmRuOwo+ICsJdTMyIHJldCwgdmFsOwo+ICsKPiArCXhu ZmMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp4bmZjKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXhuZmMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl4bmZjLT5kZXYgPSAmcGRl di0+ZGV2Owo+ICsKPiArCW5hbmRfY29udHJvbGxlcl9pbml0KCZ4bmZjLT5jb250cm9sbGVyKTsK PiArCXhuZmMtPmNvbnRyb2xsZXIub3BzID0gJnBsMzUzX25hbmRfY29udHJvbGxlcl9vcHM7Cj4g KwkvKiBNYXAgcGh5c2ljYWwgYWRkcmVzcyBvZiBOQU5EIGZsYXNoICovCj4gKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJeG5mYy0+cmVn cyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSh4bmZjLT5kZXYsIHJlcyk7Cj4gKwlpZiAoSVNfRVJS KHhuZmMtPnJlZ3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKHhuZmMtPnJlZ3MpOwo+ICsKPiArCWNo aXAgPSAmeG5mYy0+Y2hpcDsKPiArCWNoaXAtPmNvbnRyb2xsZXIgPSAmeG5mYy0+Y29udHJvbGxl cjsKPiArCW10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ICsJbmFuZF9zZXRfY29udHJvbGxlcl9k YXRhKGNoaXAsIHhuZmMpOwo+ICsJbXRkLT5wcml2ID0gY2hpcDsKPiArCW10ZC0+b3duZXIgPSBU SElTX01PRFVMRTsKPiArCW5hbmRfc2V0X2ZsYXNoX25vZGUoY2hpcCwgeG5mYy0+ZGV2LT5vZl9u b2RlKTsKPiArCj4gKwkvKiBTZXQgdGhlIGRyaXZlciBlbnRyeSBwb2ludHMgZm9yIE1URCAqLwo+ ICsJY2hpcC0+bGVnYWN5LmRldl9yZWFkeSA9IHBsMzUzX25hbmRfZGV2aWNlX3JlYWR5OwoKUGxl YXNlIGRvIG5vdCBpbXBsZW1lbnQgbGVnYWN5IGludGVyZmFjZXMuCgo+ICsJLyogSWYgd2UgZG9u J3Qgc2V0IHRoaXMgZGVsYXkgZHJpdmVyIHNldHMgMjB1cyBieSBkZWZhdWx0ICovCj4gKwlucCA9 IG9mX2dldF9uZXh0X3BhcmVudCh4bmZjLT5kZXYtPm9mX25vZGUpOwo+ICsJeG5mYy0+bWNsayA9 IG9mX2Nsa19nZXQobnAsIDApOwo+ICsJaWYgKElTX0VSUih4bmZjLT5tY2xrKSkgewo+ICsJCWRl dl9lcnIoeG5mYy0+ZGV2LCAiRmFpbGVkIHRvIHJldHJpZXZlIE1DSyBjbGtcbiIpOwo+ICsJCXJl dHVybiBQVFJfRVJSKHhuZmMtPm1jbGspOwo+ICsJfQo+ICsKPiArCWRuID0gbmFuZF9nZXRfZmxh c2hfbm9kZShjaGlwKTsKPiArCj4gKwkvKiBTZXQgdGhlIGRldmljZSBvcHRpb24gYW5kIGZsYXNo IHdpZHRoICovCj4gKwljaGlwLT5vcHRpb25zID0gTkFORF9CVVNXSURUSF9BVVRPOwo+ICsJY2hp cC0+YmJ0X29wdGlvbnMgPSBOQU5EX0JCVF9VU0VfRkxBU0g7Cj4gKwlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCB4bmZjKTsKPiArCXJldCA9IG5hbmRfc2NhbihjaGlwLCAxKTsKPiArCWlmIChy ZXQpIHsKPiArCQlkZXZfZXJyKHhuZmMtPmRldiwgImNvdWxkIG5vdCBzY2FuIHRoZSBuYW5kIGNo aXBcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbXRkX2RldmljZV9y ZWdpc3RlcihtdGQsIE5VTEwsIDApOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoeG5mYy0+ ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG10ZCBkZXZpY2U6ICVkXG4iLCByZXQpOwo+ICsJCW5h bmRfY2xlYW51cChjaGlwKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKioKPiArICogcGwzNTNfbmFuZF9yZW1vdmUgLSBSZW1vdmUgbWV0aG9k IGZvciB0aGUgTkFORCBkcml2ZXIKPiArICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRmb3Jt X2RldmljZSBzdHJ1Y3R1cmUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYg dGhlIGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuIEl0IGZyZWVzIGFsbAo+ICsgKiBy ZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSBkZXZpY2UuCj4gKyAqCj4gKyAqIFJldHVybjoJMCBv biBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQg cGwzNTNfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJ c3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOwo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZCgmeG5mYy0+Y2hp cCk7Cj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsKPiArCj4g KwkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KPiArCW5hbmRfcmVs ZWFzZShjaGlwKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyogTWF0Y2ggdGFibGUg Zm9yIGRldmljZSB0cmVlIGJpbmRpbmcgKi8KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgcGwzNTNfbmFuZF9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJhcm0s cGwzNTMtbmFuZC1yMnAxIiB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIHBsMzUzX25hbmRfb2ZfbWF0Y2gpOwo+ICsKPiArLyoKPiArICogcGwzNTNfbmFuZF9kcml2 ZXIgLSBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBOQU5EIHN1YnN5c3RlbSBwbGF0Zm9ybSBk cml2ZXIKPiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsMzUzX25hbmRf ZHJpdmVyID0gewo+ICsJLnByb2JlCQk9IHBsMzUzX25hbmRfcHJvYmUsCj4gKwkucmVtb3ZlCQk9 IHBsMzUzX25hbmRfcmVtb3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSBQTDM1M19O QU5EX0RSSVZFUl9OQU1FLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHBsMzUzX25hbmRfb2ZfbWF0 Y2gsCj4gKwl9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihwbDM1M19uYW5k X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKPiArTU9EVUxF X0FMSUFTKCJwbGF0Zm9ybToiIFBMMzUzX05BTkRfRFJJVkVSX05BTUUpOwo+ICtNT0RVTEVfREVT Q1JJUFRJT04oIkFSTSBQTDM1MyBOQU5EIEZsYXNoIERyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5T RSgiR1BMIik7CgoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBs aXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRk Lwo=