From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1AA8DC433DB for ; Wed, 13 Jan 2021 17:01:57 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A12AA2339D for ; Wed, 13 Jan 2021 17:01:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A12AA2339D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 27A646EB52; Wed, 13 Jan 2021 17:01:56 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 89FDA6EB51 for ; Wed, 13 Jan 2021 17:01:54 +0000 (UTC) IronPort-SDR: JX87V59b3POTeG/D1x6LEtz9QHgOqp0FtPpu1xoNvNsp6n46ewrqZg5sut00L+hlJL+aTynhGf QKYSPsfkN84A== X-IronPort-AV: E=McAfee;i="6000,8403,9863"; a="263024914" X-IronPort-AV: E=Sophos;i="5.79,344,1602572400"; d="scan'208";a="263024914" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2021 09:01:51 -0800 IronPort-SDR: FOJq/InzRkHRxsZeo7cSEoJsC3zkI7Pm8WOcuaQHkSQXC1j2f2ryNQyYkKeMArHniBKCgAtyUh pCXeZTLRX2WQ== X-IronPort-AV: E=Sophos;i="5.79,344,1602572400"; d="scan'208";a="499325399" Received: from unknown (HELO intel.com) ([10.223.74.179]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2021 09:01:48 -0800 Date: Wed, 13 Jan 2021 22:17:17 +0530 From: Anshuman Gupta To: Jani Nikula Message-ID: <20210113164714.GS11717@intel.com> References: <14cc59d5734432ad976cd49ff8efce8fa413e5b2.1610127741.git.jani.nikula@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <14cc59d5734432ad976cd49ff8efce8fa413e5b2.1610127741.git.jani.nikula@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [Intel-gfx] [PATCH v2 01/17] drm/i915/pps: abstract panel power sequencer from intel_dp.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gMjAyMS0wMS0wOCBhdCAxOTo0NDowOSArMDIwMCwgSmFuaSBOaWt1bGEgd3JvdGU6Cj4gSW4g YSBsb25nIG92ZXJkdWUgcmVmYWN0b3JpbmcsIHNwbGl0IG91dCBhbGwgcGFuZWwgc2VxdWVuY2Vy IGNvZGUgZnJvbQo+IGludGVsX2RwLmMgdG8gbmV3IGludGVsX3Bwcy5bY2hdLgo+IAo+IFRoZSBm aXJzdCBwYXJ0IGlzIG1vc3RseSBqdXN0IGNvZGUgbW92ZW1lbnQgYXMtaXMsIHdpdGhvdXQgY2xl YW51cHMgb3IKPiBmdW5jdGlvbmFsIGNoYW5nZXMuCj4gCj4gV2UgbmVlZCB0byBhZGQgYSB2bHZf Z2V0X2RwbGwoKSBoZWxwZXIgdG8gZ2V0IGF0IHRoZSB2bHYvY2h2IGRwbGwgZnJvbQo+IHBwcyBj b2RlLgo+IAo+IHYyOiBSZWJhc2UuCj4gCj4gU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGph bmkubmlrdWxhQGludGVsLmNvbT4KTG9va3MgR29vZCB0byBtZS4KUmV2aWV3ZWQtYnk6IEFuc2h1 bWFuIEd1cHRhIDxhbnNodW1hbi5ndXB0YUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jICAgICAgfCAgICAxICsKPiAgLi4uL2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jICAgIHwgICAgMiArLQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgICAgICAgfCAxNDM2ICstLS0tLS0tLS0t LS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaCAgICAgICB8 ICAgIDUgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYyAgICAg IHwgMTMzNCArKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9wcHMuaCAgICAgIHwgICA1MyArCj4gIDcgZmlsZXMgY2hhbmdlZCwgMTQ0MyBpbnNlcnRp b25zKCspLCAxMzg5IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuaAo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCj4gaW5kZXggNDA3NGQ4Y2IwZDZlLi44YTA0NDAzYTExYmIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQo+IEBAIC0yNTEsNiArMjUxLDcgQEAgaTkxNS15ICs9IFwKPiAgCWRpc3BsYXkvaW50 ZWxfbHNwY29uLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9sdmRzLm8gXAo+ICAJZGlzcGxheS9pbnRl bF9wYW5lbC5vIFwKPiArCWRpc3BsYXkvaW50ZWxfcHBzLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9z ZHZvLm8gXAo+ICAJZGlzcGxheS9pbnRlbF90di5vIFwKPiAgCWRpc3BsYXkvaW50ZWxfdmRzYy5v IFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKPiBpbmRleCAzZGY2 OTEzMzY5YmMuLmYwOWE1OTdiZjczMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2RkaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kZGkuYwo+IEBAIC00Niw2ICs0Niw3IEBACj4gICNpbmNsdWRlICJpbnRlbF9ob3Rw bHVnLmgiCj4gICNpbmNsdWRlICJpbnRlbF9sc3Bjb24uaCIKPiAgI2luY2x1ZGUgImludGVsX3Bh bmVsLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9wcHMuaCIKPiAgI2luY2x1ZGUgImludGVsX3Bzci5o Igo+ICAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCj4gICNpbmNsdWRlICJpbnRlbF90Yy5oIgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlf cG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dl ci5jCj4gaW5kZXggZDUyMzc0ZjAxMzE2Li5hMTFiZDgyMTNkZjQgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYwo+IEBAIC00 LDcgKzQsNiBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX2NydC5oIgo+ IC0jaW5jbHVkZSAiZGlzcGxheS9pbnRlbF9kcC5oIgo+ICAKPiAgI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gICNpbmNsdWRlICJpOTE1X2lycS5oIgo+IEBAIC0xNiw2ICsxNSw3IEBACj4gICNpbmNs dWRlICJpbnRlbF9kcGlvX3BoeS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfaG90cGx1Zy5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfcG0uaCIKPiArI2luY2x1ZGUgImludGVsX3Bwcy5oIgo+ICAjaW5jbHVk ZSAiaW50ZWxfc2lkZWJhbmQuaCIKPiAgI2luY2x1ZGUgImludGVsX3RjLmgiCj4gICNpbmNsdWRl ICJpbnRlbF92Z2EuaCIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCj4g aW5kZXggNGYxOTBhODJkNGFkLi4wNzI3OWIxMDgxMmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kcC5jCj4gQEAgLTU4LDYgKzU4LDcgQEAKPiAgI2luY2x1ZGUgImlu dGVsX2xzcGNvbi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfbHZkcy5oIgo+ICAjaW5jbHVkZSAiaW50 ZWxfcGFuZWwuaCIKPiArI2luY2x1ZGUgImludGVsX3Bwcy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxf cHNyLmgiCj4gICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxf dGMuaCIKPiBAQCAtMTIxLDYgKzEyMiwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwX2xpbmtf ZHBsbCBjaHZfZHBsbFtdID0gewo+ICAJCXsgLnAxID0gNCwgLnAyID0gMSwgLm4gPSAxLCAubTEg PSAyLCAubTIgPSAweDZjMDAwMDAgfSB9LAo+ICB9Owo+ICAKPiArY29uc3Qgc3RydWN0IGRwbGwg KnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsJcmV0 dXJuIElTX0NIRVJSWVZJRVcoaTkxNSkgPyAmY2h2X2RwbGxbMF0uZHBsbCA6ICZ2bHZfZHBsbFsw XS5kcGxsOwo+ICt9Cj4gKwo+ICAvKiBDb25zdGFudHMgZm9yIERQIERTQyBjb25maWd1cmF0aW9u cyAqLwo+ICBzdGF0aWMgY29uc3QgdTggdmFsaWRfZHNjX2JwcFtdID0gezYsIDgsIDEwLCAxMiwg MTV9Owo+ICAKPiBAQCAtMTQ1LDEyICsxNTEsNiBAQCBib29sIGludGVsX2RwX2lzX2VkcChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAKPiAgc3RhdGljIHZvaWQgaW50ZWxfZHBfbGlua19k b3duKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkgICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsKPiAtc3RhdGljIGJvb2wgZWRw X3BhbmVsX3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiAtc3RhdGljIHZvaWQg ZWRwX3BhbmVsX3ZkZF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzeW5jKTsK PiAtc3RhdGljIHZvaWQgdmx2X2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAo+IC0JCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKTsKPiAtc3RhdGljIHZvaWQgdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICAgICBlbnVtIHBp cGUgcGlwZSk7Cj4gIHN0YXRpYyB2b2lkIGludGVsX2RwX3Vuc2V0X2VkaWQoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCk7Cj4gIAo+ICAvKiB1cGRhdGUgc2luayByYXRlcyBmcm9tIGRwY2QgKi8K PiBAQCAtODc3LDQ0NyArODc3LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfZHBfdW5wYWNrX2F1eCh1 MzIgc3JjLCB1OCAqZHN0LCBpbnQgZHN0X2J5dGVzKQo+ICAJCWRzdFtpXSA9IHNyYyA+PiAoKDMt aSkgKiA4KTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQKPiAtaW50ZWxfZHBfaW5pdF9wYW5lbF9w b3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gLXN0YXRpYyB2b2lk Cj4gLWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLAo+IC0JCQkJCSAgICAgIGJvb2wgZm9yY2VfZGlzYWJsZV92ZGQp Owo+IC1zdGF0aWMgdm9pZAo+IC1pbnRlbF9kcF9wcHNfaW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKTsKPiAtCj4gLXN0YXRpYyBpbnRlbF93YWtlcmVmX3QKPiAtcHBzX2xvY2soc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJl ZjsKPiAtCj4gLQkvKgo+IC0JICogU2VlIGludGVsX3Bvd2VyX3NlcXVlbmNlcl9yZXNldCgpIHdo eSB3ZSBuZWVkCj4gLQkgKiBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UgaGVyZS4KPiAtCSAqLwo+ IC0Jd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01B SU5fRElTUExBWV9DT1JFKTsKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ IC0KPiAtCXJldHVybiB3YWtlcmVmOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50ZWxfd2FrZXJlZl90 Cj4gLXBwc191bmxvY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50ZWxfd2FrZXJlZl90 IHdha2VyZWYpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBwc19t dXRleCk7Cj4gLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlO X0RJU1BMQVlfQ09SRSwgd2FrZXJlZik7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtI2RlZmlu ZSB3aXRoX3Bwc19sb2NrKGRwLCB3ZikgXAo+IC0JZm9yICgod2YpID0gcHBzX2xvY2soZHApOyAo d2YpOyAod2YpID0gcHBzX3VubG9jaygoZHApLCAod2YpKSkKPiAtCj4gLXN0YXRpYyB2b2lkCj4g LXZsdl9wb3dlcl9zZXF1ZW5jZXJfa2ljayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVs X2RwKTsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9kcC0+cHBzX3BpcGU7 Cj4gLQlib29sIHBsbF9lbmFibGVkLCByZWxlYXNlX2NsX292ZXJyaWRlID0gZmFsc2U7Cj4gLQll bnVtIGRwaW9fcGh5IHBoeSA9IERQSU9fUEhZKHBpcGUpOwo+IC0JZW51bSBkcGlvX2NoYW5uZWwg Y2ggPSB2bHZfcGlwZV90b19jaGFubmVsKHBpcGUpOwo+IC0JdTMyIERQOwo+IC0KPiAtCWlmIChk cm1fV0FSTigmZGV2X3ByaXYtPmRybSwKPiAtCQkgICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BPUlRfRU4sCj4gLQkJICAgICAic2tpcHBpbmcg cGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIga2ljayBkdWUgdG8gW0VOQ09ERVI6JWQ6JXNdIGJlaW5n IGFjdGl2ZVxuIiwKPiAtCQkgICAgIHBpcGVfbmFtZShwaXBlKSwgZGlnX3BvcnQtPmJhc2UuYmFz ZS5iYXNlLmlkLAo+IC0JCSAgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKSkKPiAtCQlyZXR1 cm47Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJICAgICJraWNraW5n IHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZvciBbRU5DT0RFUjolZDolc11cbiIsCj4gLQkJICAg IHBpcGVfbmFtZShwaXBlKSwgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCSAgICBk aWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+IC0KPiAtCS8qIFByZXNlcnZlIHRoZSBCSU9TLWNv bXB1dGVkIGRldGVjdGVkIGJpdC4gVGhpcyBpcwo+IC0JICogc3VwcG9zZWQgdG8gYmUgcmVhZC1v bmx5Lgo+IC0JICovCj4gLQlEUCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5v dXRwdXRfcmVnKSAmIERQX0RFVEVDVEVEOwo+IC0JRFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9Q UkVfRU1QSEFTSVNfMDsKPiAtCURQIHw9IERQX1BPUlRfV0lEVEgoMSk7Cj4gLQlEUCB8PSBEUF9M SU5LX1RSQUlOX1BBVF8xOwo+IC0KPiAtCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAt CQlEUCB8PSBEUF9QSVBFX1NFTF9DSFYocGlwZSk7Cj4gLQllbHNlCj4gLQkJRFAgfD0gRFBfUElQ RV9TRUwocGlwZSk7Cj4gLQo+IC0JcGxsX2VuYWJsZWQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCBEUExMKHBpcGUpKSAmIERQTExfVkNPX0VOQUJMRTsKPiAtCj4gLQkvKgo+IC0JICogVGhlIERQ TEwgZm9yIHRoZSBwaXBlIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLgo+IC0JICog U28gZW5hYmxlIHRlbXBvcmFyaWx5IGl0IGlmIGl0J3Mgbm90IGFscmVhZHkgZW5hYmxlZC4KPiAt CSAqLwo+IC0JaWYgKCFwbGxfZW5hYmxlZCkgewo+IC0JCXJlbGVhc2VfY2xfb3ZlcnJpZGUgPSBJ U19DSEVSUllWSUVXKGRldl9wcml2KSAmJgo+IC0JCQkhY2h2X3BoeV9wb3dlcmdhdGVfY2goZGV2 X3ByaXYsIHBoeSwgY2gsIHRydWUpOwo+IC0KPiAtCQlpZiAodmx2X2ZvcmNlX3BsbF9vbihkZXZf cHJpdiwgcGlwZSwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgPwo+IC0JCQkJICAgICAmY2h2X2Rw bGxbMF0uZHBsbCA6ICZ2bHZfZHBsbFswXS5kcGxsKSkgewo+IC0JCQlkcm1fZXJyKCZkZXZfcHJp di0+ZHJtLAo+IC0JCQkJIkZhaWxlZCB0byBmb3JjZSBvbiBwbGwgZm9yIHBpcGUgJWMhXG4iLAo+ IC0JCQkJcGlwZV9uYW1lKHBpcGUpKTsKPiAtCQkJcmV0dXJuOwo+IC0JCX0KPiAtCX0KPiAtCj4g LQkvKgo+IC0JICogU2ltaWxhciBtYWdpYyBhcyBpbiBpbnRlbF9kcF9lbmFibGVfcG9ydCgpLgo+ IC0JICogV2UgX211c3RfIGRvIHRoaXMgcG9ydCBlbmFibGUgKyBkaXNhYmxlIHRyaWNrCj4gLQkg KiB0byBtYWtlIHRoaXMgcG93ZXIgc2VxdWVuY2VyIGxvY2sgb250byB0aGUgcG9ydC4KPiAtCSAq IE90aGVyd2lzZSBldmVuIFZERCBmb3JjZSBiaXQgd29uJ3Qgd29yay4KPiAtCSAqLwo+IC0JaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCk7Cj4gLQlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKPiAtCj4g LQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQIHwgRFBf UE9SVF9FTik7Cj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5v dXRwdXRfcmVnKTsKPiAtCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91 dHB1dF9yZWcsIERQICYgfkRQX1BPUlRfRU4pOwo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Cj4gLQo+IC0JaWYgKCFwbGxfZW5hYmxlZCkg ewo+IC0JCXZsdl9mb3JjZV9wbGxfb2ZmKGRldl9wcml2LCBwaXBlKTsKPiAtCj4gLQkJaWYgKHJl bGVhc2VfY2xfb3ZlcnJpZGUpCj4gLQkJCWNodl9waHlfcG93ZXJnYXRlX2NoKGRldl9wcml2LCBw aHksIGNoLCBmYWxzZSk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBlbnVtIHBpcGUgdmx2X2Zp bmRfZnJlZV9wcHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAtCXVuc2lnbmVkIGludCBwaXBlcyA9ICgx IDw8IFBJUEVfQSkgfCAoMSA8PCBQSVBFX0IpOwo+IC0KPiAtCS8qCj4gLQkgKiBXZSBkb24ndCBo YXZlIHBvd2VyIHNlcXVlbmNlciBjdXJyZW50bHkuCj4gLQkgKiBQaWNrIG9uZSB0aGF0J3Mgbm90 IHVzZWQgYnkgb3RoZXIgcG9ydHMuCj4gLQkgKi8KPiAtCWZvcl9lYWNoX2ludGVsX2RwKCZkZXZf cHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gLQkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVu Y190b19pbnRlbF9kcChlbmNvZGVyKTsKPiAtCj4gLQkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5U RUxfT1VUUFVUX0VEUCkgewo+IC0JCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKPiAtCQkJ CSAgICBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFICYmCj4gLQkJCQkgICAg aW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9Cj4gLQkJCQkgICAgaW50ZWxfZHAtPnBwc19waXBlKTsK PiAtCj4gLQkJCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJRF9QSVBFKQo+IC0JCQkJ cGlwZXMgJj0gfigxIDw8IGludGVsX2RwLT5wcHNfcGlwZSk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJ ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sCj4gLQkJCQkgICAgaW50ZWxfZHAtPnBwc19waXBl ICE9IElOVkFMSURfUElQRSk7Cj4gLQo+IC0JCQlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9 IElOVkFMSURfUElQRSkKPiAtCQkJCXBpcGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+YWN0aXZlX3Bp cGUpOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZiAocGlwZXMgPT0gMCkKPiAtCQlyZXR1cm4gSU5W QUxJRF9QSVBFOwo+IC0KPiAtCXJldHVybiBmZnMocGlwZXMpIC0gMTsKPiAtfQo+IC0KPiAtc3Rh dGljIGVudW0gcGlwZQo+IC12bHZfcG93ZXJfc2VxdWVuY2VyX3BpcGUoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiAtCWVudW0gcGlwZSBwaXBlOwo+IC0K PiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCS8q IFdlIHNob3VsZCBuZXZlciBsYW5kIGhlcmUgd2l0aCByZWd1bGFyIERQIHBvcnRzICovCj4gLQlk cm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpOwo+ IC0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUg IT0gSU5WQUxJRF9QSVBFICYmCj4gLQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBpbnRl bF9kcC0+cHBzX3BpcGUpOwo+IC0KPiAtCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gSU5WQUxJ RF9QSVBFKQo+IC0JCXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7Cj4gLQo+IC0JcGlwZSA9IHZs dl9maW5kX2ZyZWVfcHBzKGRldl9wcml2KTsKPiAtCj4gLQkvKgo+IC0JICogRGlkbid0IGZpbmQg b25lLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIHRoZXJlCj4gLQkgKiBhcmUgdHdvIHBv d2VyIHNlcXVlbmNlcnMgYW5kIHVwIHRvIHR3byBlRFAgcG9ydHMuCj4gLQkgKi8KPiAtCWlmIChk cm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgcGlwZSA9PSBJTlZBTElEX1BJUEUpKQo+IC0JCXBp cGUgPSBQSVBFX0E7Cj4gLQo+IC0Jdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihkZXZfcHJpdiwg cGlwZSk7Cj4gLQlpbnRlbF9kcC0+cHBzX3BpcGUgPSBwaXBlOwo+IC0KPiAtCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAicGlja2VkIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2Vy IGZvciBbRU5DT0RFUjolZDolc11cbiIsCj4gLQkJICAgIHBpcGVfbmFtZShpbnRlbF9kcC0+cHBz X3BpcGUpLAo+IC0JCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gLQkJICAgIGRp Z19wb3J0LT5iYXNlLmJhc2UubmFtZSk7Cj4gLQo+IC0JLyogaW5pdCBwb3dlciBzZXF1ZW5jZXIg b24gdGhpcyBwaXBlIGFuZCBwb3J0ICovCj4gLQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3Nl cXVlbmNlcihpbnRlbF9kcCk7Cj4gLQlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNl cl9yZWdpc3RlcnMoaW50ZWxfZHAsIHRydWUpOwo+IC0KPiAtCS8qCj4gLQkgKiBFdmVuIHZkZCBm b3JjZSBkb2Vzbid0IHdvcmsgdW50aWwgd2UndmUgbWFkZQo+IC0JICogdGhlIHBvd2VyIHNlcXVl bmNlciBsb2NrIGluIG9uIHRoZSBwb3J0Lgo+IC0JICovCj4gLQl2bHZfcG93ZXJfc2VxdWVuY2Vy X2tpY2soaW50ZWxfZHApOwo+IC0KPiAtCXJldHVybiBpbnRlbF9kcC0+cHBzX3BpcGU7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQKPiAtYnh0X3Bvd2VyX3NlcXVlbmNlcl9pZHgoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlpbnQgYmFja2xpZ2h0X2NvbnRyb2xsZXIgPSBk ZXZfcHJpdi0+dmJ0LmJhY2tsaWdodC5jb250cm9sbGVyOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCS8qIFdlIHNob3VsZCBuZXZlciBs YW5kIGhlcmUgd2l0aCByZWd1bGFyIERQIHBvcnRzICovCj4gLQlkcm1fV0FSTl9PTigmZGV2X3By aXYtPmRybSwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpOwo+IC0KPiAtCWlmICghaW50ZWxf ZHAtPnBwc19yZXNldCkKPiAtCQlyZXR1cm4gYmFja2xpZ2h0X2NvbnRyb2xsZXI7Cj4gLQo+IC0J aW50ZWxfZHAtPnBwc19yZXNldCA9IGZhbHNlOwo+IC0KPiAtCS8qCj4gLQkgKiBPbmx5IHRoZSBI VyBuZWVkcyB0byBiZSByZXByb2dyYW1tZWQsIHRoZSBTVyBzdGF0ZSBpcyBmaXhlZCBhbmQKPiAt CSAqIGhhcyBiZWVuIHNldHVwIGR1cmluZyBjb25uZWN0b3IgaW5pdC4KPiAtCSAqLwo+IC0JaW50 ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCBmYWxz ZSk7Cj4gLQo+IC0JcmV0dXJuIGJhY2tsaWdodF9jb250cm9sbGVyOwo+IC19Cj4gLQo+IC10eXBl ZGVmIGJvb2wgKCp2bHZfcGlwZV9jaGVjaykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+IC0JCQkgICAgICAgZW51bSBwaXBlIHBpcGUpOwo+IC0KPiAtc3RhdGljIGJvb2wgdmx2 X3BpcGVfaGFzX3BwX29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJ ICAgICAgIGVudW0gcGlwZSBwaXBlKQo+IC17Cj4gLQlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgUFBfU1RBVFVTKHBpcGUpKSAmIFBQX09OOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCB2 bHZfcGlwZV9oYXNfdmRkX29uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAt CQkJCWVudW0gcGlwZSBwaXBlKQo+IC17Cj4gLQlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgUFBfQ09OVFJPTChwaXBlKSkgJiBFRFBfRk9SQ0VfVkREOwo+IC19Cj4gLQo+IC1zdGF0aWMg Ym9vbCB2bHZfcGlwZV9hbnkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0J CQkgZW51bSBwaXBlIHBpcGUpCj4gLXsKPiAtCXJldHVybiB0cnVlOwo+IC19Cj4gLQo+IC1zdGF0 aWMgZW51bSBwaXBlCj4gLXZsdl9pbml0aWFsX3Bwc19waXBlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAtCQkgICAgIGVudW0gcG9ydCBwb3J0LAo+IC0JCSAgICAgdmx2X3Bp cGVfY2hlY2sgcGlwZV9jaGVjaykKPiAtewo+IC0JZW51bSBwaXBlIHBpcGU7Cj4gLQo+IC0JZm9y IChwaXBlID0gUElQRV9BOyBwaXBlIDw9IFBJUEVfQjsgcGlwZSsrKSB7Cj4gLQkJdTMyIHBvcnRf c2VsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUFBfT05fREVMQVlTKHBpcGUpKSAmCj4gLQkJ CVBBTkVMX1BPUlRfU0VMRUNUX01BU0s7Cj4gLQo+IC0JCWlmIChwb3J0X3NlbCAhPSBQQU5FTF9Q T1JUX1NFTEVDVF9WTFYocG9ydCkpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlpZiAoIXBpcGVf Y2hlY2soZGV2X3ByaXYsIHBpcGUpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJcmV0dXJuIHBp cGU7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIElOVkFMSURfUElQRTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQKPiAtdmx2X2luaXRpYWxfcG93ZXJfc2VxdWVuY2VyX3NldHVwKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGln X3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gLQllbnVtIHBvcnQgcG9ydCA9IGRp Z19wb3J0LT5iYXNlLnBvcnQ7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYt PnBwc19tdXRleCk7Cj4gLQo+IC0JLyogdHJ5IHRvIGZpbmQgYSBwaXBlIHdpdGggdGhpcyBwb3J0 IHNlbGVjdGVkICovCj4gLQkvKiBmaXJzdCBwaWNrIG9uZSB3aGVyZSB0aGUgcGFuZWwgaXMgb24g Ki8KPiAtCWludGVsX2RwLT5wcHNfcGlwZSA9IHZsdl9pbml0aWFsX3Bwc19waXBlKGRldl9wcml2 LCBwb3J0LAo+IC0JCQkJCQkgIHZsdl9waXBlX2hhc19wcF9vbik7Cj4gLQkvKiBkaWRuJ3QgZmlu ZCBvbmU/IHBpY2sgb25lIHdoZXJlIHZkZCBpcyBvbiAqLwo+IC0JaWYgKGludGVsX2RwLT5wcHNf cGlwZSA9PSBJTlZBTElEX1BJUEUpCj4gLQkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRp YWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBvcnQsCj4gLQkJCQkJCQkgIHZsdl9waXBlX2hhc192ZGRf b24pOwo+IC0JLyogZGlkbid0IGZpbmQgb25lPyBwaWNrIG9uZSB3aXRoIGp1c3QgdGhlIGNvcnJl Y3QgcG9ydCAqLwo+IC0JaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpCj4g LQkJaW50ZWxfZHAtPnBwc19waXBlID0gdmx2X2luaXRpYWxfcHBzX3BpcGUoZGV2X3ByaXYsIHBv cnQsCj4gLQkJCQkJCQkgIHZsdl9waXBlX2FueSk7Cj4gLQo+IC0JLyogZGlkbid0IGZpbmQgb25l PyBqdXN0IGxldCB2bHZfcG93ZXJfc2VxdWVuY2VyX3BpcGUoKSBwaWNrIG9uZSB3aGVuIG5lZWRl ZCAqLwo+IC0JaWYgKGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpIHsKPiAtCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJICAgICJubyBpbml0aWFsIHBvd2VyIHNl cXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdXG4iLAo+IC0JCQkgICAgZGlnX3BvcnQtPmJhc2Uu YmFzZS5iYXNlLmlkLAo+IC0JCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAtCQly ZXR1cm47Cj4gLQl9Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJICAg ICJpbml0aWFsIHBvd2VyIHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdOiBwaXBlICVjXG4i LAo+IC0JCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gLQkJICAgIGRpZ19wb3J0 LT5iYXNlLmJhc2UubmFtZSwKPiAtCQkgICAgcGlwZV9uYW1lKGludGVsX2RwLT5wcHNfcGlwZSkp Owo+IC0KPiAtCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsK PiAtCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9k cCwgZmFsc2UpOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX3Bvd2VyX3NlcXVlbmNlcl9yZXNldChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyOwo+IC0KPiAtCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwK PiAtCQkJIShJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fAo+IC0JCQkgIElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpIHx8Cj4gLQkJCSAgSVNfR0VOOV9MUChkZXZfcHJpdikpKSkKPiAtCQlyZXR1cm47 Cj4gLQo+IC0JLyoKPiAtCSAqIFdlIGNhbid0IGdyYWIgcHBzX211dGV4IGhlcmUgZHVlIHRvIGRl YWRsb2NrIHdpdGggcG93ZXJfZG9tYWluCj4gLQkgKiBtdXRleCB3aGVuIHBvd2VyX2RvbWFpbiBm dW5jdGlvbnMgYXJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIHBwc19tdXRleC4KPiAtCSAqIFRoYXQg YWxzbyBtZWFucyB0aGF0IGluIG9yZGVyIHRvIHVzZSBwcHNfcGlwZSB0aGUgY29kZSBuZWVkcyB0 bwo+IC0JICogaG9sZCBib3RoIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBhbmQgcHBzX211dGV4 LCBhbmQgdGhlIHBvd2VyIGRvbWFpbgo+IC0JICogcmVmZXJlbmNlIGdldC9wdXQgbXVzdCBiZSBk b25lIHdoaWxlIF9ub3RfIGhvbGRpbmcgcHBzX211dGV4Lgo+IC0JICogcHBzX3tsb2NrLHVubG9j a30oKSBkbyB0aGVzZSBzdGVwcyBpbiB0aGUgY29ycmVjdCBvcmRlciwgc28gb25lCj4gLQkgKiBz aG91bGQgdXNlIHRoZW0gYWx3YXlzLgo+IC0JICovCj4gLQo+IC0JZm9yX2VhY2hfaW50ZWxfZHAo JmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw ID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+IC0KPiAtCQlkcm1fV0FSTl9PTigmZGV2X3By aXYtPmRybSwKPiAtCQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUp Owo+IC0KPiAtCQlpZiAoZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+IC0JCQlj b250aW51ZTsKPiAtCj4gLQkJaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+IC0JCQlpbnRlbF9k cC0+cHBzX3Jlc2V0ID0gdHJ1ZTsKPiAtCQllbHNlCj4gLQkJCWludGVsX2RwLT5wcHNfcGlwZSA9 IElOVkFMSURfUElQRTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RydWN0IHBwc19yZWdpc3RlcnMgewo+ IC0JaTkxNV9yZWdfdCBwcF9jdHJsOwo+IC0JaTkxNV9yZWdfdCBwcF9zdGF0Owo+IC0JaTkxNV9y ZWdfdCBwcF9vbjsKPiAtCWk5MTVfcmVnX3QgcHBfb2ZmOwo+IC0JaTkxNV9yZWdfdCBwcF9kaXY7 Cj4gLX07Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLAo+IC0JCQkJICAgIHN0cnVjdCBwcHNfcmVnaXN0ZXJzICpyZWdz KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1 KGludGVsX2RwKTsKPiAtCWludCBwcHNfaWR4ID0gMDsKPiAtCj4gLQltZW1zZXQocmVncywgMCwg c2l6ZW9mKCpyZWdzKSk7Cj4gLQo+IC0JaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+IC0JCXBw c19pZHggPSBieHRfcG93ZXJfc2VxdWVuY2VyX2lkeChpbnRlbF9kcCk7Cj4gLQllbHNlIGlmIChJ U19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQlw cHNfaWR4ID0gdmx2X3Bvd2VyX3NlcXVlbmNlcl9waXBlKGludGVsX2RwKTsKPiAtCj4gLQlyZWdz LT5wcF9jdHJsID0gUFBfQ09OVFJPTChwcHNfaWR4KTsKPiAtCXJlZ3MtPnBwX3N0YXQgPSBQUF9T VEFUVVMocHBzX2lkeCk7Cj4gLQlyZWdzLT5wcF9vbiA9IFBQX09OX0RFTEFZUyhwcHNfaWR4KTsK PiAtCXJlZ3MtPnBwX29mZiA9IFBQX09GRl9ERUxBWVMocHBzX2lkeCk7Cj4gLQo+IC0JLyogQ3lj bGUgZGVsYXkgbW92ZWQgZnJvbSBQUF9ESVZJU09SIHRvIFBQX0NPTlRST0wgKi8KPiAtCWlmIChJ U19HRU45X0xQKGRldl9wcml2KSB8fCBJTlRFTF9QQ0hfVFlQRShkZXZfcHJpdikgPj0gUENIX0NO UCkKPiAtCQlyZWdzLT5wcF9kaXYgPSBJTlZBTElEX01NSU9fUkVHOwo+IC0JZWxzZQo+IC0JCXJl Z3MtPnBwX2RpdiA9IFBQX0RJVklTT1IocHBzX2lkeCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpOTE1 X3JlZ190Cj4gLV9wcF9jdHJsX3JlZyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4g LQlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOwo+IC0KPiAtCWludGVsX3Bwc19nZXRfcmVnaXN0 ZXJzKGludGVsX2RwLCAmcmVncyk7Cj4gLQo+IC0JcmV0dXJuIHJlZ3MucHBfY3RybDsKPiAtfQo+ IC0KPiAtc3RhdGljIGk5MTVfcmVnX3QKPiAtX3BwX3N0YXRfcmVnKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7Cj4gLQo+IC0JaW50 ZWxfcHBzX2dldF9yZWdpc3RlcnMoaW50ZWxfZHAsICZyZWdzKTsKPiAtCj4gLQlyZXR1cm4gcmVn cy5wcF9zdGF0Owo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBlZHBfaGF2ZV9wYW5lbF9wb3dlcihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCj4gLQlpZiAoKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAmJgo+IC0JICAgIGludGVsX2Rw LT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXJl dHVybiAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX3N0YXRfcmVnKGludGVsX2RwKSkgJiBQ UF9PTikgIT0gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgZWRwX2hhdmVfcGFuZWxfdmRkKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWlmICgoSVNfVkFMTEVZVklFVyhk ZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpICYmCj4gLQkgICAgaW50ZWxfZHAt PnBwc19waXBlID09IElOVkFMSURfUElQRSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0JcmV0 dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9jdHJsX3JlZyhpbnRlbF9kcCkpICYgRURQ X0ZPUkNFX1ZERDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtaW50ZWxfZHBfY2hlY2tfZWRw KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAtCWlmICghaW50ZWxf ZHBfaXNfZWRwKGludGVsX2RwKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKCFlZHBfaGF2ZV9w YW5lbF9wb3dlcihpbnRlbF9kcCkgJiYgIWVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCkpIHsK PiAtCQlkcm1fV0FSTigmZGV2X3ByaXYtPmRybSwgMSwKPiAtCQkJICJlRFAgcG93ZXJlZCBvZmYg d2hpbGUgYXR0ZW1wdGluZyBhdXggY2hhbm5lbCBjb21tdW5pY2F0aW9uLlxuIik7Cj4gLQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTdGF0dXMgMHglMDh4IENvbnRyb2wgMHglMDh4XG4i LAo+IC0JCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX3N0YXRfcmVnKGludGVsX2Rw KSksCj4gLQkJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxf ZHApKSk7Cj4gLQl9Cj4gLX0KPiAtCj4gIHN0YXRpYyB1MzIKPiAgaW50ZWxfZHBfYXV4X3dhaXRf ZG9uZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gQEAgLTI5MzEsNDkxICsyNDkw LDY2IEBAIHN0YXRpYyB2b2lkIGludGVsX2RwX3ByZXBhcmUoc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIsCj4gIAkgKiBJQlggUENIIGFuZCBDUFUgYXJlIHRoZSBzYW1lIGZvciBhbG1vc3Qg ZXZlcnl0aGluZywKPiAgCSAqIGV4Y2VwdCB0aGF0IHRoZSBDUFUgRFAgUExMIGlzIGNvbmZpZ3Vy ZWQgaW4gdGhpcwo+ICAJICogcmVnaXN0ZXIKPiAtCSAqCj4gLQkgKiBDUFQgUENIIGlzIHF1aXRl IGRpZmZlcmVudCwgaGF2aW5nIG1hbnkgYml0cyBtb3ZlZAo+IC0JICogdG8gdGhlIFRSQU5TX0RQ X0NUTCByZWdpc3RlciBpbnN0ZWFkLiBUaGF0Cj4gLQkgKiBjb25maWd1cmF0aW9uIGhhcHBlbnMg KG9kZGx5KSBpbiBpbGtfcGNoX2VuYWJsZQo+IC0JICovCj4gLQo+IC0JLyogUHJlc2VydmUgdGhl IEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQgYml0LiBUaGlzIGlzCj4gLQkgKiBzdXBwb3NlZCB0byBi ZSByZWFkLW9ubHkuCj4gLQkgKi8KPiAtCWludGVsX2RwLT5EUCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX0RFVEVDVEVEOwo+IC0KPiAtCS8qIEhh bmRsZSBEUCBiaXRzIGluIGNvbW1vbiBiZXR3ZWVuIGFsbCB0aHJlZSByZWdpc3RlciBmb3JtYXRz ICovCj4gLQlpbnRlbF9kcC0+RFAgfD0gRFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNf MDsKPiAtCWludGVsX2RwLT5EUCB8PSBEUF9QT1JUX1dJRFRIKHBpcGVfY29uZmlnLT5sYW5lX2Nv dW50KTsKPiAtCj4gLQkvKiBTcGxpdCBvdXQgdGhlIElCWC9DUFUgdnMgQ1BUIHNldHRpbmdzICov Cj4gLQo+IC0JaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JUX0EpIHsK PiAtCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKPiAt CQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfSFNfSElHSDsKPiAtCQlpZiAoYWRqdXN0ZWRfbW9k ZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKPiAtCQkJaW50ZWxfZHAtPkRQIHw9IERQ X1NZTkNfVlNfSElHSDsKPiAtCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19UUkFJTl9PRkZfQ1BU Owo+IC0KPiAtCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkp Cj4gLQkJCWludGVsX2RwLT5EUCB8PSBEUF9FTkhBTkNFRF9GUkFNSU5HOwo+IC0KPiAtCQlpbnRl bF9kcC0+RFAgfD0gRFBfUElQRV9TRUxfSVZCKGNydGMtPnBpcGUpOwo+IC0JfSBlbHNlIGlmIChI QVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpIHsKPiAtCQl1MzIgdHJhbnNf ZHA7Cj4gLQo+IC0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09GRl9DUFQ7Cj4gLQo+ IC0JCXRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKGNydGMt PnBpcGUpKTsKPiAtCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBj ZCkpCj4gLQkJCXRyYW5zX2RwIHw9IFRSQU5TX0RQX0VOSF9GUkFNSU5HOwo+IC0JCWVsc2UKPiAt CQkJdHJhbnNfZHAgJj0gflRSQU5TX0RQX0VOSF9GUkFNSU5HOwo+IC0JCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0Yy0+cGlwZSksIHRyYW5zX2RwKTsKPiAtCX0gZWxz ZSB7Cj4gLQkJaWYgKElTX0c0WChkZXZfcHJpdikgJiYgcGlwZV9jb25maWctPmxpbWl0ZWRfY29s b3JfcmFuZ2UpCj4gLQkJCWludGVsX2RwLT5EUCB8PSBEUF9DT0xPUl9SQU5HRV8xNl8yMzU7Cj4g LQo+IC0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQo+ IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19IU19ISUdIOwo+IC0JCWlmIChhZGp1c3RlZF9t b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0g RFBfU1lOQ19WU19ISUdIOwo+IC0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09GRjsK PiAtCj4gLQkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQo+ IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsKPiAtCj4gLQkJaWYgKElT X0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUxf Q0hWKGNydGMtPnBpcGUpOwo+IC0JCWVsc2UKPiAtCQkJaW50ZWxfZHAtPkRQIHw9IERQX1BJUEVf U0VMKGNydGMtPnBpcGUpOwo+IC0JfQo+IC19Cj4gLQo+IC0jZGVmaW5lIElETEVfT05fTUFTSwkJ KFBQX09OIHwgUFBfU0VRVUVOQ0VfTUFTSyB8IDAgICAgICAgICAgICAgICAgICAgICB8IFBQX1NF UVVFTkNFX1NUQVRFX01BU0spCj4gLSNkZWZpbmUgSURMRV9PTl9WQUxVRSAgIAkoUFBfT04gfCBQ UF9TRVFVRU5DRV9OT05FIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgUFBfU0VRVUVOQ0VfU1RB VEVfT05fSURMRSkKPiAtCj4gLSNkZWZpbmUgSURMRV9PRkZfTUFTSwkJKFBQX09OIHwgUFBfU0VR VUVOQ0VfTUFTSyB8IDAgICAgICAgICAgICAgICAgICAgICB8IDApCj4gLSNkZWZpbmUgSURMRV9P RkZfVkFMVUUJCSgwICAgICB8IFBQX1NFUVVFTkNFX05PTkUgfCAwICAgICAgICAgICAgICAgICAg ICAgfCAwKQo+IC0KPiAtI2RlZmluZSBJRExFX0NZQ0xFX01BU0sJCShQUF9PTiB8IFBQX1NFUVVF TkNFX01BU0sgfCBQUF9DWUNMRV9ERUxBWV9BQ1RJVkUgfCBQUF9TRVFVRU5DRV9TVEFURV9NQVNL KQo+IC0jZGVmaW5lIElETEVfQ1lDTEVfVkFMVUUJKDAgICAgIHwgUFBfU0VRVUVOQ0VfTk9ORSB8 IDAgICAgICAgICAgICAgICAgICAgICB8IFBQX1NFUVVFTkNFX1NUQVRFX09GRl9JRExFKQo+IC0K PiAtc3RhdGljIHZvaWQgaW50ZWxfcHBzX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKTsKPiAtCj4gLXN0YXRpYyB2b2lkIHdhaXRfcGFuZWxfc3RhdHVzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCj4gLQkJCQkgICAgICAgdTMyIG1hc2ssCj4gLQkJCQkgICAgICAgdTMy IHZhbHVlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsKPiAtCWk5MTVfcmVnX3QgcHBfc3RhdF9yZWcsIHBwX2N0cmxfcmVn Owo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0K PiAtCWludGVsX3Bwc192ZXJpZnlfc3RhdGUoaW50ZWxfZHApOwo+IC0KPiAtCXBwX3N0YXRfcmVn ID0gX3BwX3N0YXRfcmVnKGludGVsX2RwKTsKPiAtCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVn KGludGVsX2RwKTsKPiAtCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkgICAg Im1hc2sgJTA4eCB2YWx1ZSAlMDh4IHN0YXR1cyAlMDh4IGNvbnRyb2wgJTA4eFxuIiwKPiAtCQkg ICAgbWFzaywgdmFsdWUsCj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRf cmVnKSwKPiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpKTsKPiAt Cj4gLQlpZiAoaW50ZWxfZGVfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIHBwX3N0YXRfcmVn LAo+IC0JCQkJICAgICAgIG1hc2ssIHZhbHVlLCA1MDAwKSkKPiAtCQlkcm1fZXJyKCZkZXZfcHJp di0+ZHJtLAo+IC0JCQkiUGFuZWwgc3RhdHVzIHRpbWVvdXQ6IHN0YXR1cyAlMDh4IGNvbnRyb2wg JTA4eFxuIiwKPiAtCQkJaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAo+IC0J CQlpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOwo+IC0KPiAtCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiV2FpdCBjb21wbGV0ZVxuIik7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIHdhaXRfcGFuZWxfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAt Cj4gLQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBmb3IgcGFuZWwgcG93ZXIgb25cbiIp Owo+IC0Jd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfT05fTUFTSywgSURMRV9PTl9W QUxVRSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHdhaXRfcGFuZWxfb2ZmKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIldh aXQgZm9yIHBhbmVsIHBvd2VyIG9mZiB0aW1lXG4iKTsKPiAtCXdhaXRfcGFuZWxfc3RhdHVzKGlu dGVsX2RwLCBJRExFX09GRl9NQVNLLCBJRExFX09GRl9WQUxVRSk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIHdhaXRfcGFuZWxfcG93ZXJfY3ljbGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1KGludGVs X2RwKTsKPiAtCWt0aW1lX3QgcGFuZWxfcG93ZXJfb25fdGltZTsKPiAtCXM2NCBwYW5lbF9wb3dl cl9vZmZfZHVyYXRpb247Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIldhaXQgZm9y IHBhbmVsIHBvd2VyIGN5Y2xlXG4iKTsKPiAtCj4gLQkvKiB0YWtlIHRoZSBkaWZmZXJlbmNlIG9m IGN1cnJyZW50IHRpbWUgYW5kIHBhbmVsIHBvd2VyIG9mZiB0aW1lCj4gLQkgKiBhbmQgdGhlbiBt YWtlIHBhbmVsIHdhaXQgZm9yIHQxMV90MTIgaWYgbmVlZGVkLiAqLwo+IC0JcGFuZWxfcG93ZXJf b25fdGltZSA9IGt0aW1lX2dldF9ib290dGltZSgpOwo+IC0JcGFuZWxfcG93ZXJfb2ZmX2R1cmF0 aW9uID0ga3RpbWVfbXNfZGVsdGEocGFuZWxfcG93ZXJfb25fdGltZSwgaW50ZWxfZHAtPnBhbmVs X3Bvd2VyX29mZl90aW1lKTsKPiAtCj4gLQkvKiBXaGVuIHdlIGRpc2FibGUgdGhlIFZERCBvdmVy cmlkZSBiaXQgbGFzdCB3ZSBoYXZlIHRvIGRvIHRoZSBtYW51YWwKPiAtCSAqIHdhaXQuICovCj4g LQlpZiAocGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uIDwgKHM2NClpbnRlbF9kcC0+cGFuZWxfcG93 ZXJfY3ljbGVfZGVsYXkpCj4gLQkJd2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGppZmZp ZXMsCj4gLQkJCQkgICAgICAgaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5IC0gcGFu ZWxfcG93ZXJfb2ZmX2R1cmF0aW9uKTsKPiAtCj4gLQl3YWl0X3BhbmVsX3N0YXR1cyhpbnRlbF9k cCwgSURMRV9DWUNMRV9NQVNLLCBJRExFX0NZQ0xFX1ZBTFVFKTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgd2FpdF9iYWNrbGlnaHRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+ IC0Jd2FpdF9yZW1haW5pbmdfbXNfZnJvbV9qaWZmaWVzKGludGVsX2RwLT5sYXN0X3Bvd2VyX29u LAo+IC0JCQkJICAgICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXkpOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBlZHBfd2FpdF9iYWNrbGlnaHRfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gLXsKPiAtCXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlmZmllcyhpbnRlbF9kcC0+ bGFzdF9iYWNrbGlnaHRfb2ZmLAo+IC0JCQkJICAgICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb2Zm X2RlbGF5KTsKPiAtfQo+IC0KPiAtLyogUmVhZCB0aGUgY3VycmVudCBwcF9jb250cm9sIHZhbHVl LCB1bmxvY2tpbmcgdGhlIHJlZ2lzdGVyIGlmIGl0Cj4gLSAqIGlzIGxvY2tlZAo+IC0gKi8KPiAt Cj4gLXN0YXRpYyAgdTMyIGlsa19nZXRfcHBfY29udHJvbChzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKPiAtCXUzMiBjb250cm9sOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWNvbnRyb2wgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxfZHApKTsKPiAtCWlmIChkcm1fV0FSTl9PTigm ZGV2X3ByaXYtPmRybSwgIUhBU19EREkoZGV2X3ByaXYpICYmCj4gLQkJCShjb250cm9sICYgUEFO RUxfVU5MT0NLX01BU0spICE9IFBBTkVMX1VOTE9DS19SRUdTKSkgewo+IC0JCWNvbnRyb2wgJj0g flBBTkVMX1VOTE9DS19NQVNLOwo+IC0JCWNvbnRyb2wgfD0gUEFORUxfVU5MT0NLX1JFR1M7Cj4g LQl9Cj4gLQlyZXR1cm4gY29udHJvbDsKPiAtfQo+IC0KPiAtLyoKPiAtICogTXVzdCBiZSBwYWly ZWQgd2l0aCBlZHBfcGFuZWxfdmRkX29mZigpLgo+IC0gKiBNdXN0IGhvbGQgcHBzX211dGV4IGFy b3VuZCB0aGUgd2hvbGUgb24vb2ZmIHNlcXVlbmNlLgo+IC0gKiBDYW4gYmUgbmVzdGVkIHdpdGgg aW50ZWxfZWRwX3BhbmVsX3ZkZF97b24sb2ZmfSgpIGNhbGxzLgo+IC0gKi8KPiAtc3RhdGljIGJv b2wgZWRwX3BhbmVsX3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsK PiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQo aW50ZWxfZHApOwo+IC0JdTMyIHBwOwo+IC0JaTkxNV9yZWdfdCBwcF9zdGF0X3JlZywgcHBfY3Ry bF9yZWc7Cj4gLQlib29sIG5lZWRfdG9fZGlzYWJsZSA9ICFpbnRlbF9kcC0+d2FudF9wYW5lbF92 ZGQ7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4g LQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+IC0JCXJldHVybiBmYWxzZTsK PiAtCj4gLQljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cGFuZWxfdmRkX3dvcmspOwo+ IC0JaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkID0gdHJ1ZTsKPiAtCj4gLQlpZiAoZWRwX2hhdmVf cGFuZWxfdmRkKGludGVsX2RwKSkKPiAtCQlyZXR1cm4gbmVlZF90b19kaXNhYmxlOwo+IC0KPiAt CWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYpOwo+IC0J aW50ZWxfZHAtPnZkZF93YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYs Cj4gLQkJCQkJCQlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19wb3J0KSk7Cj4gLQo+IC0JZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJUdXJuaW5nIFtFTkNPREVSOiVkOiVzXSBWREQgb25c biIsCj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAtCQkgICAgZGlnX3Bv cnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAtCj4gLQlpZiAoIWVkcF9oYXZlX3BhbmVsX3Bvd2VyKGlu dGVsX2RwKSkKPiAtCQl3YWl0X3BhbmVsX3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsKPiAtCj4gLQlw cCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Cj4gLQlwcCB8PSBFRFBfRk9SQ0VfVkRE Owo+IC0KPiAtCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRfcmVnKGludGVsX2RwKTsKPiAtCXBwX2N0 cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsKPiAtCj4gLQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZf cHJpdiwgcHBfY3RybF9yZWcpOwo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQUF9T VEFUVVM6IDB4JTA4eCBQUF9DT05UUk9MOiAweCUwOHhcbiIsCj4gLQkJICAgIGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVnKSwKPiAtCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcHBfY3RybF9yZWcpKTsKPiAtCS8qCj4gLQkgKiBJZiB0aGUgcGFuZWwgd2Fzbid0IG9uLCBk ZWxheSBiZWZvcmUgYWNjZXNzaW5nIGF1eCBjaGFubmVsCj4gLQkgKi8KPiAtCWlmICghZWRwX2hh dmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApKSB7Cj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCj4gLQkJCSAgICAiW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIHdhc24ndCBlbmFibGVk XG4iLAo+IC0JCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCQkgICAgZGln X3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAtCQltc2xlZXAoaW50ZWxfZHAtPnBhbmVsX3Bvd2Vy X3VwX2RlbGF5KTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gbmVlZF90b19kaXNhYmxlOwo+IC19Cj4g LQo+IC0vKgo+IC0gKiBNdXN0IGJlIHBhaXJlZCB3aXRoIGludGVsX2VkcF9wYW5lbF92ZGRfb2Zm KCkgb3IKPiAtICogaW50ZWxfZWRwX3BhbmVsX29mZigpLgo+IC0gKiBOZXN0ZWQgY2FsbHMgdG8g dGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBzaW5jZQo+IC0gKiB3ZSBkcm9wIHRoZSBs b2NrLiBDYWxsZXIgbXVzdCB1c2Ugc29tZSBoaWdoZXIgbGV2ZWwKPiAtICogbG9ja2luZyB0byBw cmV2ZW50IG5lc3RlZCBjYWxscyBmcm9tIG90aGVyIHRocmVhZHMuCj4gLSAqLwo+IC12b2lkIGlu dGVsX2VkcF9wYW5lbF92ZGRfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0J aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQlib29sIHZkZDsKPiAtCj4gLQlpZiAoIWludGVs X2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXZkZCA9IGZhbHNlOwo+ IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikKPiAtCQl2ZGQgPSBlZHBfcGFuZWxf dmRkX29uKGludGVsX2RwKTsKPiAtCUk5MTVfU1RBVEVfV0FSTighdmRkLCAiW0VOQ09ERVI6JWQ6 JXNdIFZERCBhbHJlYWR5IHJlcXVlc3RlZCBvblxuIiwKPiAtCQkJZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAtCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp LT5iYXNlLmJhc2UubmFtZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGVkcF9wYW5lbF92ZGRf b2ZmX3N5bmMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9Cj4gLQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApOwo+IC0JdTMyIHBwOwo+IC0JaTkxNV9yZWdfdCBwcF9zdGF0X3JlZywgcHBfY3RybF9yZWc7 Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+ IC0JZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT53YW50X3BhbmVsX3ZkZCk7 Cj4gLQo+IC0JaWYgKCFlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApKQo+IC0JCXJldHVybjsK PiAtCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlR1cm5pbmcgW0VOQ09ERVI6JWQ6 JXNdIFZERCBvZmZcbiIsCj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAt CQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAtCj4gLQlwcCA9IGlsa19nZXRfcHBf Y29udHJvbChpbnRlbF9kcCk7Cj4gLQlwcCAmPSB+RURQX0ZPUkNFX1ZERDsKPiAtCj4gLQlwcF9j dHJsX3JlZyA9IF9wcF9jdHJsX3JlZyhpbnRlbF9kcCk7Cj4gLQlwcF9zdGF0X3JlZyA9IF9wcF9z dGF0X3JlZyhpbnRlbF9kcCk7Cj4gLQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0 cmxfcmVnLCBwcCk7Cj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxf cmVnKTsKPiAtCj4gLQkvKiBNYWtlIHN1cmUgc2VxdWVuY2VyIGlzIGlkbGUgYmVmb3JlIGFsbG93 aW5nIHN1YnNlcXVlbnQgYWN0aXZpdHkgKi8KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiUFBfU1RBVFVTOiAweCUwOHggUFBfQ09OVFJPTDogMHglMDh4XG4iLAo+IC0JCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksCj4gLQkJICAgIGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7Cj4gLQo+IC0JaWYgKChwcCAmIFBBTkVMX1BPV0VSX09O KSA9PSAwKQo+IC0JCWludGVsX2RwLT5wYW5lbF9wb3dlcl9vZmZfdGltZSA9IGt0aW1lX2dldF9i b290dGltZSgpOwo+IC0KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LAo+IC0J CQkJaW50ZWxfYXV4X3Bvd2VyX2RvbWFpbihkaWdfcG9ydCksCj4gLQkJCQlmZXRjaF9hbmRfemVy bygmaW50ZWxfZHAtPnZkZF93YWtlcmVmKSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGVkcF9w YW5lbF92ZGRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl9fd29yaykKPiAtewo+IC0Jc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCA9Cj4gLQkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayhf X3dvcmspLAo+IC0JCQkgICAgIHN0cnVjdCBpbnRlbF9kcCwgcGFuZWxfdmRkX3dvcmspOwo+IC0J aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQo+IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwg d2FrZXJlZikgewo+IC0JCWlmICghaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkKQo+IC0JCQllZHBf cGFuZWxfdmRkX29mZl9zeW5jKGludGVsX2RwKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgZWRwX3BhbmVsX3ZkZF9zY2hlZHVsZV9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiAtewo+IC0JdW5zaWduZWQgbG9uZyBkZWxheTsKPiAtCj4gLQkvKgo+IC0JICogUXVldWUgdGhl IHRpbWVyIHRvIGZpcmUgYSBsb25nIHRpbWUgZnJvbSBub3cgKHJlbGF0aXZlIHRvIHRoZSBwb3dl cgo+IC0JICogZG93biBkZWxheSkgdG8ga2VlcCB0aGUgcGFuZWwgcG93ZXIgdXAgYWNyb3NzIGEg c2VxdWVuY2Ugb2YKPiAtCSAqIG9wZXJhdGlvbnMuCj4gLQkgKi8KPiAtCWRlbGF5ID0gbXNlY3Nf dG9famlmZmllcyhpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkgKiA1KTsKPiAtCXNj aGVkdWxlX2RlbGF5ZWRfd29yaygmaW50ZWxfZHAtPnBhbmVsX3ZkZF93b3JrLCBkZWxheSk7Cj4g LX0KPiAtCj4gLS8qCj4gLSAqIE11c3QgYmUgcGFpcmVkIHdpdGggZWRwX3BhbmVsX3ZkZF9vbigp Lgo+IC0gKiBNdXN0IGhvbGQgcHBzX211dGV4IGFyb3VuZCB0aGUgd2hvbGUgb24vb2ZmIHNlcXVl bmNlLgo+IC0gKiBDYW4gYmUgbmVzdGVkIHdpdGggaW50ZWxfZWRwX3BhbmVsX3ZkZF97b24sb2Zm fSgpIGNhbGxzLgo+IC0gKi8KPiAtc3RhdGljIHZvaWQgZWRwX3BhbmVsX3ZkZF9vZmYoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzeW5jKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCj4gLQlsb2NrZGVw X2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCj4gLQlpZiAoIWludGVsX2Rw X2lzX2VkcChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCUk5MTVfU1RBVEVfV0FSTigh aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkLCAiW0VOQ09ERVI6JWQ6JXNdIFZERCBub3QgZm9yY2Vk IG9uIiwKPiAtCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwK PiAtCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFtZSk7Cj4gLQo+IC0J aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkID0gZmFsc2U7Cj4gLQo+IC0JaWYgKHN5bmMpCj4gLQkJ ZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7Cj4gLQllbHNlCj4gLQkJZWRwX3BhbmVs X3ZkZF9zY2hlZHVsZV9vZmYoaW50ZWxfZHApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBlZHBf cGFuZWxfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQl1MzIgcHA7 Cj4gLQlpOTE1X3JlZ190IHBwX2N0cmxfcmVnOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVs X2RwKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJU dXJuIFtFTkNPREVSOiVkOiVzXSBwYW5lbCBwb3dlciBvblxuIiwKPiAtCQkgICAgZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAtCQkgICAgZHBfdG9fZGlnX3Bv cnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFtZSk7Cj4gLQo+IC0JaWYgKGRybV9XQVJOKCZkZXZf cHJpdi0+ZHJtLCBlZHBfaGF2ZV9wYW5lbF9wb3dlcihpbnRlbF9kcCksCj4gLQkJICAgICAiW0VO Q09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIGFscmVhZHkgb25cbiIsCj4gLQkJICAgICBkcF90b19k aWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLAo+IC0JCSAgICAgZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFtZSkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXdh aXRfcGFuZWxfcG93ZXJfY3ljbGUoaW50ZWxfZHApOwo+IC0KPiAtCXBwX2N0cmxfcmVnID0gX3Bw X2N0cmxfcmVnKGludGVsX2RwKTsKPiAtCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2Rw KTsKPiAtCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKSB7Cj4gLQkJLyogSUxLIHdvcmthcm91bmQ6 IGRpc2FibGUgcmVzZXQgYXJvdW5kIHBvd2VyIHNlcXVlbmNlICovCj4gLQkJcHAgJj0gflBBTkVM X1BPV0VSX1JFU0VUOwo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywg cHApOwo+IC0JCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwo+ IC0JfQo+IC0KPiAtCXBwIHw9IFBBTkVMX1BPV0VSX09OOwo+IC0JaWYgKCFJU19HRU4oZGV2X3By aXYsIDUpKQo+IC0JCXBwIHw9IFBBTkVMX1BPV0VSX1JFU0VUOwo+IC0KPiAtCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4gLQo+IC0Jd2FpdF9wYW5lbF9vbihpbnRlbF9kcCk7 Cj4gLQlpbnRlbF9kcC0+bGFzdF9wb3dlcl9vbiA9IGppZmZpZXM7Cj4gLQo+IC0JaWYgKElTX0dF TihkZXZfcHJpdiwgNSkpIHsKPiAtCQlwcCB8PSBQQU5FTF9QT1dFUl9SRVNFVDsgLyogcmVzdG9y ZSBwYW5lbCByZXNldCBiaXQgKi8KPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3Ry bF9yZWcsIHBwKTsKPiAtCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxf cmVnKTsKPiAtCX0KPiAtfQo+IC0KPiAtdm9pZCBpbnRlbF9lZHBfcGFuZWxfb24oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQo+ IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+IC0JCXJldHVybjsKPiAtCj4gLQl3 aXRoX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKQo+IC0JCWVkcF9wYW5lbF9vbihpbnRlbF9k cCk7Cj4gLX0KPiAtCj4gLQo+IC1zdGF0aWMgdm9pZCBlZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gLQl1MzIgcHA7Cj4gLQlpOTE1 X3JlZ190IHBwX2N0cmxfcmVnOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2 LT5wcHNfbXV0ZXgpOwo+IC0KPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiAt CQlyZXR1cm47Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJUdXJuIFtFTkNP REVSOiVkOiVzXSBwYW5lbCBwb3dlciBvZmZcbiIsCj4gLQkJICAgIGRpZ19wb3J0LT5iYXNlLmJh c2UuYmFzZS5pZCwgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAtCj4gLQlkcm1fV0FSTigm ZGV2X3ByaXYtPmRybSwgIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCwKPiAtCQkgIk5lZWQgW0VO Q09ERVI6JWQ6JXNdIFZERCB0byB0dXJuIG9mZiBwYW5lbFxuIiwKPiAtCQkgZGlnX3BvcnQtPmJh c2UuYmFzZS5iYXNlLmlkLCBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+IC0KPiAtCXBwID0g aWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiAtCS8qIFdlIG5lZWQgdG8gc3dpdGNoIG9m ZiBwYW5lbCBwb3dlciBfYW5kXyBmb3JjZSB2ZGQsIGZvciBvdGhlcndpc2Ugc29tZQo+IC0JICog cGFuZWxzIGdldCB2ZXJ5IHVuaGFwcHkgYW5kIGNlYXNlIHRvIHdvcmsuICovCj4gLQlwcCAmPSB+ KFBBTkVMX1BPV0VSX09OIHwgUEFORUxfUE9XRVJfUkVTRVQgfCBFRFBfRk9SQ0VfVkREIHwKPiAt CQlFRFBfQkxDX0VOQUJMRSk7Cj4gLQo+IC0JcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50 ZWxfZHApOwo+IC0KPiAtCWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCA9IGZhbHNlOwo+ICsJICoK PiArCSAqIENQVCBQQ0ggaXMgcXVpdGUgZGlmZmVyZW50LCBoYXZpbmcgbWFueSBiaXRzIG1vdmVk Cj4gKwkgKiB0byB0aGUgVFJBTlNfRFBfQ1RMIHJlZ2lzdGVyIGluc3RlYWQuIFRoYXQKPiArCSAq IGNvbmZpZ3VyYXRpb24gaGFwcGVucyAob2RkbHkpIGluIGlsa19wY2hfZW5hYmxlCj4gKwkgKi8K PiAgCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiAtCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwo+ICsJLyogUHJlc2Vy dmUgdGhlIEJJT1MtY29tcHV0ZWQgZGV0ZWN0ZWQgYml0LiBUaGlzIGlzCj4gKwkgKiBzdXBwb3Nl ZCB0byBiZSByZWFkLW9ubHkuCj4gKwkgKi8KPiArCWludGVsX2RwLT5EUCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX0RFVEVDVEVEOwo+ICAKPiAt CXdhaXRfcGFuZWxfb2ZmKGludGVsX2RwKTsKPiAtCWludGVsX2RwLT5wYW5lbF9wb3dlcl9vZmZf dGltZSA9IGt0aW1lX2dldF9ib290dGltZSgpOwo+ICsJLyogSGFuZGxlIERQIGJpdHMgaW4gY29t bW9uIGJldHdlZW4gYWxsIHRocmVlIHJlZ2lzdGVyIGZvcm1hdHMgKi8KPiArCWludGVsX2RwLT5E UCB8PSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwo+ICsJaW50ZWxfZHAtPkRQ IHw9IERQX1BPUlRfV0lEVEgocGlwZV9jb25maWctPmxhbmVfY291bnQpOwo+ICAKPiAtCS8qIFdl IGdvdCBhIHJlZmVyZW5jZSB3aGVuIHdlIGVuYWJsZWQgdGhlIFZERC4gKi8KPiAtCWludGVsX2Rp c3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LAo+IC0JCQkJaW50ZWxfYXV4X3Bvd2VyX2RvbWFpbihk aWdfcG9ydCksCj4gLQkJCQlmZXRjaF9hbmRfemVybygmaW50ZWxfZHAtPnZkZF93YWtlcmVmKSk7 Cj4gLX0KPiArCS8qIFNwbGl0IG91dCB0aGUgSUJYL0NQVSB2cyBDUFQgc2V0dGluZ3MgKi8KPiAg Cj4gLXZvaWQgaW50ZWxfZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ IC17Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCWlmIChJU19JVllCUklER0UoZGV2 X3ByaXYpICYmIHBvcnQgPT0gUE9SVF9BKSB7Cj4gKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19QSFNZTkMpCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX0hT X0hJR0g7Cj4gKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZ TkMpCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7Cj4gKwkJaW50ZWxfZHAt PkRQIHw9IERQX0xJTktfVFJBSU5fT0ZGX0NQVDsKPiAgCj4gLQlpZiAoIWludGVsX2RwX2lzX2Vk cChpbnRlbF9kcCkpCj4gLQkJcmV0dXJuOwo+ICsJCWlmIChkcm1fZHBfZW5oYW5jZWRfZnJhbWVf Y2FwKGludGVsX2RwLT5kcGNkKSkKPiArCQkJaW50ZWxfZHAtPkRQIHw9IERQX0VOSEFOQ0VEX0ZS QU1JTkc7Cj4gIAo+IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikKPiAtCQllZHBf cGFuZWxfb2ZmKGludGVsX2RwKTsKPiAtfQo+ICsJCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NF TF9JVkIoY3J0Yy0+cGlwZSk7Cj4gKwl9IGVsc2UgaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSAm JiBwb3J0ICE9IFBPUlRfQSkgewo+ICsJCXUzMiB0cmFuc19kcDsKPiAgCj4gLS8qIEVuYWJsZSBi YWNrbGlnaHQgaW4gdGhlIHBhbmVsIHBvd2VyIGNvbnRyb2wuICovCj4gLXN0YXRpYyB2b2lkIF9p bnRlbF9lZHBfYmFja2xpZ2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Owo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwkJaW50ZWxfZHAtPkRQIHw9IERQX0xJ TktfVFJBSU5fT0ZGX0NQVDsKPiAgCj4gLQkvKgo+IC0JICogSWYgd2UgZW5hYmxlIHRoZSBiYWNr bGlnaHQgcmlnaHQgYXdheSBmb2xsb3dpbmcgYSBwYW5lbCBwb3dlcgo+IC0JICogb24sIHdlIG1h eSBzZWUgc2xpZ2h0IGZsaWNrZXIgYXMgdGhlIHBhbmVsIHN5bmNzIHdpdGggdGhlIGVEUAo+IC0J ICogbGluay4gIFNvIGRlbGF5IGEgYml0IHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2UgaXMgc29saWQg YmVmb3JlCj4gLQkgKiBhbGxvd2luZyBpdCB0byBhcHBlYXIuCj4gLQkgKi8KPiAtCXdhaXRfYmFj a2xpZ2h0X29uKGludGVsX2RwKTsKPiArCQl0cmFuc19kcCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIFRSQU5TX0RQX0NUTChjcnRjLT5waXBlKSk7Cj4gKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9m cmFtZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQo+ICsJCQl0cmFuc19kcCB8PSBUUkFOU19EUF9FTkhf RlJBTUlORzsKPiArCQllbHNlCj4gKwkJCXRyYW5zX2RwICY9IH5UUkFOU19EUF9FTkhfRlJBTUlO RzsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKGNydGMtPnBpcGUp LCB0cmFuc19kcCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmIChJU19HNFgoZGV2X3ByaXYpICYmIHBp cGVfY29uZmlnLT5saW1pdGVkX2NvbG9yX3JhbmdlKQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBf Q09MT1JfUkFOR0VfMTZfMjM1Owo+ICAKPiAtCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2Vy ZWYpIHsKPiAtCQlpOTE1X3JlZ190IHBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2Rw KTsKPiAtCQl1MzIgcHA7Cj4gKwkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19QSFNZTkMpCj4gKwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX0hTX0hJR0g7Cj4gKwkJ aWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCj4gKwkJCWlu dGVsX2RwLT5EUCB8PSBEUF9TWU5DX1ZTX0hJR0g7Cj4gKwkJaW50ZWxfZHAtPkRQIHw9IERQX0xJ TktfVFJBSU5fT0ZGOwo+ICAKPiAtCQlwcCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7 Cj4gLQkJcHAgfD0gRURQX0JMQ19FTkFCTEU7Cj4gKwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFt ZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURf RlJBTUlORzsKPiAgCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBw cCk7Cj4gLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4g KwkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCQlpbnRlbF9kcC0+RFAgfD0gRFBf UElQRV9TRUxfQ0hWKGNydGMtPnBpcGUpOwo+ICsJCWVsc2UKPiArCQkJaW50ZWxfZHAtPkRQIHw9 IERQX1BJUEVfU0VMKGNydGMtPnBpcGUpOwo+ICAJfQo+ICB9Cj4gIAo+ICsKPiAgLyogRW5hYmxl IGJhY2tsaWdodCBQV00gYW5kIGJhY2tsaWdodCBQUCBjb250cm9sLiAqLwo+ICB2b2lkIGludGVs X2VkcF9iYWNrbGlnaHRfb24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCj4gIAkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSkKPiBAQCAtMzQzMiwzMCArMjU2Niw2IEBAIHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9vbihj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCV9pbnRlbF9lZHBf YmFja2xpZ2h0X29uKGludGVsX2RwKTsKPiAgfQo+ICAKPiAtLyogRGlzYWJsZSBiYWNrbGlnaHQg aW4gdGhlIHBhbmVsIHBvd2VyIGNvbnRyb2wuICovCj4gLXN0YXRpYyB2b2lkIF9pbnRlbF9lZHBf YmFja2xpZ2h0X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCWlu dGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0KPiAtCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVs X2RwKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0Jd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJl Zikgewo+IC0JCWk5MTVfcmVnX3QgcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHAp Owo+IC0JCXUzMiBwcDsKPiAtCj4gLQkJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHAp Owo+IC0JCXBwICY9IH5FRFBfQkxDX0VOQUJMRTsKPiAtCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7Cj4gLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9w cml2LCBwcF9jdHJsX3JlZyk7Cj4gLQl9Cj4gLQo+IC0JaW50ZWxfZHAtPmxhc3RfYmFja2xpZ2h0 X29mZiA9IGppZmZpZXM7Cj4gLQllZHBfd2FpdF9iYWNrbGlnaHRfb2ZmKGludGVsX2RwKTsKPiAt fQo+IC0KPiAgLyogRGlzYWJsZSBiYWNrbGlnaHQgUFAgY29udHJvbCBhbmQgYmFja2xpZ2h0IFBX TS4gKi8KPiAgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29mZihjb25zdCBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCj4gIHsKPiBAQCAtMzQ3MSwzMyArMjU4MSw2 IEBAIHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9vZmYoY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQo+ICAJaW50ZWxfcGFuZWxfZGlzYWJsZV9iYWNrbGln aHQob2xkX2Nvbm5fc3RhdGUpOwo+ICB9Cj4gIAo+IC0vKgo+IC0gKiBIb29rIGZvciBjb250cm9s bGluZyB0aGUgcGFuZWwgcG93ZXIgY29udHJvbCBiYWNrbGlnaHQgdGhyb3VnaCB0aGUgYmxfcG93 ZXIKPiAtICogc3lzZnMgYXR0cmlidXRlLiBUYWtlIGNhcmUgdG8gaGFuZGxlIG11bHRpcGxlIGNh bGxzLgo+IC0gKi8KPiAtc3RhdGljIHZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9wb3dlcihzdHJ1 Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gLQkJCQkgICAgICBib29sIGVuYWJsZSkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGNvbm5lY3Rv ci0+YmFzZS5kZXYpOwo+IC0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGludGVsX2F0dGFj aGVkX2RwKGNvbm5lY3Rvcik7Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWJvb2wg aXNfZW5hYmxlZDsKPiAtCj4gLQlpc19lbmFibGVkID0gZmFsc2U7Cj4gLQl3aXRoX3Bwc19sb2Nr KGludGVsX2RwLCB3YWtlcmVmKQo+IC0JCWlzX2VuYWJsZWQgPSBpbGtfZ2V0X3BwX2NvbnRyb2wo aW50ZWxfZHApICYgRURQX0JMQ19FTkFCTEU7Cj4gLQlpZiAoaXNfZW5hYmxlZCA9PSBlbmFibGUp Cj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJwYW5lbCBwb3dl ciBjb250cm9sIGJhY2tsaWdodCAlc1xuIiwKPiAtCQkgICAgZW5hYmxlID8gImVuYWJsZSIgOiAi ZGlzYWJsZSIpOwo+IC0KPiAtCWlmIChlbmFibGUpCj4gLQkJX2ludGVsX2VkcF9iYWNrbGlnaHRf b24oaW50ZWxfZHApOwo+IC0JZWxzZQo+IC0JCV9pbnRlbF9lZHBfYmFja2xpZ2h0X29mZihpbnRl bF9kcCk7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGFzc2VydF9kcF9wb3J0KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsIGJvb2wgc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IEBAIC00NDk4LDEx MiArMzU4MSw2IEBAIHN0YXRpYyB2b2lkIGc0eF9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCWlsa19lZHBfcGxsX29uKGludGVsX2RwLCBwaXBlX2Nv bmZpZyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHZsdl9kZXRhY2hfcG93ZXJfc2VxdWVuY2Vy KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRl dik7Cj4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2RwLT5wcHNfcGlwZTsKPiAtCWk5MTVfcmVn X3QgcHBfb25fcmVnID0gUFBfT05fREVMQVlTKHBpcGUpOwo+IC0KPiAtCWRybV9XQVJOX09OKCZk ZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFKTsKPiAt Cj4gLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBpcGUgIT0gUElQRV9BICYmIHBp cGUgIT0gUElQRV9CKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZWRwX3BhbmVsX3ZkZF9vZmZfc3lu YyhpbnRlbF9kcCk7Cj4gLQo+IC0JLyoKPiAtCSAqIFZMViBzZWVtcyB0byBnZXQgY29uZnVzZWQg d2hlbiBtdWx0aXBsZSBwb3dlciBzZXF1ZW5jZXJzCj4gLQkgKiBoYXZlIHRoZSBzYW1lIHBvcnQg c2VsZWN0ZWQgKGV2ZW4gaWYgb25seSBvbmUgaGFzIHBvd2VyL3ZkZAo+IC0JICogZW5hYmxlZCku IFRoZSBmYWlsdXJlIG1hbmlmZXN0cyBhcyB2bHZfd2FpdF9wb3J0X3JlYWR5KCkgZmFpbGluZwo+ IC0JICogQ0hWIG9uIHRoZSBvdGhlciBoYW5kIGRvZXNuJ3Qgc2VlbSB0byBtaW5kIGhhdmluZyB0 aGUgc2FtZSBwb3J0Cj4gLQkgKiBzZWxlY3RlZCBpbiBtdWx0aXBsZSBwb3dlciBzZXF1ZW5jZXJz LCBidXQgbGV0J3MgY2xlYXIgdGhlCj4gLQkgKiBwb3J0IHNlbGVjdCBhbHdheXMgd2hlbiBsb2dp Y2FsbHkgZGlzY29ubmVjdGluZyBhIHBvd2VyIHNlcXVlbmNlcgo+IC0JICogZnJvbSBhIHBvcnQu Cj4gLQkgKi8KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAiZGV0YWNo aW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZyb20gW0VOQ09ERVI6JWQ6JXNdXG4iLAo+IC0J CSAgICBwaXBlX25hbWUocGlwZSksIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKPiAtCQkg ICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBwcF9vbl9yZWcsIDApOwo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9v bl9yZWcpOwo+IC0KPiAtCWludGVsX2RwLT5wcHNfcGlwZSA9IElOVkFMSURfUElQRTsKPiAtfQo+ IC0KPiAtc3RhdGljIHZvaWQgdmx2X3N0ZWFsX3Bvd2VyX3NlcXVlbmNlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICAgICBlbnVtIHBpcGUgcGlwZSkKPiAtewo+ IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRf aGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gLQo+IC0JZm9yX2VhY2hfaW50ZWxfZHAoJmRl dl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g ZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+IC0KPiAtCQlkcm1fV0FSTigmZGV2X3ByaXYtPmRy bSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBlID09IHBpcGUsCj4gLQkJCSAic3RlYWxpbmcgcGlwZSAl YyBwb3dlciBzZXF1ZW5jZXIgZnJvbSBhY3RpdmUgW0VOQ09ERVI6JWQ6JXNdXG4iLAo+IC0JCQkg cGlwZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCj4gLQkJCSBlbmNvZGVyLT5i YXNlLm5hbWUpOwo+IC0KPiAtCQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IHBpcGUpCj4gLQkJ CWNvbnRpbnVlOwo+IC0KPiAtCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJICAg ICJzdGVhbGluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmcm9tIFtFTkNPREVSOiVkOiVzXVxu IiwKPiAtCQkJICAgIHBpcGVfbmFtZShwaXBlKSwgZW5jb2Rlci0+YmFzZS5iYXNlLmlkLAo+IC0J CQkgICAgZW5jb2Rlci0+YmFzZS5uYW1lKTsKPiAtCj4gLQkJLyogbWFrZSBzdXJlIHZkZCBpcyBv ZmYgYmVmb3JlIHdlIHN0ZWFsIGl0ICovCj4gLQkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIo aW50ZWxfZHApOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2bHZfaW5pdF9wYW5lbF9w b3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gLQkJCQkJICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsKPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYp Owo+IC0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVy KTsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRl LT51YXBpLmNydGMpOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNf bXV0ZXgpOwo+IC0KPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+YWN0 aXZlX3BpcGUgIT0gSU5WQUxJRF9QSVBFKTsKPiAtCj4gLQlpZiAoaW50ZWxfZHAtPnBwc19waXBl ICE9IElOVkFMSURfUElQRSAmJgo+IC0JICAgIGludGVsX2RwLT5wcHNfcGlwZSAhPSBjcnRjLT5w aXBlKSB7Cj4gLQkJLyoKPiAtCQkgKiBJZiBhbm90aGVyIHBvd2VyIHNlcXVlbmNlciB3YXMgYmVp bmcgdXNlZCBvbiB0aGlzCj4gLQkJICogcG9ydCBwcmV2aW91c2x5IG1ha2Ugc3VyZSB0byB0dXJu IG9mZiB2ZGQgdGhlcmUgd2hpbGUKPiAtCQkgKiB3ZSBzdGlsbCBoYXZlIGNvbnRyb2wgb2YgaXQu Cj4gLQkJICovCj4gLQkJdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOwo+IC0J fQo+IC0KPiAtCS8qCj4gLQkgKiBXZSBtYXkgYmUgc3RlYWxpbmcgdGhlIHBvd2VyCj4gLQkgKiBz ZXF1ZW5jZXIgZnJvbSBhbm90aGVyIHBvcnQuCj4gLQkgKi8KPiAtCXZsdl9zdGVhbF9wb3dlcl9z ZXF1ZW5jZXIoZGV2X3ByaXYsIGNydGMtPnBpcGUpOwo+IC0KPiAtCWludGVsX2RwLT5hY3RpdmVf cGlwZSA9IGNydGMtPnBpcGU7Cj4gLQo+IC0JaWYgKCFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHAp KQo+IC0JCXJldHVybjsKPiAtCj4gLQkvKiBub3cgaXQncyBhbGwgb3VycyAqLwo+IC0JaW50ZWxf ZHAtPnBwc19waXBlID0gY3J0Yy0+cGlwZTsKPiAtCj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwKPiAtCQkgICAgImluaXRpYWxpemluZyBwaXBlICVjIHBvd2VyIHNlcXVlbmNlciBmb3Ig W0VOQ09ERVI6JWQ6JXNdXG4iLAo+IC0JCSAgICBwaXBlX25hbWUoaW50ZWxfZHAtPnBwc19waXBl KSwgZW5jb2Rlci0+YmFzZS5iYXNlLmlkLAo+IC0JCSAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOwo+ IC0KPiAtCS8qIGluaXQgcG93ZXIgc2VxdWVuY2VyIG9uIHRoaXMgcGlwZSBhbmQgcG9ydCAqLwo+ IC0JaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOwo+IC0JaW50 ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVl KTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgdmx2X3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVs X2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLAo+ICAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9j b25maWcsCj4gQEAgLTczMjQsMzEgKzYzMDEsNiBAQCB2b2lkIGludGVsX2RwX2VuY29kZXJfc2h1 dGRvd24oc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIpCj4gIAkJd2FpdF9wYW5l bF9wb3dlcl9jeWNsZShpbnRlbF9kcCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGludGVsX2Vk cF9wYW5lbF92ZGRfc2FuaXRpemUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0 KGludGVsX2RwKTsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211 dGV4KTsKPiAtCj4gLQlpZiAoIWVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCkpCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCS8qCj4gLQkgKiBUaGUgVkREIGJpdCBuZWVkcyBhIHBvd2VyIGRvbWFpbiBy ZWZlcmVuY2UsIHNvIGlmIHRoZSBiaXQgaXMKPiAtCSAqIGFscmVhZHkgZW5hYmxlZCB3aGVuIHdl IGJvb3Qgb3IgcmVzdW1lLCBncmFiIHRoaXMgcmVmZXJlbmNlIGFuZAo+IC0JICogc2NoZWR1bGUg YSB2ZGQgb2ZmLCBzbyB3ZSBkb24ndCBob2xkIG9uIHRvIHRoZSByZWZlcmVuY2UKPiAtCSAqIGlu ZGVmaW5pdGVseS4KPiAtCSAqLwo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJ ICAgICJWREQgbGVmdCBvbiBieSBCSU9TLCBhZGp1c3Rpbmcgc3RhdGUgdHJhY2tpbmdcbiIpOwo+ IC0JZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGludGVsX2RwLT52ZGRfd2FrZXJlZik7Cj4g LQlpbnRlbF9kcC0+dmRkX3dha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJp diwKPiAtCQkJCQkJCWludGVsX2F1eF9wb3dlcl9kb21haW4oZGlnX3BvcnQpKTsKPiAtCj4gLQll ZHBfcGFuZWxfdmRkX3NjaGVkdWxlX29mZihpbnRlbF9kcCk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBl bnVtIHBpcGUgdmx2X2FjdGl2ZV9waXBlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsK PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxf ZHApOwo+IEBAIC03NTU0LDE5ICs2NTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5j b2Rlcl9mdW5jcyBpbnRlbF9kcF9lbmNfZnVuY3MgPSB7Cj4gIAkuZGVzdHJveSA9IGludGVsX2Rw X2VuY29kZXJfZGVzdHJveSwKPiAgfTsKPiAgCj4gLXN0YXRpYyBib29sIGludGVsX2VkcF9oYXZl X3Bvd2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCWludGVsX3dha2VyZWZf dCB3YWtlcmVmOwo+IC0JYm9vbCBoYXZlX3Bvd2VyID0gZmFsc2U7Cj4gLQo+IC0Jd2l0aF9wcHNf bG9jayhpbnRlbF9kcCwgd2FrZXJlZikgewo+IC0JCWhhdmVfcG93ZXIgPSBlZHBfaGF2ZV9wYW5l bF9wb3dlcihpbnRlbF9kcCkgJiYKPiAtCQkJCQkJICBlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxf ZHApOwo+IC0JfQo+IC0KPiAtCXJldHVybiBoYXZlX3Bvd2VyOwo+IC19Cj4gLQo+ICBlbnVtIGly cXJldHVybgo+ICBpbnRlbF9kcF9ocGRfcHVsc2Uoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQsIGJvb2wgbG9uZ19ocGQpCj4gIHsKPiBAQCAtNzY3MCwyNzcgKzY2MDksNiBAQCBp bnRlbF9kcF9hZGRfcHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdAo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRl bF9kcF9pbml0X3BhbmVsX3Bvd2VyX3RpbWVzdGFtcHMoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiAtewo+IC0JaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jv b3R0aW1lKCk7Cj4gLQlpbnRlbF9kcC0+bGFzdF9wb3dlcl9vbiA9IGppZmZpZXM7Cj4gLQlpbnRl bF9kcC0+bGFzdF9iYWNrbGlnaHRfb2ZmID0gamlmZmllczsKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQKPiAtaW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwgc3RydWN0IGVkcF9wb3dlcl9zZXEgKnNlcSkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQl1MzIgcHBfb24sIHBw X29mZiwgcHBfY3RsOwo+IC0Jc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKPiAtCj4gLQlpbnRl bF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRlbF9kcCwgJnJlZ3MpOwo+IC0KPiAtCXBwX2N0bCA9IGls a19nZXRfcHBfY29udHJvbChpbnRlbF9kcCk7Cj4gLQo+IC0JLyogRW5zdXJlIFBQUyBpcyB1bmxv Y2tlZCAqLwo+IC0JaWYgKCFIQVNfRERJKGRldl9wcml2KSkKPiAtCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBwcF9jdGwpOwo+IC0KPiAtCXBwX29uID0gaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgcmVncy5wcF9vbik7Cj4gLQlwcF9vZmYgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWdzLnBwX29mZik7Cj4gLQo+IC0JLyogUHVsbCB0aW1pbmcgdmFsdWVzIG91dCBv ZiByZWdpc3RlcnMgKi8KPiAtCXNlcS0+dDFfdDMgPSBSRUdfRklFTERfR0VUKFBBTkVMX1BPV0VS X1VQX0RFTEFZX01BU0ssIHBwX29uKTsKPiAtCXNlcS0+dDggPSBSRUdfRklFTERfR0VUKFBBTkVM X0xJR0hUX09OX0RFTEFZX01BU0ssIHBwX29uKTsKPiAtCXNlcS0+dDkgPSBSRUdfRklFTERfR0VU KFBBTkVMX0xJR0hUX09GRl9ERUxBWV9NQVNLLCBwcF9vZmYpOwo+IC0Jc2VxLT50MTAgPSBSRUdf RklFTERfR0VUKFBBTkVMX1BPV0VSX0RPV05fREVMQVlfTUFTSywgcHBfb2ZmKTsKPiAtCj4gLQlp ZiAoaTkxNV9tbWlvX3JlZ192YWxpZChyZWdzLnBwX2RpdikpIHsKPiAtCQl1MzIgcHBfZGl2Owo+ IC0KPiAtCQlwcF9kaXYgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX2Rpdik7Cj4g LQo+IC0JCXNlcS0+dDExX3QxMiA9IFJFR19GSUVMRF9HRVQoUEFORUxfUE9XRVJfQ1lDTEVfREVM QVlfTUFTSywgcHBfZGl2KSAqIDEwMDA7Cj4gLQl9IGVsc2Ugewo+IC0JCXNlcS0+dDExX3QxMiA9 IFJFR19GSUVMRF9HRVQoQlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0ssIHBwX2N0bCkgKiAxMDAw Owo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1pbnRlbF9wcHNfZHVtcF9zdGF0ZShj b25zdCBjaGFyICpzdGF0ZV9uYW1lLCBjb25zdCBzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSAqc2VxKQo+ IC17Cj4gLQlEUk1fREVCVUdfS01TKCIlcyB0MV90MyAlZCB0OCAlZCB0OSAlZCB0MTAgJWQgdDEx X3QxMiAlZFxuIiwKPiAtCQkgICAgICBzdGF0ZV9uYW1lLAo+IC0JCSAgICAgIHNlcS0+dDFfdDMs IHNlcS0+dDgsIHNlcS0+dDksIHNlcS0+dDEwLCBzZXEtPnQxMV90MTIpOwo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZAo+IC1pbnRlbF9wcHNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBlZHBfcG93ZXJfc2VxIGh3Owo+IC0Jc3RydWN0IGVkcF9w b3dlcl9zZXEgKnN3ID0gJmludGVsX2RwLT5wcHNfZGVsYXlzOwo+IC0KPiAtCWludGVsX3Bwc19y ZWFkb3V0X2h3X3N0YXRlKGludGVsX2RwLCAmaHcpOwo+IC0KPiAtCWlmIChody50MV90MyAhPSBz dy0+dDFfdDMgfHwgaHcudDggIT0gc3ctPnQ4IHx8IGh3LnQ5ICE9IHN3LT50OSB8fAo+IC0JICAg IGh3LnQxMCAhPSBzdy0+dDEwIHx8IGh3LnQxMV90MTIgIT0gc3ctPnQxMV90MTIpIHsKPiAtCQlE Uk1fRVJST1IoIlBQUyBzdGF0ZSBtaXNtYXRjaFxuIik7Cj4gLQkJaW50ZWxfcHBzX2R1bXBfc3Rh dGUoInN3Iiwgc3cpOwo+IC0JCWludGVsX3Bwc19kdW1wX3N0YXRlKCJodyIsICZodyk7Cj4gLQl9 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkCj4gLWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2Vx dWVuY2VyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGVk cF9wb3dlcl9zZXEgY3VyLCB2YnQsIHNwZWMsCj4gLQkJKmZpbmFsID0gJmludGVsX2RwLT5wcHNf ZGVsYXlzOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgp Owo+IC0KPiAtCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQ/ICovCj4gLQlpZiAoZmluYWwtPnQxMV90 MTIgIT0gMCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUo aW50ZWxfZHAsICZjdXIpOwo+IC0KPiAtCWludGVsX3Bwc19kdW1wX3N0YXRlKCJjdXIiLCAmY3Vy KTsKPiAtCj4gLQl2YnQgPSBkZXZfcHJpdi0+dmJ0LmVkcC5wcHM7Cj4gLQkvKiBPbiBUb3NoaWJh IFNhdGVsbGl0ZSBQNTAtQy0xOEMgc3lzdGVtIHRoZSBWQlQgVDEyIGRlbGF5Cj4gLQkgKiBvZiA1 MDBtcyBhcHBlYXJzIHRvIGJlIHRvbyBzaG9ydC4gT2Nhc3Npb25hbGx5IHRoZSBwYW5lbAo+IC0J ICoganVzdCBmYWlscyB0byBwb3dlciBiYWNrIG9uLiBJbmNyZWFzaW5nIHRoZSBkZWxheSB0byA4 MDBtcwo+IC0JICogc2VlbXMgc3VmZmljaWVudCB0byBhdm9pZCB0aGlzIHByb2JsZW0uCj4gLQkg Ki8KPiAtCWlmIChkZXZfcHJpdi0+cXVpcmtzICYgUVVJUktfSU5DUkVBU0VfVDEyX0RFTEFZKSB7 Cj4gLQkJdmJ0LnQxMV90MTIgPSBtYXhfdCh1MTYsIHZidC50MTFfdDEyLCAxMzAwICogMTApOwo+ IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAgIkluY3JlYXNpbmcgVDEy IHBhbmVsIGRlbGF5IGFzIHBlciB0aGUgcXVpcmsgdG8gJWRcbiIsCj4gLQkJCSAgICB2YnQudDEx X3QxMik7Cj4gLQl9Cj4gLQkvKiBUMTFfVDEyIGRlbGF5IGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5 IGluIHVuaXRzIG9mIDEwMG1zLCBidXQgemVybwo+IC0JICogYmFzZWQgaW4gdGhlIGh3IChzbyB3 ZSBuZWVkIHRvIGFkZCAxMDAgbXMpLiBCdXQgdGhlIHN3IHZidAo+IC0JICogdGFibGUgbXVsdGlw bGllcyBpdCB3aXRoIDEwMDAgdG8gbWFrZSBpdCBpbiB1bml0cyBvZiAxMDB1c2VjLAo+IC0JICog dG9vLiAqLwo+IC0JdmJ0LnQxMV90MTIgKz0gMTAwICogMTA7Cj4gLQo+IC0JLyogVXBwZXIgbGlt aXRzIGZyb20gZURQIDEuMyBzcGVjLiBOb3RlIHRoYXQgd2UgdXNlIHRoZSBjbHVua3kgdW5pdHMg b2YKPiAtCSAqIG91ciBodyBoZXJlLCB3aGljaCBhcmUgYWxsIGluIDEwMHVzZWMuICovCj4gLQlz cGVjLnQxX3QzID0gMjEwICogMTA7Cj4gLQlzcGVjLnQ4ID0gNTAgKiAxMDsgLyogbm8gbGltaXQg Zm9yIHQ4LCB1c2UgdDcgaW5zdGVhZCAqLwo+IC0Jc3BlYy50OSA9IDUwICogMTA7IC8qIG5vIGxp bWl0IGZvciB0OSwgbWFrZSBpdCBzeW1tZXRyaWMgd2l0aCB0OCAqLwo+IC0Jc3BlYy50MTAgPSA1 MDAgKiAxMDsKPiAtCS8qIFRoaXMgb25lIGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5IGluIHVuaXRz IG9mIDEwMG1zLCBidXQgemVybwo+IC0JICogYmFzZWQgaW4gdGhlIGh3IChzbyB3ZSBuZWVkIHRv IGFkZCAxMDAgbXMpLiBCdXQgdGhlIHN3IHZidAo+IC0JICogdGFibGUgbXVsdGlwbGllcyBpdCB3 aXRoIDEwMDAgdG8gbWFrZSBpdCBpbiB1bml0cyBvZiAxMDB1c2VjLAo+IC0JICogdG9vLiAqLwo+ IC0Jc3BlYy50MTFfdDEyID0gKDUxMCArIDEwMCkgKiAxMDsKPiAtCj4gLQlpbnRlbF9wcHNfZHVt cF9zdGF0ZSgidmJ0IiwgJnZidCk7Cj4gLQo+IC0JLyogVXNlIHRoZSBtYXggb2YgdGhlIHJlZ2lz dGVyIHNldHRpbmdzIGFuZCB2YnQuIElmIGJvdGggYXJlCj4gLQkgKiB1bnNldCwgZmFsbCBiYWNr IHRvIHRoZSBzcGVjIGxpbWl0cy4gKi8KPiAtI2RlZmluZSBhc3NpZ25fZmluYWwoZmllbGQpCWZp bmFsLT5maWVsZCA9IChtYXgoY3VyLmZpZWxkLCB2YnQuZmllbGQpID09IDAgPyBcCj4gLQkJCQkg ICAgICAgc3BlYy5maWVsZCA6IFwKPiAtCQkJCSAgICAgICBtYXgoY3VyLmZpZWxkLCB2YnQuZmll bGQpKQo+IC0JYXNzaWduX2ZpbmFsKHQxX3QzKTsKPiAtCWFzc2lnbl9maW5hbCh0OCk7Cj4gLQlh c3NpZ25fZmluYWwodDkpOwo+IC0JYXNzaWduX2ZpbmFsKHQxMCk7Cj4gLQlhc3NpZ25fZmluYWwo dDExX3QxMik7Cj4gLSN1bmRlZiBhc3NpZ25fZmluYWwKPiAtCj4gLSNkZWZpbmUgZ2V0X2RlbGF5 KGZpZWxkKQkoRElWX1JPVU5EX1VQKGZpbmFsLT5maWVsZCwgMTApKQo+IC0JaW50ZWxfZHAtPnBh bmVsX3Bvd2VyX3VwX2RlbGF5ID0gZ2V0X2RlbGF5KHQxX3QzKTsKPiAtCWludGVsX2RwLT5iYWNr bGlnaHRfb25fZGVsYXkgPSBnZXRfZGVsYXkodDgpOwo+IC0JaW50ZWxfZHAtPmJhY2tsaWdodF9v ZmZfZGVsYXkgPSBnZXRfZGVsYXkodDkpOwo+IC0JaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25f ZGVsYXkgPSBnZXRfZGVsYXkodDEwKTsKPiAtCWludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9k ZWxheSA9IGdldF9kZWxheSh0MTFfdDEyKTsKPiAtI3VuZGVmIGdldF9kZWxheQo+IC0KPiAtCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICAicGFuZWwgcG93ZXIgdXAgZGVsYXkg JWQsIHBvd2VyIGRvd24gZGVsYXkgJWQsIHBvd2VyIGN5Y2xlIGRlbGF5ICVkXG4iLAo+IC0JCSAg ICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfdXBfZGVsYXksCj4gLQkJICAgIGludGVsX2RwLT5wYW5l bF9wb3dlcl9kb3duX2RlbGF5LAo+IC0JCSAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVf ZGVsYXkpOwo+IC0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiYmFja2xpZ2h0IG9u IGRlbGF5ICVkLCBvZmYgZGVsYXkgJWRcbiIsCj4gLQkJICAgIGludGVsX2RwLT5iYWNrbGlnaHRf b25fZGVsYXksCj4gLQkJICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5KTsKPiAtCj4g LQkvKgo+IC0JICogV2Ugb3ZlcnJpZGUgdGhlIEhXIGJhY2tsaWdodCBkZWxheXMgdG8gMSBiZWNh dXNlIHdlIGRvIG1hbnVhbCB3YWl0cwo+IC0JICogb24gdGhlbS4gRm9yIFQ4LCBldmVuIEJTcGVj IHJlY29tbWVuZHMgZG9pbmcgaXQuIEZvciBUOSwgaWYgd2UKPiAtCSAqIGRvbid0IGRvIHRoaXMs IHdlJ2xsIGVuZCB1cCB3YWl0aW5nIGZvciB0aGUgYmFja2xpZ2h0IG9mZiBkZWxheQo+IC0JICog dHdpY2U6IG9uY2Ugd2hlbiB3ZSBkbyB0aGUgbWFudWFsIHNsZWVwLCBhbmQgb25jZSB3aGVuIHdl IGRpc2FibGUKPiAtCSAqIHRoZSBwYW5lbCBhbmQgd2FpdCBmb3IgdGhlIFBQX1NUQVRVUyBiaXQg dG8gYmVjb21lIHplcm8uCj4gLQkgKi8KPiAtCWZpbmFsLT50OCA9IDE7Cj4gLQlmaW5hbC0+dDkg PSAxOwo+IC0KPiAtCS8qCj4gLQkgKiBIVyBoYXMgb25seSBhIDEwMG1zZWMgZ3JhbnVsYXJpdHkg Zm9yIHQxMV90MTIgc28gcm91bmQgaXQgdXAKPiAtCSAqIGFjY29yZGluZ2x5Lgo+IC0JICovCj4g LQlmaW5hbC0+dDExX3QxMiA9IHJvdW5kdXAoZmluYWwtPnQxMV90MTIsIDEwMCAqIDEwKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5j ZXJfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gLQkJCQkJICAgICAgYm9v bCBmb3JjZV9kaXNhYmxlX3ZkZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gLQl1MzIgcHBfb24sIHBwX29mZiwgcG9y dF9zZWwgPSAwOwo+IC0JaW50IGRpdiA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnJhd2Nsa19m cmVxIC8gMTAwMDsKPiAtCXN0cnVjdCBwcHNfcmVnaXN0ZXJzIHJlZ3M7Cj4gLQllbnVtIHBvcnQg cG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5wb3J0Owo+IC0JY29uc3Qgc3Ry dWN0IGVkcF9wb3dlcl9zZXEgKnNlcSA9ICZpbnRlbF9kcC0+cHBzX2RlbGF5czsKPiAtCj4gLQls b2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAtCj4gLQlpbnRlbF9w cHNfZ2V0X3JlZ2lzdGVycyhpbnRlbF9kcCwgJnJlZ3MpOwo+IC0KPiAtCS8qCj4gLQkgKiBPbiBz b21lIFZMViBtYWNoaW5lcyB0aGUgQklPUyBjYW4gbGVhdmUgdGhlIFZERAo+IC0JICogZW5hYmxl ZCBldmVuIG9uIHBvd2VyIHNlcXVlbmNlcnMgd2hpY2ggYXJlbid0Cj4gLQkgKiBob29rZWQgdXAg dG8gYW55IHBvcnQuIFRoaXMgd291bGQgbWVzcyB1cCB0aGUKPiAtCSAqIHBvd2VyIGRvbWFpbiB0 cmFja2luZyB0aGUgZmlyc3QgdGltZSB3ZSBwaWNrCj4gLQkgKiBvbmUgb2YgdGhlc2UgcG93ZXIg c2VxdWVuY2VycyBmb3IgdXNlIHNpbmNlCj4gLQkgKiBlZHBfcGFuZWxfdmRkX29uKCkgd291bGQg bm90aWNlIHRoYXQgdGhlIFZERCB3YXMKPiAtCSAqIGFscmVhZHkgb24gYW5kIHRoZXJlZm9yZSB3 b3VsZG4ndCBncmFiIHRoZSBwb3dlcgo+IC0JICogZG9tYWluIHJlZmVyZW5jZS4gRGlzYWJsZSBW REQgZmlyc3QgdG8gYXZvaWQgdGhpcy4KPiAtCSAqIFRoaXMgYWxzbyBhdm9pZHMgc3B1cmlvdXNs eSB0dXJuaW5nIHRoZSBWREQgb24gYXMKPiAtCSAqIHNvb24gYXMgdGhlIG5ldyBwb3dlciBzZXF1 ZW5jZXIgZ2V0cyBpbml0aWFsaXplZC4KPiAtCSAqLwo+IC0JaWYgKGZvcmNlX2Rpc2FibGVfdmRk KSB7Cj4gLQkJdTMyIHBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiAtCj4gLQkJ ZHJtX1dBUk4oJmRldl9wcml2LT5kcm0sIHBwICYgUEFORUxfUE9XRVJfT04sCj4gLQkJCSAiUGFu ZWwgcG93ZXIgYWxyZWFkeSBvblxuIik7Cj4gLQo+IC0JCWlmIChwcCAmIEVEUF9GT1JDRV9WREQp Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkJICAgICJWREQgYWxyZWFk eSBvbiwgZGlzYWJsaW5nIGZpcnN0XG4iKTsKPiAtCj4gLQkJcHAgJj0gfkVEUF9GT1JDRV9WREQ7 Cj4gLQo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWdzLnBwX2N0cmwsIHBwKTsKPiAt CX0KPiAtCj4gLQlwcF9vbiA9IFJFR19GSUVMRF9QUkVQKFBBTkVMX1BPV0VSX1VQX0RFTEFZX01B U0ssIHNlcS0+dDFfdDMpIHwKPiAtCQlSRUdfRklFTERfUFJFUChQQU5FTF9MSUdIVF9PTl9ERUxB WV9NQVNLLCBzZXEtPnQ4KTsKPiAtCXBwX29mZiA9IFJFR19GSUVMRF9QUkVQKFBBTkVMX0xJR0hU X09GRl9ERUxBWV9NQVNLLCBzZXEtPnQ5KSB8Cj4gLQkJUkVHX0ZJRUxEX1BSRVAoUEFORUxfUE9X RVJfRE9XTl9ERUxBWV9NQVNLLCBzZXEtPnQxMCk7Cj4gLQo+IC0JLyogSGFzd2VsbCBkb2Vzbid0 IGhhdmUgYW55IHBvcnQgc2VsZWN0aW9uIGJpdHMgZm9yIHRoZSBwYW5lbAo+IC0JICogcG93ZXIg c2VxdWVuY2VyIGFueSBtb3JlLiAqLwo+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8 IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gLQkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NF TEVDVF9WTFYocG9ydCk7Cj4gLQl9IGVsc2UgaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSB8fCBI QVNfUENIX0NQVChkZXZfcHJpdikpIHsKPiAtCQlzd2l0Y2ggKHBvcnQpIHsKPiAtCQljYXNlIFBP UlRfQToKPiAtCQkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9EUEE7Cj4gLQkJCWJyZWFr Owo+IC0JCWNhc2UgUE9SVF9DOgo+IC0JCQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX0RQ QzsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSBQT1JUX0Q6Cj4gLQkJCXBvcnRfc2VsID0gUEFORUxf UE9SVF9TRUxFQ1RfRFBEOwo+IC0JCQlicmVhazsKPiAtCQlkZWZhdWx0Ogo+IC0JCQlNSVNTSU5H X0NBU0UocG9ydCk7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlwcF9vbiB8PSBw b3J0X3NlbDsKPiAtCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9vbiwgcHBf b24pOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfb2ZmLCBwcF9vZmYpOwo+ IC0KPiAtCS8qCj4gLQkgKiBDb21wdXRlIHRoZSBkaXZpc29yIGZvciB0aGUgcHAgY2xvY2ssIHNp bXBseSBtYXRjaCB0aGUgQnNwZWMgZm9ybXVsYS4KPiAtCSAqLwo+IC0JaWYgKGk5MTVfbW1pb19y ZWdfdmFsaWQocmVncy5wcF9kaXYpKSB7Cj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl Z3MucHBfZGl2LAo+IC0JCQkgICAgICAgUkVHX0ZJRUxEX1BSRVAoUFBfUkVGRVJFTkNFX0RJVklE RVJfTUFTSywgKDEwMCAqIGRpdikgLyAyIC0gMSkgfCBSRUdfRklFTERfUFJFUChQQU5FTF9QT1dF Ul9DWUNMRV9ERUxBWV9NQVNLLCBESVZfUk9VTkRfVVAoc2VxLT50MTFfdDEyLCAxMDAwKSkpOwo+ IC0JfSBlbHNlIHsKPiAtCQl1MzIgcHBfY3RsOwo+IC0KPiAtCQlwcF9jdGwgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWdzLnBwX2N0cmwpOwo+IC0JCXBwX2N0bCAmPSB+QlhUX1BPV0VSX0NZ Q0xFX0RFTEFZX01BU0s7Cj4gLQkJcHBfY3RsIHw9IFJFR19GSUVMRF9QUkVQKEJYVF9QT1dFUl9D WUNMRV9ERUxBWV9NQVNLLCBESVZfUk9VTkRfVVAoc2VxLT50MTFfdDEyLCAxMDAwKSk7Cj4gLQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfY3RybCwgcHBfY3RsKTsKPiAtCX0KPiAt Cj4gLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkgICAgInBhbmVsIHBvd2VyIHNl cXVlbmNlciByZWdpc3RlciBzZXR0aW5nczogUFBfT04gJSN4LCBQUF9PRkYgJSN4LCBQUF9ESVYg JSN4XG4iLAo+IC0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29uKSwKPiAt CQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9vZmYpLAo+IC0JCSAgICBpOTE1 X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBfZGl2KSA/Cj4gLQkJICAgIGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZ3MucHBfZGl2KSA6Cj4gLQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWdzLnBwX2N0cmwpICYgQlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0spKTsKPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQgaW50ZWxfZHBfcHBzX2luaXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Cj4gLQo+IC0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJS WVZJRVcoZGV2X3ByaXYpKSB7Cj4gLQkJdmx2X2luaXRpYWxfcG93ZXJfc2VxdWVuY2VyX3NldHVw KGludGVsX2RwKTsKPiAtCX0gZWxzZSB7Cj4gLQkJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9z ZXF1ZW5jZXIoaW50ZWxfZHApOwo+IC0JCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVu Y2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwgZmFsc2UpOwo+IC0JfQo+IC19Cj4gLQo+ICAvKioKPiAg ICogaW50ZWxfZHBfc2V0X2RycnNfc3RhdGUgLSBwcm9ncmFtIHJlZ2lzdGVycyBmb3IgUlIgc3dp dGNoIHRvIHRha2UgZWZmZWN0Cj4gICAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oCj4gaW5kZXggNDI4MGEwOWZkOGZkLi5kMDdi Y2RlZTk2MzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oCj4g QEAgLTcwLDE1ICs3MCwxMSBAQCBlbnVtIGlycXJldHVybiBpbnRlbF9kcF9ocGRfcHVsc2Uoc3Ry dWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsCj4gIHZvaWQgaW50ZWxfZWRwX2JhY2ts aWdodF9vbihjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkJ ICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsKPiAgdm9p ZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29mZihjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqY29ubl9zdGF0ZSk7Cj4gLXZvaWQgaW50ZWxfZWRwX3BhbmVsX3ZkZF9vbihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKTsKPiAtdm9pZCBpbnRlbF9lZHBfcGFuZWxfb24oc3RydWN0IGludGVs X2RwICppbnRlbF9kcCk7Cj4gLXZvaWQgaW50ZWxfZWRwX3BhbmVsX29mZihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKTsKPiAgdm9pZCBpbnRlbF9kcF9tc3Rfc3VzcGVuZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lkIGludGVsX2RwX21zdF9yZXN1bWUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgaW50IGludGVsX2RwX21heF9saW5rX3Jh dGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIGludCBpbnRlbF9kcF9tYXhfbGFuZV9j b3VudChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiAgaW50IGludGVsX2RwX3JhdGVfc2Vs ZWN0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCByYXRlKTsKPiAtdm9pZCBpbnRlbF9w b3dlcl9zZXF1ZW5jZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK PiAgdTMyIGludGVsX2RwX3BhY2tfYXV4KGNvbnN0IHU4ICpzcmMsIGludCBzcmNfYnl0ZXMpOwo+ ICAKPiAgdm9pZCBpbnRlbF9lZHBfZHJyc19lbmFibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwKPiBAQCAtMTQ0LDYgKzE0MCw3IEBAIGJvb2wgaW50ZWxfZHBfaW5pdGlhbF9mYXN0c2V0X2No ZWNrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkJICAgIHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAgdm9pZCBpbnRlbF9kcF9zeW5jX3N0YXRlKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICtjb25zdCBzdHJ1Y3QgZHBsbCAqdmx2X2dldF9kcGxs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgCj4gIHZvaWQgaW50ZWxfZHBfY2hl Y2tfZnJsX3RyYWluaW5nKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICB2b2lkIGludGVs X2RwX3Bjb25fZHNjX2NvbmZpZ3VyZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44M2JkODNiM2UzYzQKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wcHMuYwo+IEBAIC0wLDAgKzEs MTMzNCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg Imk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCj4gKyNpbmNs dWRlICJpbnRlbF9kcC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcHBzLmgiCj4gKwo+ICtzdGF0aWMg dm9pZCB2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArCQkJCSAgICAgIGVudW0gcGlwZSBwaXBlKTsKPiArc3RhdGljIHZvaWQKPiAr aW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXIoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCk7Cj4gK3N0YXRpYyB2b2lkCj4gK2ludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVu Y2VyX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICsJCQkJCSAgICAgIGJv b2wgZm9yY2VfZGlzYWJsZV92ZGQpOwo+ICsKPiAraW50ZWxfd2FrZXJlZl90IHBwc19sb2NrKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdh a2VyZWY7Cj4gKwo+ICsJLyoKPiArCSAqIFNlZSBpbnRlbF9wb3dlcl9zZXF1ZW5jZXJfcmVzZXQo KSB3aHkgd2UgbmVlZAo+ICsJICogYSBwb3dlciBkb21haW4gcmVmZXJlbmNlIGhlcmUuCj4gKwkg Ki8KPiArCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJf RE9NQUlOX0RJU1BMQVlfQ09SRSk7Cj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHBzX211dGV4 KTsKPiArCj4gKwlyZXR1cm4gd2FrZXJlZjsKPiArfQo+ICsKPiAraW50ZWxfd2FrZXJlZl90IHBw c191bmxvY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50ZWxfd2FrZXJlZl90IHdha2Vy ZWYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOwo+ICsKPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBwc19tdXRleCk7 Cj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0RJU1BM QVlfQ09SRSwgd2FrZXJlZik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkCj4gK3Zsdl9wb3dlcl9zZXF1ZW5jZXJfa2ljayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1 KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBf dG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9kcC0+cHBz X3BpcGU7Cj4gKwlib29sIHBsbF9lbmFibGVkLCByZWxlYXNlX2NsX292ZXJyaWRlID0gZmFsc2U7 Cj4gKwllbnVtIGRwaW9fcGh5IHBoeSA9IERQSU9fUEhZKHBpcGUpOwo+ICsJZW51bSBkcGlvX2No YW5uZWwgY2ggPSB2bHZfcGlwZV90b19jaGFubmVsKHBpcGUpOwo+ICsJdTMyIERQOwo+ICsKPiAr CWlmIChkcm1fV0FSTigmZGV2X3ByaXYtPmRybSwKPiArCQkgICAgIGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BPUlRfRU4sCj4gKwkJICAgICAic2tp cHBpbmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIga2ljayBkdWUgdG8gW0VOQ09ERVI6JWQ6JXNd IGJlaW5nIGFjdGl2ZVxuIiwKPiArCQkgICAgIHBpcGVfbmFtZShwaXBlKSwgZGlnX3BvcnQtPmJh c2UuYmFzZS5iYXNlLmlkLAo+ICsJCSAgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKSkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJICAgICJr aWNraW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZvciBbRU5DT0RFUjolZDolc11cbiIsCj4g KwkJICAgIHBpcGVfbmFtZShwaXBlKSwgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJ CSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+ICsKPiArCS8qIFByZXNlcnZlIHRoZSBC SU9TLWNvbXB1dGVkIGRldGVjdGVkIGJpdC4gVGhpcyBpcwo+ICsJICogc3VwcG9zZWQgdG8gYmUg cmVhZC1vbmx5Lgo+ICsJICovCj4gKwlEUCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVs X2RwLT5vdXRwdXRfcmVnKSAmIERQX0RFVEVDVEVEOwo+ICsJRFAgfD0gRFBfVk9MVEFHRV8wXzQg fCBEUF9QUkVfRU1QSEFTSVNfMDsKPiArCURQIHw9IERQX1BPUlRfV0lEVEgoMSk7Cj4gKwlEUCB8 PSBEUF9MSU5LX1RSQUlOX1BBVF8xOwo+ICsKPiArCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSkKPiArCQlEUCB8PSBEUF9QSVBFX1NFTF9DSFYocGlwZSk7Cj4gKwllbHNlCj4gKwkJRFAgfD0g RFBfUElQRV9TRUwocGlwZSk7Cj4gKwo+ICsJcGxsX2VuYWJsZWQgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCBEUExMKHBpcGUpKSAmIERQTExfVkNPX0VOQUJMRTsKPiArCj4gKwkvKgo+ICsJICog VGhlIERQTEwgZm9yIHRoZSBwaXBlIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLgo+ ICsJICogU28gZW5hYmxlIHRlbXBvcmFyaWx5IGl0IGlmIGl0J3Mgbm90IGFscmVhZHkgZW5hYmxl ZC4KPiArCSAqLwo+ICsJaWYgKCFwbGxfZW5hYmxlZCkgewo+ICsJCXJlbGVhc2VfY2xfb3ZlcnJp ZGUgPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJgo+ICsJCQkhY2h2X3BoeV9wb3dlcmdhdGVf Y2goZGV2X3ByaXYsIHBoeSwgY2gsIHRydWUpOwo+ICsKPiArCQlpZiAodmx2X2ZvcmNlX3BsbF9v bihkZXZfcHJpdiwgcGlwZSwgdmx2X2dldF9kcGxsKGRldl9wcml2KSkpIHsKPiArCQkJZHJtX2Vy cigmZGV2X3ByaXYtPmRybSwKPiArCQkJCSJGYWlsZWQgdG8gZm9yY2Ugb24gcGxsIGZvciBwaXBl ICVjIVxuIiwKPiArCQkJCXBpcGVfbmFtZShwaXBlKSk7Cj4gKwkJCXJldHVybjsKPiArCQl9Cj4g Kwl9Cj4gKwo+ICsJLyoKPiArCSAqIFNpbWlsYXIgbWFnaWMgYXMgaW4gaW50ZWxfZHBfZW5hYmxl X3BvcnQoKS4KPiArCSAqIFdlIF9tdXN0XyBkbyB0aGlzIHBvcnQgZW5hYmxlICsgZGlzYWJsZSB0 cmljawo+ICsJICogdG8gbWFrZSB0aGlzIHBvd2VyIHNlcXVlbmNlciBsb2NrIG9udG8gdGhlIHBv cnQuCj4gKwkgKiBPdGhlcndpc2UgZXZlbiBWREQgZm9yY2UgYml0IHdvbid0IHdvcmsuCj4gKwkg Ki8KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFAp Owo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3Jl Zyk7Cj4gKwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVn LCBEUCB8IERQX1BPUlRfRU4pOwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBp bnRlbF9kcC0+b3V0cHV0X3JlZyk7Cj4gKwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGlu dGVsX2RwLT5vdXRwdXRfcmVnLCBEUCAmIH5EUF9QT1JUX0VOKTsKPiArCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOwo+ICsKPiArCWlmICghcGxs X2VuYWJsZWQpIHsKPiArCQl2bHZfZm9yY2VfcGxsX29mZihkZXZfcHJpdiwgcGlwZSk7Cj4gKwo+ ICsJCWlmIChyZWxlYXNlX2NsX292ZXJyaWRlKQo+ICsJCQljaHZfcGh5X3Bvd2VyZ2F0ZV9jaChk ZXZfcHJpdiwgcGh5LCBjaCwgZmFsc2UpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBw aXBlIHZsdl9maW5kX2ZyZWVfcHBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiArewo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gKwl1bnNpZ25lZCBpbnQg cGlwZXMgPSAoMSA8PCBQSVBFX0EpIHwgKDEgPDwgUElQRV9CKTsKPiArCj4gKwkvKgo+ICsJICog V2UgZG9uJ3QgaGF2ZSBwb3dlciBzZXF1ZW5jZXIgY3VycmVudGx5Lgo+ICsJICogUGljayBvbmUg dGhhdCdzIG5vdCB1c2VkIGJ5IG90aGVyIHBvcnRzLgo+ICsJICovCj4gKwlmb3JfZWFjaF9pbnRl bF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgewo+ICsJCXN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gKwo+ICsJCWlmIChlbmNvZGVyLT50 eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKPiArCQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5k cm0sCj4gKwkJCQkgICAgaW50ZWxfZHAtPmFjdGl2ZV9waXBlICE9IElOVkFMSURfUElQRSAmJgo+ ICsJCQkJICAgIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPQo+ICsJCQkJICAgIGludGVsX2RwLT5w cHNfcGlwZSk7Cj4gKwo+ICsJCQlpZiAoaW50ZWxfZHAtPnBwc19waXBlICE9IElOVkFMSURfUElQ RSkKPiArCQkJCXBpcGVzICY9IH4oMSA8PCBpbnRlbF9kcC0+cHBzX3BpcGUpOwo+ICsJCX0gZWxz ZSB7Cj4gKwkJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJICAgIGludGVsX2Rw LT5wcHNfcGlwZSAhPSBJTlZBTElEX1BJUEUpOwo+ICsKPiArCQkJaWYgKGludGVsX2RwLT5hY3Rp dmVfcGlwZSAhPSBJTlZBTElEX1BJUEUpCj4gKwkJCQlwaXBlcyAmPSB+KDEgPDwgaW50ZWxfZHAt PmFjdGl2ZV9waXBlKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHBpcGVzID09IDApCj4gKwkJ cmV0dXJuIElOVkFMSURfUElQRTsKPiArCj4gKwlyZXR1cm4gZmZzKHBpcGVzKSAtIDE7Cj4gK30K PiArCj4gK3N0YXRpYyBlbnVtIHBpcGUKPiArdmx2X3Bvd2VyX3NlcXVlbmNlcl9waXBlKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gKwllbnVtIHBpcGUg cGlwZTsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsK PiArCj4gKwkvKiBXZSBzaG91bGQgbmV2ZXIgbGFuZCBoZXJlIHdpdGggcmVndWxhciBEUCBwb3J0 cyAqLwo+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICFpbnRlbF9kcF9pc19lZHAoaW50 ZWxfZHApKTsKPiArCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPmFj dGl2ZV9waXBlICE9IElOVkFMSURfUElQRSAmJgo+ICsJCSAgICBpbnRlbF9kcC0+YWN0aXZlX3Bp cGUgIT0gaW50ZWxfZHAtPnBwc19waXBlKTsKPiArCj4gKwlpZiAoaW50ZWxfZHAtPnBwc19waXBl ICE9IElOVkFMSURfUElQRSkKPiArCQlyZXR1cm4gaW50ZWxfZHAtPnBwc19waXBlOwo+ICsKPiAr CXBpcGUgPSB2bHZfZmluZF9mcmVlX3BwcyhkZXZfcHJpdik7Cj4gKwo+ICsJLyoKPiArCSAqIERp ZG4ndCBmaW5kIG9uZS4gVGhpcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSB0aGVyZQo+ICsJICog YXJlIHR3byBwb3dlciBzZXF1ZW5jZXJzIGFuZCB1cCB0byB0d28gZURQIHBvcnRzLgo+ICsJICov Cj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBpcGUgPT0gSU5WQUxJRF9QSVBF KSkKPiArCQlwaXBlID0gUElQRV9BOwo+ICsKPiArCXZsdl9zdGVhbF9wb3dlcl9zZXF1ZW5jZXIo ZGV2X3ByaXYsIHBpcGUpOwo+ICsJaW50ZWxfZHAtPnBwc19waXBlID0gcGlwZTsKPiArCj4gKwlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkgICAgInBpY2tlZCBwaXBlICVjIHBvd2Vy IHNlcXVlbmNlciBmb3IgW0VOQ09ERVI6JWQ6JXNdXG4iLAo+ICsJCSAgICBwaXBlX25hbWUoaW50 ZWxfZHAtPnBwc19waXBlKSwKPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+ ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+ICsKPiArCS8qIGluaXQgcG93ZXIg c2VxdWVuY2VyIG9uIHRoaXMgcGlwZSBhbmQgcG9ydCAqLwo+ICsJaW50ZWxfZHBfaW5pdF9wYW5l bF9wb3dlcl9zZXF1ZW5jZXIoaW50ZWxfZHApOwo+ICsJaW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dl cl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCB0cnVlKTsKPiArCj4gKwkvKgo+ICsJICog RXZlbiB2ZGQgZm9yY2UgZG9lc24ndCB3b3JrIHVudGlsIHdlJ3ZlIG1hZGUKPiArCSAqIHRoZSBw b3dlciBzZXF1ZW5jZXIgbG9jayBpbiBvbiB0aGUgcG9ydC4KPiArCSAqLwo+ICsJdmx2X3Bvd2Vy X3NlcXVlbmNlcl9raWNrKGludGVsX2RwKTsKPiArCj4gKwlyZXR1cm4gaW50ZWxfZHAtPnBwc19w aXBlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2J4dF9wb3dlcl9zZXF1ZW5jZXJfaWR4KHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJaW50IGJhY2tsaWdodF9jb250 cm9sbGVyID0gZGV2X3ByaXYtPnZidC5iYWNrbGlnaHQuY29udHJvbGxlcjsKPiArCj4gKwlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwkvKiBXZSBzaG91 bGQgbmV2ZXIgbGFuZCBoZXJlIHdpdGggcmVndWxhciBEUCBwb3J0cyAqLwo+ICsJZHJtX1dBUk5f T04oJmRldl9wcml2LT5kcm0sICFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKTsKPiArCj4gKwlp ZiAoIWludGVsX2RwLT5wcHNfcmVzZXQpCj4gKwkJcmV0dXJuIGJhY2tsaWdodF9jb250cm9sbGVy Owo+ICsKPiArCWludGVsX2RwLT5wcHNfcmVzZXQgPSBmYWxzZTsKPiArCj4gKwkvKgo+ICsJICog T25seSB0aGUgSFcgbmVlZHMgdG8gYmUgcmVwcm9ncmFtbWVkLCB0aGUgU1cgc3RhdGUgaXMgZml4 ZWQgYW5kCj4gKwkgKiBoYXMgYmVlbiBzZXR1cCBkdXJpbmcgY29ubmVjdG9yIGluaXQuCj4gKwkg Ki8KPiArCWludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRl bF9kcCwgZmFsc2UpOwo+ICsKPiArCXJldHVybiBiYWNrbGlnaHRfY29udHJvbGxlcjsKPiArfQo+ ICsKPiArdHlwZWRlZiBib29sICgqdmx2X3BpcGVfY2hlY2spKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJICAgICAgIGVudW0gcGlwZSBwaXBlKTsKPiArCj4gK3N0YXRp YyBib29sIHZsdl9waXBlX2hhc19wcF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gKwkJCSAgICAgICBlbnVtIHBpcGUgcGlwZSkKPiArewo+ICsJcmV0dXJuIGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIFBQX1NUQVRVUyhwaXBlKSkgJiBQUF9PTjsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgdmx2X3BpcGVfaGFzX3ZkZF9vbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gKwkJCQllbnVtIHBpcGUgcGlwZSkKPiArewo+ICsJcmV0dXJuIGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIFBQX0NPTlRST0wocGlwZSkpICYgRURQX0ZPUkNFX1ZERDsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgdmx2X3BpcGVfYW55KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiArCQkJIGVudW0gcGlwZSBwaXBlKQo+ICt7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ ICsKPiArc3RhdGljIGVudW0gcGlwZQo+ICt2bHZfaW5pdGlhbF9wcHNfcGlwZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJICAgICBlbnVtIHBvcnQgcG9ydCwKPiArCQkg ICAgIHZsdl9waXBlX2NoZWNrIHBpcGVfY2hlY2spCj4gK3sKPiArCWVudW0gcGlwZSBwaXBlOwo+ ICsKPiArCWZvciAocGlwZSA9IFBJUEVfQTsgcGlwZSA8PSBQSVBFX0I7IHBpcGUrKykgewo+ICsJ CXUzMiBwb3J0X3NlbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBQX09OX0RFTEFZUyhwaXBl KSkgJgo+ICsJCQlQQU5FTF9QT1JUX1NFTEVDVF9NQVNLOwo+ICsKPiArCQlpZiAocG9ydF9zZWwg IT0gUEFORUxfUE9SVF9TRUxFQ1RfVkxWKHBvcnQpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJ aWYgKCFwaXBlX2NoZWNrKGRldl9wcml2LCBwaXBlKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CXJldHVybiBwaXBlOwo+ICsJfQo+ICsKPiArCXJldHVybiBJTlZBTElEX1BJUEU7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkCj4gK3Zsdl9pbml0aWFsX3Bvd2VyX3NlcXVlbmNlcl9zZXR1cChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICsJZW51bSBwb3J0 IHBvcnQgPSBkaWdfcG9ydC0+YmFzZS5wb3J0Owo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCS8qIHRyeSB0byBmaW5kIGEgcGlwZSB3aXRo IHRoaXMgcG9ydCBzZWxlY3RlZCAqLwo+ICsJLyogZmlyc3QgcGljayBvbmUgd2hlcmUgdGhlIHBh bmVsIGlzIG9uICovCj4gKwlpbnRlbF9kcC0+cHBzX3BpcGUgPSB2bHZfaW5pdGlhbF9wcHNfcGlw ZShkZXZfcHJpdiwgcG9ydCwKPiArCQkJCQkJICB2bHZfcGlwZV9oYXNfcHBfb24pOwo+ICsJLyog ZGlkbid0IGZpbmQgb25lPyBwaWNrIG9uZSB3aGVyZSB2ZGQgaXMgb24gKi8KPiArCWlmIChpbnRl bF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBFKQo+ICsJCWludGVsX2RwLT5wcHNfcGlwZSA9 IHZsdl9pbml0aWFsX3Bwc19waXBlKGRldl9wcml2LCBwb3J0LAo+ICsJCQkJCQkJICB2bHZfcGlw ZV9oYXNfdmRkX29uKTsKPiArCS8qIGRpZG4ndCBmaW5kIG9uZT8gcGljayBvbmUgd2l0aCBqdXN0 IHRoZSBjb3JyZWN0IHBvcnQgKi8KPiArCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJ RF9QSVBFKQo+ICsJCWludGVsX2RwLT5wcHNfcGlwZSA9IHZsdl9pbml0aWFsX3Bwc19waXBlKGRl dl9wcml2LCBwb3J0LAo+ICsJCQkJCQkJICB2bHZfcGlwZV9hbnkpOwo+ICsKPiArCS8qIGRpZG4n dCBmaW5kIG9uZT8ganVzdCBsZXQgdmx2X3Bvd2VyX3NlcXVlbmNlcl9waXBlKCkgcGljayBvbmUg d2hlbiBuZWVkZWQgKi8KPiArCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBF KSB7Cj4gKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCSAgICAibm8gaW5pdGlh bCBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXVxuIiwKPiArCQkJICAgIGRpZ19w b3J0LT5iYXNlLmJhc2UuYmFzZS5pZCwKPiArCQkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFt ZSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAo+ICsJCSAgICAiaW5pdGlhbCBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVSOiVkOiVzXTog cGlwZSAlY1xuIiwKPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJCSAg ICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUsCj4gKwkJICAgIHBpcGVfbmFtZShpbnRlbF9kcC0+ cHBzX3BpcGUpKTsKPiArCj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihp bnRlbF9kcCk7Cj4gKwlpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcl9yZWdpc3Rl cnMoaW50ZWxfZHAsIGZhbHNlKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9wb3dlcl9zZXF1ZW5j ZXJfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiArCj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9w cml2LT5kcm0sCj4gKwkJCSEoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwKPiArCQkJICBJU19D SEVSUllWSUVXKGRldl9wcml2KSB8fAo+ICsJCQkgIElTX0dFTjlfTFAoZGV2X3ByaXYpKSkpCj4g KwkJcmV0dXJuOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBjYW4ndCBncmFiIHBwc19tdXRleCBoZXJl IGR1ZSB0byBkZWFkbG9jayB3aXRoIHBvd2VyX2RvbWFpbgo+ICsJICogbXV0ZXggd2hlbiBwb3dl cl9kb21haW4gZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBwcHNfbXV0ZXguCj4g KwkgKiBUaGF0IGFsc28gbWVhbnMgdGhhdCBpbiBvcmRlciB0byB1c2UgcHBzX3BpcGUgdGhlIGNv ZGUgbmVlZHMgdG8KPiArCSAqIGhvbGQgYm90aCBhIHBvd2VyIGRvbWFpbiByZWZlcmVuY2UgYW5k IHBwc19tdXRleCwgYW5kIHRoZSBwb3dlciBkb21haW4KPiArCSAqIHJlZmVyZW5jZSBnZXQvcHV0 IG11c3QgYmUgZG9uZSB3aGlsZSBfbm90XyBob2xkaW5nIHBwc19tdXRleC4KPiArCSAqIHBwc197 bG9jayx1bmxvY2t9KCkgZG8gdGhlc2Ugc3RlcHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIsIHNvIG9u ZQo+ICsJICogc2hvdWxkIHVzZSB0aGVtIGFsd2F5cy4KPiArCSAqLwo+ICsKPiArCWZvcl9lYWNo X2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKPiArCj4gKwkJZHJtX1dBUk5f T04oJmRldl9wcml2LT5kcm0sCj4gKwkJCSAgICBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgIT0gSU5W QUxJRF9QSVBFKTsKPiArCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VE UCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChJU19HRU45X0xQKGRldl9wcml2KSkKPiAr CQkJaW50ZWxfZHAtPnBwc19yZXNldCA9IHRydWU7Cj4gKwkJZWxzZQo+ICsJCQlpbnRlbF9kcC0+ cHBzX3BpcGUgPSBJTlZBTElEX1BJUEU7Cj4gKwl9Cj4gK30KPiArCj4gK3N0cnVjdCBwcHNfcmVn aXN0ZXJzIHsKPiArCWk5MTVfcmVnX3QgcHBfY3RybDsKPiArCWk5MTVfcmVnX3QgcHBfc3RhdDsK PiArCWk5MTVfcmVnX3QgcHBfb247Cj4gKwlpOTE1X3JlZ190IHBwX29mZjsKPiArCWk5MTVfcmVn X3QgcHBfZGl2Owo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgaW50ZWxfcHBzX2dldF9yZWdpc3Rl cnMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiArCQkJCSAgICBzdHJ1Y3QgcHBzX3JlZ2lz dGVycyAqcmVncykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwlpbnQgcHBzX2lkeCA9IDA7Cj4gKwo+ICsJbWVtc2V0 KHJlZ3MsIDAsIHNpemVvZigqcmVncykpOwo+ICsKPiArCWlmIChJU19HRU45X0xQKGRldl9wcml2 KSkKPiArCQlwcHNfaWR4ID0gYnh0X3Bvd2VyX3NlcXVlbmNlcl9pZHgoaW50ZWxfZHApOwo+ICsJ ZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJp dikpCj4gKwkJcHBzX2lkeCA9IHZsdl9wb3dlcl9zZXF1ZW5jZXJfcGlwZShpbnRlbF9kcCk7Cj4g Kwo+ICsJcmVncy0+cHBfY3RybCA9IFBQX0NPTlRST0wocHBzX2lkeCk7Cj4gKwlyZWdzLT5wcF9z dGF0ID0gUFBfU1RBVFVTKHBwc19pZHgpOwo+ICsJcmVncy0+cHBfb24gPSBQUF9PTl9ERUxBWVMo cHBzX2lkeCk7Cj4gKwlyZWdzLT5wcF9vZmYgPSBQUF9PRkZfREVMQVlTKHBwc19pZHgpOwo+ICsK PiArCS8qIEN5Y2xlIGRlbGF5IG1vdmVkIGZyb20gUFBfRElWSVNPUiB0byBQUF9DT05UUk9MICov Cj4gKwlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikgfHwgSU5URUxfUENIX1RZUEUoZGV2X3ByaXYp ID49IFBDSF9DTlApCj4gKwkJcmVncy0+cHBfZGl2ID0gSU5WQUxJRF9NTUlPX1JFRzsKPiArCWVs c2UKPiArCQlyZWdzLT5wcF9kaXYgPSBQUF9ESVZJU09SKHBwc19pZHgpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaTkxNV9yZWdfdAo+ICtfcHBfY3RybF9yZWcoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiArewo+ICsJc3RydWN0IHBwc19yZWdpc3RlcnMgcmVnczsKPiArCj4gKwlpbnRlbF9wcHNf Z2V0X3JlZ2lzdGVycyhpbnRlbF9kcCwgJnJlZ3MpOwo+ICsKPiArCXJldHVybiByZWdzLnBwX2N0 cmw7Cj4gK30KPiArCj4gK3N0YXRpYyBpOTE1X3JlZ190Cj4gK19wcF9zdGF0X3JlZyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgcHBzX3JlZ2lzdGVycyByZWdzOwo+ ICsKPiArCWludGVsX3Bwc19nZXRfcmVnaXN0ZXJzKGludGVsX2RwLCAmcmVncyk7Cj4gKwo+ICsJ cmV0dXJuIHJlZ3MucHBfc3RhdDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZWRwX2hhdmVfcGFu ZWxfcG93ZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICsJbG9j a2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJaWYgKChJU19W QUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgJiYKPiArCSAg ICBpbnRlbF9kcC0+cHBzX3BpcGUgPT0gSU5WQUxJRF9QSVBFKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlyZXR1cm4gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIF9wcF9zdGF0X3JlZyhpbnRl bF9kcCkpICYgUFBfT04pICE9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGVkcF9oYXZlX3Bh bmVsX3ZkZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCj4gKwlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlpZiAoKElTX1ZB TExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAmJgo+ICsJICAg IGludGVsX2RwLT5wcHNfcGlwZSA9PSBJTlZBTElEX1BJUEUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsKPiArCXJldHVybiBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxf ZHApKSAmIEVEUF9GT1JDRV9WREQ7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZHBfY2hlY2tfZWRw KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCWlmICghaW50ZWxf ZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKCFlZHBfaGF2ZV9w YW5lbF9wb3dlcihpbnRlbF9kcCkgJiYgIWVkcF9oYXZlX3BhbmVsX3ZkZChpbnRlbF9kcCkpIHsK PiArCQlkcm1fV0FSTigmZGV2X3ByaXYtPmRybSwgMSwKPiArCQkJICJlRFAgcG93ZXJlZCBvZmYg d2hpbGUgYXR0ZW1wdGluZyBhdXggY2hhbm5lbCBjb21tdW5pY2F0aW9uLlxuIik7Cj4gKwkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTdGF0dXMgMHglMDh4IENvbnRyb2wgMHglMDh4XG4i LAo+ICsJCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX3N0YXRfcmVnKGludGVsX2Rw KSksCj4gKwkJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBfcHBfY3RybF9yZWcoaW50ZWxf ZHApKSk7Cj4gKwl9Cj4gK30KPiArCj4gKyNkZWZpbmUgSURMRV9PTl9NQVNLCQkoUFBfT04gfCBQ UF9TRVFVRU5DRV9NQVNLIHwgMCAgICAgICAgICAgICAgICAgICAgIHwgUFBfU0VRVUVOQ0VfU1RB VEVfTUFTSykKPiArI2RlZmluZSBJRExFX09OX1ZBTFVFICAgCShQUF9PTiB8IFBQX1NFUVVFTkNF X05PTkUgfCAwICAgICAgICAgICAgICAgICAgICAgfCBQUF9TRVFVRU5DRV9TVEFURV9PTl9JRExF KQo+ICsKPiArI2RlZmluZSBJRExFX09GRl9NQVNLCQkoUFBfT04gfCBQUF9TRVFVRU5DRV9NQVNL IHwgMCAgICAgICAgICAgICAgICAgICAgIHwgMCkKPiArI2RlZmluZSBJRExFX09GRl9WQUxVRQkJ KDAgICAgIHwgUFBfU0VRVUVOQ0VfTk9ORSB8IDAgICAgICAgICAgICAgICAgICAgICB8IDApCj4g Kwo+ICsjZGVmaW5lIElETEVfQ1lDTEVfTUFTSwkJKFBQX09OIHwgUFBfU0VRVUVOQ0VfTUFTSyB8 IFBQX0NZQ0xFX0RFTEFZX0FDVElWRSB8IFBQX1NFUVVFTkNFX1NUQVRFX01BU0spCj4gKyNkZWZp bmUgSURMRV9DWUNMRV9WQUxVRQkoMCAgICAgfCBQUF9TRVFVRU5DRV9OT05FIHwgMCAgICAgICAg ICAgICAgICAgICAgIHwgUFBfU0VRVUVOQ0VfU1RBVEVfT0ZGX0lETEUpCj4gKwo+ICtzdGF0aWMg dm9pZCBpbnRlbF9wcHNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ ICsKPiArc3RhdGljIHZvaWQgd2FpdF9wYW5lbF9zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwKPiArCQkJCSAgICAgICB1MzIgbWFzaywKPiArCQkJCSAgICAgICB1MzIgdmFsdWUpCj4g K3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOwo+ICsJaTkxNV9yZWdfdCBwcF9zdGF0X3JlZywgcHBfY3RybF9yZWc7Cj4gKwo+ICsJ bG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJaW50ZWxf cHBzX3ZlcmlmeV9zdGF0ZShpbnRlbF9kcCk7Cj4gKwo+ICsJcHBfc3RhdF9yZWcgPSBfcHBfc3Rh dF9yZWcoaW50ZWxfZHApOwo+ICsJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHAp Owo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCSAgICAibWFzayAlMDh4 IHZhbHVlICUwOHggc3RhdHVzICUwOHggY29udHJvbCAlMDh4XG4iLAo+ICsJCSAgICBtYXNrLCB2 YWx1ZSwKPiArCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfc3RhdF9yZWcpLAo+ICsJ CSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZykpOwo+ICsKPiArCWlmIChp bnRlbF9kZV93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwgcHBfc3RhdF9yZWcsCj4gKwkJCQkg ICAgICAgbWFzaywgdmFsdWUsIDUwMDApKQo+ICsJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4g KwkJCSJQYW5lbCBzdGF0dXMgdGltZW91dDogc3RhdHVzICUwOHggY29udHJvbCAlMDh4XG4iLAo+ ICsJCQlpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBwcF9zdGF0X3JlZyksCj4gKwkJCWludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKSk7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sICJXYWl0IGNvbXBsZXRlXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgd2Fp dF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBvblxuIik7Cj4gKwl3YWl0 X3BhbmVsX3N0YXR1cyhpbnRlbF9kcCwgSURMRV9PTl9NQVNLLCBJRExFX09OX1ZBTFVFKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgd2FpdF9wYW5lbF9vZmYoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBkcF90b19pOTE1 KGludGVsX2RwKTsKPiArCj4gKwlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiV2FpdCBmb3IgcGFu ZWwgcG93ZXIgb2ZmIHRpbWVcbiIpOwo+ICsJd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElE TEVfT0ZGX01BU0ssIElETEVfT0ZGX1ZBTFVFKTsKPiArfQo+ICsKPiArdm9pZCB3YWl0X3BhbmVs X3Bvd2VyX2N5Y2xlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwlrdGltZV90 IHBhbmVsX3Bvd2VyX29uX3RpbWU7Cj4gKwlzNjQgcGFuZWxfcG93ZXJfb2ZmX2R1cmF0aW9uOwo+ ICsKPiArCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJXYWl0IGZvciBwYW5lbCBwb3dlciBjeWNs ZVxuIik7Cj4gKwo+ICsJLyogdGFrZSB0aGUgZGlmZmVyZW5jZSBvZiBjdXJycmVudCB0aW1lIGFu ZCBwYW5lbCBwb3dlciBvZmYgdGltZQo+ICsJICogYW5kIHRoZW4gbWFrZSBwYW5lbCB3YWl0IGZv ciB0MTFfdDEyIGlmIG5lZWRlZC4gKi8KPiArCXBhbmVsX3Bvd2VyX29uX3RpbWUgPSBrdGltZV9n ZXRfYm9vdHRpbWUoKTsKPiArCXBhbmVsX3Bvd2VyX29mZl9kdXJhdGlvbiA9IGt0aW1lX21zX2Rl bHRhKHBhbmVsX3Bvd2VyX29uX3RpbWUsIGludGVsX2RwLT5wYW5lbF9wb3dlcl9vZmZfdGltZSk7 Cj4gKwo+ICsJLyogV2hlbiB3ZSBkaXNhYmxlIHRoZSBWREQgb3ZlcnJpZGUgYml0IGxhc3Qgd2Ug aGF2ZSB0byBkbyB0aGUgbWFudWFsCj4gKwkgKiB3YWl0LiAqLwo+ICsJaWYgKHBhbmVsX3Bvd2Vy X29mZl9kdXJhdGlvbiA8IChzNjQpaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xlX2RlbGF5KQo+ ICsJCXdhaXRfcmVtYWluaW5nX21zX2Zyb21famlmZmllcyhqaWZmaWVzLAo+ICsJCQkJICAgICAg IGludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSAtIHBhbmVsX3Bvd2VyX29mZl9kdXJh dGlvbik7Cj4gKwo+ICsJd2FpdF9wYW5lbF9zdGF0dXMoaW50ZWxfZHAsIElETEVfQ1lDTEVfTUFT SywgSURMRV9DWUNMRV9WQUxVRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHdhaXRfYmFja2xp Z2h0X29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXdhaXRfcmVtYWluaW5n X21zX2Zyb21famlmZmllcyhpbnRlbF9kcC0+bGFzdF9wb3dlcl9vbiwKPiArCQkJCSAgICAgICBp bnRlbF9kcC0+YmFja2xpZ2h0X29uX2RlbGF5KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZWRw X3dhaXRfYmFja2xpZ2h0X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwl3 YWl0X3JlbWFpbmluZ19tc19mcm9tX2ppZmZpZXMoaW50ZWxfZHAtPmxhc3RfYmFja2xpZ2h0X29m ZiwKPiArCQkJCSAgICAgICBpbnRlbF9kcC0+YmFja2xpZ2h0X29mZl9kZWxheSk7Cj4gK30KPiAr Cj4gKy8qIFJlYWQgdGhlIGN1cnJlbnQgcHBfY29udHJvbCB2YWx1ZSwgdW5sb2NraW5nIHRoZSBy ZWdpc3RlciBpZiBpdAo+ICsgKiBpcyBsb2NrZWQKPiArICovCj4gKwo+ICtzdGF0aWMgIHUzMiBp bGtfZ2V0X3BwX2NvbnRyb2woc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4g Kwl1MzIgY29udHJvbDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBz X211dGV4KTsKPiArCj4gKwljb250cm9sID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgX3BwX2N0 cmxfcmVnKGludGVsX2RwKSk7Cj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICFI QVNfRERJKGRldl9wcml2KSAmJgo+ICsJCQkoY29udHJvbCAmIFBBTkVMX1VOTE9DS19NQVNLKSAh PSBQQU5FTF9VTkxPQ0tfUkVHUykpIHsKPiArCQljb250cm9sICY9IH5QQU5FTF9VTkxPQ0tfTUFT SzsKPiArCQljb250cm9sIHw9IFBBTkVMX1VOTE9DS19SRUdTOwo+ICsJfQo+ICsJcmV0dXJuIGNv bnRyb2w7Cj4gK30KPiArCj4gKy8qCj4gKyAqIE11c3QgYmUgcGFpcmVkIHdpdGggZWRwX3BhbmVs X3ZkZF9vZmYoKS4KPiArICogTXVzdCBob2xkIHBwc19tdXRleCBhcm91bmQgdGhlIHdob2xlIG9u L29mZiBzZXF1ZW5jZS4KPiArICogQ2FuIGJlIG5lc3RlZCB3aXRoIGludGVsX2VkcF9wYW5lbF92 ZGRfe29uLG9mZn0oKSBjYWxscy4KPiArICovCj4gK2Jvb2wgZWRwX3BhbmVsX3ZkZF9vbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICsJdTMyIHBwOwo+ ICsJaTkxNV9yZWdfdCBwcF9zdGF0X3JlZywgcHBfY3RybF9yZWc7Cj4gKwlib29sIG5lZWRfdG9f ZGlzYWJsZSA9ICFpbnRlbF9kcC0+d2FudF9wYW5lbF92ZGQ7Cj4gKwo+ICsJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJaWYgKCFpbnRlbF9kcF9pc19l ZHAoaW50ZWxfZHApKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwljYW5jZWxfZGVsYXllZF93 b3JrKCZpbnRlbF9kcC0+cGFuZWxfdmRkX3dvcmspOwo+ICsJaW50ZWxfZHAtPndhbnRfcGFuZWxf dmRkID0gdHJ1ZTsKPiArCj4gKwlpZiAoZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKSkKPiAr CQlyZXR1cm4gbmVlZF90b19kaXNhYmxlOwo+ICsKPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ ZHJtLCBpbnRlbF9kcC0+dmRkX3dha2VyZWYpOwo+ICsJaW50ZWxfZHAtPnZkZF93YWtlcmVmID0g aW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsCj4gKwkJCQkJCQlpbnRlbF9hdXhfcG93 ZXJfZG9tYWluKGRpZ19wb3J0KSk7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s ICJUdXJuaW5nIFtFTkNPREVSOiVkOiVzXSBWREQgb25cbiIsCj4gKwkJICAgIGRpZ19wb3J0LT5i YXNlLmJhc2UuYmFzZS5pZCwKPiArCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiAr Cj4gKwlpZiAoIWVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSkKPiArCQl3YWl0X3BhbmVs X3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsKPiArCj4gKwlwcCA9IGlsa19nZXRfcHBfY29udHJvbChp bnRlbF9kcCk7Cj4gKwlwcCB8PSBFRFBfRk9SQ0VfVkREOwo+ICsKPiArCXBwX3N0YXRfcmVnID0g X3BwX3N0YXRfcmVnKGludGVsX2RwKTsKPiArCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGlu dGVsX2RwKTsKPiArCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBw KTsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwo+ICsJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQUF9TVEFUVVM6IDB4JTA4eCBQUF9DT05UUk9M OiAweCUwOHhcbiIsCj4gKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVn KSwKPiArCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpKTsKPiArCS8q Cj4gKwkgKiBJZiB0aGUgcGFuZWwgd2Fzbid0IG9uLCBkZWxheSBiZWZvcmUgYWNjZXNzaW5nIGF1 eCBjaGFubmVsCj4gKwkgKi8KPiArCWlmICghZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHAp KSB7Cj4gKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCSAgICAiW0VOQ09ERVI6 JWQ6JXNdIHBhbmVsIHBvd2VyIHdhc24ndCBlbmFibGVkXG4iLAo+ICsJCQkgICAgZGlnX3BvcnQt PmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJCQkgICAgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsK PiArCQltc2xlZXAoaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX3VwX2RlbGF5KTsKPiArCX0KPiArCj4g KwlyZXR1cm4gbmVlZF90b19kaXNhYmxlOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBNdXN0IGJlIHBh aXJlZCB3aXRoIGludGVsX2VkcF9wYW5lbF92ZGRfb2ZmKCkgb3IKPiArICogaW50ZWxfZWRwX3Bh bmVsX29mZigpLgo+ICsgKiBOZXN0ZWQgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGFyZSBub3Qg YWxsb3dlZCBzaW5jZQo+ICsgKiB3ZSBkcm9wIHRoZSBsb2NrLiBDYWxsZXIgbXVzdCB1c2Ugc29t ZSBoaWdoZXIgbGV2ZWwKPiArICogbG9ja2luZyB0byBwcmV2ZW50IG5lc3RlZCBjYWxscyBmcm9t IG90aGVyIHRocmVhZHMuCj4gKyAqLwo+ICt2b2lkIGludGVsX2VkcF9wYW5lbF92ZGRfb24oc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7 Cj4gKwlib29sIHZkZDsKPiArCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4g KwkJcmV0dXJuOwo+ICsKPiArCXZkZCA9IGZhbHNlOwo+ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9k cCwgd2FrZXJlZikKPiArCQl2ZGQgPSBlZHBfcGFuZWxfdmRkX29uKGludGVsX2RwKTsKPiArCUk5 MTVfU1RBVEVfV0FSTighdmRkLCAiW0VOQ09ERVI6JWQ6JXNdIFZERCBhbHJlYWR5IHJlcXVlc3Rl ZCBvblxuIiwKPiArCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuYmFzZS5p ZCwKPiArCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFtZSk7Cj4gK30K PiArCj4gK3ZvaWQgZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0K PiArCQlkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gKwl1MzIgcHA7Cj4gKwlpOTE1X3JlZ190 IHBwX3N0YXRfcmVnLCBwcF9jdHJsX3JlZzsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZk ZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwg aW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkKTsKPiArCj4gKwlpZiAoIWVkcF9oYXZlX3BhbmVsX3Zk ZChpbnRlbF9kcCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLCAiVHVybmluZyBbRU5DT0RFUjolZDolc10gVkREIG9mZlxuIiwKPiArCQkgICAgZGlnX3Bv cnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJCSAgICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUp Owo+ICsKPiArCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiArCXBwICY9IH5F RFBfRk9SQ0VfVkREOwo+ICsKPiArCXBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2Rw KTsKPiArCXBwX3N0YXRfcmVnID0gX3BwX3N0YXRfcmVnKGludGVsX2RwKTsKPiArCj4gKwlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcHBfY3RybF9yZWcsIHBwKTsKPiArCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpOwo+ICsKPiArCS8qIE1ha2Ugc3VyZSBzZXF1 ZW5jZXIgaXMgaWRsZSBiZWZvcmUgYWxsb3dpbmcgc3Vic2VxdWVudCBhY3Rpdml0eSAqLwo+ICsJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQUF9TVEFUVVM6IDB4JTA4eCBQUF9DT05UUk9M OiAweCUwOHhcbiIsCj4gKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHBwX3N0YXRfcmVn KSwKPiArCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcHBfY3RybF9yZWcpKTsKPiArCj4g KwlpZiAoKHBwICYgUEFORUxfUE9XRVJfT04pID09IDApCj4gKwkJaW50ZWxfZHAtPnBhbmVsX3Bv d2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7Cj4gKwo+ICsJaW50ZWxfZGlzcGxh eV9wb3dlcl9wdXQoZGV2X3ByaXYsCj4gKwkJCQlpbnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19w b3J0KSwKPiArCQkJCWZldGNoX2FuZF96ZXJvKCZpbnRlbF9kcC0+dmRkX3dha2VyZWYpKTsKPiAr fQo+ICsKPiArdm9pZCBlZHBfcGFuZWxfdmRkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpfX3dv cmspCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQo+ICsJCWNvbnRhaW5lcl9v Zih0b19kZWxheWVkX3dvcmsoX193b3JrKSwKPiArCQkJICAgICBzdHJ1Y3QgaW50ZWxfZHAsIHBh bmVsX3ZkZF93b3JrKTsKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICsKPiArCXdpdGhf cHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpIHsKPiArCQlpZiAoIWludGVsX2RwLT53YW50X3Bh bmVsX3ZkZCkKPiArCQkJZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGVkcF9wYW5lbF92ZGRfc2NoZWR1bGVfb2ZmKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZGVsYXk7Cj4gKwo+ICsJ LyoKPiArCSAqIFF1ZXVlIHRoZSB0aW1lciB0byBmaXJlIGEgbG9uZyB0aW1lIGZyb20gbm93IChy ZWxhdGl2ZSB0byB0aGUgcG93ZXIKPiArCSAqIGRvd24gZGVsYXkpIHRvIGtlZXAgdGhlIHBhbmVs IHBvd2VyIHVwIGFjcm9zcyBhIHNlcXVlbmNlIG9mCj4gKwkgKiBvcGVyYXRpb25zLgo+ICsJICov Cj4gKwlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2N5Y2xl X2RlbGF5ICogNSk7Cj4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmludGVsX2RwLT5wYW5lbF92 ZGRfd29yaywgZGVsYXkpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBNdXN0IGJlIHBhaXJlZCB3aXRo IGVkcF9wYW5lbF92ZGRfb24oKS4KPiArICogTXVzdCBob2xkIHBwc19tdXRleCBhcm91bmQgdGhl IHdob2xlIG9uL29mZiBzZXF1ZW5jZS4KPiArICogQ2FuIGJlIG5lc3RlZCB3aXRoIGludGVsX2Vk cF9wYW5lbF92ZGRfe29uLG9mZn0oKSBjYWxscy4KPiArICovCj4gK3ZvaWQgZWRwX3BhbmVsX3Zk ZF9vZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgYm9vbCBzeW5jKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAr Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlp ZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCUk5MTVf U1RBVEVfV0FSTighaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkLCAiW0VOQ09ERVI6JWQ6JXNdIFZE RCBub3QgZm9yY2VkIG9uIiwKPiArCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJh c2UuYmFzZS5pZCwKPiArCQkJZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UubmFt ZSk7Cj4gKwo+ICsJaW50ZWxfZHAtPndhbnRfcGFuZWxfdmRkID0gZmFsc2U7Cj4gKwo+ICsJaWYg KHN5bmMpCj4gKwkJZWRwX3BhbmVsX3ZkZF9vZmZfc3luYyhpbnRlbF9kcCk7Cj4gKwllbHNlCj4g KwkJZWRwX3BhbmVsX3ZkZF9zY2hlZHVsZV9vZmYoaW50ZWxfZHApOwo+ICt9Cj4gKwo+ICt2b2lk IGVkcF9wYW5lbF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXUz MiBwcDsKPiArCWk5MTVfcmVnX3QgcHBfY3RybF9yZWc7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRf aGVsZCgmZGV2X3ByaXYtPnBwc19tdXRleCk7Cj4gKwo+ICsJaWYgKCFpbnRlbF9kcF9pc19lZHAo aW50ZWxfZHApKQo+ICsJCXJldHVybjsKPiArCj4gKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIlR1cm4gW0VOQ09ERVI6JWQ6JXNdIHBhbmVsIHBvd2VyIG9uXG4iLAo+ICsJCSAgICBkcF90 b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJCSAgICBkcF90b19k aWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKTsKPiArCj4gKwlpZiAoZHJtX1dBUk4o JmRldl9wcml2LT5kcm0sIGVkcF9oYXZlX3BhbmVsX3Bvd2VyKGludGVsX2RwKSwKPiArCQkgICAg ICJbRU5DT0RFUjolZDolc10gcGFuZWwgcG93ZXIgYWxyZWFkeSBvblxuIiwKPiArCQkgICAgIGRw X3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5iYXNlLmJhc2UuaWQsCj4gKwkJICAgICBkcF90 b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5uYW1lKSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJd2FpdF9wYW5lbF9wb3dlcl9jeWNsZShpbnRlbF9kcCk7Cj4gKwo+ICsJcHBfY3RybF9yZWcg PSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+ICsJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50 ZWxfZHApOwo+ICsJaWYgKElTX0dFTihkZXZfcHJpdiwgNSkpIHsKPiArCQkvKiBJTEsgd29ya2Fy b3VuZDogZGlzYWJsZSByZXNldCBhcm91bmQgcG93ZXIgc2VxdWVuY2UgKi8KPiArCQlwcCAmPSB+ UEFORUxfUE9XRVJfUkVTRVQ7Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxf cmVnLCBwcCk7Cj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3Jl Zyk7Cj4gKwl9Cj4gKwo+ICsJcHAgfD0gUEFORUxfUE9XRVJfT047Cj4gKwlpZiAoIUlTX0dFTihk ZXZfcHJpdiwgNSkpCj4gKwkJcHAgfD0gUEFORUxfUE9XRVJfUkVTRVQ7Cj4gKwo+ICsJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxfcmVnLCBwcCk7Cj4gKwlpbnRlbF9kZV9wb3N0aW5n X3JlYWQoZGV2X3ByaXYsIHBwX2N0cmxfcmVnKTsKPiArCj4gKwl3YWl0X3BhbmVsX29uKGludGVs X2RwKTsKPiArCWludGVsX2RwLT5sYXN0X3Bvd2VyX29uID0gamlmZmllczsKPiArCj4gKwlpZiAo SVNfR0VOKGRldl9wcml2LCA1KSkgewo+ICsJCXBwIHw9IFBBTkVMX1BPV0VSX1JFU0VUOyAvKiBy ZXN0b3JlIHBhbmVsIHJlc2V0IGJpdCAqLwo+ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBw cF9jdHJsX3JlZywgcHApOwo+ICsJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcHBf Y3RybF9yZWcpOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VkcF9wYW5lbF9vbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsK PiArCj4gKwlpZiAoIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gKwkJcmV0dXJuOwo+ICsK PiArCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpCj4gKwkJZWRwX3BhbmVsX29uKGlu dGVsX2RwKTsKPiArfQo+ICsKPiArdm9pZCBlZHBfcGFuZWxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gKwl1MzIgcHA7Cj4gKwlpOTE1X3JlZ190 IHBwX2N0cmxfcmVnOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNf bXV0ZXgpOwo+ICsKPiArCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJUdXJuIFtFTkNPREVSOiVk OiVzXSBwYW5lbCBwb3dlciBvZmZcbiIsCj4gKwkJICAgIGRpZ19wb3J0LT5iYXNlLmJhc2UuYmFz ZS5pZCwgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lKTsKPiArCj4gKwlkcm1fV0FSTigmZGV2X3By aXYtPmRybSwgIWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCwKPiArCQkgIk5lZWQgW0VOQ09ERVI6 JWQ6JXNdIFZERCB0byB0dXJuIG9mZiBwYW5lbFxuIiwKPiArCQkgZGlnX3BvcnQtPmJhc2UuYmFz ZS5iYXNlLmlkLCBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+ICsKPiArCXBwID0gaWxrX2dl dF9wcF9jb250cm9sKGludGVsX2RwKTsKPiArCS8qIFdlIG5lZWQgdG8gc3dpdGNoIG9mZiBwYW5l bCBwb3dlciBfYW5kXyBmb3JjZSB2ZGQsIGZvciBvdGhlcndpc2Ugc29tZQo+ICsJICogcGFuZWxz IGdldCB2ZXJ5IHVuaGFwcHkgYW5kIGNlYXNlIHRvIHdvcmsuICovCj4gKwlwcCAmPSB+KFBBTkVM X1BPV0VSX09OIHwgUEFORUxfUE9XRVJfUkVTRVQgfCBFRFBfRk9SQ0VfVkREIHwKPiArCQlFRFBf QkxDX0VOQUJMRSk7Cj4gKwo+ICsJcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHAp Owo+ICsKPiArCWludGVsX2RwLT53YW50X3BhbmVsX3ZkZCA9IGZhbHNlOwo+ICsKPiArCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBwcF9jdHJsX3JlZywgcHApOwo+ICsJaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3JlZyk7Cj4gKwo+ICsJd2FpdF9wYW5lbF9vZmYoaW50 ZWxfZHApOwo+ICsJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jv b3R0aW1lKCk7Cj4gKwo+ICsJLyogV2UgZ290IGEgcmVmZXJlbmNlIHdoZW4gd2UgZW5hYmxlZCB0 aGUgVkRELiAqLwo+ICsJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsCj4gKwkJCQlp bnRlbF9hdXhfcG93ZXJfZG9tYWluKGRpZ19wb3J0KSwKPiArCQkJCWZldGNoX2FuZF96ZXJvKCZp bnRlbF9kcC0+dmRkX3dha2VyZWYpKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9lZHBfcGFuZWxf b2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwo+ICsKPiArCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikKPiArCQllZHBfcGFu ZWxfb2ZmKGludGVsX2RwKTsKPiArfQo+ICsKPiArLyogRW5hYmxlIGJhY2tsaWdodCBpbiB0aGUg cGFuZWwgcG93ZXIgY29udHJvbC4gKi8KPiArdm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwo+ICsKPiArCS8qCj4gKwkgKiBJZiB3ZSBlbmFibGUgdGhlIGJhY2tsaWdodCByaWdo dCBhd2F5IGZvbGxvd2luZyBhIHBhbmVsIHBvd2VyCj4gKwkgKiBvbiwgd2UgbWF5IHNlZSBzbGln aHQgZmxpY2tlciBhcyB0aGUgcGFuZWwgc3luY3Mgd2l0aCB0aGUgZURQCj4gKwkgKiBsaW5rLiAg U28gZGVsYXkgYSBiaXQgdG8gbWFrZSBzdXJlIHRoZSBpbWFnZSBpcyBzb2xpZCBiZWZvcmUKPiAr CSAqIGFsbG93aW5nIGl0IHRvIGFwcGVhci4KPiArCSAqLwo+ICsJd2FpdF9iYWNrbGlnaHRfb24o aW50ZWxfZHApOwo+ICsKPiArCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpIHsKPiAr CQlpOTE1X3JlZ190IHBwX2N0cmxfcmVnID0gX3BwX2N0cmxfcmVnKGludGVsX2RwKTsKPiArCQl1 MzIgcHA7Cj4gKwo+ICsJCXBwID0gaWxrX2dldF9wcF9jb250cm9sKGludGVsX2RwKTsKPiArCQlw cCB8PSBFRFBfQkxDX0VOQUJMRTsKPiArCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBw X2N0cmxfcmVnLCBwcCk7Cj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9j dHJsX3JlZyk7Cj4gKwl9Cj4gK30KPiArCj4gKy8qIERpc2FibGUgYmFja2xpZ2h0IGluIHRoZSBw YW5lbCBwb3dlciBjb250cm9sLiAqLwo+ICt2b2lkIF9pbnRlbF9lZHBfYmFja2xpZ2h0X29mZihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwo+ICsKPiArCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJd2l0aF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikgewo+ICsJCWk5MTVf cmVnX3QgcHBfY3RybF9yZWcgPSBfcHBfY3RybF9yZWcoaW50ZWxfZHApOwo+ICsJCXUzMiBwcDsK PiArCj4gKwkJcHAgPSBpbGtfZ2V0X3BwX2NvbnRyb2woaW50ZWxfZHApOwo+ICsJCXBwICY9IH5F RFBfQkxDX0VOQUJMRTsKPiArCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHBwX2N0cmxf cmVnLCBwcCk7Cj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBwcF9jdHJsX3Jl Zyk7Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfZHAtPmxhc3RfYmFja2xpZ2h0X29mZiA9IGppZmZpZXM7 Cj4gKwllZHBfd2FpdF9iYWNrbGlnaHRfb2ZmKGludGVsX2RwKTsKPiArfQo+ICsKPiArLyoKPiAr ICogSG9vayBmb3IgY29udHJvbGxpbmcgdGhlIHBhbmVsIHBvd2VyIGNvbnRyb2wgYmFja2xpZ2h0 IHRocm91Z2ggdGhlIGJsX3Bvd2VyCj4gKyAqIHN5c2ZzIGF0dHJpYnV0ZS4gVGFrZSBjYXJlIHRv IGhhbmRsZSBtdWx0aXBsZSBjYWxscy4KPiArICovCj4gK3ZvaWQgaW50ZWxfZWRwX2JhY2tsaWdo dF9wb3dlcihzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZW5hYmxlKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoY29ubmVjdG9y LT5iYXNlLmRldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNo ZWRfZHAoY29ubmVjdG9yKTsKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICsJYm9vbCBp c19lbmFibGVkOwo+ICsKPiArCWlzX2VuYWJsZWQgPSBmYWxzZTsKPiArCXdpdGhfcHBzX2xvY2so aW50ZWxfZHAsIHdha2VyZWYpCj4gKwkJaXNfZW5hYmxlZCA9IGlsa19nZXRfcHBfY29udHJvbChp bnRlbF9kcCkgJiBFRFBfQkxDX0VOQUJMRTsKPiArCWlmIChpc19lbmFibGVkID09IGVuYWJsZSkK PiArCQlyZXR1cm47Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgInBhbmVsIHBvd2Vy IGNvbnRyb2wgYmFja2xpZ2h0ICVzXG4iLAo+ICsJCSAgICBlbmFibGUgPyAiZW5hYmxlIiA6ICJk aXNhYmxlIik7Cj4gKwo+ICsJaWYgKGVuYWJsZSkKPiArCQlfaW50ZWxfZWRwX2JhY2tsaWdodF9v bihpbnRlbF9kcCk7Cj4gKwllbHNlCj4gKwkJX2ludGVsX2VkcF9iYWNrbGlnaHRfb2ZmKGludGVs X2RwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmx2X2RldGFjaF9wb3dlcl9zZXF1ZW5jZXIo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2 KTsKPiArCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfZHAtPnBwc19waXBlOwo+ICsJaTkxNV9yZWdf dCBwcF9vbl9yZWcgPSBQUF9PTl9ERUxBWVMocGlwZSk7Cj4gKwo+ICsJZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sIGludGVsX2RwLT5hY3RpdmVfcGlwZSAhPSBJTlZBTElEX1BJUEUpOwo+ICsK PiArCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgcGlwZSAhPSBQSVBFX0EgJiYgcGlw ZSAhPSBQSVBFX0IpKQo+ICsJCXJldHVybjsKPiArCj4gKwllZHBfcGFuZWxfdmRkX29mZl9zeW5j KGludGVsX2RwKTsKPiArCj4gKwkvKgo+ICsJICogVkxWIHNlZW1zIHRvIGdldCBjb25mdXNlZCB3 aGVuIG11bHRpcGxlIHBvd2VyIHNlcXVlbmNlcnMKPiArCSAqIGhhdmUgdGhlIHNhbWUgcG9ydCBz ZWxlY3RlZCAoZXZlbiBpZiBvbmx5IG9uZSBoYXMgcG93ZXIvdmRkCj4gKwkgKiBlbmFibGVkKS4g VGhlIGZhaWx1cmUgbWFuaWZlc3RzIGFzIHZsdl93YWl0X3BvcnRfcmVhZHkoKSBmYWlsaW5nCj4g KwkgKiBDSFYgb24gdGhlIG90aGVyIGhhbmQgZG9lc24ndCBzZWVtIHRvIG1pbmQgaGF2aW5nIHRo ZSBzYW1lIHBvcnQKPiArCSAqIHNlbGVjdGVkIGluIG11bHRpcGxlIHBvd2VyIHNlcXVlbmNlcnMs IGJ1dCBsZXQncyBjbGVhciB0aGUKPiArCSAqIHBvcnQgc2VsZWN0IGFsd2F5cyB3aGVuIGxvZ2lj YWxseSBkaXNjb25uZWN0aW5nIGEgcG93ZXIgc2VxdWVuY2VyCj4gKwkgKiBmcm9tIGEgcG9ydC4K PiArCSAqLwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJICAgICJkZXRhY2hp bmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZnJvbSBbRU5DT0RFUjolZDolc11cbiIsCj4gKwkJ ICAgIHBpcGVfbmFtZShwaXBlKSwgZGlnX3BvcnQtPmJhc2UuYmFzZS5iYXNlLmlkLAo+ICsJCSAg ICBkaWdfcG9ydC0+YmFzZS5iYXNlLm5hbWUpOwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHBwX29uX3JlZywgMCk7Cj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHBwX29u X3JlZyk7Cj4gKwo+ICsJaW50ZWxfZHAtPnBwc19waXBlID0gSU5WQUxJRF9QSVBFOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICAgIGVudW0gcGlwZSBwaXBlKQo+ICt7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2 X3ByaXYtPmRybSwgZW5jb2Rlcikgewo+ICsJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBl bmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gKwo+ICsJCWRybV9XQVJOKCZkZXZfcHJpdi0+ZHJt LCBpbnRlbF9kcC0+YWN0aXZlX3BpcGUgPT0gcGlwZSwKPiArCQkJICJzdGVhbGluZyBwaXBlICVj IHBvd2VyIHNlcXVlbmNlciBmcm9tIGFjdGl2ZSBbRU5DT0RFUjolZDolc11cbiIsCj4gKwkJCSBw aXBlX25hbWUocGlwZSksIGVuY29kZXItPmJhc2UuYmFzZS5pZCwKPiArCQkJIGVuY29kZXItPmJh c2UubmFtZSk7Cj4gKwo+ICsJCWlmIChpbnRlbF9kcC0+cHBzX3BpcGUgIT0gcGlwZSkKPiArCQkJ Y29udGludWU7Cj4gKwo+ICsJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkgICAg InN0ZWFsaW5nIHBpcGUgJWMgcG93ZXIgc2VxdWVuY2VyIGZyb20gW0VOQ09ERVI6JWQ6JXNdXG4i LAo+ICsJCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBlbmNvZGVyLT5iYXNlLmJhc2UuaWQsCj4gKwkJ CSAgICBlbmNvZGVyLT5iYXNlLm5hbWUpOwo+ICsKPiArCQkvKiBtYWtlIHN1cmUgdmRkIGlzIG9m ZiBiZWZvcmUgd2Ugc3RlYWwgaXQgKi8KPiArCQl2bHZfZGV0YWNoX3Bvd2VyX3NlcXVlbmNlcihp bnRlbF9kcCk7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgdmx2X2luaXRfcGFuZWxfcG93ZXJfc2Vx dWVuY2VyKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJICAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiArCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gKwlz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5j cnRjKTsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHBzX211dGV4KTsK PiArCj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPmFjdGl2ZV9waXBl ICE9IElOVkFMSURfUElQRSk7Cj4gKwo+ICsJaWYgKGludGVsX2RwLT5wcHNfcGlwZSAhPSBJTlZB TElEX1BJUEUgJiYKPiArCSAgICBpbnRlbF9kcC0+cHBzX3BpcGUgIT0gY3J0Yy0+cGlwZSkgewo+ ICsJCS8qCj4gKwkJICogSWYgYW5vdGhlciBwb3dlciBzZXF1ZW5jZXIgd2FzIGJlaW5nIHVzZWQg b24gdGhpcwo+ICsJCSAqIHBvcnQgcHJldmlvdXNseSBtYWtlIHN1cmUgdG8gdHVybiBvZmYgdmRk IHRoZXJlIHdoaWxlCj4gKwkJICogd2Ugc3RpbGwgaGF2ZSBjb250cm9sIG9mIGl0Lgo+ICsJCSAq Lwo+ICsJCXZsdl9kZXRhY2hfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsKPiArCX0KPiArCj4g KwkvKgo+ICsJICogV2UgbWF5IGJlIHN0ZWFsaW5nIHRoZSBwb3dlcgo+ICsJICogc2VxdWVuY2Vy IGZyb20gYW5vdGhlciBwb3J0Lgo+ICsJICovCj4gKwl2bHZfc3RlYWxfcG93ZXJfc2VxdWVuY2Vy KGRldl9wcml2LCBjcnRjLT5waXBlKTsKPiArCj4gKwlpbnRlbF9kcC0+YWN0aXZlX3BpcGUgPSBj cnRjLT5waXBlOwo+ICsKPiArCWlmICghaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkKPiArCQly ZXR1cm47Cj4gKwo+ICsJLyogbm93IGl0J3MgYWxsIG91cnMgKi8KPiArCWludGVsX2RwLT5wcHNf cGlwZSA9IGNydGMtPnBpcGU7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4g KwkJICAgICJpbml0aWFsaXppbmcgcGlwZSAlYyBwb3dlciBzZXF1ZW5jZXIgZm9yIFtFTkNPREVS OiVkOiVzXVxuIiwKPiArCQkgICAgcGlwZV9uYW1lKGludGVsX2RwLT5wcHNfcGlwZSksIGVuY29k ZXItPmJhc2UuYmFzZS5pZCwKPiArCQkgICAgZW5jb2Rlci0+YmFzZS5uYW1lKTsKPiArCj4gKwkv KiBpbml0IHBvd2VyIHNlcXVlbmNlciBvbiB0aGlzIHBpcGUgYW5kIHBvcnQgKi8KPiArCWludGVs X2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKGludGVsX2RwKTsKPiArCWludGVsX2RwX2lu aXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyX3JlZ2lzdGVycyhpbnRlbF9kcCwgdHJ1ZSk7Cj4gK30K PiArCj4gK3ZvaWQgaW50ZWxfZWRwX3BhbmVsX3ZkZF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk cF90b19pOTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCWlmICghZWRwX2hhdmVfcGFuZWxfdmRk KGludGVsX2RwKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBWREQgYml0IG5l ZWRzIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSwgc28gaWYgdGhlIGJpdCBpcwo+ICsJICogYWxy ZWFkeSBlbmFibGVkIHdoZW4gd2UgYm9vdCBvciByZXN1bWUsIGdyYWIgdGhpcyByZWZlcmVuY2Ug YW5kCj4gKwkgKiBzY2hlZHVsZSBhIHZkZCBvZmYsIHNvIHdlIGRvbid0IGhvbGQgb24gdG8gdGhl IHJlZmVyZW5jZQo+ICsJICogaW5kZWZpbml0ZWx5Lgo+ICsJICovCj4gKwlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKPiArCQkgICAgIlZERCBsZWZ0IG9uIGJ5IEJJT1MsIGFkanVzdGluZyBz dGF0ZSB0cmFja2luZ1xuIik7Cj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxf ZHAtPnZkZF93YWtlcmVmKTsKPiArCWludGVsX2RwLT52ZGRfd2FrZXJlZiA9IGludGVsX2Rpc3Bs YXlfcG93ZXJfZ2V0KGRldl9wcml2LAo+ICsJCQkJCQkJaW50ZWxfYXV4X3Bvd2VyX2RvbWFpbihk aWdfcG9ydCkpOwo+ICsKPiArCWVkcF9wYW5lbF92ZGRfc2NoZWR1bGVfb2ZmKGludGVsX2RwKTsK PiArfQo+ICsKPiArYm9vbCBpbnRlbF9lZHBfaGF2ZV9wb3dlcihzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQo+ICt7Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiArCWJvb2wgaGF2ZV9w b3dlciA9IGZhbHNlOwo+ICsKPiArCXdpdGhfcHBzX2xvY2soaW50ZWxfZHAsIHdha2VyZWYpIHsK PiArCQloYXZlX3Bvd2VyID0gZWRwX2hhdmVfcGFuZWxfcG93ZXIoaW50ZWxfZHApICYmCj4gKwkJ CQkJCSAgZWRwX2hhdmVfcGFuZWxfdmRkKGludGVsX2RwKTsKPiArCX0KPiArCj4gKwlyZXR1cm4g aGF2ZV9wb3dlcjsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3Rp bWVzdGFtcHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJaW50ZWxfZHAtPnBh bmVsX3Bvd2VyX29mZl90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7Cj4gKwlpbnRlbF9kcC0+ bGFzdF9wb3dlcl9vbiA9IGppZmZpZXM7Cj4gKwlpbnRlbF9kcC0+bGFzdF9iYWNrbGlnaHRfb2Zm ID0gamlmZmllczsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAraW50ZWxfcHBzX3JlYWRvdXRf aHdfc3RhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgc3RydWN0IGVkcF9wb3dlcl9zZXEg KnNlcSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7Cj4gKwl1MzIgcHBfb24sIHBwX29mZiwgcHBfY3RsOwo+ICsJc3RydWN0 IHBwc19yZWdpc3RlcnMgcmVnczsKPiArCj4gKwlpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRl bF9kcCwgJnJlZ3MpOwo+ICsKPiArCXBwX2N0bCA9IGlsa19nZXRfcHBfY29udHJvbChpbnRlbF9k cCk7Cj4gKwo+ICsJLyogRW5zdXJlIFBQUyBpcyB1bmxvY2tlZCAqLwo+ICsJaWYgKCFIQVNfRERJ KGRldl9wcml2KSkKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9jdHJsLCBw cF9jdGwpOwo+ICsKPiArCXBwX29uID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVncy5wcF9v bik7Cj4gKwlwcF9vZmYgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29mZik7Cj4g Kwo+ICsJLyogUHVsbCB0aW1pbmcgdmFsdWVzIG91dCBvZiByZWdpc3RlcnMgKi8KPiArCXNlcS0+ dDFfdDMgPSBSRUdfRklFTERfR0VUKFBBTkVMX1BPV0VSX1VQX0RFTEFZX01BU0ssIHBwX29uKTsK PiArCXNlcS0+dDggPSBSRUdfRklFTERfR0VUKFBBTkVMX0xJR0hUX09OX0RFTEFZX01BU0ssIHBw X29uKTsKPiArCXNlcS0+dDkgPSBSRUdfRklFTERfR0VUKFBBTkVMX0xJR0hUX09GRl9ERUxBWV9N QVNLLCBwcF9vZmYpOwo+ICsJc2VxLT50MTAgPSBSRUdfRklFTERfR0VUKFBBTkVMX1BPV0VSX0RP V05fREVMQVlfTUFTSywgcHBfb2ZmKTsKPiArCj4gKwlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChy ZWdzLnBwX2RpdikpIHsKPiArCQl1MzIgcHBfZGl2Owo+ICsKPiArCQlwcF9kaXYgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX2Rpdik7Cj4gKwo+ICsJCXNlcS0+dDExX3QxMiA9IFJF R19GSUVMRF9HRVQoUEFORUxfUE9XRVJfQ1lDTEVfREVMQVlfTUFTSywgcHBfZGl2KSAqIDEwMDA7 Cj4gKwl9IGVsc2Ugewo+ICsJCXNlcS0+dDExX3QxMiA9IFJFR19GSUVMRF9HRVQoQlhUX1BPV0VS X0NZQ0xFX0RFTEFZX01BU0ssIHBwX2N0bCkgKiAxMDAwOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZAo+ICtpbnRlbF9wcHNfZHVtcF9zdGF0ZShjb25zdCBjaGFyICpzdGF0ZV9uYW1lLCBj b25zdCBzdHJ1Y3QgZWRwX3Bvd2VyX3NlcSAqc2VxKQo+ICt7Cj4gKwlEUk1fREVCVUdfS01TKCIl cyB0MV90MyAlZCB0OCAlZCB0OSAlZCB0MTAgJWQgdDExX3QxMiAlZFxuIiwKPiArCQkgICAgICBz dGF0ZV9uYW1lLAo+ICsJCSAgICAgIHNlcS0+dDFfdDMsIHNlcS0+dDgsIHNlcS0+dDksIHNlcS0+ dDEwLCBzZXEtPnQxMV90MTIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF9wcHNf dmVyaWZ5X3N0YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBl ZHBfcG93ZXJfc2VxIGh3Owo+ICsJc3RydWN0IGVkcF9wb3dlcl9zZXEgKnN3ID0gJmludGVsX2Rw LT5wcHNfZGVsYXlzOwo+ICsKPiArCWludGVsX3Bwc19yZWFkb3V0X2h3X3N0YXRlKGludGVsX2Rw LCAmaHcpOwo+ICsKPiArCWlmIChody50MV90MyAhPSBzdy0+dDFfdDMgfHwgaHcudDggIT0gc3ct PnQ4IHx8IGh3LnQ5ICE9IHN3LT50OSB8fAo+ICsJICAgIGh3LnQxMCAhPSBzdy0+dDEwIHx8IGh3 LnQxMV90MTIgIT0gc3ctPnQxMV90MTIpIHsKPiArCQlEUk1fRVJST1IoIlBQUyBzdGF0ZSBtaXNt YXRjaFxuIik7Cj4gKwkJaW50ZWxfcHBzX2R1bXBfc3RhdGUoInN3Iiwgc3cpOwo+ICsJCWludGVs X3Bwc19kdW1wX3N0YXRlKCJodyIsICZodyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk Cj4gK2ludGVsX2RwX2luaXRfcGFuZWxfcG93ZXJfc2VxdWVuY2VyKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRw X3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJc3RydWN0IGVkcF9wb3dlcl9zZXEgY3VyLCB2YnQsIHNw ZWMsCj4gKwkJKmZpbmFsID0gJmludGVsX2RwLT5wcHNfZGVsYXlzOwo+ICsKPiArCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICsKPiArCS8qIGFscmVhZHkgaW5p dGlhbGl6ZWQ/ICovCj4gKwlpZiAoZmluYWwtPnQxMV90MTIgIT0gMCkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJaW50ZWxfcHBzX3JlYWRvdXRfaHdfc3RhdGUoaW50ZWxfZHAsICZjdXIpOwo+ICsKPiAr CWludGVsX3Bwc19kdW1wX3N0YXRlKCJjdXIiLCAmY3VyKTsKPiArCj4gKwl2YnQgPSBkZXZfcHJp di0+dmJ0LmVkcC5wcHM7Cj4gKwkvKiBPbiBUb3NoaWJhIFNhdGVsbGl0ZSBQNTAtQy0xOEMgc3lz dGVtIHRoZSBWQlQgVDEyIGRlbGF5Cj4gKwkgKiBvZiA1MDBtcyBhcHBlYXJzIHRvIGJlIHRvbyBz aG9ydC4gT2Nhc3Npb25hbGx5IHRoZSBwYW5lbAo+ICsJICoganVzdCBmYWlscyB0byBwb3dlciBi YWNrIG9uLiBJbmNyZWFzaW5nIHRoZSBkZWxheSB0byA4MDBtcwo+ICsJICogc2VlbXMgc3VmZmlj aWVudCB0byBhdm9pZCB0aGlzIHByb2JsZW0uCj4gKwkgKi8KPiArCWlmIChkZXZfcHJpdi0+cXVp cmtzICYgUVVJUktfSU5DUkVBU0VfVDEyX0RFTEFZKSB7Cj4gKwkJdmJ0LnQxMV90MTIgPSBtYXhf dCh1MTYsIHZidC50MTFfdDEyLCAxMzAwICogMTApOwo+ICsJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAo+ICsJCQkgICAgIkluY3JlYXNpbmcgVDEyIHBhbmVsIGRlbGF5IGFzIHBlciB0aGUg cXVpcmsgdG8gJWRcbiIsCj4gKwkJCSAgICB2YnQudDExX3QxMik7Cj4gKwl9Cj4gKwkvKiBUMTFf VDEyIGRlbGF5IGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5IGluIHVuaXRzIG9mIDEwMG1zLCBidXQg emVybwo+ICsJICogYmFzZWQgaW4gdGhlIGh3IChzbyB3ZSBuZWVkIHRvIGFkZCAxMDAgbXMpLiBC dXQgdGhlIHN3IHZidAo+ICsJICogdGFibGUgbXVsdGlwbGllcyBpdCB3aXRoIDEwMDAgdG8gbWFr ZSBpdCBpbiB1bml0cyBvZiAxMDB1c2VjLAo+ICsJICogdG9vLiAqLwo+ICsJdmJ0LnQxMV90MTIg Kz0gMTAwICogMTA7Cj4gKwo+ICsJLyogVXBwZXIgbGltaXRzIGZyb20gZURQIDEuMyBzcGVjLiBO b3RlIHRoYXQgd2UgdXNlIHRoZSBjbHVua3kgdW5pdHMgb2YKPiArCSAqIG91ciBodyBoZXJlLCB3 aGljaCBhcmUgYWxsIGluIDEwMHVzZWMuICovCj4gKwlzcGVjLnQxX3QzID0gMjEwICogMTA7Cj4g KwlzcGVjLnQ4ID0gNTAgKiAxMDsgLyogbm8gbGltaXQgZm9yIHQ4LCB1c2UgdDcgaW5zdGVhZCAq Lwo+ICsJc3BlYy50OSA9IDUwICogMTA7IC8qIG5vIGxpbWl0IGZvciB0OSwgbWFrZSBpdCBzeW1t ZXRyaWMgd2l0aCB0OCAqLwo+ICsJc3BlYy50MTAgPSA1MDAgKiAxMDsKPiArCS8qIFRoaXMgb25l IGlzIHNwZWNpYWwgYW5kIGFjdHVhbGx5IGluIHVuaXRzIG9mIDEwMG1zLCBidXQgemVybwo+ICsJ ICogYmFzZWQgaW4gdGhlIGh3IChzbyB3ZSBuZWVkIHRvIGFkZCAxMDAgbXMpLiBCdXQgdGhlIHN3 IHZidAo+ICsJICogdGFibGUgbXVsdGlwbGllcyBpdCB3aXRoIDEwMDAgdG8gbWFrZSBpdCBpbiB1 bml0cyBvZiAxMDB1c2VjLAo+ICsJICogdG9vLiAqLwo+ICsJc3BlYy50MTFfdDEyID0gKDUxMCAr IDEwMCkgKiAxMDsKPiArCj4gKwlpbnRlbF9wcHNfZHVtcF9zdGF0ZSgidmJ0IiwgJnZidCk7Cj4g Kwo+ICsJLyogVXNlIHRoZSBtYXggb2YgdGhlIHJlZ2lzdGVyIHNldHRpbmdzIGFuZCB2YnQuIElm IGJvdGggYXJlCj4gKwkgKiB1bnNldCwgZmFsbCBiYWNrIHRvIHRoZSBzcGVjIGxpbWl0cy4gKi8K PiArI2RlZmluZSBhc3NpZ25fZmluYWwoZmllbGQpCWZpbmFsLT5maWVsZCA9IChtYXgoY3VyLmZp ZWxkLCB2YnQuZmllbGQpID09IDAgPyBcCj4gKwkJCQkgICAgICAgc3BlYy5maWVsZCA6IFwKPiAr CQkJCSAgICAgICBtYXgoY3VyLmZpZWxkLCB2YnQuZmllbGQpKQo+ICsJYXNzaWduX2ZpbmFsKHQx X3QzKTsKPiArCWFzc2lnbl9maW5hbCh0OCk7Cj4gKwlhc3NpZ25fZmluYWwodDkpOwo+ICsJYXNz aWduX2ZpbmFsKHQxMCk7Cj4gKwlhc3NpZ25fZmluYWwodDExX3QxMik7Cj4gKyN1bmRlZiBhc3Np Z25fZmluYWwKPiArCj4gKyNkZWZpbmUgZ2V0X2RlbGF5KGZpZWxkKQkoRElWX1JPVU5EX1VQKGZp bmFsLT5maWVsZCwgMTApKQo+ICsJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX3VwX2RlbGF5ID0gZ2V0 X2RlbGF5KHQxX3QzKTsKPiArCWludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXkgPSBnZXRfZGVs YXkodDgpOwo+ICsJaW50ZWxfZHAtPmJhY2tsaWdodF9vZmZfZGVsYXkgPSBnZXRfZGVsYXkodDkp Owo+ICsJaW50ZWxfZHAtPnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXkgPSBnZXRfZGVsYXkodDEwKTsK PiArCWludGVsX2RwLT5wYW5lbF9wb3dlcl9jeWNsZV9kZWxheSA9IGdldF9kZWxheSh0MTFfdDEy KTsKPiArI3VuZGVmIGdldF9kZWxheQo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAo+ICsJCSAgICAicGFuZWwgcG93ZXIgdXAgZGVsYXkgJWQsIHBvd2VyIGRvd24gZGVsYXkgJWQs IHBvd2VyIGN5Y2xlIGRlbGF5ICVkXG4iLAo+ICsJCSAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJf dXBfZGVsYXksCj4gKwkJICAgIGludGVsX2RwLT5wYW5lbF9wb3dlcl9kb3duX2RlbGF5LAo+ICsJ CSAgICBpbnRlbF9kcC0+cGFuZWxfcG93ZXJfY3ljbGVfZGVsYXkpOwo+ICsKPiArCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiYmFja2xpZ2h0IG9uIGRlbGF5ICVkLCBvZmYgZGVsYXkgJWRc biIsCj4gKwkJICAgIGludGVsX2RwLT5iYWNrbGlnaHRfb25fZGVsYXksCj4gKwkJICAgIGludGVs X2RwLT5iYWNrbGlnaHRfb2ZmX2RlbGF5KTsKPiArCj4gKwkvKgo+ICsJICogV2Ugb3ZlcnJpZGUg dGhlIEhXIGJhY2tsaWdodCBkZWxheXMgdG8gMSBiZWNhdXNlIHdlIGRvIG1hbnVhbCB3YWl0cwo+ ICsJICogb24gdGhlbS4gRm9yIFQ4LCBldmVuIEJTcGVjIHJlY29tbWVuZHMgZG9pbmcgaXQuIEZv ciBUOSwgaWYgd2UKPiArCSAqIGRvbid0IGRvIHRoaXMsIHdlJ2xsIGVuZCB1cCB3YWl0aW5nIGZv ciB0aGUgYmFja2xpZ2h0IG9mZiBkZWxheQo+ICsJICogdHdpY2U6IG9uY2Ugd2hlbiB3ZSBkbyB0 aGUgbWFudWFsIHNsZWVwLCBhbmQgb25jZSB3aGVuIHdlIGRpc2FibGUKPiArCSAqIHRoZSBwYW5l bCBhbmQgd2FpdCBmb3IgdGhlIFBQX1NUQVRVUyBiaXQgdG8gYmVjb21lIHplcm8uCj4gKwkgKi8K PiArCWZpbmFsLT50OCA9IDE7Cj4gKwlmaW5hbC0+dDkgPSAxOwo+ICsKPiArCS8qCj4gKwkgKiBI VyBoYXMgb25seSBhIDEwMG1zZWMgZ3JhbnVsYXJpdHkgZm9yIHQxMV90MTIgc28gcm91bmQgaXQg dXAKPiArCSAqIGFjY29yZGluZ2x5Lgo+ICsJICovCj4gKwlmaW5hbC0+dDExX3QxMiA9IHJvdW5k dXAoZmluYWwtPnQxMV90MTIsIDEwMCAqIDEwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAr aW50ZWxfZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCj4gKwkJCQkJICAgICAgYm9vbCBmb3JjZV9kaXNhYmxlX3ZkZCkKPiAr ewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRl bF9kcCk7Cj4gKwl1MzIgcHBfb24sIHBwX29mZiwgcG9ydF9zZWwgPSAwOwo+ICsJaW50IGRpdiA9 IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnJhd2Nsa19mcmVxIC8gMTAwMDsKPiArCXN0cnVjdCBw cHNfcmVnaXN0ZXJzIHJlZ3M7Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKS0+YmFzZS5wb3J0Owo+ICsJY29uc3Qgc3RydWN0IGVkcF9wb3dlcl9zZXEgKnNlcSA9 ICZpbnRlbF9kcC0+cHBzX2RlbGF5czsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZf cHJpdi0+cHBzX211dGV4KTsKPiArCj4gKwlpbnRlbF9wcHNfZ2V0X3JlZ2lzdGVycyhpbnRlbF9k cCwgJnJlZ3MpOwo+ICsKPiArCS8qCj4gKwkgKiBPbiBzb21lIFZMViBtYWNoaW5lcyB0aGUgQklP UyBjYW4gbGVhdmUgdGhlIFZERAo+ICsJICogZW5hYmxlZCBldmVuIG9uIHBvd2VyIHNlcXVlbmNl cnMgd2hpY2ggYXJlbid0Cj4gKwkgKiBob29rZWQgdXAgdG8gYW55IHBvcnQuIFRoaXMgd291bGQg bWVzcyB1cCB0aGUKPiArCSAqIHBvd2VyIGRvbWFpbiB0cmFja2luZyB0aGUgZmlyc3QgdGltZSB3 ZSBwaWNrCj4gKwkgKiBvbmUgb2YgdGhlc2UgcG93ZXIgc2VxdWVuY2VycyBmb3IgdXNlIHNpbmNl Cj4gKwkgKiBlZHBfcGFuZWxfdmRkX29uKCkgd291bGQgbm90aWNlIHRoYXQgdGhlIFZERCB3YXMK PiArCSAqIGFscmVhZHkgb24gYW5kIHRoZXJlZm9yZSB3b3VsZG4ndCBncmFiIHRoZSBwb3dlcgo+ ICsJICogZG9tYWluIHJlZmVyZW5jZS4gRGlzYWJsZSBWREQgZmlyc3QgdG8gYXZvaWQgdGhpcy4K PiArCSAqIFRoaXMgYWxzbyBhdm9pZHMgc3B1cmlvdXNseSB0dXJuaW5nIHRoZSBWREQgb24gYXMK PiArCSAqIHNvb24gYXMgdGhlIG5ldyBwb3dlciBzZXF1ZW5jZXIgZ2V0cyBpbml0aWFsaXplZC4K PiArCSAqLwo+ICsJaWYgKGZvcmNlX2Rpc2FibGVfdmRkKSB7Cj4gKwkJdTMyIHBwID0gaWxrX2dl dF9wcF9jb250cm9sKGludGVsX2RwKTsKPiArCj4gKwkJZHJtX1dBUk4oJmRldl9wcml2LT5kcm0s IHBwICYgUEFORUxfUE9XRVJfT04sCj4gKwkJCSAiUGFuZWwgcG93ZXIgYWxyZWFkeSBvblxuIik7 Cj4gKwo+ICsJCWlmIChwcCAmIEVEUF9GT1JDRV9WREQpCj4gKwkJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAo+ICsJCQkJICAgICJWREQgYWxyZWFkeSBvbiwgZGlzYWJsaW5nIGZpcnN0XG4i KTsKPiArCj4gKwkJcHAgJj0gfkVEUF9GT1JDRV9WREQ7Cj4gKwo+ICsJCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCByZWdzLnBwX2N0cmwsIHBwKTsKPiArCX0KPiArCj4gKwlwcF9vbiA9IFJFR19G SUVMRF9QUkVQKFBBTkVMX1BPV0VSX1VQX0RFTEFZX01BU0ssIHNlcS0+dDFfdDMpIHwKPiArCQlS RUdfRklFTERfUFJFUChQQU5FTF9MSUdIVF9PTl9ERUxBWV9NQVNLLCBzZXEtPnQ4KTsKPiArCXBw X29mZiA9IFJFR19GSUVMRF9QUkVQKFBBTkVMX0xJR0hUX09GRl9ERUxBWV9NQVNLLCBzZXEtPnQ5 KSB8Cj4gKwkJUkVHX0ZJRUxEX1BSRVAoUEFORUxfUE9XRVJfRE9XTl9ERUxBWV9NQVNLLCBzZXEt PnQxMCk7Cj4gKwo+ICsJLyogSGFzd2VsbCBkb2Vzbid0IGhhdmUgYW55IHBvcnQgc2VsZWN0aW9u IGJpdHMgZm9yIHRoZSBwYW5lbAo+ICsJICogcG93ZXIgc2VxdWVuY2VyIGFueSBtb3JlLiAqLwo+ ICsJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYp KSB7Cj4gKwkJcG9ydF9zZWwgPSBQQU5FTF9QT1JUX1NFTEVDVF9WTFYocG9ydCk7Cj4gKwl9IGVs c2UgaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSB8fCBIQVNfUENIX0NQVChkZXZfcHJpdikpIHsK PiArCQlzd2l0Y2ggKHBvcnQpIHsKPiArCQljYXNlIFBPUlRfQToKPiArCQkJcG9ydF9zZWwgPSBQ QU5FTF9QT1JUX1NFTEVDVF9EUEE7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgUE9SVF9DOgo+ICsJ CQlwb3J0X3NlbCA9IFBBTkVMX1BPUlRfU0VMRUNUX0RQQzsKPiArCQkJYnJlYWs7Cj4gKwkJY2Fz ZSBQT1JUX0Q6Cj4gKwkJCXBvcnRfc2VsID0gUEFORUxfUE9SVF9TRUxFQ1RfRFBEOwo+ICsJCQli cmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlNSVNTSU5HX0NBU0UocG9ydCk7Cj4gKwkJCWJyZWFr Owo+ICsJCX0KPiArCX0KPiArCj4gKwlwcF9vbiB8PSBwb3J0X3NlbDsKPiArCj4gKwlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgcmVncy5wcF9vbiwgcHBfb24pOwo+ICsJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZ3MucHBfb2ZmLCBwcF9vZmYpOwo+ICsKPiArCS8qCj4gKwkgKiBDb21wdXRl IHRoZSBkaXZpc29yIGZvciB0aGUgcHAgY2xvY2ssIHNpbXBseSBtYXRjaCB0aGUgQnNwZWMgZm9y bXVsYS4KPiArCSAqLwo+ICsJaWYgKGk5MTVfbW1pb19yZWdfdmFsaWQocmVncy5wcF9kaXYpKSB7 Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZ3MucHBfZGl2LAo+ICsJCQkgICAgICAg UkVHX0ZJRUxEX1BSRVAoUFBfUkVGRVJFTkNFX0RJVklERVJfTUFTSywgKDEwMCAqIGRpdikgLyAy IC0gMSkgfCBSRUdfRklFTERfUFJFUChQQU5FTF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLLCBESVZf Uk9VTkRfVVAoc2VxLT50MTFfdDEyLCAxMDAwKSkpOwo+ICsJfSBlbHNlIHsKPiArCQl1MzIgcHBf Y3RsOwo+ICsKPiArCQlwcF9jdGwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX2N0 cmwpOwo+ICsJCXBwX2N0bCAmPSB+QlhUX1BPV0VSX0NZQ0xFX0RFTEFZX01BU0s7Cj4gKwkJcHBf Y3RsIHw9IFJFR19GSUVMRF9QUkVQKEJYVF9QT1dFUl9DWUNMRV9ERUxBWV9NQVNLLCBESVZfUk9V TkRfVVAoc2VxLT50MTFfdDEyLCAxMDAwKSk7Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZ3MucHBfY3RybCwgcHBfY3RsKTsKPiArCX0KPiArCj4gKwlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKPiArCQkgICAgInBhbmVsIHBvd2VyIHNlcXVlbmNlciByZWdpc3RlciBzZXR0aW5n czogUFBfT04gJSN4LCBQUF9PRkYgJSN4LCBQUF9ESVYgJSN4XG4iLAo+ICsJCSAgICBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX29uKSwKPiArCQkgICAgaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVncy5wcF9vZmYpLAo+ICsJCSAgICBpOTE1X21taW9fcmVnX3ZhbGlkKHJlZ3MucHBf ZGl2KSA/Cj4gKwkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZ3MucHBfZGl2KSA6Cj4g KwkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWdzLnBwX2N0cmwpICYgQlhUX1BPV0VS X0NZQ0xFX0RFTEFZX01BU0spKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9kcF9wcHNfaW5pdChz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCj4gKwlpZiAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiArCQl2bHZfaW5p dGlhbF9wb3dlcl9zZXF1ZW5jZXJfc2V0dXAoaW50ZWxfZHApOwo+ICsJfSBlbHNlIHsKPiArCQlp bnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3NlcXVlbmNlcihpbnRlbF9kcCk7Cj4gKwkJaW50ZWxf ZHBfaW5pdF9wYW5lbF9wb3dlcl9zZXF1ZW5jZXJfcmVnaXN0ZXJzKGludGVsX2RwLCBmYWxzZSk7 Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9wcHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzZkNWNjNTY1NTAxCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf cHBzLmgKPiBAQCAtMCwwICsxLDUzIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9fSU5URUxfUFBTX0hfXwo+ICsjZGVmaW5lIF9fSU5URUxfUFBT X0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaW50 ZWxfd2FrZXJlZi5oIgo+ICsKPiArc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7Cj4gK3N0cnVjdCBp bnRlbF9jb25uZWN0b3I7Cj4gK3N0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOwo+ICtzdHJ1Y3QgaW50 ZWxfZHA7Cj4gK3N0cnVjdCBpbnRlbF9lbmNvZGVyOwo+ICsKPiAraW50ZWxfd2FrZXJlZl90IHBw c19sb2NrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICtpbnRlbF93YWtlcmVmX3QgcHBz X3VubG9jayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnRlbF93YWtlcmVmX3Qgd2FrZXJl Zik7Cj4gKwo+ICsjZGVmaW5lIHdpdGhfcHBzX2xvY2soZHAsIHdmKQkJCQkJCVwKPiArCWZvciAo KHdmKSA9IHBwc19sb2NrKGRwKTsgKHdmKTsgKHdmKSA9IHBwc191bmxvY2soKGRwKSwgKHdmKSkp Cj4gKwo+ICt2b2lkIGludGVsX2RwX2NoZWNrX2VkcChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KTsKPiArdm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKTsKPiArdm9pZCBfaW50ZWxfZWRwX2JhY2tsaWdodF9vZmYoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCk7Cj4gK3ZvaWQgaW50ZWxfZWRwX2JhY2tsaWdodF9wb3dlcihzdHJ1Y3QgaW50ZWxf Y29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZW5hYmxlKTsKPiArCj4gK2Jvb2wgZWRwX3BhbmVs X3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArdm9pZCBlZHBfcGFuZWxfdmRk X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIHN5bmMpOwo+ICt2b2lkIGVkcF9w YW5lbF92ZGRfb2ZmX3N5bmMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gK3ZvaWQgZWRw X3BhbmVsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICt2b2lkIGVkcF9wYW5lbF9v ZmYoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gK3ZvaWQgZWRwX3BhbmVsX3ZkZF93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqX193b3JrKTsKPiArCj4gK3ZvaWQgaW50ZWxfZWRwX3BhbmVs X3ZkZF9vbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArdm9pZCBpbnRlbF9lZHBfcGFu ZWxfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gK3ZvaWQgaW50ZWxfZWRwX3BhbmVs X29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArYm9vbCBpbnRlbF9lZHBfaGF2ZV9w b3dlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArCj4gK3ZvaWQgaW50ZWxfZWRwX3Bh bmVsX3ZkZF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArCj4gK3ZvaWQg d2FpdF9wYW5lbF9wb3dlcl9jeWNsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiArCj4g K3ZvaWQgaW50ZWxfZHBfcHBzX2luaXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gK3Zv aWQgaW50ZWxfcG93ZXJfc2VxdWVuY2VyX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsKPiArdm9pZCBpbnRlbF9kcF9pbml0X3BhbmVsX3Bvd2VyX3RpbWVzdGFtcHMoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCk7Cj4gKwo+ICt2b2lkIHZsdl9pbml0X3BhbmVsX3Bvd2VyX3Nl cXVlbmNlcihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiArCQkJCSAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gKwo+ICsjZW5kaWYgLyogX19J TlRFTF9QUFNfSF9fICovCj4gLS0gCj4gMi4yMC4xCj4gCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=