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=-15.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 A03C1C433C1 for ; Wed, 24 Mar 2021 04:43:49 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 21D6461992 for ; Wed, 24 Mar 2021 04:43:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 21D6461992 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 5D3E5400A9; Wed, 24 Mar 2021 04:43:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yNe-2ZQwJqMO; Wed, 24 Mar 2021 04:43:46 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTP id 81CC840627; Wed, 24 Mar 2021 04:43:45 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 580DDC000E; Wed, 24 Mar 2021 04:43:45 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id ECCA7C000A for ; Wed, 24 Mar 2021 04:43:43 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id C946A40101 for ; Wed, 24 Mar 2021 04:43:43 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp2.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JHfPhv1zCpzp for ; Wed, 24 Mar 2021 04:43:41 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id 6F3D040100 for ; Wed, 24 Mar 2021 04:43:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1616561020; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=EiaEqXx6qT28l4zOxLnanFGgeMeSrgYlJAKnBENDoWI=; b=iMhB4Ng51IFYuYeLH+e2XT0v1SK9rkT3yL5cYopYvdrgBq/7xS+1zIf75QnC/1y2gTuAx3 Ir7n4ah1UCbhNgB6BV/SFUkURFpy7KBc9VUafrUmJSkOW3wsCElXfdkZLOFKArkgXRvbSp p6o78R5t6upCD1A+Gf3Ru4rgqwF0JjU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-263-QOgrBkYEOjqNzQvzm6DbeA-1; Wed, 24 Mar 2021 00:43:35 -0400 X-MC-Unique: QOgrBkYEOjqNzQvzm6DbeA-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 182661018F64; Wed, 24 Mar 2021 04:43:33 +0000 (UTC) Received: from wangxiaodeMacBook-Air.local (ovpn-12-134.pek2.redhat.com [10.72.12.134]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9A50760877; Wed, 24 Mar 2021 04:43:16 +0000 (UTC) Subject: Re: [PATCH v5 09/11] vduse: Introduce VDUSE - vDPA Device in Userspace To: Xie Yongji , mst@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, parav@nvidia.com, bob.liu@oracle.com, hch@infradead.org, rdunlap@infradead.org, willy@infradead.org, viro@zeniv.linux.org.uk, axboe@kernel.dk, bcrl@kvack.org, corbet@lwn.net, mika.penttila@nextfour.com, dan.carpenter@oracle.com References: <20210315053721.189-1-xieyongji@bytedance.com> <20210315053721.189-10-xieyongji@bytedance.com> From: Jason Wang Message-ID: <21c780a3-b9ea-4705-9ede-abc73496236c@redhat.com> Date: Wed, 24 Mar 2021 12:43:15 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <20210315053721.189-10-xieyongji@bytedance.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Cc: linux-fsdevel@vger.kernel.org, netdev@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIxLzMvMTUg5LiL5Y2IMTozNywgWGllIFlvbmdqaSDlhpnpgZM6Cj4gVGhpcyBWRFVT RSBkcml2ZXIgZW5hYmxlcyBpbXBsZW1lbnRpbmcgdkRQQSBkZXZpY2VzIGluIHVzZXJzcGFjZS4K PiBCb3RoIGNvbnRyb2wgcGF0aCBhbmQgZGF0YSBwYXRoIG9mIHZEUEEgZGV2aWNlcyB3aWxsIGJl IGFibGUgdG8KPiBiZSBoYW5kbGVkIGluIHVzZXJzcGFjZS4KPgo+IEluIHRoZSBjb250cm9sIHBh dGgsIHRoZSBWRFVTRSBkcml2ZXIgd2lsbCBtYWtlIHVzZSBvZiBtZXNzYWdlCj4gbWVjaG5pc20g dG8gZm9yd2FyZCB0aGUgY29uZmlnIG9wZXJhdGlvbiBmcm9tIHZkcGEgYnVzIGRyaXZlcgo+IHRv IHVzZXJzcGFjZS4gVXNlcnNwYWNlIGNhbiB1c2UgcmVhZCgpL3dyaXRlKCkgdG8gcmVjZWl2ZS9y ZXBseQo+IHRob3NlIGNvbnRyb2wgbWVzc2FnZXMuCj4KPiBJbiB0aGUgZGF0YSBwYXRoLCB1c2Vy c3BhY2UgY2FuIHVzZSBtbWFwKCkgdG8gYWNjZXNzIHZEUEEgZGV2aWNlJ3MKPiBpb3ZhIHJlZ2lv bnMgb2J0YWluZWQgdGhyb3VnaCBWRFVTRV9JT1RMQl9HRVRfRU5UUlkgaW9jdGwuIEJlc2lkZXMs Cj4gdXNlcnNwYWNlIGNhbiB1c2UgaW9jdGwoKSB0byBpbmplY3QgaW50ZXJydXB0IGFuZCB1c2Ug dGhlIGV2ZW50ZmQKPiBtZWNoYW5pc20gdG8gcmVjZWl2ZSB2aXJ0cXVldWUga2lja3MuCj4KPiBT aWduZWQtb2ZmLWJ5OiBYaWUgWW9uZ2ppIDx4aWV5b25namlAYnl0ZWRhbmNlLmNvbT4KPiAtLS0K PiAgIERvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0IHwg ICAgMSArCj4gICBkcml2ZXJzL3ZkcGEvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMTAgKwo+ICAgZHJpdmVycy92ZHBhL01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAxICsKPiAgIGRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgIHwgICAgNSArCj4gICBkcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3Zk dXNlX2Rldi5jICAgICAgICAgICAgICAgICB8IDEyODEgKysrKysrKysrKysrKysrKysrKysKPiAg IGluY2x1ZGUvdWFwaS9saW51eC92ZHVzZS5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1 MyArKysKPiAgIDYgZmlsZXMgY2hhbmdlZCwgMTQ1MSBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy92ZHBhL3ZkcGFfdXNlci9NYWtlZmlsZQo+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdmRwYS92ZHBhX3VzZXIvdmR1c2VfZGV2LmMKPiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGludXgvdmR1c2UuaAo+Cj4gZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0IGIvRG9jdW1l bnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QKPiBpbmRleCBhNGM3 NWEyOGM4MzkuLjcxNzIyZTZmOGYyMyAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJz cGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdAo+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNl cnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0Cj4gQEAgLTMwMCw2ICszMDAsNyBAQCBD b2RlICBTZXEjICAgIEluY2x1ZGUgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb21tZW50cwo+ICAgJ3onICAgMTAtNEYgIGRyaXZlcnMvczM5MC9jcnlwdG8v emNyeXB0X2FwaS5oICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QhCj4gICAnfCcgICAw MC03RiAgbGludXgvbWVkaWEuaAo+ICAgMHg4MCAgMDAtMUYgIGxpbnV4L2ZiLmgKPiArMHg4MSAg MDAtMUYgIGxpbnV4L3ZkdXNlLmgKPiAgIDB4ODkgIDAwLTA2ICBhcmNoL3g4Ni9pbmNsdWRlL2Fz bS9zb2NraW9zLmgKPiAgIDB4ODkgIDBCLURGICBsaW51eC9zb2NraW9zLmgKPiAgIDB4ODkgIEUw LUVGICBsaW51eC9zb2NraW9zLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNJT0NQUk9UT1BSSVZBVEUgcmFuZ2UKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZHBhL0tj b25maWcgYi9kcml2ZXJzL3ZkcGEvS2NvbmZpZwo+IGluZGV4IGEyNDU4MDljOTlkMC4uNzdhMWRh NTIyYzIxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdmRwYS9LY29uZmlnCj4gKysrIGIvZHJpdmVy cy92ZHBhL0tjb25maWcKPiBAQCAtMjUsNiArMjUsMTYgQEAgY29uZmlnIFZEUEFfU0lNX05FVAo+ ICAgCWhlbHAKPiAgIAkgIHZEUEEgbmV0d29ya2luZyBkZXZpY2Ugc2ltdWxhdG9yIHdoaWNoIGxv b3BzIFRYIHRyYWZmaWMgYmFjayB0byBSWC4KPiAgIAo+ICtjb25maWcgVkRQQV9VU0VSCj4gKwl0 cmlzdGF0ZSAiVkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydCIKPiArCWRl cGVuZHMgb24gRVZFTlRGRCAmJiBNTVUgJiYgSEFTX0RNQQo+ICsJc2VsZWN0IERNQV9PUFMKPiAr CXNlbGVjdCBWSE9TVF9JT1RMQgo+ICsJc2VsZWN0IElPTU1VX0lPVkEKPiArCWhlbHAKPiArCSAg V2l0aCBWRFVTRSBpdCBpcyBwb3NzaWJsZSB0byBlbXVsYXRlIGEgdkRQQSBEZXZpY2UKPiArCSAg aW4gYSB1c2Vyc3BhY2UgcHJvZ3JhbS4KPiArCj4gICBjb25maWcgSUZDVkYKPiAgIAl0cmlzdGF0 ZSAiSW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyIgo+ICAgCWRlcGVuZHMgb24gUENJX01TSQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3ZkcGEvTWFrZWZpbGUgYi9kcml2ZXJzL3ZkcGEvTWFrZWZpbGUK PiBpbmRleCA2N2ZlN2YzZDY5NDMuLmYwMmViZWQzM2YxOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L3ZkcGEvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3ZkcGEvTWFrZWZpbGUKPiBAQCAtMSw2ICsx LDcgQEAKPiAgICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAgIG9iai0kKENP TkZJR19WRFBBKSArPSB2ZHBhLm8KPiAgIG9iai0kKENPTkZJR19WRFBBX1NJTSkgKz0gdmRwYV9z aW0vCj4gK29iai0kKENPTkZJR19WRFBBX1VTRVIpICs9IHZkcGFfdXNlci8KPiAgIG9iai0kKENP TkZJR19JRkNWRikgICAgKz0gaWZjdmYvCj4gICBvYmotJChDT05GSUdfTUxYNV9WRFBBKSArPSBt bHg1Lwo+ICAgb2JqLSQoQ09ORklHX1ZQX1ZEUEEpICAgICs9IHZpcnRpb19wY2kvCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmRwYS92ZHBhX3VzZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3ZkcGEvdmRw YV91c2VyL01ha2VmaWxlCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjI2MGUwYjI2YWY5OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3ZkcGEvdmRw YV91c2VyL01ha2VmaWxlCj4gQEAgLTAsMCArMSw1IEBACj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKPiArCj4gK3ZkdXNlLXkgOj0gdmR1c2VfZGV2Lm8gaW92YV9kb21haW4u bwo+ICsKPiArb2JqLSQoQ09ORklHX1ZEUEFfVVNFUikgKz0gdmR1c2Uubwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3ZkcGEvdmRwYV91c2VyL3ZkdXNlX2Rldi5jIGIvZHJpdmVycy92ZHBhL3ZkcGFf dXNlci92ZHVzZV9kZXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi4wN2QwYWU5MmQ0NzAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy92ZHBhL3Zk cGFfdXNlci92ZHVzZV9kZXYuYwo+IEBAIC0wLDAgKzEsMTI4MSBAQAo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIFZEVVNFOiB2RFBBIERldmlj ZSBpbiBVc2Vyc3BhY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIwIEJ5dGVkYW5jZSBJ bmMuIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiAr ICogQXV0aG9yOiBYaWUgWW9uZ2ppIDx4aWV5b25namlAYnl0ZWRhbmNlLmNvbT4KPiArICoKPiAr ICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9jZGV2Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2V2ZW50ZmQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3dhaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXAtb3BzLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9wb2xsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC91aW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZkcGEuaD4KPiArI2luY2x1ZGUgPHVhcGkvbGlu dXgvdmR1c2UuaD4KPiArI2luY2x1ZGUgPHVhcGkvbGludXgvdmRwYS5oPgo+ICsjaW5jbHVkZSA8 dWFwaS9saW51eC92aXJ0aW9fY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNl dGFibGUuaD4KPiArCj4gKyNpbmNsdWRlICJpb3ZhX2RvbWFpbi5oIgo+ICsKPiArI2RlZmluZSBE UlZfVkVSU0lPTiAgIjEuMCIKPiArI2RlZmluZSBEUlZfQVVUSE9SICAgIllvbmdqaSBYaWUgPHhp ZXlvbmdqaUBieXRlZGFuY2UuY29tPiIKPiArI2RlZmluZSBEUlZfREVTQyAgICAgInZEUEEgRGV2 aWNlIGluIFVzZXJzcGFjZSIKPiArI2RlZmluZSBEUlZfTElDRU5TRSAgIkdQTCB2MiIKPiArCj4g KyNkZWZpbmUgVkRVU0VfREVWX01BWCAoMVUgPDwgTUlOT1JCSVRTKQo+ICsKPiArc3RydWN0IHZk dXNlX3ZpcnRxdWV1ZSB7Cj4gKwl1MTYgaW5kZXg7Cj4gKwlib29sIHJlYWR5Owo+ICsJc3Bpbmxv Y2tfdCBraWNrX2xvY2s7Cj4gKwlzcGlubG9ja190IGlycV9sb2NrOwo+ICsJc3RydWN0IGV2ZW50 ZmRfY3R4ICpraWNrZmQ7Cj4gKwlzdHJ1Y3QgdmRwYV9jYWxsYmFjayBjYjsKPiArCXN0cnVjdCB3 b3JrX3N0cnVjdCBpbmplY3Q7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2Owo+ICsKPiAr c3RydWN0IHZkdXNlX3ZkcGEgewo+ICsJc3RydWN0IHZkcGFfZGV2aWNlIHZkcGE7Cj4gKwlzdHJ1 Y3QgdmR1c2VfZGV2ICpkZXY7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2IHsKPiArCXN0 cnVjdCB2ZHVzZV92ZHBhICp2ZGV2Owo+ICsJc3RydWN0IGRldmljZSBkZXY7Cj4gKwlzdHJ1Y3Qg Y2RldiBjZGV2Owo+ICsJc3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnFzOwo+ICsJc3RydWN0IHZk dXNlX2lvdmFfZG9tYWluICpkb21haW47Cj4gKwlzcGlubG9ja190IG1zZ19sb2NrOwo+ICsJYXRv bWljNjRfdCBtc2dfdW5pcXVlOwo+ICsJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7Cj4gKwlzdHJ1 Y3QgbGlzdF9oZWFkIHNlbmRfbGlzdDsKPiArCXN0cnVjdCBsaXN0X2hlYWQgcmVjdl9saXN0Owo+ ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJYm9vbCBjb25uZWN0ZWQ7Cj4gKwlpbnQgbWlu b3I7Cj4gKwl1MTYgdnFfc2l6ZV9tYXg7Cj4gKwl1MTYgdnFfbnVtOwo+ICsJdTMyIHZxX2FsaWdu Owo+ICsJdTMyIGRldmljZV9pZDsKPiArCXUzMiB2ZW5kb3JfaWQ7Cj4gK307Cj4gKwo+ICtzdHJ1 Y3QgdmR1c2VfZGV2X21zZyB7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X3JlcXVlc3QgcmVxOwo+ICsJ c3RydWN0IHZkdXNlX2Rldl9yZXNwb25zZSByZXNwOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0 Owo+ICsJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7Cj4gKwlib29sIGNvbXBsZXRlZDsKPiArfTsK PiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9ib3VuY2Vfc2l6ZSA9ICg2NCAqIDEwMjQg KiAxMDI0KTsKPiArbW9kdWxlX3BhcmFtKG1heF9ib3VuY2Vfc2l6ZSwgdWxvbmcsIDA0NDQpOwo+ ICtNT0RVTEVfUEFSTV9ERVNDKG1heF9ib3VuY2Vfc2l6ZSwgIk1heGltdW0gYm91bmNlIGJ1ZmZl ciBzaXplLiAoZGVmYXVsdDogNjRNKSIpOwo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4 X2lvdmFfc2l6ZSA9ICgxMjggKiAxMDI0ICogMTAyNCk7Cj4gK21vZHVsZV9wYXJhbShtYXhfaW92 YV9zaXplLCB1bG9uZywgMDQ0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MobWF4X2lvdmFfc2l6ZSwg Ik1heGltdW0gaW92YSBzcGFjZSBzaXplIChkZWZhdWx0OiAxMjhNKSIpOwo+ICsKPiArc3RhdGlj IERFRklORV9NVVRFWCh2ZHVzZV9sb2NrKTsKPiArc3RhdGljIExJU1RfSEVBRCh2ZHVzZV9kZXZz KTsKPiArc3RhdGljIERFRklORV9JREEodmR1c2VfaWRhKTsKPiArCj4gK3N0YXRpYyBkZXZfdCB2 ZHVzZV9tYWpvcjsKPiArc3RhdGljIHN0cnVjdCBjbGFzcyAqdmR1c2VfY2xhc3M7Cj4gK3N0YXRp YyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdmR1c2VfaXJxX3dxOwo+ICsKPiArc3RhdGljIGlu bGluZSBzdHJ1Y3QgdmR1c2VfZGV2ICp2ZHBhX3RvX3ZkdXNlKHN0cnVjdCB2ZHBhX2RldmljZSAq dmRwYSkKPiArewo+ICsJc3RydWN0IHZkdXNlX3ZkcGEgKnZkZXYgPSBjb250YWluZXJfb2YodmRw YSwgc3RydWN0IHZkdXNlX3ZkcGEsIHZkcGEpOwo+ICsKPiArCXJldHVybiB2ZGV2LT5kZXY7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZkdXNlX2RldiAqZGV2X3RvX3ZkdXNlKHN0 cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gZGV2 X3RvX3ZkcGEoZGV2KTsKPiArCj4gKwlyZXR1cm4gdmRwYV90b192ZHVzZSh2ZHBhKTsKPiArfQo+ ICsKPiArc3RhdGljIHN0cnVjdCB2ZHVzZV9kZXZfbXNnICp2ZHVzZV9maW5kX21zZyhzdHJ1Y3Qg bGlzdF9oZWFkICpoZWFkLAo+ICsJCQkJCSAgICB1aW50MzJfdCByZXF1ZXN0X2lkKQo+ICt7Cj4g KwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqdG1wLCAqbXNnID0gTlVMTDsKPiArCj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KHRtcCwgaGVhZCwgbGlzdCkgewo+ICsJCWlmICh0bXAtPnJlcS5yZXF1ZXN0 X2lkID09IHJlcXVlc3RfaWQpIHsKPiArCQkJbXNnID0gdG1wOwo+ICsJCQlsaXN0X2RlbCgmdG1w LT5saXN0KTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBtc2c7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqdmR1c2VfZGVxdWV1ZV9tc2co c3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKPiArewo+ICsJc3RydWN0IHZkdXNlX2Rldl9tc2cgKm1z ZyA9IE5VTEw7Cj4gKwo+ICsJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Cj4gKwkJbXNnID0gbGlz dF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgdmR1c2VfZGV2X21zZywgbGlzdCk7Cj4gKwkJbGlz dF9kZWwoJm1zZy0+bGlzdCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG1zZzsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdmR1c2VfZW5xdWV1ZV9tc2coc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKPiAr CQkJICAgICAgc3RydWN0IHZkdXNlX2Rldl9tc2cgKm1zZykKPiArewo+ICsJbGlzdF9hZGRfdGFp bCgmbXNnLT5saXN0LCBoZWFkKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXZfbXNn X3N5bmMoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkgICAgICBzdHJ1Y3QgdmR1c2VfZGV2 X21zZyAqbXNnKQo+ICt7Cj4gKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtc2ctPndhaXRxKTsKPiAr CXNwaW5fbG9jaygmZGV2LT5tc2dfbG9jayk7Cj4gKwl2ZHVzZV9lbnF1ZXVlX21zZygmZGV2LT5z ZW5kX2xpc3QsIG1zZyk7Cj4gKwl3YWtlX3VwKCZkZXYtPndhaXRxKTsKPiArCXNwaW5fdW5sb2Nr KCZkZXYtPm1zZ19sb2NrKTsKPiArCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShtc2ctPndhaXRx LCBtc2ctPmNvbXBsZXRlZCk7Cj4gKwlzcGluX2xvY2soJmRldi0+bXNnX2xvY2spOwo+ICsJaWYg KCFtc2ctPmNvbXBsZXRlZCkKPiArCQlsaXN0X2RlbCgmbXNnLT5saXN0KTsKPiArCXNwaW5fdW5s b2NrKCZkZXYtPm1zZ19sb2NrKTsKPiArCj4gKwlyZXR1cm4gKG1zZy0+cmVzcC5yZXN1bHQgPT0g VkRVU0VfUkVRVUVTVF9PSykgPyAwIDogLTE7Cj4gK30KPiArCj4gK3N0YXRpYyB1NjQgdmR1c2Vf ZGV2X2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX0dF VF9GRUFUVVJFUzsKPiArCW1zZy5yZXEucmVxdWVzdF9pZCA9IGF0b21pYzY0X2ZldGNoX2luYygm ZGV2LT5tc2dfdW5pcXVlKTsKCgpMZXQncyBpbnRyb2R1Y2UgYSBoZWxwZXIgZm9yIHRoZSBhdG9t aWM2NF9mZXRjaF9pbmMoKSBoZXJlLgoKCj4gKwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3lu YyhkZXYsICZtc2cpID8gMCA6IG1zZy5yZXNwLmYuZmVhdHVyZXM7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdmR1c2VfZGV2X3NldF9mZWF0dXJlcyhzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsIHU2NCBm ZWF0dXJlcykKPiArewo+ICsJc3RydWN0IHZkdXNlX2Rldl9tc2cgbXNnID0geyAwIH07Cj4gKwo+ ICsJbXNnLnJlcS50eXBlID0gVkRVU0VfU0VUX0ZFQVRVUkVTOwo+ICsJbXNnLnJlcS5yZXF1ZXN0 X2lkID0gYXRvbWljNjRfZmV0Y2hfaW5jKCZkZXYtPm1zZ191bmlxdWUpOwo+ICsJbXNnLnJlcS5m LmZlYXR1cmVzID0gZmVhdHVyZXM7Cj4gKwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhk ZXYsICZtc2cpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTggdmR1c2VfZGV2X2dldF9zdGF0dXMoc3Ry dWN0IHZkdXNlX2RldiAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7 IDAgfTsKPiArCj4gKwltc2cucmVxLnR5cGUgPSBWRFVTRV9HRVRfU1RBVFVTOwo+ICsJbXNnLnJl cS5yZXF1ZXN0X2lkID0gYXRvbWljNjRfZmV0Y2hfaW5jKCZkZXYtPm1zZ191bmlxdWUpOwo+ICsK PiArCXJldHVybiB2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKSA/IDAgOiBtc2cucmVzcC5z LnN0YXR1czsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3NldF9zdGF0dXMoc3Ry dWN0IHZkdXNlX2RldiAqZGV2LCB1OCBzdGF0dXMpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXZf bXNnIG1zZyA9IHsgMCB9Owo+ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX1NFVF9TVEFUVVM7 Cj4gKwltc2cucmVxLnJlcXVlc3RfaWQgPSBhdG9taWM2NF9mZXRjaF9pbmMoJmRldi0+bXNnX3Vu aXF1ZSk7Cj4gKwltc2cucmVxLnMuc3RhdHVzID0gc3RhdHVzOwo+ICsKPiArCXZkdXNlX2Rldl9t c2dfc3luYyhkZXYsICZtc2cpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV9kZXZfZ2V0 X2NvbmZpZyhzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsCj4gKwkJ CQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 X21zZyBtc2cgPSB7IDAgfTsKPiArCXVuc2lnbmVkIGludCBzejsKPiArCj4gKwl3aGlsZSAobGVu KSB7Cj4gKwkJc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKG1zZy5yZXEuY29u ZmlnLmRhdGEpKTsKPiArCQltc2cucmVxLnR5cGUgPSBWRFVTRV9HRVRfQ09ORklHOwo+ICsJCW1z Zy5yZXEucmVxdWVzdF9pZCA9IGF0b21pYzY0X2ZldGNoX2luYygmZGV2LT5tc2dfdW5pcXVlKTsK PiArCQltc2cucmVxLmNvbmZpZy5vZmZzZXQgPSBvZmZzZXQ7Cj4gKwkJbXNnLnJlcS5jb25maWcu bGVuID0gc3o7Cj4gKwkJdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4gKwkJbWVtY3B5 KGJ1ZiwgbXNnLnJlc3AuY29uZmlnLmRhdGEsIHN6KTsKPiArCQlidWYgKz0gc3o7Cj4gKwkJb2Zm c2V0ICs9IHN6Owo+ICsJCWxlbiAtPSBzejsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dmR1c2VfZGV2X3NldF9jb25maWcoc3RydWN0IHZkdXNlX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQg b2Zmc2V0LAo+ICsJCQkJIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKPiArewo+ ICsJc3RydWN0IHZkdXNlX2Rldl9tc2cgbXNnID0geyAwIH07Cj4gKwl1bnNpZ25lZCBpbnQgc3o7 Cj4gKwo+ICsJd2hpbGUgKGxlbikgewo+ICsJCXN6ID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4s IHNpemVvZihtc2cucmVxLmNvbmZpZy5kYXRhKSk7Cj4gKwkJbXNnLnJlcS50eXBlID0gVkRVU0Vf U0VUX0NPTkZJRzsKPiArCQltc2cucmVxLnJlcXVlc3RfaWQgPSBhdG9taWM2NF9mZXRjaF9pbmMo JmRldi0+bXNnX3VuaXF1ZSk7Cj4gKwkJbXNnLnJlcS5jb25maWcub2Zmc2V0ID0gb2Zmc2V0Owo+ ICsJCW1zZy5yZXEuY29uZmlnLmxlbiA9IHN6Owo+ICsJCW1lbWNweShtc2cucmVxLmNvbmZpZy5k YXRhLCBidWYsIHN6KTsKPiArCQl2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKTsKPiArCQli dWYgKz0gc3o7Cj4gKwkJb2Zmc2V0ICs9IHN6Owo+ICsJCWxlbiAtPSBzejsKPiArCX0KPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3NldF92cV9udW0oc3RydWN0IHZkdXNlX2RldiAq ZGV2LAo+ICsJCQkJIHN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxLCB1MzIgbnVtKQo+ICt7Cj4g KwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cgPSB7IDAgfTsKPiArCj4gKwltc2cucmVxLnR5cGUg PSBWRFVTRV9TRVRfVlFfTlVNOwo+ICsJbXNnLnJlcS5yZXF1ZXN0X2lkID0gYXRvbWljNjRfZmV0 Y2hfaW5jKCZkZXYtPm1zZ191bmlxdWUpOwo+ICsJbXNnLnJlcS52cV9udW0uaW5kZXggPSB2cS0+ aW5kZXg7Cj4gKwltc2cucmVxLnZxX251bS5udW0gPSBudW07Cj4gKwo+ICsJdmR1c2VfZGV2X21z Z19zeW5jKGRldiwgJm1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfZGV2X3NldF92 cV9hZGRyKHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwKPiArCQkJCSBzdHJ1Y3QgdmR1c2VfdmlydHF1 ZXVlICp2cSwgdTY0IGRlc2NfYWRkciwKPiArCQkJCSB1NjQgZHJpdmVyX2FkZHIsIHU2NCBkZXZp Y2VfYWRkcikKPiArewo+ICsJc3RydWN0IHZkdXNlX2Rldl9tc2cgbXNnID0geyAwIH07Cj4gKwo+ ICsJbXNnLnJlcS50eXBlID0gVkRVU0VfU0VUX1ZRX0FERFI7Cj4gKwltc2cucmVxLnJlcXVlc3Rf aWQgPSBhdG9taWM2NF9mZXRjaF9pbmMoJmRldi0+bXNnX3VuaXF1ZSk7Cj4gKwltc2cucmVxLnZx X2FkZHIuaW5kZXggPSB2cS0+aW5kZXg7Cj4gKwltc2cucmVxLnZxX2FkZHIuZGVzY19hZGRyID0g ZGVzY19hZGRyOwo+ICsJbXNnLnJlcS52cV9hZGRyLmRyaXZlcl9hZGRyID0gZHJpdmVyX2FkZHI7 Cj4gKwltc2cucmVxLnZxX2FkZHIuZGV2aWNlX2FkZHIgPSBkZXZpY2VfYWRkcjsKPiArCj4gKwly ZXR1cm4gdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZkdXNlX2Rldl9zZXRfdnFfcmVhZHkoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkJ c3RydWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEsIGJvb2wgcmVhZHkpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX1NF VF9WUV9SRUFEWTsKPiArCW1zZy5yZXEucmVxdWVzdF9pZCA9IGF0b21pYzY0X2ZldGNoX2luYygm ZGV2LT5tc2dfdW5pcXVlKTsKPiArCW1zZy5yZXEudnFfcmVhZHkuaW5kZXggPSB2cS0+aW5kZXg7 Cj4gKwltc2cucmVxLnZxX3JlYWR5LnJlYWR5ID0gcmVhZHk7Cj4gKwo+ICsJdmR1c2VfZGV2X21z Z19zeW5jKGRldiwgJm1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHZkdXNlX2Rldl9nZXRf dnFfcmVhZHkoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkJICAgc3RydWN0IHZkdXNlX3Zp cnRxdWV1ZSAqdnEpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+ ICsKPiArCW1zZy5yZXEudHlwZSA9IFZEVVNFX0dFVF9WUV9SRUFEWTsKPiArCW1zZy5yZXEucmVx dWVzdF9pZCA9IGF0b21pYzY0X2ZldGNoX2luYygmZGV2LT5tc2dfdW5pcXVlKTsKPiArCW1zZy5y ZXEudnFfcmVhZHkuaW5kZXggPSB2cS0+aW5kZXg7Cj4gKwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9t c2dfc3luYyhkZXYsICZtc2cpID8gZmFsc2UgOiBtc2cucmVzcC52cV9yZWFkeS5yZWFkeTsKPiAr fQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXZfZ2V0X3ZxX3N0YXRlKHN0cnVjdCB2ZHVzZV9k ZXYgKmRldiwKPiArCQkJCXN0cnVjdCB2ZHVzZV92aXJ0cXVldWUgKnZxLAo+ICsJCQkJc3RydWN0 IHZkcGFfdnFfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyBtc2cg PSB7IDAgfTsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXNnLnJlcS50eXBlID0gVkRVU0VfR0VUX1ZR X1NUQVRFOwo+ICsJbXNnLnJlcS5yZXF1ZXN0X2lkID0gYXRvbWljNjRfZmV0Y2hfaW5jKCZkZXYt Pm1zZ191bmlxdWUpOwo+ICsJbXNnLnJlcS52cV9zdGF0ZS5pbmRleCA9IHZxLT5pbmRleDsKPiAr Cj4gKwlyZXQgPSB2ZHVzZV9kZXZfbXNnX3N5bmMoZGV2LCAmbXNnKTsKPiArCWlmICghcmV0KQo+ ICsJCXN0YXRlLT5hdmFpbF9pbmRleCA9IG1zZy5yZXNwLnZxX3N0YXRlLmF2YWlsX2lkeDsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZkdXNlX2Rldl9zZXRfdnFf c3RhdGUoc3RydWN0IHZkdXNlX2RldiAqZGV2LAo+ICsJCQkJc3RydWN0IHZkdXNlX3ZpcnRxdWV1 ZSAqdnEsCj4gKwkJCQljb25zdCBzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiAr CXN0cnVjdCB2ZHVzZV9kZXZfbXNnIG1zZyA9IHsgMCB9Owo+ICsKPiArCW1zZy5yZXEudHlwZSA9 IFZEVVNFX1NFVF9WUV9TVEFURTsKPiArCW1zZy5yZXEucmVxdWVzdF9pZCA9IGF0b21pYzY0X2Zl dGNoX2luYygmZGV2LT5tc2dfdW5pcXVlKTsKPiArCW1zZy5yZXEudnFfc3RhdGUuaW5kZXggPSB2 cS0+aW5kZXg7Cj4gKwltc2cucmVxLnZxX3N0YXRlLmF2YWlsX2lkeCA9IHN0YXRlLT5hdmFpbF9p bmRleDsKPiArCj4gKwlyZXR1cm4gdmR1c2VfZGV2X21zZ19zeW5jKGRldiwgJm1zZyk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfZGV2X3VwZGF0ZV9pb3RsYihzdHJ1Y3QgdmR1c2VfZGV2 ICpkZXYsCj4gKwkJCQl1NjQgc3RhcnQsIHU2NCBsYXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2Vf ZGV2X21zZyAqbXNnOwo+ICsKPiArCWlmIChsYXN0IDwgc3RhcnQpCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJbXNnID0ga3phbGxvYyhzaXplb2YoKm1zZyksIEdGUF9BVE9NSUMpOwoKClRo ZSByZXR1cm4gdmFsdWUgaXMgbm90IGNoZWNrZWQuCgoKPiArCW1zZy0+cmVxLnR5cGUgPSBWRFVT RV9VUERBVEVfSU9UTEI7CgoKV2hhdCB3b3VsZCB1c2VzcGFjZSBkbyBhZnRlciByZWNlaXZpbmcg VkRVU0VfVVBEQVRFX0lPVExCPyBJZiBpdCBzdGlsbCAKbmVlZHMgdG8gaXNzdWUgVkRVU0VfR0VU X0VOVFJZIHdpdGggcHJvYmFibHkgLUVJTlZBTCwgaXQncyBraW5kIG9mIApvdmVya2lsbC4gU28g aXQgbG9va3MgdG8gbWUgdGhhdCB0aGUgVkRVU0VfVVBEQVRFX0lPVExCIGlzIGFjdXRhbGx5IGtp bmQgCm9mIGZsdXNoIG9yIHVubWFwIGhlcmUuIElmIHRoaXMgaXMgdHJ1ZSwgc2hvdWxkIHdlIGlu dHJvZHVjZSBhIG5ldyB0eXBlIApvciBqdXN0IHJlbmFtZSBpdCBhcyBWRFVTRV9JT1RMQl9VTk1B UD8KCgo+ICsJbXNnLT5yZXEucmVxdWVzdF9pZCA9IGF0b21pYzY0X2ZldGNoX2luYygmZGV2LT5t c2dfdW5pcXVlKTsKPiArCW1zZy0+cmVxLmlvdmEuc3RhcnQgPSBzdGFydDsKPiArCW1zZy0+cmVx LmlvdmEubGFzdCA9IGxhc3Q7Cj4gKwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9tc2dfc3luYyhkZXYs IG1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IHZkdXNlX2Rldl9yZWFkX2l0ZXIoc3Ry dWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQo+ICt7Cj4gKwlzdHJ1Y3QgZmls ZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSBmaWxl LT5wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnOwo+ICsJaW50IHNp emUgPSBzaXplb2Yoc3RydWN0IHZkdXNlX2Rldl9yZXF1ZXN0KTsKPiArCXNzaXplX3QgcmV0ID0g MDsKPiArCj4gKwlpZiAoaW92X2l0ZXJfY291bnQodG8pIDwgc2l6ZSkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlzcGluX2xvY2soJmRldi0+bXNnX2xvY2spOwo+ICsJd2hpbGUgKDEpIHsKPiArCQlt c2cgPSB2ZHVzZV9kZXF1ZXVlX21zZygmZGV2LT5zZW5kX2xpc3QpOwo+ICsJCWlmIChtc2cpCj4g KwkJCWJyZWFrOwo+ICsKPiArCQlyZXQgPSAtRUFHQUlOOwo+ICsJCWlmIChmaWxlLT5mX2ZsYWdz ICYgT19OT05CTE9DSykKPiArCQkJZ290byB1bmxvY2s7Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZk ZXYtPm1zZ19sb2NrKTsKPiArCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVz aXZlKGRldi0+d2FpdHEsCj4gKwkJCQkJIWxpc3RfZW1wdHkoJmRldi0+c2VuZF9saXN0KSk7Cj4g KwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJc3Bpbl9sb2NrKCZkZXYtPm1z Z19sb2NrKTsKPiArCX0KPiArCXNwaW5fdW5sb2NrKCZkZXYtPm1zZ19sb2NrKTsKPiArCXJldCA9 IGNvcHlfdG9faXRlcigmbXNnLT5yZXEsIHNpemUsIHRvKTsKPiArCXNwaW5fbG9jaygmZGV2LT5t c2dfbG9jayk7Cj4gKwlpZiAocmV0ICE9IHNpemUpIHsKPiArCQlyZXQgPSAtRUZBVUxUOwo+ICsJ CXZkdXNlX2VucXVldWVfbXNnKCZkZXYtPnNlbmRfbGlzdCwgbXNnKTsKPiArCQlnb3RvIHVubG9j azsKPiArCX0KPiArCXZkdXNlX2VucXVldWVfbXNnKCZkZXYtPnJlY3ZfbGlzdCwgbXNnKTsKPiAr dW5sb2NrOgo+ICsJc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IHZkdXNlX2Rldl93cml0ZV9pdGVyKHN0cnVj dCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQo+ICt7Cj4gKwlzdHJ1Y3QgZmls ZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSBmaWxl LT5wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2X3Jlc3BvbnNlIHJlc3A7Cj4gKwlz dHJ1Y3QgdmR1c2VfZGV2X21zZyAqbXNnOwo+ICsJc2l6ZV90IHJldDsKPiArCj4gKwlyZXQgPSBj b3B5X2Zyb21faXRlcigmcmVzcCwgc2l6ZW9mKHJlc3ApLCBmcm9tKTsKPiArCWlmIChyZXQgIT0g c2l6ZW9mKHJlc3ApKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXNwaW5fbG9jaygmZGV2 LT5tc2dfbG9jayk7Cj4gKwltc2cgPSB2ZHVzZV9maW5kX21zZygmZGV2LT5yZWN2X2xpc3QsIHJl c3AucmVxdWVzdF9pZCk7Cj4gKwlpZiAoIW1zZykgewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJ Z290byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KCZtc2ctPnJlc3AsICZyZXNwLCBzaXpl b2YocmVzcCkpOwo+ICsJbXNnLT5jb21wbGV0ZWQgPSAxOwo+ICsJd2FrZV91cCgmbXNnLT53YWl0 cSk7Cj4gK3VubG9jazoKPiArCXNwaW5fdW5sb2NrKCZkZXYtPm1zZ19sb2NrKTsKPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgX19wb2xsX3QgdmR1c2VfZGV2X3BvbGwoc3Ry dWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9k ZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCV9fcG9sbF90IG1hc2sgPSAwOwo+ICsK PiArCXBvbGxfd2FpdChmaWxlLCAmZGV2LT53YWl0cSwgd2FpdCk7Cj4gKwo+ICsJaWYgKCFsaXN0 X2VtcHR5KCZkZXYtPnNlbmRfbGlzdCkpCj4gKwkJbWFzayB8PSBFUE9MTElOIHwgRVBPTExSRE5P Uk07CgoKRVBPTExPVVQgaXMgbWlzc2VkIGhlcmU/CgoKPiArCj4gKwlyZXR1cm4gbWFzazsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfZGV2X3Jlc2V0KHN0cnVjdCB2ZHVzZV9kZXYgKmRl dikKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJdmR1c2VfZG9tYWluX3Jlc2V0X2JvdW5jZV9tYXAo ZGV2LT5kb21haW4pOwo+ICsJdmR1c2VfZGV2X3VwZGF0ZV9pb3RsYihkZXYsIDBVTEwsIFVMTE9O R19NQVgpOwoKClNpbWlhbHJseSwgSU9UTEIgdXBkYXRlIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0 aGUgcmVzZXR0aW5nPwoKQW5kIGl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gYWRkIGNvbW1lbnQgdG8g ZXhwbGFpbiBob3cgY29oZXJlbnQgbWFwcGluZ3MgCmlzIGhhbmRsZWQuCgoKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgZGV2LT52cV9udW07IGkrKykgewo+ICsJCXN0cnVjdCB2ZHVzZV92aXJ0cXVl dWUgKnZxID0gJmRldi0+dnFzW2ldOwo+ICsKPiArCQlzcGluX2xvY2soJnZxLT5pcnFfbG9jayk7 Cj4gKwkJdnEtPnJlYWR5ID0gZmFsc2U7Cj4gKwkJdnEtPmNiLmNhbGxiYWNrID0gTlVMTDsKPiAr CQl2cS0+Y2IucHJpdmF0ZSA9IE5VTEw7Cj4gKwkJc3Bpbl91bmxvY2soJnZxLT5pcnFfbG9jayk7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfdmRwYV9zZXRfdnFfYWRkcmVzcyhz dHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgsCj4gKwkJCQl1NjQgZGVzY19hcmVhLCB1 NjQgZHJpdmVyX2FyZWEsCj4gKwkJCQl1NjQgZGV2aWNlX2FyZWEpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2Vfdmly dHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tpZHhdOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfc2V0 X3ZxX2FkZHIoZGV2LCB2cSwgZGVzY19hcmVhLAo+ICsJCQkJCWRyaXZlcl9hcmVhLCBkZXZpY2Vf YXJlYSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfa2lja192cShzdHJ1Y3Qg dmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRl diA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9 ICZkZXYtPnZxc1tpZHhdOwo+ICsKPiArCXNwaW5fbG9jaygmdnEtPmtpY2tfbG9jayk7Cj4gKwlp ZiAodnEtPnJlYWR5ICYmIHZxLT5raWNrZmQpCj4gKwkJZXZlbnRmZF9zaWduYWwodnEtPmtpY2tm ZCwgMSk7Cj4gKwlzcGluX3VubG9jaygmdnEtPmtpY2tfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3ZxX2NiKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwgdTE2 IGlkeCwKPiArCQkJICAgICAgc3RydWN0IHZkcGFfY2FsbGJhY2sgKmNiKQo+ICt7Cj4gKwlzdHJ1 Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsJc3RydWN0IHZkdXNl X3ZpcnRxdWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsKPiArCj4gKwlzcGluX2xvY2soJnZxLT5p cnFfbG9jayk7Cj4gKwl2cS0+Y2IuY2FsbGJhY2sgPSBjYi0+Y2FsbGJhY2s7Cj4gKwl2cS0+Y2Iu cHJpdmF0ZSA9IGNiLT5wcml2YXRlOwo+ICsJc3Bpbl91bmxvY2soJnZxLT5pcnFfbG9jayk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3ZxX251bShzdHJ1Y3QgdmRwYV9k ZXZpY2UgKnZkcGEsIHUxNiBpZHgsIHUzMiBudW0pCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYg KmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2 cSA9ICZkZXYtPnZxc1tpZHhdOwo+ICsKPiArCXZkdXNlX2Rldl9zZXRfdnFfbnVtKGRldiwgdnEs IG51bSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3ZxX3JlYWR5KHN0 cnVjdCB2ZHBhX2RldmljZSAqdmRwYSwKPiArCQkJCQl1MTYgaWR4LCBib29sIHJlYWR5KQo+ICt7 Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsJc3Ry dWN0IHZkdXNlX3ZpcnRxdWV1ZSAqdnEgPSAmZGV2LT52cXNbaWR4XTsKPiArCj4gKwl2ZHVzZV9k ZXZfc2V0X3ZxX3JlYWR5KGRldiwgdnEsIHJlYWR5KTsKPiArCXZxLT5yZWFkeSA9IHJlYWR5Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2ZHVzZV92ZHBhX2dldF92cV9yZWFkeShzdHJ1Y3QgdmRw YV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9 IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZk ZXYtPnZxc1tpZHhdOwo+ICsKPiArCXZxLT5yZWFkeSA9IHZkdXNlX2Rldl9nZXRfdnFfcmVhZHko ZGV2LCB2cSk7Cj4gKwo+ICsJcmV0dXJuIHZxLT5yZWFkeTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB2ZHVzZV92ZHBhX3NldF92cV9zdGF0ZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBp ZHgsCj4gKwkJCQljb25zdCBzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0 cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1 c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tpZHhdOwo+ICsKPiArCXJldHVybiB2ZHVzZV9k ZXZfc2V0X3ZxX3N0YXRlKGRldiwgdnEsIHN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2 ZHVzZV92ZHBhX2dldF92cV9zdGF0ZShzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHUxNiBpZHgs Cj4gKwkJCQlzdHJ1Y3QgdmRwYV92cV9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB2ZHVz ZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwlzdHJ1Y3QgdmR1c2VfdmlydHF1 ZXVlICp2cSA9ICZkZXYtPnZxc1tpZHhdOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfZ2V0X3Zx X3N0YXRlKGRldiwgdnEsIHN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2ZHVzZV92ZHBh X2dldF92cV9hbGlnbihzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJcmV0dXJuIGRldi0+ dnFfYWxpZ247Cj4gK30KPiArCj4gK3N0YXRpYyB1NjQgdmR1c2VfdmRwYV9nZXRfZmVhdHVyZXMo c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYg PSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kZXZfZ2V0X2ZlYXR1 cmVzKGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfdmRwYV9zZXRfZmVhdHVyZXMo c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1NjQgZmVhdHVyZXMpCj4gK3sKPiArCXN0cnVjdCB2 ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJaWYgKCEoZmVhdHVy ZXMgJiAoMVVMTCA8PCBWSVJUSU9fRl9BQ0NFU1NfUExBVEZPUk0pKSkKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwlyZXR1cm4gdmR1c2VfZGV2X3NldF9mZWF0dXJlcyhkZXYsIGZlYXR1cmVz KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfdmRwYV9zZXRfY29uZmlnX2NiKHN0cnVj dCB2ZHBhX2RldmljZSAqdmRwYSwKPiArCQkJCSAgc3RydWN0IHZkcGFfY2FsbGJhY2sgKmNiKQo+ ICt7Cj4gKwkvKiBXZSBkb24ndCBzdXBwb3J0IGNvbmZpZyBpbnRlcnJ1cHQgKi8KPiArfQo+ICsK PiArc3RhdGljIHUxNiB2ZHVzZV92ZHBhX2dldF92cV9udW1fbWF4KHN0cnVjdCB2ZHBhX2Rldmlj ZSAqdmRwYSkKPiArewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2 ZHBhKTsKPiArCj4gKwlyZXR1cm4gZGV2LT52cV9zaXplX21heDsKPiArfQo+ICsKPiArc3RhdGlj IHUzMiB2ZHVzZV92ZHBhX2dldF9kZXZpY2VfaWQoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsK PiArCXJldHVybiBkZXYtPmRldmljZV9pZDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2ZHVzZV92 ZHBhX2dldF92ZW5kb3JfaWQoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1 Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3RvX3ZkdXNlKHZkcGEpOwo+ICsKPiArCXJldHVybiBk ZXYtPnZlbmRvcl9pZDsKPiArfQo+ICsKPiArc3RhdGljIHU4IHZkdXNlX3ZkcGFfZ2V0X3N0YXR1 cyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRl diA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJcmV0dXJuIHZkdXNlX2Rldl9nZXRfc3Rh dHVzKGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZkcGFfc2V0X3N0YXR1cyhz dHJ1Y3QgdmRwYV9kZXZpY2UgKnZkcGEsIHU4IHN0YXR1cykKPiArewo+ICsJc3RydWN0IHZkdXNl X2RldiAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPiArCj4gKwlpZiAoc3RhdHVzID09IDAp Cj4gKwkJdmR1c2VfZGV2X3Jlc2V0KGRldik7Cj4gKwo+ICsJdmR1c2VfZGV2X3NldF9zdGF0dXMo ZGV2LCBzdGF0dXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV92ZHBhX2dldF9jb25m aWcoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICsJCQkg ICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKPiArewo+ICsJc3RydWN0IHZkdXNlX2Rl diAqZGV2ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPiArCj4gKwl2ZHVzZV9kZXZfZ2V0X2NvbmZp ZyhkZXYsIG9mZnNldCwgYnVmLCBsZW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV92 ZHBhX3NldF9jb25maWcoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLCB1bnNpZ25lZCBpbnQgb2Zm c2V0LAo+ICsJCQljb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArCXN0 cnVjdCB2ZHVzZV9kZXYgKmRldiA9IHZkcGFfdG9fdmR1c2UodmRwYSk7Cj4gKwo+ICsJdmR1c2Vf ZGV2X3NldF9jb25maWcoZGV2LCBvZmZzZXQsIGJ1ZiwgbGVuKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCB2ZHVzZV92ZHBhX3NldF9tYXAoc3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhLAo+ICsJCQkJ c3RydWN0IHZob3N0X2lvdGxiICppb3RsYikKPiArewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2 ID0gdmRwYV90b192ZHVzZSh2ZHBhKTsKPiArCWludCByZXQ7Cj4gKwoKClNvIEkgd29uZGVyIHdl IG5lZWQgdG8gZG8gdGhlIHZob3N0X2Rldl91cGRhdGVfaW90bGIoKSBiZWZvcmUgCnZkdXNlX2Rv bWFpbl9zZXRfbWFwKCkuCgpUaGF0IGlzLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlcnNw YWNlJ3MgSU9UTEIgaXMgY2xlYXJlZCBhZnRlciAKc2V0dGluZyB1cCB0aGUgbmV3IG1hcD8KCgo+ ICsJcmV0ID0gdmR1c2VfZG9tYWluX3NldF9tYXAoZGV2LT5kb21haW4sIGlvdGxiKTsKPiArCXZk dXNlX2Rldl91cGRhdGVfaW90bGIoZGV2LCAwVUxMLCBVTExPTkdfTUFYKTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV92ZHBhX2ZyZWUoc3RydWN0IHZk cGFfZGV2aWNlICp2ZHBhKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHBhX3Rv X3ZkdXNlKHZkcGEpOwo+ICsKPiArCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldi0+c2VuZF9saXN0 KSk7Cj4gKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZkZXYtPnJlY3ZfbGlzdCkpOwo+ICsJZGV2LT52 ZGV2ID0gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19v cHMgdmR1c2VfdmRwYV9jb25maWdfb3BzID0gewo+ICsJLnNldF92cV9hZGRyZXNzCQk9IHZkdXNl X3ZkcGFfc2V0X3ZxX2FkZHJlc3MsCj4gKwkua2lja192cQkJPSB2ZHVzZV92ZHBhX2tpY2tfdnEs Cj4gKwkuc2V0X3ZxX2NiCQk9IHZkdXNlX3ZkcGFfc2V0X3ZxX2NiLAo+ICsJLnNldF92cV9udW0g ICAgICAgICAgICAgPSB2ZHVzZV92ZHBhX3NldF92cV9udW0sCj4gKwkuc2V0X3ZxX3JlYWR5CQk9 IHZkdXNlX3ZkcGFfc2V0X3ZxX3JlYWR5LAo+ICsJLmdldF92cV9yZWFkeQkJPSB2ZHVzZV92ZHBh X2dldF92cV9yZWFkeSwKPiArCS5zZXRfdnFfc3RhdGUJCT0gdmR1c2VfdmRwYV9zZXRfdnFfc3Rh dGUsCj4gKwkuZ2V0X3ZxX3N0YXRlCQk9IHZkdXNlX3ZkcGFfZ2V0X3ZxX3N0YXRlLAo+ICsJLmdl dF92cV9hbGlnbgkJPSB2ZHVzZV92ZHBhX2dldF92cV9hbGlnbiwKPiArCS5nZXRfZmVhdHVyZXMJ CT0gdmR1c2VfdmRwYV9nZXRfZmVhdHVyZXMsCj4gKwkuc2V0X2ZlYXR1cmVzCQk9IHZkdXNlX3Zk cGFfc2V0X2ZlYXR1cmVzLAo+ICsJLnNldF9jb25maWdfY2IJCT0gdmR1c2VfdmRwYV9zZXRfY29u ZmlnX2NiLAo+ICsJLmdldF92cV9udW1fbWF4CQk9IHZkdXNlX3ZkcGFfZ2V0X3ZxX251bV9tYXgs Cj4gKwkuZ2V0X2RldmljZV9pZAkJPSB2ZHVzZV92ZHBhX2dldF9kZXZpY2VfaWQsCj4gKwkuZ2V0 X3ZlbmRvcl9pZAkJPSB2ZHVzZV92ZHBhX2dldF92ZW5kb3JfaWQsCj4gKwkuZ2V0X3N0YXR1cwkJ PSB2ZHVzZV92ZHBhX2dldF9zdGF0dXMsCj4gKwkuc2V0X3N0YXR1cwkJPSB2ZHVzZV92ZHBhX3Nl dF9zdGF0dXMsCj4gKwkuZ2V0X2NvbmZpZwkJPSB2ZHVzZV92ZHBhX2dldF9jb25maWcsCj4gKwku c2V0X2NvbmZpZwkJPSB2ZHVzZV92ZHBhX3NldF9jb25maWcsCj4gKwkuc2V0X21hcAkJPSB2ZHVz ZV92ZHBhX3NldF9tYXAsCj4gKwkuZnJlZQkJCT0gdmR1c2VfdmRwYV9mcmVlLAo+ICt9Owo+ICsK PiArc3RhdGljIGRtYV9hZGRyX3QgdmR1c2VfZGV2X21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IHBhZ2UgKnBhZ2UsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBz aXplX3Qgc2l6ZSwKPiArCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAo+ICsJ CQkJICAgICB1bnNpZ25lZCBsb25nIGF0dHJzKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICp2 ZGV2ID0gZGV2X3RvX3ZkdXNlKGRldik7Cj4gKwlzdHJ1Y3QgdmR1c2VfaW92YV9kb21haW4gKmRv bWFpbiA9IHZkZXYtPmRvbWFpbjsKPiArCj4gKwlyZXR1cm4gdmR1c2VfZG9tYWluX21hcF9wYWdl KGRvbWFpbiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGF0dHJzKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdmR1c2VfZGV2X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRk cl90IGRtYV9hZGRyLAo+ICsJCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9u IGRpciwKPiArCQkJCXVuc2lnbmVkIGxvbmcgYXR0cnMpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9k ZXYgKnZkZXYgPSBkZXZfdG9fdmR1c2UoZGV2KTsKPiArCXN0cnVjdCB2ZHVzZV9pb3ZhX2RvbWFp biAqZG9tYWluID0gdmRldi0+ZG9tYWluOwo+ICsKPiArCXJldHVybiB2ZHVzZV9kb21haW5fdW5t YXBfcGFnZShkb21haW4sIGRtYV9hZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgKnZkdXNlX2Rldl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYs IHNpemVfdCBzaXplLAo+ICsJCQkJCWRtYV9hZGRyX3QgKmRtYV9hZGRyLCBnZnBfdCBmbGFnLAo+ ICsJCQkJCXVuc2lnbmVkIGxvbmcgYXR0cnMpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKnZk ZXYgPSBkZXZfdG9fdmR1c2UoZGV2KTsKPiArCXN0cnVjdCB2ZHVzZV9pb3ZhX2RvbWFpbiAqZG9t YWluID0gdmRldi0+ZG9tYWluOwo+ICsJdW5zaWduZWQgbG9uZyBpb3ZhOwo+ICsJdm9pZCAqYWRk cjsKPiArCj4gKwkqZG1hX2FkZHIgPSBETUFfTUFQUElOR19FUlJPUjsKPiArCWFkZHIgPSB2ZHVz ZV9kb21haW5fYWxsb2NfY29oZXJlbnQoZG9tYWluLCBzaXplLAo+ICsJCQkJKGRtYV9hZGRyX3Qg KikmaW92YSwgZmxhZywgYXR0cnMpOwo+ICsJaWYgKCFhZGRyKQo+ICsJCXJldHVybiBOVUxMOwo+ ICsKPiArCSpkbWFfYWRkciA9IChkbWFfYWRkcl90KWlvdmE7Cj4gKwl2ZHVzZV9kZXZfdXBkYXRl X2lvdGxiKHZkZXYsIGlvdmEsIGlvdmEgKyBzaXplIC0gMSk7Cj4gKwo+ICsJcmV0dXJuIGFkZHI7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX2Rldl9mcmVlX2NvaGVyZW50KHN0cnVjdCBk ZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4gKwkJCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3Qg ZG1hX2FkZHIsCj4gKwkJCQkJdW5zaWduZWQgbG9uZyBhdHRycykKPiArewo+ICsJc3RydWN0IHZk dXNlX2RldiAqdmRldiA9IGRldl90b192ZHVzZShkZXYpOwo+ICsJc3RydWN0IHZkdXNlX2lvdmFf ZG9tYWluICpkb21haW4gPSB2ZGV2LT5kb21haW47Cj4gKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0g KHVuc2lnbmVkIGxvbmcpZG1hX2FkZHI7Cj4gKwl1bnNpZ25lZCBsb25nIGxhc3QgPSBzdGFydCAr IHNpemUgLSAxOwo+ICsKPiArCXZkdXNlX2RvbWFpbl9mcmVlX2NvaGVyZW50KGRvbWFpbiwgc2l6 ZSwgdmFkZHIsIGRtYV9hZGRyLCBhdHRycyk7Cj4gKwl2ZHVzZV9kZXZfdXBkYXRlX2lvdGxiKHZk ZXYsIHN0YXJ0LCBsYXN0KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfbWFw X29wcyB2ZHVzZV9kZXZfZG1hX29wcyA9IHsKPiArCS5tYXBfcGFnZSA9IHZkdXNlX2Rldl9tYXBf cGFnZSwKPiArCS51bm1hcF9wYWdlID0gdmR1c2VfZGV2X3VubWFwX3BhZ2UsCj4gKwkuYWxsb2Mg PSB2ZHVzZV9kZXZfYWxsb2NfY29oZXJlbnQsCj4gKwkuZnJlZSA9IHZkdXNlX2Rldl9mcmVlX2Nv aGVyZW50LAo+ICt9Owo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBwZXJtX3RvX2ZpbGVfZmxh Z3ModTggcGVybSkKPiArewo+ICsJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKPiArCj4gKwlzd2l0 Y2ggKHBlcm0pIHsKPiArCWNhc2UgVkRVU0VfQUNDRVNTX1dPOgo+ICsJCWZsYWdzIHw9IE9fV1JP TkxZOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWRFVTRV9BQ0NFU1NfUk86Cj4gKwkJZmxhZ3MgfD0g T19SRE9OTFk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFZEVVNFX0FDQ0VTU19SVzoKPiArCQlmbGFn cyB8PSBPX1JEV1I7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCVdBUk4oMSwgImludmFs aWRhdGUgdmhvc3QgSU9UTEIgcGVybWlzc2lvblxuIik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIGZsYWdzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZkdXNlX2tpY2tmZF9zZXR1 cChzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYsCj4gKwkJCXN0cnVjdCB2ZHVzZV92cV9ldmVudGZkICpl dmVudGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IE5VTEw7Cj4gKwlzdHJ1 Y3QgdmR1c2VfdmlydHF1ZXVlICp2cTsKPiArCj4gKwlpZiAoZXZlbnRmZC0+aW5kZXggPj0gZGV2 LT52cV9udW0pCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJdnEgPSAmZGV2LT52cXNbZXZl bnRmZC0+aW5kZXhdOwo+ICsJaWYgKGV2ZW50ZmQtPmZkID4gMCkgewo+ICsJCWN0eCA9IGV2ZW50 ZmRfY3R4X2ZkZ2V0KGV2ZW50ZmQtPmZkKTsKPiArCQlpZiAoSVNfRVJSKGN0eCkpCj4gKwkJCXJl dHVybiBQVFJfRVJSKGN0eCk7Cj4gKwl9IGVsc2UgaWYgKGV2ZW50ZmQtPmZkICE9IFZEVVNFX0VW RU5URkRfREVBU1NJR04pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZ2cS0+a2lj a19sb2NrKTsKPiArCWlmICh2cS0+a2lja2ZkKQo+ICsJCWV2ZW50ZmRfY3R4X3B1dCh2cS0+a2lj a2ZkKTsKPiArCXZxLT5raWNrZmQgPSBjdHg7Cj4gKwlzcGluX3VubG9jaygmdnEtPmtpY2tfbG9j ayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkdXNlX3ZxX2ly cV9pbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2Vf dmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLAo+ICsJCQkJCXN0cnVjdCB2ZHVzZV92 aXJ0cXVldWUsIGluamVjdCk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmdnEtPmlycV9sb2NrKTsK PiArCWlmICh2cS0+cmVhZHkgJiYgdnEtPmNiLmNhbGxiYWNrKQo+ICsJCXZxLT5jYi5jYWxsYmFj ayh2cS0+Y2IucHJpdmF0ZSk7Cj4gKwlzcGluX3VubG9ja19pcnEoJnZxLT5pcnFfbG9jayk7Cj4g K30KPiArCj4gK3N0YXRpYyBsb25nIHZkdXNlX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwg dW5zaWduZWQgaW50IGNtZCwKPiArCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQo+ICt7Cj4gKwlz dHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwl2b2lkIF9fdXNl ciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKPiArCWludCByZXQ7Cj4gKwo+ICsJc3dpdGNo IChjbWQpIHsKPiArCWNhc2UgVkRVU0VfSU9UTEJfR0VUX0VOVFJZOiB7Cj4gKwkJc3RydWN0IHZk dXNlX2lvdGxiX2VudHJ5IGVudHJ5Owo+ICsJCXN0cnVjdCB2aG9zdF9pb3RsYl9tYXAgKm1hcDsK PiArCQlzdHJ1Y3QgdmRwYV9tYXBfZmlsZSAqbWFwX2ZpbGU7Cj4gKwkJc3RydWN0IHZkdXNlX2lv dmFfZG9tYWluICpkb21haW4gPSBkZXYtPmRvbWFpbjsKPiArCQlzdHJ1Y3QgZmlsZSAqZiA9IE5V TEw7Cj4gKwo+ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZlbnRy eSwgYXJncCwgc2l6ZW9mKGVudHJ5KSkpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlzcGluX2xvY2so JmRvbWFpbi0+aW90bGJfbG9jayk7Cj4gKwkJbWFwID0gdmhvc3RfaW90bGJfaXRyZWVfZmlyc3Qo ZG9tYWluLT5pb3RsYiwKPiArCQkJCQkgICAgICBlbnRyeS5zdGFydCwgZW50cnkuc3RhcnQgKyAx KTsKPiArCQlpZiAobWFwKSB7Cj4gKwkJCW1hcF9maWxlID0gKHN0cnVjdCB2ZHBhX21hcF9maWxl ICopbWFwLT5vcGFxdWU7Cj4gKwkJCWYgPSBnZXRfZmlsZShtYXBfZmlsZS0+ZmlsZSk7Cj4gKwkJ CWVudHJ5Lm9mZnNldCA9IG1hcF9maWxlLT5vZmZzZXQ7Cj4gKwkJCWVudHJ5LnN0YXJ0ID0gbWFw LT5zdGFydDsKPiArCQkJZW50cnkubGFzdCA9IG1hcC0+bGFzdDsKPiArCQkJZW50cnkucGVybSA9 IG1hcC0+cGVybTsKPiArCQl9Cj4gKwkJc3Bpbl91bmxvY2soJmRvbWFpbi0+aW90bGJfbG9jayk7 Cj4gKwkJcmV0ID0gLUVJTlZBTDsKCgpTbyB3ZSBuZWVkIGRvY3VtZW50IHRoaXMgaW4gdGhlIHVB UEkgZG9jLiBJIHRoaW5rIHdoZW4gdXNlcnNwYWNlIHNlZSAKLUVJTlZBTCBpdCBtZWFucyB0aGUg bWFwIGRvZXNuJ3QgZXhpc3QuCgpPciBzaG91bGQgd2UgbWFrZSBpdCBtb3JlIGV4cGxpY2l0bHkg YnkgZS5nIGludHJvZHVpbmcgbmV3IGZsYWdzLgoKCj4gKwkJaWYgKCFmKQo+ICsJCQlicmVhazsK PiArCj4gKwkJcmV0ID0gLUVGQVVMVDsKPiArCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZlbnRy eSwgc2l6ZW9mKGVudHJ5KSkpIHsKPiArCQkJZnB1dChmKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ ICsJCXJldCA9IHJlY2VpdmVfZmRfdXNlcihmLCBhcmdwLCBwZXJtX3RvX2ZpbGVfZmxhZ3MoZW50 cnkucGVybSkpOwo+ICsJCWZwdXQoZik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwljYXNlIFZEVVNF X1ZRX1NFVFVQX0tJQ0tGRDogewo+ICsJCXN0cnVjdCB2ZHVzZV92cV9ldmVudGZkIGV2ZW50ZmQ7 Cj4gKwo+ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZldmVudGZk LCBhcmdwLCBzaXplb2YoZXZlbnRmZCkpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJcmV0ID0gdmR1 c2Vfa2lja2ZkX3NldHVwKGRldiwgJmV2ZW50ZmQpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJY2Fz ZSBWRFVTRV9JTkpFQ1RfVlFfSVJROgo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJaWYgKGFyZyA+ PSBkZXYtPnZxX251bSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXJldCA9IDA7Cj4gKwkJcXVldWVf d29yayh2ZHVzZV9pcnFfd3EsICZkZXYtPnZxc1thcmddLmluamVjdCk7Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldCA9IC1FTk9JT0NUTENNRDsKPiArCQlicmVhazsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZkdXNlX2Rldl9yZWxlYXNl KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3Qg dmR1c2VfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 X21zZyAqbXNnOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRldi0+dnFfbnVt OyBpKyspIHsKPiArCQlzdHJ1Y3QgdmR1c2VfdmlydHF1ZXVlICp2cSA9ICZkZXYtPnZxc1tpXTsK PiArCj4gKwkJc3Bpbl9sb2NrKCZ2cS0+a2lja19sb2NrKTsKPiArCQlpZiAodnEtPmtpY2tmZCkK PiArCQkJZXZlbnRmZF9jdHhfcHV0KHZxLT5raWNrZmQpOwo+ICsJCXZxLT5raWNrZmQgPSBOVUxM Owo+ICsJCXNwaW5fdW5sb2NrKCZ2cS0+a2lja19sb2NrKTsKPiArCX0KPiArCj4gKwlzcGluX2xv Y2soJmRldi0+bXNnX2xvY2spOwo+ICsJd2hpbGUgKChtc2cgPSB2ZHVzZV9kZXF1ZXVlX21zZygm ZGV2LT5yZWN2X2xpc3QpKSkKPiArCQl2ZHVzZV9lbnF1ZXVlX21zZygmZGV2LT5zZW5kX2xpc3Qs IG1zZyk7CgoKV2hhdCdzIHRoZSBnb2FsIG9mIHRoaXM/CgpJbiBhZGRpdGlvbiB0byBmcmVlIHRo ZSBtZXNzYWdlcywgd2UgbmVlZCB3YWtlIHVwIHRoZSBwcm9jZXNzZXMgdGhhdCBpcyAKaW4gdGhl IHdhaXRxIGluIHRoaXMgY2FzZS4KCgo+ICsJc3Bpbl91bmxvY2soJmRldi0+bXNnX2xvY2spOwo+ ICsKPiArCWRldi0+Y29ubmVjdGVkID0gZmFsc2U7CgoKRG8gd2UgbmVlZCB0byBob2xkIHZkdXNl IG11dGV4IGhlcmU/CgoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2 ZHVzZV9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiAr ewo+ICsJc3RydWN0IHZkdXNlX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYs Cj4gKwkJCQkJc3RydWN0IHZkdXNlX2RldiwgY2Rldik7Cj4gKwlpbnQgcmV0ID0gLUVCVVNZOwo+ ICsKPiArCW11dGV4X2xvY2soJnZkdXNlX2xvY2spOwo+ICsJaWYgKGRldi0+Y29ubmVjdGVkKQo+ ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCXJldCA9IDA7Cj4gKwlkZXYtPmNvbm5lY3RlZCA9IHRy dWU7Cj4gKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7Cj4gK3VubG9jazoKPiArCW11dGV4X3Vu bG9jaygmdmR1c2VfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmR1c2VfZGV2X2ZvcHMgPSB7Cj4gKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkub3BlbgkJPSB2ZHVzZV9kZXZfb3BlbiwKPiArCS5yZWxl YXNlCT0gdmR1c2VfZGV2X3JlbGVhc2UsCj4gKwkucmVhZF9pdGVyCT0gdmR1c2VfZGV2X3JlYWRf aXRlciwKPiArCS53cml0ZV9pdGVyCT0gdmR1c2VfZGV2X3dyaXRlX2l0ZXIsCj4gKwkucG9sbAkJ PSB2ZHVzZV9kZXZfcG9sbCwKPiArCS51bmxvY2tlZF9pb2N0bAk9IHZkdXNlX2Rldl9pb2N0bCwK PiArCS5jb21wYXRfaW9jdGwJPSBjb21wYXRfcHRyX2lvY3RsLAo+ICsJLmxsc2VlawkJPSBub29w X2xsc2VlaywKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmR1c2VfZGV2ICp2ZHVzZV9kZXZf Y3JlYXRlKHZvaWQpCj4gK3sKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldiA9IGt6YWxsb2Moc2l6 ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKPiArCj4gKwlpZiAoIWRldikKPiArCQlyZXR1cm4gTlVM TDsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5tc2dfbG9jayk7Cj4gKwlJTklUX0xJU1Rf SEVBRCgmZGV2LT5zZW5kX2xpc3QpOwo+ICsJSU5JVF9MSVNUX0hFQUQoJmRldi0+cmVjdl9saXN0 KTsKPiArCWF0b21pYzY0X3NldCgmZGV2LT5tc2dfdW5pcXVlLCAwKTsKPiArCj4gKwlpbml0X3dh aXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRxKTsKPiArCj4gKwlyZXR1cm4gZGV2Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2ZHVzZV9kZXZfZGVzdHJveShzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYpCj4g K3sKPiArCWtmcmVlKGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmR1c2VfZGV2ICp2 ZHVzZV9maW5kX2Rldihjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 ICp0bXAsICpkZXYgPSBOVUxMOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmdmR1 c2VfZGV2cywgbGlzdCkgewo+ICsJCWlmICghc3RyY21wKGRldl9uYW1lKCZ0bXAtPmRldiksIG5h bWUpKSB7Cj4gKwkJCWRldiA9IHRtcDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0 dXJuIGRldjsKPiArfQo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9kZXN0cm95X2RldihjaGFyICpu YW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPSB2ZHVzZV9maW5kX2RldihuYW1l KTsKPiArCj4gKwlpZiAoIWRldikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoZGV2 LT52ZGV2IHx8IGRldi0+Y29ubmVjdGVkKQo+ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJZGV2 LT5jb25uZWN0ZWQgPSB0cnVlOwoKCk5lZWQgbXV0ZXggaGVyZT8KCgo+ICsJbGlzdF9kZWwoJmRl di0+bGlzdCk7Cj4gKwljZGV2X2RldmljZV9kZWwoJmRldi0+Y2RldiwgJmRldi0+ZGV2KTsKPiAr CXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdmR1c2VfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2aWNlKQo+ICt7Cj4g KwlzdHJ1Y3QgdmR1c2VfZGV2ICpkZXYgPQo+ICsJCWNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVj dCB2ZHVzZV9kZXYsIGRldik7Cj4gKwo+ICsJaWRhX3NpbXBsZV9yZW1vdmUoJnZkdXNlX2lkYSwg ZGV2LT5taW5vcik7Cj4gKwlrZnJlZShkZXYtPnZxcyk7Cj4gKwl2ZHVzZV9kb21haW5fZGVzdHJv eShkZXYtPmRvbWFpbik7Cj4gKwl2ZHVzZV9kZXZfZGVzdHJveShkZXYpOwo+ICsJbW9kdWxlX3B1 dChUSElTX01PRFVMRSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfY3JlYXRlX2Rldihz dHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZyAqY29uZmlnKQo+ICt7Cj4gKwlpbnQgaSwgcmV0ID0gLUVO T01FTTsKPiArCXN0cnVjdCB2ZHVzZV9kZXYgKmRldjsKPiArCj4gKwlpZiAoY29uZmlnLT5ib3Vu Y2Vfc2l6ZSA+IG1heF9ib3VuY2Vfc2l6ZSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlp ZiAoY29uZmlnLT5ib3VuY2Vfc2l6ZSA+IG1heF9pb3ZhX3NpemUpCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJaWYgKHZkdXNlX2ZpbmRfZGV2KGNvbmZpZy0+bmFtZSkpCj4gKwkJcmV0dXJu IC1FRVhJU1Q7Cj4gKwo+ICsJZGV2ID0gdmR1c2VfZGV2X2NyZWF0ZSgpOwo+ICsJaWYgKCFkZXYp Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZGV2LT5kZXZpY2VfaWQgPSBjb25maWctPmRl dmljZV9pZDsKPiArCWRldi0+dmVuZG9yX2lkID0gY29uZmlnLT52ZW5kb3JfaWQ7Cj4gKwlkZXYt PmRvbWFpbiA9IHZkdXNlX2RvbWFpbl9jcmVhdGUobWF4X2lvdmFfc2l6ZSAtIDEsCj4gKwkJCQkJ Y29uZmlnLT5ib3VuY2Vfc2l6ZSk7Cj4gKwlpZiAoIWRldi0+ZG9tYWluKQo+ICsJCWdvdG8gZXJy X2RvbWFpbjsKPiArCj4gKwlkZXYtPnZxX2FsaWduID0gY29uZmlnLT52cV9hbGlnbjsKPiArCWRl di0+dnFfc2l6ZV9tYXggPSBjb25maWctPnZxX3NpemVfbWF4Owo+ICsJZGV2LT52cV9udW0gPSBj b25maWctPnZxX251bTsKPiArCWRldi0+dnFzID0ga2NhbGxvYyhkZXYtPnZxX251bSwgc2l6ZW9m KCpkZXYtPnZxcyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkZXYtPnZxcykKPiArCQlnb3RvIGVy cl92cXM7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRldi0+dnFfbnVtOyBpKyspIHsKPiArCQlk ZXYtPnZxc1tpXS5pbmRleCA9IGk7Cj4gKwkJSU5JVF9XT1JLKCZkZXYtPnZxc1tpXS5pbmplY3Qs IHZkdXNlX3ZxX2lycV9pbmplY3QpOwo+ICsJCXNwaW5fbG9ja19pbml0KCZkZXYtPnZxc1tpXS5r aWNrX2xvY2spOwo+ICsJCXNwaW5fbG9ja19pbml0KCZkZXYtPnZxc1tpXS5pcnFfbG9jayk7Cj4g Kwl9Cj4gKwo+ICsJcmV0ID0gaWRhX3NpbXBsZV9nZXQoJnZkdXNlX2lkYSwgMCwgVkRVU0VfREVW X01BWCwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9pZGE7Cj4g Kwo+ICsJZGV2LT5taW5vciA9IHJldDsKPiArCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmRldik7 Cj4gKwlkZXYtPmRldi5yZWxlYXNlID0gdmR1c2VfcmVsZWFzZV9kZXY7Cj4gKwlkZXYtPmRldi5j bGFzcyA9IHZkdXNlX2NsYXNzOwo+ICsJZGV2LT5kZXYuZGV2dCA9IE1LREVWKE1BSk9SKHZkdXNl X21ham9yKSwgZGV2LT5taW5vcik7Cj4gKwlyZXQgPSBkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAi JXMiLCBjb25maWctPm5hbWUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9uYW1lOwo+ICsK PiArCWNkZXZfaW5pdCgmZGV2LT5jZGV2LCAmdmR1c2VfZGV2X2ZvcHMpOwo+ICsJZGV2LT5jZGV2 Lm93bmVyID0gVEhJU19NT0RVTEU7Cj4gKwo+ICsJcmV0ID0gY2Rldl9kZXZpY2VfYWRkKCZkZXYt PmNkZXYsICZkZXYtPmRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHV0X2RldmljZSgmZGV2LT5k ZXYpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlsaXN0X2FkZCgmZGV2LT5saXN0LCAmdmR1 c2VfZGV2cyk7Cj4gKwlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwo+ICsKPiArCXJldHVybiAw Owo+ICtlcnJfbmFtZToKPiArCWlkYV9zaW1wbGVfcmVtb3ZlKCZ2ZHVzZV9pZGEsIGRldi0+bWlu b3IpOwo+ICtlcnJfaWRhOgo+ICsJa2ZyZWUoZGV2LT52cXMpOwo+ICtlcnJfdnFzOgo+ICsJdmR1 c2VfZG9tYWluX2Rlc3Ryb3koZGV2LT5kb21haW4pOwo+ICtlcnJfZG9tYWluOgoKClNvIHRoZSBy ZXdpbmQgYWZ0ZXIgZGV2aWNlX2luaXRpYWxpemUoKSBsb29rcyB3cm9uZywgd2Ugc2hvdWxkIHVz ZSAKcHV0X2RldmljZSgpIHdoaWNoIHdpbGwgdXNlIGRldi5yZWxhc2UoKS4KClNlZSB0aGUgY29t bWVudCBvZiBkZXZpY2VfaW5pdGlhbGl6ZSgpOgoKIMKgKiBOT1RFOiBVc2UgcHV0X2RldmljZSgp IHRvIGdpdmUgdXAgeW91ciByZWZlcmVuY2UgaW5zdGVhZCBvZiBmcmVlaW5nCiDCoCogQGRldiBk aXJlY3RseSBvbmNlIHlvdSBoYXZlIGNhbGxlZCB0aGlzIGZ1bmN0aW9uLgogwqAqLwoKPiArCXZk dXNlX2Rldl9kZXN0cm95KGRldik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg bG9uZyB2ZHVzZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKPiAr CQkJdW5zaWduZWQgbG9uZyBhcmcpCj4gK3sKPiArCWludCByZXQ7Cj4gKwl2b2lkIF9fdXNlciAq YXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKPiArCj4gKwltdXRleF9sb2NrKCZ2ZHVzZV9sb2Nr KTsKPiArCXN3aXRjaCAoY21kKSB7Cj4gKwljYXNlIFZEVVNFX0dFVF9BUElfVkVSU0lPTjoKPiAr CQlyZXQgPSBWRFVTRV9BUElfVkVSU0lPTjsKCgpUbyBwcmVzZXZlIHRoZSB1QVBJIGNvbXBhdGli aWxpdHksIGJlc2lkZXMgR0VUX0FQSV9WRVJTSU9OLCB3ZSBuZWVkIApTRVRfQVBJX1ZFUlNJT04g dG8gc3VwcG9ydCBvbGRlciB1c2Vyc3BhY2UuCgpBbmQgd2UgbmVlZCBwcm9iYWJseSBhbGwgdGhl IGlvY3RscyB3aGVuIEFQSSB2ZXJzaW9uIGlzIG5vdCBzZXQgZnJvbSAKdXNlcnNwYWNlLgoKCj4g KwkJYnJlYWs7Cj4gKwljYXNlIFZEVVNFX0NSRUFURV9ERVY6IHsKPiArCQlzdHJ1Y3QgdmR1c2Vf ZGV2X2NvbmZpZyBjb25maWc7Cj4gKwo+ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJaWYgKGNvcHlf ZnJvbV91c2VyKCZjb25maWcsIGFyZ3AsIHNpemVvZihjb25maWcpKSkKPiArCQkJYnJlYWs7Cj4g Kwo+ICsJCXJldCA9IHZkdXNlX2NyZWF0ZV9kZXYoJmNvbmZpZyk7Cj4gKwkJYnJlYWs7Cj4gKwl9 Cj4gKwljYXNlIFZEVVNFX0RFU1RST1lfREVWOiB7Cj4gKwkJY2hhciBuYW1lW1ZEVVNFX05BTUVf TUFYXTsKPiArCj4gKwkJcmV0ID0gLUVGQVVMVDsKPiArCQlpZiAoY29weV9mcm9tX3VzZXIobmFt ZSwgYXJncCwgVkRVU0VfTkFNRV9NQVgpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJcmV0ID0gdmR1 c2VfZGVzdHJveV9kZXYobmFtZSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlkZWZhdWx0Ogo+ICsJ CXJldCA9IC1FSU5WQUw7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJnZkdXNl X2xvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIHZkdXNlX2ZvcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RV TEUsCj4gKwkudW5sb2NrZWRfaW9jdGwJPSB2ZHVzZV9pb2N0bCwKPiArCS5jb21wYXRfaW9jdGwJ PSBjb21wYXRfcHRyX2lvY3RsLAo+ICsJLmxsc2VlawkJPSBub29wX2xsc2VlaywKPiArfTsKPiAr Cj4gK3N0YXRpYyBjaGFyICp2ZHVzZV9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW1vZGVf dCAqbW9kZSkKPiArewo+ICsJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAidmR1c2UvJXMi LCBkZXZfbmFtZShkZXYpKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZk dXNlX21pc2MgPSB7Cj4gKwkuZm9wcyA9ICZ2ZHVzZV9mb3BzLAo+ICsJLm1pbm9yID0gTUlTQ19E WU5BTUlDX01JTk9SLAo+ICsJLm5hbWUgPSAidmR1c2UiLAo+ICsJLm5vZGVuYW1lID0gInZkdXNl L2NvbnRyb2wiLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgdmR1c2VfbWdtdGRldl9yZWxlYXNl KHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRldmlj ZSB2ZHVzZV9tZ210ZGV2ID0gewo+ICsJLmluaXRfbmFtZSA9ICJ2ZHVzZSIsCj4gKwkucmVsZWFz ZSA9IHZkdXNlX21nbXRkZXZfcmVsZWFzZSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmRw YV9tZ210X2RldiBtZ210X2RldjsKPiArCj4gK3N0YXRpYyBpbnQgdmR1c2VfZGV2X2FkZF92ZHBh KHN0cnVjdCB2ZHVzZV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJc3RydWN0 IHZkdXNlX3ZkcGEgKnZkZXYgPSBkZXYtPnZkZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICh2 ZGV2KQo+ICsJCXJldHVybiAtRUVYSVNUOwo+ICsKPiArCXZkZXYgPSB2ZHBhX2FsbG9jX2Rldmlj ZShzdHJ1Y3QgdmR1c2VfdmRwYSwgdmRwYSwgJmRldi0+ZGV2LAo+ICsJCQkJICZ2ZHVzZV92ZHBh X2NvbmZpZ19vcHMsIG5hbWUsIHRydWUpOwo+ICsJaWYgKCF2ZGV2KQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCXZkZXYtPmRldiA9IGRldjsKPiArCXZkZXYtPnZkcGEuZGV2LmRtYV9tYXNr ID0gJnZkZXYtPnZkcGEuZGV2LmNvaGVyZW50X2RtYV9tYXNrOwo+ICsJcmV0ID0gZG1hX3NldF9t YXNrX2FuZF9jb2hlcmVudCgmdmRldi0+dmRwYS5kZXYsIERNQV9CSVRfTUFTSyg2NCkpOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIGVycjsKPiArCj4gKwlzZXRfZG1hX29wcygmdmRldi0+dmRwYS5k ZXYsICZ2ZHVzZV9kZXZfZG1hX29wcyk7Cj4gKwl2ZGV2LT52ZHBhLmRtYV9kZXYgPSAmdmRldi0+ dmRwYS5kZXY7Cj4gKwl2ZGV2LT52ZHBhLm1kZXYgPSAmbWdtdF9kZXY7Cj4gKwo+ICsJcmV0ID0g X3ZkcGFfcmVnaXN0ZXJfZGV2aWNlKCZ2ZGV2LT52ZHBhLCBkZXYtPnZxX251bSk7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCWRldi0+dmRldiA9IHZkZXY7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK2VycjoKPiArCXB1dF9kZXZpY2UoJnZkZXYtPnZkcGEuZGV2KTsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmRwYV9kZXZfYWRkKHN0cnVjdCB2ZHBhX21n bXRfZGV2ICptZGV2LCBjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgdmR1c2VfZGV2 ICpkZXY7Cj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsKPiArCj4gKwltdXRleF9sb2NrKCZ2ZHVzZV9s b2NrKTsKPiArCWRldiA9IHZkdXNlX2ZpbmRfZGV2KG5hbWUpOwo+ICsJaWYgKCFkZXYpCj4gKwkJ Z290byB1bmxvY2s7Cj4gKwo+ICsJcmV0ID0gdmR1c2VfZGV2X2FkZF92ZHBhKGRldiwgbmFtZSk7 Cj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmdmR1c2VfbG9jayk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmRwYV9kZXZfZGVsKHN0cnVjdCB2ZHBhX21n bXRfZGV2ICptZGV2LCBzdHJ1Y3QgdmRwYV9kZXZpY2UgKmRldikKPiArewo+ICsJX3ZkcGFfdW5y ZWdpc3Rlcl9kZXZpY2UoZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2ZHBh X21nbXRkZXZfb3BzIHZkcGFfZGV2X21nbXRkZXZfb3BzID0gewo+ICsJLmRldl9hZGQgPSB2ZHBh X2Rldl9hZGQsCj4gKwkuZGV2X2RlbCA9IHZkcGFfZGV2X2RlbCwKPiArfTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewo+ICsJeyBWSVJUSU9fREVW X0FOWV9JRCwgVklSVElPX0RFVl9BTllfSUQgfSwKPiArCXsgMCB9LAo+ICt9Owo+ICsKPiArc3Rh dGljIHN0cnVjdCB2ZHBhX21nbXRfZGV2IG1nbXRfZGV2ID0gewo+ICsJLmRldmljZSA9ICZ2ZHVz ZV9tZ210ZGV2LAo+ICsJLmlkX3RhYmxlID0gaWRfdGFibGUsCj4gKwkub3BzID0gJnZkcGFfZGV2 X21nbXRkZXZfb3BzLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB2ZHVzZV9tZ210ZGV2X2luaXQo dm9pZCkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnZk dXNlX21nbXRkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9 IHZkcGFfbWdtdGRldl9yZWdpc3RlcigmbWdtdF9kZXYpOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IGVycjsKPiArCj4gKwlyZXR1cm4gMDsKPiArZXJyOgo+ICsJZGV2aWNlX3VucmVnaXN0ZXIoJnZk dXNlX21nbXRkZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmR1 c2VfbWdtdGRldl9leGl0KHZvaWQpCj4gK3sKPiArCXZkcGFfbWdtdGRldl91bnJlZ2lzdGVyKCZt Z210X2Rldik7Cj4gKwlkZXZpY2VfdW5yZWdpc3RlcigmdmR1c2VfbWdtdGRldik7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdmR1c2VfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWlmIChtYXhfYm91bmNlX3NpemUgPj0gbWF4X2lvdmFfc2l6ZSkKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ2ZHVzZV9taXNjKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwl2ZHVzZV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElT X01PRFVMRSwgInZkdXNlIik7Cj4gKwlpZiAoSVNfRVJSKHZkdXNlX2NsYXNzKSkgewo+ICsJCXJl dCA9IFBUUl9FUlIodmR1c2VfY2xhc3MpOwo+ICsJCWdvdG8gZXJyX2NsYXNzOwo+ICsJfQo+ICsJ dmR1c2VfY2xhc3MtPmRldm5vZGUgPSB2ZHVzZV9kZXZub2RlOwo+ICsKPiArCXJldCA9IGFsbG9j X2NocmRldl9yZWdpb24oJnZkdXNlX21ham9yLCAwLCBWRFVTRV9ERVZfTUFYLCAidmR1c2UiKTsK PiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY2hhcmRldjsKPiArCj4gKwl2ZHVzZV9pcnFfd3Eg PSBhbGxvY193b3JrcXVldWUoInZkdXNlLWlycSIsCj4gKwkJCQlXUV9ISUdIUFJJIHwgV1FfU1lT RlMgfCBXUV9VTkJPVU5ELCAwKTsKPiArCWlmICghdmR1c2VfaXJxX3dxKQo+ICsJCWdvdG8gZXJy X3dxOwo+ICsKPiArCXJldCA9IHZkdXNlX2RvbWFpbl9pbml0KCk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gZXJyX2RvbWFpbjsKPiArCj4gKwlyZXQgPSB2ZHVzZV9tZ210ZGV2X2luaXQoKTsKPiAr CWlmIChyZXQpCj4gKwkJZ290byBlcnJfbWdtdGRldjsKPiArCj4gKwlyZXR1cm4gMDsKPiArZXJy X21nbXRkZXY6Cj4gKwl2ZHVzZV9kb21haW5fZXhpdCgpOwo+ICtlcnJfZG9tYWluOgo+ICsJZGVz dHJveV93b3JrcXVldWUodmR1c2VfaXJxX3dxKTsKPiArZXJyX3dxOgo+ICsJdW5yZWdpc3Rlcl9j aHJkZXZfcmVnaW9uKHZkdXNlX21ham9yLCBWRFVTRV9ERVZfTUFYKTsKPiArZXJyX2NoYXJkZXY6 Cj4gKwljbGFzc19kZXN0cm95KHZkdXNlX2NsYXNzKTsKPiArZXJyX2NsYXNzOgo+ICsJbWlzY19k ZXJlZ2lzdGVyKCZ2ZHVzZV9taXNjKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArbW9kdWxlX2lu aXQodmR1c2VfaW5pdCk7Cj4gKwo+ICtzdGF0aWMgdm9pZCB2ZHVzZV9leGl0KHZvaWQpCj4gK3sK PiArCW1pc2NfZGVyZWdpc3RlcigmdmR1c2VfbWlzYyk7Cj4gKwljbGFzc19kZXN0cm95KHZkdXNl X2NsYXNzKTsKPiArCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbih2ZHVzZV9tYWpvciwgVkRVU0Vf REVWX01BWCk7Cj4gKwlkZXN0cm95X3dvcmtxdWV1ZSh2ZHVzZV9pcnFfd3EpOwo+ICsJdmR1c2Vf ZG9tYWluX2V4aXQoKTsKPiArCXZkdXNlX21nbXRkZXZfZXhpdCgpOwo+ICt9Cj4gK21vZHVsZV9l eGl0KHZkdXNlX2V4aXQpOwo+ICsKPiArTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwo+ICtN T0RVTEVfTElDRU5TRShEUlZfTElDRU5TRSk7Cj4gK01PRFVMRV9BVVRIT1IoRFJWX0FVVEhPUik7 Cj4gK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv dWFwaS9saW51eC92ZHVzZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZkdXNlLmgKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzdmN2Q3MDU5YWE4Cj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZHVzZS5oCj4gQEAgLTAsMCArMSwx NTMgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1z eXNjYWxsLW5vdGUgKi8KPiArI2lmbmRlZiBfVUFQSV9WRFVTRV9IXwo+ICsjZGVmaW5lIF9VQVBJ X1ZEVVNFX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gKyNkZWZpbmUg VkRVU0VfQVBJX1ZFUlNJT04JMAo+ICsKPiArI2RlZmluZSBWRFVTRV9DT05GSUdfREFUQV9MRU4J MjU2Cj4gKyNkZWZpbmUgVkRVU0VfTkFNRV9NQVgJMjU2Cj4gKwo+ICsvKiB0aGUgY29udHJvbCBt ZXNzYWdlcyBkZWZpbml0aW9uIGZvciByZWFkL3dyaXRlICovCj4gKwo+ICtlbnVtIHZkdXNlX3Jl cV90eXBlIHsKPiArCVZEVVNFX1NFVF9WUV9OVU0sCj4gKwlWRFVTRV9TRVRfVlFfQUREUiwKPiAr CVZEVVNFX1NFVF9WUV9SRUFEWSwKPiArCVZEVVNFX0dFVF9WUV9SRUFEWSwKPiArCVZEVVNFX1NF VF9WUV9TVEFURSwKPiArCVZEVVNFX0dFVF9WUV9TVEFURSwKPiArCVZEVVNFX1NFVF9GRUFUVVJF UywKPiArCVZEVVNFX0dFVF9GRUFUVVJFUywKPiArCVZEVVNFX1NFVF9TVEFUVVMsCj4gKwlWRFVT RV9HRVRfU1RBVFVTLAo+ICsJVkRVU0VfU0VUX0NPTkZJRywKPiArCVZEVVNFX0dFVF9DT05GSUcs Cj4gKwlWRFVTRV9VUERBVEVfSU9UTEIsCj4gK307CgoKTmVlZCBjb21tZW50IHRvIGV4cGxhaW4g ZWFjaCB0eXBlLgoKCj4gKwo+ICtzdHJ1Y3QgdmR1c2VfdnFfbnVtIHsKPiArCV9fdTMyIGluZGV4 Owo+ICsJX191MzIgbnVtOwo+ICt9Owo+ICsKPiArc3RydWN0IHZkdXNlX3ZxX2FkZHIgewo+ICsJ X191MzIgaW5kZXg7Cj4gKwlfX3U2NCBkZXNjX2FkZHI7Cj4gKwlfX3U2NCBkcml2ZXJfYWRkcjsK PiArCV9fdTY0IGRldmljZV9hZGRyOwo+ICt9Owo+ICsKPiArc3RydWN0IHZkdXNlX3ZxX3JlYWR5 IHsKPiArCV9fdTMyIGluZGV4Owo+ICsJX191OCByZWFkeTsKPiArfTsKPiArCj4gK3N0cnVjdCB2 ZHVzZV92cV9zdGF0ZSB7Cj4gKwlfX3UzMiBpbmRleDsKPiArCV9fdTE2IGF2YWlsX2lkeDsKPiAr fTsKPiArCj4gK3N0cnVjdCB2ZHVzZV9kZXZfY29uZmlnX2RhdGEgewo+ICsJX191MzIgb2Zmc2V0 Owo+ICsJX191MzIgbGVuOwo+ICsJX191OCBkYXRhW1ZEVVNFX0NPTkZJR19EQVRBX0xFTl07Cj4g K307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfaW92YV9yYW5nZSB7Cj4gKwlfX3U2NCBzdGFydDsKPiAr CV9fdTY0IGxhc3Q7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZmVhdHVyZXMgewo+ICsJX191 NjQgZmVhdHVyZXM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2Vfc3RhdHVzIHsKPiArCV9fdTgg c3RhdHVzOwo+ICt9OwoKCk5lZWQgY29tbWVudCBmb3IgYWxsIHRoZSBhYm92ZSB1YXBpLgoKCj4g Kwo+ICtzdHJ1Y3QgdmR1c2VfZGV2X3JlcXVlc3Qgewo+ICsJX191MzIgdHlwZTsgLyogcmVxdWVz dCB0eXBlICovCj4gKwlfX3UzMiByZXF1ZXN0X2lkOyAvKiByZXF1ZXN0IGlkICovCj4gKwlfX3Uz MiByZXNlcnZlZFsyXTsgLyogZm9yIGZlYXR1cmUgdXNlICovCj4gKwl1bmlvbiB7Cj4gKwkJc3Ry dWN0IHZkdXNlX3ZxX251bSB2cV9udW07IC8qIHZpcnRxdWV1ZSBudW0gKi8KPiArCQlzdHJ1Y3Qg dmR1c2VfdnFfYWRkciB2cV9hZGRyOyAvKiB2aXJ0cXVldWUgYWRkcmVzcyAqLwo+ICsJCXN0cnVj dCB2ZHVzZV92cV9yZWFkeSB2cV9yZWFkeTsgLyogdmlydHF1ZXVlIHJlYWR5IHN0YXR1cyAqLwo+ ICsJCXN0cnVjdCB2ZHVzZV92cV9zdGF0ZSB2cV9zdGF0ZTsgLyogdmlydHF1ZXVlIHN0YXRlICov Cj4gKwkJc3RydWN0IHZkdXNlX2Rldl9jb25maWdfZGF0YSBjb25maWc7IC8qIHZpcnRpbyBkZXZp Y2UgY29uZmlnIHNwYWNlICovCj4gKwkJc3RydWN0IHZkdXNlX2lvdmFfcmFuZ2UgaW92YTsgLyog aW92YSByYW5nZSBmb3IgdXBkYXRpbmcgKi8KPiArCQlzdHJ1Y3QgdmR1c2VfZmVhdHVyZXMgZjsg LyogdmlydGlvIGZlYXR1cmVzICovCj4gKwkJc3RydWN0IHZkdXNlX3N0YXR1cyBzOyAvKiBkZXZp Y2Ugc3RhdHVzICovCj4gKwkJX191MzIgcGFkZGluZ1sxNl07IC8qIHBhZGRpbmcgKi8KPiArCX07 Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmR1c2VfZGV2X3Jlc3BvbnNlIHsKPiArCV9fdTMyIHJlcXVl c3RfaWQ7IC8qIGNvcnJlc3BvbmRpbmcgcmVxdWVzdCBpZCAqLwo+ICsjZGVmaW5lIFZEVVNFX1JF UVVFU1RfT0sJMHgwMAo+ICsjZGVmaW5lIFZEVVNFX1JFUVVFU1RfRkFJTEVECTB4MDEKPiArCV9f dTMyIHJlc3VsdDsgLyogdGhlIHJlc3VsdCBvZiByZXF1ZXN0ICovCj4gKwlfX3UzMiByZXNlcnZl ZFsyXTsgLyogZm9yIGZlYXR1cmUgdXNlICovCj4gKwl1bmlvbiB7Cj4gKwkJc3RydWN0IHZkdXNl X3ZxX3JlYWR5IHZxX3JlYWR5OyAvKiB2aXJ0cXVldWUgcmVhZHkgc3RhdHVzICovCj4gKwkJc3Ry dWN0IHZkdXNlX3ZxX3N0YXRlIHZxX3N0YXRlOyAvKiB2aXJ0cXVldWUgc3RhdGUgKi8KPiArCQlz dHJ1Y3QgdmR1c2VfZGV2X2NvbmZpZ19kYXRhIGNvbmZpZzsgLyogdmlydGlvIGRldmljZSBjb25m aWcgc3BhY2UgKi8KPiArCQlzdHJ1Y3QgdmR1c2VfZmVhdHVyZXMgZjsgLyogdmlydGlvIGZlYXR1 cmVzICovCj4gKwkJc3RydWN0IHZkdXNlX3N0YXR1cyBzOyAvKiBkZXZpY2Ugc3RhdHVzICovCj4g KwkJX191MzIgcGFkZGluZ1sxNl07IC8qIHBhZGRpbmcgKi8KPiArCX07Cj4gK307Cj4gKwo+ICsv KiBpb2N0bHMgKi8KPiArCj4gK3N0cnVjdCB2ZHVzZV9kZXZfY29uZmlnIHsKPiArCWNoYXIgbmFt ZVtWRFVTRV9OQU1FX01BWF07IC8qIHZkdXNlIGRldmljZSBuYW1lICovCj4gKwlfX3UzMiB2ZW5k b3JfaWQ7IC8qIHZpcnRpbyB2ZW5kb3IgaWQgKi8KPiArCV9fdTMyIGRldmljZV9pZDsgLyogdmly dGlvIGRldmljZSBpZCAqLwo+ICsJX191NjQgYm91bmNlX3NpemU7IC8qIGJvdW5jZSBidWZmZXIg c2l6ZSBmb3IgaW9tbXUgKi8KPiArCV9fdTE2IHZxX251bTsgLyogdGhlIG51bWJlciBvZiB2aXJ0 cXVldWVzICovCj4gKwlfX3UxNiB2cV9zaXplX21heDsgLyogdGhlIG1heCBzaXplIG9mIHZpcnRx dWV1ZSAqLwo+ICsJX191MzIgdnFfYWxpZ247IC8qIHRoZSBhbGxvY2F0aW9uIGFsaWdubWVudCBv ZiB2aXJ0cXVldWUncyBtZXRhZGF0YSAqLwo+ICt9Owo+ICsKPiArc3RydWN0IHZkdXNlX2lvdGxi X2VudHJ5IHsKPiArCWludCBmZDsKPiArI2RlZmluZSBWRFVTRV9BQ0NFU1NfUk8gMHgxCj4gKyNk ZWZpbmUgVkRVU0VfQUNDRVNTX1dPIDB4Mgo+ICsjZGVmaW5lIFZEVVNFX0FDQ0VTU19SVyAweDMK PiArCV9fdTggcGVybTsgLyogYWNjZXNzIHBlcm1pc3Npb24gb2YgdGhpcyByYW5nZSAqLwoKCkxl dCdzIHJlLW9yZGVyIHRoZSBwZXJtIG9yIGFkZCBleHBsaWN0IHBhZGRpbmcgaGVyZSB0byBhdm9p ZCBob2xlLgoKVGhhbmtzCgoKPiArCV9fdTY0IG9mZnNldDsgLyogdGhlIG1tYXAgb2Zmc2V0IG9u IGZkICovCj4gKwlfX3U2NCBzdGFydDsgLyogc3RhcnQgb2YgdGhlIElPVkEgcmFuZ2UgKi8KPiAr CV9fdTY0IGxhc3Q7IC8qIGxhc3Qgb2YgdGhlIElPVkEgcmFuZ2UgKi8KPiArfTsKPiArCj4gK3N0 cnVjdCB2ZHVzZV92cV9ldmVudGZkIHsKPiArCV9fdTMyIGluZGV4OyAvKiB2aXJ0cXVldWUgaW5k ZXggKi8KPiArI2RlZmluZSBWRFVTRV9FVkVOVEZEX0RFQVNTSUdOIC0xCj4gKwlpbnQgZmQ7IC8q IGV2ZW50ZmQsIC0xIG1lYW5zIGRlLWFzc2lnbmluZyB0aGUgZXZlbnRmZCAqLwo+ICt9Owo+ICsK PiArI2RlZmluZSBWRFVTRV9CQVNFCTB4ODEKPiArCj4gKy8qIEdldCB0aGUgdmVyc2lvbiBvZiBW RFVTRSBBUEkuIFRoaXMgaXMgdXNlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbiAqLwo+ICsjZGVmaW5l IFZEVVNFX0dFVF9BUElfVkVSU0lPTglfSU8oVkRVU0VfQkFTRSwgMHgwMCkKPiArCj4gKy8qIENy ZWF0ZSBhIHZkdXNlIGRldmljZSB3aGljaCBpcyByZXByZXNlbnRlZCBieSBhIGNoYXIgZGV2aWNl ICgvZGV2L3ZkdXNlLzxuYW1lPikgKi8KPiArI2RlZmluZSBWRFVTRV9DUkVBVEVfREVWCV9JT1co VkRVU0VfQkFTRSwgMHgwMSwgc3RydWN0IHZkdXNlX2Rldl9jb25maWcpCj4gKwo+ICsvKiBEZXN0 cm95IGEgdmR1c2UgZGV2aWNlLiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMgdG8g dGhlIGNoYXIgZGV2aWNlICovCj4gKyNkZWZpbmUgVkRVU0VfREVTVFJPWV9ERVYJX0lPVyhWRFVT RV9CQVNFLCAweDAyLCBjaGFyW1ZEVVNFX05BTUVfTUFYXSkKPiArCj4gKy8qIEdldCBhIG1tYXAn YWJsZSBpb3ZhIHJlZ2lvbiAqLwo+ICsjZGVmaW5lIFZEVVNFX0lPVExCX0dFVF9FTlRSWQlfSU9X UihWRFVTRV9CQVNFLCAweDAzLCBzdHJ1Y3QgdmR1c2VfaW90bGJfZW50cnkpCj4gKwo+ICsvKiBT ZXR1cCBhbiBldmVudGZkIHRvIHJlY2VpdmUga2ljayBmb3IgdmlydHF1ZXVlICovCj4gKyNkZWZp bmUgVkRVU0VfVlFfU0VUVVBfS0lDS0ZECV9JT1coVkRVU0VfQkFTRSwgMHgwNCwgc3RydWN0IHZk dXNlX3ZxX2V2ZW50ZmQpCj4gKwo+ICsvKiBJbmplY3QgYW4gaW50ZXJydXB0IGZvciBzcGVjaWZp YyB2aXJ0cXVldWUgKi8KPiArI2RlZmluZSBWRFVTRV9JTkpFQ1RfVlFfSVJRCV9JTyhWRFVTRV9C QVNFLCAweDA1KQo+ICsKPiArI2VuZGlmIC8qIF9VQVBJX1ZEVVNFX0hfICovCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFp bGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBz Oi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0 aW9u