From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH RESEND v2 1/2] drm/xen-front: Add support for Xen PV display frontend Date: Fri, 16 Mar 2018 09:23:30 +0100 Message-ID: <20180316082330.GF25297@phenom.ffwll.local> References: <1520958066-22875-1-git-send-email-andr2000@gmail.com> <1520958066-22875-2-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 19B306E3E0 for ; Fri, 16 Mar 2018 08:23:37 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id w128so1448904wmw.0 for ; Fri, 16 Mar 2018 01:23:36 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1520958066-22875-2-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, konrad.wilk@oracle.com, airlied@linux.ie, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXIgMTMsIDIwMTggYXQgMDY6MjE6MDVQTSArMDIwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gRnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5k cl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IAo+IEFkZCBzdXBwb3J0IGZvciBYZW4gcGFyYS12 aXJ0dWFsaXplZCBmcm9udGVuZCBkaXNwbGF5IGRyaXZlci4KPiBBY2NvbXBhbnlpbmcgYmFja2Vu ZCBbMV0gaXMgaW1wbGVtZW50ZWQgYXMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uCj4gYW5kIGl0 cyBoZWxwZXIgbGlicmFyeSBbMl0sIGNhcGFibGUgb2YgcnVubmluZyBhcyBhIFdlc3RvbiBjbGll bnQKPiBvciBEUk0gbWFzdGVyLgo+IENvbmZpZ3VyYXRpb24gb2YgYm90aCBiYWNrZW5kIGFuZCBm cm9udGVuZCBpcyBkb25lIHZpYQo+IFhlbiBndWVzdCBkb21haW4gY29uZmlndXJhdGlvbiBvcHRp b25zIFszXS4KPiAKPiBEcml2ZXIgbGltaXRhdGlvbnM6Cj4gIDEuIE9ubHkgcHJpbWFyeSBwbGFu ZSB3aXRob3V0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBpcyBzdXBwb3J0ZWQuCj4gIDIuIE9ubHkg b25lIHZpZGVvIG1vZGUgc3VwcG9ydGVkIHdoaWNoIHJlc29sdXRpb24gaXMgY29uZmlndXJlZCB2 aWEgWGVuU3RvcmUuCj4gIDMuIEFsbCBDUlRDcyBvcGVyYXRlIGF0IGZpeGVkIGZyZXF1ZW5jeSBv ZiA2MEh6Lgo+IAo+IDEuIEltcGxlbWVudCBYZW4gYnVzIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSBm cm9udGVuZCBkcml2ZXIgYWNjb3JkaW5nIHRvCj4gdGhlIHN0YXRlIGRpYWdyYW0gYW5kIHJlY292 ZXJ5IGZsb3cgZnJvbSBkaXNwbGF5IHBhcmEtdmlydHVhbGl6ZWQKPiBwcm90b2NvbDogeGVuL2lu dGVyZmFjZS9pby9kaXNwbGlmLmguCj4gCj4gMi4gUmVhZCBjb25maWd1cmF0aW9uIHZhbHVlcyBm cm9tIFhlbiBzdG9yZSBhY2NvcmRpbmcKPiB0byB4ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaCBw cm90b2NvbDoKPiAgIC0gcmVhZCBjb25uZWN0b3IocykgY29uZmlndXJhdGlvbgo+ICAgLSByZWFk IGJ1ZmZlciBhbGxvY2F0aW9uIG1vZGUgKGJhY2tlbmQvZnJvbnRlbmQpCj4gCj4gMy4gSGFuZGxl IFhlbiBldmVudCBjaGFubmVsczoKPiAgIC0gY3JlYXRlIGZvciBhbGwgY29uZmlndXJlZCBjb25u ZWN0b3JzIGFuZCBwdWJsaXNoCj4gICAgIGNvcnJlc3BvbmRpbmcgcmluZyByZWZlcmVuY2VzIGFu ZCBldmVudCBjaGFubmVscyBpbiBYZW4gc3RvcmUsCj4gICAgIHNvIGJhY2tlbmQgY2FuIGNvbm5l Y3QKPiAgIC0gaW1wbGVtZW50IGV2ZW50IGNoYW5uZWxzIGludGVycnVwdCBoYW5kbGVycwo+ICAg LSBjcmVhdGUgYW5kIGRlc3Ryb3kgZXZlbnQgY2hhbm5lbHMgd2l0aCByZXNwZWN0IHRvIFhlbiBi dXMgc3RhdGUKPiAKPiA0LiBJbXBsZW1lbnQgc2hhcmVkIGJ1ZmZlciBoYW5kbGluZyBhY2NvcmRp bmcgdG8gdGhlCj4gcGFyYS12aXJ0dWFsaXplZCBkaXNwbGF5IGRldmljZSBwcm90b2NvbCBhdCB4 ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaDoKPiAgIC0gaGFuZGxlIHBhZ2UgZGlyZWN0b3JpZXMg YWNjb3JkaW5nIHRvIGRpc3BsaWYgcHJvdG9jb2w6Cj4gICAgIC0gYWxsb2NhdGUgYW5kIHNoYXJl IHBhZ2UgZGlyZWN0b3JpZXMKPiAgICAgLSBncmFudCByZWZlcmVuY2VzIHRvIHRoZSByZXF1aXJl ZCBzZXQgb2YgcGFnZXMgZm9yIHRoZQo+ICAgICAgIHBhZ2UgZGlyZWN0b3J5Cj4gICAtIGFsbG9j YXRlIHhlbiBiYWxsbG9vbmVkIHBhZ2VzIHZpYSBYZW4gYmFsbG9vbiBkcml2ZXIKPiAgICAgd2l0 aCBhbGxvY194ZW5iYWxsb29uZWRfcGFnZXMvZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMKPiAgIC0g Z3JhbnQgcmVmZXJlbmNlcyB0byB0aGUgcmVxdWlyZWQgc2V0IG9mIHBhZ2VzIGZvciB0aGUKPiAg ICAgc2hhcmVkIGJ1ZmZlciBpdHNlbGYKPiAgIC0gaW1wbGVtZW50IHBhZ2VzIG1hcC91bm1hcCBm b3IgdGhlIGJ1ZmZlcnMgYWxsb2NhdGVkIGJ5IHRoZQo+ICAgICBiYWNrZW5kIChnbnR0YWJfbWFw X3JlZnMvZ250dGFiX3VubWFwX3JlZnMpCj4gCj4gNS4gSW1wbGVtZW50IGtlcm5lbCBtb2Rlc2V0 aWluZy9jb25uZWN0b3IgaGFuZGxpbmcgdXNpbmcKPiBEUk0gc2ltcGxlIEtNUyBoZWxwZXIgcGlw ZWxpbmU6Cj4gCj4gLSBpbXBsZW1lbnQgS01TIHBhcnQgb2YgdGhlIGRyaXZlciB3aXRoIHRoZSBo ZWxwIG9mIERSTQo+ICAgc2ltcGxlIHBpcGVwbGluZSBoZWxwZXIgd2hpY2ggaXMgcG9zc2libGUg ZHVlIHRvIHRoZSBmYWN0Cj4gICB0aGF0IHRoZSBwYXJhLXZpcnR1YWxpemVkIGRyaXZlciBvbmx5 IHN1cHBvcnRzIGEgc2luZ2xlCj4gICAocHJpbWFyeSkgcGxhbmU6Cj4gICAtIGluaXRpYWxpemUg Y29ubmVjdG9ycyBhY2NvcmRpbmcgdG8gWGVuU3RvcmUgY29uZmlndXJhdGlvbgo+ICAgLSBoYW5k bGUgZnJhbWUgZG9uZSBldmVudHMgZnJvbSB0aGUgYmFja2VuZAo+ICAgLSBjcmVhdGUgYW5kIGRl c3Ryb3kgZnJhbWUgYnVmZmVycyBhbmQgcHJvcGFnYXRlIHRob3NlCj4gICAgIHRvIHRoZSBiYWNr ZW5kCj4gICAtIHByb3BhZ2F0ZSBzZXQvcmVzZXQgbW9kZSBjb25maWd1cmF0aW9uIHRvIHRoZSBi YWNrZW5kIG9uIGRpc3BsYXkKPiAgICAgZW5hYmxlL2Rpc2FibGUgY2FsbGJhY2tzCj4gICAtIHNl bmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQgYW5kIGltcGxlbWVudCBsb2dpYyBm b3IKPiAgICAgcmVwb3J0aW5nIGJhY2tlbmQgSU8gZXJyb3JzIG9uIHByZXBhcmUgZmIgY2FsbGJh Y2sKPiAKPiAtIGltcGxlbWVudCB2aXJ0dWFsIGNvbm5lY3RvciBoYW5kbGluZzoKPiAgIC0gc3Vw cG9ydCBvbmx5IHBpeGVsIGZvcm1hdHMgc3VpdGFibGUgZm9yIHNpbmdsZSBwbGFuZSBtb2Rlcwo+ ICAgLSBtYWtlIHN1cmUgdGhlIGNvbm5lY3RvciBpcyBhbHdheXMgY29ubmVjdGVkCj4gICAtIHN1 cHBvcnQgYSBzaW5nbGUgdmlkZW8gbW9kZSBhcyBwZXIgcGFyYS12aXJ0dWFsaXplZCBkcml2ZXIK PiAgICAgY29uZmlndXJhdGlvbgo+IAo+IDYuIEltcGxlbWVudCBHRU0gaGFuZGxpbmcgZGVwZW5k aW5nIG9uIGRyaXZlciBtb2RlIG9mIG9wZXJhdGlvbjoKPiBkZXBlbmRpbmcgb24gdGhlIHJlcXVp cmVtZW50cyBmb3IgdGhlIHBhcmEtdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG5hbWVseQo+IHJl cXVpcmVtZW50cyBkaWN0YXRlZCBieSB0aGUgYWNjb21wYW55aW5nIERSTS8odilHUFUgZHJpdmVy cyBydW5uaW5nIGluIGJvdGgKPiBob3N0IGFuZCBndWVzdCBlbnZpcm9ubWVudHMsIG51bWJlciBv ZiBvcGVyYXRpbmcgbW9kZXMgb2YgcGFyYS12aXJ0dWFsaXplZAo+IGRpc3BsYXkgZHJpdmVyIGFy ZSBzdXBwb3J0ZWQ6Cj4gIC0gZGlzcGxheSBidWZmZXJzIGNhbiBiZSBhbGxvY2F0ZWQgYnkgZWl0 aGVyIGZyb250ZW5kIGRyaXZlciBvciBiYWNrZW5kCj4gIC0gZGlzcGxheSBidWZmZXJzIGNhbiBi ZSBhbGxvY2F0ZWQgdG8gYmUgY29udGlndW91cyBpbiBtZW1vcnkgb3Igbm90Cj4gCj4gTm90ZSEg RnJvbnRlbmQgZHJpdmVyIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jeSBvbiBjb250aWd1b3VzIG1l bW9yeSBmb3IKPiBpdHMgb3BlcmF0aW9uLgo+IAo+IDYuMS4gQnVmZmVycyBhbGxvY2F0ZWQgYnkg dGhlIGZyb250ZW5kIGRyaXZlci4KPiAKPiBUaGUgYmVsb3cgbW9kZXMgb2Ygb3BlcmF0aW9uIGFy ZSBjb25maWd1cmVkIGF0IGNvbXBpbGUtdGltZSB2aWEKPiBmcm9udGVuZCBkcml2ZXIncyBrZXJu ZWwgY29uZmlndXJhdGlvbi4KPiAKPiA2LjEuMS4gRnJvbnQgZHJpdmVyIGNvbmZpZ3VyZWQgdG8g dXNlIEdFTSBDTUEgaGVscGVycwo+ICAgICAgVGhpcyB1c2UtY2FzZSBpcyB1c2VmdWwgd2hlbiB1 c2VkIHdpdGggYWNjb21wYW55aW5nIERSTS92R1BVIGRyaXZlciBpbgo+ICAgICAgZ3Vlc3QgZG9t YWluIHdoaWNoIHdhcyBkZXNpZ25lZCB0byBvbmx5IHdvcmsgd2l0aCBjb250aWd1b3VzIGJ1ZmZl cnMsCj4gICAgICBlLmcuIERSTSBkcml2ZXIgYmFzZWQgb24gR0VNIENNQSBoZWxwZXJzOiBzdWNo IGRyaXZlcnMgY2FuIG9ubHkgaW1wb3J0Cj4gICAgICBjb250aWd1b3VzIFBSSU1FIGJ1ZmZlcnMs IHRodXMgcmVxdWlyaW5nIGZyb250ZW5kIGRyaXZlciB0byBwcm92aWRlCj4gICAgICBzdWNoLiBJ biBvcmRlciB0byBpbXBsZW1lbnQgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBwYXJhLXZpcnR1YWxp emVkCj4gICAgICBmcm9udGVuZCBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIEdFTSBD TUEgaGVscGVycy4KPiAKPiA2LjEuMi4gRnJvbnQgZHJpdmVyIGRvZXNuJ3QgdXNlIEdFTSBDTUEK PiAgICAgIElmIGFjY29tcGFueWluZyBkcml2ZXJzIGNhbiBjb3BlIHdpdGggbm9uLWNvbnRpZ3Vv dXMgbWVtb3J5IHRoZW4sIHRvCj4gICAgICBsb3dlciBwcmVzc3VyZSBvbiBDTUEgc3Vic3lzdGVt IG9mIHRoZSBrZXJuZWwsIGRyaXZlciBjYW4gYWxsb2NhdGUKPiAgICAgIGJ1ZmZlcnMgZnJvbSBz eXN0ZW0gbWVtb3J5Lgo+IAo+IE5vdGUhIElmIHVzZWQgd2l0aCBhY2NvbXBhbnlpbmcgRFJNLyh2 KUdQVSBkcml2ZXJzIHRoaXMgbW9kZSBvZiBvcGVyYXRpb24KPiBtYXkgcmVxdWlyZSBJT01NVSBz dXBwb3J0IG9uIHRoZSBwbGF0Zm9ybSwgc28gYWNjb21wYW55aW5nIERSTS92R1BVCj4gaGFyZHdh cmUgY2FuIHN0aWxsIHJlYWNoIGRpc3BsYXkgYnVmZmVyIG1lbW9yeSB3aGlsZSBpbXBvcnRpbmcg UFJJTUUKPiBidWZmZXJzIGZyb20gdGhlIGZyb250ZW5kIGRyaXZlci4KPiAKPiA2LjIuIEJ1ZmZl cnMgYWxsb2NhdGVkIGJ5IHRoZSBiYWNrZW5kCj4gCj4gVGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBp cyBydW4tdGltZSBjb25maWd1cmVkIHZpYSBndWVzdCBkb21haW4gY29uZmlndXJhdGlvbgo+IHRo cm91Z2ggWGVuU3RvcmUgZW50cmllcy4KPiAKPiBGb3Igc3lzdGVtcyB3aGljaCBkbyBub3QgcHJv dmlkZSBJT01NVSBzdXBwb3J0LCBidXQgaGF2aW5nIHNwZWNpZmljCj4gcmVxdWlyZW1lbnRzIGZv ciBkaXNwbGF5IGJ1ZmZlcnMgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgc3VjaCBidWZmZXJz Cj4gYXQgYmFja2VuZCBzaWRlIGFuZCBzaGFyZSB0aG9zZSB3aXRoIHRoZSBmcm9udGVuZC4KPiBG b3IgZXhhbXBsZSwgaWYgaG9zdCBkb21haW4gaXMgMToxIG1hcHBlZCBhbmQgaGFzIERSTS9HUFUg aGFyZHdhcmUgZXhwZWN0aW5nCj4gcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSwgdGhpcyBh bGxvd3MgaW1wbGVtZW50aW5nIHplcm8tY29weWluZwo+IHVzZS1jYXNlcy4KPiAKPiBOb3RlLCB3 aGlsZSB1c2luZyB0aGlzIHNjZW5hcmlvIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGNvbnNpZGVy ZWQ6Cj4gICBhKSBJZiBndWVzdCBkb21haW4gZGllcyB0aGVuIHBhZ2VzL2dyYW50cyByZWNlaXZl ZCBmcm9tIHRoZSBiYWNrZW5kCj4gICAgICBjYW5ub3QgYmUgY2xhaW1lZCBiYWNrCj4gICBiKSBN aXNiZWhhdmluZyBndWVzdCBtYXkgc2VuZCB0b28gbWFueSByZXF1ZXN0cyB0byB0aGUKPiAgICAg IGJhY2tlbmQgZXhoYXVzdGluZyBpdHMgZ3JhbnQgcmVmZXJlbmNlcyBhbmQgbWVtb3J5Cj4gICAg ICAoY29uc2lkZXIgdGhpcyBmcm9tIHNlY3VyaXR5IFBPVikuCj4gCj4gTm90ZSEgQ29uZmlndXJh dGlvbiBvcHRpb25zIDEuMSAoY29udGlndW91cyBkaXNwbGF5IGJ1ZmZlcnMpIGFuZCAyIChiYWNr ZW5kCj4gYWxsb2NhdGVkIGJ1ZmZlcnMpIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoZSBzYW1lIHRp bWUuCj4gCj4gNy4gSGFuZGxlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgYmFja2VuZDoKPiAgLSBz ZW5kIHJlcXVlc3RzIGFuZCB3YWl0IGZvciB0aGUgcmVzcG9uc2VzIGFjY29yZGluZwo+ICAgIHRv IHRoZSBkaXNwbGlmIHByb3RvY29sCj4gIC0gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgY29tbXVu aWNhdGlvbiBjaGFubmVsCj4gIC0gdGltZS1vdXQgdXNlZCBmb3IgYmFja2VuZCBjb21tdW5pY2F0 aW9uIGlzIHNldCB0byAzMDAwIG1zCj4gIC0gbWFuYWdlIGRpc3BsYXkgYnVmZmVycyBzaGFyZWQg d2l0aCB0aGUgYmFja2VuZAo+IAo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20veGVuLXRyb29wcy9k aXNwbF9iZQo+IFsyXSBodHRwczovL2dpdGh1Yi5jb20veGVuLXRyb29wcy9saWJ4ZW5iZQo+IFsz XSBodHRwczovL3hlbmJpdHMueGVuLm9yZy9naXR3ZWIvP3A9eGVuLmdpdDthPWJsb2I7Zj1kb2Nz L21hbi94bC5jZmcucG9kLjUuaW47aD1hNjk5MzY3Nzc5ZTJhZTEyMTJmZjhmNjM4ZWZmMDIwNmVj MWExY2M5O2hiPXJlZnMvaGVhZHMvbWFzdGVyI2wxMjU3CgpTLW8tYiBsaW5lIHdlbnQgbWlzc2lu ZyBoZXJlIDotKQoKSSd2ZSByZWFkIHRocm91Z2ggaXQsIDIgYWN0dWFsIHJldmlldyBjb21tZW50 cyAoYXJvdW5kIGhvdC11bnBsdWcgYW5kCmFyb3VuZCB0aGUgZXJyb3IgcmVjb3ZlcnkgZm9yIGZh aWxlZCBmbGlwcyksIGEgZmV3IGJpa2VzaGVkcywgYnV0IGxvb2tzCmFsbCByZWFzb25hYmxlIHRv IG1lLiBBbmQgbXVjaCBlYXNpZXIgdG8gcmVhZCBhcyBvbmUgYmlnIHBhdGNoIChpdCdzIGp1c3QK M2spLgoKT25lIG1vcmUgdGhpbmcgSSdkIGRvIGFzIGEgZm9sbG93LXVwIChkb24ndCByZXdyaXRl IGV2ZXJ5dGhpbmcsIHRoaXMgaXMKY2xvc2UgdG8gbWVyZ2UsIGJldHRlciB0byBnZXQgaXQgaW4g Zmlyc3QpOiBZb3UgaGF2ZSBhIGxvdCBvZiBpbmRpcmVjdGlvbnMKYW5kIGZ1bmN0aW9uIGNhbGxz IGFjcm9zcyBzb3VyY2VzIGZpbGVzLiBUaGF0J3Mga2luZGEgb2sgaWYgeW91IGhhdmUgYQpodWdl IGRyaXZlciB3aXRoIDEwMCtrIGxpbmVzIG9mIGNvZGUgd2hlcmUgeW91IGhhdmUgdG8gc3BsaXQg dGhpbmdzIHVwLgpCdXQgZm9yIGEgc21hbGwgZHJpdmVyIGxpa2UgeW91cnMgaGVyZSBpdCdzIGEg Yml0IG92ZXJraWxsLgoKUGVyc29uYWxseSBJJ2QgbWVyZ2UgYXQgbGVhc3QgdGhlIHhlbiBiYWNr ZW5kIHN0dWZmIGludG8gdGhlIGNvcnJlc3BvbmRpbmcKa21zIGNvZGUsIGJ1dCB0aGF0J3MgdXAg dG8geW91LiBBbmQgYXMgbWVudGlvbmVkLCBpZiB5b3UgZGVjaWRlIHRvIGRvCnRoYXQsIGEgZm9s bG93LXVwIHBhdGNoIChvbmNlIHRoaXMgaGFzIG1lcmdlZCkgaXMgcGVyZmVjdGx5IGZpbmUuCi1E YW5pZWwKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAg ICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg IHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnICAgICAgICAgICAgICAgICB8 ICAzMCArKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlICAgICAgICAgICAgICAgIHwg IDE3ICsKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMgICAgICAgICB8IDY5 MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVu X2RybV9mcm9udC5oICAgICAgICAgfCAgNzcgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfY2ZnLmMgICAgIHwgIDc3ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2NmZy5oICAgICB8ICAzNyArKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfY29ubi5jICAgIHwgMTQ2ICsrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnRfY29ubi5oICAgIHwgIDI3ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9kcnYuYyAgICAgfCAyMzkgKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9k cm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmggICAgIHwgIDc4ICsrKysKPiAgZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2V2dGNobmwuYyB8IDM4MyArKysrKysrKysrKysrKysKPiAg ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2V2dGNobmwuaCB8ICA3OSArKysrCj4g IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyAgICAgfCAzMzUgKysrKysr KysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5oICAgICB8 ICA0MSArKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5jIHwg IDc0ICsrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21zLmMgICAgIHwg MzI0ICsrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2tt cy5oICAgICB8ICAyNSArCj4gIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1 Zi5jICAgfCA0MzIgKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5f ZHJtX2Zyb250X3NoYnVmLmggICB8ICA3MiArKysKPiAgMjEgZmlsZXMgY2hhbmdlZCwgMzE4NiBp bnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL0tj b25maWcKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5j Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQu aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2NmZy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfY2ZnLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVu X2RybV9mcm9udF9jb25uLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jb25uLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZXZ0Y2hubC5jCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZXZ0Y2hubC5oCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9n ZW0uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbV9jbWEuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2ttcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v eGVuL3hlbl9kcm1fZnJvbnRfa21zLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaAo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXgg ZGVlZWZhN2ExNzczLi43NTc4MjVhYzYwZGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0yODksNiArMjg5 LDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcGwxMTEvS2NvbmZpZyIKPiAgCj4gIHNvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL3R2ZTIwMC9LY29uZmlnIgo+ICAKPiArc291cmNlICJkcml2ZXJz L2dwdS9kcm0veGVuL0tjb25maWciCj4gKwo+ICAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAo+ ICAKPiAgbWVudWNvbmZpZyBEUk1fTEVHQUNZCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IGluZGV4IDUwMDkzZmY0NDc5 Yi4uOWQ2NjY1N2VhMTE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBAIC0xMDMsMyArMTAzLDQgQEAgb2Jq LSQoQ09ORklHX0RSTV9NWFNGQikJKz0gbXhzZmIvCj4gIG9iai0kKENPTkZJR19EUk1fVElOWURS TSkgKz0gdGlueWRybS8KPiAgb2JqLSQoQ09ORklHX0RSTV9QTDExMSkgKz0gcGwxMTEvCj4gIG9i ai0kKENPTkZJR19EUk1fVFZFMjAwKSArPSB0dmUyMDAvCj4gK29iai0kKENPTkZJR19EUk1fWEVO KSArPSB4ZW4vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi40ZjRhYmM5MWYzYjYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi9LY29uZmlnCj4gQEAgLTAsMCArMSwzMCBAQAo+ICtjb25maWcgRFJNX1hF Tgo+ICsJYm9vbCAiRFJNIFN1cHBvcnQgZm9yIFhlbiBndWVzdCBPUyIKPiArCWRlcGVuZHMgb24g WEVOCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFi bGUgRFJNIHN1cHBvcnQKPiArCSAgZm9yIFhlbi4KPiArCj4gK2NvbmZpZyBEUk1fWEVOX0ZST05U RU5ECj4gKwl0cmlzdGF0ZSAiUGFyYS12aXJ0dWFsaXplZCBmcm9udGVuZCBkcml2ZXIgZm9yIFhl biBndWVzdCBPUyIKPiArCWRlcGVuZHMgb24gRFJNX1hFTgo+ICsJZGVwZW5kcyBvbiBEUk0KPiAr CXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCj4gKwlz ZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORAo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRp b24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIGEgcGFyYS12aXJ0dWFsaXplZAo+ICsJICBmcm9udGVu ZCBEUk0vS01TIGRyaXZlciBmb3IgWGVuIGd1ZXN0IE9TZXMuCj4gKwo+ICtjb25maWcgRFJNX1hF Tl9GUk9OVEVORF9DTUEKPiArCWJvb2wgIlVzZSBEUk0gQ01BIHRvIGFsbG9jYXRlIGR1bWIgYnVm ZmVycyIKPiArCWRlcGVuZHMgb24gRFJNX1hFTl9GUk9OVEVORAo+ICsJc2VsZWN0IERSTV9LTVNf Q01BX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgo+ICsJaGVscAo+ICsJICBV c2UgRFJNIENNQSBoZWxwZXJzIHRvIGFsbG9jYXRlIGRpc3BsYXkgYnVmZmVycy4KPiArCSAgVGhp cyBpcyB1c2VmdWwgZm9yIHRoZSB1c2UtY2FzZXMgd2hlbiBndWVzdCBkcml2ZXIgbmVlZHMgdG8K PiArCSAgc2hhcmUgb3IgZXhwb3J0IGJ1ZmZlcnMgdG8gb3RoZXIgZHJpdmVycyB3aGljaCBvbmx5 IGV4cGVjdAo+ICsJICBjb250aWd1b3VzIGJ1ZmZlcnMuCj4gKwkgIE5vdGU6IGluIHRoaXMgbW9k ZSBkcml2ZXIgY2Fubm90IHVzZSBidWZmZXJzIGFsbG9jYXRlZAo+ICsJICBieSB0aGUgYmFja2Vu ZC4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS94ZW4vTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uYWMxYjgyZjJhODYwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4vTWFrZWZpbGUKPiBAQCAtMCwwICsxLDE3IEBACj4gKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4gKwo+ICtkcm1feGVuX2Zyb250LW9ianMgOj0geGVu X2RybV9mcm9udC5vIFwKPiArCQkgICAgICB4ZW5fZHJtX2Zyb250X2Rydi5vIFwKPiArCQkgICAg ICB4ZW5fZHJtX2Zyb250X2ttcy5vIFwKPiArCQkgICAgICB4ZW5fZHJtX2Zyb250X2Nvbm4ubyBc Cj4gKwkJICAgICAgeGVuX2RybV9mcm9udF9ldnRjaG5sLm8gXAo+ICsJCSAgICAgIHhlbl9kcm1f ZnJvbnRfc2hidWYubyBcCj4gKwkJICAgICAgeGVuX2RybV9mcm9udF9jZmcubwo+ICsKPiAraWZl cSAoJChDT05GSUdfRFJNX1hFTl9GUk9OVEVORF9DTUEpLHkpCj4gKwlkcm1feGVuX2Zyb250LW9i anMgKz0geGVuX2RybV9mcm9udF9nZW1fY21hLm8KPiArZWxzZQo+ICsJZHJtX3hlbl9mcm9udC1v YmpzICs9IHhlbl9kcm1fZnJvbnRfZ2VtLm8KPiArZW5kaWYKPiArCj4gK29iai0kKENPTkZJR19E Uk1fWEVOX0ZST05URU5EKSArPSBkcm1feGVuX2Zyb250Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1fZnJvbnQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5k YmFiZGY5OGY4OTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250LmMKPiBAQCAtMCwwICsxLDY5MCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCBPUiBNSVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFs IERSTSBkZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0 ZW1zIEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xl a3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRy bS9kcm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKwo+ICsjaW5j bHVkZSA8eGVuL3BsYXRmb3JtX3BjaS5oPgo+ICsjaW5jbHVkZSA8eGVuL3hlbi5oPgo+ICsjaW5j bHVkZSA8eGVuL3hlbmJ1cy5oPgo+ICsKPiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vZGlz cGxpZi5oPgo+ICsKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPiArI2luY2x1ZGUgInhl bl9kcm1fZnJvbnRfZHJ2LmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2V2dGNobmwuaCIK PiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfc2hidWYuaCIKPiArCj4gK3N0cnVjdCB4ZW5fZHJt X2Zyb250X2RidWYgewo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJdWludDY0X3QgZGJ1 Zl9jb29raWU7Cj4gKwl1aW50NjRfdCBmYl9jb29raWU7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiAqc2hidWY7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGRidWZfYWRkX3RvX2xpc3Qo c3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQlzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9zaGJ1ZiAqc2hidWYsIHVpbnQ2NF90IGRidWZfY29va2llKQo+ICt7Cj4gKwlzdHJ1 Y3QgeGVuX2RybV9mcm9udF9kYnVmICpkYnVmOwo+ICsKPiArCWRidWYgPSBremFsbG9jKHNpemVv ZigqZGJ1ZiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkYnVmKQo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsKPiArCWRidWYtPmRidWZfY29va2llID0gZGJ1Zl9jb29raWU7Cj4gKwlkYnVmLT5zaGJ1 ZiA9IHNoYnVmOwo+ICsJbGlzdF9hZGQoJmRidWYtPmxpc3QsICZmcm9udF9pbmZvLT5kYnVmX2xp c3QpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2RybV9mcm9u dF9kYnVmICpkYnVmX2dldChzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QsCj4gKwkJdWludDY0 X3QgZGJ1Zl9jb29raWUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RidWYgKmJ1Ziwg KnE7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBs aXN0KQo+ICsJCWlmIChidWYtPmRidWZfY29va2llID09IGRidWZfY29va2llKQo+ICsJCQlyZXR1 cm4gYnVmOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkYnVm X2ZsdXNoX2ZiKHN0cnVjdCBsaXN0X2hlYWQgKmRidWZfbGlzdCwgdWludDY0X3QgZmJfY29va2ll KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmICpidWYsICpxOwo+ICsKPiArCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWYsIHEsIGRidWZfbGlzdCwgbGlzdCkKPiArCQlpZiAo YnVmLT5mYl9jb29raWUgPT0gZmJfY29va2llKQo+ICsJCQl4ZW5fZHJtX2Zyb250X3NoYnVmX2Zs dXNoKGJ1Zi0+c2hidWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkYnVmX2ZyZWUoc3RydWN0 IGxpc3RfaGVhZCAqZGJ1Zl9saXN0LCB1aW50NjRfdCBkYnVmX2Nvb2tpZSkKPiArewo+ICsJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqYnVmLCAqcTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoYnVmLCBxLCBkYnVmX2xpc3QsIGxpc3QpCj4gKwkJaWYgKGJ1Zi0+ZGJ1Zl9jb29r aWUgPT0gZGJ1Zl9jb29raWUpIHsKPiArCQkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7Cj4gKwkJCXhl bl9kcm1fZnJvbnRfc2hidWZfdW5tYXAoYnVmLT5zaGJ1Zik7Cj4gKwkJCXhlbl9kcm1fZnJvbnRf c2hidWZfZnJlZShidWYtPnNoYnVmKTsKPiArCQkJa2ZyZWUoYnVmKTsKPiArCQkJYnJlYWs7Cj4g KwkJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkYnVmX2ZyZWVfYWxsKHN0cnVjdCBsaXN0X2hl YWQgKmRidWZfbGlzdCkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqYnVmLCAq cTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnVmLCBxLCBkYnVmX2xpc3QsIGxp c3QpIHsKPiArCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKPiArCQl4ZW5fZHJtX2Zyb250X3NoYnVm X3VubWFwKGJ1Zi0+c2hidWYpOwo+ICsJCXhlbl9kcm1fZnJvbnRfc2hidWZfZnJlZShidWYtPnNo YnVmKTsKPiArCQlrZnJlZShidWYpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHhl bmRpc3BsX3JlcSAqYmVfcHJlcGFyZV9yZXEoCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0 Y2hubCAqZXZ0Y2hubCwgdWludDhfdCBvcGVyYXRpb24pCj4gK3sKPiArCXN0cnVjdCB4ZW5kaXNw bF9yZXEgKnJlcTsKPiArCj4gKwlyZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCZldnRjaG5sLT51LnJl cS5yaW5nLAo+ICsJCQlldnRjaG5sLT51LnJlcS5yaW5nLnJlcV9wcm9kX3B2dCk7Cj4gKwlyZXEt Pm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKPiArCXJlcS0+aWQgPSBldnRjaG5sLT5ldnRfbmV4dF9p ZCsrOwo+ICsJZXZ0Y2hubC0+ZXZ0X2lkID0gcmVxLT5pZDsKPiArCXJldHVybiByZXE7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgYmVfc3RyZWFtX2RvX2lvKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2 dGNobmwgKmV2dGNobmwsCj4gKwkJc3RydWN0IHhlbmRpc3BsX3JlcSAqcmVxKQo+ICt7Cj4gKwly ZWluaXRfY29tcGxldGlvbigmZXZ0Y2hubC0+dS5yZXEuY29tcGxldGlvbik7Cj4gKwlpZiAodW5s aWtlbHkoZXZ0Y2hubC0+c3RhdGUgIT0gRVZUQ0hOTF9TVEFURV9DT05ORUNURUQpKQo+ICsJCXJl dHVybiAtRUlPOwo+ICsKPiArCXhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9mbHVzaChldnRjaG5sKTsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJlX3N0cmVhbV93YWl0X2lvKHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmwpCj4gK3sKPiArCWlmICh3YWl0X2Zv cl9jb21wbGV0aW9uX3RpbWVvdXQoJmV2dGNobmwtPnUucmVxLmNvbXBsZXRpb24sCj4gKwkJCW1z ZWNzX3RvX2ppZmZpZXMoWEVOX0RSTV9GUk9OVF9XQUlUX0JBQ0tfTVMpKSA8PSAwKQo+ICsJCXJl dHVybiAtRVRJTUVET1VUOwo+ICsKPiArCXJldHVybiBldnRjaG5sLT51LnJlcS5yZXNwX3N0YXR1 czsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfbW9kZV9zZXQoc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKPiArCQl1aW50MzJfdCB4LCB1aW50MzJfdCB5 LCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAo+ICsJCXVpbnQzMl90IGJwcCwgdWlu dDY0X3QgZmJfY29va2llKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sICpl dnRjaG5sOwo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbzsKPiArCXN0 cnVjdCB4ZW5kaXNwbF9yZXEgKnJlcTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWZyb250X2luZm8gPSBwaXBlbGluZS0+ZHJtX2luZm8tPmZyb250X2luZm87 Cj4gKwlldnRjaG5sID0gJmZyb250X2luZm8tPmV2dF9wYWlyc1twaXBlbGluZS0+aW5kZXhdLnJl cTsKPiArCWlmICh1bmxpa2VseSghZXZ0Y2hubCkpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmZnJvbnRfaW5mby0+cmVxX2lvX2xvY2spOwo+ICsKPiArCXNwaW5fbG9ja19p cnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwlyZXEgPSBiZV9wcmVwYXJl X3JlcShldnRjaG5sLCBYRU5ESVNQTF9PUF9TRVRfQ09ORklHKTsKPiArCXJlcS0+b3Auc2V0X2Nv bmZpZy54ID0geDsKPiArCXJlcS0+b3Auc2V0X2NvbmZpZy55ID0geTsKPiArCXJlcS0+b3Auc2V0 X2NvbmZpZy53aWR0aCA9IHdpZHRoOwo+ICsJcmVxLT5vcC5zZXRfY29uZmlnLmhlaWdodCA9IGhl aWdodDsKPiArCXJlcS0+b3Auc2V0X2NvbmZpZy5icHAgPSBicHA7Cj4gKwlyZXEtPm9wLnNldF9j b25maWcuZmJfY29va2llID0gZmJfY29va2llOwo+ICsKPiArCXJldCA9IGJlX3N0cmVhbV9kb19p byhldnRjaG5sLCByZXEpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbnRfaW5mby0+ aW9fbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChyZXQgPT0gMCkKPiArCQlyZXQgPSBiZV9zdHJl YW1fd2FpdF9pbyhldnRjaG5sKTsKPiArCj4gKwltdXRleF91bmxvY2soJmZyb250X2luZm8tPnJl cV9pb19sb2NrKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYmVfZGJ1 Zl9jcmVhdGVfaW50KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJ dWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCj4g KwkJdWludDMyX3QgYnBwLCB1aW50NjRfdCBzaXplLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAo+ICsJ CXN0cnVjdCBzZ190YWJsZSAqc2d0KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRj aG5sICpldnRjaG5sOwo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKnNoYnVmOwo+ICsJ c3RydWN0IHhlbmRpc3BsX3JlcSAqcmVxOwo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWZf Y2ZnIGJ1Zl9jZmc7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJaW50IHJldDsKPiArCj4g KwlldnRjaG5sID0gJmZyb250X2luZm8tPmV2dF9wYWlyc1tHRU5FUklDX09QX0VWVF9DSE5MXS5y ZXE7Cj4gKwlpZiAodW5saWtlbHkoIWV2dGNobmwpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiAr CW1lbXNldCgmYnVmX2NmZywgMCwgc2l6ZW9mKGJ1Zl9jZmcpKTsKPiArCWJ1Zl9jZmcueGJfZGV2 ID0gZnJvbnRfaW5mby0+eGJfZGV2Owo+ICsJYnVmX2NmZy5wYWdlcyA9IHBhZ2VzOwo+ICsJYnVm X2NmZy5zaXplID0gc2l6ZTsKPiArCWJ1Zl9jZmcuc2d0ID0gc2d0Owo+ICsJYnVmX2NmZy5iZV9h bGxvYyA9IGZyb250X2luZm8tPmNmZy5iZV9hbGxvYzsKPiArCj4gKwlzaGJ1ZiA9IHhlbl9kcm1f ZnJvbnRfc2hidWZfYWxsb2MoJmJ1Zl9jZmcpOwo+ICsJaWYgKCFzaGJ1ZikKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlyZXQgPSBkYnVmX2FkZF90b19saXN0KGZyb250X2luZm8sIHNoYnVm LCBkYnVmX2Nvb2tpZSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCXhlbl9kcm1fZnJvbnRfc2hi dWZfZnJlZShzaGJ1Zik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwltdXRleF9sb2Nr KCZmcm9udF9pbmZvLT5yZXFfaW9fbG9jayk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmZy b250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCXJlcSA9IGJlX3ByZXBhcmVfcmVxKGV2dGNo bmwsIFhFTkRJU1BMX09QX0RCVUZfQ1JFQVRFKTsKPiArCXJlcS0+b3AuZGJ1Zl9jcmVhdGUuZ3Jl Zl9kaXJlY3RvcnkgPQo+ICsJCQl4ZW5fZHJtX2Zyb250X3NoYnVmX2dldF9kaXJfc3RhcnQoc2hi dWYpOwo+ICsJcmVxLT5vcC5kYnVmX2NyZWF0ZS5idWZmZXJfc3ogPSBzaXplOwo+ICsJcmVxLT5v cC5kYnVmX2NyZWF0ZS5kYnVmX2Nvb2tpZSA9IGRidWZfY29va2llOwo+ICsJcmVxLT5vcC5kYnVm X2NyZWF0ZS53aWR0aCA9IHdpZHRoOwo+ICsJcmVxLT5vcC5kYnVmX2NyZWF0ZS5oZWlnaHQgPSBo ZWlnaHQ7Cj4gKwlyZXEtPm9wLmRidWZfY3JlYXRlLmJwcCA9IGJwcDsKPiArCWlmIChidWZfY2Zn LmJlX2FsbG9jKQo+ICsJCXJlcS0+b3AuZGJ1Zl9jcmVhdGUuZmxhZ3MgfD0gWEVORElTUExfREJV Rl9GTEdfUkVRX0FMTE9DOwo+ICsKPiArCXJldCA9IGJlX3N0cmVhbV9kb19pbyhldnRjaG5sLCBy ZXEpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbnRfaW5mby0+aW9fbG9jaywgZmxh Z3MpOwo+ICsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlyZXQgPSBi ZV9zdHJlYW1fd2FpdF9pbyhldnRjaG5sKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZmFp bDsKPiArCj4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X3NoYnVmX21hcChzaGJ1Zik7Cj4gKwlpZiAo cmV0IDwgMCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZmcm9udF9pbmZv LT5yZXFfaW9fbG9jayk7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2ZhaWw6Cj4gKwltdXRleF91bmxv Y2soJmZyb250X2luZm8tPnJlcV9pb19sb2NrKTsKPiArCWRidWZfZnJlZSgmZnJvbnRfaW5mby0+ ZGJ1Zl9saXN0LCBkYnVmX2Nvb2tpZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQg eGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZV9mcm9tX3NndChzdHJ1Y3QgeGVuX2RybV9mcm9udF9p bmZvICpmcm9udF9pbmZvLAo+ICsJCXVpbnQ2NF90IGRidWZfY29va2llLCB1aW50MzJfdCB3aWR0 aCwgdWludDMyX3QgaGVpZ2h0LAo+ICsJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3Ry dWN0IHNnX3RhYmxlICpzZ3QpCj4gK3sKPiArCXJldHVybiBiZV9kYnVmX2NyZWF0ZV9pbnQoZnJv bnRfaW5mbywgZGJ1Zl9jb29raWUsIHdpZHRoLCBoZWlnaHQsCj4gKwkJCWJwcCwgc2l6ZSwgTlVM TCwgc2d0KTsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGVfZnJvbV9w YWdlcyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCXVpbnQ2NF90 IGRidWZfY29va2llLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAo+ICsJCXVpbnQz Ml90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKipwYWdlcykKPiArewo+ICsJcmV0 dXJuIGJlX2RidWZfY3JlYXRlX2ludChmcm9udF9pbmZvLCBkYnVmX2Nvb2tpZSwgd2lkdGgsIGhl aWdodCwKPiArCQkJYnBwLCBzaXplLCBwYWdlcywgTlVMTCk7Cj4gK30KClRoZSBhYm92ZSB0d28g d3JhcHBlcnMgc2VlbSBhIGJpdCBtdWNoLCBqdXN0IHRvIHNldCBzZ3QgPSBOVUxMIG9yIHBhZ2Vz ID0KTlVMTCBpbiBvbmUgb2YgdGhlbS4gSSdkIGRyb3AgdGhlbSwgYnV0IHRoYXQncyBhIGJpa2Vz aGVkIHNvIGZlZWwgZnJlZSB0bwppZ25vcmUuCgo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZGJ1 Zl9kZXN0cm95KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJdWlu dDY0X3QgZGJ1Zl9jb29raWUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwg KmV2dGNobmw7Cj4gKwlzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOwo+ICsJYm9vbCBiZV9hbGxvYzsKPiArCWludCByZXQ7Cj4gKwo+ICsJZXZ0Y2hubCA9 ICZmcm9udF9pbmZvLT5ldnRfcGFpcnNbR0VORVJJQ19PUF9FVlRfQ0hOTF0ucmVxOwo+ICsJaWYg KHVubGlrZWx5KCFldnRjaG5sKSkKPiArCQlyZXR1cm4gLUVJTzsKPiArCj4gKwliZV9hbGxvYyA9 IGZyb250X2luZm8tPmNmZy5iZV9hbGxvYzsKPiArCj4gKwkvKgo+ICsJICogZm9yIHRoZSBiYWNr ZW5kIGFsbG9jYXRlZCBidWZmZXIgcmVsZWFzZSByZWZlcmVuY2VzIG5vdywgc28gYmFja2VuZAo+ ICsJICogY2FuIGZyZWUgdGhlIGJ1ZmZlcgo+ICsJICovCj4gKwlpZiAoYmVfYWxsb2MpCj4gKwkJ ZGJ1Zl9mcmVlKCZmcm9udF9pbmZvLT5kYnVmX2xpc3QsIGRidWZfY29va2llKTsKPiArCj4gKwlt dXRleF9sb2NrKCZmcm9udF9pbmZvLT5yZXFfaW9fbG9jayk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2ly cXNhdmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCXJlcSA9IGJlX3ByZXBhcmVf cmVxKGV2dGNobmwsIFhFTkRJU1BMX09QX0RCVUZfREVTVFJPWSk7Cj4gKwlyZXEtPm9wLmRidWZf ZGVzdHJveS5kYnVmX2Nvb2tpZSA9IGRidWZfY29va2llOwo+ICsKPiArCXJldCA9IGJlX3N0cmVh bV9kb19pbyhldnRjaG5sLCByZXEpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbnRf aW5mby0+aW9fbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChyZXQgPT0gMCkKPiArCQlyZXQgPSBi ZV9zdHJlYW1fd2FpdF9pbyhldnRjaG5sKTsKPiArCj4gKwkvKgo+ICsJICogZG8gdGhpcyByZWdh cmRsZXNzIG9mIGNvbW11bmljYXRpb24gc3RhdHVzIHdpdGggdGhlIGJhY2tlbmQ6Cj4gKwkgKiBp ZiB3ZSBjYW5ub3QgcmVtb3ZlIHJlbW90ZSByZXNvdXJjZXMgcmVtb3ZlIHdoYXQgd2UgY2FuIGxv Y2FsbHkKPiArCSAqLwo+ICsJaWYgKCFiZV9hbGxvYykKPiArCQlkYnVmX2ZyZWUoJmZyb250X2lu Zm8tPmRidWZfbGlzdCwgZGJ1Zl9jb29raWUpOwo+ICsKPiArCW11dGV4X3VubG9jaygmZnJvbnRf aW5mby0+cmVxX2lvX2xvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IHhlbl9k cm1fZnJvbnRfZmJfYXR0YWNoKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8s Cj4gKwkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQ2NF90IGZiX2Nvb2tpZSwgdWludDMyX3Qg d2lkdGgsCj4gKwkJdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBwaXhlbF9mb3JtYXQpCj4gK3sK PiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmw7Cj4gKwlzdHJ1Y3QgeGVu X2RybV9mcm9udF9kYnVmICpidWY7Cj4gKwlzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4gKwl1 bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJaW50IHJldDsKPiArCj4gKwlldnRjaG5sID0gJmZyb250 X2luZm8tPmV2dF9wYWlyc1tHRU5FUklDX09QX0VWVF9DSE5MXS5yZXE7Cj4gKwlpZiAodW5saWtl bHkoIWV2dGNobmwpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiArCWJ1ZiA9IGRidWZfZ2V0KCZm cm9udF9pbmZvLT5kYnVmX2xpc3QsIGRidWZfY29va2llKTsKPiArCWlmICghYnVmKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsKPiArCWJ1Zi0+ZmJfY29va2llID0gZmJfY29va2llOwo+ICsKPiAr CW11dGV4X2xvY2soJmZyb250X2luZm8tPnJlcV9pb19sb2NrKTsKPiArCj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmZnJvbnRfaW5mby0+aW9fbG9jaywgZmxhZ3MpOwo+ICsJcmVxID0gYmVfcHJlcGFy ZV9yZXEoZXZ0Y2hubCwgWEVORElTUExfT1BfRkJfQVRUQUNIKTsKPiArCXJlcS0+b3AuZmJfYXR0 YWNoLmRidWZfY29va2llID0gZGJ1Zl9jb29raWU7Cj4gKwlyZXEtPm9wLmZiX2F0dGFjaC5mYl9j b29raWUgPSBmYl9jb29raWU7Cj4gKwlyZXEtPm9wLmZiX2F0dGFjaC53aWR0aCA9IHdpZHRoOwo+ ICsJcmVxLT5vcC5mYl9hdHRhY2guaGVpZ2h0ID0gaGVpZ2h0Owo+ICsJcmVxLT5vcC5mYl9hdHRh Y2gucGl4ZWxfZm9ybWF0ID0gcGl4ZWxfZm9ybWF0Owo+ICsKPiArCXJldCA9IGJlX3N0cmVhbV9k b19pbyhldnRjaG5sLCByZXEpOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJvbnRfaW5m by0+aW9fbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChyZXQgPT0gMCkKPiArCQlyZXQgPSBiZV9z dHJlYW1fd2FpdF9pbyhldnRjaG5sKTsKPiArCj4gKwltdXRleF91bmxvY2soJmZyb250X2luZm8t PnJlcV9pb19sb2NrKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJtX2Zy b250X2ZiX2RldGFjaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJ CXVpbnQ2NF90IGZiX2Nvb2tpZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hu bCAqZXZ0Y2hubDsKPiArCXN0cnVjdCB4ZW5kaXNwbF9yZXEgKnJlcTsKPiArCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWV2dGNobmwgPSAmZnJvbnRfaW5mby0+ZXZ0 X3BhaXJzW0dFTkVSSUNfT1BfRVZUX0NITkxdLnJlcTsKPiArCWlmICh1bmxpa2VseSghZXZ0Y2hu bCkpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZnJvbnRfaW5mby0+cmVx X2lvX2xvY2spOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2Nr LCBmbGFncyk7Cj4gKwlyZXEgPSBiZV9wcmVwYXJlX3JlcShldnRjaG5sLCBYRU5ESVNQTF9PUF9G Ql9ERVRBQ0gpOwo+ICsJcmVxLT5vcC5mYl9kZXRhY2guZmJfY29va2llID0gZmJfY29va2llOwo+ ICsKPiArCXJldCA9IGJlX3N0cmVhbV9kb19pbyhldnRjaG5sLCByZXEpOwo+ICsJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZnJvbnRfaW5mby0+aW9fbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChy ZXQgPT0gMCkKPiArCQlyZXQgPSBiZV9zdHJlYW1fd2FpdF9pbyhldnRjaG5sKTsKPiArCj4gKwlt dXRleF91bmxvY2soJmZyb250X2luZm8tPnJlcV9pb19sb2NrKTsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X3BhZ2VfZmxpcChzdHJ1Y3QgeGVuX2RybV9mcm9u dF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCWludCBjb25uX2lkeCwgdWludDY0X3QgZmJfY29va2ll KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sICpldnRjaG5sOwo+ICsJc3Ry dWN0IHhlbmRpc3BsX3JlcSAqcmVxOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaWYgKHVubGlrZWx5KGNvbm5faWR4ID49IGZyb250X2luZm8tPm51bV9ldnRf cGFpcnMpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRidWZfZmx1c2hfZmIoJmZyb250 X2luZm8tPmRidWZfbGlzdCwgZmJfY29va2llKTsKPiArCWV2dGNobmwgPSAmZnJvbnRfaW5mby0+ ZXZ0X3BhaXJzW2Nvbm5faWR4XS5yZXE7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZnJvbnRfaW5mby0+ cmVxX2lvX2xvY2spOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19s b2NrLCBmbGFncyk7Cj4gKwlyZXEgPSBiZV9wcmVwYXJlX3JlcShldnRjaG5sLCBYRU5ESVNQTF9P UF9QR19GTElQKTsKPiArCXJlcS0+b3AucGdfZmxpcC5mYl9jb29raWUgPSBmYl9jb29raWU7Cj4g Kwo+ICsJcmV0ID0gYmVfc3RyZWFtX2RvX2lvKGV2dGNobmwsIHJlcSk7Cj4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKHJl dCA9PSAwKQo+ICsJCXJldCA9IGJlX3N0cmVhbV93YWl0X2lvKGV2dGNobmwpOwo+ICsKPiArCW11 dGV4X3VubG9jaygmZnJvbnRfaW5mby0+cmVxX2lvX2xvY2spOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArdm9pZCB4ZW5fZHJtX2Zyb250X3VubG9hZChzdHJ1Y3QgeGVuX2RybV9mcm9udF9p bmZvICpmcm9udF9pbmZvKQo+ICt7Cj4gKwlpZiAoZnJvbnRfaW5mby0+eGJfZGV2LT5zdGF0ZSAh PSBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcpCj4gKwkJcmV0dXJuOwo+ICsKPiArCURSTV9ERUJV RygiQ2FuIHRyeSByZW1vdmluZyBkcml2ZXIgbm93XG4iKTsKPiArCXhlbmJ1c19zd2l0Y2hfc3Rh dGUoZnJvbnRfaW5mby0+eGJfZGV2LCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgeGVuX2RybV9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJLyoKPiArCSAqIFRoZSBkZXZpY2UgaXMgbm90IHNwYXduIGZyb20gYSBk ZXZpY2UgdHJlZSwgc28gYXJjaF9zZXR1cF9kbWFfb3BzCj4gKwkgKiBpcyBub3QgY2FsbGVkLCB0 aHVzIGxlYXZpbmcgdGhlIGRldmljZSB3aXRoIGR1bW15IERNQSBvcHMuCj4gKwkgKiBUaGlzIG1h a2VzIHRoZSBkZXZpY2UgcmV0dXJuIGVycm9yIG9uIFBSSU1FIGJ1ZmZlciBpbXBvcnQsIHdoaWNo Cj4gKwkgKiBpcyBub3QgY29ycmVjdDogdG8gZml4IHRoaXMgY2FsbCBvZl9kbWFfY29uZmlndXJl KCkgd2l0aCBhIE5VTEwKPiArCSAqIG5vZGUgdG8gc2V0IGRlZmF1bHQgRE1BIG9wcy4KPiArCSAq Lwo+ICsJb2ZfZG1hX2NvbmZpZ3VyZSgmcGRldi0+ZGV2LCBOVUxMKTsKPiArCXJldHVybiB4ZW5f ZHJtX2Zyb250X2Rydl9wcm9iZShwZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB4ZW5fZHJt X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJcmV0dXJu IHhlbl9kcm1fZnJvbnRfZHJ2X3JlbW92ZShwZGV2KTsKPiArfQo+ICsKPiArc3RydWN0IHBsYXRm b3JtX2RldmljZV9pbmZvIHhlbl9kcm1fZnJvbnRfcGxhdGZvcm1faW5mbyA9IHsKPiArCS5uYW1l ID0gWEVORElTUExfRFJJVkVSX05BTUUsCj4gKwkuaWQgPSAwLAo+ICsJLm51bV9yZXMgPSAwLAo+ ICsJLmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIHhlbl9kcm1fZnJvbnRfZnJvbnRfaW5mbyA9IHsKPiArCS5wcm9i ZQkJPSB4ZW5fZHJtX2Rydl9wcm9iZSwKPiArCS5yZW1vdmUJCT0geGVuX2RybV9kcnZfcmVtb3Zl LAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSBYRU5ESVNQTF9EUklWRVJfTkFNRSwKPiAr CX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB4ZW5fZHJtX2Rydl9kZWluaXQoc3RydWN0IHhl bl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykKPiArewo+ICsJaWYgKCFmcm9udF9pbmZvLT5k cm1fcGRydl9yZWdpc3RlcmVkKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoZnJvbnRfaW5mby0+ ZHJtX3BkZXYpCj4gKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnJvbnRfaW5mby0+ZHJt X3BkZXYpOwo+ICsKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4ZW5fZHJtX2Zyb250 X2Zyb250X2luZm8pOwo+ICsJZnJvbnRfaW5mby0+ZHJtX3BkcnZfcmVnaXN0ZXJlZCA9IGZhbHNl Owo+ICsJZnJvbnRfaW5mby0+ZHJtX3BkZXYgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHhlbl9kcm1fZHJ2X2luaXQoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIo Jnhlbl9kcm1fZnJvbnRfZnJvbnRfaW5mbyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCWZyb250X2luZm8tPmRybV9wZHJ2X3JlZ2lzdGVyZWQgPSB0cnVlOwo+ICsJ LyogcGFzcyBjYXJkIGNvbmZpZ3VyYXRpb24gdmlhIHBsYXRmb3JtIGRhdGEgKi8KPiArCXhlbl9k cm1fZnJvbnRfcGxhdGZvcm1faW5mby5kYXRhID0gJmZyb250X2luZm8tPmNmZzsKPiArCXhlbl9k cm1fZnJvbnRfcGxhdGZvcm1faW5mby5zaXplX2RhdGEgPSBzaXplb2YoZnJvbnRfaW5mby0+Y2Zn KTsKPiArCj4gKwlmcm9udF9pbmZvLT5kcm1fcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rl cl9mdWxsKAo+ICsJCQkmeGVuX2RybV9mcm9udF9wbGF0Zm9ybV9pbmZvKTsKPiArCWlmIChJU19F UlJfT1JfTlVMTChmcm9udF9pbmZvLT5kcm1fcGRldikpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxl ZCB0byByZWdpc3RlciAiIFhFTkRJU1BMX0RSSVZFUl9OQU1FICIgUFYgRFJNIGRyaXZlclxuIik7 Cj4gKwkJZnJvbnRfaW5mby0+ZHJtX3BkZXYgPSBOVUxMOwo+ICsJCXhlbl9kcm1fZHJ2X2RlaW5p dChmcm9udF9pbmZvKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeGVuX2Rydl9yZW1vdmVfaW50ZXJuYWwoc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykKPiArewo+ICsJeGVuX2RybV9kcnZfZGVp bml0KGZyb250X2luZm8pOwo+ICsJeGVuX2RybV9mcm9udF9ldnRjaG5sX2ZyZWVfYWxsKGZyb250 X2luZm8pOwo+ICsJZGJ1Zl9mcmVlX2FsbCgmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0KTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkaXNwbGJhY2tfaW5pdHdhaXQoc3RydWN0IHhlbl9kcm1fZnJvbnRf aW5mbyAqZnJvbnRfaW5mbykKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpjZmcg PSAmZnJvbnRfaW5mby0+Y2ZnOwo+ICsJaW50IHJldDsKPiArCj4gKwljZmctPmZyb250X2luZm8g PSBmcm9udF9pbmZvOwo+ICsJcmV0ID0geGVuX2RybV9mcm9udF9jZmdfY2FyZChmcm9udF9pbmZv LCBjZmcpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlEUk1fSU5G TygiSGF2ZSAlZCBjb25lY3RvcihzKVxuIiwgY2ZnLT5udW1fY29ubmVjdG9ycyk7Cj4gKwkvKiBD cmVhdGUgZXZlbnQgY2hhbm5lbHMgZm9yIGFsbCBjb25uZWN0b3JzIGFuZCBwdWJsaXNoICovCj4g KwlyZXQgPSB4ZW5fZHJtX2Zyb250X2V2dGNobmxfY3JlYXRlX2FsbChmcm9udF9pbmZvKTsKPiAr CWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIHhlbl9kcm1fZnJv bnRfZXZ0Y2hubF9wdWJsaXNoX2FsbChmcm9udF9pbmZvKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkaXNwbGJhY2tfY29ubmVjdChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZv KQo+ICt7Cj4gKwl4ZW5fZHJtX2Zyb250X2V2dGNobmxfc2V0X3N0YXRlKGZyb250X2luZm8sIEVW VENITkxfU1RBVEVfQ09OTkVDVEVEKTsKPiArCXJldHVybiB4ZW5fZHJtX2Rydl9pbml0KGZyb250 X2luZm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkaXNwbGJhY2tfZGlzY29ubmVjdChzdHJ1 Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKQo+ICt7Cj4gKwlib29sIHJlbW92ZWQg PSB0cnVlOwo+ICsKPiArCWlmIChmcm9udF9pbmZvLT5kcm1fcGRldikgewo+ICsJCWlmICh4ZW5f ZHJtX2Zyb250X2Rydl9pc191c2VkKGZyb250X2luZm8tPmRybV9wZGV2KSkgewo+ICsJCQlEUk1f V0FSTigiRFJNIGRyaXZlciBzdGlsbCBpbiB1c2UsIGRlZmVycmluZyByZW1vdmFsXG4iKTsKPiAr CQkJcmVtb3ZlZCA9IGZhbHNlOwo+ICsJCX0gZWxzZQo+ICsJCQl4ZW5fZHJ2X3JlbW92ZV9pbnRl cm5hbChmcm9udF9pbmZvKTsKCk9rIHRoaXMgbG9naWMgaGVyZSBpcyBmaXNoeSwgc2luY2UgeW91 J3JlIG9wZW4tY29kaW5nIHRoZSBkcm0gdW5wbHVnCmluZnJhc3RydWN0dXJlLCBidXQgc2xpZ2h0 bHkgZGlmZmVyZW50bHkgYW5kIHNsaWdodHlsIHJhY3kuIElmIHlvdSBoYXZlIGEKZHJpdmVyIHdo ZXJlIHlvdXIgdW5kZXJseWluZyAiaHciICh3ZWxsIGl0J3MgdmlydHVhbCBoZXJlLCBidXQgc2Ft ZSBpZGVhKQpjYW4gZGlzYXBwZWFyIGFueSB0aW1lIHdoaWxlIHVzZXJzcGFjZSBpcyBzdGlsbCB1 c2luZyB0aGUgZHJtIGRyaXZlciwgeW91Cm5lZWQgdG8gdXNlIHRoZSBkcm1fZGV2X3VucGx1Zygp IGZ1bmN0aW9uIGFuZCByZWxhdGVkIGNvZGUuCmRybV9kZXZfdW5wbHVnKCkgd29ya3MgbGlrZSBk cm1fZGV2X3VucmVnaXN0ZXIsIGV4Y2VwdCBmb3IgdGhlIGhvdHBsdWcKY2FzZS4KClRoZW4geW91 IGFsc28gaGF2ZSB0byBndWFyZCBhbGwgdGhlIGRyaXZlciBlbnRyeSBwb2ludHMgd2hlcmUgeW91 IGRvCmFjY2VzcyB0aGUgYmFja2NoYW5uZWwgdXNpbmcgZHJtX2Rldl9pc191bnBsdWdnZWQoKSAo SSd2ZSBzZWVuIGEgZmV3IG9mCnRob3NlIGFscmVhZHkpLiBUaGVuIHlvdSBjYW4gcmlwIG91dCBh bGwgdGhlIGxvZ2ljIGhlcmUgYW5kIHRoZSB4ZW5fZHJtX2Zyb250X2Rydl9pc191c2VkKCkgaGVs cGVyLgoKSSB0aG91Z2h0IHRoZXJlJ3Mgc29tZSBwYXRjaGVzIGZyb20gTm9yYWxmIGluLWZsaWdo dCB0aGF0IGltcHJvdmVkIHRoZQpkb2NzIG9uIHRoaXMsIEkgbmVlZCB0byBjaGVjawoKPiArCX0K PiArCj4gKwl4ZW5fZHJtX2Zyb250X2V2dGNobmxfc2V0X3N0YXRlKGZyb250X2luZm8sIEVWVENI TkxfU1RBVEVfRElTQ09OTkVDVEVEKTsKPiArCj4gKwlpZiAocmVtb3ZlZCkKPiArCQl4ZW5idXNf c3dpdGNoX3N0YXRlKGZyb250X2luZm8tPnhiX2RldiwKPiArCQkJCVhlbmJ1c1N0YXRlSW5pdGlh bGlzaW5nKTsKPiArCWVsc2UKPiArCQl4ZW5idXNfc3dpdGNoX3N0YXRlKGZyb250X2luZm8tPnhi X2RldiwKPiArCQkJCVhlbmJ1c1N0YXRlUmVjb25maWd1cmluZyk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRpc3BsYmFja19jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXYsCj4g KwkJZW51bSB4ZW5idXNfc3RhdGUgYmFja2VuZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IHhlbl9k cm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmeGJfZGV2LT5kZXYp Owo+ICsJaW50IHJldDsKPiArCj4gKwlEUk1fREVCVUcoIkJhY2tlbmQgc3RhdGUgaXMgJXMsIGZy b250IGlzICVzXG4iLAo+ICsJCQl4ZW5idXNfc3Ryc3RhdGUoYmFja2VuZF9zdGF0ZSksCj4gKwkJ CXhlbmJ1c19zdHJzdGF0ZSh4Yl9kZXYtPnN0YXRlKSk7Cj4gKwo+ICsJc3dpdGNoIChiYWNrZW5k X3N0YXRlKSB7Cj4gKwljYXNlIFhlbmJ1c1N0YXRlUmVjb25maWd1cmluZzoKPiArCQkvKiBmYWxs IHRocm91Z2ggKi8KPiArCWNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyZWQ6Cj4gKwkJLyogZmFs bCB0aHJvdWdoICovCj4gKwljYXNlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQ6Cj4gKwkJYnJlYWs7 Cj4gKwo+ICsJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKPiArCQkvKiByZWNvdmVyaW5n IGFmdGVyIGJhY2tlbmQgdW5leHBlY3RlZCBjbG9zdXJlICovCj4gKwkJZGlzcGxiYWNrX2Rpc2Nv bm5lY3QoZnJvbnRfaW5mbyk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBYZW5idXNTdGF0ZUlu aXRXYWl0Ogo+ICsJCS8qIHJlY292ZXJpbmcgYWZ0ZXIgYmFja2VuZCB1bmV4cGVjdGVkIGNsb3N1 cmUgKi8KPiArCQlkaXNwbGJhY2tfZGlzY29ubmVjdChmcm9udF9pbmZvKTsKPiArCQlpZiAoeGJf ZGV2LT5zdGF0ZSAhPSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykKPiArCQkJYnJlYWs7Cj4gKwo+ ICsJCXJldCA9IGRpc3BsYmFja19pbml0d2FpdChmcm9udF9pbmZvKTsKPiArCQlpZiAocmV0IDwg MCkKPiArCQkJeGVuYnVzX2Rldl9mYXRhbCh4Yl9kZXYsIHJldCwKPiArCQkJCQkiaW5pdGlhbGl6 aW5nIGZyb250ZW5kIik7Cj4gKwkJZWxzZQo+ICsJCQl4ZW5idXNfc3dpdGNoX3N0YXRlKHhiX2Rl diwgWGVuYnVzU3RhdGVJbml0aWFsaXNlZCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBYZW5i dXNTdGF0ZUNvbm5lY3RlZDoKPiArCQlpZiAoeGJfZGV2LT5zdGF0ZSAhPSBYZW5idXNTdGF0ZUlu aXRpYWxpc2VkKQo+ICsJCQlicmVhazsKPiArCj4gKwkJcmV0ID0gZGlzcGxiYWNrX2Nvbm5lY3Qo ZnJvbnRfaW5mbyk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXhlbmJ1c19kZXZfZmF0YWwoeGJf ZGV2LCByZXQsCj4gKwkJCQkJImluaXRpYWxpemluZyBEUk0gZHJpdmVyIik7Cj4gKwkJZWxzZQo+ ICsJCQl4ZW5idXNfc3dpdGNoX3N0YXRlKHhiX2RldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOwo+ ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgWGVuYnVzU3RhdGVDbG9zaW5nOgo+ICsJCS8qCj4gKwkJ ICogaW4gdGhpcyBzdGF0ZSBiYWNrZW5kIHN0YXJ0cyBmcmVlaW5nIHJlc291cmNlcywKPiArCQkg KiBzbyBsZXQgaXQgZ28gaW50byBjbG9zZWQgc3RhdGUsIHNvIHdlIGNhbiBhbHNvCj4gKwkJICog cmVtb3ZlIG91cnMKPiArCQkgKi8KPiArCQlicmVhazsKPiArCj4gKwljYXNlIFhlbmJ1c1N0YXRl VW5rbm93bjoKPiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiArCWNhc2UgWGVuYnVzU3RhdGVDbG9z ZWQ6Cj4gKwkJaWYgKHhiX2Rldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDbG9zZWQpCj4gKwkJCWJy ZWFrOwo+ICsKPiArCQlkaXNwbGJhY2tfZGlzY29ubmVjdChmcm9udF9pbmZvKTsKPiArCQlicmVh azsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCB4ZW5fZHJ2X3Byb2JlKHN0cnVjdCB4ZW5i dXNfZGV2aWNlICp4Yl9kZXYsCj4gKwkJY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgKmlk KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvOwo+ICsKPiAr CWZyb250X2luZm8gPSBkZXZtX2t6YWxsb2MoJnhiX2Rldi0+ZGV2LAo+ICsJCQlzaXplb2YoKmZy b250X2luZm8pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZnJvbnRfaW5mbykKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlmcm9udF9pbmZvLT54Yl9kZXYgPSB4Yl9kZXY7Cj4gKwlzcGluX2xv Y2tfaW5pdCgmZnJvbnRfaW5mby0+aW9fbG9jayk7Cj4gKwltdXRleF9pbml0KCZmcm9udF9pbmZv LT5yZXFfaW9fbG9jayk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0 KTsKPiArCWZyb250X2luZm8tPmRybV9wZHJ2X3JlZ2lzdGVyZWQgPSBmYWxzZTsKPiArCWRldl9z ZXRfZHJ2ZGF0YSgmeGJfZGV2LT5kZXYsIGZyb250X2luZm8pOwo+ICsJcmV0dXJuIHhlbmJ1c19z d2l0Y2hfc3RhdGUoeGJfZGV2LCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZyk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgeGVuX2Rydl9yZW1vdmUoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbyA9IGRldl9nZXRfZHJ2 ZGF0YSgmZGV2LT5kZXYpOwo+ICsJaW50IHRvID0gMTAwOwo+ICsKPiArCXhlbmJ1c19zd2l0Y2hf c3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNsb3NpbmcpOwo+ICsKPiArCS8qCj4gKwkgKiBPbiBkcml2 ZXIgcmVtb3ZhbCBpdCBpcyBkaXNjb25uZWN0ZWQgZnJvbSBYZW5CdXMsCj4gKwkgKiBzbyBubyBi YWNrZW5kIHN0YXRlIGNoYW5nZSBldmVudHMgY29tZSB2aWEgLm90aGVyZW5kX2NoYW5nZWQKPiAr CSAqIGNhbGxiYWNrLiBUaGlzIHByZXZlbnRzIHVzIGZyb20gZXhpdGluZyBncmFjZWZ1bGx5LCBl LmcuCj4gKwkgKiBzaWduYWxpbmcgdGhlIGJhY2tlbmQgdG8gZnJlZSBldmVudCBjaGFubmVscywg d2FpdGluZyBmb3IgaXRzCj4gKwkgKiBzdGF0ZSB0byBjaGFuZ2UgdG8gWGVuYnVzU3RhdGVDbG9z ZWQgYW5kIGNsZWFuaW5nIGF0IG91ciBlbmQuCj4gKwkgKiBOb3JtYWxseSB3aGVuIGZyb250IGRy aXZlciByZW1vdmVkIGJhY2tlbmQgd2lsbCBmaW5hbGx5IGdvIGludG8KPiArCSAqIFhlbmJ1c1N0 YXRlSW5pdFdhaXQgc3RhdGUuCj4gKwkgKgo+ICsJICogV29ya2Fyb3VuZDogcmVhZCBiYWNrZW5k J3Mgc3RhdGUgbWFudWFsbHkgYW5kIHdhaXQgd2l0aCB0aW1lLW91dC4KPiArCSAqLwo+ICsJd2hp bGUgKCh4ZW5idXNfcmVhZF91bnNpZ25lZChmcm9udF9pbmZvLT54Yl9kZXYtPm90aGVyZW5kLAo+ ICsJCQkic3RhdGUiLCBYZW5idXNTdGF0ZVVua25vd24pICE9IFhlbmJ1c1N0YXRlSW5pdFdhaXQp ICYmCj4gKwkJCXRvLS0pCj4gKwkJbXNsZWVwKDEwKTsKPiArCj4gKwlpZiAoIXRvKQo+ICsJCURS TV9FUlJPUigiQmFja2VuZCBzdGF0ZSBpcyAlcyB3aGlsZSByZW1vdmluZyBkcml2ZXJcbiIsCj4g KwkJCXhlbmJ1c19zdHJzdGF0ZSh4ZW5idXNfcmVhZF91bnNpZ25lZCgKPiArCQkJCQlmcm9udF9p bmZvLT54Yl9kZXYtPm90aGVyZW5kLAo+ICsJCQkJCSJzdGF0ZSIsIFhlbmJ1c1N0YXRlVW5rbm93 bikpKTsKPiArCj4gKwl4ZW5fZHJ2X3JlbW92ZV9pbnRlcm5hbChmcm9udF9pbmZvKTsKPiArCXhl bmJ1c19mcm9udGVuZF9jbG9zZWQoZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgeGVuX2Rydl9pZHNbXSA9IHsKPiArCXsg WEVORElTUExfRFJJVkVSX05BTUUgfSwKPiArCXsgIiIgfQo+ICt9Owo+ICsKPiArc3RhdGljIHN0 cnVjdCB4ZW5idXNfZHJpdmVyIHhlbl9kcml2ZXIgPSB7Cj4gKwkuaWRzID0geGVuX2Rydl9pZHMs Cj4gKwkucHJvYmUgPSB4ZW5fZHJ2X3Byb2JlLAo+ICsJLnJlbW92ZSA9IHhlbl9kcnZfcmVtb3Zl LAo+ICsJLm90aGVyZW5kX2NoYW5nZWQgPSBkaXNwbGJhY2tfY2hhbmdlZCwKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgX19pbml0IHhlbl9kcnZfaW5pdCh2b2lkKQo+ICt7Cj4gKwkvKiBBdCB0aGUg bW9tZW50IHdlIG9ubHkgc3VwcG9ydCBjYXNlIHdpdGggWEVOX1BBR0VfU0laRSA9PSBQQUdFX1NJ WkUgKi8KPiArCWlmIChYRU5fUEFHRV9TSVpFICE9IFBBR0VfU0laRSkgewo+ICsJCURSTV9FUlJP UihYRU5ESVNQTF9EUklWRVJfTkFNRSAiOiBkaWZmZXJlbnQga2VybmVsIGFuZCBYZW4gcGFnZSBz aXplcyBhcmUgbm90IHN1cHBvcnRlZDogWEVOX1BBR0VfU0laRSAoJWx1KSAhPSBQQUdFX1NJWkUg KCVsdSlcbiIsCj4gKwkJCQlYRU5fUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwo+ICsJCXJldHVybiAt RU5PREVWOwo+ICsJfQo+ICsKPiArCWlmICgheGVuX2RvbWFpbigpKQo+ICsJCXJldHVybiAtRU5P REVWOwo+ICsKPiArCWlmICgheGVuX2hhc19wdl9kZXZpY2VzKCkpCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwo+ICsJRFJNX0lORk8oIlJlZ2lzdGVyaW5nIFhFTiBQViAiIFhFTkRJU1BMX0RSSVZF Ul9OQU1FICJcbiIpOwo+ICsJcmV0dXJuIHhlbmJ1c19yZWdpc3Rlcl9mcm9udGVuZCgmeGVuX2Ry aXZlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZW5fZHJ2X2NsZWFudXAodm9p ZCkKPiArewo+ICsJRFJNX0lORk8oIlVucmVnaXN0ZXJpbmcgWEVOIFBWICIgWEVORElTUExfRFJJ VkVSX05BTUUgIlxuIik7Cj4gKwl4ZW5idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnhlbl9kcml2ZXIp Owo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdCh4ZW5fZHJ2X2luaXQpOwo+ICttb2R1bGVfZXhpdCh4 ZW5fZHJ2X2NsZWFudXApOwo+ICsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYZW4gcGFyYS12aXJ0 dWFsaXplZCBkaXNwbGF5IGRldmljZSBmcm9udGVuZCIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BM Iik7Cj4gK01PRFVMRV9BTElBUygieGVuOiJYRU5ESVNQTF9EUklWRVJfTkFNRSk7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oIGIvZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uOTNjNThjNGU4N2QyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oCj4gQEAgLTAsMCArMSw3NyBAQAo+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KPiArCj4gKy8qCj4gKyAqICBY ZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2 LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5k cnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsK PiArI2lmbmRlZiBfX1hFTl9EUk1fRlJPTlRfSF8KPiArI2RlZmluZSBfX1hFTl9EUk1fRlJPTlRf SF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgo+ICsKPiArI2luY2x1ZGUg Inhlbl9kcm1fZnJvbnRfY2ZnLmgiCj4gKwo+ICsvKiB0aW1lb3V0IGluIG1zIHRvIHdhaXQgZm9y IGJhY2tlbmQgdG8gcmVzcG9uZCAqLwo+ICsjZGVmaW5lIFhFTl9EUk1fRlJPTlRfV0FJVF9CQUNL X01TCTMwMDAKPiArCj4gKyNpZm5kZWYgR1JBTlRfSU5WQUxJRF9SRUYKPiArLyoKPiArICogTm90 ZSBvbiB1c2FnZSBvZiBncmFudCByZWZlcmVuY2UgMCBhcyBpbnZhbGlkIGdyYW50IHJlZmVyZW5j ZToKPiArICogZ3JhbnQgcmVmZXJlbmNlIDAgaXMgdmFsaWQsIGJ1dCBuZXZlciBleHBvc2VkIHRv IGEgUFYgZHJpdmVyLAo+ICsgKiBiZWNhdXNlIG9mIHRoZSBmYWN0IGl0IGlzIGFscmVhZHkgaW4g dXNlL3Jlc2VydmVkIGJ5IHRoZSBQViBjb25zb2xlLgo+ICsgKi8KPiArI2RlZmluZSBHUkFOVF9J TlZBTElEX1JFRgkwCj4gKyNlbmRpZgo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3Bp cGVsaW5lOwo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyB7Cj4gKwlzdHJ1Y3QgeGVu YnVzX2RldmljZSAqeGJfZGV2Owo+ICsJLyogdG8gcHJvdGVjdCBkYXRhIGJldHdlZW4gYmFja2Vu ZCBJTyBjb2RlIGFuZCBpbnRlcnJ1cHQgaGFuZGxlciAqLwo+ICsJc3BpbmxvY2tfdCBpb19sb2Nr Owo+ICsJLyogc2VyaWFsaXplciBmb3IgYmFja2VuZCBJTzogcmVxdWVzdC9yZXNwb25zZSAqLwo+ ICsJc3RydWN0IG11dGV4IHJlcV9pb19sb2NrOwo+ICsJYm9vbCBkcm1fcGRydl9yZWdpc3RlcmVk Owo+ICsJLyogdmlydHVhbCBEUk0gcGxhdGZvcm0gZGV2aWNlICovCj4gKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpkcm1fcGRldjsKPiArCj4gKwlpbnQgbnVtX2V2dF9wYWlyczsKPiArCXN0cnVj dCB4ZW5fZHJtX2Zyb250X2V2dGNobmxfcGFpciAqZXZ0X3BhaXJzOwo+ICsJc3RydWN0IHhlbl9k cm1fZnJvbnRfY2ZnIGNmZzsKPiArCj4gKwkvKiBkaXNwbGF5IGJ1ZmZlcnMgKi8KPiArCXN0cnVj dCBsaXN0X2hlYWQgZGJ1Zl9saXN0Owo+ICt9Owo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfbW9k ZV9zZXQoc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKPiArCQl1 aW50MzJfdCB4LCB1aW50MzJfdCB5LCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAo+ ICsJCXVpbnQzMl90IGJwcCwgdWludDY0X3QgZmJfY29va2llKTsKPiArCj4gK2ludCB4ZW5fZHJt X2Zyb250X2RidWZfY3JlYXRlX2Zyb21fc2d0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZy b250X2luZm8sCj4gKwkJdWludDY0X3QgZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRoLCB1aW50 MzJfdCBoZWlnaHQsCj4gKwkJdWludDMyX3QgYnBwLCB1aW50NjRfdCBzaXplLCBzdHJ1Y3Qgc2df dGFibGUgKnNndCk7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZV9mcm9tX3Bh Z2VzKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJdWludDY0X3Qg ZGJ1Zl9jb29raWUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCj4gKwkJdWludDMy X3QgYnBwLCB1aW50NjRfdCBzaXplLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKPiArCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2RidWZfZGVzdHJveShzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9u dF9pbmZvLAo+ICsJCXVpbnQ2NF90IGRidWZfY29va2llKTsKPiArCj4gK2ludCB4ZW5fZHJtX2Zy b250X2ZiX2F0dGFjaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJ CXVpbnQ2NF90IGRidWZfY29va2llLCB1aW50NjRfdCBmYl9jb29raWUsIHVpbnQzMl90IHdpZHRo LAo+ICsJCXVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgcGl4ZWxfZm9ybWF0KTsKPiArCj4gK2lu dCB4ZW5fZHJtX2Zyb250X2ZiX2RldGFjaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9u dF9pbmZvLAo+ICsJCXVpbnQ2NF90IGZiX2Nvb2tpZSk7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9u dF9wYWdlX2ZsaXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQlp bnQgY29ubl9pZHgsIHVpbnQ2NF90IGZiX2Nvb2tpZSk7Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJv bnRfdW5sb2FkKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pOwo+ICsKPiAr I2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1fZnJvbnRfY2ZnLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uOWEwYjJiOGU2MTY5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jZmcuYwo+IEBAIC0wLDAgKzEsNzcgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBhcmEt dmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQ QU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVu a28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsKPiAr I2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vZGlzcGxpZi5oPgo+ICsjaW5jbHVkZSA8eGVuL3hl bmJ1cy5oPgo+ICsKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPiArI2luY2x1ZGUgInhl bl9kcm1fZnJvbnRfY2ZnLmgiCj4gKwo+ICtzdGF0aWMgaW50IGNmZ19jb25uZWN0b3Ioc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9jZmdfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJY29uc3QgY2hhciAqcGF0aCwgaW50IGlu ZGV4KQo+ICt7Cj4gKwljaGFyICpjb25uZWN0b3JfcGF0aDsKPiArCj4gKwljb25uZWN0b3JfcGF0 aCA9IGRldm1fa2FzcHJpbnRmKCZmcm9udF9pbmZvLT54Yl9kZXYtPmRldiwKPiArCQkJR0ZQX0tF Uk5FTCwgIiVzLyVkIiwgcGF0aCwgaW5kZXgpOwo+ICsJaWYgKCFjb25uZWN0b3JfcGF0aCkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlpZiAoeGVuYnVzX3NjYW5mKFhCVF9OSUwsIGNvbm5l Y3Rvcl9wYXRoLCBYRU5ESVNQTF9GSUVMRF9SRVNPTFVUSU9OLAo+ICsJCQkiJWQiIFhFTkRJU1BM X1JFU09MVVRJT05fU0VQQVJBVE9SICIlZCIsCj4gKwkJCSZjb25uZWN0b3ItPndpZHRoLCAmY29u bmVjdG9yLT5oZWlnaHQpIDwgMCkgewo+ICsJCS8qIGVpdGhlciBubyBlbnRyeSBjb25maWd1cmVk IG9yIHdyb25nIHJlc29sdXRpb24gc2V0ICovCj4gKwkJY29ubmVjdG9yLT53aWR0aCA9IDA7Cj4g KwkJY29ubmVjdG9yLT5oZWlnaHQgPSAwOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCWNvbm5lY3Rvci0+eGVuc3RvcmVfcGF0aCA9IGNvbm5lY3Rvcl9wYXRoOwo+ICsKPiArCURS TV9JTkZPKCJDb25uZWN0b3IgJXM6IHJlc29sdXRpb24gJWR4JWRcbiIsCj4gKwkJCWNvbm5lY3Rv cl9wYXRoLCBjb25uZWN0b3ItPndpZHRoLCBjb25uZWN0b3ItPmhlaWdodCk7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfY2ZnX2NhcmQoc3RydWN0IHhlbl9kcm1f ZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNm ZykKPiArewo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiA9IGZyb250X2luZm8tPnhi X2RldjsKPiArCWludCByZXQsIGk7Cj4gKwo+ICsJaWYgKHhlbmJ1c19yZWFkX3Vuc2lnbmVkKGZy b250X2luZm8tPnhiX2Rldi0+bm9kZW5hbWUsCj4gKwkJCVhFTkRJU1BMX0ZJRUxEX0JFX0FMTE9D LCAwKSkgewo+ICsJCURSTV9JTkZPKCJCYWNrZW5kIGNhbiBwcm92aWRlIGRpc3BsYXkgYnVmZmVy c1xuIik7Cj4gKwkJY2ZnLT5iZV9hbGxvYyA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJY2ZnLT5udW1f Y29ubmVjdG9ycyA9IDA7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmctPmNvbm5l Y3RvcnMpOyBpKyspIHsKPiArCQlyZXQgPSBjZmdfY29ubmVjdG9yKGZyb250X2luZm8sCj4gKwkJ CQkmY2ZnLT5jb25uZWN0b3JzW2ldLCB4Yl9kZXYtPm5vZGVuYW1lLCBpKTsKPiArCQlpZiAocmV0 IDwgMCkKPiArCQkJYnJlYWs7Cj4gKwkJY2ZnLT5udW1fY29ubmVjdG9ycysrOwo+ICsJfQo+ICsK PiArCWlmICghY2ZnLT5udW1fY29ubmVjdG9ycykgewo+ICsJCURSTV9FUlJPUigiTm8gY29ubmVj dG9yKHMpIGNvbmZpZ3VyZWQgYXQgJXNcbiIsCj4gKwkJCQl4Yl9kZXYtPm5vZGVuYW1lKTsKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2NmZy5oIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2NmZy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjZlN2FmNjcwZjhjZAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmgKPiBAQCAtMCwwICsxLDM3 IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLwo+ICsK PiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3I6 IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNv bT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9DRkdfSF8KPiArI2RlZmlu ZSBfX1hFTl9EUk1fRlJPTlRfQ0ZHX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K PiArCj4gKyNkZWZpbmUgWEVOX0RSTV9GUk9OVF9NQVhfQ1JUQ1MJNAo+ICsKPiArc3RydWN0IHhl bl9kcm1fZnJvbnRfY2ZnX2Nvbm5lY3RvciB7Cj4gKwlpbnQgd2lkdGg7Cj4gKwlpbnQgaGVpZ2h0 Owo+ICsJY2hhciAqeGVuc3RvcmVfcGF0aDsKPiArfTsKPiArCj4gK3N0cnVjdCB4ZW5fZHJtX2Zy b250X2NmZyB7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvOwo+ICsJ LyogbnVtYmVyIG9mIGNvbm5lY3RvcnMgaW4gdGhpcyBjb25maWd1cmF0aW9uICovCj4gKwlpbnQg bnVtX2Nvbm5lY3RvcnM7Cj4gKwkvKiBjb25uZWN0b3IgY29uZmlndXJhdGlvbnMgKi8KPiArCXN0 cnVjdCB4ZW5fZHJtX2Zyb250X2NmZ19jb25uZWN0b3IgY29ubmVjdG9yc1tYRU5fRFJNX0ZST05U X01BWF9DUlRDU107Cj4gKwkvKiBzZXQgaWYgZHVtYiBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgZXh0 ZXJuYWxseSBvbiBiYWNrZW5kIHNpZGUgKi8KPiArCWJvb2wgYmVfYWxsb2M7Cj4gK307Cj4gKwo+ ICtpbnQgeGVuX2RybV9mcm9udF9jZmdfY2FyZChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpm cm9udF9pbmZvLAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZyAqY2ZnKTsKPiArCj4gKyNl bmRpZiAvKiBfX1hFTl9EUk1fRlJPTlRfQ0ZHX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfY29ubi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLmFhYTFjZmZmNDc5Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0veGVuL3hlbl9kcm1fZnJvbnRfY29ubi5jCj4gQEAgLTAsMCArMSwxNDYgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4gKwo+ICsvKgo+ICsgKiAgWGVu IHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0y MDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4g KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KPiArCj4g KyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Nvbm4uaCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJv bnRfZHJ2LmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2ttcy5oIgo+ICsKPiArc3RhdGlj IHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqCj4gK3RvX3hlbl9kcm1fcGlwZWxp bmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJcmV0dXJuIGNvbnRh aW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSwgY29u bik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCB1aW50MzJfdCBwbGFuZV9mb3JtYXRzW10gPSB7 Cj4gKwlEUk1fRk9STUFUX1JHQjU2NSwKPiArCURSTV9GT1JNQVRfUkdCODg4LAo+ICsJRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPiArCURSTV9GT1JNQVRfQVJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX1hS R0I0NDQ0LAo+ICsJRFJNX0ZPUk1BVF9BUkdCNDQ0NCwKPiArCURSTV9GT1JNQVRfWFJHQjE1NTUs Cj4gKwlEUk1fRk9STUFUX0FSR0IxNTU1LAo+ICt9Owo+ICsKPiArY29uc3QgdWludDMyX3QgKnhl bl9kcm1fZnJvbnRfY29ubl9nZXRfZm9ybWF0cyhpbnQgKmZvcm1hdF9jb3VudCkKPiArewo+ICsJ KmZvcm1hdF9jb3VudCA9IEFSUkFZX1NJWkUocGxhbmVfZm9ybWF0cyk7Cj4gKwlyZXR1cm4gcGxh bmVfZm9ybWF0czsKPiArfQo+ICsKPiArc3RhdGljIGludCBjb25uZWN0b3JfZGV0ZWN0KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVp cmVfY3R4ICpjdHgsCj4gKwkJYm9vbCBmb3JjZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJv bnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gKwkJCXRvX3hlbl9kcm1fcGlwZWxpbmUoY29u bmVjdG9yKTsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8gPSBwaXBl bGluZS0+ZHJtX2luZm8tPmZyb250X2luZm87Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsK PiArCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgZnJhbWUgZG9uZSBldmVudCB0aW1lLW91dCAqLwo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCWlm IChwaXBlbGluZS0+cGZsaXBfdGltZW91dCAmJgo+ICsJCQl0aW1lX2FmdGVyX2VxKGppZmZpZXMs IHBpcGVsaW5lLT5wZmxpcF90aW1lb3V0KSkgewo+ICsJCURSTV9FUlJPUigiRnJhbWUgZG9uZSBl dmVudCB0aW1lZC1vdXRcbiIpOwo+ICsKPiArCQlwaXBlbGluZS0+cGZsaXBfdGltZW91dCA9IDA7 Cj4gKwkJcGlwZWxpbmUtPmNvbm5fY29ubmVjdGVkID0gZmFsc2U7Cj4gKwkJeGVuX2RybV9mcm9u dF9rbXNfc2VuZF9wZW5kaW5nX2V2ZW50KHBpcGVsaW5lKTsKPiArCX0KPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAoZHJt X2Rldl9pc191bnBsdWdnZWQoY29ubmVjdG9yLT5kZXYpKQo+ICsJCXBpcGVsaW5lLT5jb25uX2Nv bm5lY3RlZCA9IGZhbHNlOwo+ICsKPiArCXJldHVybiBwaXBlbGluZS0+Y29ubl9jb25uZWN0ZWQg PyBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6Cj4gKwkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlz Y29ubmVjdGVkOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFhFTl9EUk1fTlVNX1ZJREVPX01PREVTCQkx Cj4gKyNkZWZpbmUgWEVOX0RSTV9DUlRDX1ZSRUZSRVNIX0haCTYwCj4gKwo+ICtzdGF0aWMgaW50 IGNvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAr ewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gKwkJ CXRvX3hlbl9kcm1fcGlwZWxpbmUoY29ubmVjdG9yKTsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlOwo+ICsJc3RydWN0IHZpZGVvbW9kZSB2aWRlb21vZGU7Cj4gKwlpbnQgd2lkdGgs IGhlaWdodDsKPiArCj4gKwltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsK PiArCWlmICghbW9kZSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwltZW1zZXQoJnZpZGVvbW9kZSwg MCwgc2l6ZW9mKHZpZGVvbW9kZSkpOwo+ICsJdmlkZW9tb2RlLmhhY3RpdmUgPSBwaXBlbGluZS0+ d2lkdGg7Cj4gKwl2aWRlb21vZGUudmFjdGl2ZSA9IHBpcGVsaW5lLT5oZWlnaHQ7Cj4gKwl3aWR0 aCA9IHZpZGVvbW9kZS5oYWN0aXZlICsgdmlkZW9tb2RlLmhmcm9udF9wb3JjaCArCj4gKwkJCXZp ZGVvbW9kZS5oYmFja19wb3JjaCArIHZpZGVvbW9kZS5oc3luY19sZW47Cj4gKwloZWlnaHQgPSB2 aWRlb21vZGUudmFjdGl2ZSArIHZpZGVvbW9kZS52ZnJvbnRfcG9yY2ggKwo+ICsJCQl2aWRlb21v ZGUudmJhY2tfcG9yY2ggKyB2aWRlb21vZGUudnN5bmNfbGVuOwo+ICsJdmlkZW9tb2RlLnBpeGVs Y2xvY2sgPSB3aWR0aCAqIGhlaWdodCAqIFhFTl9EUk1fQ1JUQ19WUkVGUkVTSF9IWjsKPiArCW1v ZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVS Owo+ICsKPiArCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJnZpZGVvbW9kZSwgbW9k ZSk7Cj4gKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4gKwlyZXR1cm4g WEVOX0RSTV9OVU1fVklERU9fTU9ERVM7CgpCaWtlc2hlZDoganVzdCBoYXJkY29kZSB0aGlzIHRv IDEsIHRoZSAjZGVmaW5lIGlzIGltbyBtb3JlIGNvbmZ1c2luZy4KCj4gK30KPiArCj4gK3N0YXRp YyBpbnQgY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiArCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJc3RydWN0IHhl bl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gKwkJCXRvX3hlbl9kcm1fcGlw ZWxpbmUoY29ubmVjdG9yKTsKPiArCj4gKwlpZiAobW9kZS0+aGRpc3BsYXkgIT0gcGlwZWxpbmUt PndpZHRoKQo+ICsJCXJldHVybiBNT0RFX0VSUk9SOwo+ICsKPiArCWlmIChtb2RlLT52ZGlzcGxh eSAhPSBwaXBlbGluZS0+aGVpZ2h0KQo+ICsJCXJldHVybiBNT0RFX0VSUk9SOwo+ICsKPiArCXJl dHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfaGVscGVyX2Z1bmNzIGNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVz ID0gY29ubmVjdG9yX2dldF9tb2RlcywKPiArCS5tb2RlX3ZhbGlkID0gY29ubmVjdG9yX21vZGVf dmFsaWQsCj4gKwkuZGV0ZWN0X2N0eCA9IGNvbm5lY3Rvcl9kZXRlY3QsCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgY29ubmVjdG9yX2Z1bmNzID0g ewo+ICsJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAo+ICsJLmZpbGxfbW9kZXMg PSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4gKwkuZGVzdHJveSA9 IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsK PiAraW50IHhlbl9kcm1fZnJvbnRfY29ubl9pbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9p bmZvICpkcm1faW5mbywKPiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7 Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lID0KPiArCQkJ dG9feGVuX2RybV9waXBlbGluZShjb25uZWN0b3IpOwo+ICsKPiArCWRybV9jb25uZWN0b3JfaGVs cGVyX2FkZChjb25uZWN0b3IsICZjb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwlwaXBl bGluZS0+Y29ubl9jb25uZWN0ZWQgPSB0cnVlOwo+ICsKPiArCWNvbm5lY3Rvci0+cG9sbGVkID0g RFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1QgfAo+ICsJCQlEUk1fQ09OTkVDVE9SX1BPTExfRElT Q09OTkVDVDsKPiArCj4gKwlyZXR1cm4gZHJtX2Nvbm5lY3Rvcl9pbml0KGRybV9pbmZvLT5kcm1f ZGV2LCBjb25uZWN0b3IsCj4gKwkJJmNvbm5lY3Rvcl9mdW5jcywgRFJNX01PREVfQ09OTkVDVE9S X1ZJUlRVQUwpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9jb25uLmggYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY29ubi5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmYzOGM0YjZkYjVk Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJv bnRfY29ubi5oCj4gQEAgLTAsMCArMSwyNyBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQgKi8KPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERS TSBkZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1z IEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3Nh bmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1hFTl9E Uk1fRlJPTlRfQ09OTl9IXwo+ICsjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9DT05OX0hfCj4gKwo+ ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvd2FpdC5o Pgo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm87Cj4gKwo+ICtpbnQgeGVuX2Ry bV9mcm9udF9jb25uX2luaXQoc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZv LAo+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICsKPiArY29uc3QgdWlu dDMyX3QgKnhlbl9kcm1fZnJvbnRfY29ubl9nZXRfZm9ybWF0cyhpbnQgKmZvcm1hdF9jb3VudCk7 Cj4gKwo+ICsjZW5kaWYgLyogX19YRU5fRFJNX0ZST05UX0NPTk5fSF8gKi8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5jIGIvZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjNlZGVmYTIwZjE0Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmMKPiBAQCAtMCwwICsxLDIzOSBAQAo+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKPiArCj4gKy8qCj4g KyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChD KSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2Fu ZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1 ZGUgPGRybS9kcm1fZ2VtLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+ Cj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9m cm9udF9jZmcuaCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZHJ2LmgiCj4gKyNpbmNsdWRl ICJ4ZW5fZHJtX2Zyb250X2dlbS5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9rbXMuaCIK PiArCj4gK3N0YXRpYyBpbnQgZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxwLCBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJn cykKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+ICsJaW50IHJl dDsKPiArCj4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X2dlbV9kdW1iX2NyZWF0ZShmaWxwLCBkZXYs IGFyZ3MpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJb2JqID0gZHJtX2dl bV9vYmplY3RfbG9va3VwKGZpbHAsIGFyZ3MtPmhhbmRsZSk7Cj4gKwlpZiAoIW9iaikgewo+ICsJ CXJldCA9IC1FTk9FTlQ7Cj4gKwkJZ290byBmYWlsX2Rlc3Ryb3k7Cj4gKwl9Cj4gKwo+ICsJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKPiArCj4gKwkvKgo+ICsJICog SW4gY2FzZSBvZiBDT05GSUdfRFJNX1hFTl9GUk9OVEVORF9DTUEgZ2VtX29iaiBpcyBjb25zdHJ1 Y3RlZAo+ICsJICogdmlhIERSTSBDTUEgaGVscGVycyBhbmQgZG9lc24ndCBoYXZlIC0+cGFnZXMg YWxsb2NhdGVkCj4gKwkgKiAoeGVuZHJtX2dlbV9nZXRfcGFnZXMgd2lsbCByZXR1cm4gTlVMTCks IGJ1dCBpbnN0ZWFkIGNhbiBwcm92aWRlCj4gKwkgKiBzZyB0YWJsZQo+ICsJICovCj4gKwlpZiAo eGVuX2RybV9mcm9udF9nZW1fZ2V0X3BhZ2VzKG9iaikpCj4gKwkJcmV0ID0geGVuX2RybV9mcm9u dF9kYnVmX2NyZWF0ZV9mcm9tX3BhZ2VzKAo+ICsJCQkJZHJtX2luZm8tPmZyb250X2luZm8sCj4g KwkJCQl4ZW5fZHJtX2Zyb250X2RidWZfdG9fY29va2llKG9iaiksCj4gKwkJCQlhcmdzLT53aWR0 aCwgYXJncy0+aGVpZ2h0LCBhcmdzLT5icHAsCj4gKwkJCQlhcmdzLT5zaXplLAo+ICsJCQkJeGVu X2RybV9mcm9udF9nZW1fZ2V0X3BhZ2VzKG9iaikpOwo+ICsJZWxzZQo+ICsJCXJldCA9IHhlbl9k cm1fZnJvbnRfZGJ1Zl9jcmVhdGVfZnJvbV9zZ3QoCj4gKwkJCQlkcm1faW5mby0+ZnJvbnRfaW5m bywKPiArCQkJCXhlbl9kcm1fZnJvbnRfZGJ1Zl90b19jb29raWUob2JqKSwKPiArCQkJCWFyZ3Mt PndpZHRoLCBhcmdzLT5oZWlnaHQsIGFyZ3MtPmJwcCwKPiArCQkJCWFyZ3MtPnNpemUsCj4gKwkJ CQl4ZW5fZHJtX2Zyb250X2dlbV9nZXRfc2dfdGFibGUob2JqKSk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gZmFpbF9kZXN0cm95Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZmFpbF9kZXN0cm95 Ogo+ICsJZHJtX2dlbV9kdW1iX2Rlc3Ryb3koZmlscCwgZGV2LCBhcmdzLT5oYW5kbGUpOwo+ICtm YWlsOgo+ICsJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGR1bWIgYnVmZmVyOiAlZFxuIiwg cmV0KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfb2JqZWN0 KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9kcm1faW5mbyAqZHJtX2luZm8gPSBvYmotPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJeGVu X2RybV9mcm9udF9kYnVmX2Rlc3Ryb3koZHJtX2luZm8tPmZyb250X2luZm8sCj4gKwkJCXhlbl9k cm1fZnJvbnRfZGJ1Zl90b19jb29raWUob2JqKSk7Cj4gKwl4ZW5fZHJtX2Zyb250X2dlbV9mcmVl X29iamVjdChvYmopOwo+ICt9Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfb25fZnJhbWVfZG9u ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCWludCBjb25uX2lkeCwgdWludDY0 X3QgZmJfY29va2llKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJt X2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwlpZiAodW5saWtlbHko Y29ubl9pZHggPj0gZHJtX2luZm8tPmNmZy0+bnVtX2Nvbm5lY3RvcnMpKQo+ICsJCXJldHVybjsK PiArCj4gKwl4ZW5fZHJtX2Zyb250X2ttc19vbl9mcmFtZV9kb25lKCZkcm1faW5mby0+cGlwZWxp bmVbY29ubl9pZHhdLAo+ICsJCQlmYl9jb29raWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBs YXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwl4ZW5f ZHJtX2Zyb250X3VubG9hZChkcm1faW5mby0+ZnJvbnRfaW5mbyk7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhlbl9kcm1fZm9wcyA9IHsKPiArCS5vd25l ciAgICAgICAgICA9IFRISVNfTU9EVUxFLAo+ICsJLm9wZW4gICAgICAgICAgID0gZHJtX29wZW4s Cj4gKwkucmVsZWFzZSAgICAgICAgPSBkcm1fcmVsZWFzZSwKPiArCS51bmxvY2tlZF9pb2N0bCA9 IGRybV9pb2N0bCwKPiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArCS5jb21wYXRfaW9jdGwgICA9 IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ICsJLnBvbGwgICAgICAgICAgID0gZHJtX3Bv bGwsCj4gKwkucmVhZCAgICAgICAgICAgPSBkcm1fcmVhZCwKPiArCS5sbHNlZWsgICAgICAgICA9 IG5vX2xsc2VlaywKPiArI2lmZGVmIENPTkZJR19EUk1fWEVOX0ZST05URU5EX0NNQQo+ICsJLm1t YXAgICAgICAgICAgID0gZHJtX2dlbV9jbWFfbW1hcCwKPiArI2Vsc2UKPiArCS5tbWFwICAgICAg ICAgICA9IHhlbl9kcm1fZnJvbnRfZ2VtX21tYXAsCj4gKyNlbmRpZgo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZW5fZHJtX3ZtX29wcyA9IHsK PiArCS5vcGVuICAgICAgICAgICA9IGRybV9nZW1fdm1fb3BlbiwKPiArCS5jbG9zZSAgICAgICAg ICA9IGRybV9nZW1fdm1fY2xvc2UsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX2RyaXZlciB4ZW5f ZHJtX2RyaXZlciA9IHsKPiArCS5kcml2ZXJfZmVhdHVyZXMgICAgICAgICAgID0gRFJJVkVSX0dF TSB8IERSSVZFUl9NT0RFU0VUIHwKPiArCQkJCSAgICAgRFJJVkVSX1BSSU1FIHwgRFJJVkVSX0FU T01JQywKPiArCS5sYXN0Y2xvc2UgICAgICAgICAgICAgICAgID0gbGFzdGNsb3NlLAo+ICsJLmdl bV92bV9vcHMgICAgICAgICAgICAgICAgPSAmeGVuX2RybV92bV9vcHMsCj4gKwkuZ2VtX2ZyZWVf b2JqZWN0X3VubG9ja2VkICA9IGZyZWVfb2JqZWN0LAo+ICsJLnByaW1lX2hhbmRsZV90b19mZCAg ICAgICAgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKPiArCS5wcmltZV9mZF90b19oYW5k bGUgICAgICAgID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2lt cG9ydCAgICAgICAgICA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmltZV9leHBv cnQgICAgICAgICAgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKPiArCS5nZW1fcHJpbWVfaW1wb3J0 X3NnX3RhYmxlID0geGVuX2RybV9mcm9udF9nZW1faW1wb3J0X3NnX3RhYmxlLAo+ICsJLmdlbV9w cmltZV9nZXRfc2dfdGFibGUgICAgPSB4ZW5fZHJtX2Zyb250X2dlbV9nZXRfc2dfdGFibGUsCj4g KwkuZHVtYl9jcmVhdGUgICAgICAgICAgICAgICA9IGR1bWJfY3JlYXRlLAo+ICsJLmZvcHMgICAg ICAgICAgICAgICAgICAgICAgPSAmeGVuX2RybV9mb3BzLAo+ICsJLm5hbWUgICAgICAgICAgICAg ICAgICAgICAgPSAieGVuZHJtLWR1IiwKPiArCS5kZXNjICAgICAgICAgICAgICAgICAgICAgID0g IlhlbiBQViBEUk0gRGlzcGxheSBVbml0IiwKPiArCS5kYXRlICAgICAgICAgICAgICAgICAgICAg ID0gIjIwMTgwMjIxIiwKPiArCS5tYWpvciAgICAgICAgICAgICAgICAgICAgID0gMSwKPiArCS5t aW5vciAgICAgICAgICAgICAgICAgICAgID0gMCwKPiArCj4gKyNpZmRlZiBDT05GSUdfRFJNX1hF Tl9GUk9OVEVORF9DTUEKPiArCS5nZW1fcHJpbWVfdm1hcCAgICAgICAgICAgID0gZHJtX2dlbV9j bWFfcHJpbWVfdm1hcCwKPiArCS5nZW1fcHJpbWVfdnVubWFwICAgICAgICAgID0gZHJtX2dlbV9j bWFfcHJpbWVfdnVubWFwLAo+ICsJLmdlbV9wcmltZV9tbWFwICAgICAgICAgICAgPSBkcm1fZ2Vt X2NtYV9wcmltZV9tbWFwLAo+ICsjZWxzZQo+ICsJLmdlbV9wcmltZV92bWFwICAgICAgICAgICAg PSB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwLAo+ICsJLmdlbV9wcmltZV92dW5tYXAgICAg ICAgICAgPSB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92dW5tYXAsCj4gKwkuZ2VtX3ByaW1lX21t YXAgICAgICAgICAgICA9IHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX21tYXAsCj4gKyNlbmRpZgo+ ICt9Owo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZyAqY2ZnID0gZGV2 X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9p bmZvICpkcm1faW5mbzsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCURSTV9JTkZPKCJDcmVhdGluZyAlc1xuIiwgeGVuX2RybV9kcml2ZXIuZGVzYyk7Cj4g Kwo+ICsJZHJtX2luZm8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcm1faW5m byksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkcm1faW5mbykKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlkcm1faW5mby0+ZnJvbnRfaW5mbyA9IGNmZy0+ZnJvbnRfaW5mbzsKPiArCj4gKwlk ZXYgPSBkcm1fZGV2X2FsbG9jKCZ4ZW5fZHJtX2RyaXZlciwgJnBkZXYtPmRldik7Cj4gKwlpZiAo IWRldikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkcm1faW5mby0+ZHJtX2RldiA9IGRl djsKPiArCj4gKwlkcm1faW5mby0+Y2ZnID0gY2ZnOwo+ICsJZGV2LT5kZXZfcHJpdmF0ZSA9IGRy bV9pbmZvOwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJtX2luZm8pOwo+ICsKPiAr CXJldCA9IHhlbl9kcm1fZnJvbnRfa21zX2luaXQoZHJtX2luZm8pOwo+ICsJaWYgKHJldCkgewo+ ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgRFJNL0tNUywgcmV0ICVkXG4iLCBy ZXQpOwo+ICsJCWdvdG8gZmFpbF9tb2Rlc2V0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9kZXZf cmVnaXN0ZXIoZGV2LCAwKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmYWlsX3JlZ2lzdGVyOwo+ ICsKPiArCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxu IiwKPiArCQkJeGVuX2RybV9kcml2ZXIubmFtZSwgeGVuX2RybV9kcml2ZXIubWFqb3IsCj4gKwkJ CXhlbl9kcm1fZHJpdmVyLm1pbm9yLCB4ZW5fZHJtX2RyaXZlci5wYXRjaGxldmVsLAo+ICsJCQl4 ZW5fZHJtX2RyaXZlci5kYXRlLCBkZXYtPnByaW1hcnktPmluZGV4KTsKPiArCj4gKwlyZXR1cm4g MDsKPiArCj4gK2ZhaWxfcmVnaXN0ZXI6Cj4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGV2KTsKPiAr ZmFpbF9tb2Rlc2V0Ogo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRldik7Cj4gKwlkcm1f bW9kZV9jb25maWdfY2xlYW51cChkZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50 IHhlbl9kcm1fZnJvbnRfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkcm1faW5m by0+ZHJtX2RldjsKPiArCj4gKwlpZiAoZGV2KSB7Cj4gKwkJZHJtX2ttc19oZWxwZXJfcG9sbF9m aW5pKGRldik7Cj4gKwkJZHJtX2Rldl91bnJlZ2lzdGVyKGRldik7Cj4gKwkJZHJtX2F0b21pY19o ZWxwZXJfc2h1dGRvd24oZGV2KTsKPiArCQlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOwo+ ICsJCWRybV9kZXZfdW5yZWYoZGV2KTsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICti b29sIHhlbl9kcm1fZnJvbnRfZHJ2X2lzX3VzZWQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ICsK PiArCWlmICghZHJtX2luZm8pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWRldiA9IGRybV9p bmZvLT5kcm1fZGV2Owo+ICsJaWYgKCFkZXYpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8q Cj4gKwkgKiBGSVhNRTogdGhlIGNvZGUgYmVsb3cgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgZHJtX2ds b2JhbF9tdXRleCwKPiArCSAqIGJ1dCBpdCBpcyBub3QgYWNjZXNzaWJsZSB0byB1cy4gQW55d2F5 cyB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uLAo+ICsJICogYnV0IHdlIHdpbGwgcmUtdHJ5Lgo+ ICsJICovCj4gKwlyZXR1cm4gZGV2LT5vcGVuX2NvdW50ICE9IDA7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjUzNjU2Zjg1OGMxMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmgKPiBAQCAtMCwwICsxLDc4IEBACj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLwo+ICsKPiArLyoK PiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtz YW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9EUlZfSF8KPiArI2RlZmluZSBfX1hF Tl9EUk1fRlJPTlRfRFJWX0hfCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1 ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlICJ4ZW5fZHJt X2Zyb250LmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2NmZy5oIgo+ICsjaW5jbHVkZSAi eGVuX2RybV9mcm9udF9jb25uLmgiCj4gKwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlw ZWxpbmUgewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvOwo+ICsK PiArCWludCBpbmRleDsKPiArCj4gKwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgcGlw ZTsKPiArCj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOwo+ICsJLyogVGhlc2UgYXJlIG9u bHkgZm9yIGNvbm5lY3RvciBtb2RlIGNoZWNraW5nICovCj4gKwlpbnQgd2lkdGgsIGhlaWdodDsK PiArCj4gKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpwZW5kaW5nX2V2ZW50Owo+ ICsKPiArCS8qCj4gKwkgKiBwZmxpcF90aW1lb3V0IGlzIHNldCB0byBjdXJyZW50IGppZmZpZXMg b25jZSB3ZSBzZW5kIGEgcGFnZSBmbGlwIGFuZAo+ICsJICogcmVzZXQgdG8gMCB3aGVuIHdlIHJl Y2VpdmUgZnJhbWUgZG9uZSBldmVudCBmcm9tIHRoZSBiYWNrZWQuCj4gKwkgKiBJdCBpcyBjaGVj a2VkIGR1cmluZyBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5kZXRlY3RfY3R4IHRvIGRldGVj dAo+ICsJICogdGltZS1vdXRzIGZvciBmcmFtZSBkb25lIGV2ZW50LCBlLmcuIGR1ZSB0byBiYWNr ZW5kIGVycm9ycy4KPiArCSAqCj4gKwkgKiBUaGlzIG11c3QgYmUgcHJvdGVjdGVkIHdpdGggZnJv bnRfaW5mby0+aW9fbG9jaywgc28gcmFjZXMgYmV0d2Vlbgo+ICsJICogaW50ZXJydXB0IGhhbmRs ZXIgYW5kIHJlc3Qgb2YgdGhlIGNvZGUgYXJlIHByb3Blcmx5IGhhbmRsZWQuCj4gKwkgKi8KPiAr CXVuc2lnbmVkIGxvbmcgcGZsaXBfdGltZW91dDsKPiArCj4gKwlib29sIGNvbm5fY29ubmVjdGVk Owo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gewo+ICsJc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbzsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2Owo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpjZmc7Cj4gKwo+ICsJc3RydWN0 IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lIHBpcGVsaW5lW1hFTl9EUk1fRlJPTlRfTUFYX0NS VENTXTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgeGVuX2RybV9mcm9udF9m Yl90b19jb29raWUoCj4gKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCXJl dHVybiAodWludDY0X3QpZmI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgeGVu X2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZSgKPiArCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdl bV9vYmopCj4gK3sKPiArCXJldHVybiAodWludDY0X3QpZ2VtX29iajsKPiArfQo+ICsKPiAraW50 IHhlbl9kcm1fZnJvbnRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwo+ ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KTsKPiArCj4gK2Jvb2wgeGVuX2RybV9mcm9udF9kcnZfaXNfdXNlZChzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9vbl9mcmFtZV9k b25lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwkJaW50IGNvbm5faWR4LCB1aW50 NjRfdCBmYl9jb29raWUpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9EUlZfSF8g Ki8KPiArCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9l dnRjaG5sLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZXZ0Y2hubC5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjIyOGI5ZmZlOGZkOAo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRf ZXZ0Y2hubC5jCj4gQEAgLTAsMCArMSwzODMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgT1IgTUlUCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0g ZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJ bmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5k cl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9p cnEuaD4KPiArCj4gKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vZXZl bnRzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vZ3JhbnRfdGFibGUuaD4KPiArCj4gKyNpbmNsdWRlICJ4 ZW5fZHJtX2Zyb250LmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Rydi5oIgo+ICsjaW5j bHVkZSAieGVuX2RybV9mcm9udF9ldnRjaG5sLmgiCj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qg ZXZ0Y2hubF9pbnRlcnJ1cHRfY3RybChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0 cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmwgPSBkZXZfaWQ7Cj4gKwlzdHJ1Y3Qg eGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvID0gZXZ0Y2hubC0+ZnJvbnRfaW5mbzsKPiAr CXN0cnVjdCB4ZW5kaXNwbF9yZXNwICpyZXNwOwo+ICsJUklOR19JRFggaSwgcnA7Cj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICsKPiArCWlmICh1bmxpa2VseShldnRjaG5sLT5zdGF0ZSAhPSBF VlRDSE5MX1NUQVRFX0NPTk5FQ1RFRCkpCj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsKPiAr CXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwo+ICth Z2FpbjoKPiArCXJwID0gZXZ0Y2hubC0+dS5yZXEucmluZy5zcmluZy0+cnNwX3Byb2Q7Cj4gKwkv KiBlbnN1cmUgd2Ugc2VlIHF1ZXVlZCByZXNwb25zZXMgdXAgdG8gcnAgKi8KPiArCXZpcnRfcm1i KCk7Cj4gKwo+ICsJZm9yIChpID0gZXZ0Y2hubC0+dS5yZXEucmluZy5yc3BfY29uczsgaSAhPSBy cDsgaSsrKSB7Cj4gKwkJcmVzcCA9IFJJTkdfR0VUX1JFU1BPTlNFKCZldnRjaG5sLT51LnJlcS5y aW5nLCBpKTsKPiArCQlpZiAodW5saWtlbHkocmVzcC0+aWQgIT0gZXZ0Y2hubC0+ZXZ0X2lkKSkK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCXN3aXRjaCAocmVzcC0+b3BlcmF0aW9uKSB7Cj4gKwkJ Y2FzZSBYRU5ESVNQTF9PUF9QR19GTElQOgo+ICsJCWNhc2UgWEVORElTUExfT1BfRkJfQVRUQUNI Ogo+ICsJCWNhc2UgWEVORElTUExfT1BfRkJfREVUQUNIOgo+ICsJCWNhc2UgWEVORElTUExfT1Bf REJVRl9DUkVBVEU6Cj4gKwkJY2FzZSBYRU5ESVNQTF9PUF9EQlVGX0RFU1RST1k6Cj4gKwkJY2Fz ZSBYRU5ESVNQTF9PUF9TRVRfQ09ORklHOgo+ICsJCQlldnRjaG5sLT51LnJlcS5yZXNwX3N0YXR1 cyA9IHJlc3AtPnN0YXR1czsKPiArCQkJY29tcGxldGUoJmV2dGNobmwtPnUucmVxLmNvbXBsZXRp b24pOwo+ICsJCQlicmVhazsKPiArCj4gKwkJZGVmYXVsdDoKPiArCQkJRFJNX0VSUk9SKCJPcGVy YXRpb24gJWQgaXMgbm90IHN1cHBvcnRlZFxuIiwKPiArCQkJCXJlc3AtPm9wZXJhdGlvbik7Cj4g KwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlldnRjaG5sLT51LnJlcS5yaW5nLnJzcF9j b25zID0gaTsKPiArCj4gKwlpZiAoaSAhPSBldnRjaG5sLT51LnJlcS5yaW5nLnJlcV9wcm9kX3B2 dCkgewo+ICsJCWludCBtb3JlX3RvX2RvOwo+ICsKPiArCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9S RVNQT05TRVMoJmV2dGNobmwtPnUucmVxLnJpbmcsCj4gKwkJCQltb3JlX3RvX2RvKTsKPiArCQlp ZiAobW9yZV90b19kbykKPiArCQkJZ290byBhZ2FpbjsKPiArCX0gZWxzZQo+ICsJCWV2dGNobmwt PnUucmVxLnJpbmcuc3JpbmctPnJzcF9ldmVudCA9IGkgKyAxOwo+ICsKPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCXJldHVybiBJUlFf SEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGV2dGNobmxfaW50ZXJydXB0 X2V2dChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250 X2V2dGNobmwgKmV2dGNobmwgPSBkZXZfaWQ7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZv ICpmcm9udF9pbmZvID0gZXZ0Y2hubC0+ZnJvbnRfaW5mbzsKPiArCXN0cnVjdCB4ZW5kaXNwbF9l dmVudF9wYWdlICpwYWdlID0gZXZ0Y2hubC0+dS5ldnQucGFnZTsKPiArCXVpbnQzMl90IGNvbnMs IHByb2Q7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCWlmICh1bmxpa2VseShldnRj aG5sLT5zdGF0ZSAhPSBFVlRDSE5MX1NUQVRFX0NPTk5FQ1RFRCkpCj4gKwkJcmV0dXJuIElSUV9I QU5ETEVEOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBm bGFncyk7Cj4gKwo+ICsJcHJvZCA9IHBhZ2UtPmluX3Byb2Q7Cj4gKwkvKiBlbnN1cmUgd2Ugc2Vl IHJpbmcgY29udGVudHMgdXAgdG8gcHJvZCAqLwo+ICsJdmlydF9ybWIoKTsKPiArCWlmIChwcm9k ID09IHBhZ2UtPmluX2NvbnMpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJZm9yIChjb25zID0gcGFn ZS0+aW5fY29uczsgY29ucyAhPSBwcm9kOyBjb25zKyspIHsKPiArCQlzdHJ1Y3QgeGVuZGlzcGxf ZXZ0ICpldmVudDsKPiArCj4gKwkJZXZlbnQgPSAmWEVORElTUExfSU5fUklOR19SRUYocGFnZSwg Y29ucyk7Cj4gKwkJaWYgKHVubGlrZWx5KGV2ZW50LT5pZCAhPSBldnRjaG5sLT5ldnRfaWQrKykp Cj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Cj4gKwkJY2Fz ZSBYRU5ESVNQTF9FVlRfUEdfRkxJUDoKPiArCQkJeGVuX2RybV9mcm9udF9vbl9mcmFtZV9kb25l KGZyb250X2luZm8tPmRybV9wZGV2LAo+ICsJCQkJZXZ0Y2hubC0+aW5kZXgsIGV2ZW50LT5vcC5w Z19mbGlwLmZiX2Nvb2tpZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCXBhZ2UtPmlu X2NvbnMgPSBjb25zOwo+ICsJLyogZW5zdXJlIHJpbmcgY29udGVudHMgKi8KPiArCXZpcnRfd21i KCk7Cj4gKwo+ICtvdXQ6Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcm9udF9pbmZvLT5p b19sb2NrLCBmbGFncyk7Cj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGV2dGNobmxfZnJlZShzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZv LAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmwpCj4gK3sKPiArCXVu c2lnbmVkIGxvbmcgcGFnZSA9IDA7Cj4gKwo+ICsJaWYgKGV2dGNobmwtPnR5cGUgPT0gRVZUQ0hO TF9UWVBFX1JFUSkKPiArCQlwYWdlID0gKHVuc2lnbmVkIGxvbmcpZXZ0Y2hubC0+dS5yZXEucmlu Zy5zcmluZzsKPiArCWVsc2UgaWYgKGV2dGNobmwtPnR5cGUgPT0gRVZUQ0hOTF9UWVBFX0VWVCkK PiArCQlwYWdlID0gKHVuc2lnbmVkIGxvbmcpZXZ0Y2hubC0+dS5ldnQucGFnZTsKPiArCWlmICgh cGFnZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZXZ0Y2hubC0+c3RhdGUgPSBFVlRDSE5MX1NUQVRF X0RJU0NPTk5FQ1RFRDsKPiArCj4gKwlpZiAoZXZ0Y2hubC0+dHlwZSA9PSBFVlRDSE5MX1RZUEVf UkVRKSB7Cj4gKwkJLyogcmVsZWFzZSBhbGwgd2hvIHN0aWxsIHdhaXRzIGZvciByZXNwb25zZSBp ZiBhbnkgKi8KPiArCQlldnRjaG5sLT51LnJlcS5yZXNwX3N0YXR1cyA9IC1FSU87Cj4gKwkJY29t cGxldGVfYWxsKCZldnRjaG5sLT51LnJlcS5jb21wbGV0aW9uKTsKPiArCX0KPiArCj4gKwlpZiAo ZXZ0Y2hubC0+aXJxKQo+ICsJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIoZXZ0Y2hubC0+aXJxLCBl dnRjaG5sKTsKPiArCj4gKwlpZiAoZXZ0Y2hubC0+cG9ydCkKPiArCQl4ZW5idXNfZnJlZV9ldnRj aG4oZnJvbnRfaW5mby0+eGJfZGV2LCBldnRjaG5sLT5wb3J0KTsKPiArCj4gKwkvKiBlbmQgYWNj ZXNzIGFuZCBmcmVlIHRoZSBwYWdlICovCj4gKwlpZiAoZXZ0Y2hubC0+Z3JlZiAhPSBHUkFOVF9J TlZBTElEX1JFRikKPiArCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKGV2dGNobmwtPmdyZWYs IDAsIHBhZ2UpOwo+ICsKPiArCW1lbXNldChldnRjaG5sLCAwLCBzaXplb2YoKmV2dGNobmwpKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBldnRjaG5sX2FsbG9jKHN0cnVjdCB4ZW5fZHJtX2Zyb250 X2luZm8gKmZyb250X2luZm8sIGludCBpbmRleCwKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9l dnRjaG5sICpldnRjaG5sLAo+ICsJCWVudW0geGVuX2RybV9mcm9udF9ldnRjaG5sX3R5cGUgdHlw ZSkKPiArewo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiA9IGZyb250X2luZm8tPnhi X2RldjsKPiArCXVuc2lnbmVkIGxvbmcgcGFnZTsKPiArCWdyYW50X3JlZl90IGdyZWY7Cj4gKwlp cnFfaGFuZGxlcl90IGhhbmRsZXI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW1lbXNldChldnRjaG5s LCAwLCBzaXplb2YoKmV2dGNobmwpKTsKPiArCWV2dGNobmwtPnR5cGUgPSB0eXBlOwo+ICsJZXZ0 Y2hubC0+aW5kZXggPSBpbmRleDsKPiArCWV2dGNobmwtPmZyb250X2luZm8gPSBmcm9udF9pbmZv Owo+ICsJZXZ0Y2hubC0+c3RhdGUgPSBFVlRDSE5MX1NUQVRFX0RJU0NPTk5FQ1RFRDsKPiArCWV2 dGNobmwtPmdyZWYgPSBHUkFOVF9JTlZBTElEX1JFRjsKPiArCj4gKwlwYWdlID0gZ2V0X3plcm9l ZF9wYWdlKEdGUF9OT0lPIHwgX19HRlBfSElHSCk7Cj4gKwlpZiAoIXBhZ2UpIHsKPiArCQlyZXQg PSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCj4gKwlpZiAodHlwZSA9PSBFVlRD SE5MX1RZUEVfUkVRKSB7Cj4gKwkJc3RydWN0IHhlbl9kaXNwbGlmX3NyaW5nICpzcmluZzsKPiAr Cj4gKwkJaW5pdF9jb21wbGV0aW9uKCZldnRjaG5sLT51LnJlcS5jb21wbGV0aW9uKTsKPiArCQlz cmluZyA9IChzdHJ1Y3QgeGVuX2Rpc3BsaWZfc3JpbmcgKilwYWdlOwo+ICsJCVNIQVJFRF9SSU5H X0lOSVQoc3JpbmcpOwo+ICsJCUZST05UX1JJTkdfSU5JVCgmZXZ0Y2hubC0+dS5yZXEucmluZywK PiArCQkJCXNyaW5nLCBYRU5fUEFHRV9TSVpFKTsKPiArCj4gKwkJcmV0ID0geGVuYnVzX2dyYW50 X3JpbmcoeGJfZGV2LCBzcmluZywgMSwgJmdyZWYpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQln b3RvIGZhaWw7Cj4gKwo+ICsJCWhhbmRsZXIgPSBldnRjaG5sX2ludGVycnVwdF9jdHJsOwo+ICsJ fSBlbHNlIHsKPiArCQlldnRjaG5sLT51LmV2dC5wYWdlID0gKHN0cnVjdCB4ZW5kaXNwbF9ldmVu dF9wYWdlICopcGFnZTsKPiArCj4gKwkJcmV0ID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNz KHhiX2Rldi0+b3RoZXJlbmRfaWQsCj4gKwkJCQl2aXJ0X3RvX2dmbigodm9pZCAqKXBhZ2UpLCAw KTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJZ290byBmYWlsOwo+ICsKPiArCQlncmVmID0gcmV0 Owo+ICsJCWhhbmRsZXIgPSBldnRjaG5sX2ludGVycnVwdF9ldnQ7Cj4gKwl9Cj4gKwlldnRjaG5s LT5ncmVmID0gZ3JlZjsKPiArCj4gKwlyZXQgPSB4ZW5idXNfYWxsb2NfZXZ0Y2huKHhiX2Rldiwg JmV2dGNobmwtPnBvcnQpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBmYWlsOwo+ICsKPiAr CXJldCA9IGJpbmRfZXZ0Y2huX3RvX2lycWhhbmRsZXIoZXZ0Y2hubC0+cG9ydCwKPiArCQkJaGFu ZGxlciwgMCwgeGJfZGV2LT5kZXZpY2V0eXBlLCBldnRjaG5sKTsKPiArCWlmIChyZXQgPCAwKQo+ ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlldnRjaG5sLT5pcnEgPSByZXQ7Cj4gKwlyZXR1cm4gMDsK PiArCj4gK2ZhaWw6Cj4gKwlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nOiAlZFxu IiwgcmV0KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2V2 dGNobmxfY3JlYXRlX2FsbChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKQo+ ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZzsKPiArCWludCByZXQsIGNvbm47 Cj4gKwo+ICsJY2ZnID0gJmZyb250X2luZm8tPmNmZzsKPiArCj4gKwlmcm9udF9pbmZvLT5ldnRf cGFpcnMgPSBkZXZtX2tjYWxsb2MoJmZyb250X2luZm8tPnhiX2Rldi0+ZGV2LAo+ICsJCQljZmct Pm51bV9jb25uZWN0b3JzLAo+ICsJCQlzaXplb2Yoc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hu bF9wYWlyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZyb250X2luZm8tPmV2dF9wYWlycykgewo+ ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWZvciAoY29u biA9IDA7IGNvbm4gPCBjZmctPm51bV9jb25uZWN0b3JzOyBjb25uKyspIHsKPiArCQlyZXQgPSBl dnRjaG5sX2FsbG9jKGZyb250X2luZm8sIGNvbm4sCj4gKwkJCQkmZnJvbnRfaW5mby0+ZXZ0X3Bh aXJzW2Nvbm5dLnJlcSwKPiArCQkJCUVWVENITkxfVFlQRV9SRVEpOwo+ICsJCWlmIChyZXQgPCAw KSB7Cj4gKwkJCURSTV9FUlJPUigiRXJyb3IgYWxsb2NhdGluZyBjb250cm9sIGNoYW5uZWxcbiIp Owo+ICsJCQlnb3RvIGZhaWw7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBldnRjaG5sX2FsbG9jKGZy b250X2luZm8sIGNvbm4sCj4gKwkJCQkmZnJvbnRfaW5mby0+ZXZ0X3BhaXJzW2Nvbm5dLmV2dCwK PiArCQkJCUVWVENITkxfVFlQRV9FVlQpOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9F UlJPUigiRXJyb3IgYWxsb2NhdGluZyBpbi1ldmVudCBjaGFubmVsXG4iKTsKPiArCQkJZ290byBm YWlsOwo+ICsJCX0KPiArCX0KPiArCWZyb250X2luZm8tPm51bV9ldnRfcGFpcnMgPSBjZmctPm51 bV9jb25uZWN0b3JzOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICsJeGVuX2RybV9mcm9u dF9ldnRjaG5sX2ZyZWVfYWxsKGZyb250X2luZm8pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBldnRjaG5sX3B1Ymxpc2goc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4 YnQsCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubCAqZXZ0Y2hubCwgY29uc3QgY2hh ciAqcGF0aCwKPiArCQljb25zdCBjaGFyICpub2RlX3JpbmcsIGNvbnN0IGNoYXIgKm5vZGVfY2hu bCkKPiArewo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiA9IGV2dGNobmwtPmZyb250 X2luZm8tPnhiX2RldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogd3JpdGUgY29udHJvbCBjaGFu bmVsIHJpbmcgcmVmZXJlbmNlICovCj4gKwlyZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgcGF0aCwg bm9kZV9yaW5nLCAiJXUiLCBldnRjaG5sLT5ncmVmKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJ eGVuYnVzX2Rldl9lcnJvcih4Yl9kZXYsIHJldCwgIndyaXRpbmcgcmluZy1yZWYiKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8qIHdyaXRlIGV2ZW50IGNoYW5uZWwgcmluZyByZWZl cmVuY2UgKi8KPiArCXJldCA9IHhlbmJ1c19wcmludGYoeGJ0LCBwYXRoLCBub2RlX2NobmwsICIl dSIsIGV2dGNobmwtPnBvcnQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQl4ZW5idXNfZGV2X2Vy cm9yKHhiX2RldiwgcmV0LCAid3JpdGluZyBldmVudCBjaGFubmVsIik7Cj4gKwkJcmV0dXJuIHJl dDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRf ZXZ0Y2hubF9wdWJsaXNoX2FsbChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZv KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuYnVzX3RyYW5zYWN0aW9uIHhidDsKPiArCXN0cnVjdCB4ZW5f ZHJtX2Zyb250X2NmZyAqcGxhdF9kYXRhOwo+ICsJaW50IHJldCwgY29ubjsKPiArCj4gKwlwbGF0 X2RhdGEgPSAmZnJvbnRfaW5mby0+Y2ZnOwo+ICsKPiArYWdhaW46Cj4gKwlyZXQgPSB4ZW5idXNf dHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCXhlbmJ1c19k ZXZfZmF0YWwoZnJvbnRfaW5mby0+eGJfZGV2LCByZXQsCj4gKwkJCQkic3RhcnRpbmcgdHJhbnNh Y3Rpb24iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWZvciAoY29ubiA9IDA7IGNv bm4gPCBwbGF0X2RhdGEtPm51bV9jb25uZWN0b3JzOyBjb25uKyspIHsKPiArCQlyZXQgPSBldnRj aG5sX3B1Ymxpc2goeGJ0LAo+ICsJCQkJJmZyb250X2luZm8tPmV2dF9wYWlyc1tjb25uXS5yZXEs Cj4gKwkJCQlwbGF0X2RhdGEtPmNvbm5lY3RvcnNbY29ubl0ueGVuc3RvcmVfcGF0aCwKPiArCQkJ CVhFTkRJU1BMX0ZJRUxEX1JFUV9SSU5HX1JFRiwKPiArCQkJCVhFTkRJU1BMX0ZJRUxEX1JFUV9D SEFOTkVMKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJZ290byBmYWlsOwo+ICsKPiArCQlyZXQg PSBldnRjaG5sX3B1Ymxpc2goeGJ0LAo+ICsJCQkJJmZyb250X2luZm8tPmV2dF9wYWlyc1tjb25u XS5ldnQsCj4gKwkJCQlwbGF0X2RhdGEtPmNvbm5lY3RvcnNbY29ubl0ueGVuc3RvcmVfcGF0aCwK PiArCQkJCVhFTkRJU1BMX0ZJRUxEX0VWVF9SSU5HX1JFRiwKPiArCQkJCVhFTkRJU1BMX0ZJRUxE X0VWVF9DSEFOTkVMKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJZ290byBmYWlsOwo+ICsJfQo+ ICsKPiArCXJldCA9IHhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAwKTsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJaWYgKHJldCA9PSAtRUFHQUlOKQo+ICsJCQlnb3RvIGFnYWluOwo+ICsKPiAr CQl4ZW5idXNfZGV2X2ZhdGFsKGZyb250X2luZm8tPnhiX2RldiwgcmV0LAo+ICsJCQkJImNvbXBs ZXRpbmcgdHJhbnNhY3Rpb24iKTsKPiArCQlnb3RvIGZhaWxfdG9fZW5kOwo+ICsJfQo+ICsKPiAr CXJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArCXhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAx KTsKPiArCj4gK2ZhaWxfdG9fZW5kOgo+ICsJeGVuYnVzX2Rldl9mYXRhbChmcm9udF9pbmZvLT54 Yl9kZXYsIHJldCwgIndyaXRpbmcgWGVuIHN0b3JlIik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9mbHVzaChzdHJ1Y3QgeGVuX2RybV9mcm9u dF9ldnRjaG5sICpldnRjaG5sKQo+ICt7Cj4gKwlpbnQgbm90aWZ5Owo+ICsKPiArCWV2dGNobmwt PnUucmVxLnJpbmcucmVxX3Byb2RfcHZ0Kys7Cj4gKwlSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NI RUNLX05PVElGWSgmZXZ0Y2hubC0+dS5yZXEucmluZywgbm90aWZ5KTsKPiArCWlmIChub3RpZnkp Cj4gKwkJbm90aWZ5X3JlbW90ZV92aWFfaXJxKGV2dGNobmwtPmlycSk7Cj4gK30KPiArCj4gK3Zv aWQgeGVuX2RybV9mcm9udF9ldnRjaG5sX3NldF9zdGF0ZShzdHJ1Y3QgeGVuX2RybV9mcm9udF9p bmZvICpmcm9udF9pbmZvLAo+ICsJCWVudW0geGVuX2RybV9mcm9udF9ldnRjaG5sX3N0YXRlIHN0 YXRlKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJaW50IGk7Cj4gKwo+ICsJaWYg KCFmcm9udF9pbmZvLT5ldnRfcGFpcnMpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9ja19p cnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwg ZnJvbnRfaW5mby0+bnVtX2V2dF9wYWlyczsgaSsrKSB7Cj4gKwkJZnJvbnRfaW5mby0+ZXZ0X3Bh aXJzW2ldLnJlcS5zdGF0ZSA9IHN0YXRlOwo+ICsJCWZyb250X2luZm8tPmV2dF9wYWlyc1tpXS5l dnQuc3RhdGUgPSBzdGF0ZTsKPiArCX0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyb250 X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCj4gK30KPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9u dF9ldnRjaG5sX2ZyZWVfYWxsKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8p Cj4gK3sKPiArCWludCBpOwo+ICsKPiArCWlmICghZnJvbnRfaW5mby0+ZXZ0X3BhaXJzKQo+ICsJ CXJldHVybjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZnJvbnRfaW5mby0+bnVtX2V2dF9wYWly czsgaSsrKSB7Cj4gKwkJZXZ0Y2hubF9mcmVlKGZyb250X2luZm8sICZmcm9udF9pbmZvLT5ldnRf cGFpcnNbaV0ucmVxKTsKPiArCQlldnRjaG5sX2ZyZWUoZnJvbnRfaW5mbywgJmZyb250X2luZm8t PmV2dF9wYWlyc1tpXS5ldnQpOwo+ICsJfQo+ICsKPiArCWRldm1fa2ZyZWUoJmZyb250X2luZm8t PnhiX2Rldi0+ZGV2LCBmcm9udF9pbmZvLT5ldnRfcGFpcnMpOwo+ICsJZnJvbnRfaW5mby0+ZXZ0 X3BhaXJzID0gTlVMTDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfZXZ0Y2hubC5oIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2V2dGNobmwuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44 ZmFhY2Y5NDQ0ZTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2V2dGNobmwuaAo+IEBAIC0wLDAgKzEsNzkgQEAKPiArLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBh cmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4 IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hj aGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNp Zm5kZWYgX19YRU5fRFJNX0ZST05UX0VWVENITkxfSF8KPiArI2RlZmluZSBfX1hFTl9EUk1fRlJP TlRfRVZUQ0hOTF9IXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICsjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9pby9y aW5nLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaD4KPiArCj4gKy8q Cj4gKyAqIEFsbCBvcGVyYXRpb25zIHdoaWNoIGFyZSBub3QgY29ubmVjdG9yIG9yaWVudGVkIHVz ZSB0aGlzIGN0cmwgZXZlbnQgY2hhbm5lbCwKPiArICogZS5nLiBmYl9hdHRhY2gvZGVzdHJveSB3 aGljaCBiZWxvbmcgdG8gYSBEUk0gZGV2aWNlLCBub3QgdG8gYSBDUlRDLgo+ICsgKi8KPiArI2Rl ZmluZSBHRU5FUklDX09QX0VWVF9DSE5MCTAKPiArCj4gK2VudW0geGVuX2RybV9mcm9udF9ldnRj aG5sX3N0YXRlIHsKPiArCUVWVENITkxfU1RBVEVfRElTQ09OTkVDVEVELAo+ICsJRVZUQ0hOTF9T VEFURV9DT05ORUNURUQsCj4gK307Cj4gKwo+ICtlbnVtIHhlbl9kcm1fZnJvbnRfZXZ0Y2hubF90 eXBlIHsKPiArCUVWVENITkxfVFlQRV9SRVEsCj4gKwlFVlRDSE5MX1RZUEVfRVZULAo+ICt9Owo+ ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm87Cj4gKwo+ICtzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9ldnRjaG5sIHsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2lu Zm87Cj4gKwlpbnQgZ3JlZjsKPiArCWludCBwb3J0Owo+ICsJaW50IGlycTsKPiArCWludCBpbmRl eDsKPiArCWVudW0geGVuX2RybV9mcm9udF9ldnRjaG5sX3N0YXRlIHN0YXRlOwo+ICsJZW51bSB4 ZW5fZHJtX2Zyb250X2V2dGNobmxfdHlwZSB0eXBlOwo+ICsJLyogZWl0aGVyIHJlc3BvbnNlIGlk IG9yIGluY29taW5nIGV2ZW50IGlkICovCj4gKwl1aW50MTZfdCBldnRfaWQ7Cj4gKwkvKiBuZXh0 IHJlcXVlc3QgaWQgb3IgbmV4dCBleHBlY3RlZCBldmVudCBpZCAqLwo+ICsJdWludDE2X3QgZXZ0 X25leHRfaWQ7Cj4gKwl1bmlvbiB7Cj4gKwkJc3RydWN0IHsKPiArCQkJc3RydWN0IHhlbl9kaXNw bGlmX2Zyb250X3JpbmcgcmluZzsKPiArCQkJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsK PiArCQkJLyogbGF0ZXN0IHJlc3BvbnNlIHN0YXR1cyAqLwo+ICsJCQlpbnQgcmVzcF9zdGF0dXM7 Cj4gKwkJfSByZXE7Cj4gKwkJc3RydWN0IHsKPiArCQkJc3RydWN0IHhlbmRpc3BsX2V2ZW50X3Bh Z2UgKnBhZ2U7Cj4gKwkJfSBldnQ7Cj4gKwl9IHU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9ldnRjaG5sX3BhaXIgewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubCBy ZXE7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sIGV2dDsKPiArfTsKPiArCj4gK2lu dCB4ZW5fZHJtX2Zyb250X2V2dGNobmxfY3JlYXRlX2FsbChzdHJ1Y3QgeGVuX2RybV9mcm9udF9p bmZvICpmcm9udF9pbmZvKTsKPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2V2dGNobmxfcHVibGlz aF9hbGwoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbyk7Cj4gKwo+ICt2b2lk IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9mbHVzaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5s ICpldnRjaG5sKTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9ldnRjaG5sX3NldF9zdGF0ZShz dHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCWVudW0geGVuX2RybV9m cm9udF9ldnRjaG5sX3N0YXRlIHN0YXRlKTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9ldnRj aG5sX2ZyZWVfYWxsKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pOwo+ICsK PiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9FVlRDSE5MX0hfICovCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5mNmM1NGFiMGZkY2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gQEAgLTAsMCArMSwzMzUgQEAKPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4gKwo+ICsvKgo+ICsg KiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykg MjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRy IEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2dlbS5oIgo+ICsKPiArI2luY2x1ZGUgPGRy bS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlz dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KPiArCj4gKyNpbmNsdWRlIDx4ZW4v YmFsbG9vbi5oPgo+ICsKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPiArI2luY2x1ZGUg Inhlbl9kcm1fZnJvbnRfZHJ2LmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X3NoYnVmLmgi Cj4gKwo+ICtzdHJ1Y3QgeGVuX2dlbV9vYmplY3Qgewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0 IGJhc2U7Cj4gKwo+ICsJc2l6ZV90IG51bV9wYWdlczsKPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7 Cj4gKwo+ICsJLyogc2V0IGZvciBidWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgYmFja2VuZCAqLwo+ ICsJYm9vbCBiZV9hbGxvYzsKPiArCj4gKwkvKiB0aGlzIGlzIGZvciBpbXBvcnRlZCBQUklNRSBi dWZmZXIgKi8KPiArCXN0cnVjdCBzZ190YWJsZSAqc2d0X2ltcG9ydGVkOwo+ICt9Owo+ICsKPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnRvX3hlbl9nZW1fb2JqKAo+ICsJ CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5l cl9vZihnZW1fb2JqLCBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QsIGJhc2UpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGdlbV9hbGxvY19wYWdlc19hcnJheShzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhl bl9vYmosCj4gKwkJc2l6ZV90IGJ1Zl9zaXplKQo+ICt7Cj4gKwl4ZW5fb2JqLT5udW1fcGFnZXMg PSBESVZfUk9VTkRfVVAoYnVmX3NpemUsIFBBR0VfU0laRSk7Cj4gKwl4ZW5fb2JqLT5wYWdlcyA9 IGt2bWFsbG9jX2FycmF5KHhlbl9vYmotPm51bV9wYWdlcywKPiArCQkJc2l6ZW9mKHN0cnVjdCBw YWdlICopLCBHRlBfS0VSTkVMKTsKPiArCXJldHVybiB4ZW5fb2JqLT5wYWdlcyA9PSBOVUxMID8g LUVOT01FTSA6IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9mcmVlX3BhZ2VzX2FycmF5 KHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaikKPiArewo+ICsJa3ZmcmVlKHhlbl9vYmot PnBhZ2VzKTsKPiArCXhlbl9vYmotPnBhZ2VzID0gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHN0 cnVjdCB4ZW5fZ2VtX29iamVjdCAqZ2VtX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiArCXNpemVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9v Ymo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXhlbl9vYmogPSBremFsbG9jKHNpemVvZigqeGVuX29i aiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF4ZW5fb2JqKQo+ICsJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+ICsKPiArCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCAmeGVuX29iai0+ YmFzZSwgc2l6ZSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWtmcmVlKHhlbl9vYmopOwo+ICsJ CXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHhlbl9vYmo7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKmdlbV9jcmVhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250 X2RybV9pbmZvICpkcm1faW5mbyA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgeGVuX2dl bV9vYmplY3QgKnhlbl9vYmo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNpemUgPSByb3VuZF91cChz aXplLCBQQUdFX1NJWkUpOwo+ICsJeGVuX29iaiA9IGdlbV9jcmVhdGVfb2JqKGRldiwgc2l6ZSk7 Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoeGVuX29iaikpCj4gKwkJcmV0dXJuIHhlbl9vYmo7Cj4g Kwo+ICsJaWYgKGRybV9pbmZvLT5jZmctPmJlX2FsbG9jKSB7Cj4gKwkJLyoKPiArCQkgKiBiYWNr ZW5kIHdpbGwgYWxsb2NhdGUgc3BhY2UgZm9yIHRoaXMgYnVmZmVyLCBzbwo+ICsJCSAqIG9ubHkg YWxsb2NhdGUgYXJyYXkgb2YgcG9pbnRlcnMgdG8gcGFnZXMKPiArCQkgKi8KPiArCQlyZXQgPSBn ZW1fYWxsb2NfcGFnZXNfYXJyYXkoeGVuX29iaiwgc2l6ZSk7Cj4gKwkJaWYgKHJldCA8IDApCj4g KwkJCWdvdG8gZmFpbDsKPiArCj4gKwkJLyoKPiArCQkgKiBhbGxvY2F0ZSBiYWxsb29uZWQgcGFn ZXMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hcAo+ICsJCSAqIGdyYW50IHJlZmVyZW5jZXMgcHJv dmlkZWQgYnkgdGhlIGJhY2tlbmQKPiArCQkgKi8KPiArCQlyZXQgPSBhbGxvY194ZW5iYWxsb29u ZWRfcGFnZXMoeGVuX29iai0+bnVtX3BhZ2VzLAo+ICsJCQkJeGVuX29iai0+cGFnZXMpOwo+ICsJ CWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9FUlJPUigiQ2Fubm90IGFsbG9jYXRlICV6dSBiYWxs b29uZWQgcGFnZXM6ICVkXG4iLAo+ICsJCQkJCXhlbl9vYmotPm51bV9wYWdlcywgcmV0KTsKPiAr CQkJZ2VtX2ZyZWVfcGFnZXNfYXJyYXkoeGVuX29iaik7Cj4gKwkJCWdvdG8gZmFpbDsKPiArCQl9 Cj4gKwo+ICsJCXhlbl9vYmotPmJlX2FsbG9jID0gdHJ1ZTsKPiArCQlyZXR1cm4geGVuX29iajsK PiArCX0KPiArCS8qCj4gKwkgKiBuZWVkIHRvIGFsbG9jYXRlIGJhY2tpbmcgcGFnZXMgbm93LCBz byB3ZSBjYW4gc2hhcmUgdGhvc2UKPiArCSAqIHdpdGggdGhlIGJhY2tlbmQKPiArCSAqLwo+ICsJ eGVuX29iai0+bnVtX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7Cj4gKwl4 ZW5fb2JqLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKCZ4ZW5fb2JqLT5iYXNlKTsKPiArCWlm IChJU19FUlJfT1JfTlVMTCh4ZW5fb2JqLT5wYWdlcykpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHhl bl9vYmotPnBhZ2VzKTsKPiArCQl4ZW5fb2JqLT5wYWdlcyA9IE5VTEw7Cj4gKwkJZ290byBmYWls Owo+ICsJfQo+ICsKPiArCXJldHVybiB4ZW5fb2JqOwo+ICsKPiArZmFpbDoKPiArCURSTV9FUlJP UigiRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciB3aXRoIHNpemUgJXp1XG4iLCBzaXplKTsKPiAr CXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2dlbV9v YmplY3QgKmdlbV9jcmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxwLAo+ICsJ CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB1aW50MzJfdCAqaGFuZGxlKQo+ ICt7Cj4gKwlzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmo7Cj4gKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmdlbV9vYmo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXhlbl9vYmogPSBnZW1fY3Jl YXRlKGRldiwgc2l6ZSk7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoeGVuX29iaikpCj4gKwkJcmV0 dXJuIHhlbl9vYmo7Cj4gKwo+ICsJZ2VtX29iaiA9ICZ4ZW5fb2JqLT5iYXNlOwo+ICsJcmV0ID0g ZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbHAsIGdlbV9vYmosIGhhbmRsZSk7Cj4gKwkvKiBoYW5k bGUgaG9sZHMgdGhlIHJlZmVyZW5jZSAqLwo+ICsJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoZ2VtX29iaik7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gRVJSX1BUUihy ZXQpOwo+ICsKPiArCXJldHVybiB4ZW5fb2JqOwo+ICt9Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9u dF9nZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxwLCBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICsJCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPiArewo+ICsJ c3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+ICsKPiArCWFyZ3MtPnBpdGNoID0gRElW X1JPVU5EX1VQKGFyZ3MtPndpZHRoICogYXJncy0+YnBwLCA4KTsKPiArCWFyZ3MtPnNpemUgPSBh cmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKPiArCj4gKwl4ZW5fb2JqID0gZ2VtX2NyZWF0ZV93 aXRoX2hhbmRsZShmaWxwLCBkZXYsIGFyZ3MtPnNpemUsICZhcmdzLT5oYW5kbGUpOwo+ICsJaWYg KElTX0VSUl9PUl9OVUxMKHhlbl9vYmopKQo+ICsJCXJldHVybiB4ZW5fb2JqID09IE5VTEwgPyAt RU5PTUVNIDogUFRSX0VSUih4ZW5fb2JqKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr dm9pZCB4ZW5fZHJtX2Zyb250X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbV9vYmopCj4gK3sKPiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaiA9IHRvX3hl bl9nZW1fb2JqKGdlbV9vYmopOwo+ICsKPiArCWlmICh4ZW5fb2JqLT5iYXNlLmltcG9ydF9hdHRh Y2gpIHsKPiArCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3koJnhlbl9vYmotPmJhc2UsIHhlbl9vYmot PnNndF9pbXBvcnRlZCk7Cj4gKwkJZ2VtX2ZyZWVfcGFnZXNfYXJyYXkoeGVuX29iaik7Cj4gKwl9 IGVsc2Ugewo+ICsJCWlmICh4ZW5fb2JqLT5wYWdlcykgewo+ICsJCQlpZiAoeGVuX29iai0+YmVf YWxsb2MpIHsKPiArCQkJCWZyZWVfeGVuYmFsbG9vbmVkX3BhZ2VzKHhlbl9vYmotPm51bV9wYWdl cywKPiArCQkJCQkJeGVuX29iai0+cGFnZXMpOwo+ICsJCQkJZ2VtX2ZyZWVfcGFnZXNfYXJyYXko eGVuX29iaik7Cj4gKwkJCX0gZWxzZQo+ICsJCQkJZHJtX2dlbV9wdXRfcGFnZXMoJnhlbl9vYmot PmJhc2UsCj4gKwkJCQkJCXhlbl9vYmotPnBhZ2VzLCB0cnVlLCBmYWxzZSk7Cj4gKwkJfQo+ICsJ fQo+ICsJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShnZW1fb2JqKTsKPiArCWtmcmVlKHhlbl9vYmop Owo+ICt9Cj4gKwo+ICtzdHJ1Y3QgcGFnZSAqKnhlbl9kcm1fZnJvbnRfZ2VtX2dldF9wYWdlcyhz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK3sKPiArCXN0cnVjdCB4ZW5fZ2VtX29i amVjdCAqeGVuX29iaiA9IHRvX3hlbl9nZW1fb2JqKGdlbV9vYmopOwo+ICsKPiArCXJldHVybiB4 ZW5fb2JqLT5wYWdlczsKPiArfQo+ICsKPiArc3RydWN0IHNnX3RhYmxlICp4ZW5fZHJtX2Zyb250 X2dlbV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+ICt7Cj4g KwlzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmogPSB0b194ZW5fZ2VtX29iaihnZW1fb2Jq KTsKPiArCj4gKwlpZiAoIXhlbl9vYmotPnBhZ2VzKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiAr CXJldHVybiBkcm1fcHJpbWVfcGFnZXNfdG9fc2coeGVuX29iai0+cGFnZXMsIHhlbl9vYmotPm51 bV9wYWdlcyk7Cj4gK30KPiArCj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqeGVuX2RybV9mcm9u dF9nZW1faW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKPiArewo+ ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iajsKPiArCXNpemVfdCBzaXpl Owo+ICsJaW50IHJldDsKPiArCj4gKwlzaXplID0gYXR0YWNoLT5kbWFidWYtPnNpemU7Cj4gKwl4 ZW5fb2JqID0gZ2VtX2NyZWF0ZV9vYmooZGV2LCBzaXplKTsKPiArCWlmIChJU19FUlJfT1JfTlVM TCh4ZW5fb2JqKSkKPiArCQlyZXR1cm4gRVJSX0NBU1QoeGVuX29iaik7Cj4gKwo+ICsJcmV0ID0g Z2VtX2FsbG9jX3BhZ2VzX2FycmF5KHhlbl9vYmosIHNpemUpOwo+ICsJaWYgKHJldCA8IDApCj4g KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwl4ZW5fb2JqLT5zZ3RfaW1wb3J0ZWQgPSBz Z3Q7Cj4gKwo+ICsJcmV0ID0gZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMoc2d0LCB4 ZW5fb2JqLT5wYWdlcywKPiArCQkJTlVMTCwgeGVuX29iai0+bnVtX3BhZ2VzKTsKPiArCWlmIChy ZXQgPCAwKQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsJLyoKPiArCSAqIE4uQi4g QWx0aG91Z2ggd2UgaGF2ZSBhbiBBUEkgdG8gY3JlYXRlIGRpc3BsYXkgYnVmZmVyIGZyb20gc2d0 Cj4gKwkgKiB3ZSB1c2UgcGFnZXMgQVBJLCBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdGhvc2UgZm9y IEdFTSBoYW5kbGluZywKPiArCSAqIGUuZy4gZm9yIG1hcHBpbmcgZXRjLgo+ICsJICovCj4gKwly ZXQgPSB4ZW5fZHJtX2Zyb250X2RidWZfY3JlYXRlX2Zyb21fcGFnZXMoCj4gKwkJCWRybV9pbmZv LT5mcm9udF9pbmZvLAo+ICsJCQl4ZW5fZHJtX2Zyb250X2RidWZfdG9fY29va2llKCZ4ZW5fb2Jq LT5iYXNlKSwKPiArCQkJMCwgMCwgMCwgc2l6ZSwgeGVuX29iai0+cGFnZXMpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwlEUk1fREVCVUcoIkltcG9y dGVkIGJ1ZmZlciBvZiBzaXplICV6dSB3aXRoIG5lbnRzICV1XG4iLAo+ICsJCXNpemUsIHNndC0+ bmVudHMpOwo+ICsKPiArCXJldHVybiAmeGVuX29iai0+YmFzZTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBnZW1fbW1hcF9vYmooc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqLAo+ICsJCXN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGFkZHIgPSB2 bWEtPnZtX3N0YXJ0Owo+ICsJaW50IGk7Cj4gKwo+ICsJLyoKPiArCSAqIGNsZWFyIHRoZSBWTV9Q Rk5NQVAgZmxhZyB0aGF0IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwKCksIGFuZCBzZXQgdGhlCj4g KwkgKiB2bV9wZ29mZiAodXNlZCBhcyBhIGZha2UgYnVmZmVyIG9mZnNldCBieSBEUk0pIHRvIDAg YXMgd2Ugd2FudCB0byBtYXAKPiArCSAqIHRoZSB3aG9sZSBidWZmZXIuCj4gKwkgKi8KPiArCXZt YS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKPiArCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURN QVA7Cj4gKwl2bWEtPnZtX3Bnb2ZmID0gMDsKPiArCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90 X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpKTsKPiArCj4gKwkv Kgo+ICsJICogdm1fb3BlcmF0aW9uc19zdHJ1Y3QuZmF1bHQgaGFuZGxlciB3aWxsIGJlIGNhbGxl ZCBpZiBDUFUgYWNjZXNzCj4gKwkgKiB0byBWTSBpcyBoZXJlLiBGb3IgR1BVcyB0aGlzIGlzbid0 IHRoZSBjYXNlLCBiZWNhdXNlIENQVQo+ICsJICogZG9lc24ndCB0b3VjaCB0aGUgbWVtb3J5LiBJ bnNlcnQgcGFnZXMgbm93LCBzbyBib3RoIENQVSBhbmQgR1BVIGFyZQo+ICsJICogaGFwcHkuCj4g KwkgKiBGSVhNRTogYXMgd2UgaW5zZXJ0IGFsbCB0aGUgcGFnZXMgbm93IHRoZW4gbm8gLmZhdWx0 IGhhbmRsZXIgbXVzdAo+ICsJICogYmUgY2FsbGVkLCBzbyBkb24ndCBwcm92aWRlIG9uZQo+ICsJ ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgeGVuX29iai0+bnVtX3BhZ2VzOyBpKyspIHsKPiArCQlp bnQgcmV0Owo+ICsKPiArCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHhlbl9vYmot PnBhZ2VzW2ldKTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBpbnNlcnQgcGFnZXMgaW50byB2bWE6ICVkXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ ICsJCX0KPiArCj4gKwkJYWRkciArPSBQQUdFX1NJWkU7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2dlbV9vYmplY3Qg Knhlbl9vYmo7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmo7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOwo+ICsJaWYgKHJldCA8IDAp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlnZW1fb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7 Cj4gKwl4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwlyZXR1cm4gZ2VtX21t YXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gK30KPiArCj4gK3ZvaWQgKnhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+ICt7Cj4gKwlzdHJ1 Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmogPSB0b194ZW5fZ2VtX29iaihnZW1fb2JqKTsKPiAr Cj4gKwlpZiAoIXhlbl9vYmotPnBhZ2VzKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCXJldHVy biB2bWFwKHhlbl9vYmotPnBhZ2VzLCB4ZW5fb2JqLT5udW1fcGFnZXMsCj4gKwkJCVZNX01BUCwg cGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOwo+ICt9Cj4gKwo+ICt2b2lkIHhlbl9k cm1fZnJvbnRfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmos Cj4gKwkJdm9pZCAqdmFkZHIpCj4gK3sKPiArCXZ1bm1hcCh2YWRkcik7Cj4gK30KPiArCj4gK2lu dCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2Vt X29iaiwKPiArCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJc3RydWN0IHhl bl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1fZ2Vt X21tYXBfb2JqKGdlbV9vYmosIGdlbV9vYmotPnNpemUsIHZtYSk7Cj4gKwlpZiAocmV0IDwgMCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXhlbl9vYmogPSB0b194ZW5fZ2VtX29iaihnZW1fb2Jq KTsKPiArCXJldHVybiBnZW1fbW1hcF9vYmooeGVuX29iaiwgdm1hKTsKPiArfQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmggYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uOGEzNWJjOThjMWMxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uaAo+IEBAIC0wLDAgKzEsNDEgQEAK PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ICsv Kgo+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdo dCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xl a3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgX19YRU5fRFJNX0ZST05UX0dFTV9ICj4gKyNkZWZpbmUgX19Y RU5fRFJNX0ZST05UX0dFTV9ICj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArCj4gK2lu dCB4ZW5fZHJtX2Zyb250X2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICph cmdzKTsKPiArCj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqeGVuX2RybV9mcm9udF9nZW1faW1w b3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gKwo+ICtzdHJ1Y3Qg c2dfdGFibGUgKnhlbl9kcm1fZnJvbnRfZ2VtX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdlbV9vYmopOwo+ICsKPiArc3RydWN0IHBhZ2UgKip4ZW5fZHJtX2Zyb250X2dlbV9n ZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsKPiArdm9pZCB4ZW5fZHJt X2Zyb250X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ ICsKPiArI2lmbmRlZiBDT05GSUdfRFJNX1hFTl9GUk9OVEVORF9DTUEKPiArCj4gK2ludCB4ZW5f ZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSk7Cj4gKwo+ICt2b2lkICp4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfZ2Vt X3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gKwkJdm9pZCAq dmFkZHIpOwo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1lX21tYXAoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ICsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsK PiArI2VuZGlmCj4gKwo+ICsjZW5kaWYgLyogX19YRU5fRFJNX0ZST05UX0dFTV9IICovCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW1fY21hLmMgYi9k cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc5NzhiYzQyYWZkMAo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5jCj4g QEAgLTAsMCArMSw3NCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBP UiBNSVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoK PiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiAr ICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVu a29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNs dWRlIDxkcm0vZHJtX2dlbS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAi eGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYuaCIKPiArI2lu Y2x1ZGUgInhlbl9kcm1fZnJvbnRfZ2VtLmgiCj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Knhlbl9kcm1fZnJvbnRfZ2VtX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAo+ICsJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxl ICpzZ3QpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5mbyA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmo7Cj4g KwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqOwo+ICsJaW50IHJldDsKPiArCj4g KwlnZW1fb2JqID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlKGRldiwgYXR0YWNo LCBzZ3QpOwo+ICsJaWYgKElTX0VSUl9PUl9OVUxMKGdlbV9vYmopKQo+ICsJCXJldHVybiBnZW1f b2JqOwo+ICsKPiArCWNtYV9vYmogPSB0b19kcm1fZ2VtX2NtYV9vYmooZ2VtX29iaik7Cj4gKwo+ ICsJcmV0ID0geGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZV9mcm9tX3NndCgKPiArCQkJZHJtX2lu Zm8tPmZyb250X2luZm8sCj4gKwkJCXhlbl9kcm1fZnJvbnRfZGJ1Zl90b19jb29raWUoZ2VtX29i aiksCj4gKwkJCTAsIDAsIDAsIGdlbV9vYmotPnNpemUsCj4gKwkJCWRybV9nZW1fY21hX3ByaW1l X2dldF9zZ190YWJsZShnZW1fb2JqKSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gRVJS X1BUUihyZXQpOwo+ICsKPiArCURSTV9ERUJVRygiSW1wb3J0ZWQgQ01BIGJ1ZmZlciBvZiBzaXpl ICV6dVxuIiwgZ2VtX29iai0+c2l6ZSk7Cj4gKwo+ICsJcmV0dXJuIGdlbV9vYmo7Cj4gK30KPiAr Cj4gK3N0cnVjdCBzZ190YWJsZSAqeGVuX2RybV9mcm9udF9nZW1fZ2V0X3NnX3RhYmxlKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKPiArewo+ICsJcmV0dXJuIGRybV9nZW1fY21hX3By aW1lX2dldF9zZ190YWJsZShnZW1fb2JqKTsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRf Z2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwgc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiArCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKPiArewo+ICsJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiArCj4gKwlpZiAoZHJtX2luZm8tPmNmZy0+YmVfYWxsb2MpIHsKPiArCQkvKiBUaGlzIHVzZS1j YXNlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGFuZCBwcm9iYWJseSB3b24ndCBiZSAqLwo+ICsJCURS TV9FUlJPUigiQmFja2VuZCBhbGxvY2F0ZWQgYnVmZmVycyBhbmQgQ01BIGhlbHBlcnMgYXJlIG5v dCBzdXBwb3J0ZWQgYXQgdGhlIHNhbWUgdGltZVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIGRybV9nZW1fY21hX2R1bWJfY3JlYXRlKGZpbHAsIGRldiwgYXJn cyk7Cj4gK30KPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+ICt7Cj4gKwlkcm1fZ2VtX2NtYV9mcmVlX29iamVj dChnZW1fb2JqKTsKPiArfQo+ICsKPiArc3RydWN0IHBhZ2UgKip4ZW5fZHJtX2Zyb250X2dlbV9n ZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+ICt7Cj4gKwlyZXR1cm4g TlVMTDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJv bnRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21zLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2FkNDUyODFiMzE4Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMu Ywo+IEBAIC0wLDAgKzEsMzI0IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wIE9SIE1JVAo+ICsKPiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsg Kgo+ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVz aGNoZW5rb0BlcGFtLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9r bXMuaCIKPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgo+ICsKPiArI2luY2x1 ZGUgInhlbl9kcm1fZnJvbnQuaCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfY29ubi5oIgo+ ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYuaCIKPiArCj4gKy8qCj4gKyAqIFRpbWVvdXQg aW4gbXMgdG8gd2FpdCBmb3IgZnJhbWUgZG9uZSBldmVudCBmcm9tIHRoZSBiYWNrZW5kOgo+ICsg KiBtdXN0IGJlIGEgYml0IG1vcmUgdGhhbiBJTyB0aW1lLW91dAo+ICsgKi8KPiArI2RlZmluZSBG UkFNRV9ET05FX1RPX01TCShYRU5fRFJNX0ZST05UX1dBSVRfQkFDS19NUyArIDEwMCkKPiArCj4g K3N0YXRpYyBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKgo+ICt0b194ZW5fZHJt X3BpcGVsaW5lKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkKPiArewo+ICsJ cmV0dXJuIGNvbnRhaW5lcl9vZihwaXBlLCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmUsIHBpcGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmYl9kZXN0cm95KHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAq ZHJtX2luZm8gPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwl4ZW5fZHJtX2Zyb250X2Zi X2RldGFjaChkcm1faW5mby0+ZnJvbnRfaW5mbywKPiArCQkJeGVuX2RybV9mcm9udF9mYl90b19j b29raWUoZmIpKTsKPiArCWRybV9nZW1fZmJfZGVzdHJveShmYik7Cj4gK30KPiArCj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGZiX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kg PSBmYl9kZXN0cm95LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCXN0cnVjdCBkcm1fZmlsZSAq ZmlscCwgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQo+ICt7Cj4gKwlz dHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBkZXYtPmRldl9wcml2YXRl Owo+ICsJc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpnZW1fb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlmYiA9IGRybV9nZW1fZmJf Y3JlYXRlX3dpdGhfZnVuY3MoZGV2LCBmaWxwLCBtb2RlX2NtZCwgJmZiX2Z1bmNzKTsKPiArCWlm IChJU19FUlJfT1JfTlVMTChmYikpCj4gKwkJcmV0dXJuIGZiOwo+ICsKPiArCWdlbV9vYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZmlscCwgbW9kZV9jbWQtPmhhbmRsZXNbMF0pOwo+ICsJaWYg KCFnZW1fb2JqKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9va3VwIEdFTSBvYmplY3Rc biIpOwo+ICsJCXJldCA9IC1FTk9FTlQ7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbV9vYmopOwo+ICsKPiArCXJldCA9 IHhlbl9kcm1fZnJvbnRfZmJfYXR0YWNoKAo+ICsJCQlkcm1faW5mby0+ZnJvbnRfaW5mbywKPiAr CQkJeGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZShnZW1fb2JqKSwKPiArCQkJeGVuX2RybV9m cm9udF9mYl90b19jb29raWUoZmIpLAo+ICsJCQlmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIGZiLT5m b3JtYXQtPmZvcm1hdCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiQmFjayBm YWlsZWQgdG8gYXR0YWNoIEZCICVwOiAlZFxuIiwgZmIsIHJldCk7Cj4gKwkJZ290byBmYWlsOwo+ ICsJfQo+ICsKPiArCXJldHVybiBmYjsKPiArCj4gK2ZhaWw6Cj4gKwlkcm1fZ2VtX2ZiX2Rlc3Ry b3koZmIpOwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbW9kZV9jb25maWdfZnVuY3MgPSB7Cj4gKwku ZmJfY3JlYXRlID0gZmJfY3JlYXRlLAo+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVs cGVyX2NoZWNrLAo+ICsJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQs Cj4gK307Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfa21zX3NlbmRfcGVuZGluZ19ldmVudCgK PiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZWxpbmUtPnBpcGUuY3J0YzsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCWlm IChwaXBlbGluZS0+cGVuZGluZ19ldmVudCkKPiArCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVu dChjcnRjLCBwaXBlbGluZS0+cGVuZGluZ19ldmVudCk7Cj4gKwlwaXBlbGluZS0+cGVuZGluZ19l dmVudCA9IE5VTEw7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ss IGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGlzcGxheV9lbmFibGUoc3RydWN0IGRy bV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAo+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpw aXBlbGluZSA9Cj4gKwkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGlwZS0+cGxhbmUuc3RhdGUtPmZiOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSB4ZW5f ZHJtX2Zyb250X21vZGVfc2V0KHBpcGVsaW5lLAo+ICsJCQljcnRjLT54LCBjcnRjLT55LCBmYi0+ d2lkdGgsIGZiLT5oZWlnaHQsCj4gKwkJCWZiLT5mb3JtYXQtPmNwcFswXSAqIDgsCj4gKwkJCXhl bl9kcm1fZnJvbnRfZmJfdG9fY29va2llKGZiKSk7Cj4gKwo+ICsJaWYgKHJldCkgewo+ICsJCURS TV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBkaXNwbGF5OiAlZFxuIiwgcmV0KTsKPiArCQlwaXBl bGluZS0+Y29ubl9jb25uZWN0ZWQgPSBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkK PiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4g KwkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1faW5mbyAqZHJtX2luZm8gPSBwaXBlbGluZS0+ZHJtX2luZm87Cj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X21vZGVfc2V0 KHBpcGVsaW5lLCAwLCAwLCAwLCAwLCAwLAo+ICsJCQl4ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tp ZShOVUxMKSk7Cj4gKwlpZiAocmV0KQo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUg ZGlzcGxheTogJWRcbiIsIHJldCk7Cj4gKwo+ICsJcGlwZWxpbmUtPmNvbm5fY29ubmVjdGVkID0g dHJ1ZTsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJtX2luZm8tPmZyb250X2luZm8tPmlv X2xvY2ssIGZsYWdzKTsKPiArCXBpcGVsaW5lLT5wZmxpcF90aW1lb3V0ID0gMDsKPiArCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRybV9pbmZvLT5mcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7 Cj4gKwo+ICsJLyogcmVsZWFzZSBzdGFsbGVkIGV2ZW50IGlmIGFueSAqLwo+ICsJeGVuX2RybV9m cm9udF9rbXNfc2VuZF9wZW5kaW5nX2V2ZW50KHBpcGVsaW5lKTsKPiArfQo+ICsKPiArdm9pZCB4 ZW5fZHJtX2Zyb250X2ttc19vbl9mcmFtZV9kb25lKAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250 X2RybV9waXBlbGluZSAqcGlwZWxpbmUsCj4gKwkJdWludDY0X3QgZmJfY29va2llKQo+ICt7Cj4g KwkvKgo+ICsJICogVGhpcyBhbHJlYWR5IHJ1bnMgaW4gaW50ZXJydXB0IGNvbnRleHQsIGUuZy4g dW5kZXIKPiArCSAqIGRybV9pbmZvLT5mcm9udF9pbmZvLT5pb19sb2NrCj4gKwkgKi8KPiArCXBp cGVsaW5lLT5wZmxpcF90aW1lb3V0ID0gMDsKPiArCj4gKwl4ZW5fZHJtX2Zyb250X2ttc19zZW5k X3BlbmRpbmdfZXZlbnQocGlwZWxpbmUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBkaXNwbGF5 X3NlbmRfcGFnZV9mbGlwKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiAr CQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4gK3sKPiArCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5l X3N0YXRlKAo+ICsJCQlvbGRfcGxhbmVfc3RhdGUtPnN0YXRlLCAmcGlwZS0+cGxhbmUpOwo+ICsK PiArCS8qCj4gKwkgKiBJZiBvbGRfcGxhbmVfc3RhdGUtPmZiIGlzIE5VTEwgYW5kIHBsYW5lX3N0 YXRlLT5mYiBpcyBub3QsCj4gKwkgKiB0aGVuIHRoaXMgaXMgYW4gYXRvbWljIGNvbW1pdCB3aGlj aCB3aWxsIGVuYWJsZSBkaXNwbGF5Lgo+ICsJICogSWYgb2xkX3BsYW5lX3N0YXRlLT5mYiBpcyBu b3QgTlVMTCBhbmQgcGxhbmVfc3RhdGUtPmZiIGlzLAo+ICsJICogdGhlbiB0aGlzIGlzIGFuIGF0 b21pYyBjb21taXQgd2hpY2ggd2lsbCBkaXNhYmxlIGRpc3BsYXkuCj4gKwkgKiBJZ25vcmUgdGhl c2UgYW5kIGRvIG5vdCBzZW5kIHBhZ2UgZmxpcCBhcyB0aGlzIGZyYW1lYnVmZmVyIHdpbGwgYmUK PiArCSAqIHNlbnQgdG8gdGhlIGJhY2tlbmQgYXMgYSBwYXJ0IG9mIGRpc3BsYXlfc2V0X2NvbmZp ZyBjYWxsLgo+ICsJICovCj4gKwlpZiAob2xkX3BsYW5lX3N0YXRlLT5mYiAmJiBwbGFuZV9zdGF0 ZS0+ZmIpIHsKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5l ID0KPiArCQkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwkJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gcGlwZWxpbmUtPmRybV9pbmZvOwo+ICsJCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJc3Bpbl9sb2NrX2lycXNhdmUo JmRybV9pbmZvLT5mcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwkJcGlwZWxpbmUtPnBm bGlwX3RpbWVvdXQgPSBqaWZmaWVzICsKPiArCQkJCW1zZWNzX3RvX2ppZmZpZXMoRlJBTUVfRE9O RV9UT19NUyk7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtX2luZm8tPmZyb250X2lu Zm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCj4gKwkJcmV0ID0geGVuX2RybV9mcm9udF9wYWdlX2Zs aXAoZHJtX2luZm8tPmZyb250X2luZm8sCj4gKwkJCQlwaXBlbGluZS0+aW5kZXgsCj4gKwkJCQl4 ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZShwbGFuZV9zdGF0ZS0+ZmIpKTsKPiArCQlpZiAocmV0 KSB7Cj4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIHNlbmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8g YmFja2VuZDogJWRcbiIsIHJldCk7Cj4gKwo+ICsJCQlwaXBlbGluZS0+Y29ubl9jb25uZWN0ZWQg PSBmYWxzZTsKPiArCQkJLyoKPiArCQkJICogUmVwb3J0IHRoZSBmbGlwIG5vdCBoYW5kbGVkLCBz byBwZW5kaW5nIGV2ZW50IGlzCj4gKwkJCSAqIHNlbnQsIHVuYmxvY2tpbmcgdXNlci1zcGFjZS4K PiArCQkJICovCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwkJLyoKPiArCQkgKiBTaWdu YWwgdGhhdCBwYWdlIGZsaXAgd2FzIGhhbmRsZWQsIHBlbmRpbmcgZXZlbnQgd2lsbCBiZSBzZW50 Cj4gKwkJICogb24gZnJhbWUgZG9uZSBldmVudCBmcm9tIHRoZSBiYWNrZW5kLgo+ICsJCSAqLwo+ ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkaXNwbGF5X3ByZXBhcmVfZmIoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9w aXBlICpwaXBlLAo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7 Cj4gKwlyZXR1cm4gZHJtX2dlbV9mYl9wcmVwYXJlX2ZiKCZwaXBlLT5wbGFuZSwgcGxhbmVfc3Rh dGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRpc3BsYXlfY2hlY2soc3RydWN0IGRybV9zaW1w bGVfZGlzcGxheV9waXBlICpwaXBlLAo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlLAo+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiArewo+ICsJ c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gKwkJCXRvX3hl bl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwo+ICsJcmV0dXJuIHBpcGVsaW5lLT5jb25uX2Nvbm5l Y3RlZCA/IDAgOiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkaXNwbGF5X3VwZGF0 ZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gKwkJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lID0KPiArCQkJdG9feGVuX2RybV9waXBlbGluZShwaXBl KTsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZwaXBlLT5jcnRjOwo+ICsJc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7Cj4gKwo+ICsJZXZlbnQgPSBjcnRjLT5zdGF0 ZS0+ZXZlbnQ7Cj4gKwlpZiAoZXZlbnQpIHsKPiArCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2Owo+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCVdBUk5fT04ocGlw ZWxpbmUtPnBlbmRpbmdfZXZlbnQpOwo+ICsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5l dmVudF9sb2NrLCBmbGFncyk7Cj4gKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCj4g KwkJcGlwZWxpbmUtPnBlbmRpbmdfZXZlbnQgPSBldmVudDsKPiArCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCj4gKwl9Cj4gKwkvKgo+ICsJICog U2VuZCBwYWdlIGZsaXAgcmVxdWVzdCB0byB0aGUgYmFja2VuZCAqYWZ0ZXIqIHdlIGhhdmUgZXZl bnQgY2FjaGVkCj4gKwkgKiBhYm92ZSwgc28gb24gcGFnZSBmbGlwIGRvbmUgZXZlbnQgZnJvbSB0 aGUgYmFja2VuZCB3ZSBjYW4KPiArCSAqIGRlbGl2ZXIgaXQgYW5kIHRoZXJlIGlzIG5vIHJhY2Ug Y29uZGl0aW9uIGJldHdlZW4gdGhpcyBjb2RlIGFuZAo+ICsJICogZXZlbnQgZnJvbSB0aGUgYmFj a2VuZC4KPiArCSAqIElmIHRoaXMgaXMgbm90IGEgcGFnZSBmbGlwLCBlLmcuIG5vIGZsaXAgZG9u ZSBldmVudCBmcm9tIHRoZSBiYWNrZW5kCj4gKwkgKiBpcyBleHBlY3RlZCwgdGhlbiBzZW5kIG5v dy4KPiArCSAqLwo+ICsJaWYgKCFkaXNwbGF5X3NlbmRfcGFnZV9mbGlwKHBpcGUsIG9sZF9wbGFu ZV9zdGF0ZSkpCj4gKwkJeGVuX2RybV9mcm9udF9rbXNfc2VuZF9wZW5kaW5nX2V2ZW50KHBpcGVs aW5lKTsKClRoZSBjb250cm9sIGZsb3cgaGVyZSBpcyBhIGJpdCBjb25mdXNpbmcuIEknZCBwdXQg dGhlIGNhbGwgdG8gc2VuZCBvdXQgdGhlCmV2ZW50IHJpZ2h0IGF3YXkgaW4gY2FzZSBvZiBhIGZh aWx1cmUgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgYmFja2VuZCBpbnRvCmRpc3BsYXlfc2VuZF9w YWdlX2ZsaXAoKSBpdHNlbGYuIFRoZW4gZHJvcCB0aGUgYm9vbCByZXR1cm4gdmFsdWUgYW5kIG1h a2UKaXQgdm9pZCwgYW5kIGFsc28gcHVzaCB0aGUgY29tbWVudCBleHBsYWluaW5nIHdoYXQgeW91 IGRvIGluIGNhc2Ugb2YKZXJyb3JzIGludG8gdGhhdCBmdW5jdGlvbi4KClRoYXQgd2F5IHRoZSBl cnJvciBoYW5kbGluZyBhbmQgcmVjb3ZlcnkgaXMgYWxsIG5lYXRseSB0aWVkIHRvZ2V0aGVyIGlu Cm9uZSBwbGFjZSBpbnN0ZWFkIG9mIHNwcmVhZCBhcm91bmQuCgo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIGRpc3BsYXlfZnVuY3Mg PSB7Cj4gKwkuZW5hYmxlID0gZGlzcGxheV9lbmFibGUsCj4gKwkuZGlzYWJsZSA9IGRpc3BsYXlf ZGlzYWJsZSwKPiArCS5jaGVjayA9IGRpc3BsYXlfY2hlY2ssCj4gKwkucHJlcGFyZV9mYiA9IGRp c3BsYXlfcHJlcGFyZV9mYiwKPiArCS51cGRhdGUgPSBkaXNwbGF5X3VwZGF0ZSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgZGlzcGxheV9waXBlX2luaXQoc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJt X2luZm8gKmRybV9pbmZvLAo+ICsJCWludCBpbmRleCwgc3RydWN0IHhlbl9kcm1fZnJvbnRfY2Zn X2Nvbm5lY3RvciAqY2ZnLAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAq cGlwZWxpbmUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkcm1faW5mby0+ZHJt X2RldjsKPiArCWNvbnN0IHVpbnQzMl90ICpmb3JtYXRzOwo+ICsJaW50IGZvcm1hdF9jb3VudDsK PiArCWludCByZXQ7Cj4gKwo+ICsJcGlwZWxpbmUtPmRybV9pbmZvID0gZHJtX2luZm87Cj4gKwlw aXBlbGluZS0+aW5kZXggPSBpbmRleDsKPiArCXBpcGVsaW5lLT5oZWlnaHQgPSBjZmctPmhlaWdo dDsKPiArCXBpcGVsaW5lLT53aWR0aCA9IGNmZy0+d2lkdGg7Cj4gKwo+ICsJcmV0ID0geGVuX2Ry bV9mcm9udF9jb25uX2luaXQoZHJtX2luZm8sICZwaXBlbGluZS0+Y29ubik7Cj4gKwlpZiAocmV0 KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZm9ybWF0cyA9IHhlbl9kcm1fZnJvbnRfY29ubl9n ZXRfZm9ybWF0cygmZm9ybWF0X2NvdW50KTsKPiArCj4gKwlyZXR1cm4gZHJtX3NpbXBsZV9kaXNw bGF5X3BpcGVfaW5pdChkZXYsICZwaXBlbGluZS0+cGlwZSwKPiArCQkJJmRpc3BsYXlfZnVuY3Ms IGZvcm1hdHMsIGZvcm1hdF9jb3VudCwKPiArCQkJTlVMTCwgJnBpcGVsaW5lLT5jb25uKTsKPiAr fQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfa21zX2luaXQoc3RydWN0IHhlbl9kcm1fZnJvbnRf ZHJtX2luZm8gKmRybV9pbmZvKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHJt X2luZm8tPmRybV9kZXY7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19p bml0KGRldik7Cj4gKwo+ICsJZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSAwOwo+ICsJZGV2 LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMDsKPiArCWRldi0+bW9kZV9jb25maWcubWF4X3dp ZHRoID0gNDA5NTsKPiArCWRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDIwNDc7Cj4gKwlk ZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1vZGVfY29uZmlnX2Z1bmNzOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBkcm1faW5mby0+Y2ZnLT5udW1fY29ubmVjdG9yczsgaSsrKSB7Cj4gKwkJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfY2ZnX2Nvbm5lY3RvciAqY2ZnID0KPiArCQkJCSZkcm1faW5mby0+ Y2ZnLT5jb25uZWN0b3JzW2ldOwo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGlu ZSAqcGlwZWxpbmUgPQo+ICsJCQkJJmRybV9pbmZvLT5waXBlbGluZVtpXTsKPiArCj4gKwkJcmV0 ID0gZGlzcGxheV9waXBlX2luaXQoZHJtX2luZm8sIGksIGNmZywgcGlwZWxpbmUpOwo+ICsJCWlm IChyZXQpIHsKPiArCQkJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKPiArCQkJcmV0dXJu IHJldDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7Cj4g Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuaCBiL2RyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44ZGYyM2U3OTQyYWMKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oCj4gQEAgLTAsMCArMSwy NSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KPiAr Cj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoKPiArICogQ29w eXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiArICogQXV0aG9y OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5j b20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1hFTl9EUk1fRlJPTlRfS01TX0hfCj4gKyNkZWZp bmUgX19YRU5fRFJNX0ZST05UX0tNU19IXwo+ICsKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRf ZHJ2LmgiCj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9rbXNfaW5pdChzdHJ1Y3QgeGVuX2RybV9m cm9udF9kcm1faW5mbyAqZHJtX2luZm8pOwo+ICsKPiArdm9pZCB4ZW5fZHJtX2Zyb250X2ttc19v bl9mcmFtZV9kb25lKAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlw ZWxpbmUsCj4gKwkJdWludDY0X3QgZmJfY29va2llKTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9u dF9rbXNfc2VuZF9wZW5kaW5nX2V2ZW50KAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9w aXBlbGluZSAqcGlwZWxpbmUpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9LTVNf SF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3No YnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZmRlMmQ4Zjc3MDYKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVm LmMKPiBAQCAtMCwwICsxLDQzMiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UK PiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiAr ICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1 c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4g Kwo+ICsjaWYgZGVmaW5lZChDT05GSUdfWDg2KQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jYWNoZS5o Pgo+ICsjZW5kaWYKPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9tbS5oPgo+ICsKPiArI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgo+ICsjaW5jbHVk ZSA8eGVuL2JhbGxvb24uaD4KPiArI2luY2x1ZGUgPHhlbi94ZW4uaD4KPiArI2luY2x1ZGUgPHhl bi94ZW5idXMuaD4KPiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vcmluZy5oPgo+ICsjaW5j bHVkZSA8eGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGVuX2Ry bV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9zaGJ1Zi5oIgo+ICsKPiArc3Ry dWN0IHhlbl9kcm1fZnJvbnRfc2hidWZfb3BzIHsKPiArCS8qCj4gKwkgKiBDYWxjdWxhdGUgbnVt YmVyIG9mIGdyZWZzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGlzIGJ1ZmZlciwKPiArCSAqIGUuZy4g aWYgZ3JlZnMgYXJlIHJlcXVpcmVkIGZvciBwYWdlIGRpcmVjdG9yeSBvbmx5IG9yIHRoZSBidWZm ZXIKPiArCSAqIHBhZ2VzIGFzIHdlbGwuCj4gKwkgKi8KPiArCXZvaWQgKCpjYWxjX251bV9ncmVm cykoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4gKwkvKiBGaWxsIHBhZ2UgZGly ZWN0b3J5IGFjY29yZGluZyB0byBwYXJhLXZpcnR1YWwgZGlzcGxheSBwcm90b2NvbC4gKi8KPiAr CXZvaWQgKCpmaWxsX3BhZ2VfZGlyKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsK PiArCS8qIENsYWltIGdyYW50IHJlZmVyZW5jZXMgZm9yIHRoZSBwYWdlcyBvZiB0aGUgYnVmZmVy LiAqLwo+ICsJaW50ICgqZ3JhbnRfcmVmc19mb3JfYnVmZmVyKShzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiAqYnVmLAo+ICsJCQlncmFudF9yZWZfdCAqcHJpdl9ncmVmX2hlYWQsIGludCBncmVm X2lkeCk7Cj4gKwkvKiBNYXAgZ3JhbnQgcmVmZXJlbmNlcyBvZiB0aGUgYnVmZmVyLiAqLwo+ICsJ aW50ICgqbWFwKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiArCS8qIFVubWFw IGdyYW50IHJlZmVyZW5jZXMgb2YgdGhlIGJ1ZmZlci4gKi8KPiArCWludCAoKnVubWFwKShzdHJ1 Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiArfTsKPiArCj4gK2dyYW50X3JlZl90IHhl bl9kcm1fZnJvbnRfc2hidWZfZ2V0X2Rpcl9zdGFydChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1 ZiAqYnVmKQo+ICt7Cj4gKwlpZiAoIWJ1Zi0+Z3JlZnMpCj4gKwkJcmV0dXJuIEdSQU5UX0lOVkFM SURfUkVGOwo+ICsKPiArCXJldHVybiBidWYtPmdyZWZzWzBdOwo+ICt9Cj4gKwo+ICtpbnQgeGVu X2RybV9mcm9udF9zaGJ1Zl9tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPiAr ewo+ICsJaWYgKGJ1Zi0+b3BzLT5tYXApCj4gKwkJcmV0dXJuIGJ1Zi0+b3BzLT5tYXAoYnVmKTsK PiArCj4gKwkvKiBubyBuZWVkIHRvIG1hcCBvd24gZ3JhbnQgcmVmZXJlbmNlcyAqLwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X3NoYnVmX3VubWFwKHN0cnVjdCB4 ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4gK3sKPiArCWlmIChidWYtPm9wcy0+dW5tYXApCj4g KwkJcmV0dXJuIGJ1Zi0+b3BzLT51bm1hcChidWYpOwo+ICsKPiArCS8qIG5vIG5lZWQgdG8gdW5t YXAgb3duIGdyYW50IHJlZmVyZW5jZXMgKi8KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lk IHhlbl9kcm1fZnJvbnRfc2hidWZfZmx1c2goc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1 ZikKPiArewo+ICsjaWYgZGVmaW5lZChDT05GSUdfWDg2KQo+ICsJZHJtX2NsZmx1c2hfcGFnZXMo YnVmLT5wYWdlcywgYnVmLT5udW1fcGFnZXMpOwo+ICsjZW5kaWYKPiArfQo+ICsKPiArdm9pZCB4 ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikK PiArewo+ICsJaWYgKGJ1Zi0+Z3JlZnMpIHsKPiArCQlpbnQgaTsKPiArCj4gKwkJZm9yIChpID0g MDsgaSA8IGJ1Zi0+bnVtX2dyZWZzOyBpKyspCj4gKwkJCWlmIChidWYtPmdyZWZzW2ldICE9IEdS QU5UX0lOVkFMSURfUkVGKQo+ICsJCQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2VzcyhidWYtPmdy ZWZzW2ldLAo+ICsJCQkJCTAsIDBVTCk7Cj4gKwl9Cj4gKwlrZnJlZShidWYtPmdyZWZzKTsKPiAr CWtmcmVlKGJ1Zi0+ZGlyZWN0b3J5KTsKPiArCWlmIChidWYtPnNndCkgewo+ICsJCXNnX2ZyZWVf dGFibGUoYnVmLT5zZ3QpOwo+ICsJCWt2ZnJlZShidWYtPnBhZ2VzKTsKPiArCX0KPiArCWtmcmVl KGJ1Zik7Cj4gK30KPiArCj4gKy8qCj4gKyAqIG51bWJlciBvZiBncmVmcyBhIHBhZ2UgY2FuIGhv bGQgd2l0aCByZXNwZWN0IHRvIHRoZQo+ICsgKiBzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3Rv cnkgaGVhZGVyCj4gKyAqLwo+ICsjZGVmaW5lIFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFICgo UEFHRV9TSVpFIC0gXAo+ICsJb2Zmc2V0b2Yoc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5 LCBncmVmKSkgLyBcCj4gKwlzaXplb2YoZ3JhbnRfcmVmX3QpKQo+ICsKPiArc3RhdGljIGludCBn ZXRfbnVtX3BhZ2VzX2RpcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ICt7Cj4g KwkvKiBudW1iZXIgb2YgcGFnZXMgdGhlIHBhZ2UgZGlyZWN0b3J5IGNvbnN1bWVzIGl0c2VsZiAq Lwo+ICsJcmV0dXJuIERJVl9ST1VORF9VUChidWYtPm51bV9wYWdlcywgWEVOX0RSTV9OVU1fR1JF RlNfUEVSX1BBR0UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBiYWNrZW5kX2NhbGNfbnVtX2dy ZWZzKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4gK3sKPiArCS8qIG9ubHkgZm9y IHBhZ2VzIHRoZSBwYWdlIGRpcmVjdG9yeSBjb25zdW1lcyBpdHNlbGYgKi8KPiArCWJ1Zi0+bnVt X2dyZWZzID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Z3Vlc3RfY2FsY19udW1fZ3JlZnMoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPiAr ewo+ICsJLyoKPiArCSAqIG51bWJlciBvZiBwYWdlcyB0aGUgcGFnZSBkaXJlY3RvcnkgY29uc3Vt ZXMgaXRzZWxmCj4gKwkgKiBwbHVzIGdyZWZzIGZvciB0aGUgYnVmZmVyIHBhZ2VzCj4gKwkgKi8K PiArCWJ1Zi0+bnVtX2dyZWZzID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKSArIGJ1Zi0+bnVtX3Bh Z2VzOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIHhlbl9wYWdlX3RvX3ZhZGRyKHBhZ2UpIFwKPiArCQko KHBoeXNfYWRkcl90KXBmbl90b19rYWRkcihwYWdlX3RvX3hlbl9wZm4ocGFnZSkpKQo+ICsKPiAr c3RhdGljIGludCBiYWNrZW5kX3VubWFwKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYp Cj4gK3sKPiArCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHM7Cj4gKwlp bnQgaSwgcmV0Owo+ICsKPiArCWlmICghYnVmLT5wYWdlcyB8fCAhYnVmLT5iYWNrZW5kX21hcF9o YW5kbGVzIHx8ICFidWYtPmdyZWZzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXVubWFwX29wcyA9 IGtjYWxsb2MoYnVmLT5udW1fcGFnZXMsIHNpemVvZigqdW5tYXBfb3BzKSwKPiArCQlHRlBfS0VS TkVMKTsKPiArCWlmICghdW5tYXBfb3BzKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0 IG1lbW9yeSB3aGlsZSB1bm1hcHBpbmdcbiIpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9wYWdlczsgaSsrKSB7Cj4gKwkJcGh5c19h ZGRyX3QgYWRkcjsKPiArCj4gKwkJYWRkciA9IHhlbl9wYWdlX3RvX3ZhZGRyKGJ1Zi0+cGFnZXNb aV0pOwo+ICsJCWdudHRhYl9zZXRfdW5tYXBfb3AoJnVubWFwX29wc1tpXSwgYWRkciwgR05UTUFQ X2hvc3RfbWFwLAo+ICsJCQkJYnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzW2ldKTsKPiArCX0KPiAr Cj4gKwlyZXQgPSBnbnR0YWJfdW5tYXBfcmVmcyh1bm1hcF9vcHMsIE5VTEwsIGJ1Zi0+cGFnZXMs Cj4gKwkJCWJ1Zi0+bnVtX3BhZ2VzKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5udW1f cGFnZXM7IGkrKykgewo+ICsJCWlmICh1bmxpa2VseSh1bm1hcF9vcHNbaV0uc3RhdHVzICE9IEdO VFNUX29rYXkpKQo+ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0byB1bm1hcCBwYWdlICVkOiAlZFxu IiwKPiArCQkJCQlpLCB1bm1hcF9vcHNbaV0uc3RhdHVzKTsKPiArCX0KPiArCj4gKwlpZiAocmV0 KQo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIHVubWFwIGdyYW50IHJlZmVyZW5jZXMsIHJldCAl ZCIsIHJldCk7Cj4gKwo+ICsJa2ZyZWUodW5tYXBfb3BzKTsKPiArCWtmcmVlKGJ1Zi0+YmFja2Vu ZF9tYXBfaGFuZGxlcyk7Cj4gKwlidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXMgPSBOVUxMOwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiYWNrZW5kX21hcChzdHJ1Y3QgeGVu X2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9y ZWYgKm1hcF9vcHMgPSBOVUxMOwo+ICsJdW5zaWduZWQgY2hhciAqcHRyOwo+ICsJaW50IHJldCwg Y3VyX2dyZWYsIGN1cl9kaXJfcGFnZSwgY3VyX3BhZ2UsIGdyZWZzX2xlZnQ7Cj4gKwo+ICsJbWFw X29wcyA9IGtjYWxsb2MoYnVmLT5udW1fcGFnZXMsIHNpemVvZigqbWFwX29wcyksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFtYXBfb3BzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWJ1Zi0+ YmFja2VuZF9tYXBfaGFuZGxlcyA9IGtjYWxsb2MoYnVmLT5udW1fcGFnZXMsCj4gKwkJCXNpemVv ZigqYnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWJ1Zi0+ YmFja2VuZF9tYXBfaGFuZGxlcykgewo+ICsJCWtmcmVlKG1hcF9vcHMpOwo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiByZWFkIHBhZ2UgZGlyZWN0b3J5IHRvIGdl dCBncmVmcyBmcm9tIHRoZSBiYWNrZW5kOiBmb3IgZXh0ZXJuYWwKPiArCSAqIGJ1ZmZlciB3ZSBv bmx5IGFsbG9jYXRlIGJ1Zi0+Z3JlZnMgZm9yIHRoZSBwYWdlIGRpcmVjdG9yeSwKPiArCSAqIHNv IGJ1Zi0+bnVtX2dyZWZzIGhhcyBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHBhZ2UgZGlyZWN0b3J5 IGl0c2VsZgo+ICsJICovCj4gKwlwdHIgPSBidWYtPmRpcmVjdG9yeTsKPiArCWdyZWZzX2xlZnQg PSBidWYtPm51bV9wYWdlczsKPiArCWN1cl9wYWdlID0gMDsKPiArCWZvciAoY3VyX2Rpcl9wYWdl ID0gMDsgY3VyX2Rpcl9wYWdlIDwgYnVmLT5udW1fZ3JlZnM7IGN1cl9kaXJfcGFnZSsrKSB7Cj4g KwkJc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICpwYWdlX2RpciA9Cj4gKwkJCQkoc3Ry dWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwo+ICsJCWludCB0b19jb3B5ID0gWEVO X0RSTV9OVU1fR1JFRlNfUEVSX1BBR0U7Cj4gKwo+ICsJCWlmICh0b19jb3B5ID4gZ3JlZnNfbGVm dCkKPiArCQkJdG9fY29weSA9IGdyZWZzX2xlZnQ7Cj4gKwo+ICsJCWZvciAoY3VyX2dyZWYgPSAw OyBjdXJfZ3JlZiA8IHRvX2NvcHk7IGN1cl9ncmVmKyspIHsKPiArCQkJcGh5c19hZGRyX3QgYWRk cjsKPiArCj4gKwkJCWFkZHIgPSB4ZW5fcGFnZV90b192YWRkcihidWYtPnBhZ2VzW2N1cl9wYWdl XSk7Cj4gKwkJCWdudHRhYl9zZXRfbWFwX29wKCZtYXBfb3BzW2N1cl9wYWdlXSwgYWRkciwKPiAr CQkJCQlHTlRNQVBfaG9zdF9tYXAsCj4gKwkJCQkJcGFnZV9kaXItPmdyZWZbY3VyX2dyZWZdLAo+ ICsJCQkJCWJ1Zi0+eGJfZGV2LT5vdGhlcmVuZF9pZCk7Cj4gKwkJCWN1cl9wYWdlKys7Cj4gKwkJ fQo+ICsKPiArCQlncmVmc19sZWZ0IC09IHRvX2NvcHk7Cj4gKwkJcHRyICs9IFBBR0VfU0laRTsK PiArCX0KPiArCXJldCA9IGdudHRhYl9tYXBfcmVmcyhtYXBfb3BzLCBOVUxMLCBidWYtPnBhZ2Vz LCBidWYtPm51bV9wYWdlcyk7Cj4gKwo+ICsJLyogc2F2ZSBoYW5kbGVzIGV2ZW4gaWYgZXJyb3Is IHNvIHdlIGNhbiB1bm1hcCAqLwo+ICsJZm9yIChjdXJfcGFnZSA9IDA7IGN1cl9wYWdlIDwgYnVm LT5udW1fcGFnZXM7IGN1cl9wYWdlKyspIHsKPiArCQlidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXNb Y3VyX3BhZ2VdID0gbWFwX29wc1tjdXJfcGFnZV0uaGFuZGxlOwo+ICsJCWlmICh1bmxpa2VseSht YXBfb3BzW2N1cl9wYWdlXS5zdGF0dXMgIT0gR05UU1Rfb2theSkpCj4gKwkJCURSTV9FUlJPUigi RmFpbGVkIHRvIG1hcCBwYWdlICVkOiAlZFxuIiwKPiArCQkJCQljdXJfcGFnZSwgbWFwX29wc1tj dXJfcGFnZV0uc3RhdHVzKTsKPiArCX0KPiArCj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9S KCJGYWlsZWQgdG8gbWFwIGdyYW50IHJlZmVyZW5jZXMsIHJldCAlZCIsIHJldCk7Cj4gKwkJYmFj a2VuZF91bm1hcChidWYpOwo+ICsJfQo+ICsKPiArCWtmcmVlKG1hcF9vcHMpOwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYmFja2VuZF9maWxsX3BhZ2VfZGlyKHN0cnVj dCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4gK3sKPiArCXN0cnVjdCB4ZW5kaXNwbF9wYWdl X2RpcmVjdG9yeSAqcGFnZV9kaXI7Cj4gKwl1bnNpZ25lZCBjaGFyICpwdHI7Cj4gKwlpbnQgaSwg bnVtX3BhZ2VzX2RpcjsKPiArCj4gKwlwdHIgPSBidWYtPmRpcmVjdG9yeTsKPiArCW51bV9wYWdl c19kaXIgPSBnZXRfbnVtX3BhZ2VzX2RpcihidWYpOwo+ICsKPiArCS8qIGZpbGwgb25seSBncmVm cyBmb3IgdGhlIHBhZ2UgZGlyZWN0b3J5IGl0c2VsZiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IG51 bV9wYWdlc19kaXIgLSAxOyBpKyspIHsKPiArCQlwYWdlX2RpciA9IChzdHJ1Y3QgeGVuZGlzcGxf cGFnZV9kaXJlY3RvcnkgKilwdHI7Cj4gKwo+ICsJCXBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3Bh Z2UgPSBidWYtPmdyZWZzW2kgKyAxXTsKPiArCQlwdHIgKz0gUEFHRV9TSVpFOwo+ICsJfQo+ICsJ LyogbGFzdCBwYWdlIG11c3Qgc2F5IHRoZXJlIGlzIG5vIG1vcmUgcGFnZXMgKi8KPiArCXBhZ2Vf ZGlyID0gKHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSAqKXB0cjsKPiArCXBhZ2VfZGly LT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBHUkFOVF9JTlZBTElEX1JFRjsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgZ3Vlc3RfZmlsbF9wYWdlX2RpcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAq YnVmKQo+ICt7Cj4gKwl1bnNpZ25lZCBjaGFyICpwdHI7Cj4gKwlpbnQgY3VyX2dyZWYsIGdyZWZz X2xlZnQsIHRvX2NvcHksIGksIG51bV9wYWdlc19kaXI7Cj4gKwo+ICsJcHRyID0gYnVmLT5kaXJl Y3Rvcnk7Cj4gKwludW1fcGFnZXNfZGlyID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKTsKPiArCj4g KwkvKgo+ICsJICogd2hpbGUgY29weWluZywgc2tpcCBncmVmcyBhdCBzdGFydCwgdGhleSBhcmUg Zm9yIHBhZ2VzCj4gKwkgKiBncmFudGVkIGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgaXRzZWxmCj4g KwkgKi8KPiArCWN1cl9ncmVmID0gbnVtX3BhZ2VzX2RpcjsKPiArCWdyZWZzX2xlZnQgPSBidWYt Pm51bV9wYWdlczsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXNfZGlyOyBpKyspIHsKPiAr CQlzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgKnBhZ2VfZGlyID0KPiArCQkJCShzdHJ1 Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgKilwdHI7Cj4gKwo+ICsJCWlmIChncmVmc19sZWZ0 IDw9IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFKSB7Cj4gKwkJCXRvX2NvcHkgPSBncmVmc19s ZWZ0Owo+ICsJCQlwYWdlX2Rpci0+Z3JlZl9kaXJfbmV4dF9wYWdlID0gR1JBTlRfSU5WQUxJRF9S RUY7Cj4gKwkJfSBlbHNlIHsKPiArCQkJdG9fY29weSA9IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9Q QUdFOwo+ICsJCQlwYWdlX2Rpci0+Z3JlZl9kaXJfbmV4dF9wYWdlID0gYnVmLT5ncmVmc1tpICsg MV07Cj4gKwkJfQo+ICsJCW1lbWNweSgmcGFnZV9kaXItPmdyZWYsICZidWYtPmdyZWZzW2N1cl9n cmVmXSwKPiArCQkJCXRvX2NvcHkgKiBzaXplb2YoZ3JhbnRfcmVmX3QpKTsKPiArCQlwdHIgKz0g UEFHRV9TSVpFOwo+ICsJCWdyZWZzX2xlZnQgLT0gdG9fY29weTsKPiArCQljdXJfZ3JlZiArPSB0 b19jb3B5Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGd1ZXN0X2dyYW50X3JlZnNfZm9y X2J1ZmZlcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmLAo+ICsJCWdyYW50X3JlZl90 ICpwcml2X2dyZWZfaGVhZCwgaW50IGdyZWZfaWR4KQo+ICt7Cj4gKwlpbnQgaSwgY3VyX3JlZiwg b3RoZXJlbmRfaWQ7Cj4gKwo+ICsJb3RoZXJlbmRfaWQgPSBidWYtPnhiX2Rldi0+b3RoZXJlbmRf aWQ7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5udW1fcGFnZXM7IGkrKykgewo+ICsJCWN1cl9y ZWYgPSBnbnR0YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKHByaXZfZ3JlZl9oZWFkKTsKPiArCQlp ZiAoY3VyX3JlZiA8IDApCj4gKwkJCXJldHVybiBjdXJfcmVmOwo+ICsJCWdudHRhYl9ncmFudF9m b3JlaWduX2FjY2Vzc19yZWYoY3VyX3JlZiwgb3RoZXJlbmRfaWQsCj4gKwkJCQl4ZW5fcGFnZV90 b19nZm4oYnVmLT5wYWdlc1tpXSksIDApOwo+ICsJCWJ1Zi0+Z3JlZnNbZ3JlZl9pZHgrK10gPSBj dXJfcmVmOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ3JhbnRf cmVmZXJlbmNlcyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ICt7Cj4gKwlncmFu dF9yZWZfdCBwcml2X2dyZWZfaGVhZDsKPiArCWludCByZXQsIGksIGosIGN1cl9yZWY7Cj4gKwlp bnQgb3RoZXJlbmRfaWQsIG51bV9wYWdlc19kaXI7Cj4gKwo+ICsJcmV0ID0gZ250dGFiX2FsbG9j X2dyYW50X3JlZmVyZW5jZXMoYnVmLT5udW1fZ3JlZnMsICZwcml2X2dyZWZfaGVhZCk7Cj4gKwlp ZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiQ2Fubm90IGFsbG9jYXRlIGdyYW50IHJlZmVy ZW5jZXNcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlvdGhlcmVuZF9pZCA9IGJ1Zi0+ eGJfZGV2LT5vdGhlcmVuZF9pZDsKPiArCWogPSAwOwo+ICsJbnVtX3BhZ2VzX2RpciA9IGdldF9u dW1fcGFnZXNfZGlyKGJ1Zik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzX2RpcjsgaSsr KSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBmcmFtZTsKPiArCj4gKwkJY3VyX3JlZiA9IGdudHRhYl9j bGFpbV9ncmFudF9yZWZlcmVuY2UoJnByaXZfZ3JlZl9oZWFkKTsKPiArCQlpZiAoY3VyX3JlZiA8 IDApCj4gKwkJCXJldHVybiBjdXJfcmVmOwo+ICsKPiArCQlmcmFtZSA9IHhlbl9wYWdlX3RvX2dm bih2aXJ0X3RvX3BhZ2UoYnVmLT5kaXJlY3RvcnkgKwo+ICsJCQkJUEFHRV9TSVpFICogaSkpOwo+ ICsJCWdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoY3VyX3JlZiwgb3RoZXJlbmRfaWQs Cj4gKwkJCQlmcmFtZSwgMCk7Cj4gKwkJYnVmLT5ncmVmc1tqKytdID0gY3VyX3JlZjsKPiArCX0K PiArCj4gKwlpZiAoYnVmLT5vcHMtPmdyYW50X3JlZnNfZm9yX2J1ZmZlcikgewo+ICsJCXJldCA9 IGJ1Zi0+b3BzLT5ncmFudF9yZWZzX2Zvcl9idWZmZXIoYnVmLCAmcHJpdl9ncmVmX2hlYWQsIGop Owo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZ250dGFiX2Zy ZWVfZ3JhbnRfcmVmZXJlbmNlcyhwcml2X2dyZWZfaGVhZCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBhbGxvY19zdG9yYWdlKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVm ICpidWYpCj4gK3sKPiArCWlmIChidWYtPnNndCkgewo+ICsJCWJ1Zi0+cGFnZXMgPSBrdm1hbGxv Y19hcnJheShidWYtPm51bV9wYWdlcywKPiArCQkJCXNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQ X0tFUk5FTCk7Cj4gKwkJaWYgKCFidWYtPnBhZ2VzKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwkJaWYgKGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKGJ1Zi0+c2d0LCBidWYt PnBhZ2VzLAo+ICsJCQkJTlVMTCwgYnVmLT5udW1fcGFnZXMpIDwgMCkKPiArCQkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJYnVmLT5ncmVmcyA9IGtjYWxsb2MoYnVmLT5udW1fZ3JlZnMs IHNpemVvZigqYnVmLT5ncmVmcyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYtPmdyZWZzKQo+ ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWJ1Zi0+ZGlyZWN0b3J5ID0ga2NhbGxvYyhnZXRf bnVtX3BhZ2VzX2RpcihidWYpLCBQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYt PmRpcmVjdG9yeSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArLyoKPiArICogRm9yIGJlIGFsbG9jYXRlZCBidWZmZXJzIHdlIGRvbid0IG5lZWQgZ3Jh bnRfcmVmc19mb3JfYnVmZmVyIGFzIHRob3NlCj4gKyAqIGdyYW50IHJlZmVyZW5jZXMgYXJlIGFs bG9jYXRlZCBhdCBiYWNrZW5kIHNpZGUKPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVu X2RybV9mcm9udF9zaGJ1Zl9vcHMgYmFja2VuZF9vcHMgPSB7Cj4gKwkuY2FsY19udW1fZ3JlZnMg PSBiYWNrZW5kX2NhbGNfbnVtX2dyZWZzLAo+ICsJLmZpbGxfcGFnZV9kaXIgPSBiYWNrZW5kX2Zp bGxfcGFnZV9kaXIsCj4gKwkubWFwID0gYmFja2VuZF9tYXAsCj4gKwkudW5tYXAgPSBiYWNrZW5k X3VubWFwCj4gK307Cj4gKwo+ICsvKiBGb3IgbG9jYWxseSBncmFudGVkIHJlZmVyZW5jZXMgd2Ug ZG8gbm90IG5lZWQgdG8gbWFwL3VubWFwIHRoZSByZWZlcmVuY2VzICovCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9vcHMgbG9jYWxfb3BzID0gewo+ICsJLmNhbGNf bnVtX2dyZWZzID0gZ3Vlc3RfY2FsY19udW1fZ3JlZnMsCj4gKwkuZmlsbF9wYWdlX2RpciA9IGd1 ZXN0X2ZpbGxfcGFnZV9kaXIsCj4gKwkuZ3JhbnRfcmVmc19mb3JfYnVmZmVyID0gZ3Vlc3RfZ3Jh bnRfcmVmc19mb3JfYnVmZmVyLAo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hi dWYgKnhlbl9kcm1fZnJvbnRfc2hidWZfYWxsb2MoCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRf c2hidWZfY2ZnICpjZmcpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWY7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIGVpdGhlciBwYWdlcyBvciBzZ3QsIG5vdCBib3RoICov Cj4gKwlpZiAodW5saWtlbHkoY2ZnLT5wYWdlcyAmJiBjZmctPnNndCkpIHsKPiArCQlEUk1fRVJS T1IoIkNhbm5vdCBoYW5kbGUgYnVmZmVyIGFsbG9jYXRpb24gd2l0aCBib3RoIHBhZ2VzIGFuZCBz ZyB0YWJsZSBwcm92aWRlZFxuIik7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJYnVm ID0ga3phbGxvYyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYpCj4gKwkJ cmV0dXJuIE5VTEw7Cj4gKwo+ICsJaWYgKGNmZy0+YmVfYWxsb2MpCj4gKwkJYnVmLT5vcHMgPSAm YmFja2VuZF9vcHM7Cj4gKwllbHNlCj4gKwkJYnVmLT5vcHMgPSAmbG9jYWxfb3BzOwo+ICsKPiAr CWJ1Zi0+eGJfZGV2ID0gY2ZnLT54Yl9kZXY7Cj4gKwlidWYtPm51bV9wYWdlcyA9IERJVl9ST1VO RF9VUChjZmctPnNpemUsIFBBR0VfU0laRSk7Cj4gKwlidWYtPnNndCA9IGNmZy0+c2d0Owo+ICsJ YnVmLT5wYWdlcyA9IGNmZy0+cGFnZXM7Cj4gKwo+ICsJYnVmLT5vcHMtPmNhbGNfbnVtX2dyZWZz KGJ1Zik7Cj4gKwo+ICsJcmV0ID0gYWxsb2Nfc3RvcmFnZShidWYpOwo+ICsJaWYgKHJldCkKPiAr CQlnb3RvIGZhaWw7Cj4gKwo+ICsJcmV0ID0gZ3JhbnRfcmVmZXJlbmNlcyhidWYpOwo+ICsJaWYg KHJldCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJYnVmLT5vcHMtPmZpbGxfcGFnZV9kaXIoYnVm KTsKPiArCj4gKwlyZXR1cm4gYnVmOwo+ICsKPiArZmFpbDoKPiArCXhlbl9kcm1fZnJvbnRfc2hi dWZfZnJlZShidWYpOwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaCBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLjZjNGZiYzY4ZjMyOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaAo+IEBAIC0wLDAgKzEsNzIg QEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ ICsvKgo+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHly aWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjog T2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29t Pgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19YRU5fRFJNX0ZST05UX1NIQlVGX0hfCj4gKyNkZWZp bmUgX19YRU5fRFJNX0ZST05UX1NIQlVGX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgo+ICsKPiArI2luY2x1ZGUgPHhl bi9ncmFudF90YWJsZS5oPgo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgewo+ICsJ LyoKPiArCSAqIG51bWJlciBvZiByZWZlcmVuY2VzIGdyYW50ZWQgZm9yIHRoZSBiYWNrZW5kIHVz ZToKPiArCSAqICAtIGZvciBhbGxvY2F0ZWQvaW1wb3J0ZWQgZG1hLWJ1ZidzIHRoaXMgaG9sZHMg bnVtYmVyIG9mIGdyYW50Cj4gKwkgKiAgICByZWZlcmVuY2VzIGZvciB0aGUgcGFnZSBkaXJlY3Rv cnkgYW5kIHBhZ2VzIG9mIHRoZSBidWZmZXIKPiArCSAqICAtIGZvciB0aGUgYnVmZmVyIHByb3Zp ZGVkIGJ5IHRoZSBiYWNrZW5kIHRoaXMgaG9sZHMgbnVtYmVyIG9mCj4gKwkgKiAgICBncmFudCBy ZWZlcmVuY2VzIGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgYXMgZ3JhbnQgcmVmZXJlbmNlcyBmb3IK PiArCSAqICAgIHRoZSBidWZmZXIgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZAo+ICsJ ICovCj4gKwlpbnQgbnVtX2dyZWZzOwo+ICsJZ3JhbnRfcmVmX3QgKmdyZWZzOwo+ICsJdW5zaWdu ZWQgY2hhciAqZGlyZWN0b3J5Owo+ICsKPiArCS8qCj4gKwkgKiB0aGVyZSBhcmUgMiB3YXlzIHRv IHByb3ZpZGUgYmFja2luZyBzdG9yYWdlIGZvciB0aGlzIHNoYXJlZCBidWZmZXI6Cj4gKwkgKiBl aXRoZXIgcGFnZXMgb3Igc2d0LiBpZiBidWZmZXIgY3JlYXRlZCBmcm9tIHNndCB0aGVuIHdlIG93 bgo+ICsJICogdGhlIHBhZ2VzIGFuZCBtdXN0IGZyZWUgdGhvc2Ugb3Vyc2VsdmVzIG9uIGNsb3N1 cmUKPiArCSAqLwo+ICsJaW50IG51bV9wYWdlczsKPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4g Kwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2Ug KnhiX2RldjsKPiArCj4gKwkvKiB0aGVzZSBhcmUgdGhlIG9wcyB1c2VkIGludGVybmFsbHkgZGVw ZW5kaW5nIG9uIGJlX2FsbG9jIG1vZGUgKi8KPiArCWNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250 X3NoYnVmX29wcyAqb3BzOwo+ICsKPiArCS8qIFhlbiBtYXAgaGFuZGxlcyBmb3IgdGhlIGJ1ZmZl ciBhbGxvY2F0ZWQgYnkgdGhlIGJhY2tlbmQgKi8KPiArCWdyYW50X2hhbmRsZV90ICpiYWNrZW5k X21hcF9oYW5kbGVzOwo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWZfY2Zn IHsKPiArCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXY7Cj4gKwlzaXplX3Qgc2l6ZTsKPiAr CXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiArCWJvb2wg YmVfYWxsb2M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqeGVuX2Ry bV9mcm9udF9zaGJ1Zl9hbGxvYygKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9jZmcg KmNmZyk7Cj4gKwo+ICtncmFudF9yZWZfdCB4ZW5fZHJtX2Zyb250X3NoYnVmX2dldF9kaXJfc3Rh cnQoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4gKwo+ICtpbnQgeGVuX2RybV9m cm9udF9zaGJ1Zl9tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4gKwo+ICtp bnQgeGVuX2RybV9mcm9udF9zaGJ1Zl91bm1hcChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAq YnVmKTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mbHVzaChzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVl KHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVO X0RSTV9GUk9OVF9TSEJVRl9IXyAqLwo+IC0tIAo+IDIuNy40Cj4gCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0 Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpT b2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==