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=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D1B6C0044D for ; Mon, 16 Mar 2020 10:00:00 +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 C65D02051A for ; Mon, 16 Mar 2020 09:59:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pBFFtzfB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C65D02051A 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-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: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=khM2PVqWeGRVmW8xUGTHwthTMDz3Yz2yX+Kdrl8JO7g=; b=pBFFtzfBUoEbPN UxM7mrhAqghjIQujgFuszPEFdbU5ZhnlGcPxawcB+05653uRsXBrORlZpYMUhf1p85ROEWPngY3BC vcG9FDvqyAsiyeqb3qBteA+a3Vk9pYd/N88Vt9UwSvLJFjsegSIaWzPB3kfMO5+AfZRTNYxe4RiIX 4yBtJhNIABKcl7sDlvD49qBYRdsCDDrfqOCqONdWzD8CqTsa3brwfp+o3K3RU+eeEYfEd3wgAOV1C Z8Z3I0/B7UcTWsx29R4yCyrDKTLViKZ3V+5D506rO++Tclt1NzacimeSxpLjvgJ7WR/KgH6N+dxiL 6Dka4kOTG6PDpYtoI0Mw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jDmXG-0000mv-4x; Mon, 16 Mar 2020 09:59:50 +0000 Received: from regular1.263xmail.com ([211.150.70.206]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jDmX9-0000lB-Hb; Mon, 16 Mar 2020 09:59:48 +0000 Received: from localhost (unknown [192.168.167.16]) by regular1.263xmail.com (Postfix) with ESMTP id 5BDB62DE; Mon, 16 Mar 2020 17:59:28 +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 P19362T139856218920704S1584352767954990_; Mon, 16 Mar 2020 17:59:28 +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: Mon, 16 Mar 2020 17:59:26 +0800 Organization: =?UTF-8?B?55Ge6Iqv5b6u55S15a2Q?= From: =?UTF-8?B?6LW15Luq5bOw?= To: "Miquel Raynal" Subject: Re: Re: [PATCH v3 1/3] mtd: rawnand: rockchip: NFC drivers for RK3308, RK3188 and others References: <20200303094736.7490-1-yifeng.zhao@rock-chips.com>, <20200303094736.7490-2-yifeng.zhao@rock-chips.com>, <20200309121645.1fca069d@xps13> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <2020031617554207432140@rock-chips.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200316_025944_348527_4825BFB2 X-CRM114-Status: GOOD ( 20.63 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree , vigneshr , richard , linux-rockchip , robh+dt , linux-mtd , =?UTF-8?B?SGVpa29TdMO8Ym5lcg==?= 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 SGkgbWlxdWVs77yMCgoxLgo+QSBjb21tZW50IGhlcmUgZXhwbGFpbmluZyB3aGF0IHRoZSBuZXh0 IGZ1bmN0aW9uIGRvZXMgYW5kIHdoeSB3b3VsZCBiZQo+bmljZS4KPgo+PiArc3RhdGljIHZvaWQg cmtfbmZjX2Zvcm1hdF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1OCAqYnVmKQo+ PiArewo+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+PiAr CXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPj4g Kwl1MzIgaTsKPj4gKyAKClRoZSBkYXRhIGxheW91dCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBORkMg YW5kIG5hbmQgwqBkcml2ZXIKVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHdpdGggcmVmZXJlbmNlIHRv IG10a19uYW5kLmMKVGhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZGF0YSBsYXlvdXQgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZToKwqAqIE5GQyBQYWdlIERhdGEgTGF5b3V0OgrCoCoJ MTAyNCBCeXRlcyBEYXRhICsgNEJ5dGVzIHN5cyBkYXRhICsgMjhCeXRlc34xMjRCeXRlcyBlY2Mg KwrCoCoJMTAyNCBCeXRlcyBEYXRhICsgNEJ5dGVzIHN5cyBkYXRhICsgMjhCeXRlc34xMjRCeXRl cyBlY2MgKwrCoCoJLi4uLi4uCsKgKiBOQU5EIFBhZ2UgRGF0YSBMYXlvdXQ6CsKgKgkxMDI0ICog biBEYXRhICsgbSBCeXRlcyBvb2IKwqAqIE9yaWdpbmFsIEJhZCBCbG9jayBNYXNrIExvY2F0aW9u OgrCoCoJZmlyc3QgYnl0ZSBvZiBvb2Ioc3BhcmUpCsKgKiBuYW5kX2NoaXAtPm9vYl9wb2kgZGF0 YSBsYXlvdXQ6CsKgKgk0Qnl0ZXMgc3lzIGRhdGEgKyAuLi4uICsgNEJ5dGVzIHN5cyBkYXRhICsg ZWNjIGRhdGEKCjIuwqAKPj4gKwlkbWFfcmVnID0gRE1BX1NUIHwgKCghcncpIDw8IERNQV9XUikg wqB8IERNQV9FTiB8ICgyIDw8IERNQV9BSEJfU0laRSkgfAo+PiArCcKgIMKgIMKgKDcgPDwgRE1B X0JVUlNUX1NJWkUpIHwgKDE2IDw8IERNQV9JTkNfTlVNKTsKPj4gKwo+PiArCWZsX3JlZyA9IChy dyA8PCBGTENUTF9XUikgfCBGTENUTF9YRkVSX0VOIHwgRkxDVExfQUNPUlJFQ1QgfAo+PiArCShu X0tCIDw8IEZMQ1RMX1hGRVJfU0VDVE9SKSB8IEZMQ1RMX1RPR19GSVg7Cj4+ICsKPj4gKwlpZiAo bmZjLT5uZmNfdmVyc2lvbiA9PSA2KSB7Cj4KPkkgd291bGQgcHJlZmVyIHVzaW5nIHN3aXRjaCBz dGF0ZW1lbnRzIGFueSB0aW1lIHlvdSBjaGVjayB0aGUgdmVyc2lvbi4KPlRoZSB2ZXJzaW9uIHNo b3VsZCBiZSBhbiBlbnVtLgo+Cj5Zb3UgY2FuIGFsc28gZGVmaW5lIGEgcGxhdGZvcm0gZGF0YSBz dHJ1Y3R1cmUgZm9yIHRoZSByZWdpc3RlciBvZmZzZXRzCj50aGF0IGhhdmUgdGhlIHNhbWUgbmFt ZSwgYnV0IG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvZmZzZXQuIFRoZW4geW91Cj5jYW4gcmVm ZXJlbmNlIHRoZSByaWdodCB2YWx1ZSBkaXJlY3RseS4KPmVnLgo+Cj4Jc3RydWN0IHJrX25mY19w bGF0X2RhdGEgewo+CXUzMiBuZmNfYmNoY3RsX29mZjsKPgkuLi4KPgl9Owo+Cj4Jc3RydWN0IHJr X25mY19wbGF0X2RhdGEgcmtfbmZjX3Y2X3BsYXRfZGF0YSA9IHsKPgluZmNfYmNoY3RsX29mZiA9 IC4uLjsKPgkuLi4KPgl9Owo+Cj4JYmNoX3JlZyA9IHJlYWRsKHBkYXRhLT5uZmNfYmNoY3RsX29m Zik7CgpJIHdpbGwgbW9kaWZ5IHRoZSBjb2RlIHdpdGggc3dpdGNoIGFuZCBlbnVtLCBidXQgaXQg aXMgZGlmZmljdWx0IHRvIHVzZSBwbGF0Zm9ybSBkYXRhIHN0cnVjdHVyZSzCoApiZWNhdXNlIHRo ZSBiaXQgb2Zmc2V0IGluc2lkZSB0aGUgcmVnaXN0ZXIgaXMgYWxzbyBkaWZmZXJlbnQuCiNkZWZp bmUJTkZDX0JDSF9TVF9WNgkoMHgyMCkKI2RlZmluZQlORkNfQkNIX1NUX1Y5CSgweDE1MCkKI2Rl ZmluZQlCQ0hfU1RfRVJSMF9WNglCSVQoMikKI2RlZmluZQlCQ0hfU1RfRVJSMV9WNglCSVQoMTUp CiNkZWZpbmUJQkNIX1NUX0VSUjBfVjkJQklUKDIpCiNkZWZpbmUJQkNIX1NUX0VSUjFfVjkJQklU KDE4KQojZGVmaW5lCUVDQ19FUlJfQ05UMF9WNih4KSAoKCgoKHgpICYgKDB4MUYgPDwgMykpID4+ IDMpIFwKfCAoKCh4KSAmICgxIDw8IDI3KSkgPj4gMjIpKSAmIDB4M0YpCiNkZWZpbmUJRUNDX0VS Ul9DTlQxX1Y2KHgpICgoKCgoeCkgJiAoMHgxRiA8PCAxNikpID4+IDE2KSBcCnwgKCgoeCkgJiAo MSA8PCAyOSkpID4+IDI0KSkgJiAweDNGKQojZGVmaW5lCUVDQ19FUlJfQ05UMF9WOSh4KSAoKCh4 KSAmICgweDdGIDw8IDMpKSA+PiAzKQojZGVmaW5lCUVDQ19FUlJfQ05UMV9WOSh4KSAoKCh4KSAm ICgweDdGIDw8IDE5KSkgPj4gMTkpCgozLgo+PiArc3RhdGljIGludCBya19uZmNfd3JpdGVfcGFn ZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1ZiwKPj4gKwnCoGludCBv b2Jfb24sIGludCBwYWdlKQo+PiArewo+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90 b19tdGQoY2hpcCk7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxl cl9kYXRhKGNoaXApOwo+PiArCj4+ICsJcmtfbmZjX2Zvcm1hdF9wYWdlKG10ZCwgYnVmKTsKPj4g KwlyZXR1cm4gcmtfbmZjX3dyaXRlX3BhZ2UobXRkLCBjaGlwLCBuZmMtPmJ1ZmZlciwgcGFnZSwg MSk7Cj4KPkkgdGhpbmsgeW91IHNob3VsZCBhdm9pZCBjYWxsaW5nIC0+d3JpdGVfcGFnZS4gWW91 IHdpbGwgYXZvaWQgYW4KPmluZGVudGF0aW9uIGxldmVsIGluIHRoaXMgZnVuY3Rpb24gYW5kIGNs YXJpZnkgd2hhdCB3cml0ZV9wYWdlX3JhdyBkby4KPlNhbWUgZm9yIHJlYWQsIGFuZCB0aGUgX29v YiBhbHRlcm5hdGl2ZS4gQWxzbywgSSdtIHN1cmUgd3JpdGVfYnVmIGRvZXMKPm5vdCBuZWVkIHRv IGJlIGV4cG9ydGVkIGFuZCB5b3UgY2FuIGp1c3QgbW92ZSB0aGUgYWN0dWFsIGNvZGUgaW4gdGhp cwo+ZnVuY3Rpb24uCgpUaGUgY29kZcKgwqBpcyBkZXNpZ25lZCB3aXRoIHJlZmVyZW5jZSB0byBt dGtfbmFuZC5jLgpUaGUgZnVuY3Rpb24gcmtfbmZjX2Zvcm1hdF9wYWdlIHdpbGwgY29weSBkYXRh IGZyb20gZXh0ZXJuIGJ1ZmZlciB0byBuZmMtPmJ1ZmZlci4KSSB3aWxsIG1vdmUgdGhlIGNvZGUg aW4gdGhlIGZ1bmN0aW9uIHJrX25mY19mb3JtYXRfcGFnZSB0byBya19uZmNfd3JpdGVfcGFnZV9y YXcuCgo0Lgo+PiArc3RhdGljIGludCBya19uZmNfd3JpdGVfcGFnZV9od2VjYyhzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLAo+PiArCcKgIMKgaW50IG9vYl9vbiwgaW50IHBh Z2UpCj4+ICt7Cj4+ICsJcmV0dXJuIHJrX25mY193cml0ZV9wYWdlKG5hbmRfdG9fbXRkKGNoaXAp LCBjaGlwLCBidWYsIHBhZ2UsIDApOwo+PiArfQo+Cj5XaGF0IGlzIHRoZSBwdXJwb3NlIG9mIHRo aXMgaW5kaXJlY3Rpb24/Cj4KClRoZSBmdW5jdGlvbiDCoHJrX25mY193cml0ZV9wYWdlIGFsc28g Y2FsbCBiecKgcmtfbmZjX3dyaXRlX3BhZ2VfcmF3LMKgYSBwYXJhbWV0ZXIocmF3KQppcyByZXF1 aXJlZCB0byBjb25maXJtIHdoZXRoZXIgRUNDIGlzIHVzZWQgb3Igbm90LgoKLS0tLS0tLS0tLS0t LS0KVGhhbmtzLApZaWZlbmcKCj5IaSBZaWZlbmcsCj4KPllpZmVuZyBaaGFvIDx5aWZlbmcuemhh b0Byb2NrLWNoaXBzLmNvbT4gd3JvdGUgb24gVHVlLMKgIDMgTWFyIDIwMjAKPjE3OjQ3OjM0ICsw ODAwOgo+Cj4+IFRoaXMgZHJpdmVyIHN1cHBvcnRzIFJvY2tjaGlwIE5GQyAoTkFORCBGbGFzaCBD b250cm9sbGVyKSBmb3VuZCBvbiBSSzMzMDgsCj4+IFJLMzM2OCwgUktQWDMwLCBSVjExMDggYW5k IG90aGVyIFNPQ3MuIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHVzaW5nCj4+IDgtYml0IE5B TkQgaW50ZXJmYWNlIG9uIHRoZSBBUk0gYmFzZWQgUkszMzA4IHBsYXRmb3JtLgo+Pgo+PiBTdXBw b3J0IFJvY2tjaGlwIE5GQyB2ZXJzaW9uczoKPj4gLSBWNjogRUNDIDE2LCAyNCwgNDAgYW5kIDYw IGJpdHMgcGVyIDFLQiBkYXRhLiBGb3VuZCBvbiBSSzMwNjYsIFJLMzM2OCwKPj7CoMKgwqDCoMKg wqAgUkszMjI5LCBSSzMxODgsIFJLMzI4OCwgUkszMTI4LCBSS1BYM1NFLCBSS1B4MywgUktQWDUs IFJLMzAzNiBhbmQKPj7CoMKgwqDCoMKgwqAgUkszMTI2Lgo+PiAtIFY4OiBFQ0MgMTYgYml0cyBw ZXIgMUtCIGRhdGEuIEZvdW5kIG9uIFJWMTEwOC83LCBSSzMzMDguCj4+IC0gVjk6IEVDQyAxNiwg NDAsIDYwIGFuZCA3MCBiaXRzIHBlciAxS0IgZGF0YS4gRm91bmQgb24gUkszMzI2LCBSS1BYMzAu Cj4+Cj4+IFN1cHBvcnQgZmVhdHVyZToKPj4gLSBSZWFkIGZ1bGwgcGFnZSBkYXRhIGJ5IERNQS4K Pj4gLSBTdXBwb3J0IEhXIEVDQyhvbmUgc3RlcCBpcyAxS0IpLgo+PiAtIFN1cHBvcnQgMiAtIDMy SyBwYWdlIHNpemUuCj4+IC0gU3VwcG9ydCA0IENTKGRlcGVuZCBvbiBTb2MpCj4+Cj4+IExpbWl0 YXRpb25zOgo+PiAtIFVuc3VwcG9ydCA1MTJCIGVjYyBzdGVwLgo+PiAtIFJhdyBwYWdlIHJlYWQg YW5kIHdyaXRlIHdpdGhvdXQgZWNjIHJlZHVuZGFuY3kgY29kZS4gU28gY291bGQgbm90IHN1cHBv cnQKPj7CoMKgIHJhdyBkYXRhIGR1bXAgYW5kIHJlc3RvcmUuCj4+IC0gVW50ZXN0ZWQgb24gc29t ZSBTT0NzLgo+PiAtIFVuc3VwcG9ydCBzdWJwYWdlLgo+PiAtIFVuc3VwcG9ydCByYW5kb21pemVy Lgo+PiAtIFRoZSBvcmlnaW5hbCBiYWQgYmxvY2sgbWFzayBpcyBub3Qgc3VwcG9ydGVkLiBJdCBp cyByZWNvbW1lbmRlZCB0byB1c2UKPj7CoMKgIHRoZSBCQlQoYmFkIGJsb2NrIHRhYmxlKS4KPj4K Pj4gU2lnbmVkLW9mZi1ieTogWWlmZW5nIFpoYW8gPHlpZmVuZy56aGFvQHJvY2stY2hpcHMuY29t Pgo+PiAtLS0KPj4KPj4gQ2hhbmdlcyBpbiB2MzogTm9uZQo+PiBDaGFuZ2VzIGluIHYyOgo+PiAt IEZpeCBjb21waWxlIGVycm9yLgo+PiAtIEluY2x1ZGUgaGVhZGVyIGZpbGVzIHNvcnRlZCBieSBm aWxlIG5hbWUKPj4KPj7CoCBkcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnwqDCoMKgwqDCoMKg wqDCoCB8wqDCoMKgIDcgKwo+PsKgIGRyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlwqDCoMKg wqDCoMKgwqAgfMKgwqDCoCAxICsKPj7CoCBkcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hpcF9u YW5kLmMgfCAxMjI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrCj4+wqAgMyBmaWxlcyBjaGFu Z2VkLCAxMjM3IGluc2VydGlvbnMoKykKPj7CoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9t dGQvbmFuZC9yYXcvcm9ja2NoaXBfbmFuZC5jCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210 ZC9uYW5kL3Jhdy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZwo+PiBpbmRl eCBhODBhNDZiYjViOGIuLjgzMTNiMTJhOWQ4NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4+ IEBAIC00MzMsNiArNDMzLDEzIEBAIGNvbmZpZyBNVERfTkFORF9NRVNPTgo+PsKgIMKgIEVuYWJs ZXMgc3VwcG9ydCBmb3IgTkFORCBjb250cm9sbGVyIG9uIEFtbG9naWMncyBNZXNvbiBTb0NzLgo+ PsKgIMKgIFRoaXMgY29udHJvbGxlciBpcyBmb3VuZCBvbiBNZXNvbiBTb0NzLgo+PsKgCj4+ICtj b25maWcgTVREX05BTkRfUk9DS0NISVAKPj4gKwl0cmlzdGF0ZSAiUm9ja2NoaXAgTkFORCBjb250 cm9sbGVyIgo+PiArCWRlcGVuZHMgb24gQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QKPj4g KwlkZXBlbmRzIG9uIEhBU19JT01FTQo+PiArCWhlbHAKPj4gKwnCoCBFbmFibGVzIHN1cHBvcnQg Zm9yIE5BTkQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBTb0NzLgo+PiArCj4+wqAgY29uZmlnIE1U RF9OQU5EX0dQSU8KPj7CoCB0cmlzdGF0ZSAiR1BJTyBhc3Npc3RlZCBOQU5EIGNvbnRyb2xsZXIi Cj4+wqAgZGVwZW5kcyBvbiBHUElPTElCIHx8IENPTVBJTEVfVEVTVAo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtl ZmlsZQo+PiBpbmRleCAyZDEzNmIxNThmYjcuLjhiYWZhNTliODk0MCAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9y YXcvTWFrZWZpbGUKPj4gQEAgLTU4LDYgKzU4LDcgQEAgb2JqLSQoQ09ORklHX01URF9OQU5EX1RF R1JBKQkrPSB0ZWdyYV9uYW5kLm8KPj7CoCBvYmotJChDT05GSUdfTVREX05BTkRfU1RNMzJfRk1D MikJKz0gc3RtMzJfZm1jMl9uYW5kLm8KPj7CoCBvYmotJChDT05GSUdfTVREX05BTkRfTUVTT04p CSs9IG1lc29uX25hbmQubwo+PsKgIG9iai0kKENPTkZJR19NVERfTkFORF9DQURFTkNFKQkrPSBj YWRlbmNlLW5hbmQtY29udHJvbGxlci5vCj4+ICtvYmotJChDT05GSUdfTVREX05BTkRfUk9DS0NI SVApCSs9IHJvY2tjaGlwX25hbmQubwo+PsKgCj4+wqAgbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5v IG5hbmRfbGVnYWN5Lm8gbmFuZF9iYnQubyBuYW5kX3RpbWluZ3MubyBuYW5kX2lkcy5vCj4+wqAg bmFuZC1vYmpzICs9IG5hbmRfb25maS5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5k L3Jhdy9yb2NrY2hpcF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hpcF9uYW5k LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZmVkYTYw OWZiZjIKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2Nr Y2hpcF9uYW5kLmMKPj4gQEAgLTAsMCArMSwxMjI5IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCBPUiBNSVQKPj4gKy8qCj4+ICsgKiBSb2NrY2hpcCBOQU5EIEZsYXNo IGNvbnRyb2xsZXIgZHJpdmVyLgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFJvY2tjaGlwIElu Yy4KPj4gKyAqIEF1dGhvcnM6IFlpZmVuZyBaaGFvIDx5aWZlbmcuemhhb0Byb2NrLWNoaXBzLmNv bT4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pgo+PiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L210ZC9y YXduYW5kLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ ICsKPj4gKy8qCj4+ICsgKiBORkMgUGFnZSBEYXRhIExheW91dDoKPj4gKyAqCTEwMjQgQnl0ZXMg RGF0YSArIDRCeXRlcyBzeXMgZGF0YSArIDI4Qnl0ZXN+MTI0Qnl0ZXMgZWNjICsKPj4gKyAqCTEw MjQgQnl0ZXMgRGF0YSArIDRCeXRlcyBzeXMgZGF0YSArIDI4Qnl0ZXN+MTI0Qnl0ZXMgZWNjICsK Pj4gKyAqCS4uLi4uLgo+PiArICogTkFORCBQYWdlIERhdGEgTGF5b3V0Ogo+PiArICoJMTAyNCAq IG4gRGF0YSArIG0gQnl0ZXMgb29iCj4+ICsgKiBPcmlnaW5hbCBCYWQgQmxvY2sgTWFzayBMb2Nh dGlvbjoKPj4gKyAqCWZpcnN0IGJ5dGUgb2Ygb29iKHNwYXJlKQo+PiArICogbmFuZF9jaGlwLT5v b2JfcG9pIGRhdGEgbGF5b3V0Ogo+PiArICoJNEJ5dGVzIHN5cyBkYXRhICsgLi4uLiArIDRCeXRl cyBzeXMgZGF0YSArIGVjYyBkYXRhCj4+ICsgKi8KPj4gKwo+PiArLyogTkFORCBjb250cm9sbGVy IHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KPj4gKyNkZWZpbmUJTkZDX1ZFUlNJT05fOQkweDU2Mzkz MDMwCj4+ICsjZGVmaW5lCU5GQ19SRUFECSgwKQo+PiArI2RlZmluZQlORkNfV1JJVEUJKDEpCj4+ ICsjZGVmaW5lCU5GQ19GTUNUTAkoMHgwMCkKPj4gKyNkZWZpbmUJRk1DVExfQ0VfU0VMX00JMHhG Rgo+PiArI2RlZmluZQlGTUNUTF9DRV9TRUwoeCkJKDEgPDwgKHgpKQo+PiArI2RlZmluZQlGTUNU TF9XUAlCSVQoOCkKPj4gKyNkZWZpbmUJRk1DVExfUkRZCUJJVCg5KQo+PiArI2RlZmluZQlORkNf Rk1XQUlUCSgweDA0KQo+PiArI2RlZmluZQlORkNfRkxDVExfVjYJKDB4MDgpCj4+ICsjZGVmaW5l CU5GQ19GTENUTF9WOQkoMHgxMCkKPj4gKyNkZWZpbmUJRkxDVExfUlNUCUJJVCgwKQo+PiArI2Rl ZmluZQlGTENUTF9XUgkoMSkJLyogMDogcmVhZCwgMTogd3JpdGUgKi8KPj4gKyNkZWZpbmUJRkxD VExfWEZFUl9TVAlCSVQoMikKPj4gKyNkZWZpbmUJRkxDVExfWEZFUl9FTglCSVQoMykKPj4gKyNk ZWZpbmUJRkxDVExfQUNPUlJFQ1QJQklUKDEwKSAvKiBhdXRvIGNvcnJlY3QgZXJyb3IgYml0cyAq Lwo+PiArI2RlZmluZQlGTENUTF9YRkVSX1JFQURZCUJJVCgyMCkKPj4gKyNkZWZpbmUJRkxDVExf WEZFUl9TRUNUT1IJKDIyKQo+PiArI2RlZmluZQlGTENUTF9UT0dfRklYCUJJVCgyOSkKPj4gKyNk ZWZpbmUJTkZDX0JDSENUTF9WNgkoMHgwQykKPj4gKyNkZWZpbmUJQkNIQ1RMX0JBTktfTQkoNyA8 PCA1KQo+PiArI2RlZmluZQlCQ0hDVExfQkFOSwkoNSkKPj4gKyNkZWZpbmUJTkZDX0JDSENUTF9W OQkoMHgyMCkKPj4gKyNkZWZpbmUJTkZDX0RNQV9DRkdfVjYJKDB4MTApCj4+ICsjZGVmaW5lCU5G Q19ETUFfQ0ZHX1Y5CSgweDMwKQo+PiArI2RlZmluZQlETUFfU1QJQklUKDApCj4+ICsjZGVmaW5l CURNQV9XUgkoMSkJLyogMDogd3JpdGUsIDE6IHJlYWQgKi8KPj4gKyNkZWZpbmUJRE1BX0VOCUJJ VCgyKQo+PiArI2RlZmluZQlETUFfQUhCX1NJWkUJKDMpCS8qIDA6IDEsIDE6IDIsIDI6IDQgKi8K Pj4gKyNkZWZpbmUJRE1BX0JVUlNUX1NJWkUJKDYpCS8qIDA6IDEsIDM6IDQsIDU6IDgsIDc6IDE2 ICovCj4+ICsjZGVmaW5lCURNQV9JTkNfTlVNCSg5KQkvKiAxIC0gMTYgKi8KPj4gKyNkZWZpbmUJ TkZDX0RNQV9EQVRBX0JVRl9WNgkoMHgxNCkKPj4gKyNkZWZpbmUJTkZDX0RNQV9EQVRBX0JVRl9W OQkoMHgzNCkKPj4gKyNkZWZpbmUJTkZDX0RNQV9PT0JfQlVGX1Y2CSgweDE4KQo+PiArI2RlZmlu ZQlORkNfRE1BX09PQl9CVUZfVjkJKDB4MzgpCj4+ICsjZGVmaW5lCU5GQ19ETUFfU1RfVjYJKDB4 MUMpCj4+ICsjZGVmaW5lCU5GQ19ETUFfU1RfVjkJKDB4M0MpCj4+ICsjZGVmaW5lCU5GQ19CQ0hf U1RfVjYJKDB4MjApCj4+ICsjZGVmaW5lCU5GQ19CQ0hfU1RfVjkJKDB4MTUwKQo+PiArI2RlZmlu ZQlCQ0hfU1RfRVJSMF9WNglCSVQoMikKPj4gKyNkZWZpbmUJQkNIX1NUX0VSUjFfVjYJQklUKDE1 KQo+PiArI2RlZmluZQlCQ0hfU1RfRVJSMF9WOQlCSVQoMikKPj4gKyNkZWZpbmUJQkNIX1NUX0VS UjFfVjkJQklUKDE4KQo+PiArI2RlZmluZQlFQ0NfRVJSX0NOVDBfVjYoeCkgKCgoKCh4KSAmICgw eDFGIDw8IDMpKSA+PiAzKSBcCj4+ICsJfCAoKCh4KSAmICgxIDw8IDI3KSkgPj4gMjIpKSAmIDB4 M0YpCj4+ICsjZGVmaW5lCUVDQ19FUlJfQ05UMV9WNih4KSAoKCgoKHgpICYgKDB4MUYgPDwgMTYp KSA+PiAxNikgXAo+PiArCXwgKCgoeCkgJiAoMSA8PCAyOSkpID4+IDI0KSkgJiAweDNGKQo+PiAr I2RlZmluZQlFQ0NfRVJSX0NOVDBfVjkoeCkgKCgoeCkgJiAoMHg3RiA8PCAzKSkgPj4gMykKPj4g KyNkZWZpbmUJRUNDX0VSUl9DTlQxX1Y5KHgpICgoKHgpICYgKDB4N0YgPDwgMTkpKSA+PiAxOSkK Pj4gKyNkZWZpbmUJTkZDX1JBTkRNWl9WNgkoMHgxNTApCj4+ICsjZGVmaW5lCU5GQ19SQU5ETVpf VjkJKDB4MjA4KQo+PiArI2RlZmluZQlORkNfVkVSX1Y2CSgweDE2MCkKPj4gKyNkZWZpbmUJTkZD X1ZFUl9WOQkoMHg4MCkKPj4gKyNkZWZpbmUJTkZDX0lOVEVOX1Y2CSgweDE2QykKPj4gKyNkZWZp bmUJTkZDX0lOVEVOX1Y5CSgweDEyMCkKPj4gKyNkZWZpbmUJTkZDX0lOVENMUl9WNgkoMHgxNzAp Cj4+ICsjZGVmaW5lCU5GQ19JTlRDTFJfVjkJKDB4MTI0KQo+PiArI2RlZmluZQlORkNfSU5UU1Rf VjYJKDB4MTc0KQo+PiArI2RlZmluZQlORkNfSU5UU1RfVjkJKDB4MTI4KQo+PiArI2RlZmluZQlJ TlRfRE1BCUJJVCgwKQo+PiArI2RlZmluZQlORkNfT09CMF9WNgkoMHgyMDApCj4+ICsjZGVmaW5l CU5GQ19PT0IwX1Y5CSgweDIwMCkKPj4gKyNkZWZpbmUJTkZDX09PQjFfVjYJKDB4MjMwKQo+PiAr I2RlZmluZQlORkNfT09CMV9WOQkoMHgyMDQpCj4+ICsjZGVmaW5lCU5GQ19CQU5LCSgweDgwMCkK Pj4gKyNkZWZpbmUJQkFOS19EQVRBCSgweDAwKQo+PiArI2RlZmluZQlCQU5LX0FERFIJKDB4MDQp Cj4+ICsjZGVmaW5lCUJBTktfQ01ECSgweDA4KQo+PiArI2RlZmluZQlORkNfU1JBTTAJKDB4MTAw MCkKPj4gKyNkZWZpbmUJTkZDX1NSQU0xCSgweDE0MDApCj4+ICsKPj4gKyNkZWZpbmUJVEhJU19O QU1FCSJyay1uYW5kIgo+PiArCj4+ICsjZGVmaW5lCVJLX1RJTUVPVVQJKDUwMDAwMCkKPj4gKyNk ZWZpbmUJUktfTkFORF9NQVhfTlNFTFMJKDQpIC8qIFNvbWUgU29jIG9ubHkgaGFzIDEgb3IgMiBD U3MgKi8KPj4gKyNkZWZpbmUJTkZDX1NZU19EQVRBX1NJWkUJKDQpIC8qIDQgYnl0ZXMgc3lzIGRh dGEgaW4gb29iIHByZSAxMDI0IGRhdGEgKi8KPj4gKyNkZWZpbmUJUktfREVGQVVMVF9DTE9DS19S QVRFCSgxNTAgKiAxMDAwICogMTAwMCkgLyogMTUwIE1oeiovCj4+ICsjZGVmaW5lCUFDQ1RJTUlO Ryhjc3J3LCByd3B3LCByd2NzKSAoKGNzcncpIDw8IDEyIHwgKHJ3cHcpIDw8IDUgfCAocndjcykp Cj4+ICsKPj4gK3N0cnVjdCBya19uZmNfbmFuZF9jaGlwIHsKPj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IG5vZGU7Cj4+ICsJc3RydWN0IG5hbmRfY2hpcCBuYW5kOwo+PiArCj4+ICsJdTMyIHNwYXJlX3Bl cl9zZWN0b3I7Cj4+ICsJdTMyIG9vYl9idWZfcGVyX3NlY3RvcjsKPj4gKwo+PiArCWludCBuc2Vs czsKPj4gKwl1OCBzZWxzWzBdOwo+PiArCS8qIG5vdGhpbmcgYWZ0ZXIgdGhpcyBmaWVsZCAqLwo+ PiArfTsKPj4gKwo+PiArc3RydWN0IHJrX25mY19jbGsgewo+PiArCWludCBuZmNfcmF0ZTsKPj4g KwlzdHJ1Y3QgY2xrICpuZmNfY2xrOwo+PiArCXN0cnVjdCBjbGsgKmFoYl9jbGs7Cj4+ICt9Owo+ PiArCj4+ICtzdHJ1Y3QgcmtfbmZjIHsKPj4gKwlzdHJ1Y3QgbmFuZF9jb250cm9sbGVyIGNvbnRy b2xsZXI7Cj4+ICsJc3RydWN0IHJrX25mY19jbGsgY2xrOwo+PiArCj4+ICsJc3RydWN0IGRldmlj ZSAqZGV2Owo+PiArCXZvaWQgX19pb21lbSAqcmVnczsKPj4gKwlpbnQJbmZjX3ZlcnNpb247Cj4+ ICsJaW50CW1heF9lY2Nfc3RyZW5ndGg7Cj4+ICsJaW50CXNlbGVjdGVkX2Jhbms7Cj4+ICsJaW50 CWJhbmRfb2Zmc2V0Owo+PiArCj4+ICsJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKPj4gKwlzdHJ1 Y3QgbGlzdF9oZWFkIGNoaXBzOwo+PiArCj4+ICsJdTggKmJ1ZmZlcjsKPj4gKwl1OCAqcGFnZV9i dWY7Cj4+ICsJdTMyICpvb2JfYnVmOwo+PiArCj4+ICsJdW5zaWduZWQgbG9uZyBhc3NpZ25lZF9j czsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJrX25mY19uYW5kX2NoaXAg KnRvX3JrX25hbmQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKPj4gK3sKPj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKG5hbmQsIHN0cnVjdCBya19uZmNfbmFuZF9jaGlwLCBuYW5kKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGlubGluZSB1OCAqZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwg Y29uc3QgdTggKnAsIGludCBpKQo+PiArewo+PiArCXJldHVybiAodTggKilwICsgaSAqIGNoaXAt PmVjYy5zaXplOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHU4ICpvb2JfcHRyKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsIGludCBpKQo+PiArewo+PiArCXU4ICpwb2k7Cj4+ICsKPj4gKwlw b2kgPSBjaGlwLT5vb2JfcG9pICsgaSAqIE5GQ19TWVNfREFUQV9TSVpFOwo+PiArCj4+ICsJcmV0 dXJuIHBvaTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgcmtfZGF0YV9sZW4oc3Ry dWN0IG5hbmRfY2hpcCAqY2hpcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCAq cmtfbmFuZCA9IHRvX3JrX25hbmQoY2hpcCk7Cj4+ICsKPj4gKwlyZXR1cm4gY2hpcC0+ZWNjLnNp emUgKyBya19uYW5kLT5zcGFyZV9wZXJfc2VjdG9yOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5s aW5lIHU4ICpya19kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLMKgIGludCBpKQo+PiAr ewo+PiArCXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlw KTsKPj4gKwo+PiArCXJldHVybiBuZmMtPmJ1ZmZlciArIGkgKiBya19kYXRhX2xlbihjaGlwKTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB1OCAqcmtfb29iX3B0cihzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLCBpbnQgaSkKPj4gK3sKPj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dl dF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsKPj4gKwlyZXR1cm4gbmZjLT5idWZmZXIgKyBp ICogcmtfZGF0YV9sZW4oY2hpcCkgKyBjaGlwLT5lY2Muc2l6ZTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGlubGluZSB2b2lkIG5mY193cml0ZWwoc3RydWN0IHJrX25mYyAqbmZjLCB1MzIgdmFsLCB1 MzIgcmVnKQo+PiArewo+PiArCXdyaXRlbCh2YWwsIG5mYy0+cmVncyArIHJlZyk7Cj4+ICt9Cj4K PkkgZG9uJ3QgdGhpbmsgdGhlc2UgbmZjX3JlYWQvd3JpdGV7bCx3LGJ9IGFyZSB1c2VmdWwuLi4K Pgo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgbmZjX3dyaXRldyhzdHJ1Y3QgcmtfbmZjICpu ZmMsIHUxNiB2YWwsIHUzMiByZWcpCj4+ICt7Cj4+ICsJd3JpdGV3KHZhbCwgbmZjLT5yZWdzICsg cmVnKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIG5mY193cml0ZWIoc3RydWN0 IHJrX25mYyAqbmZjLCB1OCB2YWwsIHUzMiByZWcpCj4+ICt7Cj4+ICsJd3JpdGViKHZhbCwgbmZj LT5yZWdzICsgcmVnKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB1MzIgbmZjX3JlYWRs KHN0cnVjdCBya19uZmMgKm5mYywgdTMyIHJlZykKPj4gK3sKPj4gKwlyZXR1cm4gcmVhZGxfcmVs YXhlZChuZmMtPnJlZ3MgKyByZWcpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHUxNiBu ZmNfcmVhZHcoc3RydWN0IHJrX25mYyAqbmZjLCB1MzIgcmVnKQo+PiArewo+PiArCXJldHVybiBy ZWFkd19yZWxheGVkKG5mYy0+cmVncyArIHJlZyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxp bmUgdTggbmZjX3JlYWRiKHN0cnVjdCBya19uZmMgKm5mYywgdTMyIHJlZykKPj4gK3sKPj4gKwly ZXR1cm4gcmVhZGJfcmVsYXhlZChuZmMtPnJlZ3MgKyByZWcpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBya19uZmNfc2VsZWN0X2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IGNo aXApCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9k YXRhKG5hbmQpOwo+PiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpya19uYW5kID0gdG9fcmtf bmFuZChuYW5kKTsKPj4gKwl1MzIgdmFsOwo+PiArCj4+ICsJaWYgKGNoaXAgPCAwKSB7Cj4+ICsJ bmZjLT5zZWxlY3RlZF9iYW5rID0gLTE7Cj4+ICsJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCW5m Yy0+c2VsZWN0ZWRfYmFuayA9IHJrX25hbmQtPnNlbHNbY2hpcF07Cj4+ICsJbmZjLT5iYW5kX29m ZnNldCA9IE5GQ19CQU5LICsgbmZjLT5zZWxlY3RlZF9iYW5rICogMHgxMDA7Cj4+ICsKPj4gKwl2 YWwgPSBuZmNfcmVhZGwobmZjLCBORkNfRk1DVEwpOwo+PiArCXZhbCAmPSB+Rk1DVExfQ0VfU0VM X007Cj4+ICsJdmFsIHw9IEZNQ1RMX0NFX1NFTChuZmMtPnNlbGVjdGVkX2JhbmspOwo+PiArCj4+ ICsJbmZjX3dyaXRlbChuZmMsIHZhbCwgTkZDX0ZNQ1RMKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGludCBya19uZmNfZGV2X3JlYWR5KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCj4+ICt7Cj4+ICsJ c3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKG5hbmQpOwo+PiAr Cj4+ICsJaWYgKG5mY19yZWFkbChuZmMsIE5GQ19GTUNUTCkgJiBGTUNUTF9SRFkpCj4+ICsJcmV0 dXJuIDE7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgcmtf bmZjX2NtZF9jdHJsKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBkYXQsCj4+ICsJwqDCoMKg wqAgdW5zaWduZWQgaW50IGN0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFu ZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCWludCByZWdfb2Zmc2V0ID0gbmZjLT5i YW5kX29mZnNldDsKPj4gKwo+PiArCWlmIChjdHJsICYgTkFORF9BTEUpCj4+ICsJcmVnX29mZnNl dCArPSBCQU5LX0FERFI7Cj4+ICsJZWxzZSBpZiAoY3RybCAmIE5BTkRfQ0xFKQo+PiArCXJlZ19v ZmZzZXQgKz0gQkFOS19DTUQ7Cj4+ICsKPj4gKwlpZiAoZGF0ICE9IE5BTkRfQ01EX05PTkUpCj4+ ICsJbmZjX3dyaXRlYihuZmMsIGRhdCAmIDB4RkYsIHJlZ19vZmZzZXQpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW5saW5lIHZvaWQgcmtfbmZjX3dhaXRfaW9yZWFkeShzdHJ1Y3QgcmtfbmZjICpu ZmMpCj4+ICt7Cj4+ICsJaW50IHJjOwo+PiArCXUzMiB2YWw7Cj4+ICsKPj4gKwlyYyA9IHJlYWRs X3BvbGxfdGltZW91dF9hdG9taWMobmZjLT5yZWdzICsgTkZDX0ZNQ1RMLCB2YWwsCj4+ICsJwqDC oMKgwqDCoMKgIHZhbCAmIEZNQ1RMX1JEWSwgMTAsIFJLX1RJTUVPVVQpOwo+PiArCWlmIChyYyA8 IDApCj4+ICsJZGV2X2VycihuZmMtPmRldiwgImRhdGEgbm90IHJlYWR5XG4iKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGlubGluZSB1OCBya19uZmNfcmVhZF9ieXRlKHN0cnVjdCBuYW5kX2NoaXAg KmNoaXApCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxl cl9kYXRhKGNoaXApOwo+PiArCj4+ICsJcmV0dXJuIG5mY19yZWFkYihuZmMsIG5mYy0+YmFuZF9v ZmZzZXQgKyBCQU5LX0RBVEEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBya19uZmNfcmVh ZF9idWYoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTggKmJ1ZiwgaW50IGxlbikKPj4gK3sKPj4g KwlpbnQgaTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPj4gKwlidWZbaV0g PSBya19uZmNfcmVhZF9ieXRlKGNoaXApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBya19u ZmNfd3JpdGVfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCBieXRlKQo+PiArewo+PiAr CXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPj4g Kwo+PiArCW5mY193cml0ZWIobmZjLCBieXRlLCBuZmMtPmJhbmRfb2Zmc2V0ICsgQkFOS19EQVRB KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgcmtfbmZjX3dyaXRlX2J1ZihzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQo+PiArewo+PiArCWludCBpOwo+ PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQo+PiArCXJrX25mY193cml0ZV9ieXRl KGNoaXAsIGJ1ZltpXSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcmtfbmZjX3NldHVwX2Rh dGFfaW50ZXJmYWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBjc2xpbmUsCj4+ICsJY29u c3Qgc3RydWN0IG5hbmRfZGF0YV9pbnRlcmZhY2UgKmNvbmYpCj4+ICt7Cj4+ICsJc3RydWN0IHJr X25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCWNvbnN0IHN0 cnVjdCBuYW5kX3Nkcl90aW1pbmdzICp0aW1pbmdzOwo+PiArCXUzMiByYXRlLCB0YzJydywgdHJ3 cHcsIHRydzJjOwo+PiArCXUzMiB0ZW1wOwo+PiArCj4+ICsJaWYgKGNzbGluZSA9PSBOQU5EX0RB VEFfSUZBQ0VfQ0hFQ0tfT05MWSkKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArCS8qIG5vdCBvbmZp IG5hbmQgZmxhc2ggKi8KPj4gKwlpZiAoIWNoaXAtPnBhcmFtZXRlcnMub25maSkKPj4gKwlyZXR1 cm4gMDsKPj4gKwo+PiArCXRpbWluZ3MgPSBuYW5kX2dldF9zZHJfdGltaW5ncyhjb25mKTsKPj4g KwlpZiAoSVNfRVJSKHRpbWluZ3MpKQo+PiArCXJldHVybiAtRU5PVFNVUFA7Cj4+ICsKPj4gKwly YXRlID0gY2xrX2dldF9yYXRlKG5mYy0+Y2xrLm5mY19jbGspOwo+PiArCj4+ICsJLyogdHVybiBj bG9jayByYXRlIGludG8gS0haICovCj4+ICsJcmF0ZSAvPSAxMDAwOwo+PiArCj4+ICsJdGMycncg PSB0cncyYyA9IDE7Cj4KPgl0YzJydyA9IDE7Cj4JdHJ3MmMgPSAxOwo+Cj4+ICsKPj4gKwl0cndw dyA9IG1heCh0aW1pbmdzLT50V0NfbWluLCB0aW1pbmdzLT50UkNfbWluKSAvIDEwMDA7Cj4+ICsJ dHJ3cHcgPSBESVZfUk9VTkRfVVAodHJ3cHcgKiByYXRlLCAxMDAwMDAwKTsKPj4gKwo+PiArCXRl bXAgPSB0aW1pbmdzLT50UkVBX21heCAvIDEwMDA7Cj4+ICsJdGVtcCA9IERJVl9ST1VORF9VUCh0 ZW1wICogcmF0ZSwgMTAwMDAwMCk7Cj4+ICsKPj4gKwlpZiAodHJ3cHcgPCB0ZW1wKQo+PiArCXRy d3B3ID0gdGVtcDsKPj4gKwo+PiArCWlmICh0cndwdyA+IDYpIHsKPgo+V2hhdCBpcyA2ID8gV291 bGQgZGVzZXJ2ZSBhIGRlZmluZSBhbmQgYW4gZXhwbGFuYXRpb24hCj4KPj4gKwl0YzJydysrOwo+ PiArCXRydzJjKys7Cj4+ICsJdHJ3cHcgLT0gMjsKPj4gKwl9Cj4+ICsKPj4gKwkvKgo+PiArCSog QUNDT046IGFjY2VzcyB0aW1pbmcgY29udHJvbCByZWdpc3Rlcgo+PiArCSogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiArCSogMzE6MTg6IHJlc2VydmVkCj4+ICsJKiAx NzoxMjogY3NydywgY2xvY2sgY3ljbGVzIGZyb20gdGhlIGZhbGxpbmcgZWRnZSBvZiBDU24gdG8g dGhlCj4+ICsJZmFsbGluZyBlZGdlIG9mIFJEbiBvciBXUm4KPj4gKwkqIDExOjExOiByZXNlcnZl ZAo+PiArCSogMTA6MDU6IHJ3cHcsIHRoZSB3aWR0aCBvZiBSRG4gb3IgV1JuIGluIHByb2Nlc3Nv ciBjbG9jayBjeWNsZXMKPj4gKwkqIDA0OjAwOiByd2NzLCBjbG9jayBjeWNsZXMgZnJvbSB0aGUg cmlzaW5nIGVkZ2Ugb2YgUkRuIG9yIFdSbiB0byB0aGUKPj4gKwlyaXNpbmcgZWRnZSBvZiBDU24K Pj4gKwkqLwo+PiArCXRlbXAgPSBBQ0NUSU1JTkcodGMycncsIHRyd3B3LCB0cncyYyk7Cj4+ICsJ bmZjX3dyaXRlbChuZmMsIHRlbXAsIE5GQ19GTVdBSVQpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ ICt9Cj4+ICsKPgo+QSBjb21tZW50IGhlcmUgZXhwbGFpbmluZyB3aGF0IHRoZSBuZXh0IGZ1bmN0 aW9uIGRvZXMgYW5kIHdoeSB3b3VsZCBiZQo+bmljZS4KPgo+PiArc3RhdGljIHZvaWQgcmtfbmZj X2Zvcm1hdF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1OCAqYnVmKQo+PiArewo+ PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+PiArCXN0cnVj dCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPj4gKwl1MzIg aTsKPj4gKwo+PiArCW1lbXNldChuZmMtPmJ1ZmZlciwgMHhmZiwgbXRkLT53cml0ZXNpemUgKyBt dGQtPm9vYnNpemUpOwo+PiArCXN3YXAoY2hpcC0+b29iX3BvaVswXSwgY2hpcC0+b29iX3BvaVs3 XSk7Cj4+ICsJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy5zdGVwczsgaSsrKSB7Cj4+ICsJaWYg KGJ1ZikKPj4gKwltZW1jcHkocmtfZGF0YV9wdHIoY2hpcCwgaSksIGRhdGFfcHRyKGNoaXAsIGJ1 ZiwgaSksCj4+ICsJwqDCoMKgwqDCoMKgIGNoaXAtPmVjYy5zaXplKTsKPj4gKwo+PiArCW1lbWNw eShya19vb2JfcHRyKGNoaXAsIGkpLCBvb2JfcHRyKGNoaXAsIGkpLAo+PiArCcKgwqDCoMKgwqDC oCBORkNfU1lTX0RBVEFfU0laRSk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBy a19uZmNfeGZlcl9zdGFydChzdHJ1Y3QgcmtfbmZjICpuZmMsIHU4IHJ3LCB1OCBuX0tCLAo+PiAr CWRtYV9hZGRyX3QgZG1hX2RhdGEsIGRtYV9hZGRyX3QgZG1hX29vYikKPj4gK3sKPj4gKwl1MzIg ZG1hX3JlZywgZmxfcmVnLCBiY2hfcmVnOwo+PiArCj4+ICsJZG1hX3JlZyA9IERNQV9TVCB8ICgo IXJ3KSA8PCBETUFfV1IpwqAgfCBETUFfRU4gfCAoMiA8PCBETUFfQUhCX1NJWkUpIHwKPj4gKwnC oMKgwqDCoMKgICg3IDw8IERNQV9CVVJTVF9TSVpFKSB8ICgxNiA8PCBETUFfSU5DX05VTSk7Cj4+ ICsKPj4gKwlmbF9yZWcgPSAocncgPDwgRkxDVExfV1IpIHwgRkxDVExfWEZFUl9FTiB8IEZMQ1RM X0FDT1JSRUNUIHwKPj4gKwkobl9LQiA8PCBGTENUTF9YRkVSX1NFQ1RPUikgfCBGTENUTF9UT0df RklYOwo+PiArCj4+ICsJaWYgKG5mYy0+bmZjX3ZlcnNpb24gPT0gNikgewo+Cj5JIHdvdWxkIHBy ZWZlciB1c2luZyBzd2l0Y2ggc3RhdGVtZW50cyBhbnkgdGltZSB5b3UgY2hlY2sgdGhlIHZlcnNp b24uCj5UaGUgdmVyc2lvbiBzaG91bGQgYmUgYW4gZW51bS4KPgo+WW91IGNhbiBhbHNvIGRlZmlu ZSBhIHBsYXRmb3JtIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgcmVnaXN0ZXIgb2Zmc2V0cwo+dGhh dCBoYXZlIHRoZSBzYW1lIG5hbWUsIGJ1dCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb2Zmc2V0 LiBUaGVuIHlvdQo+Y2FuIHJlZmVyZW5jZSB0aGUgcmlnaHQgdmFsdWUgZGlyZWN0bHkuCj5lZy4K Pgo+CXN0cnVjdCBya19uZmNfcGxhdF9kYXRhIHsKPgl1MzIgbmZjX2JjaGN0bF9vZmY7Cj4JLi4u Cj4JfTsKPgo+CXN0cnVjdCBya19uZmNfcGxhdF9kYXRhIHJrX25mY192Nl9wbGF0X2RhdGEgPSB7 Cj4JbmZjX2JjaGN0bF9vZmYgPSAuLi47Cj4JLi4uCj4JfTsKPgo+CWJjaF9yZWcgPSByZWFkbChw ZGF0YS0+bmZjX2JjaGN0bF9vZmYpOwo+Cj4+ICsJYmNoX3JlZyA9IG5mY19yZWFkbChuZmMsIE5G Q19CQ0hDVExfVjYpOwo+PiArCWJjaF9yZWcgPSAoYmNoX3JlZyAmICh+QkNIQ1RMX0JBTktfTSkp IHwKPj4gKwnCoCAobmZjLT5zZWxlY3RlZF9iYW5rIDw8IEJDSENUTF9CQU5LKTsKPj4gKwluZmNf d3JpdGVsKG5mYywgYmNoX3JlZywgTkZDX0JDSENUTF9WNik7Cj4+ICsKPj4gKwluZmNfd3JpdGVs KG5mYywgZG1hX3JlZywgTkZDX0RNQV9DRkdfVjYpOwo+PiArCW5mY193cml0ZWwobmZjLCAodTMy KWRtYV9kYXRhLCBORkNfRE1BX0RBVEFfQlVGX1Y2KTsKPj4gKwluZmNfd3JpdGVsKG5mYywgKHUz MilkbWFfb29iLCBORkNfRE1BX09PQl9CVUZfVjYpOwo+PiArCW5mY193cml0ZWwobmZjLCBmbF9y ZWcsIE5GQ19GTENUTF9WNik7Cj4+ICsJZmxfcmVnIHw9IEZMQ1RMX1hGRVJfU1Q7Cj4+ICsJbmZj X3dyaXRlbChuZmMsIGZsX3JlZywgTkZDX0ZMQ1RMX1Y2KTsKPj4gKwl9IGVsc2Ugewo+PiArCW5m Y193cml0ZWwobmZjLCBkbWFfcmVnLCBORkNfRE1BX0NGR19WOSk7Cj4+ICsJbmZjX3dyaXRlbChu ZmMsICh1MzIpZG1hX2RhdGEsIE5GQ19ETUFfREFUQV9CVUZfVjkpOwo+PiArCW5mY193cml0ZWwo bmZjLCAodTMyKWRtYV9vb2IsIE5GQ19ETUFfT09CX0JVRl9WOSk7Cj4+ICsJbmZjX3dyaXRlbChu ZmMsIGZsX3JlZywgTkZDX0ZMQ1RMX1Y5KTsKPj4gKwlmbF9yZWcgfD0gRkxDVExfWEZFUl9TVDsK Pj4gKwluZmNfd3JpdGVsKG5mYywgZmxfcmVnLCBORkNfRkxDVExfVjkpOwo+PiArCX0KPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBya19uZmNfd2FpdF9mb3JfeGZlcl9kb25lKHN0cnVjdCBya19u ZmMgKm5mYykKPj4gK3sKPj4gKwl1MzIgcmVnOwo+PiArCWludCByZXQgPSAwOwo+PiArCXZvaWQg X19pb21lbSAqcHRyOwo+PiArCj4+ICsJaWYgKG5mYy0+bmZjX3ZlcnNpb24gPT0gNikKPj4gKwlw dHIgPSBuZmMtPnJlZ3MgKyBORkNfRkxDVExfVjY7Cj4+ICsJZWxzZQo+PiArCXB0ciA9IG5mYy0+ cmVncyArIE5GQ19GTENUTF9WOTsKPj4gKwo+PiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9h dG9taWMocHRyLCByZWcsCj4+ICsJcmVnICYgRkxDVExfWEZFUl9SRUFEWSwKPj4gKwkxMCwgUktf VElNRU9VVCk7Cj4+ICsJaWYgKHJldCkKPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LCAidGltZW91dCBy ZWc9JXhcbiIsIHJlZyk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IHJrX25mY193cml0ZV9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwLAo+PiArCcKgwqDCoMKgwqAgY29uc3QgdTggKmJ1ZiwgaW50IHBhZ2UsIGlu dCByYXcpCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxl cl9kYXRhKGNoaXApOwo+PiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNj Owo+PiArCXU4ICpvb2I7Cj4+ICsJZG1hX2FkZHJfdCBkbWFfZGF0YSwgZG1hX29vYjsKPj4gKwlp bnQgb29iX3N0ZXAgPSAoZWNjLT5ieXRlcyA+IDYwKSA/IDEyOCA6IDY0Owo+PiArCWludCBwYWdl c19wZXJfYmxrID0gbXRkLT5lcmFzZXNpemUgLyBtdGQtPndyaXRlc2l6ZTsKPj4gKwl1MzIgcmVn Owo+PiArCWludCByZXQgPSAwLCBpOwo+PiArCj4+ICsJbmFuZF9wcm9nX3BhZ2VfYmVnaW5fb3Ao Y2hpcCwgcGFnZSwgMCwgTlVMTCwgMCk7Cj4+ICsKPj4gKwlpZiAoIXJhdykgewo+PiArCW1lbWNw eShuZmMtPnBhZ2VfYnVmLCBidWYsIG10ZC0+d3JpdGVzaXplKTsKPj4gKwltZW1zZXQobmZjLT5v b2JfYnVmLCAweGZmLCBvb2Jfc3RlcCAqIGVjYy0+c3RlcHMpOwo+PiArCS8qCj4+ICsJKiBUaGUg Zmlyc3QgOCBibG9ja3MgaXMgc3RvcmVkIGxvYWRlciwgdGhlIGZpcnN0Cj4+ICsJKiAzMiBiaXRz IG9mIG9vYiBuZWVkIGxpbmsgdG8gbmV4dCBwYWdlIGFkZHJlc3MKPj4gKwkqIGluIHRoZSBzYW1l IGJsb2NrIGZvciBCb290cm9tLgo+PiArCSogU3dhcCB0aGUgZmlyc3Qgb29iIHdpdGggdGhlIHNl dmVudGggb29iLAo+PiArCSogYW5kIGJhZCBibG9jayBtYXNrIHNhdmUgYXQgc2V2ZW50aCBvb2Iu Cj4+ICsJKi8KPj4gKwlzd2FwKGNoaXAtPm9vYl9wb2lbMF0sIGNoaXAtPm9vYl9wb2lbN10pOwo+ PiArCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0ZXBzOyBpKyspIHsKPj4gKwlvb2IgPSBjaGlwLT5v b2JfcG9pICsgaSAqIE5GQ19TWVNfREFUQV9TSVpFOwo+PiArCXJlZyA9IChvb2JbMl0gPDwgMTYp IHwgKG9vYlszXSA8PCAyNCk7Cj4+ICsJaWYgKCFpICYmIHBhZ2UgPCBwYWdlc19wZXJfYmxrICog OCkKPj4gKwlyZWcgfD0gKHBhZ2UgJiAocGFnZXNfcGVyX2JsayAtIDEpKSAqIDQ7Cj4+ICsJZWxz ZQo+PiArCXJlZyB8PSBvb2JbMF0gfCAob29iWzFdIDw8IDgpOwo+PiArCj4+ICsJaWYgKG5mYy0+ bmZjX3ZlcnNpb24gPT0gNikKPj4gKwluZmMtPm9vYl9idWZbaSAqIG9vYl9zdGVwIC8gNF0gPSBy ZWc7Cj4+ICsJZWxzZQo+PiArCW5mYy0+b29iX2J1ZltpXSA9IHJlZzsKPj4gKwl9Cj4+ICsKPj4g KwlkbWFfZGF0YSA9IGRtYV9tYXBfc2luZ2xlKG5mYy0+ZGV2LCAodm9pZCAqKW5mYy0+cGFnZV9i dWYsCj4+ICsJwqAgbXRkLT53cml0ZXNpemUsIERNQV9UT19ERVZJQ0UpOwo+PiArCWRtYV9vb2Ig PSBkbWFfbWFwX3NpbmdsZShuZmMtPmRldiwgbmZjLT5vb2JfYnVmLAo+PiArCWVjYy0+c3RlcHMg KiBvb2Jfc3RlcCwKPj4gKwlETUFfVE9fREVWSUNFKTsKPj4gKwo+PiArCWluaXRfY29tcGxldGlv bigmbmZjLT5kb25lKTsKPj4gKwlpZiAobmZjLT5uZmNfdmVyc2lvbiA9PSA2KQo+PiArCW5mY193 cml0ZWwobmZjLCBJTlRfRE1BLCBORkNfSU5URU5fVjYpOwo+PiArCWVsc2UKPj4gKwluZmNfd3Jp dGVsKG5mYywgSU5UX0RNQSwgTkZDX0lOVEVOX1Y5KTsKPj4gKwo+PiArCXJrX25mY194ZmVyX3N0 YXJ0KG5mYywgTkZDX1dSSVRFLCBlY2MtPnN0ZXBzLCBkbWFfZGF0YSwKPj4gKwnCoCBkbWFfb29i KTsKPj4gKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm5mYy0+ZG9uZSwKPj4g KwnCoCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwo+PiArCWlmICghcmV0KQo+PiArCXJldCA9IC1F VElNRURPVVQ7Cj4+ICsJcmV0ID0gcmtfbmZjX3dhaXRfZm9yX3hmZXJfZG9uZShuZmMpOwo+PiAr Cj4+ICsJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1hX2RhdGEsIG10ZC0+d3JpdGVzaXpl LAo+PiArCURNQV9UT19ERVZJQ0UpOwo+PiArCWRtYV91bm1hcF9zaW5nbGUobmZjLT5kZXYsIGRt YV9vb2IsIGVjYy0+c3RlcHMgKiBvb2Jfc3RlcCwKPj4gKwlETUFfVE9fREVWSUNFKTsKPj4gKwl9 IGVsc2Ugewo+PiArCXJrX25mY193cml0ZV9idWYoY2hpcCwgYnVmLCBtdGQtPndyaXRlc2l6ZSAr ICsgbXRkLT5vb2JzaXplKTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocmV0KQo+PiArCXJldHVybiBy ZXQ7Cj4+ICsKPj4gKwlyZXR1cm4gbmFuZF9wcm9nX3BhZ2VfZW5kX29wKGNoaXApOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY193cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLCBjb25zdCB1OCAqYnVmLAo+PiArCcKgIGludCBvb2Jfb24sIGludCBwYWdlKQo+PiAr ewo+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4+ICsJc3Ry dWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCj4+ ICsJcmtfbmZjX2Zvcm1hdF9wYWdlKG10ZCwgYnVmKTsKPj4gKwlyZXR1cm4gcmtfbmZjX3dyaXRl X3BhZ2UobXRkLCBjaGlwLCBuZmMtPmJ1ZmZlciwgcGFnZSwgMSk7Cj4KPkkgdGhpbmsgeW91IHNo b3VsZCBhdm9pZCBjYWxsaW5nIC0+d3JpdGVfcGFnZS4gWW91IHdpbGwgYXZvaWQgYW4KPmluZGVu dGF0aW9uIGxldmVsIGluIHRoaXMgZnVuY3Rpb24gYW5kIGNsYXJpZnkgd2hhdCB3cml0ZV9wYWdl X3JhdyBkby4KPlNhbWUgZm9yIHJlYWQsIGFuZCB0aGUgX29vYiBhbHRlcm5hdGl2ZS4gQWxzbywg SSdtIHN1cmUgd3JpdGVfYnVmIGRvZXMKPm5vdCBuZWVkIHRvIGJlIGV4cG9ydGVkIGFuZCB5b3Ug Y2FuIGp1c3QgbW92ZSB0aGUgYWN0dWFsIGNvZGUgaW4gdGhpcwo+ZnVuY3Rpb24uCj4KPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBya19uZmNfd3JpdGVfb29iX3N0ZChzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLCBpbnQgcGFnZSkKPj4gK3sKPj4gKwlyZXR1cm4gcmtfbmZjX3dyaXRlX3BhZ2VfcmF3 KGNoaXAsIE5VTEwsIDEsIHBhZ2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY19y ZWFkX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ ICsJdTMyIGRhdGFfb2ZmcywgdTMyIHJlYWRsZW4sCj4+ICsJdTggKmJ1ZiwgaW50IHBhZ2UsIGlu dCByYXcpCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxl cl9kYXRhKGNoaXApOwo+PiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNj Owo+PiArCWRtYV9hZGRyX3QgZG1hX2RhdGEsIGRtYV9vb2I7Cj4+ICsJaW50IG9vYl9zdGVwID0g KGVjYy0+Ynl0ZXMgPiA2MCkgPyAxMjggOiA2NDsKPj4gKwlpbnQgYml0ZmxpcHMgPSAwOwo+PiAr CWludCByZXQsIGksIGJjaF9zdDsKPj4gKwl1OCAqb29iOwo+PiArCXUzMiB0bXA7Cj4+ICsKPj4g KwluYW5kX3JlYWRfcGFnZV9vcChjaGlwLCBwYWdlLCAwLCBOVUxMLCAwKTsKPj4gKwlpZiAoIXJh dykgewo+PiArCWRtYV9kYXRhID0gZG1hX21hcF9zaW5nbGUobmZjLT5kZXYsIG5mYy0+cGFnZV9i dWYsCj4+ICsJwqAgbXRkLT53cml0ZXNpemUsCj4+ICsJwqAgRE1BX0ZST01fREVWSUNFKTsKPj4g KwlkbWFfb29iID0gZG1hX21hcF9zaW5nbGUobmZjLT5kZXYsIG5mYy0+b29iX2J1ZiwKPj4gKwll Y2MtPnN0ZXBzICogb29iX3N0ZXAsCj4+ICsJRE1BX0ZST01fREVWSUNFKTsKPj4gKwlpbml0X2Nv bXBsZXRpb24oJm5mYy0+ZG9uZSk7Cj4+ICsJaWYgKG5mYy0+bmZjX3ZlcnNpb24gPT0gNikKPj4g KwluZmNfd3JpdGVsKG5mYywgSU5UX0RNQSwgTkZDX0lOVEVOX1Y2KTsKPj4gKwllbHNlCj4+ICsJ bmZjX3dyaXRlbChuZmMsIElOVF9ETUEsIE5GQ19JTlRFTl9WOSk7Cj4+ICsJcmtfbmZjX3hmZXJf c3RhcnQobmZjLCBORkNfUkVBRCwgZWNjLT5zdGVwcywgZG1hX2RhdGEsCj4+ICsJwqAgZG1hX29v Yik7Cj4+ICsJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZuZmMtPmRvbmUsCj4+ ICsJwqAgbXNlY3NfdG9famlmZmllcygxMDApKTsKPj4gKwlpZiAoIXJldCkKPj4gKwlkZXZfd2Fy bihuZmMtPmRldiwgInJlYWQgYWhiL2RtYSBkb25lIHRpbWVvdXRcbiIpOwo+PiArCXJrX25mY193 YWl0X2Zvcl94ZmVyX2RvbmUobmZjKTsKPj4gKwlkbWFfdW5tYXBfc2luZ2xlKG5mYy0+ZGV2LCBk bWFfZGF0YSwgbXRkLT53cml0ZXNpemUsCj4+ICsJRE1BX0ZST01fREVWSUNFKTsKPj4gKwlkbWFf dW5tYXBfc2luZ2xlKG5mYy0+ZGV2LCBkbWFfb29iLCBlY2MtPnN0ZXBzICogb29iX3N0ZXAsCj4+ ICsJRE1BX0ZST01fREVWSUNFKTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0ZXBz OyBpKyspIHsKPj4gKwlvb2IgPSBjaGlwLT5vb2JfcG9pICsgaSAqIE5GQ19TWVNfREFUQV9TSVpF Owo+PiArCWlmIChuZmMtPm5mY192ZXJzaW9uID09IDYpCj4+ICsJdG1wID0gbmZjLT5vb2JfYnVm W2kgKiBvb2Jfc3RlcCAvIDRdOwo+PiArCWVsc2UKPj4gKwl0bXAgPSBuZmMtPm9vYl9idWZbaV07 Cj4+ICsJKm9vYisrID0gKHU4KXRtcDsKPj4gKwkqb29iKysgPSAodTgpKHRtcCA+PiA4KTsKPj4g Kwkqb29iKysgPSAodTgpKHRtcCA+PiAxNik7Cj4+ICsJKm9vYisrID0gKHU4KSh0bXAgPj4gMjQp Owo+PiArCX0KPj4gKwlzd2FwKGNoaXAtPm9vYl9wb2lbMF0sIGNoaXAtPm9vYl9wb2lbN10pOwo+ PiArCWlmIChuZmMtPm5mY192ZXJzaW9uID09IDYpIHsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgZWNj LT5zdGVwcyAvIDI7IGkrKykgewo+PiArCWJjaF9zdCA9IG5mY19yZWFkbChuZmMsIE5GQ19CQ0hf U1RfVjYgKyBpICogNCk7Cj4+ICsJaWYgKGJjaF9zdCAmIEJDSF9TVF9FUlIwX1Y2IHx8Cj4+ICsJ wqDCoMKgIGJjaF9zdCAmIEJDSF9TVF9FUlIxX1Y2KSB7Cj4+ICsJbXRkLT5lY2Nfc3RhdHMuZmFp bGVkKys7Cj4+ICsJYml0ZmxpcHMgPSAtMTsKPj4gKwl9IGVsc2Ugewo+PiArCXJldCA9IEVDQ19F UlJfQ05UMF9WNihiY2hfc3QpOwo+PiArCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSByZXQ7 Cj4+ICsJYml0ZmxpcHMgPSBtYXhfdCh1MzIsIGJpdGZsaXBzLCByZXQpOwo+PiArCj4+ICsJcmV0 ID0gRUNDX0VSUl9DTlQxX1Y2KGJjaF9zdCk7Cj4+ICsJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVk ICs9IHJldDsKPj4gKwliaXRmbGlwcyA9IG1heF90KHUzMiwgYml0ZmxpcHMsIHJldCk7Cj4+ICsJ fQo+PiArCX0KPj4gKwl9IGVsc2Ugewo+PiArCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0ZXBzIC8g MjsgaSsrKSB7Cj4+ICsJYmNoX3N0ID0gbmZjX3JlYWRsKG5mYywgTkZDX0JDSF9TVF9WOSArIGkg KiA0KTsKPj4gKwlpZiAoYmNoX3N0ICYgQkNIX1NUX0VSUjBfVjkgfHwKPj4gKwnCoMKgwqAgYmNo X3N0ICYgQkNIX1NUX0VSUjBfVjkpIHsKPj4gKwltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKPj4g KwliaXRmbGlwcyA9IC0xOwo+PiArCX0gZWxzZSB7Cj4+ICsJcmV0ID0gRUNDX0VSUl9DTlQwX1Y5 KGJjaF9zdCk7Cj4+ICsJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHJldDsKPj4gKwliaXRm bGlwcyA9IG1heF90KHUzMiwgYml0ZmxpcHMsIHJldCk7Cj4+ICsKPmxvb2tzIHN0cmFuZ2UsIGEg c3dpdGNoIHdvdWxkIGJlIGJldHRlciBwcm9iYWJseS4KPgo+PiArCXJldCA9IEVDQ19FUlJfQ05U MV9WOShiY2hfc3QpOwo+PiArCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSByZXQ7Cj4+ICsJ Yml0ZmxpcHMgPSBtYXhfdCh1MzIsIGJpdGZsaXBzLCByZXQpOwo+PiArCX0KPj4gKwl9Cj4+ICsJ fQo+PiArCW1lbWNweShidWYsIG5mYy0+cGFnZV9idWYsIG10ZC0+d3JpdGVzaXplKTsKPj4gKwo+ PiArCWlmIChiaXRmbGlwcyA9PSAtMSkKPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LCAicmVhZF9wYWdl ICV4ICV4ICV4ICV4ICV4ICV4XG4iLAo+PiArCXBhZ2UsIGJpdGZsaXBzLCBiY2hfc3QsICgodTMy ICopYnVmKVswXSwKPj4gKwkoKHUzMiAqKWJ1ZilbMV0sICh1MzIpZG1hX2RhdGEpOwo+PiArCX0g ZWxzZSB7Cj4+ICsJcmtfbmZjX3JlYWRfYnVmKGNoaXAsIGJ1ZiwgbXRkLT53cml0ZXNpemUgKyBt dGQtPm9vYnNpemUpOwo+PiArCX0KPgo+c3BhY2UKPgo+PiArCXJldHVybiBiaXRmbGlwczsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfd3JpdGVfcGFnZV9od2VjYyhzdHJ1Y3QgbmFu ZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLAo+PiArCcKgwqDCoCBpbnQgb29iX29uLCBpbnQg cGFnZSkKPj4gK3sKPj4gKwlyZXR1cm4gcmtfbmZjX3dyaXRlX3BhZ2UobmFuZF90b19tdGQoY2hp cCksIGNoaXAsIGJ1ZiwgcGFnZSwgMCk7Cj4+ICt9Cj4KPldoYXQgaXMgdGhlIHB1cnBvc2Ugb2Yg dGhpcyBpbmRpcmVjdGlvbj8KPgo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY19yZWFkX3BhZ2Vf aHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTggKnAsIGludCBvb2Jfb24sCj4+ICsJwqDC oCBpbnQgcGcpCj4+ICt7Cj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChj aGlwKTsKPj4gKwo+PiArCXJldHVybiBya19uZmNfcmVhZF9wYWdlKG10ZCwgY2hpcCwgMCwgbXRk LT53cml0ZXNpemUsIHAsIHBnLCAwKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBya19uZmNf cmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLCBpbnQgb29iX29u LAo+PiArCWludCBwYWdlKQo+PiArewo+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90 b19tdGQoY2hpcCk7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxl cl9kYXRhKGNoaXApOwo+PiArCWludCBpLCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBya19uZmNfcmVh ZF9wYWdlKG10ZCwgY2hpcCwgMCwgbXRkLT53cml0ZXNpemUsIG5mYy0+YnVmZmVyLAo+PiArCcKg wqAgcGFnZSwgMSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJcmV0dXJuIHJldDsKPj4gKwo+PiAr CWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2Muc3RlcHM7IGkrKykgewo+PiArCW1lbWNweShvb2Jf cHRyKGNoaXAsIGkpLCBya19vb2JfcHRyKGNoaXAsIGkpLAo+PiArCcKgwqDCoMKgwqDCoCBORkNf U1lTX0RBVEFfU0laRSk7Cj4+ICsKPj4gKwlpZiAoYnVmKQo+PiArCW1lbWNweShkYXRhX3B0cihj aGlwLCBidWYsIGkpLCBya19kYXRhX3B0cihjaGlwLCBpKSwKPj4gKwnCoMKgwqDCoMKgwqAgY2hp cC0+ZWNjLnNpemUpOwo+PiArCX0KPj4gKwlzd2FwKGNoaXAtPm9vYl9wb2lbMF0sIGNoaXAtPm9v Yl9wb2lbN10pOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBya19uZmNfcmVhZF9vb2Jfc3RkKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBwYWdlKQo+ PiArewo+PiArCXJldHVybiBya19uZmNfcmVhZF9wYWdlX3JhdyhjaGlwLCBOVUxMLCAxLCBwYWdl KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIHJrX25mY19od19pbml0KHN0cnVj dCBya19uZmMgKm5mYykKPj4gK3sKPj4gKwl1MzIgdmFsOwo+PiArCj4+ICsJdmFsID0gbmZjX3Jl YWRsKG5mYywgTkZDX1ZFUl9WOSk7Cj4+ICsJaWYgKHZhbCA9PSBORkNfVkVSU0lPTl85KSB7Cj4+ ICsJbmZjLT5uZmNfdmVyc2lvbiA9IDk7Cj4+ICsJbmZjLT5tYXhfZWNjX3N0cmVuZ3RoID0gNzA7 Cj4+ICsJfSBlbHNlIHsKPj4gKwluZmMtPm5mY192ZXJzaW9uID0gNjsKPj4gKwl2YWwgPSBuZmNf cmVhZGwobmZjLCBORkNfVkVSX1Y2KTsKPj4gKwlpZiAodmFsID09IDB4ODAxKQo+PiArCW5mYy0+ bWF4X2VjY19zdHJlbmd0aCA9IDE2Owo+PiArCWVsc2UKPj4gKwluZmMtPm1heF9lY2Nfc3RyZW5n dGggPSA2MDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBkaXNhYmxlIGZsYXNoIHdwICovCj4+ICsJbmZj X3dyaXRlbChuZmMsIEZNQ1RMX1dQLMKgIE5GQ19GTUNUTCk7Cj4+ICsJLyogY29uZmlnIGRlZmF1 bHQgdGltaW5nICovCj4+ICsJbmZjX3dyaXRlbChuZmMsIDB4MTA4MSzCoCBORkNfRk1XQUlUKTsK Pj4gKwkvKiBkaXNhYmxlIHJhbmRvbWl6ZXIgYW5kIGRtYSAqLwo+PiArCj4+ICsJaWYgKG5mYy0+ bmZjX3ZlcnNpb24gPT0gNikgewo+PiArCW5mY193cml0ZWwobmZjLCAwLCBORkNfUkFORE1aX1Y2 KTsKPj4gKwluZmNfd3JpdGVsKG5mYywgMCwgTkZDX0RNQV9DRkdfVjYpOwo+PiArCW5mY193cml0 ZWwobmZjLCBGTENUTF9SU1QsIE5GQ19GTENUTF9WNik7Cj4+ICsJfSBlbHNlIHsKPj4gKwluZmNf d3JpdGVsKG5mYywgMCwgTkZDX1JBTkRNWl9WOSk7Cj4+ICsJbmZjX3dyaXRlbChuZmMsIDAsIE5G Q19ETUFfQ0ZHX1Y5KTsKPj4gKwluZmNfd3JpdGVsKG5mYywgRkxDVExfUlNULCBORkNfRkxDVExf VjkpOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90IHJrX25mY19pcnEo aW50IGlycSwgdm9pZCAqaWQpCj4+ICt7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gaWQ7Cj4+ ICsJdTMyIHN0YSwgaWVuOwo+PiArCj4+ICsJaWYgKG5mYy0+bmZjX3ZlcnNpb24gPT0gNikgewo+ PiArCXN0YSA9IG5mY19yZWFkbChuZmMsIE5GQ19JTlRTVF9WNik7Cj4+ICsJaWVuID0gbmZjX3Jl YWRsKG5mYywgTkZDX0lOVEVOX1Y2KTsKPj4gKwl9IGVsc2Ugewo+PiArCXN0YSA9IG5mY19yZWFk bChuZmMsIE5GQ19JTlRTVF9WOSk7Cj4+ICsJaWVuID0gbmZjX3JlYWRsKG5mYywgTkZDX0lOVEVO X1Y5KTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoIShzdGEgJiBpZW4pKQo+PiArCXJldHVybiBJUlFf Tk9ORTsKPj4gKwlpZiAobmZjLT5uZmNfdmVyc2lvbiA9PSA2KSB7Cj4+ICsJbmZjX3dyaXRlbChu ZmMsIHN0YSwgTkZDX0lOVENMUl9WNik7Cj4+ICsJbmZjX3dyaXRlbChuZmMsIH5zdGEgJiBpZW4s IE5GQ19JTlRFTl9WNik7Cj4+ICsJfSBlbHNlIHsKPj4gKwluZmNfd3JpdGVsKG5mYywgc3RhLCBO RkNfSU5UQ0xSX1Y5KTsKPj4gKwluZmNfd3JpdGVsKG5mYywgfnN0YSAmIGllbiwgTkZDX0lOVEVO X1Y5KTsKPj4gKwl9Cj4+ICsJY29tcGxldGUoJm5mYy0+ZG9uZSk7Cj4+ICsKPj4gKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcmtfbmZjX2VuYWJsZV9jbGso c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmtfbmZjX2NsayAqY2xrKQo+PiArewo+PiArCWlu dCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrLT5uZmNfY2xrKTsK Pj4gKwlpZiAocmV0KSB7Cj4+ICsJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIG5mYyBj bGtcbiIpOwo+PiArCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKGNsay0+YWhiX2Nsayk7Cj4+ICsJaWYgKHJldCkgewo+PiArCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGVuYWJsZSBhaGIgY2xrXG4iKTsKPj4gKwljbGtfZGlzYWJsZV91bnByZXBh cmUoY2xrLT5uZmNfY2xrKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldHVy biAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBya19uZmNfZGlzYWJsZV9jbGsoc3RydWN0 IHJrX25mY19jbGsgKmNsaykKPj4gK3sKPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrLT5u ZmNfY2xrKTsKPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrLT5haGJfY2xrKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBya19uZmNfb29ibGF5b3V0X2ZyZWUoc3RydWN0IG10ZF9pbmZv ICptdGQsIGludCBzZWN0aW9uLAo+PiArCcKgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29iX3Jl Z2lvbikKPj4gK3sKPj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRk KTsKPj4gKwo+PiArCWlmIChzZWN0aW9uID49IGNoaXAtPmVjYy5zdGVwcykKPj4gKwlyZXR1cm4g LUVSQU5HRTsKPj4gKwo+PiArCWlmICghc2VjdGlvbikgewo+PiArCS8qIFRoZSBmaXJzdCBieXRl IGlzIGJhZCBibG9jayBtYXNrIGZsYWcgKi8KPj4gKwlvb2JfcmVnaW9uLT5sZW5ndGggPSBORkNf U1lTX0RBVEFfU0laRSAtIDE7Cj4+ICsJb29iX3JlZ2lvbi0+b2Zmc2V0ID0gMTsKPj4gKwl9IGVs c2Ugewo+PiArCW9vYl9yZWdpb24tPmxlbmd0aCA9IE5GQ19TWVNfREFUQV9TSVpFOwo+PiArCW9v Yl9yZWdpb24tPm9mZnNldCA9IHNlY3Rpb24gKiBORkNfU1lTX0RBVEFfU0laRTsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBya19uZmNfb29ibGF5 b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4+ICsJc3RydWN0IG10 ZF9vb2JfcmVnaW9uICpvb2JfcmVnaW9uKQo+PiArewo+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNo aXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+PiArCj4+ICsJaWYgKHNlY3Rpb24pCj4+ICsJcmV0dXJu IC1FUkFOR0U7Cj4+ICsKPj4gKwlvb2JfcmVnaW9uLT5vZmZzZXQgPSBORkNfU1lTX0RBVEFfU0la RSAqIGNoaXAtPmVjYy5zdGVwczsKPj4gKwlvb2JfcmVnaW9uLT5sZW5ndGggPSBtdGQtPm9vYnNp emUgLSBvb2JfcmVnaW9uLT5vZmZzZXQ7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0X29wcyBya19uZmNfb29ibGF5b3V0 X29wcyA9IHsKPj4gKwkuZnJlZSA9IHJrX25mY19vb2JsYXlvdXRfZnJlZSwKPj4gKwkuZWNjID0g cmtfbmZjX29vYmxheW91dF9lY2MsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY19o d19lY2Nfc2V0dXAoc3RydWN0IG10ZF9pbmZvICptdGQsCj4+ICsJc3RydWN0IG5hbmRfZWNjX2N0 cmwgKmVjYywKPj4gKwl1aW50MzJfdCBzdHJlbmd0aCkKPj4gK3sKPj4gKwlzdHJ1Y3QgbmFuZF9j aGlwICpuYW5kID0gbXRkX3RvX25hbmQobXRkKTsKPj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBu YW5kX2dldF9jb250cm9sbGVyX2RhdGEobmFuZCk7Cj4+ICsJdTMyIHJlZzsKPj4gKwo+PiArCWVj Yy0+c3RyZW5ndGggPSBzdHJlbmd0aDsKPj4gKwllY2MtPnN0ZXBzID0gbXRkLT53cml0ZXNpemUg LyBlY2MtPnNpemU7Cj4+ICsJZWNjLT5ieXRlcyA9IERJVl9ST1VORF9VUChlY2MtPnN0cmVuZ3Ro ICogMTQsIDgpOwo+PiArCS8qIEhXIEVDQyBhbHdheXMgd29yayB3aXRoIGV2ZW4gbnVtYmVycyBv ZiBFQ0MgYnl0ZXMgKi8KPj4gKwllY2MtPmJ5dGVzID0gQUxJR04oZWNjLT5ieXRlcywgMik7Cj4+ ICsKPj4gKwlpZiAobmZjLT5uZmNfdmVyc2lvbiA9PSA2KSB7Cj4+ICsJc3dpdGNoIChlY2MtPnN0 cmVuZ3RoKSB7Cj4+ICsJY2FzZSA2MDoKPj4gKwlyZWcgPSAweDAwMDQwMDEwOwo+PiArCWJyZWFr Owo+PiArCWNhc2UgNDA6Cj4+ICsJcmVnID0gMHgwMDA0MDAwMDsKPj4gKwlicmVhazsKPj4gKwlj YXNlIDI0Ogo+PiArCXJlZyA9IDB4MDAwMDAwMTA7Cj4+ICsJYnJlYWs7Cj4+ICsJY2FzZSAxNjoK Pj4gKwlyZWcgPSAweDAwMDAwMDAwOwo+PiArCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJcmV0 dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCW5mY193cml0ZWwobmZjLCByZWcsIE5GQ19CQ0hDVExf VjYpOwo+PiArCX0gZWxzZSB7Cj4+ICsJc3dpdGNoIChlY2MtPnN0cmVuZ3RoKSB7Cj4+ICsJY2Fz ZSA3MDoKPj4gKwlyZWcgPSAweDAwMDAwMDAxOwo+PiArCWJyZWFrOwo+PiArCWNhc2UgNjA6Cj4+ ICsJcmVnID0gMHgwNjAwMDAwMTsKPj4gKwlicmVhazsKPj4gKwljYXNlIDQwOgo+PiArCXJlZyA9 IDB4MDQwMDAwMDE7Cj4+ICsJYnJlYWs7Cj4+ICsJY2FzZSAxNjoKPj4gKwlyZWcgPSAweDAyMDAw MDAxOwo+PiArCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJ fQo+PiArCW5mY193cml0ZWwobmZjLCByZWcsIE5GQ19CQ0hDVExfVjkpOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJrX25mY19lY2NfaW5pdChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQo+PiArewo+PiArCXN0cnVj dCBuYW5kX2NoaXAgKm5hbmQgPSBtdGRfdG9fbmFuZChtdGQpOwo+PiArCXN0cnVjdCBya19uZmMg Km5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShuYW5kKTsKPj4gKwlzdHJ1Y3QgbmFuZF9l Y2NfY3RybCAqZWNjID0gJm5hbmQtPmVjYzsKPj4gKwlzdGF0aWMgdTggc3RyZW5ndGhzX3Y5WzRd ID0gezcwLCA2MCwgNDAsIDE2fTsKPj4gKwlzdGF0aWMgdTggc3RyZW5ndGhzX3Y2WzRdID0gezYw LCA0MCwgMjQsIDE2fTsKPj4gKwl1OCAqc3RyZW5ndGhzOwo+PiArCXUzMiBtYXhfc3RyZW5ndGg7 Cj4+ICsJaW50IGk7Cj4+ICsKPj4gKwkvKiBzdXBwb3J0IG9ubHkgZWNjIGh3IG1vZGUgKi8KPj4g KwlpZiAoZWNjLT5tb2RlICE9IE5BTkRfRUNDX0hXKSB7Cj4+ICsJZGV2X2VycihkZXYsICJlY2Mu bW9kZSBub3Qgc3VwcG9ydGVkXG4iKTsKPj4gKwlyZXR1cm4gLUVJTlZBTDsKPgo+Tm8sIHBsZWFz ZSBzdXBwb3J0IHRoZSBhYnNlbmNlIG9mIEVDQyAobWlnaHQgYmUgdXNlZnVsIGZvcgo+ZGV2ZWxv cG1lbnQvdGVzdGluZyBpbiBzb21lIGNvbmRpdGlvbnMpIGFuZCBoYXZpbmcgc29md2FyZSBFQ0Mg c3VwcG9ydC4KPgo+PiArCX0KPj4gKwo+PiArCS8qIGlmIG9wdGlvbmFsIGR0IHNldHRpbmdzIG5v dCBwcmVzZW50ICovCj4+ICsJaWYgKCFlY2MtPnNpemUgfHwgIWVjYy0+c3RyZW5ndGggfHwKPj4g KwnCoMKgwqAgZWNjLT5zdHJlbmd0aCA+IG5mYy0+bWF4X2VjY19zdHJlbmd0aCkgewo+PiArCS8q IHVzZSBkYXRhc2hlZXQgcmVxdWlyZW1lbnRzICovCj4+ICsJZWNjLT5zdHJlbmd0aCA9IG5hbmQt PmJhc2UuZWNjcmVxLnN0cmVuZ3RoOwo+PiArCWVjYy0+c2l6ZSA9IG5hbmQtPmJhc2UuZWNjcmVx LnN0ZXBfc2l6ZTsKPj4gKwo+PiArCS8qCj4+ICsJKiBhbGlnbiBlY2NzdHJlbmd0aCBhbmQgZWNj c2l6ZQo+PiArCSogdGhpcyBjb250cm9sbGVyIG9ubHkgc3VwcG9ydHMgNTEyIGFuZCAxMDI0IHNp emVzCj4+ICsJKi8KPj4gKwlpZiAobmFuZC0+ZWNjLnNpemUgPCAxMDI0KSB7Cj4+ICsJaWYgKG10 ZC0+d3JpdGVzaXplID4gNTEyKSB7Cj4+ICsJbmFuZC0+ZWNjLnNpemUgPSAxMDI0Owo+PiArCW5h bmQtPmVjYy5zdHJlbmd0aCA8PD0gMTsKPj4gKwl9IGVsc2Ugewo+PiArCWRldl9lcnIoZGV2LCAi ZWNjLnNpemUgbm90IHN1cHBvcnRlZFxuIik7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+ PiArCX0gZWxzZSB7Cj4+ICsJbmFuZC0+ZWNjLnNpemUgPSAxMDI0Owo+PiArCX0KPj4gKwo+PiAr CWVjYy0+c3RlcHMgPSBtdGQtPndyaXRlc2l6ZSAvIGVjYy0+c2l6ZTsKPj4gKwltYXhfc3RyZW5n dGggPSAoKG10ZC0+b29ic2l6ZSAvIGVjYy0+c3RlcHMpIC0gNCkgKiA4IC8gMTQ7Cj4+ICsJaWYg KG1heF9zdHJlbmd0aCA+IG5mYy0+bWF4X2VjY19zdHJlbmd0aCkKPj4gKwltYXhfc3RyZW5ndGgg PSBuZmMtPm1heF9lY2Nfc3RyZW5ndGg7Cj4+ICsKPj4gKwlzdHJlbmd0aHMgPSBzdHJlbmd0aHNf djk7Cj4+ICsJaWYgKG5mYy0+bmZjX3ZlcnNpb24gPT0gNikKPj4gKwlzdHJlbmd0aHMgPSBzdHJl bmd0aHNfdjY7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4+ICsJaWYgKG1h eF9zdHJlbmd0aCA+PSBzdHJlbmd0aHNbaV0pCj4+ICsJYnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJ aWYgKGkgPj0gNCkgewo+PiArCWRldl9lcnIobmZjLT5kZXYsICJ1bnN1cHBvcnRlZCBzdHJlbmd0 aFxuIik7Cj4+ICsJcmV0dXJuIC1FTk9UU1VQUDsKPj4gKwl9Cj4+ICsKPj4gKwllY2MtPnN0cmVu Z3RoID0gc3RyZW5ndGhzW2ldOwo+PiArCX0KPj4gKwlya19uZmNfaHdfZWNjX3NldHVwKG10ZCwg ZWNjLCBlY2MtPnN0cmVuZ3RoKTsKPj4gKwlkZXZfaW5mbyhkZXYsICJlY2NzaXplICVkIGVjY3N0 cmVuZ3RoICVkXG4iLAo+PiArCW5hbmQtPmVjYy5zaXplLCBuYW5kLT5lY2Muc3RyZW5ndGgpOwo+ Cj5zcGFjZQo+Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcmtfbmZj X2F0dGFjaF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4+ICt7Cj4+ICsJc3RydWN0IG10 ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBtdGQtPmRldi5wYXJlbnQ7Cj4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29u dHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpya19uYW5k ID0gdG9fcmtfbmFuZChjaGlwKTsKPj4gKwlzdHJ1Y3QgbmFuZF9lY2NfY3RybCAqZWNjID0gJmNo aXAtPmVjYzsKPj4gKwlpbnQgbGVuOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoY2hpcC0+ b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKPj4gKwlkZXZfZXJyKGRldiwgIjE2Yml0cyBi dXN3aWR0aCBub3Qgc3VwcG9ydGVkIik7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiAr Cj4+ICsJcmV0ID0gcmtfbmZjX2VjY19pbml0KGRldiwgbXRkKTsKPj4gKwlpZiAocmV0KQo+PiAr CXJldHVybiByZXQ7Cj4+ICsJcmtfbmFuZC0+c3BhcmVfcGVyX3NlY3RvciA9IGVjYy0+Ynl0ZXMg KyBORkNfU1lTX0RBVEFfU0laRTsKPj4gKwo+PiArCS8qIENoZWNrIGJ1ZmZlciBmaXJzdCwgYXZv aWQgZHVwbGljYXRlIGFsbG9jIGJ1ZmZlciAqLwo+PiArCWlmIChuZmMtPmJ1ZmZlcikKPj4gKwly ZXR1cm4gMDsKPj4gKwo+PiArCWxlbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplOwo+ PiArCW5mYy0+YnVmZmVyID0gZGV2bV9remFsbG9jKGRldiwgbGVuLCBHRlBfS0VSTkVMIHwgR0ZQ X0RNQSk7Cj4+ICsJaWYgKCFuZmMtPmJ1ZmZlcikKPj4gKwlyZXR1cm7CoCAtRU5PTUVNOwo+Cj7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBeCj4KPkF2b2lkIHRo ZXNlIGV4dHJhIHNwYWNlcyBpbiBhbGwgeW91ciByZXR1cm4gc3RhdGVtZW50cy4KPgo+UGxlYXNl IHJ1biBzY3JpcHRzL2NoZWNrcGF0Y2gucGwgLS1zdHJpY3QKPgo+PiArCj4+ICsJbmZjLT5wYWdl X2J1ZiA9IG5mYy0+YnVmZmVyOwo+PiArCWxlbiA9IGVjYy0+c3RlcHMgKiAxMjg7Cj4KPsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBeCj5BIGRl ZmluaXRpb24gb2YgdGhpcyB3b3VsZCBiZSBncmVhdCB0b28KPgo+PiArCW5mYy0+b29iX2J1ZiA9 IGRldm1fa3phbGxvYyhkZXYsIGxlbiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwo+PiArCWlmICgh bmZjLT5vb2JfYnVmKSB7Cj4+ICsJZGV2bV9rZnJlZShkZXYsIG5mYy0+YnVmZmVyKTsKPj4gKwlu ZmMtPmJ1ZmZlciA9IE5VTEw7Cj4+ICsJbmZjLT5vb2JfYnVmID0gTlVMTDsKPj4gKwlyZXR1cm7C oCAtRU5PTUVNOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG5hbmRfY29udHJvbGxlcl9vcHMgcmtfbmZjX2NvbnRyb2xsZXJfb3Bz ID0gewo+PiArCS5hdHRhY2hfY2hpcCA9IHJrX25mY19hdHRhY2hfY2hpcCwKPj4gKwkuc2V0dXBf ZGF0YV9pbnRlcmZhY2UgPSBya19uZmNfc2V0dXBfZGF0YV9pbnRlcmZhY2UsCj4+ICt9Owo+PiAr Cj4+ICtzdGF0aWMgaW50IHJrX25mY19uYW5kX2NoaXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBya19uZmMgKm5mYywKPj4gKwnCoCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQo+PiAr ewo+PiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpjaGlwOwo+PiArCXN0cnVjdCBuYW5kX2No aXAgKm5hbmQ7Cj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQ7Cj4+ICsJaW50IG5zZWxzOwo+PiAr CXUzMiB0bXA7Cj4+ICsJaW50IHJldDsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWlmICghb2ZfZ2V0 X3Byb3BlcnR5KG5wLCAicmVnIiwgJm5zZWxzKSkKPj4gKwlyZXR1cm4gLUVOT0RFVjsKPj4gKwlu c2VscyAvPSBzaXplb2YodTMyKTsKPj4gKwlpZiAoIW5zZWxzIHx8IG5zZWxzID4gUktfTkFORF9N QVhfTlNFTFMpIHsKPj4gKwlkZXZfZXJyKGRldiwgImludmFsaWQgcmVnIHByb3BlcnR5IHNpemUg JWRcbiIsIG5zZWxzKTsKPj4gKwlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwljaGlw ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjaGlwKSArIG5zZWxzICogc2l6ZW9mKHU4KSwK Pj4gKwnCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFjaGlwKQo+PiArCXJldHVybiAtRU5P TUVNOwo+PiArCj4+ICsJY2hpcC0+bnNlbHMgPSBuc2VsczsKPj4gKwlmb3IgKGkgPSAwOyBpIDwg bnNlbHM7IGkrKykgewo+PiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAi cmVnIiwgaSwgJnRtcCk7Cj4+ICsJaWYgKHJldCkgewo+PiArCWRldl9lcnIoZGV2LCAicmVnIHBy b3BlcnR5IGZhaWx1cmUgOiAlZFxuIiwgcmV0KTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArCX0KPj4g Kwo+PiArCWlmICh0bXAgPj0gUktfTkFORF9NQVhfTlNFTFMpIHsKPj4gKwlkZXZfZXJyKGRldiwg ImludmFsaWQgQ1M6ICV1XG4iLCB0bXApOwo+PiArCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4g Kwo+PiArCWlmICh0ZXN0X2FuZF9zZXRfYml0KHRtcCwgJm5mYy0+YXNzaWduZWRfY3MpKSB7Cj4+ ICsJZGV2X2VycihkZXYsICJDUyAldSBhbHJlYWR5IGFzc2lnbmVkXG4iLCB0bXApOwo+PiArCXJl dHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWNoaXAtPnNlbHNbaV0gPSB0bXA7Cj4+ICsJ fQo+PiArCj4+ICsJbmFuZCA9ICZjaGlwLT5uYW5kOwo+PiArCW5hbmQtPmNvbnRyb2xsZXIgPSAm bmZjLT5jb250cm9sbGVyOwo+PiArCj4+ICsJbmFuZF9zZXRfZmxhc2hfbm9kZShuYW5kLCBucCk7 Cj4+ICsJbmFuZF9zZXRfY29udHJvbGxlcl9kYXRhKG5hbmQsIG5mYyk7Cj4+ICsKPj4gKwluYW5k LT5vcHRpb25zIHw9IE5BTkRfVVNFX0JPVU5DRV9CVUZGRVIgfCBOQU5EX05PX1NVQlBBR0VfV1JJ VEU7Cj4+ICsJbmFuZC0+YmJ0X29wdGlvbnMgPSBOQU5EX0JCVF9VU0VfRkxBU0ggfCBOQU5EX0JC VF9OT19PT0I7Cj4+ICsJbmFuZC0+bGVnYWN5LmRldl9yZWFkeSA9IHJrX25mY19kZXZfcmVhZHk7 Cj4+ICsJbmFuZC0+bGVnYWN5LnNlbGVjdF9jaGlwID0gcmtfbmZjX3NlbGVjdF9jaGlwOwo+PiAr CW5hbmQtPmxlZ2FjeS53cml0ZV9ieXRlID0gcmtfbmZjX3dyaXRlX2J5dGU7Cj4+ICsJbmFuZC0+ bGVnYWN5LndyaXRlX2J1ZiA9IHJrX25mY193cml0ZV9idWY7Cj4+ICsJbmFuZC0+bGVnYWN5LnJl YWRfYnl0ZSA9IHJrX25mY19yZWFkX2J5dGU7Cj4+ICsJbmFuZC0+bGVnYWN5LnJlYWRfYnVmID0g cmtfbmZjX3JlYWRfYnVmOwo+PiArCW5hbmQtPmxlZ2FjeS5jbWRfY3RybCA9IHJrX25mY19jbWRf Y3RybDsKPgo+WW91IHNob3VsZCBub3QgaW1wbGVtZW50IGFueSBsZWdhY3kgaG9va3MuCj4KPj4g Kwo+PiArCS8qIHNldCBkZWZhdWx0IG1vZGUgaW4gY2FzZSBkdCBlbnRyeSBpcyBtaXNzaW5nICov Cj4+ICsJbmFuZC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKPj4gKwo+PiArCW5hbmQtPmVjYy53 cml0ZV9wYWdlX3JhdyA9IHJrX25mY193cml0ZV9wYWdlX3JhdzsKPj4gKwluYW5kLT5lY2Mud3Jp dGVfcGFnZSA9IHJrX25mY193cml0ZV9wYWdlX2h3ZWNjOwo+PiArCW5hbmQtPmVjYy53cml0ZV9v b2JfcmF3ID0gcmtfbmZjX3dyaXRlX29vYl9zdGQ7Cj4+ICsJbmFuZC0+ZWNjLndyaXRlX29vYiA9 IHJrX25mY193cml0ZV9vb2Jfc3RkOwo+PiArCj4+ICsJbmFuZC0+ZWNjLnJlYWRfcGFnZV9yYXcg PSBya19uZmNfcmVhZF9wYWdlX3JhdzsKPj4gKwluYW5kLT5lY2MucmVhZF9wYWdlID0gcmtfbmZj X3JlYWRfcGFnZV9od2VjYzsKPj4gKwluYW5kLT5lY2MucmVhZF9vb2JfcmF3ID0gcmtfbmZjX3Jl YWRfb29iX3N0ZDsKPj4gKwluYW5kLT5lY2MucmVhZF9vb2IgPSBya19uZmNfcmVhZF9vb2Jfc3Rk Owo+PiArCj4+ICsJbXRkID0gbmFuZF90b19tdGQobmFuZCk7Cj4+ICsJbXRkLT5vd25lciA9IFRI SVNfTU9EVUxFOwo+PiArCW10ZC0+ZGV2LnBhcmVudCA9IGRldjsKPj4gKwltdGQtPm5hbWUgPSBU SElTX05BTUU7Cj4+ICsJbXRkX3NldF9vb2JsYXlvdXQobXRkLCAmcmtfbmZjX29vYmxheW91dF9v cHMpOwo+PiArCXJrX25mY19od19pbml0KG5mYyk7Cj4+ICsJcmV0ID0gbmFuZF9zY2FuKG5hbmQs IG5zZWxzKTsKPj4gKwlpZiAocmV0KQo+PiArCXJldHVybiByZXQ7Cj4+ICsJcmV0ID0gbXRkX2Rl dmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOwo+PiArCWlmIChyZXQpIHsKPj4gKwlkZXZfZXJy KGRldiwgIm10ZCBwYXJzZSBwYXJ0aXRpb24gZXJyb3JcbiIpOwo+PiArCW5hbmRfcmVsZWFzZShu YW5kKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWxpc3RfYWRkX3RhaWwoJmNo aXAtPm5vZGUsICZuZmMtPmNoaXBzKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IHJrX25mY19uYW5kX2NoaXBzX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgcmtfbmZjICpuZmMpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRl di0+b2Zfbm9kZTsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5hbmRfbnA7Cj4+ICsJaW50IHJl dCA9IC1FSU5WQUw7Cj4+ICsJaW50IHRtcDsKPj4gKwo+PiArCWZvcl9lYWNoX2NoaWxkX29mX25v ZGUobnAsIG5hbmRfbnApIHsKPj4gKwl0bXAgPSBya19uZmNfbmFuZF9jaGlwX2luaXQoZGV2LCBu ZmMsIG5hbmRfbnApOwo+PiArCWlmICh0bXApIHsKPj4gKwlvZl9ub2RlX3B1dChuYW5kX25wKTsK Pj4gKwlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwkvKiBBdCBsZWFzdCBvbmUgbmFuZCBjaGlwIGlz IGluaXRpYWxpemVkICovCj4+ICsJcmV0ID0gMDsKPj4gKwl9Cj4+ICsJcmV0dXJuIHJldDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcmtfbmZjX2lkX3Rh YmxlW10gPSB7Cj4+ICsJey5jb21wYXRpYmxlID0gInJvY2tjaGlwLG5mYyJ9LAo+PiArCXt9Cj4+ ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcmtfbmZjX2lkX3RhYmxlKTsKPj4gKwo+ PiArc3RhdGljIGludCBya19uZmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK Pj4gK3sKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiArCXN0cnVjdCBy a19uZmMgKm5mYzsKPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPj4gKwlpbnQgcmV0LCBpcnE7 Cj4+ICsKPj4gKwluZmMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5mYyksIEdGUF9LRVJO RUwpOwo+PiArCWlmICghbmZjKQo+PiArCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJbmFuZF9j b250cm9sbGVyX2luaXQoJm5mYy0+Y29udHJvbGxlcik7Cj4+ICsJSU5JVF9MSVNUX0hFQUQoJm5m Yy0+Y2hpcHMpOwo+PiArCW5mYy0+Y29udHJvbGxlci5vcHMgPSAmcmtfbmZjX2NvbnRyb2xsZXJf b3BzOwo+PiArCW5mYy0+ZGV2ID0gZGV2Owo+PiArCj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPj4gKwluZmMtPnJlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+PiArCWlmIChJU19FUlIobmZjLT5yZWdzKSkgewo+ PiArCXJldCA9IFBUUl9FUlIobmZjLT5yZWdzKTsKPj4gKwlnb3RvIHJlbGVhc2VfbmZjOwo+PiAr CX0KPj4gKwluZmMtPmNsay5uZmNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImNsa19uZmMiKTsK Pj4gKwlpZiAoSVNfRVJSKG5mYy0+Y2xrLm5mY19jbGspKSB7Cj4+ICsJZGV2X2VycihkZXYsICJu byBjbGtcbiIpOwo+PiArCXJldCA9IFBUUl9FUlIobmZjLT5jbGsubmZjX2Nsayk7Cj4+ICsJZ290 byByZWxlYXNlX25mYzsKPj4gKwl9Cj4+ICsJbmZjLT5jbGsuYWhiX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJjbGtfYWhiIik7Cj4+ICsJaWYgKElTX0VSUihuZmMtPmNsay5haGJfY2xrKSkgewo+ PiArCWRldl9lcnIoZGV2LCAibm8gcGFkIGNsa1xuIik7Cj4+ICsJcmV0ID0gUFRSX0VSUihuZmMt PmNsay5haGJfY2xrKTsKPj4gKwlnb3RvIHJlbGVhc2VfbmZjOwo+PiArCX0KPj4gKwlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAiY2xvY2stcmF0ZXMiLAo+PiArCcKgwqDC oCAmbmZjLT5jbGsubmZjX3JhdGUpKQo+PiArCW5mYy0+Y2xrLm5mY19yYXRlID0gUktfREVGQVVM VF9DTE9DS19SQVRFOwo+PiArCWNsa19zZXRfcmF0ZShuZmMtPmNsay5uZmNfY2xrLCBuZmMtPmNs ay5uZmNfcmF0ZSk7Cj4+ICsKPj4gKwlyZXQgPSBya19uZmNfZW5hYmxlX2NsayhkZXYsICZuZmMt PmNsayk7Cj4+ICsJaWYgKHJldCkKPj4gKwlnb3RvIHJlbGVhc2VfbmZjOwo+PiArCj4+ICsJaXJx ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPj4gKwlpZiAoaXJxIDwgMCkgewo+PiArCWRl dl9lcnIoZGV2LCAibm8gbmZjIGlycSByZXNvdXJjZVxuIik7Cj4+ICsJcmV0ID0gLUVJTlZBTDsK Pj4gKwlnb3RvIGNsa19kaXNhYmxlOwo+PiArCX0KPj4gKwo+PiArCWlmIChuZmMtPm5mY192ZXJz aW9uID09IDYpCj4+ICsJbmZjX3dyaXRlbChuZmMsIDAsIE5GQ19JTlRFTl9WNik7Cj4+ICsJZWxz ZQo+PiArCW5mY193cml0ZWwobmZjLCAwLCBORkNfSU5URU5fVjkpOwo+PiArCXJldCA9IGRldm1f cmVxdWVzdF9pcnEoZGV2LCBpcnEsIHJrX25mY19pcnEsIDB4MCwgInJrLW5hbmQiLCBuZmMpOwo+ PiArCWlmIChyZXQpIHsKPj4gKwlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IG5mYyBp cnFcbiIpOwo+PiArCWdvdG8gY2xrX2Rpc2FibGU7Cj4+ICsJfQo+PiArCj4+ICsJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgbmZjKTsKPj4gKwo+PiArCXJldCA9IHJrX25mY19uYW5kX2NoaXBz X2luaXQoZGV2LCBuZmMpOwo+PiArCWlmIChyZXQpIHsKPj4gKwlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBpbml0IG5hbmQgY2hpcHNcbiIpOwo+PiArCWdvdG8gY2xrX2Rpc2FibGU7Cj4+ICsJfQo+ PiArCXJldHVybiAwOwo+PiArCj4+ICtjbGtfZGlzYWJsZToKPj4gKwlya19uZmNfZGlzYWJsZV9j bGsoJm5mYy0+Y2xrKTsKPj4gK3JlbGVhc2VfbmZjOgo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgcmtfbmZjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiArewo+PiArCXN0cnVjdCBya19uZmMgKm5mYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOwo+PiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpjaGlwOwo+PiArCj4+ICsJd2hp bGUgKCFsaXN0X2VtcHR5KCZuZmMtPmNoaXBzKSkgewo+PiArCWNoaXAgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZuZmMtPmNoaXBzLCBzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCwKPj4gKwlub2RlKTsKPj4g KwluYW5kX3JlbGVhc2UoJmNoaXAtPm5hbmQpOwo+PiArCWxpc3RfZGVsKCZjaGlwLT5ub2RlKTsK Pj4gKwl9Cj4+ICsKPj4gKwlya19uZmNfZGlzYWJsZV9jbGsoJm5mYy0+Y2xrKTsKPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCj4+ICtzdGF0 aWMgaW50IHJrX25mY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1 Y3QgcmtfbmZjICpuZmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4gKwo+PiArCXJrX25mY19k aXNhYmxlX2NsaygmbmZjLT5jbGspOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgcmtfbmZjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJ c3RydWN0IHJrX25mYyAqbmZjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ICsJc3RydWN0IHJr X25mY19uYW5kX2NoaXAgKmNoaXA7Cj4+ICsJc3RydWN0IG5hbmRfY2hpcCAqbmFuZDsKPj4gKwlp bnQgcmV0Owo+PiArCXUzMiBpOwo+PiArCj4+ICsJdWRlbGF5KDIwMCk7Cj4+ICsKPj4gKwlyZXQg PSBya19uZmNfZW5hYmxlX2NsayhkZXYsICZuZmMtPmNsayk7Cj4+ICsJaWYgKHJldCkKPj4gKwly ZXR1cm4gcmV0Owo+PiArCj4+ICsJLyogcmVzZXQgTkFORCBjaGlwIGlmIFZDQyB3YXMgcG93ZXJl ZCBvZmYgKi8KPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaXAsICZuZmMtPmNoaXBzLCBub2Rl KSB7Cj4+ICsJbmFuZCA9ICZjaGlwLT5uYW5kOwo+PiArCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5u c2VsczsgaSsrKQo+PiArCW5hbmRfcmVzZXQobmFuZCwgaSk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhya19uZmNfcG1f b3BzLCBya19uZmNfc3VzcGVuZCwgcmtfbmZjX3Jlc3VtZSk7Cj4KPkkgdGhpbmsgeW91IGNhbiBk ZWZpbmUgYSBkZXZfcG1fb3BzIHN0dWN0dXJlIHRvIGNvbnRhaW4gYQo+U0VUX1NZU1RFTV9TTEVF UF9QTV9PUFMoKnN1c3BlbmQsICpyZXN1bWUpIGFuZCB0aGlzIHdheSB5b3UgY2FuCj5lbnRpcmVs eSBnZXQgcmlkIG9mIHRoZSAjaWZkZWYgY29uZGl0aW9uYWxzLgo+Cj4+ICsjZW5kaWYKPj4gKwo+ PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmtfbmZjX2RyaXZlciA9IHsKPj4gKwku cHJvYmXCoCA9IHJrX25mY19wcm9iZSwKPj4gKwkucmVtb3ZlID0gcmtfbmZjX3JlbW92ZSwKPj4g KwkuZHJpdmVyID0gewo+PiArCS5uYW1lwqAgPSBUSElTX05BTUUsCj4+ICsJLm9mX21hdGNoX3Rh YmxlID0gcmtfbmZjX2lkX3RhYmxlLAo+PiArI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+PiArCS5w bSA9ICZya19uZmNfcG1fb3BzLAo+PiArI2VuZGlmCj4+ICsJfSwKPj4gK307Cj4+ICsKPj4gK21v ZHVsZV9wbGF0Zm9ybV9kcml2ZXIocmtfbmZjX2RyaXZlcik7Cj4+ICsKPj4gK01PRFVMRV9MSUNF TlNFKCJEdWFsIE1JVC9HUEwiKTsKPj4gK01PRFVMRV9BVVRIT1IoIllpZmVuZyBaaGFvIDx5aWZl bmcuemhhb0Byb2NrLWNoaXBzLmNvbT4iKTsKPj4gK01PRFVMRV9ERVNDUklQVElPTigiUm9ja2No aXAgTmFuZCBGbGFzaCBDb250cm9sbGVyIERyaXZlciIpOwo+PiArTU9EVUxFX0FMSUFTKCJwbGF0 Zm9ybTpyb2NrY2hpcF9uYW5kIik7Cj4KPgo+VGhhbmtzLAo+TWlxdcOobAo+Cj4KPgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVRE IGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtbXRkLwo=