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=-12.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY, 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 B1D76C4361B for ; Wed, 16 Dec 2020 12:17:55 +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 1157423109 for ; Wed, 16 Dec 2020 12:17:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1157423109 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 644C06E19A; Wed, 16 Dec 2020 12:17:52 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6AE296E19A for ; Wed, 16 Dec 2020 12:17:51 +0000 (UTC) IronPort-SDR: XEqDpAQ0QpQifK0SaFXbH+mS/Bdn8fqEIIs5AiW2ce/DRa7k+Hj2LtRL46uNJKo+Ts4++AfYd6 m6Dxu66rFo9g== X-IronPort-AV: E=McAfee;i="6000,8403,9836"; a="172482672" X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="172482672" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 04:17:50 -0800 IronPort-SDR: SuoltEx0WAugD5+DnFtYYbAuqb1VkIXmOMPqzEa7lAqXhRiVgI1iaXhB7yde6LRtriwUXB6S1e sAz/KU7cWPnA== X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="338385423" Received: from genxfsim-desktop.iind.intel.com (HELO intel.com) ([10.223.74.178]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 04:17:48 -0800 Date: Wed, 16 Dec 2020 17:34:32 +0530 From: Anshuman Gupta To: Gwan-gyeong Mun Message-ID: <20201216120429.GK9309@intel.com> References: <20201216093825.403689-1-gwan-gyeong.mun@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20201216093825.403689-1-gwan-gyeong.mun@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [Intel-gfx] [PATCH v6 1/2] drm/i915/display: Support PSR Multiple Transcoders 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: jani.nikula@intel.com, 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" T24gMjAyMC0xMi0xNiBhdCAxMTozODoyNCArMDIwMCwgR3dhbi1neWVvbmcgTXVuIHdyb3RlOgo+ IEl0IGlzIGEgcHJlbGltaW5hcnkgd29yayBmb3Igc3VwcG9ydGluZyBtdWx0aXBsZSBFRFAgUFNS IGFuZAo+IERQIFBhbmVsUmVwbGF5LiBBbmQgaXQgcmVmYWN0b3JzIHNpbmdsZXRvbiBQU1IgdG8g TXVsdGkgVHJhbnNjb2Rlcgo+IHN1cHBvcnRhYmxlIFBTUi4KPiBBbmQgdGhpcyBtb3ZlcyBhbmQg cmVuYW1lcyB0aGUgaTkxNV9wc3Igc3RydWN0dXJlIG9mIGRybV9pOTE1X3ByaXZhdGUncyB0bwo+ IGludGVsX2RwJ3MgaW50ZWxfcHNyIHN0cnVjdHVyZS4KPiBJdCBhbHNvIGNhdXNlcyBjaGFuZ2Vz IGluIFBTUiBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZSBmb3Igc3VwcG9ydGluZwo+IG11bHRp cGxlIHRyYW5zY29kZXJzLiBCdXQgaXQgZG9lcyBub3QgY2hhbmdlIHRoZSBzY2VuYXJpbyBhbmQg dGltaW5nIG9mCj4gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBQU1IuIEFuZCBpdCBub3Qgc3VwcG9y dCBtdWx0aXBsZSBwaXBlcyB3aXRoCj4gYSBzaW5nbGUgdHJhbnNjb2RlciBQU1IgY2FzZSB5ZXQu Cj4gCj4gdjI6IEZpeCBpbmRlbnRhdGlvbiBhbmQgYWRkIGNvbW1lbnRzCj4gdjM6IFJlbW92ZSBC bGFuayBsaW5lCj4gdjQ6IFJlYmFzZWQKPiB2NTogUmViYXNlZCBhbmQgQWRkcmVzc2VkIEFuc2h1 bWFuJ3MgcmV2aWV3IGNvbW1lbnQuCj4gICAgIC0gTW92ZSBjYWxsaW5nIG9mIGludGVsX3Bzcl9p bml0KCkgdG8gaW50ZWxfZHBfaW5pdF9jb25uZWN0b3IoKQo+IHY2OiBBZGRyZXNzIEFuc2h1bWFu J3MgcmV2aWV3IGNvbW1lbnRzCj4gICAgLSBSZW1vdmUgd3JvbmcgY29tbWVudHMgYW5kIGFkZCBj b21tZW50cyBmb3IgYSBsaW1pdCBvZiBzdXBwb3J0aW5nIG9mCj4gICAgICBhIHNpbmdsZSBwaXBl IFBTUgpZb3UgbWlzc2VkIHRvIGFkZHJlc3NlZCBmZXcgY29tbWVudC4gCklzIGRycnNfc3RhdHVz X3Blcl9jcnRjIGRlYnVnZnMgcHJpbnQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmU/CkFsc28gcGxl YXNlIHVzZSBkcm1fe2RiZyx3YXJufSBhdCBldmVyeSBwbGFjZSBpbiB0aGlzIHBhdGNoLgoKVGhh bmtzLApBbnNodW1hbiBHdXB0YS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBNdW4g PGd3YW4tZ3llb25nLm11bkBpbnRlbC5jb20+Cj4gQ2M6IEpvc8OpIFJvYmVydG8gZGUgU291emEg PGpvc2Uuc291emFAaW50ZWwuY29tPgo+IENjOiBKdWhhLVBla2thIEhlaWtraWxhIDxqdWhhcGVr a2EuaGVpa2tpbGFAZ21haWwuY29tPgo+IENjOiBBbnNodW1hbiBHdXB0YSA8YW5zaHVtYW4uZ3Vw dGFAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RkaS5jICAgICAgfCAgIDMgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuYyAgfCAgIDQgLQo+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 X2RlYnVnZnMuYyAgfCAxMTEgKystLQo+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5X3R5cGVzLmggICAgfCAgMzggKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcC5jICAgICAgIHwgIDIzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfcHNyLmMgICAgICB8IDU4MiArKysrKysrKysrLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaCAgICAgIHwgIDE0ICstCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMgICB8ICAgNiArLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgfCAgMzggLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYyAgICAgICAgICAgICAgIHwgIDQ5ICstCj4gIDEwIGZpbGVz IGNoYW5nZWQsIDQ4OCBpbnNlcnRpb25zKCspLCAzODAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCj4gaW5kZXggNjg2MzIzNmRmMWQwLi40 Yjg3ZjcyY2I5YzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kZGkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRp LmMKPiBAQCAtNDMyMCw3ICs0MzIwLDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV91cGRhdGVf cGlwZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAgCj4gIAlpbnRlbF9k ZGlfc2V0X2RwX21zYShjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiAgCj4gKwkvL1RPRE86IG1v dmUgUFNSIHJlbGF0ZWQgZnVuY3Rpb25zIGludG8gaW50ZWxfcHNyX3VwZGF0ZSgpCj4gKwlpbnRl bF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoaW50ZWxfZHAsIGNydGNfc3RhdGUpOwo+ ICAJaW50ZWxfcHNyX3VwZGF0ZShpbnRlbF9kcCwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4g Kwo+ICAJaW50ZWxfZHBfc2V0X2luZm9mcmFtZXMoZW5jb2RlciwgdHJ1ZSwgY3J0Y19zdGF0ZSwg Y29ubl9zdGF0ZSk7Cj4gIAlpbnRlbF9lZHBfZHJyc191cGRhdGUoaW50ZWxfZHAsIGNydGNfc3Rh dGUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku Ywo+IGluZGV4IDc4NDUyZGU1ZTEyZi4uYTc1MzY0N2IwYmNiIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtMTU4NjksOCArMTU4Njks NiBAQCBzdGF0aWMgdm9pZCBjb21taXRfcGlwZV9jb25maWcoc3RydWN0IGludGVsX2F0b21pY19z dGF0ZSAqc3RhdGUsCj4gIAo+ICAJCWlmIChuZXdfY3J0Y19zdGF0ZS0+dXBkYXRlX3BpcGUpCj4g IAkJCWludGVsX3BpcGVfZmFzdHNldChvbGRfY3J0Y19zdGF0ZSwgbmV3X2NydGNfc3RhdGUpOwo+ IC0KPiAtCQlpbnRlbF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwobmV3X2NydGNfc3Rh dGUpOwo+ICAJfQo+ICAKPiAgCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5hdG9taWNfdXBkYXRlX3dh dGVybWFya3MpCj4gQEAgLTE3ODI5LDggKzE3ODI3LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfc2V0 dXBfb3V0cHV0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkJaW50ZWxf ZHZvX2luaXQoZGV2X3ByaXYpOwo+ICAJfQo+ICAKPiAtCWludGVsX3Bzcl9pbml0KGRldl9wcml2 KTsKPiAtCj4gIAlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVy KSB7Cj4gIAkJZW5jb2Rlci0+YmFzZS5wb3NzaWJsZV9jcnRjcyA9Cj4gIAkJCWludGVsX2VuY29k ZXJfcG9zc2libGVfY3J0Y3MoZW5jb2Rlcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5jCj4gaW5kZXggY2Q3ZTU1MTllZTdk Li4wNDEwNTMxNjdkN2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMKPiBAQCAtMjQ5LDE4ICsyNDksMTcgQEAgc3Rh dGljIGludCBpOTE1X3Bzcl9zaW5rX3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKPiAgCQkic2luayBpbnRlcm5hbCBlcnJvciIsCj4gIAl9Owo+ICAJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG0tPnByaXZhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+ZGV2KTsKPiAgCXN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAgPQo+ICAJCWludGVsX2F0dGFjaGVkX2RwKHRvX2ludGVsX2Nvbm5l Y3Rvcihjb25uZWN0b3IpKTsKPiAgCWludCByZXQ7Cj4gIAo+IC0JaWYgKCFDQU5fUFNSKGRldl9w cml2KSkgewo+IC0JCXNlcV9wdXRzKG0sICJQU1IgVW5zdXBwb3J0ZWRcbiIpOwo+ICsJaWYgKGNv bm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQo+ICAJCXJldHVy biAtRU5PREVWOwo+IC0JfQo+ICAKPiAtCWlmIChjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKPiArCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpIHsKPiArCQlz ZXFfcHV0cyhtLCAiUFNSIFVuc3VwcG9ydGVkXG4iKTsKPiAgCQlyZXR1cm4gLUVOT0RFVjsKPiAr CX0KPiAgCj4gIAlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmaW50ZWxfZHAtPmF1eCwgRFBfUFNS X1NUQVRVUywgJnZhbCk7Cj4gIAo+IEBAIC0yODAsMTIgKzI3OSwxMyBAQCBzdGF0aWMgaW50IGk5 MTVfcHNyX3Npbmtfc3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ ICBERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9wc3Jfc2lua19zdGF0dXMpOwo+ICAKPiAgc3Rh dGljIHZvaWQKPiAtcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gK3Bzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgewo+ICAJdTMyIHZhbCwg c3RhdHVzX3ZhbDsKPiAgCWNvbnN0IGNoYXIgKnN0YXR1cyA9ICJ1bmtub3duIjsKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAK PiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ICsJaWYgKGludGVsX2RwLT5w c3IucHNyMl9lbmFibGVkKSB7Cj4gIAkJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsaXZlX3N0 YXR1c1tdID0gewo+ICAJCQkiSURMRSIsCj4gIAkJCSJDQVBUVVJFIiwKPiBAQCAtMzAwLDcgKzMw MCw3IEBAIHBzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJCQkiVEdfT04iCj4gIAkJfTsKPiAgCQl2YWwgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJp di0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBFRFBfUFNSMl9TVEFUVVMoaW50ZWxfZHAt PnBzci50cmFuc2NvZGVyKSk7Cj4gIAkJc3RhdHVzX3ZhbCA9ICh2YWwgJiBFRFBfUFNSMl9TVEFU VVNfU1RBVEVfTUFTSykgPj4KPiAgCQkJICAgICAgRURQX1BTUjJfU1RBVFVTX1NUQVRFX1NISUZU Owo+ICAJCWlmIChzdGF0dXNfdmFsIDwgQVJSQVlfU0laRShsaXZlX3N0YXR1cykpCj4gQEAgLTMx Nyw3ICszMTcsNyBAQCBwc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCQkJIlNSREVOVF9PTiIsCj4gIAkJfTsK PiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9QU1JfU1RB VFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1JfU1RBVFVT KGludGVsX2RwLT5wc3IudHJhbnNjb2RlcikpOwo+ICAJCXN0YXR1c192YWwgPSAodmFsICYgRURQ X1BTUl9TVEFUVVNfU1RBVEVfTUFTSykgPj4KPiAgCQkJICAgICAgRURQX1BTUl9TVEFUVVNfU1RB VEVfU0hJRlQ7Cj4gIAkJaWYgKHN0YXR1c192YWwgPCBBUlJBWV9TSVpFKGxpdmVfc3RhdHVzKSkK PiBAQCAtMzI3LDIxICszMjcsMTggQEAgcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gIAlzZXFfcHJpbnRmKG0s ICJTb3VyY2UgUFNSIHN0YXR1czogJXMgWzB4JTA4eF1cbiIsIHN0YXR1cywgdmFsKTsKPiAgfQo+ ICAKPiAtc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqZGF0YSkKPiArc3RhdGljIGludCBpbnRlbF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmls ZSAqbSwgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwo+IC0Jc3RydWN0 IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVsX3Bz ciAqcHNyID0gJmludGVsX2RwLT5wc3I7Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAg CWNvbnN0IGNoYXIgKnN0YXR1czsKPiAgCWJvb2wgZW5hYmxlZDsKPiAgCXUzMiB2YWw7Cj4gIAo+ IC0JaWYgKCFIQVNfUFNSKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gLUVOT0RFVjsKPiAtCj4gIAlz ZXFfcHJpbnRmKG0sICJTaW5rIHN1cHBvcnQ6ICVzIiwgeWVzbm8ocHNyLT5zaW5rX3N1cHBvcnQp KTsKPiAtCWlmIChwc3ItPmRwKQo+IC0JCXNlcV9wcmludGYobSwgIiBbMHglMDJ4XSIsIHBzci0+ ZHAtPnBzcl9kcGNkWzBdKTsKPiArCWlmIChwc3ItPnNpbmtfc3VwcG9ydCkKPiArCQlzZXFfcHJp bnRmKG0sICIgWzB4JTAyeF0iLCBpbnRlbF9kcC0+cHNyX2RwY2RbMF0pOwo+ICAJc2VxX3B1dHMo bSwgIlxuIik7Cj4gIAo+ICAJaWYgKCFwc3ItPnNpbmtfc3VwcG9ydCkKPiBAQCAtMzY1LDE2ICsz NjIsMTYgQEAgc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKPiAgCj4gIAlpZiAocHNyLT5wc3IyX2VuYWJsZWQpIHsKPiAgCQl2YWwg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9QU1IyX0NUTChkZXZfcHJp di0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBFRFBfUFNSMl9DVEwoaW50ZWxfZHAtPnBz ci50cmFuc2NvZGVyKSk7Cj4gIAkJZW5hYmxlZCA9IHZhbCAmIEVEUF9QU1IyX0VOQUJMRTsKPiAg CX0gZWxzZSB7Cj4gIAkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKPiAtCQkJCSAgICBF RFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBFRFBfUFNS X0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsKPiAgCQllbmFibGVkID0gdmFsICYgRURQ X1BTUl9FTkFCTEU7Cj4gIAl9Cj4gIAlzZXFfcHJpbnRmKG0sICJTb3VyY2UgUFNSIGN0bDogJXMg WzB4JTA4eF1cbiIsCj4gIAkJICAgZW5hYmxlZGRpc2FibGVkKGVuYWJsZWQpLCB2YWwpOwo+IC0J cHNyX3NvdXJjZV9zdGF0dXMoZGV2X3ByaXYsIG0pOwo+ICsJcHNyX3NvdXJjZV9zdGF0dXMoaW50 ZWxfZHAsIG0pOwo+ICAJc2VxX3ByaW50ZihtLCAiQnVzeSBmcm9udGJ1ZmZlciBiaXRzOiAweCUw OHhcbiIsCj4gIAkJICAgcHNyLT5idXN5X2Zyb250YnVmZmVyX2JpdHMpOwo+ICAKPiBAQCAtMzgz LDcgKzM4MCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKmRhdGEpCj4gIAkgKi8KPiAgCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8 fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gIAkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwKPiAtCQkJCSAgICBFRFBfUFNSX1BFUkZfQ05UKGRldl9wcml2LT5wc3IudHJhbnNjb2Rl cikpOwo+ICsJCQkJICAgIEVEUF9QU1JfUEVSRl9DTlQoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVy KSk7Cj4gIAkJdmFsICY9IEVEUF9QU1JfUEVSRl9DTlRfTUFTSzsKPiAgCQlzZXFfcHJpbnRmKG0s ICJQZXJmb3JtYW5jZSBjb3VudGVyOiAldVxuIiwgdmFsKTsKPiAgCX0KPiBAQCAtNDA0LDcgKzQw MSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKmRhdGEpCj4gIAkJICovCj4gIAkJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgUFNSMl9T VV9TVEFUVVNfRlJBTUVTOyBmcmFtZSArPSAzKSB7Cj4gIAkJCXZhbCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsCj4gLQkJCQkJICAgIFBTUjJfU1VfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNj b2RlciwgZnJhbWUpKTsKPiArCQkJCQkgICAgUFNSMl9TVV9TVEFUVVMoaW50ZWxfZHAtPnBzci50 cmFuc2NvZGVyLCBmcmFtZSkpOwo+ICAJCQlzdV9mcmFtZXNfdmFsW2ZyYW1lIC8gM10gPSB2YWw7 Cj4gIAkJfQo+ICAKPiBAQCAtNDMwLDIzICs0MjcsNTcgQEAgc3RhdGljIGludCBpOTE1X2VkcF9w c3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlcjsKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBOVUxMOwo+ICsKPiArCWlm ICghSEFTX1BTUihkZXZfcHJpdikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJLyogRmlu ZCB0aGUgZmlyc3QgRURQICovCj4gKwlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwg ZW5jb2Rlcikgewo+ICsJCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsK PiArCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWludGVsX2RwKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ ICsKPiArCXJldHVybiBpbnRlbF9wc3Jfc3RhdHVzKG0sIGludGVsX2RwKTsKPiArfQo+ICsKPiAg c3RhdGljIGludAo+ICBpOTE1X2VkcF9wc3JfZGVidWdfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwp Cj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7Cj4gIAlp bnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0ID0gLUVOT0RF VjsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICAKPiAtCWlmICghQ0FOX1BT UihkZXZfcHJpdikpCj4gLQkJcmV0dXJuIC1FTk9ERVY7Cj4gKwlpZiAoIUhBU19QU1IoZGV2X3By aXYpKQo+ICsJCXJldHVybiByZXQ7Cj4gIAo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s ICJTZXR0aW5nIFBTUiBkZWJ1ZyB0byAlbGx4XG4iLCB2YWwpOwo+ICsJZm9yX2VhY2hfaW50ZWxf ZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICAKPiAtCXdha2VyZWYgPSBpbnRlbF9y dW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwo+ICsJCWlmICghQ0FOX1BTUihp bnRlbF9kcCkpCj4gKwkJCWNvbnRpbnVlOwo+ICAKPiAtCXJldCA9IGludGVsX3Bzcl9kZWJ1Z19z ZXQoZGV2X3ByaXYsIHZhbCk7Cj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVU X0VEUCkgewo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlNldHRpbmcgUFNSIGRl YnVnIHRvICVsbHhcbiIsIHZhbCk7Cj4gIAo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9w cml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiArCQkJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVf cG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Cj4gKwo+ICsJCQkvLyBUT0RPOiBzcGxpdCB0 byBlYWNoIHRyYW5zY29kZXIncyBQU1IgZGVidWcgc3RhdGUKPiArCQkJcmV0ID0gaW50ZWxfcHNy X2RlYnVnX3NldChpbnRlbF9kcCwgdmFsKTsKPiArCj4gKwkJCWludGVsX3J1bnRpbWVfcG1fcHV0 KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gKwkJfQo+ICsJfQo+ICAKPiAgCXJl dHVybiByZXQ7Cj4gIH0KPiBAQCAtNDU1LDEyICs0ODYsMjUgQEAgc3RhdGljIGludAo+ICBpOTE1 X2VkcF9wc3JfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQo+ICB7Cj4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkYXRhOwo+ICsJc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXI7Cj4gIAo+IC0JaWYgKCFDQU5fUFNSKGRldl9wcml2KSkKPiArCWlmICghSEFT X1BTUihkZXZfcHJpdikpCj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gIAo+IC0JKnZhbCA9IFJFQURf T05DRShkZXZfcHJpdi0+cHNyLmRlYnVnKTsKPiAtCXJldHVybiAwOwo+ICsJZm9yX2VhY2hfaW50 ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsKPiArCQlpZiAoIUNBTl9QU1Io aW50ZWxfZHApKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLy8gVE9ETzogc3BsaXQgdG8gZWFj aCB0cmFuc2NvZGVyJ3MgUFNSIGRlYnVnIHN0YXRlCj4gKwkJaWYgKGVuY29kZXItPnR5cGUgPT0g SU5URUxfT1VUUFVUX0VEUCkgewo+ICsJCQkqdmFsID0gUkVBRF9PTkNFKGludGVsX2RwLT5wc3Iu ZGVidWcpOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FTk9E RVY7Cj4gIH0KPiAgCj4gIERFRklORV9TSU1QTEVfQVRUUklCVVRFKGk5MTVfZWRwX3Bzcl9kZWJ1 Z19mb3BzLAo+IEBAIC0xMjM0LDkgKzEyNzgsNiBAQCBzdGF0aWMgdm9pZCBkcnJzX3N0YXR1c19w ZXJfY3J0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4gIAkJLyogZGlzYWJsZV9kcnJzKCkgd2lsbCBt YWtlIGRycnMtPmRwIE5VTEwgKi8KPiAgCQlpZiAoIWRycnMtPmRwKSB7Cj4gIAkJCXNlcV9wdXRz KG0sICJJZGxlbmVzcyBEUlJTOiBEaXNhYmxlZFxuIik7Cj4gLQkJCWlmIChkZXZfcHJpdi0+cHNy LmVuYWJsZWQpCj4gLQkJCQlzZXFfcHV0cyhtLAo+IC0JCQkJIlx0QXMgUFNSIGlzIGVuYWJsZWQs IERSUlMgaXMgbm90IGVuYWJsZWRcbiIpOwo+ICAJCQltdXRleF91bmxvY2soJmRycnMtPm11dGV4 KTsKPiAgCQkJcmV0dXJuOwo+ICAJCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+IGluZGV4IDViYzViZmJjNDU1MS4uOTg5OWZk ZGY0Yzk5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5X3R5cGVzLmgKPiBAQCAtMTMzOSw2ICsxMzM5LDQyIEBAIHN0cnVjdCBpbnRlbF9k cF9jb21wbGlhbmNlIHsKPiAgCXU4IHRlc3RfbGFuZV9jb3VudDsKPiAgfTsKPiAgCj4gK3N0cnVj dCBpbnRlbF9wc3Igewo+ICsJLyogTXV0ZXggZm9yIFBTUiBzdGF0ZSBvZiB0aGUgdHJhbnNjb2Rl ciAqLwo+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4gKwo+ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVH X01PREVfTUFTSwkweDBmCj4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfREVGQVVMVAkJMHgwMAo+ ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0RJU0FCTEUJCTB4MDEKPiArI2RlZmluZSBJOTE1X1BT Ul9ERUJVR19FTkFCTEUJCTB4MDIKPiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19GT1JDRV9QU1Ix CTB4MDMKPiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19JUlEJCTB4MTAKPiArCj4gKwl1MzIgZGVi dWc7Cj4gKwlib29sIHNpbmtfc3VwcG9ydDsKPiArCWJvb2wgZW5hYmxlZDsKPiArCWVudW0gcGlw ZSBwaXBlOwo+ICsJZW51bSB0cmFuc2NvZGVyIHRyYW5zY29kZXI7Cj4gKwlib29sIGFjdGl2ZTsK PiArCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+ICsJdW5zaWduZWQgaW50IGJ1c3lfZnJvbnRi dWZmZXJfYml0czsKPiArCWJvb2wgc2lua19wc3IyX3N1cHBvcnQ7Cj4gKwlib29sIGxpbmtfc3Rh bmRieTsKPiArCWJvb2wgY29sb3JpbWV0cnlfc3VwcG9ydDsKPiArCWJvb2wgcHNyMl9lbmFibGVk Owo+ICsJYm9vbCBwc3IyX3NlbF9mZXRjaF9lbmFibGVkOwo+ICsJdTggc2lua19zeW5jX2xhdGVu Y3k7Cj4gKwlrdGltZV90IGxhc3RfZW50cnlfYXR0ZW1wdDsKPiArCWt0aW1lX3QgbGFzdF9leGl0 Owo+ICsJYm9vbCBzaW5rX25vdF9yZWxpYWJsZTsKPiArCWJvb2wgaXJxX2F1eF9lcnJvcjsKPiAr CXUxNiBzdV94X2dyYW51bGFyaXR5Owo+ICsJYm9vbCBkYzNjb19lbmFibGVkOwo+ICsJdTMyIGRj M2NvX2V4aXRfZGVsYXk7Cj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRjM2NvX3dvcms7Cj4gKwlz dHJ1Y3QgZHJtX2RwX3ZzY19zZHAgdnNjOwo+ICt9Owo+ICsKPiAgc3RydWN0IGludGVsX2RwIHsK PiAgCWk5MTVfcmVnX3Qgb3V0cHV0X3JlZzsKPiAgCXUzMiBEUDsKPiBAQCAtMTQ2MCw2ICsxNDk2 LDggQEAgc3RydWN0IGludGVsX2RwIHsKPiAgCj4gIAlib29sIGhvYmxfZmFpbGVkOwo+ICAJYm9v bCBob2JsX2FjdGl2ZTsKPiArCj4gKwlzdHJ1Y3QgaW50ZWxfcHNyIHBzcjsKPiAgfTsKPiAgCj4g IGVudW0gbHNwY29uX3ZlbmRvciB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZHAuYwo+IGluZGV4IGIyYmMwYzhjMzljNy4uNTczMGNhZDdiNmFjIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+IEBAIC0yNzAyLDEyICsyNzAyLDEwIEBAIHZv aWQgaW50ZWxfZHBfY29tcHV0ZV9wc3JfdnNjX3NkcChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LAo+ICAJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwK PiAgCQkJCSAgc3RydWN0IGRybV9kcF92c2Nfc2RwICp2c2MpCj4gIHsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0KPiAgCXZz Yy0+c2RwX3R5cGUgPSBEUF9TRFBfVlNDOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJf ZW5hYmxlZCkgewo+IC0JCWlmIChkZXZfcHJpdi0+cHNyLmNvbG9yaW1ldHJ5X3N1cHBvcnQgJiYK PiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ICsJCWlmIChpbnRlbF9kcC0+ cHNyLmNvbG9yaW1ldHJ5X3N1cHBvcnQgJiYKPiAgCQkgICAgaW50ZWxfZHBfbmVlZHNfdnNjX3Nk cChjcnRjX3N0YXRlLCBjb25uX3N0YXRlKSkgewo+ICAJCQkvKiBbUFNSMiwgK0NvbG9yaW1ldHJ5 XSAqLwo+ICAJCQlpbnRlbF9kcF9jb21wdXRlX3ZzY19jb2xvcmltZXRyeShjcnRjX3N0YXRlLCBj b25uX3N0YXRlLAo+IEBAIC0zODQ0LDcgKzM4NDIsNyBAQCBib29sIGludGVsX2RwX2luaXRpYWxf ZmFzdHNldF9jaGVjayhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCQlyZXR1cm4g ZmFsc2U7Cj4gIAl9Cj4gIAo+IC0JaWYgKENBTl9QU1IoaTkxNSkgJiYgaW50ZWxfZHBfaXNfZWRw KGludGVsX2RwKSkgewo+ICsJaWYgKENBTl9QU1IoaW50ZWxfZHApICYmIGludGVsX2RwX2lzX2Vk cChpbnRlbF9kcCkpIHsKPiAgCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiRm9yY2luZyBmdWxs IG1vZGVzZXQgdG8gY29tcHV0ZSBQU1Igc3RhdGVcbiIpOwo+ICAJCWNydGNfc3RhdGUtPnVhcGku bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gQEAgLTgwNzAsNiArODA2 OCwxNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kcF9tb2Rlc2V0X3JldHJ5X3dvcmtfZm4oc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChjb25u ZWN0b3ItPmRldik7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIGludGVsX2RwX3VwZGF0ZV9waXBl KHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJCQkJIHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyLAo+ICsJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAo+ICsJCQkJIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVs X2RwKGVuY29kZXIpOwo+ICsKPiArCWludGVsX3BhbmVsX3VwZGF0ZV9iYWNrbGlnaHQoc3RhdGUs IGVuY29kZXIsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICsJaW50ZWxfcHNyMl9wcm9ncmFt X3RyYW5zX21hbl90cmtfY3RsKGludGVsX2RwLCBjcnRjX3N0YXRlKTsKPiArfQo+ICsKPiAgYm9v bAo+ICBpbnRlbF9kcF9pbml0X2Nvbm5lY3RvcihzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpk aWdfcG9ydCwKPiAgCQkJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKQo+ IEBAIC04MTg0LDYgKzgxOTMsOCBAQCBpbnRlbF9kcF9pbml0X2Nvbm5lY3RvcihzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwKPiAgCQkJICAgICAgICh0ZW1wICYgfjB4ZikgfCAw eGQpOwo+ICAJfQo+ICAKPiArCWludGVsX3Bzcl9pbml0KGludGVsX2RwKTsKPiArCj4gIAlyZXR1 cm4gdHJ1ZTsKPiAgCj4gIGZhaWw6Cj4gQEAgLTgyMjUsNyArODIzNiw3IEBAIGJvb2wgaW50ZWxf ZHBfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAlpbnRlbF9lbmNv ZGVyLT5nZXRfY29uZmlnID0gaW50ZWxfZHBfZ2V0X2NvbmZpZzsKPiAgCWludGVsX2VuY29kZXIt PnN5bmNfc3RhdGUgPSBpbnRlbF9kcF9zeW5jX3N0YXRlOwo+ICAJaW50ZWxfZW5jb2Rlci0+aW5p dGlhbF9mYXN0c2V0X2NoZWNrID0gaW50ZWxfZHBfaW5pdGlhbF9mYXN0c2V0X2NoZWNrOwo+IC0J aW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBpbnRlbF9wYW5lbF91cGRhdGVfYmFja2xpZ2h0 Owo+ICsJaW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBpbnRlbF9kcF91cGRhdGVfcGlwZTsK PiAgCWludGVsX2VuY29kZXItPnN1c3BlbmQgPSBpbnRlbF9kcF9lbmNvZGVyX3N1c3BlbmQ7Cj4g IAlpbnRlbF9lbmNvZGVyLT5zaHV0ZG93biA9IGludGVsX2RwX2VuY29kZXJfc2h1dGRvd247Cj4g IAlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfcHNyLmMKPiBpbmRleCBkOWEzOTVjNDg2ZDMuLmU0YzNkODk2NjI0NiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYwo+IEBAIC03OSwxMSAr NzksMTMgQEAKPiAgICogdXNlIHBhZ2UgZmxpcHMuCj4gICAqLwo+ICAKPiAtc3RhdGljIGJvb2wg cHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICtzdGF0 aWMgYm9vbCBwc3JfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAg ewo+IC0Jc3dpdGNoIChpOTE1LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0sp IHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOwo+ICsKPiArCXN3aXRjaCAoaW50ZWxfZHAtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RF QlVHX01PREVfTUFTSykgewo+ICAJY2FzZSBJOTE1X1BTUl9ERUJVR19ERUZBVUxUOgo+IC0JCXJl dHVybiBpOTE1LT5wYXJhbXMuZW5hYmxlX3BzcjsKPiArCQlyZXR1cm4gZGV2X3ByaXYtPnBhcmFt cy5lbmFibGVfcHNyOwo+ICAJY2FzZSBJOTE1X1BTUl9ERUJVR19ESVNBQkxFOgo+ICAJCXJldHVy biBmYWxzZTsKPiAgCWRlZmF1bHQ6Cj4gQEAgLTkxLDkgKzkzLDkgQEAgc3RhdGljIGJvb2wgcHNy X2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJfQo+ICB9 Cj4gIAo+IC1zdGF0aWMgYm9vbCBwc3IyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIGJvb2wgcHNyMl9nbG9iYWxfZW5hYmxlZChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzd2l0Y2ggKGRldl9wcml2LT5wc3IuZGVi dWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHsKPiArCXN3aXRjaCAoaW50ZWxfZHAtPnBz ci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSykgewo+ICAJY2FzZSBJOTE1X1BTUl9E RUJVR19ESVNBQkxFOgo+ICAJY2FzZSBJOTE1X1BTUl9ERUJVR19GT1JDRV9QU1IxOgo+ICAJCXJl dHVybiBmYWxzZTsKPiBAQCAtMTAyLDExICsxMDQsMTIgQEAgc3RhdGljIGJvb2wgcHNyMl9nbG9i YWxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAl9Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIHBzcl9pcnFfY29udHJvbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIHBzcl9pcnFfY29udHJvbChzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQo+ICB7Cj4gIAllbnVtIHRyYW5zY29kZXIgdHJhbnNfc2hpZnQ7Cj4gIAl1 MzIgbWFzaywgdmFsOwo+ICAJaTkxNV9yZWdfdCBpbXJfcmVnOwo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gIAo+ICAJLyoKPiAg CSAqIGdlbjEyKyBoYXMgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIHRyYW5zY29kZXIgYW5kIG9uZSBw ZXIgdHJhbnNjb2Rlcgo+IEBAIC0xMTUsMTQgKzExOCwxNCBAQCBzdGF0aWMgdm9pZCBwc3JfaXJx X2NvbnRyb2woc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJICovCj4gIAlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewo+ICAJCXRyYW5zX3NoaWZ0ID0gMDsKPiAt CQlpbXJfcmVnID0gVFJBTlNfUFNSX0lNUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJ CWltcl9yZWcgPSBUUkFOU19QU1JfSU1SKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlcik7Cj4gIAl9 IGVsc2Ugewo+IC0JCXRyYW5zX3NoaWZ0ID0gZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyOwo+ICsJ CXRyYW5zX3NoaWZ0ID0gaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyOwo+ICAJCWltcl9yZWcgPSBF RFBfUFNSX0lNUjsKPiAgCX0KPiAgCj4gIAltYXNrID0gRURQX1BTUl9FUlJPUih0cmFuc19zaGlm dCk7Cj4gLQlpZiAoZGV2X3ByaXYtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX0lSUSkKPiAr CWlmIChpbnRlbF9kcC0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVCVUdfSVJRKQo+ICAJCW1hc2sg fD0gRURQX1BTUl9QT1NUX0VYSVQodHJhbnNfc2hpZnQpIHwKPiAgCQkJRURQX1BTUl9QUkVfRU5U UlkodHJhbnNfc2hpZnQpOwo+ICAKPiBAQCAtMTcxLDM4ICsxNzQsMzcgQEAgc3RhdGljIHZvaWQg cHNyX2V2ZW50X3ByaW50KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAJCWRybV9k Ymdfa21zKCZpOTE1LT5kcm0sICJcdFBTUiBkaXNhYmxlZFxuIik7Cj4gIH0KPiAgCj4gLXZvaWQg aW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg dTMyIHBzcl9paXIpCj4gK3ZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsIHUzMiBwc3JfaWlyKQo+ICB7Cj4gLQllbnVtIHRyYW5zY29kZXIgY3B1X3Ry YW5zY29kZXIgPSBkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXI7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCWVudW0gdHJhbnNj b2RlciBjcHVfdHJhbnNjb2RlciA9IGludGVsX2RwLT5wc3IudHJhbnNjb2RlcjsKPiAgCWVudW0g dHJhbnNjb2RlciB0cmFuc19zaGlmdDsKPiAgCWk5MTVfcmVnX3QgaW1yX3JlZzsKPiAgCWt0aW1l X3QgdGltZV9ucyA9ICBrdGltZV9nZXQoKTsKPiAgCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMikgewo+ICAJCXRyYW5zX3NoaWZ0ID0gMDsKPiAtCQlpbXJfcmVnID0gVFJBTlNfUFNS X0lNUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJCWltcl9yZWcgPSBUUkFOU19QU1Jf SU1SKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlcik7Cj4gIAl9IGVsc2Ugewo+IC0JCXRyYW5zX3No aWZ0ID0gZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyOwo+ICsJCXRyYW5zX3NoaWZ0ID0gaW50ZWxf ZHAtPnBzci50cmFuc2NvZGVyOwo+ICAJCWltcl9yZWcgPSBFRFBfUFNSX0lNUjsKPiAgCX0KPiAg Cj4gIAlpZiAocHNyX2lpciAmIEVEUF9QU1JfUFJFX0VOVFJZKHRyYW5zX3NoaWZ0KSkgewo+IC0J CWRldl9wcml2LT5wc3IubGFzdF9lbnRyeV9hdHRlbXB0ID0gdGltZV9uczsKPiAtCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJICAgICJbdHJhbnNjb2RlciAlc10gUFNSIGVudHJ5 IGF0dGVtcHQgaW4gMiB2YmxhbmtzXG4iLAo+IC0JCQkgICAgdHJhbnNjb2Rlcl9uYW1lKGNwdV90 cmFuc2NvZGVyKSk7Cj4gKwkJaW50ZWxfZHAtPnBzci5sYXN0X2VudHJ5X2F0dGVtcHQgPSB0aW1l X25zOwo+ICsJCURSTV9ERUJVR19LTVMoIlt0cmFuc2NvZGVyICVzXSBQU1IgZW50cnkgYXR0ZW1w dCBpbiAyIHZibGFua3NcbiIsCj4gKwkJCSAgICAgIHRyYW5zY29kZXJfbmFtZShjcHVfdHJhbnNj b2RlcikpOwo+ICAJfQo+ICAKPiAgCWlmIChwc3JfaWlyICYgRURQX1BTUl9QT1NUX0VYSVQodHJh bnNfc2hpZnQpKSB7Cj4gLQkJZGV2X3ByaXYtPnBzci5sYXN0X2V4aXQgPSB0aW1lX25zOwo+IC0J CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAgIlt0cmFuc2NvZGVyICVzXSBQ U1IgZXhpdCBjb21wbGV0ZWRcbiIsCj4gLQkJCSAgICB0cmFuc2NvZGVyX25hbWUoY3B1X3RyYW5z Y29kZXIpKTsKPiArCQlpbnRlbF9kcC0+cHNyLmxhc3RfZXhpdCA9IHRpbWVfbnM7Cj4gKwkJRFJN X0RFQlVHX0tNUygiW3RyYW5zY29kZXIgJXNdIFBTUiBleGl0IGNvbXBsZXRlZFxuIiwKPiArCQkJ ICAgICAgdHJhbnNjb2Rlcl9uYW1lKGNwdV90cmFuc2NvZGVyKSk7Cj4gIAo+ICAJCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDkpIHsKPiAgCQkJdTMyIHZhbCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsCj4gIAkJCQkJCVBTUl9FVkVOVChjcHVfdHJhbnNjb2RlcikpOwo+IC0JCQlib29sIHBz cjJfZW5hYmxlZCA9IGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkOwo+ICsJCQlib29sIHBzcjJf ZW5hYmxlZCA9IGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkOwo+ICAKPiAgCQkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIFBTUl9FVkVOVChjcHVfdHJhbnNjb2RlciksCj4gIAkJCQkgICAgICAg dmFsKTsKPiBAQCAtMjEzLDEwICsyMTUsMTAgQEAgdm9pZCBpbnRlbF9wc3JfaXJxX2hhbmRsZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcHNyX2lpcikKPiAgCWlmIChw c3JfaWlyICYgRURQX1BTUl9FUlJPUih0cmFuc19zaGlmdCkpIHsKPiAgCQl1MzIgdmFsOwo+ICAK PiAtCQlkcm1fd2FybigmZGV2X3ByaXYtPmRybSwgIlt0cmFuc2NvZGVyICVzXSBQU1IgYXV4IGVy cm9yXG4iLAo+ICsJCURSTV9XQVJOKCJbdHJhbnNjb2RlciAlc10gUFNSIGF1eCBlcnJvclxuIiwK PiAgCQkJIHRyYW5zY29kZXJfbmFtZShjcHVfdHJhbnNjb2RlcikpOwo+ICAKPiAtCQlkZXZfcHJp di0+cHNyLmlycV9hdXhfZXJyb3IgPSB0cnVlOwo+ICsJCWludGVsX2RwLT5wc3IuaXJxX2F1eF9l cnJvciA9IHRydWU7Cj4gIAo+ICAJCS8qCj4gIAkJICogSWYgdGhpcyBpbnRlcnJ1cHRpb24gaXMg bm90IG1hc2tlZCBpdCB3aWxsIGtlZXAKPiBAQCAtMjMwLDcgKzIzMiw3IEBAIHZvaWQgaW50ZWxf cHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBz cl9paXIpCj4gIAkJdmFsIHw9IEVEUF9QU1JfRVJST1IodHJhbnNfc2hpZnQpOwo+ICAJCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBpbXJfcmVnLCB2YWwpOwo+ICAKPiAtCQlzY2hlZHVsZV93b3Jr KCZkZXZfcHJpdi0+cHNyLndvcmspOwo+ICsJCXNjaGVkdWxlX3dvcmsoJmludGVsX2RwLT5wc3Iu d29yayk7Cj4gIAl9Cj4gIH0KPiAgCj4gQEAgLTI5MSwxMiArMjkzLDYgQEAgdm9pZCBpbnRlbF9w c3JfaW5pdF9kcGNkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ICAJCXRvX2k5MTUoZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApLT5iYXNlLmJhc2UuZGV2KTsKPiAgCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5kcCkgewo+IC0J CWRybV93YXJuKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgIk1vcmUgdGhhbiBvbmUgZURQIHBhbmVs IGZvdW5kLCBQU1Igc3VwcG9ydCBzaG91bGQgYmUgZXh0ZW5kZWRcbiIpOwo+IC0JCXJldHVybjsK PiAtCX0KPiAtCj4gIAlkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9kcC0+YXV4LCBEUF9QU1JfU1VQ UE9SVCwgaW50ZWxfZHAtPnBzcl9kcGNkLAo+ICAJCQkgc2l6ZW9mKGludGVsX2RwLT5wc3JfZHBj ZCkpOwo+ICAKPiBAQCAtMzE3LDEyICszMTMsMTAgQEAgdm9pZCBpbnRlbF9wc3JfaW5pdF9kcGNk KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkJcmV0dXJuOwo+ICAJfQo+ICAKPiAtCWRl dl9wcml2LT5wc3Iuc2lua19zdXBwb3J0ID0gdHJ1ZTsKPiAtCWRldl9wcml2LT5wc3Iuc2lua19z eW5jX2xhdGVuY3kgPQo+ICsJaW50ZWxfZHAtPnBzci5zaW5rX3N1cHBvcnQgPSB0cnVlOwo+ICsJ aW50ZWxfZHAtPnBzci5zaW5rX3N5bmNfbGF0ZW5jeSA9Cj4gIAkJaW50ZWxfZHBfZ2V0X3Npbmtf c3luY19sYXRlbmN5KGludGVsX2RwKTsKPiAgCj4gLQlkZXZfcHJpdi0+cHNyLmRwID0gaW50ZWxf ZHA7Cj4gLQo+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSAmJgo+ICAJICAgIChpbnRl bF9kcC0+cHNyX2RwY2RbMF0gPT0gRFBfUFNSMl9XSVRIX1lfQ09PUkRfSVNfU1VQUE9SVEVEKSkg ewo+ICAJCWJvb2wgeV9yZXEgPSBpbnRlbF9kcC0+cHNyX2RwY2RbMV0gJgo+IEBAIC0zNDAsMTQg KzMzNCwxNCBAQCB2b2lkIGludGVsX3Bzcl9pbml0X2RwY2Qoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiAgCQkgKiBZLWNvb3JkaW5hdGUgcmVxdWlyZW1lbnQgcGFuZWxzIHdlIHdvdWxkIG5l ZWQgdG8gZW5hYmxlCj4gIAkJICogR1RDIGZpcnN0Lgo+ICAJCSAqLwo+IC0JCWRldl9wcml2LT5w c3Iuc2lua19wc3IyX3N1cHBvcnQgPSB5X3JlcSAmJiBhbHBtOwo+ICsJCWludGVsX2RwLT5wc3Iu c2lua19wc3IyX3N1cHBvcnQgPSB5X3JlcSAmJiBhbHBtOwo+ICAJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLCAiUFNSMiAlc3N1cHBvcnRlZFxuIiwKPiAtCQkJICAgIGRldl9wcml2LT5wc3Iu c2lua19wc3IyX3N1cHBvcnQgPyAiIiA6ICJub3QgIik7Cj4gKwkJCSAgICBpbnRlbF9kcC0+cHNy LnNpbmtfcHNyMl9zdXBwb3J0ID8gIiIgOiAibm90ICIpOwo+ICAKPiAtCQlpZiAoZGV2X3ByaXYt PnBzci5zaW5rX3BzcjJfc3VwcG9ydCkgewo+IC0JCQlkZXZfcHJpdi0+cHNyLmNvbG9yaW1ldHJ5 X3N1cHBvcnQgPQo+ICsJCWlmIChpbnRlbF9kcC0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0KSB7Cj4g KwkJCWludGVsX2RwLT5wc3IuY29sb3JpbWV0cnlfc3VwcG9ydCA9Cj4gIAkJCQlpbnRlbF9kcF9n ZXRfY29sb3JpbWV0cnlfc3RhdHVzKGludGVsX2RwKTsKPiAtCQkJZGV2X3ByaXYtPnBzci5zdV94 X2dyYW51bGFyaXR5ID0KPiArCQkJaW50ZWxfZHAtPnBzci5zdV94X2dyYW51bGFyaXR5ID0KPiAg CQkJCWludGVsX2RwX2dldF9zdV94X2dyYW51bGFydGl5KGludGVsX2RwKTsKPiAgCQl9Cj4gIAl9 Cj4gQEAgLTM3Myw3ICszNjcsNyBAQCBzdGF0aWMgdm9pZCBoc3dfcHNyX3NldHVwX2F1eChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJQlVJTERfQlVHX09OKHNpemVvZihhdXhfbXNnKSA+ IDIwKTsKPiAgCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYXV4X21zZyk7IGkgKz0gNCkKPiAgCQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwKPiAtCQkJICAgICAgIEVEUF9QU1JfQVVYX0RBVEEoZGV2 X3ByaXYtPnBzci50cmFuc2NvZGVyLCBpID4+IDIpLAo+ICsJCQkgICAgICAgRURQX1BTUl9BVVhf REFUQShpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIsIGkgPj4gMiksCj4gIAkJCSAgICAgICBpbnRl bF9kcF9wYWNrX2F1eCgmYXV4X21zZ1tpXSwgc2l6ZW9mKGF1eF9tc2cpIC0gaSkpOwo+ICAKPiAg CWF1eF9jbG9ja19kaXZpZGVyID0gaW50ZWxfZHAtPmdldF9hdXhfY2xvY2tfZGl2aWRlcihpbnRl bF9kcCwgMCk7Cj4gQEAgLTM4NCw3ICszNzgsNyBAQCBzdGF0aWMgdm9pZCBoc3dfcHNyX3NldHVw X2F1eChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAKPiAgCS8qIFNlbGVjdCBvbmx5IHZh bGlkIGJpdHMgZm9yIFNSRF9BVVhfQ1RMICovCj4gIAlhdXhfY3RsICY9IHBzcl9hdXhfbWFzazsK PiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0FVWF9DVEwoZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyKSwKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0FVWF9D VEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwKPiAgCQkgICAgICAgYXV4X2N0bCk7Cj4gIH0K PiAgCj4gQEAgLTM5NCwxNCArMzg4LDE0IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVf c2luayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJdTggZHBjZF92YWwgPSBEUF9QU1Jf RU5BQkxFOwo+ICAKPiAgCS8qIEVuYWJsZSBBTFBNIGF0IHNpbmsgZm9yIHBzcjIgKi8KPiAtCWlm IChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNy Ml9lbmFibGVkKSB7Cj4gIAkJZHJtX2RwX2RwY2Rfd3JpdGViKCZpbnRlbF9kcC0+YXV4LCBEUF9S RUNFSVZFUl9BTFBNX0NPTkZJRywKPiAgCQkJCSAgIERQX0FMUE1fRU5BQkxFIHwKPiAgCQkJCSAg IERQX0FMUE1fTE9DS19FUlJPUl9JUlFfSFBEX0VOQUJMRSk7Cj4gIAo+ICAJCWRwY2RfdmFsIHw9 IERQX1BTUl9FTkFCTEVfUFNSMiB8IERQX1BTUl9JUlFfSFBEX1dJVEhfQ1JDX0VSUk9SUzsKPiAg CX0gZWxzZSB7Cj4gLQkJaWYgKGRldl9wcml2LT5wc3IubGlua19zdGFuZGJ5KQo+ICsJCWlmIChp bnRlbF9kcC0+cHNyLmxpbmtfc3RhbmRieSkKPiAgCQkJZHBjZF92YWwgfD0gRFBfUFNSX01BSU5f TElOS19BQ1RJVkU7Cj4gIAo+ICAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCj4gQEAg LTQ2NCw3ICs0NTgsNyBAQCBzdGF0aWMgdTggcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiAgCSAqIG9mZi1ieS1vbmUgaXNzdWUgdGhhdCBIVyBoYXMg aW4gc29tZSBjYXNlcy4KPiAgCSAqLwo+ICAJaWRsZV9mcmFtZXMgPSBtYXgoNiwgZGV2X3ByaXYt PnZidC5wc3IuaWRsZV9mcmFtZXMpOwo+IC0JaWRsZV9mcmFtZXMgPSBtYXgoaWRsZV9mcmFtZXMs IGRldl9wcml2LT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgKyAxKTsKPiArCWlkbGVfZnJhbWVzID0g bWF4KGlkbGVfZnJhbWVzLCBpbnRlbF9kcC0+cHNyLnNpbmtfc3luY19sYXRlbmN5ICsgMSk7Cj4g IAo+ICAJaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpZGxlX2ZyYW1lcyA+IDB4Zikp Cj4gIAkJaWRsZV9mcmFtZXMgPSAweGY7Cj4gQEAgLTQ4NCw3ICs0NzgsNyBAQCBzdGF0aWMgdm9p ZCBoc3dfYWN0aXZhdGVfcHNyMShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJaWYgKElT X0hBU1dFTEwoZGV2X3ByaXYpKQo+ICAJCXZhbCB8PSBFRFBfUFNSX01JTl9MSU5LX0VOVFJZX1RJ TUVfOF9MSU5FUzsKPiAgCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5saW5rX3N0YW5kYnkpCj4gKwlp ZiAoaW50ZWxfZHAtPnBzci5saW5rX3N0YW5kYnkpCj4gIAkJdmFsIHw9IEVEUF9QU1JfTElOS19T VEFOREJZOwo+ICAKPiAgCXZhbCB8PSBpbnRlbF9wc3IxX2dldF90cF90aW1lKGludGVsX2RwKTsK PiBAQCAtNDkyLDkgKzQ4Niw5IEBAIHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IxKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQo+ ICAJCXZhbCB8PSBFRFBfUFNSX0NSQ19FTkFCTEU7Cj4gIAo+IC0JdmFsIHw9IChpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKSAmCj4g Kwl2YWwgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5w c3IudHJhbnNjb2RlcikpICYKPiAgCQlFRFBfUFNSX1JFU1RPUkVfUFNSX0FDVElWRV9DVFhfTUFT Syk7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyKSwgdmFsKTsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNS X0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ICB9Cj4gIAo+ICBzdGF0aWMg dTMyIGludGVsX3BzcjJfZ2V0X3RwX3RpbWUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiBA QCAtNTI5LDcgKzUyMyw3IEBAIHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IyKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJ U19HRU1JTklMQUtFKGRldl9wcml2KSkKPiAgCQl2YWwgfD0gRURQX1lfQ09PUkRJTkFURV9FTkFC TEU7Cj4gIAo+IC0JdmFsIHw9IEVEUF9QU1IyX0ZSQU1FX0JFRk9SRV9TVShkZXZfcHJpdi0+cHNy LnNpbmtfc3luY19sYXRlbmN5ICsgMSk7Cj4gKwl2YWwgfD0gRURQX1BTUjJfRlJBTUVfQkVGT1JF X1NVKGludGVsX2RwLT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgKyAxKTsKPiAgCXZhbCB8PSBpbnRl bF9wc3IyX2dldF90cF90aW1lKGludGVsX2RwKTsKPiAgCj4gIAlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMikgewo+IEBAIC01NDgsNyArNTQyLDcgQEAgc3RhdGljIHZvaWQgaHN3X2FjdGl2 YXRlX3BzcjIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCQl2YWwgfD0gRURQX1BTUjJf RkFTVF9XQUtFKDcpOwo+ICAJfQo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfc2VsX2Zl dGNoX2VuYWJsZWQpIHsKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJs ZWQpIHsKPiAgCQkvKiBXQSAxNDA4MzMwODQ3ICovCj4gIAkJaWYgKElTX1RHTF9ESVNQX1JFVklE KGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9BMCkgfHwKPiAgCQkgICAgSVNfUktM X1JFVklEKGRldl9wcml2LCBSS0xfUkVWSURfQTAsIFJLTF9SRVZJRF9BMCkpCj4gQEAgLTU1Nywy MCArNTUxLDIwIEBAIHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IyKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCj4gIAkJCQkgICAgIERJU19SQU1fQllQQVNTX1BTUjJfTUFOX1RSQUNLKTsK PiAgCj4gIAkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsCj4gLQkJCSAgICAgICBQU1IyX01BTl9U UktfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksCj4gKwkJCSAgICAgICBQU1IyX01BTl9U UktfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksCj4gIAkJCSAgICAgICBQU1IyX01BTl9U UktfQ1RMX0VOQUJMRSk7Cj4gIAl9IGVsc2UgaWYgKEhBU19QU1IyX1NFTF9GRVRDSChkZXZfcHJp dikpIHsKPiAgCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwKPiAtCQkJICAgICAgIFBTUjJfTUFO X1RSS19DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwgMCk7Cj4gKwkJCSAgICAgICBQU1Iy X01BTl9UUktfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIDApOwo+ICAJfQo+ICAKPiAg CS8qCj4gIAkgKiBQU1IyIEhXIGlzIGluY29ycmVjdGx5IHVzaW5nIEVEUF9QU1JfVFAxX1RQM19T RUwgYW5kIEJTcGVjIGlzCj4gIAkgKiByZWNvbW1lbmRpbmcga2VlcCB0aGlzIGJpdCB1bnNldCB3 aGlsZSBQU1IyIGlzIGVuYWJsZWQuCj4gIAkgKi8KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpLCAwKTsKPiArCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLCAw KTsKPiAgCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2 LT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQ X1BTUjJfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBib29sCj4gQEAgLTU5Myw1NSArNTg3LDU4IEBAIHN0YXRpYyB1MzIgaW50ZWxfZ2V0X2Zy YW1lX3RpbWVfdXMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAgCQkJ ICAgIGRybV9tb2RlX3ZyZWZyZXNoKCZjc3RhdGUtPmh3LmFkanVzdGVkX21vZGUpKTsKPiAgfQo+ ICAKPiAtc3RhdGljIHZvaWQgcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiArc3RhdGljIHZvaWQgcHNyMl9wcm9ncmFtX2lkbGVfZnJh bWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkJCQkgICAgIHUzMiBpZGxlX2ZyYW1l cykKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkx NShpbnRlbF9kcCk7Cj4gIAl1MzIgdmFsOwo+ICAKPiAgCWlkbGVfZnJhbWVzIDw8PSAgRURQX1BT UjJfSURMRV9GUkFNRV9TSElGVDsKPiAtCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVE UF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKPiArCXZhbCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsK PiAgCXZhbCAmPSB+RURQX1BTUjJfSURMRV9GUkFNRV9NQVNLOwo+ICAJdmFsIHw9IGlkbGVfZnJh bWVzOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+ cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9Q U1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZCB0Z2xfcHNyMl9lbmFibGVfZGMzY28oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICtzdGF0aWMgdm9pZCB0Z2xfcHNyMl9lbmFibGVfZGMzY28oc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAgewo+IC0JcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKGRldl9wcml2 LCAwKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUo aW50ZWxfZHApOwo+ICsKPiArCXBzcjJfcHJvZ3JhbV9pZGxlX2ZyYW1lcyhpbnRlbF9kcCwgMCk7 Cj4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX3NldF90YXJnZXRfZGNfc3RhdGUoZGV2X3ByaXYsIERD X1NUQVRFX0VOX0RDM0NPKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgdGdsX3BzcjJfZGlzYWJs ZV9kYzNjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lk IHRnbF9wc3IyX2Rpc2FibGVfZGMzY28oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ IC0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGRldl9wcml2LT5wc3IuZHA7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAg Cj4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX3NldF90YXJnZXRfZGNfc3RhdGUoZGV2X3ByaXYsIERD X1NUQVRFX0VOX1VQVE9fREM2KTsKPiAtCXBzcjJfcHJvZ3JhbV9pZGxlX2ZyYW1lcyhkZXZfcHJp diwgcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoaW50ZWxfZHApKTsKPiArCXBzcjJfcHJvZ3JhbV9p ZGxlX2ZyYW1lcyhpbnRlbF9kcCwgcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoaW50ZWxfZHApKTsK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgdGdsX2RjM2NvX2Rpc2FibGVfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9Cj4gLQkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqZGV2X3ByaXYpLCBwc3IuZGMzY29f d29yay53b3JrKTsKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQo+ICsJCWNvbnRhaW5l cl9vZih3b3JrLCB0eXBlb2YoKmludGVsX2RwKSwgcHNyLmRjM2NvX3dvcmsud29yayk7Cj4gIAo+ IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiArCW11dGV4X2xvY2soJmludGVs X2RwLT5wc3IubG9jayk7Cj4gIAkvKiBJZiBkZWxheWVkIHdvcmsgaXMgcGVuZGluZywgaXQgaXMg bm90IGlkbGUgKi8KPiAtCWlmIChkZWxheWVkX3dvcmtfcGVuZGluZygmZGV2X3ByaXYtPnBzci5k YzNjb193b3JrKSkKPiArCWlmIChkZWxheWVkX3dvcmtfcGVuZGluZygmaW50ZWxfZHAtPnBzci5k YzNjb193b3JrKSkKPiAgCQlnb3RvIHVubG9jazsKPiAgCj4gLQl0Z2xfcHNyMl9kaXNhYmxlX2Rj M2NvKGRldl9wcml2KTsKPiArCXRnbF9wc3IyX2Rpc2FibGVfZGMzY28oaW50ZWxfZHApOwo+ICB1 bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF91 bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHRnbF9k aXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICtzdGF0aWMgdm9pZCB0Z2xfZGlzYWxsb3dfZGMzY29fb25fcHNyMl9leGl0KHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsKPiAtCWlmICghZGV2X3ByaXYtPnBzci5kYzNjb19l bmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmRjM2NvX2VuYWJsZWQpCj4gIAkJcmV0dXJu Owo+ICAKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5wc3IuZGMzY29fd29yayk7 Cj4gKwljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dvcmspOwo+ICAJ LyogQmVmb3JlIFBTUjIgZXhpdCBkaXNhbGxvdyBkYzNjbyovCj4gLQl0Z2xfcHNyMl9kaXNhYmxl X2RjM2NvKGRldl9wcml2KTsKPiArCXRnbF9wc3IyX2Rpc2FibGVfZGMzY28oaW50ZWxfZHApOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+IEBAIC03MTQsNyArNzExLDcgQEAgc3RhdGljIGJvb2wg aW50ZWxfcHNyMl9jb25maWdfdmFsaWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCWlu dCBjcnRjX3ZkaXNwbGF5ID0gY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZS5jcnRjX3ZkaXNw bGF5Owo+ICAJaW50IHBzcl9tYXhfaCA9IDAsIHBzcl9tYXhfdiA9IDAsIG1heF9icHAgPSAwOwo+ ICAKPiAtCWlmICghZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkKPiArCWlmICghaW50 ZWxfZHAtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ICAJ aWYgKCF0cmFuc2NvZGVyX2hhc19wc3IyKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNj b2RlcikpIHsKPiBAQCAtNzI0LDcgKzcyMSw3IEBAIHN0YXRpYyBib29sIGludGVsX3BzcjJfY29u ZmlnX3ZhbGlkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkJcmV0dXJuIGZhbHNlOwo+ ICAJfQo+ICAKPiAtCWlmICghcHNyMl9nbG9iYWxfZW5hYmxlZChkZXZfcHJpdikpIHsKPiArCWlm ICghcHNyMl9nbG9iYWxfZW5hYmxlZChpbnRlbF9kcCkpIHsKPiAgCQlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIlBTUjIgZGlzYWJsZWQgYnkgZmxhZ1xuIik7Cj4gIAkJcmV0dXJuIGZhbHNl Owo+ICAJfQo+IEBAIC03NzMsMTAgKzc3MCwxMCBAQCBzdGF0aWMgYm9vbCBpbnRlbF9wc3IyX2Nv bmZpZ192YWxpZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJICogb25seSBuZWVkIHRv IHZhbGlkYXRlIHRoZSBTVSBibG9jayB3aWR0aCBpcyBhIG11bHRpcGxlIG9mCj4gIAkgKiB4IGdy YW51bGFyaXR5Lgo+ICAJICovCj4gLQlpZiAoY3J0Y19oZGlzcGxheSAlIGRldl9wcml2LT5wc3Iu c3VfeF9ncmFudWxhcml0eSkgewo+ICsJaWYgKGNydGNfaGRpc3BsYXkgJSBpbnRlbF9kcC0+cHNy LnN1X3hfZ3JhbnVsYXJpdHkpIHsKPiAgCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAg CQkJICAgICJQU1IyIG5vdCBlbmFibGVkLCBoZGlzcGxheSglZCkgbm90IG11bHRpcGxlIG9mICVk XG4iLAo+IC0JCQkgICAgY3J0Y19oZGlzcGxheSwgZGV2X3ByaXYtPnBzci5zdV94X2dyYW51bGFy aXR5KTsKPiArCQkJICAgIGNydGNfaGRpc3BsYXksIGludGVsX2RwLT5wc3Iuc3VfeF9ncmFudWxh cml0eSk7Cj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAJfQo+ICAKPiBAQCAtODExLDEzICs4MDgsMTAg QEAgdm9pZCBpbnRlbF9wc3JfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwKPiAgCQkmY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKPiAgCWludCBwc3Jfc2V0dXBf dGltZTsKPiAgCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQo+IC0JCXJldHVybjsKPiAtCj4g LQlpZiAoaW50ZWxfZHAgIT0gZGV2X3ByaXYtPnBzci5kcCkKPiArCWlmICghQ0FOX1BTUihpbnRl bF9kcCkpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmICghcHNyX2dsb2JhbF9lbmFibGVkKGRldl9w cml2KSkgewo+ICsJaWYgKCFwc3JfZ2xvYmFsX2VuYWJsZWQoaW50ZWxfZHApKSB7Cj4gIAkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQU1IgZGlzYWJsZWQgYnkgZmxhZ1xuIik7Cj4gIAkJ cmV0dXJuOwo+ICAJfQo+IEBAIC04MzQsNyArODI4LDcgQEAgdm9pZCBpbnRlbF9wc3JfY29tcHV0 ZV9jb25maWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQlyZXR1cm47Cj4gIAl9Cj4g IAo+IC0JaWYgKGRldl9wcml2LT5wc3Iuc2lua19ub3RfcmVsaWFibGUpIHsKPiArCWlmIChpbnRl bF9kcC0+cHNyLnNpbmtfbm90X3JlbGlhYmxlKSB7Cj4gIAkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sCj4gIAkJCSAgICAiUFNSIHNpbmsgaW1wbGVtZW50YXRpb24gaXMgbm90IHJlbGlhYmxl XG4iKTsKPiAgCQlyZXR1cm47Cj4gQEAgLTg3MCwyMyArODY0LDI0IEBAIHZvaWQgaW50ZWxfcHNy X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIHN0YXRpYyB2b2lk IGludGVsX3Bzcl9hY3RpdmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsK PiArCWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyID0gaW50ZWxfZHAtPnBzci50cmFuc2NvZGVy Owo+ICAKPiAtCWlmICh0cmFuc2NvZGVyX2hhc19wc3IyKGRldl9wcml2LCBkZXZfcHJpdi0+cHNy LnRyYW5zY29kZXIpKQo+ICsJaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIHRyYW5z Y29kZXIpKQo+ICAJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAgaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcikp ICYgRURQX1BTUjJfRU5BQkxFKTsKPiArCQkJICAgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVE UF9QU1IyX0NUTCh0cmFuc2NvZGVyKSkgJiBFRFBfUFNSMl9FTkFCTEUpOwo+ICAKPiAgCWRybV9X QVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBF RFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKSAmIEVEUF9QU1JfRU5BQkxFKTsK PiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBkZXZfcHJpdi0+cHNyLmFjdGl2ZSk7Cj4g LQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJCSAgICBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTCh0cmFuc2NvZGVyKSkgJiBFRFBfUFNSX0VO QUJMRSk7Cj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgaW50ZWxfZHAtPnBzci5hY3Rp dmUpOwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgCj4g IAkvKiBwc3IxIGFuZCBwc3IyIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuKi8KPiAtCWlmIChkZXZf cHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxl ZCkKPiAgCQloc3dfYWN0aXZhdGVfcHNyMihpbnRlbF9kcCk7Cj4gIAllbHNlCj4gIAkJaHN3X2Fj dGl2YXRlX3BzcjEoaW50ZWxfZHApOwo+ICAKPiAtCWRldl9wcml2LT5wc3IuYWN0aXZlID0gdHJ1 ZTsKPiArCWludGVsX2RwLT5wc3IuYWN0aXZlID0gdHJ1ZTsKPiAgfQo+ICAKPiAgc3RhdGljIHZv aWQgaW50ZWxfcHNyX2VuYWJsZV9zb3VyY2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiBA QCAtOTAyLDcgKzg5Nyw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfc291cmNlKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwg SVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAgCQloc3dfcHNyX3NldHVwX2F1eChpbnRlbF9kcCk7 Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkICYmIChJU19HRU4oZGV2X3By aXYsIDkpICYmCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQgJiYgKElTX0dFTihk ZXZfcHJpdiwgOSkgJiYKPiAgCQkJCQkgICAhSVNfR0VNSU5JTEFLRShkZXZfcHJpdikpKSB7Cj4g IAkJaTkxNV9yZWdfdCByZWcgPSBDSElDS0VOX1RSQU5TKGNwdV90cmFuc2NvZGVyKTsKPiAgCQl1 MzIgY2hpY2tlbiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gQEAgLTkyNiwxMCAr OTIxLDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfc291cmNlKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ICAJCW1h c2sgfD0gRURQX1BTUl9ERUJVR19NQVNLX0RJU1BfUkVHX1dSSVRFOwo+ICAKPiAtCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0RFQlVHKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlciks Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUl9ERUJVRyhpbnRlbF9kcC0+cHNy LnRyYW5zY29kZXIpLAo+ICAJCSAgICAgICBtYXNrKTsKPiAgCj4gLQlwc3JfaXJxX2NvbnRyb2wo ZGV2X3ByaXYpOwo+ICsJcHNyX2lycV9jb250cm9sKGludGVsX2RwKTsKPiAgCj4gIAlpZiAoY3J0 Y19zdGF0ZS0+ZGMzY29fZXhpdGxpbmUpIHsKPiAgCQl1MzIgdmFsOwo+IEBAIC05NDcsMzAgKzk0 MiwzMCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX3NvdXJjZShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAo+ICAKPiAgCWlmIChIQVNfUFNSX0hXX1RSQUNLSU5HKGRldl9wcml2KSAm JiBIQVNfUFNSMl9TRUxfRkVUQ0goZGV2X3ByaXYpKQo+ICAJCWludGVsX2RlX3JtdyhkZXZfcHJp diwgQ0hJQ0tFTl9QQVIxXzEsIElHTk9SRV9QU1IyX0hXX1RSQUNLSU5HLAo+IC0JCQkgICAgIGRl dl9wcml2LT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCA/Cj4gKwkJCSAgICAgaW50ZWxfZHAt PnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkID8KPiAgCQkJICAgICBJR05PUkVfUFNSMl9IV19U UkFDS0lORyA6IDApOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX2xv Y2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gK3N0YXRpYyB2b2lkIGlu dGVsX3Bzcl9lbmFibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkJCQkg ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJCQkgICAg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gIHsKPiAtCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBkZXZfcHJpdi0+cHNyLmRwOwo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gIAlzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2Rw KTsKPiAgCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gJmRpZ19wb3J0LT5iYXNlOwo+ ICAJdTMyIHZhbDsKPiAgCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYt PnBzci5lbmFibGVkKTsKPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBpbnRlbF9kcC0+ cHNyLmVuYWJsZWQpOwo+ICAKPiAtCWRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkID0gY3J0Y19z dGF0ZS0+aGFzX3BzcjI7Cj4gLQlkZXZfcHJpdi0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyA9 IDA7Cj4gLQlkZXZfcHJpdi0+cHNyLnBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVh cGkuY3J0YyktPnBpcGU7Cj4gLQlkZXZfcHJpdi0+cHNyLmRjM2NvX2VuYWJsZWQgPSAhIWNydGNf c3RhdGUtPmRjM2NvX2V4aXRsaW5lOwo+IC0JZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyID0gY3J0 Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXI7Cj4gKwlpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCA9 IGNydGNfc3RhdGUtPmhhc19wc3IyOwo+ICsJaW50ZWxfZHAtPnBzci5idXN5X2Zyb250YnVmZmVy X2JpdHMgPSAwOwo+ICsJaW50ZWxfZHAtPnBzci5waXBlID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0 YXRlLT51YXBpLmNydGMpLT5waXBlOwo+ICsJaW50ZWxfZHAtPnBzci5kYzNjb19lbmFibGVkID0g ISFjcnRjX3N0YXRlLT5kYzNjb19leGl0bGluZTsKPiArCWludGVsX2RwLT5wc3IudHJhbnNjb2Rl ciA9IGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOwo+ICAJLyogREM1L0RDNiByZXF1aXJlcyBh dCBsZWFzdCA2IGlkbGUgZnJhbWVzICovCj4gIAl2YWwgPSB1c2Vjc190b19qaWZmaWVzKGludGVs X2dldF9mcmFtZV90aW1lX3VzKGNydGNfc3RhdGUpICogNik7Cj4gLQlkZXZfcHJpdi0+cHNyLmRj M2NvX2V4aXRfZGVsYXkgPSB2YWw7Cj4gLQlkZXZfcHJpdi0+cHNyLnBzcjJfc2VsX2ZldGNoX2Vu YWJsZWQgPSBjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0Y2g7Cj4gKwlpbnRlbF9kcC0+ cHNyLmRjM2NvX2V4aXRfZGVsYXkgPSB2YWw7Cj4gKwlpbnRlbF9kcC0+cHNyLnBzcjJfc2VsX2Zl dGNoX2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0Y2g7Cj4gIAo+ICAJ LyoKPiAgCSAqIElmIGEgUFNSIGVycm9yIGhhcHBlbmVkIGFuZCB0aGUgZHJpdmVyIGlzIHJlbG9h ZGVkLCB0aGUgRURQX1BTUl9JSVIKPiBAQCAtOTgyLDI3ICs5NzcsMjcgQEAgc3RhdGljIHZvaWQg aW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICAJICovCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewo+ICAJCXZhbCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgVFJBTlNfUFNSX0lJUihkZXZfcHJp di0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBUUkFOU19QU1JfSUlSKGludGVsX2RwLT5w c3IudHJhbnNjb2RlcikpOwo+ICAJCXZhbCAmPSBFRFBfUFNSX0VSUk9SKDApOwo+ICAJfSBlbHNl IHsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0lJUik7Cj4gLQkJ dmFsICY9IEVEUF9QU1JfRVJST1IoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsKPiArCQl2YWwg Jj0gRURQX1BTUl9FUlJPUihpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOwo+ICAJfQo+ICAJaWYg KHZhbCkgewo+IC0JCWRldl9wcml2LT5wc3Iuc2lua19ub3RfcmVsaWFibGUgPSB0cnVlOwo+ICsJ CWludGVsX2RwLT5wc3Iuc2lua19ub3RfcmVsaWFibGUgPSB0cnVlOwo+ICAJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAo+ICAJCQkgICAgIlBTUiBpbnRlcnJ1cHRpb24gZXJyb3Igc2V0LCBu b3QgZW5hYmxpbmcgUFNSXG4iKTsKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+ICAJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJFbmFibGluZyBQU1Ilc1xuIiwKPiAtCQkgICAgZGV2X3ByaXYt PnBzci5wc3IyX2VuYWJsZWQgPyAiMiIgOiAiMSIpOwo+ICsJCSAgICBpbnRlbF9kcC0+cHNyLnBz cjJfZW5hYmxlZCA/ICIyIiA6ICIxIik7Cj4gIAlpbnRlbF9kcF9jb21wdXRlX3Bzcl92c2Nfc2Rw KGludGVsX2RwLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlLAo+IC0JCQkJICAgICAmZGV2X3ByaXYt PnBzci52c2MpOwo+IC0JaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRl LCAmZGV2X3ByaXYtPnBzci52c2MpOwo+ICsJCQkJICAgICAmaW50ZWxfZHAtPnBzci52c2MpOwo+ ICsJaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCAmaW50ZWxfZHAt PnBzci52c2MpOwo+ICAJaW50ZWxfcHNyX2VuYWJsZV9zaW5rKGludGVsX2RwKTsKPiAgCWludGVs X3Bzcl9lbmFibGVfc291cmNlKGludGVsX2RwLCBjcnRjX3N0YXRlKTsKPiAtCWRldl9wcml2LT5w c3IuZW5hYmxlZCA9IHRydWU7Cj4gKwlpbnRlbF9kcC0+cHNyLmVuYWJsZWQgPSB0cnVlOwo+ICAK PiAgCWludGVsX3Bzcl9hY3RpdmF0ZShpbnRlbF9kcCk7Cj4gIH0KPiBAQCAtMTAyMSw3ICsxMDE2 LDcgQEAgdm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4g IHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgZGV2X3ByaXYtPnBzci5k cCAhPSBpbnRlbF9kcCkKPiArCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpCj4gIAkJcmV0dXJuOwo+ ICAKPiAgCWlmICghY3J0Y19zdGF0ZS0+aGFzX3BzcikKPiBAQCAtMTAyOSw0NiArMTAyNCw0NyBA QCB2b2lkIGludGVsX3Bzcl9lbmFibGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCj4g IAlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYtPmRycnMuZHApOwo+ICAKPiAt CW11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gLQlpbnRlbF9wc3JfZW5hYmxlX2xv Y2tlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gLQltdXRleF91bmxvY2so JmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2sp Owo+ICsJaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoaW50ZWxfZHAsIGNydGNfc3RhdGUsIGNvbm5f c3RhdGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgdm9pZCBpbnRlbF9wc3JfZXhpdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9leGl0KHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gIHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOwo+ICAJdTMyIHZhbDsKPiAgCj4gLQlpZiAoIWRldl9wcml2LT5wc3Iu YWN0aXZlKSB7Cj4gLQkJaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIGRldl9wcml2 LT5wc3IudHJhbnNjb2RlcikpIHsKPiArCWlmICghaW50ZWxfZHAtPnBzci5hY3RpdmUpIHsKPiAr CQlpZiAodHJhbnNjb2Rlcl9oYXNfcHNyMihkZXZfcHJpdiwgaW50ZWxfZHAtPnBzci50cmFuc2Nv ZGVyKSkgewo+ICAJCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJCSAgICBF RFBfUFNSMl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7Cj4gKwkJCQkJICAgIEVEUF9Q U1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsKPiAgCQkJZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sIHZhbCAmIEVEUF9QU1IyX0VOQUJMRSk7Cj4gIAkJfQo+ICAKPiAgCQl2YWwg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9QU1JfQ1RMKGRldl9wcml2 LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlcikpOwo+ICAJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCB2YWwgJiBFRFBf UFNSX0VOQUJMRSk7Cj4gIAo+ICAJCXJldHVybjsKPiAgCX0KPiAgCj4gLQlpZiAoZGV2X3ByaXYt PnBzci5wc3IyX2VuYWJsZWQpIHsKPiAtCQl0Z2xfZGlzYWxsb3dfZGMzY29fb25fcHNyMl9leGl0 KGRldl9wcml2KTsKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ICsJCXRn bF9kaXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoaW50ZWxfZHApOwo+ICAJCXZhbCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUjJfQ1RMKGRldl9wcml2LT5wc3Iu dHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5z Y29kZXIpKTsKPiAgCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgISh2YWwgJiBFRFBfUFNS Ml9FTkFCTEUpKTsKPiAgCQl2YWwgJj0gfkVEUF9QU1IyX0VOQUJMRTsKPiAgCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwKPiAtCQkJICAgICAgIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRy YW5zY29kZXIpLCB2YWwpOwo+ICsJCQkgICAgICAgRURQX1BTUjJfQ1RMKGludGVsX2RwLT5wc3Iu dHJhbnNjb2RlciksIHZhbCk7Cj4gIAl9IGVsc2Ugewo+ICAJCXZhbCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVy KSk7Cj4gKwkJCQkgICAgRURQX1BTUl9DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7Cj4g IAkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICEodmFsICYgRURQX1BTUl9FTkFCTEUpKTsK PiAgCQl2YWwgJj0gfkVEUF9QU1JfRU5BQkxFOwo+ICAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LAo+IC0JCQkgICAgICAgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwgdmFs KTsKPiArCQkJICAgICAgIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZh bCk7Cj4gIAl9Cj4gLQlkZXZfcHJpdi0+cHNyLmFjdGl2ZSA9IGZhbHNlOwo+ICsJaW50ZWxfZHAt PnBzci5hY3RpdmUgPSBmYWxzZTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rp c2FibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gQEAgLTEwNzcsMjEgKzEw NzMsMjEgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gIAlpOTE1X3JlZ190IHBzcl9zdGF0dXM7Cj4gIAl1MzIgcHNyX3N0 YXR1c19tYXNrOwo+ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5wc3IubG9j ayk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAt CWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJs ZWQpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRGlz YWJsaW5nIFBTUiVzXG4iLAo+IC0JCSAgICBkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCA/ICIy IiA6ICIxIik7Cj4gKwkJICAgIGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkID8gIjIiIDogIjEi KTsKPiAgCj4gLQlpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7Cj4gKwlpbnRlbF9wc3JfZXhpdChp bnRlbF9kcCk7Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gLQkJ cHNyX3N0YXR1cyA9IEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gKwkJcHNyX3N0YXR1cyA9IEVE UF9QU1IyX1NUQVRVUyhpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOwo+ICAJCXBzcl9zdGF0dXNf bWFzayA9IEVEUF9QU1IyX1NUQVRVU19TVEFURV9NQVNLOwo+ICAJfSBlbHNlIHsKPiAtCQlwc3Jf c3RhdHVzID0gRURQX1BTUl9TVEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsKPiArCQlw c3Jfc3RhdHVzID0gRURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKTsKPiAg CQlwc3Jfc3RhdHVzX21hc2sgPSBFRFBfUFNSX1NUQVRVU19TVEFURV9NQVNLOwo+ICAJfQo+ICAK PiBAQCAtMTEwMSw3ICsxMDk3LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9j a2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkJZHJtX2VycigmZGV2X3ByaXYtPmRy bSwgIlRpbWVkIG91dCB3YWl0aW5nIFBTUiBpZGxlIHN0YXRlXG4iKTsKPiAgCj4gIAkvKiBXQSAx NDA4MzMwODQ3ICovCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVk ICYmCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkICYmCj4gIAkg ICAgKElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9B MCkgfHwKPiAgCSAgICAgSVNfUktMX1JFVklEKGRldl9wcml2LCBSS0xfUkVWSURfQTAsIFJLTF9S RVZJRF9BMCkpKQo+ICAJCWludGVsX2RlX3JtdyhkZXZfcHJpdiwgQ0hJQ0tFTl9QQVIxXzEsCj4g QEAgLTExMTAsMTAgKzExMDYsMTAgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9j a2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkvKiBEaXNhYmxlIFBTUiBvbiBTaW5r ICovCj4gIAlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQX1BTUl9FTl9DRkcs IDApOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkKPiArCWlmIChpbnRl bF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkKPiAgCQlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2Rw LT5hdXgsIERQX1JFQ0VJVkVSX0FMUE1fQ09ORklHLCAwKTsKPiAgCj4gLQlkZXZfcHJpdi0+cHNy LmVuYWJsZWQgPSBmYWxzZTsKPiArCWludGVsX2RwLT5wc3IuZW5hYmxlZCA9IGZhbHNlOwo+ICB9 Cj4gIAo+ICAvKioKPiBAQCAtMTEzMSwyMCArMTEyNywyMiBAQCB2b2lkIGludGVsX3Bzcl9kaXNh YmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoIW9sZF9jcnRjX3N0YXRlLT5o YXNfcHNyKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5k cm0sICFDQU5fUFNSKGRldl9wcml2KSkpCj4gKwlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5k cm0sICFDQU5fUFNSKGludGVsX2RwKSkpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCW11dGV4X2xvY2so JmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2sp Owo+ICAKPiAgCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRlbF9kcCk7Cj4gIAo+IC0JbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+IC0JY2FuY2VsX3dvcmtfc3luYygmZGV2 X3ByaXYtPnBzci53b3JrKTsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYt PnBzci5kYzNjb193b3JrKTsKPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsK PiArCWNhbmNlbF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3Iud29yayk7Cj4gKwljYW5jZWxfZGVs YXllZF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3IuZGMzY29fd29yayk7Cj4gIH0KPiAgCj4gLXN0 YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiArc3RhdGljIHZvaWQgcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gKwo+ICAJaWYgKElTX1RJR0VS TEFLRShkZXZfcHJpdikpCj4gIAkJLyoKPiAgCQkgKiBXcml0ZXMgdG8gQ1VSU1VSRkxJVkUgaW4g VEdMIGFyZSBjYXVzaW5nIElPTU1VIGVycm9ycyBhbmQKPiBAQCAtMTE1OCw3ICsxMTU2LDcgQEAg c3RhdGljIHZvaWQgcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+ICAJCSAqIFNvIHVzaW5nIHRoaXMgd29ya2Fyb3VuZCB1bnRpbCB0 aGlzIGlzc3VlIGlzIHJvb3QgY2F1c2VkCj4gIAkJICogYW5kIGEgYmV0dGVyIGZpeCBpcyBmb3Vu ZC4KPiAgCQkgKi8KPiAtCQlpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7Cj4gKwkJaW50ZWxfcHNy X2V4aXQoaW50ZWxfZHApOwo+ICAJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQo+ ICAJCS8qCj4gIAkJICogRGlzcGxheSBXQSAjMDg4NDogc2tsKwo+IEBAIC0xMTY5LDEzICsxMTY3 LDEzIEBAIHN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQkgKiBidXQgaXQgbWFrZXMgbW9yZSBzZW5zZSB3 cml0ZSB0byB0aGUgY3VycmVudCBhY3RpdmUKPiAgCQkgKiBwaXBlLgo+ICAJCSAqLwo+IC0JCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBDVVJTVVJGTElWRShkZXZfcHJpdi0+cHNyLnBpcGUpLCAw KTsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ1VSU1VSRkxJVkUoaW50ZWxfZHAtPnBz ci5waXBlKSwgMCk7Cj4gIAllbHNlCj4gIAkJLyoKPiAgCQkgKiBBIHdyaXRlIHRvIENVUlNVUkZM SVZFIGRvIG5vdCBjYXVzZSBIVyB0cmFja2luZyB0byBleGl0IFBTUgo+ICAJCSAqIG9uIG9sZGVy IGdlbnMgc28gZG9pbmcgdGhlIG1hbnVhbCBleGl0IGluc3RlYWQuCj4gIAkJICovCj4gLQkJaW50 ZWxfcHNyX2V4aXQoZGV2X3ByaXYpOwo+ICsJCWludGVsX3Bzcl9leGl0KGludGVsX2RwKTsKPiAg fQo+ICAKPiAgdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUsCj4gQEAgLTEyMTUsMTEgKzEyMTMsMTEgQEAgdm9pZCBpbnRlbF9w c3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4g IAlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU0VMX0ZFVENIX1NJWkUocGlwZSwg cGxhbmUtPmlkKSwgdmFsKTsKPiAgfQo+ICAKPiAtdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fdHJh bnNfbWFuX3Rya19jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cj4gK3ZvaWQgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtfY3RsKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCj4gKwkJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKPiAgewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9j cnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiAtCXN0cnVjdCBpOTE1X3BzciAq cHNyID0gJmRldl9wcml2LT5wc3I7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZp bnRlbF9kcC0+cHNyOwo+ICAKPiAgCWlmICghSEFTX1BTUjJfU0VMX0ZFVENIKGRldl9wcml2KSB8 fAo+ICAJICAgICFjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0Y2gpCj4gQEAgLTEzMzYs MTMgKzEzMzQsMTMgQEAgdm9pZCBpbnRlbF9wc3JfdXBkYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsCj4gIAkJICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBz cjsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ICAJYm9vbCBl bmFibGUsIHBzcjJfZW5hYmxlOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgUkVB RF9PTkNFKHBzci0+ZHApICE9IGludGVsX2RwKQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSkK PiAgCQlyZXR1cm47Cj4gIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAr CW11dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIAo+ICAJZW5hYmxlID0gY3J0Y19z dGF0ZS0+aGFzX3BzcjsKPiAgCXBzcjJfZW5hYmxlID0gY3J0Y19zdGF0ZS0+aGFzX3BzcjI7Cj4g QEAgLTEzNTAsMTUgKzEzNDgsMTUgQEAgdm9pZCBpbnRlbF9wc3JfdXBkYXRlKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoZW5hYmxlID09IHBzci0+ZW5hYmxlZCAmJiBwc3IyX2Vu YWJsZSA9PSBwc3ItPnBzcjJfZW5hYmxlZCkgewo+ICAJCS8qIEZvcmNlIGEgUFNSIGV4aXQgd2hl biBlbmFibGluZyBDUkMgdG8gYXZvaWQgQ1JDIHRpbWVvdXRzICovCj4gIAkJaWYgKGNydGNfc3Rh dGUtPmNyY19lbmFibGVkICYmIHBzci0+ZW5hYmxlZCkKPiAtCQkJcHNyX2ZvcmNlX2h3X3RyYWNr aW5nX2V4aXQoZGV2X3ByaXYpOwo+ICsJCQlwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChpbnRl bF9kcCk7Cj4gIAkJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkgJiYgcHNyLT5lbmFi bGVkKSB7Cj4gIAkJCS8qCj4gIAkJCSAqIEFjdGl2YXRlIFBTUiBhZ2FpbiBhZnRlciBhIGZvcmNl IGV4aXQgd2hlbiBlbmFibGluZwo+ICAJCQkgKiBDUkMgaW4gb2xkZXIgZ2Vucwo+ICAJCQkgKi8K PiAtCQkJaWYgKCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSAmJgo+IC0JCQkgICAgIWRldl9wcml2LT5w c3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+IC0JCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYt PnBzci53b3JrKTsKPiArCQkJaWYgKCFpbnRlbF9kcC0+cHNyLmFjdGl2ZSAmJgo+ICsJCQkgICAg IWludGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+ICsJCQkJc2NoZWR1bGVfd29y aygmaW50ZWxfZHAtPnBzci53b3JrKTsKPiAgCQl9Cj4gIAo+ICAJCWdvdG8gdW5sb2NrOwo+IEBA IC0xMzY4LDM0ICsxMzY2LDIzIEBAIHZvaWQgaW50ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAo+ICAJCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRlbF9kcCk7Cj4g IAo+ICAJaWYgKGVuYWJsZSkKPiAtCQlpbnRlbF9wc3JfZW5hYmxlX2xvY2tlZChkZXZfcHJpdiwg Y3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gKwkJaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoaW50 ZWxfZHAsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICAKPiAgdW5sb2NrOgo+IC0JbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+ cHNyLmxvY2spOwo+ICB9Cj4gIAo+ICAvKioKPiAtICogaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUg LSB3YWl0IGZvciBQU1IxIHRvIGlkbGUKPiAtICogQG5ld19jcnRjX3N0YXRlOiBuZXcgQ1JUQyBz dGF0ZQo+ICsgKiBwc3Jfd2FpdF9mb3JfaWRsZSAtIHdhaXQgZm9yIFBTUjEgdG8gaWRsZQo+ICsg KiBAaW50ZWxfZHA6IEludGVsIERQCj4gICAqIEBvdXRfdmFsdWU6IFBTUiBzdGF0dXMgaW4gY2Fz ZSBvZiBmYWlsdXJlCj4gICAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUg Y2FsbGVkIGZyb20gcGlwZV91cGRhdGVfc3RhcnQoKSB3aGVyZSBpdCBpcwo+IC0gKiBub3QgZXhw ZWN0ZWQgdG8gcmFjZSB3aXRoIFBTUiBlbmFibGUgb3IgZGlzYWJsZS4KPiAtICoKPiAgICogUmV0 dXJuczogMCBvbiBzdWNjZXNzIG9yIC1FVElNRU9VVCBpZiBQU1Igc3RhdHVzIGRvZXMgbm90IGlk bGUuCj4gKyAqCj4gICAqLwo+IC1pbnQgaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLAo+IC0JCQkgICAgdTMyICpvdXRf dmFsdWUpCj4gK3N0YXRpYyBpbnQgcHNyX3dhaXRfZm9yX2lkbGUoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwgdTMyICpvdXRfdmFsdWUpCj4gIHsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRj ID0gdG9faW50ZWxfY3J0YyhuZXdfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+IC0K PiAtCWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkIHx8ICFuZXdfY3J0Y19zdGF0ZS0+aGFzX3Bz cikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBGSVhNRTogVXBkYXRlIHRoaXMgZm9yIFBTUjIg aWYgd2UgbmVlZCB0byB3YWl0IGZvciBpZGxlICovCj4gLQlpZiAoUkVBRF9PTkNFKGRldl9wcml2 LT5wc3IucHNyMl9lbmFibGVkKSkKPiAtCQlyZXR1cm4gMDsKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAKPiAgCS8qCj4gIAkg KiBGcm9tIGJzcGVjOiBQYW5lbCBTZWxmIFJlZnJlc2ggKEJEVyspCj4gQEAgLTE0MDMsMzIgKzEz OTAsNjQgQEAgaW50IGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwKPiAgCSAqIGV4aXQgdHJhaW5pbmcgdGltZSArIDEu NSBtcyBvZiBhdXggY2hhbm5lbCBoYW5kc2hha2UuIDUwIG1zIGlzCj4gIAkgKiBkZWZlbnNpdmUg ZW5vdWdoIHRvIGNvdmVyIGV2ZXJ5dGhpbmcuCj4gIAkgKi8KPiAtCj4gIAlyZXR1cm4gX19pbnRl bF93YWl0X2Zvcl9yZWdpc3RlcigmZGV2X3ByaXYtPnVuY29yZSwKPiAtCQkJCQkgRURQX1BTUl9T VEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwKPiArCQkJCQkgRURQX1BTUl9TVEFUVVMo aW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwKPiAgCQkJCQkgRURQX1BTUl9TVEFUVVNfU1RBVEVf TUFTSywKPiAgCQkJCQkgRURQX1BTUl9TVEFUVVNfU1RBVEVfSURMRSwgMiwgNTAsCj4gIAkJCQkJ IG91dF92YWx1ZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVf bG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArLyoqCj4gKyAqIGlu dGVsX3Bzcl93YWl0X2Zvcl9pZGxlIC0gd2FpdCBmb3IgUFNSMSB0byBpZGxlCj4gKyAqIEBuZXdf Y3J0Y19zdGF0ZTogbmV3IENSVEMgc3RhdGUKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBl eHBlY3RlZCB0byBiZSBjYWxsZWQgZnJvbSBwaXBlX3VwZGF0ZV9zdGFydCgpIHdoZXJlIGl0IGlz Cj4gKyAqIG5vdCBleHBlY3RlZCB0byByYWNlIHdpdGggUFNSIGVuYWJsZSBvciBkaXNhYmxlLgo+ ICsgKi8KPiArdm9pZCBpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUobmV3X2NydGNfc3RhdGUtPnVhcGkuY3J0Yy0+ZGV2KTsK PiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICsJdTMyIHBzcl9zdGF0dXM7Cj4g Kwo+ICsJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+aGFzX3BzcikKPiArCQlyZXR1cm47Cj4gKwo+ICsJ Zm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsKPiArCQlp ZiAoZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJLyogd2hlbiB0aGUgUFNSMSBpcyBlbmFibGVkICovCj4gKwkJaWYgKGludGVsX2RwLT5w c3IuZW5hYmxlZCAmJiAhaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpIHsKPiArCQkJaWYgKHBz cl93YWl0X2Zvcl9pZGxlKGludGVsX2RwLCAmcHNyX3N0YXR1cykpCj4gKwkJCQlkcm1fZXJyKCZk ZXZfcHJpdi0+ZHJtLAo+ICsJCQkJCSJQU1IgaWRsZSB0aW1lZCBvdXQgMHgleCwgYXRvbWljIHVw ZGF0ZSBtYXkgZmFpbFxuIiwKPiArCQkJCQlwc3Jfc3RhdHVzKTsKPiArCQl9Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVfbG9ja2VkKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gIHsKPiAgCWk5MTVfcmVnX3QgcmVnOwo+ICAJdTMyIG1hc2s7Cj4g IAlpbnQgZXJyOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7Cj4gIAo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQpCj4gKwlp ZiAoIWludGVsX2RwLT5wc3IuZW5hYmxlZCkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+IC0JaWYg KGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gLQkJcmVnID0gRURQX1BTUjJfU1RBVFVT KGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7Cj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2Vu YWJsZWQpIHsKPiArCQlyZWcgPSBFRFBfUFNSMl9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2Nv ZGVyKTsKPiAgCQltYXNrID0gRURQX1BTUjJfU1RBVFVTX1NUQVRFX01BU0s7Cj4gIAl9IGVsc2Ug ewo+IC0JCXJlZyA9IEVEUF9QU1JfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7Cj4g KwkJcmVnID0gRURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKTsKPiAgCQlt YXNrID0gRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSzsKPiAgCX0KPiAgCj4gLQltdXRleF91bmxv Y2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3Iu bG9jayk7Cj4gIAo+ICAJZXJyID0gaW50ZWxfZGVfd2FpdF9mb3JfY2xlYXIoZGV2X3ByaXYsIHJl ZywgbWFzaywgNTApOwo+ICAJaWYgKGVycikKPiBAQCAtMTQzNiw4ICsxNDU1LDggQEAgc3RhdGlj IGJvb2wgX19wc3Jfd2FpdF9mb3JfaWRsZV9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAJCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBTUiBJZGxlIGZvciByZS1l bmFibGVcbiIpOwo+ICAKPiAgCS8qIEFmdGVyIHRoZSB1bmxvY2tlZCB3YWl0LCB2ZXJpZnkgdGhh dCBQU1IgaXMgc3RpbGwgd2FudGVkISAqLwo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5s b2NrKTsKPiAtCXJldHVybiBlcnIgPT0gMCAmJiBkZXZfcHJpdi0+cHNyLmVuYWJsZWQ7Cj4gKwlt dXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICsJcmV0dXJuIGVyciA9PSAwICYmIGlu dGVsX2RwLT5wc3IuZW5hYmxlZDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBpbnRlbF9wc3JfZmFz dHNldF9mb3JjZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gQEAgLTE1MDMs MTEgKzE1MjIsMTIgQEAgc3RhdGljIGludCBpbnRlbF9wc3JfZmFzdHNldF9mb3JjZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlyZXR1cm4gZXJyOwo+ICB9Cj4gIAo+IC1p bnQgaW50ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHU2NCB2YWwpCj4gK2ludCBpbnRlbF9wc3JfZGVidWdfc2V0KHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsIHU2NCB2YWwpCj4gIHsKPiAgCWNvbnN0IHUzMiBtb2RlID0gdmFsICYgSTkxNV9QU1Jf REVCVUdfTU9ERV9NQVNLOwo+ICAJdTMyIG9sZF9tb2RlOwo+ICAJaW50IHJldDsKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAK PiAgCWlmICh2YWwgJiB+KEk5MTVfUFNSX0RFQlVHX0lSUSB8IEk5MTVfUFNSX0RFQlVHX01PREVf TUFTSykgfHwKPiAgCSAgICBtb2RlID4gSTkxNV9QU1JfREVCVUdfRk9SQ0VfUFNSMSkgewo+IEBA IC0xNTE1LDIxICsxNTM1LDIxIEBAIGludCBpbnRlbF9wc3JfZGVidWdfc2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IHZhbCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAg CX0KPiAgCj4gLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5wc3Iu bG9jayk7Cj4gKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmludGVsX2RwLT5wc3Iu bG9jayk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0Jb2xkX21vZGUgPSBk ZXZfcHJpdi0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVCVUdfTU9ERV9NQVNLOwo+IC0JZGV2X3By aXYtPnBzci5kZWJ1ZyA9IHZhbDsKPiArCW9sZF9tb2RlID0gaW50ZWxfZHAtPnBzci5kZWJ1ZyAm IEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSzsKPiArCWludGVsX2RwLT5wc3IuZGVidWcgPSB2YWw7 Cj4gIAo+ICAJLyoKPiAgCSAqIERvIGl0IHJpZ2h0IGF3YXkgaWYgaXQncyBhbHJlYWR5IGVuYWJs ZWQsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRvbmUKPiAgCSAqIHdoZW4gZW5hYmxpbmcgdGhlIHNv dXJjZS4KPiAgCSAqLwo+IC0JaWYgKGRldl9wcml2LT5wc3IuZW5hYmxlZCkKPiAtCQlwc3JfaXJx X2NvbnRyb2woZGV2X3ByaXYpOwo+ICsJaWYgKGludGVsX2RwLT5wc3IuZW5hYmxlZCkKPiArCQlw c3JfaXJxX2NvbnRyb2woaW50ZWxfZHApOwo+ICAKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnBzci5sb2NrKTsKPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgCj4g IAlpZiAob2xkX21vZGUgIT0gbW9kZSkKPiAgCQlyZXQgPSBpbnRlbF9wc3JfZmFzdHNldF9mb3Jj ZShkZXZfcHJpdik7Cj4gQEAgLTE1MzcsMjggKzE1NTcsMjggQEAgaW50IGludGVsX3Bzcl9kZWJ1 Z19zZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgdmFsKQo+ICAJcmV0 dXJuIHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaW50ZWxfcHNyX2hhbmRsZV9pcnEoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCBpbnRlbF9wc3Jf aGFuZGxlX2lycShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzdHJ1Y3QgaTkx NV9wc3IgKnBzciA9ICZkZXZfcHJpdi0+cHNyOwo+ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0g JmludGVsX2RwLT5wc3I7Cj4gIAo+IC0JaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHBzci0+ZHAp Owo+ICsJaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKGludGVsX2RwKTsKPiAgCXBzci0+c2lua19u b3RfcmVsaWFibGUgPSB0cnVlOwo+ICAJLyogbGV0J3MgbWFrZSBzdXJlIHRoYXQgc2luayBpcyBh d2FrZW4gKi8KPiAtCWRybV9kcF9kcGNkX3dyaXRlYigmcHNyLT5kcC0+YXV4LCBEUF9TRVRfUE9X RVIsIERQX1NFVF9QT1dFUl9EMCk7Cj4gKwlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5h dXgsIERQX1NFVF9QT1dFUiwgRFBfU0VUX1BPV0VSX0QwKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZv aWQgaW50ZWxfcHNyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICB7Cj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+IC0JCWNvbnRhaW5lcl9vZih3b3JrLCB0 eXBlb2YoKmRldl9wcml2KSwgcHNyLndvcmspOwo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9k cCA9Cj4gKwkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaW50ZWxfZHApLCBwc3Iud29yayk7 Cj4gIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiArCW11dGV4X2xvY2so JmludGVsX2RwLT5wc3IubG9jayk7Cj4gIAo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQp Cj4gKwlpZiAoIWludGVsX2RwLT5wc3IuZW5hYmxlZCkKPiAgCQlnb3RvIHVubG9jazsKPiAgCj4g LQlpZiAoUkVBRF9PTkNFKGRldl9wcml2LT5wc3IuaXJxX2F1eF9lcnJvcikpCj4gLQkJaW50ZWxf cHNyX2hhbmRsZV9pcnEoZGV2X3ByaXYpOwo+ICsJaWYgKFJFQURfT05DRShpbnRlbF9kcC0+cHNy LmlycV9hdXhfZXJyb3IpKQo+ICsJCWludGVsX3Bzcl9oYW5kbGVfaXJxKGludGVsX2RwKTsKPiAg Cj4gIAkvKgo+ICAJICogV2UgaGF2ZSB0byBtYWtlIHN1cmUgUFNSIGlzIHJlYWR5IGZvciByZS1l bmFibGUKPiBAQCAtMTU2Niw3ICsxNTg2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJICogUFNSIG1pZ2h0IHRha2Ugc29tZSB0aW1l IHRvIGdldCBmdWxseSBkaXNhYmxlZAo+ICAJICogYW5kIGJlIHJlYWR5IGZvciByZS1lbmFibGUu Cj4gIAkgKi8KPiAtCWlmICghX19wc3Jfd2FpdF9mb3JfaWRsZV9sb2NrZWQoZGV2X3ByaXYpKQo+ ICsJaWYgKCFfX3Bzcl93YWl0X2Zvcl9pZGxlX2xvY2tlZChpbnRlbF9kcCkpCj4gIAkJZ290byB1 bmxvY2s7Cj4gIAo+ICAJLyoKPiBAQCAtMTU3NCwxMiArMTU5NCwxMiBAQCBzdGF0aWMgdm9pZCBp bnRlbF9wc3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIAkgKiByZWNoZWNrLiBT aW5jZSBwc3JfZmx1c2ggZmlyc3QgY2xlYXJzIHRoaXMgYW5kIHRoZW4gcmVzY2hlZHVsZXMgd2UK PiAgCSAqIHdvbid0IGV2ZXIgbWlzcyBhIGZsdXNoIHdoZW4gYmFpbGluZyBvdXQgaGVyZS4KPiAg CSAqLwo+IC0JaWYgKGRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzIHx8IGRldl9w cml2LT5wc3IuYWN0aXZlKQo+ICsJaWYgKGludGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9i aXRzIHx8IGludGVsX2RwLT5wc3IuYWN0aXZlKQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiAtCWlu dGVsX3Bzcl9hY3RpdmF0ZShkZXZfcHJpdi0+cHNyLmRwKTsKPiArCWludGVsX3Bzcl9hY3RpdmF0 ZShpbnRlbF9kcCk7Cj4gIHVubG9jazoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5s b2NrKTsKPiArCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgfQo+ICAKPiAg LyoqCj4gQEAgLTE1OTgsMjcgKzE2MTgsMzUgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICB2b2lkIGludGVsX3Bzcl9pbnZhbGlkYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJICB1bnNpZ25lZCBmcm9udGJ1 ZmZlcl9iaXRzLCBlbnVtIGZiX29wX29yaWdpbiBvcmlnaW4pCj4gIHsKPiAtCWlmICghQ0FOX1BT UihkZXZfcHJpdikpCj4gLQkJcmV0dXJuOwo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXI7Cj4gKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOwo+ICAKPiAtCWlmIChvcmlnaW4gPT0g T1JJR0lOX0ZMSVApCj4gLQkJcmV0dXJuOwo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2 LT5kcm0sIGVuY29kZXIpIHsKPiAgCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2sp Owo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQpIHsKPiAtCQltdXRleF91bmxvY2soJmRl dl9wcml2LT5wc3IubG9jayk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+ICsJCWludGVsX2RwID0gZW5j X3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsJCWlmIChlbmNvZGVyLT50eXBlICE9IElOVEVMX09V VFBVVF9FRFApCj4gKwkJCWNvbnRpbnVlOwo+ICsJCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpCj4g KwkJCWNvbnRpbnVlOwo+ICAKPiAtCWZyb250YnVmZmVyX2JpdHMgJj0gSU5URUxfRlJPTlRCVUZG RVJfQUxMX01BU0soZGV2X3ByaXYtPnBzci5waXBlKTsKPiAtCWRldl9wcml2LT5wc3IuYnVzeV9m cm9udGJ1ZmZlcl9iaXRzIHw9IGZyb250YnVmZmVyX2JpdHM7Cj4gKwkJaWYgKG9yaWdpbiA9PSBP UklHSU5fRkxJUCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCW11dGV4X2xvY2soJmludGVsX2Rw LT5wc3IubG9jayk7Cj4gKwkJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpIHsKPiArCQkJbXV0 ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4g IAo+IC0JaWYgKGZyb250YnVmZmVyX2JpdHMpCj4gLQkJaW50ZWxfcHNyX2V4aXQoZGV2X3ByaXYp Owo+ICsJCWZyb250YnVmZmVyX2JpdHMgJj0gSU5URUxfRlJPTlRCVUZGRVJfQUxMX01BU0soaW50 ZWxfZHAtPnBzci5waXBlKTsKPiArCQlpbnRlbF9kcC0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0 cyB8PSBmcm9udGJ1ZmZlcl9iaXRzOwo+ICAKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBz ci5sb2NrKTsKPiAtfQo+ICsJCWlmIChmcm9udGJ1ZmZlcl9iaXRzKQo+ICsJCQlpbnRlbF9wc3Jf ZXhpdChpbnRlbF9kcCk7Cj4gIAo+ICsJCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2Nr KTsKPiArCX0KPiArfQo+ICAvKgo+ICAgKiBXaGVuIHdlIHdpbGwgYmUgY29tcGxldGVseSByZWx5 IG9uIFBTUjIgUy9XIHRyYWNraW5nIGluIGZ1dHVyZSwKPiAgICogaW50ZWxfcHNyX2ZsdXNoKCkg d2lsbCBpbnZhbGlkYXRlIGFuZCBmbHVzaCB0aGUgUFNSIGZvciBPUklHSU5fRkxJUAo+IEBAIC0x NjI2LDE1ICsxNjU0LDE1IEBAIHZvaWQgaW50ZWxfcHNyX2ludmFsaWRhdGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgKiBhY2NvcmRpbmdseSBpbiBmdXR1cmUuCj4gICAq Lwo+ICBzdGF0aWMgdm9pZAo+IC10Z2xfZGMzY29fZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+IC0JCXVuc2lnbmVkIGludCBmcm9udGJ1ZmZlcl9iaXRzLCBlbnVtIGZi X29wX29yaWdpbiBvcmlnaW4pCj4gK3RnbF9kYzNjb19mbHVzaChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLCB1bnNpZ25lZCBpbnQgZnJvbnRidWZmZXJfYml0cywKPiArCQllbnVtIGZiX29wX29y aWdpbiBvcmlnaW4pCj4gIHsKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4g KwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAtCWlmICghZGV2X3ByaXYt PnBzci5kYzNjb19lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmRjM2NvX2VuYWJsZWQp Cj4gIAkJZ290byB1bmxvY2s7Cj4gIAo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxl ZCB8fCAhZGV2X3ByaXYtPnBzci5hY3RpdmUpCj4gKwlpZiAoIWludGVsX2RwLT5wc3IucHNyMl9l bmFibGVkIHx8ICFpbnRlbF9kcC0+cHNyLmFjdGl2ZSkKPiAgCQlnb3RvIHVubG9jazsKPiAgCj4g IAkvKgo+IEBAIC0xNjQyLDE1ICsxNjcwLDE1IEBAIHRnbF9kYzNjb19mbHVzaChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkgKiB3aGVuIGRlbGF5ZWQgd29yayBzY2hlZHVs ZXMgdGhhdCBtZWFucyBkaXNwbGF5IGhhcyBiZWVuIGlkbGUuCj4gIAkgKi8KPiAgCWlmICghKGZy b250YnVmZmVyX2JpdHMgJgo+IC0JICAgIElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKGRldl9w cml2LT5wc3IucGlwZSkpKQo+ICsJICAgIElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKGludGVs X2RwLT5wc3IucGlwZSkpKQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiAtCXRnbF9wc3IyX2VuYWJs ZV9kYzNjbyhkZXZfcHJpdik7Cj4gLQltb2RfZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJmRldl9w cml2LT5wc3IuZGMzY29fd29yaywKPiAtCQkJIGRldl9wcml2LT5wc3IuZGMzY29fZXhpdF9kZWxh eSk7Cj4gKwl0Z2xfcHNyMl9lbmFibGVfZGMzY28oaW50ZWxfZHApOwo+ICsJbW9kX2RlbGF5ZWRf d29yayhzeXN0ZW1fd3EsICZpbnRlbF9kcC0+cHNyLmRjM2NvX3dvcmssCj4gKwkJCSBpbnRlbF9k cC0+cHNyLmRjM2NvX2V4aXRfZGVsYXkpOwo+ICAKPiAgdW5sb2NrOgo+IC0JbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxv Y2spOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTY2OSw0NSArMTY5Nyw1NCBAQCB0Z2xfZGMzY29f Zmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICB2b2lkIGludGVsX3Bz cl9mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJICAgICB1bnNp Z25lZCBmcm9udGJ1ZmZlcl9iaXRzLCBlbnVtIGZiX29wX29yaWdpbiBvcmlnaW4pCj4gIHsKPiAt CWlmICghQ0FOX1BTUihkZXZfcHJpdikpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChvcmlnaW4g PT0gT1JJR0lOX0ZMSVApIHsKPiAtCQl0Z2xfZGMzY29fZmx1c2goZGV2X3ByaXYsIGZyb250YnVm ZmVyX2JpdHMsIG9yaWdpbik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCW11dGV4X2xvY2so JmRldl9wcml2LT5wc3IubG9jayk7Cj4gLQlpZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCkgewo+ IC0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAtCQlyZXR1cm47Cj4gKwlz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHA7Cj4gKwo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsK PiArCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKPiArCj4gKwkJaWYgKGVu Y29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCAmJiBDQU5fUFNSKGludGVsX2RwKSkgewo+ ICsJCQlpZiAob3JpZ2luID09IE9SSUdJTl9GTElQKSB7Cj4gKwkJCQl0Z2xfZGMzY29fZmx1c2go aW50ZWxfZHAsIGZyb250YnVmZmVyX2JpdHMsIG9yaWdpbik7Cj4gKwkJCQljb250aW51ZTsKPiAr CQkJfQo+ICsKPiArCQkJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiArCQkJaWYg KCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpIHsKPiArCQkJCW11dGV4X3VubG9jaygmaW50ZWxfZHAt PnBzci5sb2NrKTsKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQl9Cj4gKwo+ICsJCQlmcm9udGJ1ZmZl cl9iaXRzICY9IElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKGludGVsX2RwLT5wc3IucGlwZSk7 Cj4gKwkJCWludGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzICY9IH5mcm9udGJ1ZmZl cl9iaXRzOwo+ICsKPiArCQkJLyogQnkgZGVmaW5pdGlvbiBmbHVzaCA9IGludmFsaWRhdGUgKyBm bHVzaCAqLwo+ICsJCQlpZiAoZnJvbnRidWZmZXJfYml0cykKPiArCQkJCXBzcl9mb3JjZV9od190 cmFja2luZ19leGl0KGludGVsX2RwKTsKPiArCj4gKwkJCWlmICghaW50ZWxfZHAtPnBzci5hY3Rp dmUgJiYgIWludGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+ICsJCQkJc2NoZWR1 bGVfd29yaygmaW50ZWxfZHAtPnBzci53b3JrKTsKPiArCQkJbXV0ZXhfdW5sb2NrKCZpbnRlbF9k cC0+cHNyLmxvY2spOwo+ICsJCX0KPiAgCX0KPiAtCj4gLQlmcm9udGJ1ZmZlcl9iaXRzICY9IElO VEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKGRldl9wcml2LT5wc3IucGlwZSk7Cj4gLQlkZXZfcHJp di0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyAmPSB+ZnJvbnRidWZmZXJfYml0czsKPiAtCj4g LQkvKiBCeSBkZWZpbml0aW9uIGZsdXNoID0gaW52YWxpZGF0ZSArIGZsdXNoICovCj4gLQlpZiAo ZnJvbnRidWZmZXJfYml0cykKPiAtCQlwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChkZXZfcHJp dik7Cj4gLQo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSAmJiAhZGV2X3ByaXYtPnBzci5i dXN5X2Zyb250YnVmZmVyX2JpdHMpCj4gLQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPnBzci53 b3JrKTsKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAgfQo+ICAKPiAg LyoqCj4gICAqIGludGVsX3Bzcl9pbml0IC0gSW5pdCBiYXNpYyBQU1Igd29yayBhbmQgbXV0ZXgu Cj4gLSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgcHJpdmF0ZQo+ICsgKiBAaW50ZWxfZHA6IElu dGVsIERQCj4gICAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gaXMgIGNhbGxlZCBvbmx5IG9uY2UgYXQg ZHJpdmVyIGxvYWQgdG8gaW5pdGlhbGl6ZSBiYXNpYwo+IC0gKiBQU1Igc3R1ZmYuCj4gKyAqIFRo aXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBpbml0aWFsaXppbmcgY29ubmVjdG9yLgo+ ICsgKiAodGhlIGluaXRpYWxpemluZyBvZiBjb25uZWN0b3IgdHJlYXRzIHRoZSBoYW5kbGluZyBv ZiBjb25uZWN0b3IgY2FwYWJpbGl0aWVzKQo+ICsgKiBBbmQgaXQgaW5pdGlhbGl6ZXMgYmFzaWMg UFNSIHN0dWZmIGZvciBlYWNoIERQIEVuY29kZXIuCj4gICAqLwo+IC12b2lkIGludGVsX3Bzcl9p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArdm9pZCBpbnRlbF9wc3Jf aW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCj4gIAlpZiAoIUhB U19QU1IoZGV2X3ByaXYpKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoIWRldl9wcml2LT5wc3Iu c2lua19zdXBwb3J0KQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLnNpbmtfc3VwcG9ydCkKPiAgCQly ZXR1cm47Cj4gIAo+ICAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+IEBAIC0xNzI1LDE0ICsx NzYyLDE0IEBAIHZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICAJLyogU2V0IGxpbmtfc3RhbmRieSB4IGxpbmtfb2ZmIGRlZmF1bHRzICovCj4g IAlpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAg CQkvKiBIU1cgYW5kIEJEVyByZXF1aXJlIHdvcmthcm91bmRzIHRoYXQgd2UgZG9uJ3QgaW1wbGVt ZW50LiAqLwo+IC0JCWRldl9wcml2LT5wc3IubGlua19zdGFuZGJ5ID0gZmFsc2U7Cj4gKwkJaW50 ZWxfZHAtPnBzci5saW5rX3N0YW5kYnkgPSBmYWxzZTsKPiAgCWVsc2UgaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPCAxMikKPiAgCQkvKiBGb3IgbmV3IHBsYXRmb3JtcyB1cCB0byBUR0wgbGV0J3Mg cmVzcGVjdCBWQlQgYmFjayBhZ2FpbiAqLwo+IC0JCWRldl9wcml2LT5wc3IubGlua19zdGFuZGJ5 ID0gZGV2X3ByaXYtPnZidC5wc3IuZnVsbF9saW5rOwo+ICsJCWludGVsX2RwLT5wc3IubGlua19z dGFuZGJ5ID0gZGV2X3ByaXYtPnZidC5wc3IuZnVsbF9saW5rOwo+ICAKPiAtCUlOSVRfV09SSygm ZGV2X3ByaXYtPnBzci53b3JrLCBpbnRlbF9wc3Jfd29yayk7Cj4gLQlJTklUX0RFTEFZRURfV09S SygmZGV2X3ByaXYtPnBzci5kYzNjb193b3JrLCB0Z2xfZGMzY29fZGlzYWJsZV93b3JrKTsKPiAt CW11dGV4X2luaXQoJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwlJTklUX1dPUksoJmludGVsX2Rw LT5wc3Iud29yaywgaW50ZWxfcHNyX3dvcmspOwo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJmludGVs X2RwLT5wc3IuZGMzY29fd29yaywgdGdsX2RjM2NvX2Rpc2FibGVfd29yayk7Cj4gKwltdXRleF9p bml0KCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHBzcl9nZXRf c3RhdHVzX2FuZF9lcnJvcl9zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiBAQCAt MTc1OCw3ICsxNzk1LDcgQEAgc3RhdGljIHZvaWQgcHNyX2FscG1fY2hlY2soc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gJmlu dGVsX2RwLT5hdXg7Cj4gLQlzdHJ1Y3QgaTkxNV9wc3IgKnBzciA9ICZkZXZfcHJpdi0+cHNyOwo+ ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7Cj4gIAl1OCB2YWw7Cj4g IAlpbnQgcjsKPiAgCj4gQEAgLTE3ODUsNyArMTgyMiw3IEBAIHN0YXRpYyB2b2lkIHBzcl9hbHBt X2NoZWNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHN0YXRpYyB2b2lkIHBzcl9jYXBh YmlsaXR5X2NoYW5nZWRfY2hlY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 Cj4gLQlzdHJ1Y3QgaTkxNV9wc3IgKnBzciA9ICZkZXZfcHJpdi0+cHNyOwo+ICsJc3RydWN0IGlu dGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7Cj4gIAl1OCB2YWw7Cj4gIAlpbnQgcjsKPiAg Cj4gQEAgLTE4MDksMTggKzE4NDYsMTggQEAgc3RhdGljIHZvaWQgcHNyX2NhcGFiaWxpdHlfY2hh bmdlZF9jaGVjayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB2b2lkIGludGVsX3Bzcl9z aG9ydF9wdWxzZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAtCXN0cnVj dCBpOTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7Cj4gKwlzdHJ1Y3QgaW50ZWxfcHNyICpw c3IgPSAmaW50ZWxfZHAtPnBzcjsKPiAgCXU4IHN0YXR1cywgZXJyb3Jfc3RhdHVzOwo+ICAJY29u c3QgdTggZXJyb3JzID0gRFBfUFNSX1JGQl9TVE9SQUdFX0VSUk9SIHwKPiAgCQkJICBEUF9QU1Jf VlNDX1NEUF9VTkNPUlJFQ1RBQkxFX0VSUk9SIHwKPiAgCQkJICBEUF9QU1JfTElOS19DUkNfRVJS T1I7Cj4gIAo+IC0JaWYgKCFDQU5fUFNSKGRldl9wcml2KSB8fCAhaW50ZWxfZHBfaXNfZWRwKGlu dGVsX2RwKSkKPiArCWlmICghQ0FOX1BTUihpbnRlbF9kcCkgfHwgIWludGVsX2RwX2lzX2VkcChp bnRlbF9kcCkpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCW11dGV4X2xvY2soJnBzci0+bG9jayk7Cj4g IAo+IC0JaWYgKCFwc3ItPmVuYWJsZWQgfHwgcHNyLT5kcCAhPSBpbnRlbF9kcCkKPiArCWlmICgh cHNyLT5lbmFibGVkKQo+ICAJCWdvdG8gZXhpdDsKPiAgCj4gIAlpZiAocHNyX2dldF9zdGF0dXNf YW5kX2Vycm9yX3N0YXR1cyhpbnRlbF9kcCwgJnN0YXR1cywgJmVycm9yX3N0YXR1cykpIHsKPiBA QCAtMTg2MywxNSArMTkwMCwxNCBAQCB2b2lkIGludGVsX3Bzcl9zaG9ydF9wdWxzZShzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICAKPiAgYm9vbCBpbnRlbF9wc3JfZW5hYmxlZChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiAgCWJvb2wgcmV0Owo+ICAKPiAtCWlmICgh Q0FOX1BTUihkZXZfcHJpdikgfHwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gKwlpZiAo IUNBTl9QU1IoaW50ZWxfZHApIHx8ICFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICAJCXJl dHVybiBmYWxzZTsKPiAgCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+IC0J cmV0ID0gKGRldl9wcml2LT5wc3IuZHAgPT0gaW50ZWxfZHAgJiYgZGV2X3ByaXYtPnBzci5lbmFi bGVkKTsKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiArCW11dGV4X2xv Y2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gKwlyZXQgPSBpbnRlbF9kcC0+cHNyLmVuYWJsZWQ7 Cj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIAo+ICAJcmV0dXJuIHJl dDsKPiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X3Bzci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaAo+IGluZGV4 IDBhNTE3OTc4ZThhZi4uMDNlYjE5NTQ3ZDA5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX3Bzci5oCj4gQEAgLTE4LDcgKzE4LDcgQEAgc3RydWN0IGludGVsX2F0b21p Y19zdGF0ZTsKPiAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlOwo+ICBzdHJ1Y3QgaW50ZWxfcGxh bmU7Cj4gIAo+IC0jZGVmaW5lIENBTl9QU1IoZGV2X3ByaXYpIChIQVNfUFNSKGRldl9wcml2KSAm JiBkZXZfcHJpdi0+cHNyLnNpbmtfc3VwcG9ydCkKPiArI2RlZmluZSBDQU5fUFNSKGludGVsX2Rw KSAoSEFTX1BTUihkcF90b19pOTE1KGludGVsX2RwKSkgJiYgaW50ZWxfZHAtPnBzci5zaW5rX3N1 cHBvcnQpCj4gIHZvaWQgaW50ZWxfcHNyX2luaXRfZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKTsKPiAgdm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs Cj4gIAkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4g QEAgLTI4LDI0ICsyOCwyNCBAQCB2b2lkIGludGVsX3Bzcl9kaXNhYmxlKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCj4gIHZvaWQgaW50ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLAo+ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLAo+ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlKTsKPiAtaW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCB1NjQgdmFsdWUpOwo+ICtpbnQgaW50ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCB1NjQgdmFsdWUpOwo+ICB2b2lkIGludGVsX3Bzcl9pbnZhbGlk YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJICB1bnNpZ25lZCBm cm9udGJ1ZmZlcl9iaXRzLAo+ICAJCQkgIGVudW0gZmJfb3Bfb3JpZ2luIG9yaWdpbik7Cj4gIHZv aWQgaW50ZWxfcHNyX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg CQkgICAgIHVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMsCj4gIAkJICAgICBlbnVtIGZiX29wX29y aWdpbiBvcmlnaW4pOwo+IC12b2lkIGludGVsX3Bzcl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gK3ZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCk7Cj4gIHZvaWQgaW50ZWxfcHNyX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCj4gIAkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKTsKPiAtdm9pZCBpbnRlbF9wc3JfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCB1MzIgcHNyX2lpcik7Cj4gK3ZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVy KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHUzMiBwc3JfaWlyKTsKPiAgdm9pZCBpbnRlbF9w c3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gLWludCBpbnRlbF9w c3Jfd2FpdF9mb3JfaWRsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNf c3RhdGUsCj4gLQkJCSAgICB1MzIgKm91dF92YWx1ZSk7Cj4gK3ZvaWQgaW50ZWxfcHNyX3dhaXRf Zm9yX2lkbGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKTsK PiAgYm9vbCBpbnRlbF9wc3JfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKPiAg aW50IGludGVsX3BzcjJfc2VsX2ZldGNoX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiAgCQkJCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKPiAtdm9pZCBpbnRlbF9w c3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpOwo+ICt2b2lkIGludGVsX3BzcjJfcHJvZ3JhbV90cmFuc19tYW5fdHJr X2N0bChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICsJCQkJCSAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICB2b2lkIGludGVsX3BzcjJfcHJvZ3JhbV9w bGFuZV9zZWxfZmV0Y2goc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAgCQkJCQljb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkJCQljb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9zcHJpdGUuYwo+IGluZGV4IGI3ZTIwODgxNjA3NC4uOTQ4MjM0YzYwNjQ4 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRl LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCj4g QEAgLTg0LDcgKzg0LDYgQEAgdm9pZCBpbnRlbF9waXBlX3VwZGF0ZV9zdGFydChjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpCj4gIAlib29sIG5lZWRfdmx2X2Rz aV93YSA9IChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2 KSkgJiYKPiAgCQlpbnRlbF9jcnRjX2hhc190eXBlKG5ld19jcnRjX3N0YXRlLCBJTlRFTF9PVVRQ VVRfRFNJKTsKPiAgCURFRklORV9XQUlUKHdhaXQpOwo+IC0JdTMyIHBzcl9zdGF0dXM7Cj4gIAo+ ICAJaWYgKG5ld19jcnRjX3N0YXRlLT51YXBpLmFzeW5jX2ZsaXApCj4gIAkJcmV0dXJuOwo+IEBA IC0xMDksMTAgKzEwOCw3IEBAIHZvaWQgaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKQo+ICAJICogVkJMIGludGVycnVw dHMgd2lsbCBzdGFydCB0aGUgUFNSIGV4aXQgYW5kIHByZXZlbnQgYSBQU1IKPiAgCSAqIHJlLWVu dHJ5IGFzIHdlbGwuCj4gIAkgKi8KPiAtCWlmIChpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShuZXdf Y3J0Y19zdGF0ZSwgJnBzcl9zdGF0dXMpKQo+IC0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCj4g LQkJCSJQU1IgaWRsZSB0aW1lZCBvdXQgMHgleCwgYXRvbWljIHVwZGF0ZSBtYXkgZmFpbFxuIiwK PiAtCQkJcHNyX3N0YXR1cyk7Cj4gKwlpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShuZXdfY3J0Y19z dGF0ZSk7Cj4gIAo+ICAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gaW5kZXggNWQwNGIyODJjMDYwLi5hMmUzOWU4YWRjYmUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiBAQCAtNDc1LDQyICs0NzUsNiBAQCBzdHJ1Y3QgaTkxNV9kcnJzIHsK PiAgCWVudW0gZHJyc19zdXBwb3J0X3R5cGUgdHlwZTsKPiAgfTsKPiAgCj4gLXN0cnVjdCBpOTE1 X3BzciB7Cj4gLQlzdHJ1Y3QgbXV0ZXggbG9jazsKPiAtCj4gLSNkZWZpbmUgSTkxNV9QU1JfREVC VUdfTU9ERV9NQVNLCTB4MGYKPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19ERUZBVUxUCQkweDAw Cj4gLSNkZWZpbmUgSTkxNV9QU1JfREVCVUdfRElTQUJMRQkJMHgwMQo+IC0jZGVmaW5lIEk5MTVf UFNSX0RFQlVHX0VOQUJMRQkJMHgwMgo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0ZPUkNFX1BT UjEJMHgwMwo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0lSUQkJMHgxMAo+IC0KPiAtCXUzMiBk ZWJ1ZzsKPiAtCWJvb2wgc2lua19zdXBwb3J0Owo+IC0JYm9vbCBlbmFibGVkOwo+IC0Jc3RydWN0 IGludGVsX2RwICpkcDsKPiAtCWVudW0gcGlwZSBwaXBlOwo+IC0JZW51bSB0cmFuc2NvZGVyIHRy YW5zY29kZXI7Cj4gLQlib29sIGFjdGl2ZTsKPiAtCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+ IC0JdW5zaWduZWQgYnVzeV9mcm9udGJ1ZmZlcl9iaXRzOwo+IC0JYm9vbCBzaW5rX3BzcjJfc3Vw cG9ydDsKPiAtCWJvb2wgbGlua19zdGFuZGJ5Owo+IC0JYm9vbCBjb2xvcmltZXRyeV9zdXBwb3J0 Owo+IC0JYm9vbCBwc3IyX2VuYWJsZWQ7Cj4gLQlib29sIHBzcjJfc2VsX2ZldGNoX2VuYWJsZWQ7 Cj4gLQl1OCBzaW5rX3N5bmNfbGF0ZW5jeTsKPiAtCWt0aW1lX3QgbGFzdF9lbnRyeV9hdHRlbXB0 Owo+IC0Ja3RpbWVfdCBsYXN0X2V4aXQ7Cj4gLQlib29sIHNpbmtfbm90X3JlbGlhYmxlOwo+IC0J Ym9vbCBpcnFfYXV4X2Vycm9yOwo+IC0JdTE2IHN1X3hfZ3JhbnVsYXJpdHk7Cj4gLQlib29sIGRj M2NvX2VuYWJsZWQ7Cj4gLQl1MzIgZGMzY29fZXhpdF9kZWxheTsKPiAtCXN0cnVjdCBkZWxheWVk X3dvcmsgZGMzY29fd29yazsKPiAtCXN0cnVjdCBkcm1fZHBfdnNjX3NkcCB2c2M7Cj4gLX07Cj4g LQo+ICAjZGVmaW5lIFFVSVJLX0xWRFNfU1NDX0RJU0FCTEUgKDE8PDEpCj4gICNkZWZpbmUgUVVJ UktfSU5WRVJUX0JSSUdIVE5FU1MgKDE8PDIpCj4gICNkZWZpbmUgUVVJUktfQkFDS0xJR0hUX1BS RVNFTlQgKDE8PDMpCj4gQEAgLTEwNDEsOCArMTAwNSw2IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIHsKPiAgCj4gIAlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zIHBvd2VyX2RvbWFpbnM7Cj4g IAo+IC0Jc3RydWN0IGk5MTVfcHNyIHBzcjsKPiAtCj4gIAlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3Ig Z3B1X2Vycm9yOwo+ICAKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp2bHZfcGN0eDsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRleCA0OTFmODI1MDBkNjguLjg1NDY3ODY1MjFi NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IEBAIC0yMDQ0LDEwICsyMDQ0LDIyIEBA IHN0YXRpYyB2b2lkIGl2Yl9kaXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAgCQlpdmJfZXJyX2ludF9oYW5kbGVyKGRldl9wcml2KTsKPiAgCj4g IAlpZiAoZGVfaWlyICYgREVfRURQX1BTUl9JTlRfSFNXKSB7Cj4gLQkJdTMyIHBzcl9paXIgPSBp bnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwgRURQX1BTUl9JSVIpOwo+ICsJCXN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICAKPiAtCQlpbnRlbF9wc3JfaXJxX2hhbmRs ZXIoZGV2X3ByaXYsIHBzcl9paXIpOwo+IC0JCWludGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYt PnVuY29yZSwgRURQX1BTUl9JSVIsIHBzcl9paXIpOwo+ICsJCWZvcl9lYWNoX2ludGVsX2RwKCZk ZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gKwo+ICsJCQlpZiAoZW5jb2Rlci0+dHlwZSA9 PSBJTlRFTF9PVVRQVVRfRURQICYmCj4gKwkJCSAgICBDQU5fUFNSKGludGVsX2RwKSkgewo+ICsJ CQkJdTMyIHBzcl9paXIgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwKPiAr CQkJCQkJCQlFRFBfUFNSX0lJUik7Cj4gKwo+ICsJCQkJaW50ZWxfcHNyX2lycV9oYW5kbGVyKGlu dGVsX2RwLCBwc3JfaWlyKTsKPiArCQkJCWludGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYtPnVu Y29yZSwKPiArCQkJCQkJICAgRURQX1BTUl9JSVIsIHBzcl9paXIpOwo+ICsJCQkJYnJlYWs7Cj4g KwkJCX0KPiArCQl9Cj4gIAl9Cj4gIAo+ICAJaWYgKGRlX2lpciAmIERFX0FVWF9DSEFOTkVMX0Ff SVZCKQo+IEBAIC0yMjU1LDIxICsyMjY3LDM0IEBAIGdlbjhfZGVfbWlzY19pcnFfaGFuZGxlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBpaXIpCj4gIAl9Cj4gIAo+ICAJ aWYgKGlpciAmIEdFTjhfREVfRURQX1BTUikgewo+ICsJCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyOwo+ICAJCXUzMiBwc3JfaWlyOwo+ICAJCWk5MTVfcmVnX3QgaWlyX3JlZzsKPiAgCj4g LQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIpCj4gLQkJCWlpcl9yZWcgPSBUUkFOU19Q U1JfSUlSKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7Cj4gLQkJZWxzZQo+IC0JCQlpaXJfcmVn ID0gRURQX1BTUl9JSVI7Cj4gKwkJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVu Y29kZXIpIHsKPiArCQkJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9k cChlbmNvZGVyKTsKPiAgCj4gLQkJcHNyX2lpciA9IGludGVsX3VuY29yZV9yZWFkKCZkZXZfcHJp di0+dW5jb3JlLCBpaXJfcmVnKTsKPiAtCQlpbnRlbF91bmNvcmVfd3JpdGUoJmRldl9wcml2LT51 bmNvcmUsIGlpcl9yZWcsIHBzcl9paXIpOwo+ICsJCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMiAmJiBDQU5fUFNSKGludGVsX2RwKSkgewo+ICsJCQkJaWlyX3JlZyA9IFRSQU5TX1BTUl9J SVIoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKTsKPiArCQkJfSBlbHNlIGlmIChlbmNvZGVyLT50 eXBlID09IElOVEVMX09VVFBVVF9FRFAgJiYKPiArCQkJCSAgIENBTl9QU1IoaW50ZWxfZHApKSB7 Cj4gKwkJCQlpaXJfcmVnID0gRURQX1BTUl9JSVI7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQljb250 aW51ZTsKPiArCQkJfQo+ICsKPiArCQkJcHNyX2lpciA9IGludGVsX3VuY29yZV9yZWFkKCZkZXZf cHJpdi0+dW5jb3JlLCBpaXJfcmVnKTsKPiArCQkJaW50ZWxfdW5jb3JlX3dyaXRlKCZkZXZfcHJp di0+dW5jb3JlLCBpaXJfcmVnLCBwc3JfaWlyKTsKPiArCj4gKwkJCWlmIChwc3JfaWlyKQo+ICsJ CQkJZm91bmQgPSB0cnVlOwo+ICAKPiAtCQlpZiAocHNyX2lpcikKPiAtCQkJZm91bmQgPSB0cnVl Owo+ICsJCQlpbnRlbF9wc3JfaXJxX2hhbmRsZXIoaW50ZWxfZHAsIHBzcl9paXIpOwo+ICAKPiAt CQlpbnRlbF9wc3JfaXJxX2hhbmRsZXIoZGV2X3ByaXYsIHBzcl9paXIpOwo+ICsJCQkvKiBwcmlv ciBHRU4xMiBvbmx5IGhhdmUgb25lIEVEUCBQU1IgKi8KPiArCQkJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPCAxMikKPiArCQkJCWJyZWFrOwo+ICsJCX0KPiAgCX0KPiAgCj4gIAlpZiAoIWZvdW5k KQo+IC0tIAo+IDIuMjUuMAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK