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=-10.9 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 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 6A81DC4361B for ; Mon, 14 Dec 2020 11:34:00 +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 13A8B22A99 for ; Mon, 14 Dec 2020 11:33:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 13A8B22A99 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 5818E6E1E0; Mon, 14 Dec 2020 11:33:59 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id A39866E1E0 for ; Mon, 14 Dec 2020 11:33:57 +0000 (UTC) IronPort-SDR: fuFJmYCb3Svs2O5FQa6kiNA23uuE56PicUX2HHuVQCC82XTRTKyGS8DGatPWHprw59pUX6af6m 8BFrAKuzyy1A== X-IronPort-AV: E=McAfee;i="6000,8403,9834"; a="173921998" X-IronPort-AV: E=Sophos;i="5.78,418,1599548400"; d="scan'208";a="173921998" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2020 03:33:57 -0800 IronPort-SDR: UiA5LH+Ajt8bAc4pqiNsOT2qm6swaphQWkpeHSVW0jivVWbMMNJsqSOeMl0dHQLCc0ayF1Epu+ mJI/rjZWtCxQ== X-IronPort-AV: E=Sophos;i="5.78,418,1599548400"; d="scan'208";a="411149041" Received: from doshea2x-mobl2.ger.corp.intel.com (HELO localhost) ([10.213.232.85]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Dec 2020 03:33:53 -0800 From: Jani Nikula To: Gwan-gyeong Mun , intel-gfx@lists.freedesktop.org In-Reply-To: <20201211171421.4048499-1-gwan-gyeong.mun@intel.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20201211171421.4048499-1-gwan-gyeong.mun@intel.com> Date: Mon, 14 Dec 2020 13:33:51 +0200 Message-ID: <87sg8862qo.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH v5 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gRnJpLCAxMSBEZWMgMjAyMCwgR3dhbi1neWVvbmcgTXVuIDxnd2FuLWd5ZW9uZy5tdW5AaW50 ZWwuY29tPiB3cm90ZToKPiBJdCBpcyBhIHByZWxpbWluYXJ5IHdvcmsgZm9yIHN1cHBvcnRpbmcg bXVsdGlwbGUgRURQIFBTUiBhbmQKPiBEUCBQYW5lbFJlcGxheS4gQW5kIGl0IHJlZmFjdG9ycyBz aW5nbGV0b24gUFNSIHRvIE11bHRpIFRyYW5zY29kZXIKPiBzdXBwb3J0YWJsZSBQU1IuCj4gQW5k IHRoaXMgbW92ZXMgYW5kIHJlbmFtZXMgdGhlIGk5MTVfcHNyIHN0cnVjdHVyZSBvZiBkcm1faTkx NV9wcml2YXRlJ3MgdG8KPiBpbnRlbF9kcCdzIGludGVsX3BzciBzdHJ1Y3R1cmUuCj4gSXQgYWxz byBjYXVzZXMgY2hhbmdlcyBpbiBQU1IgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUgZm9yIHN1 cHBvcnRpbmcKPiBtdWx0aXBsZSB0cmFuc2NvZGVycy4gQnV0IGl0IGRvZXMgbm90IGNoYW5nZSB0 aGUgc2NlbmFyaW8gYW5kIHRpbWluZyBvZgo+IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgUFNSLgoK Q2FuIHdlIHBsYW4gdG8gdGhyb3cgb3V0IHRoZSBwc3IgZGVidWdmcyBmaWxlcyBub3QgYXR0YWNo ZWQgdG8gYQpjb25uZWN0b3IsIHBsZWFzZT8gSS5lLiBpOTE1X2VkcF9wc3JfZGVidWcgYW5kIGk5 MTVfZWRwX3Bzcl9zdGF0dXMgd291bGQKYmUgcmVtb3ZlZCBmcm9tIHRvcCBsZXZlbCBhbHRvZ2V0 aGVyLCBhbmQgb25seSBiZSBhdmFpbGFibGUgdW5kZXIKY29ubmVjdG9yIGRlYnVnZnMuCgpCUiwK SmFuaS4KCgo+Cj4gdjI6IEZpeCBpbmRlbnRhdGlvbiBhbmQgYWRkIGNvbW1lbnRzCj4gdjM6IFJl bW92ZSBCbGFuayBsaW5lCj4gdjQ6IFJlYmFzZWQKPiB2NTogUmViYXNlZCBhbmQgQWRkcmVzc2Vk IEFuc2h1bWFuJ3MgcmV2aWV3IGNvbW1lbnQuCj4gICAgIC0gTW92ZSBjYWxsaW5nIG9mIGludGVs X3Bzcl9pbml0KCkgdG8gaW50ZWxfZHBfaW5pdF9jb25uZWN0b3IoKQo+Cj4gU2lnbmVkLW9mZi1i eTogR3dhbi1neWVvbmcgTXVuIDxnd2FuLWd5ZW9uZy5tdW5AaW50ZWwuY29tPgo+IENjOiBKb3PD qSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KPiBDYzogSnVoYS1QZWtr YSBIZWlra2lsYSA8anVoYXBla2thLmhlaWtraWxhQGdtYWlsLmNvbT4KPiBDYzogQW5zaHVtYW4g R3VwdGEgPGFuc2h1bWFuLmd1cHRhQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyAgICAgIHwgICAzICsKPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgIHwgICA0IC0KPiAgLi4uL2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMgIHwgMTExICsrLS0KPiAgLi4uL2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oICAgIHwgIDM4ICsrCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyAgICAgICB8ICAyMyArLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jICAgICAgfCA1ODUgKysrKysrKysrKy0tLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmggICAgICB8ICAx NCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jICAgfCAg IDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwg IDM4IC0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICAgICAgICAgICB8 ICA0OSArLQo+ICAxMCBmaWxlcyBjaGFuZ2VkLCA0OTEgaW5zZXJ0aW9ucygrKSwgMzgwIGRlbGV0 aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCj4gaW5k ZXggNjg2MzIzNmRmMWQwLi40Yjg3ZjcyY2I5YzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGRpLmMKPiBAQCAtNDMyMCw3ICs0MzIwLDEwIEBAIHN0YXRpYyB2b2lk IGludGVsX2RkaV91cGRhdGVfcGlwZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiAgCj4gIAlpbnRlbF9kZGlfc2V0X2RwX21zYShjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsK PiAgCj4gKwkvL1RPRE86IG1vdmUgUFNSIHJlbGF0ZWQgZnVuY3Rpb25zIGludG8gaW50ZWxfcHNy X3VwZGF0ZSgpCj4gKwlpbnRlbF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoaW50ZWxf ZHAsIGNydGNfc3RhdGUpOwo+ICAJaW50ZWxfcHNyX3VwZGF0ZShpbnRlbF9kcCwgY3J0Y19zdGF0 ZSwgY29ubl9zdGF0ZSk7Cj4gKwo+ICAJaW50ZWxfZHBfc2V0X2luZm9mcmFtZXMoZW5jb2Rlciwg dHJ1ZSwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gIAlpbnRlbF9lZHBfZHJyc191cGRhdGUo aW50ZWxfZHAsIGNydGNfc3RhdGUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IDc2MWJlOGRlYWE5Yi4uZjI2ZDliY2Q3MjJjIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBA QCAtMTU4NjksOCArMTU4NjksNiBAQCBzdGF0aWMgdm9pZCBjb21taXRfcGlwZV9jb25maWcoc3Ry dWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAo+ICAJCWlmIChuZXdfY3J0Y19zdGF0 ZS0+dXBkYXRlX3BpcGUpCj4gIAkJCWludGVsX3BpcGVfZmFzdHNldChvbGRfY3J0Y19zdGF0ZSwg bmV3X2NydGNfc3RhdGUpOwo+IC0KPiAtCQlpbnRlbF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Ry a19jdGwobmV3X2NydGNfc3RhdGUpOwo+ICAJfQo+ICAKPiAgCWlmIChkZXZfcHJpdi0+ZGlzcGxh eS5hdG9taWNfdXBkYXRlX3dhdGVybWFya3MpCj4gQEAgLTE3ODMwLDggKzE3ODI4LDYgQEAgc3Rh dGljIHZvaWQgaW50ZWxfc2V0dXBfb3V0cHV0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAkJaW50ZWxfZHZvX2luaXQoZGV2X3ByaXYpOwo+ICAJfQo+ICAKPiAtCWludGVs X3Bzcl9pbml0KGRldl9wcml2KTsKPiAtCj4gIAlmb3JfZWFjaF9pbnRlbF9lbmNvZGVyKCZkZXZf cHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gIAkJZW5jb2Rlci0+YmFzZS5wb3NzaWJsZV9jcnRjcyA9 Cj4gIAkJCWludGVsX2VuY29kZXJfcG9zc2libGVfY3J0Y3MoZW5jb2Rlcik7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5jCj4g aW5kZXggY2Q3ZTU1MTllZTdkLi4wNDEwNTMxNjdkN2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMKPiBAQCAtMjQ5 LDE4ICsyNDksMTcgQEAgc3RhdGljIGludCBpOTE1X3Bzcl9zaW5rX3N0YXR1c19zaG93KHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgCQkic2luayBpbnRlcm5hbCBlcnJvciIsCj4g IAl9Owo+ICAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG0tPnByaXZhdGU7Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+ ZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQo+ICAJCWludGVsX2F0dGFjaGVk X2RwKHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpKTsKPiAgCWludCByZXQ7Cj4gIAo+IC0J aWYgKCFDQU5fUFNSKGRldl9wcml2KSkgewo+IC0JCXNlcV9wdXRzKG0sICJQU1IgVW5zdXBwb3J0 ZWRcbiIpOwo+ICsJaWYgKGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkKQo+ICAJCXJldHVybiAtRU5PREVWOwo+IC0JfQo+ICAKPiAtCWlmIChjb25uZWN0b3It PnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKPiArCWlmICghQ0FOX1BTUihp bnRlbF9kcCkpIHsKPiArCQlzZXFfcHV0cyhtLCAiUFNSIFVuc3VwcG9ydGVkXG4iKTsKPiAgCQly ZXR1cm4gLUVOT0RFVjsKPiArCX0KPiAgCj4gIAlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmaW50 ZWxfZHAtPmF1eCwgRFBfUFNSX1NUQVRVUywgJnZhbCk7Cj4gIAo+IEBAIC0yODAsMTIgKzI3OSwx MyBAQCBzdGF0aWMgaW50IGk5MTVfcHNyX3Npbmtfc3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICpkYXRhKQo+ICBERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9wc3Jfc2lua19z dGF0dXMpOwo+ICAKPiAgc3RhdGljIHZvaWQKPiAtcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gK3Bzcl9zb3Vy Y2Vfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBzZXFfZmlsZSAqbSkK PiAgewo+ICAJdTMyIHZhbCwgc3RhdHVzX3ZhbDsKPiAgCWNvbnN0IGNoYXIgKnN0YXR1cyA9ICJ1 bmtub3duIjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5 MTUoaW50ZWxfZHApOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gIAkJc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBsaXZlX3N0YXR1c1tdID0gewo+ICAJCQkiSURMRSIsCj4gIAkJCSJDQVBUVVJF IiwKPiBAQCAtMzAwLDcgKzMwMCw3IEBAIHBzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJCQkiVEdfT04iCj4g IAkJfTsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVEUF9Q U1IyX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBFRFBfUFNS Ml9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7Cj4gIAkJc3RhdHVzX3ZhbCA9ICh2 YWwgJiBFRFBfUFNSMl9TVEFUVVNfU1RBVEVfTUFTSykgPj4KPiAgCQkJICAgICAgRURQX1BTUjJf U1RBVFVTX1NUQVRFX1NISUZUOwo+ICAJCWlmIChzdGF0dXNfdmFsIDwgQVJSQVlfU0laRShsaXZl X3N0YXR1cykpCj4gQEAgLTMxNyw3ICszMTcsNyBAQCBwc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCQkJIlNS REVOVF9PTiIsCj4gIAkJfTsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0J CQkJICAgIEVEUF9QU1JfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJ ICAgIEVEUF9QU1JfU1RBVFVTKGludGVsX2RwLT5wc3IudHJhbnNjb2RlcikpOwo+ICAJCXN0YXR1 c192YWwgPSAodmFsICYgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSykgPj4KPiAgCQkJICAgICAg RURQX1BTUl9TVEFUVVNfU1RBVEVfU0hJRlQ7Cj4gIAkJaWYgKHN0YXR1c192YWwgPCBBUlJBWV9T SVpFKGxpdmVfc3RhdHVzKSkKPiBAQCAtMzI3LDIxICszMjcsMTggQEAgcHNyX3NvdXJjZV9zdGF0 dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0p Cj4gIAlzZXFfcHJpbnRmKG0sICJTb3VyY2UgUFNSIHN0YXR1czogJXMgWzB4JTA4eF1cbiIsIHN0 YXR1cywgdmFsKTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiArc3RhdGljIGludCBpbnRlbF9wc3Jfc3Rh dHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnBy aXZhdGUpOwo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7Cj4gIAlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKPiAgCWNvbnN0IGNoYXIgKnN0YXR1czsKPiAgCWJvb2wgZW5hYmxlZDsK PiAgCXUzMiB2YWw7Cj4gIAo+IC0JaWYgKCFIQVNfUFNSKGRldl9wcml2KSkKPiAtCQlyZXR1cm4g LUVOT0RFVjsKPiAtCj4gIAlzZXFfcHJpbnRmKG0sICJTaW5rIHN1cHBvcnQ6ICVzIiwgeWVzbm8o cHNyLT5zaW5rX3N1cHBvcnQpKTsKPiAtCWlmIChwc3ItPmRwKQo+IC0JCXNlcV9wcmludGYobSwg IiBbMHglMDJ4XSIsIHBzci0+ZHAtPnBzcl9kcGNkWzBdKTsKPiArCWlmIChwc3ItPnNpbmtfc3Vw cG9ydCkKPiArCQlzZXFfcHJpbnRmKG0sICIgWzB4JTAyeF0iLCBpbnRlbF9kcC0+cHNyX2RwY2Rb MF0pOwo+ICAJc2VxX3B1dHMobSwgIlxuIik7Cj4gIAo+ICAJaWYgKCFwc3ItPnNpbmtfc3VwcG9y dCkKPiBAQCAtMzY1LDE2ICszNjIsMTYgQEAgc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVz KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgCj4gIAlpZiAocHNyLT5wc3IyX2Vu YWJsZWQpIHsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVE UF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBFRFBfUFNS Ml9DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSk7Cj4gIAkJZW5hYmxlZCA9IHZhbCAmIEVE UF9QU1IyX0VOQUJMRTsKPiAgCX0gZWxzZSB7Cj4gIAkJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwKPiAtCQkJCSAgICBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsK PiArCQkJCSAgICBFRFBfUFNSX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsKPiAgCQll bmFibGVkID0gdmFsICYgRURQX1BTUl9FTkFCTEU7Cj4gIAl9Cj4gIAlzZXFfcHJpbnRmKG0sICJT b3VyY2UgUFNSIGN0bDogJXMgWzB4JTA4eF1cbiIsCj4gIAkJICAgZW5hYmxlZGRpc2FibGVkKGVu YWJsZWQpLCB2YWwpOwo+IC0JcHNyX3NvdXJjZV9zdGF0dXMoZGV2X3ByaXYsIG0pOwo+ICsJcHNy X3NvdXJjZV9zdGF0dXMoaW50ZWxfZHAsIG0pOwo+ICAJc2VxX3ByaW50ZihtLCAiQnVzeSBmcm9u dGJ1ZmZlciBiaXRzOiAweCUwOHhcbiIsCj4gIAkJICAgcHNyLT5idXN5X2Zyb250YnVmZmVyX2Jp dHMpOwo+ICAKPiBAQCAtMzgzLDcgKzM4MCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0 YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAkgKi8KPiAgCWlmIChJU19I QVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gIAkJdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKPiAtCQkJCSAgICBFRFBfUFNSX1BFUkZfQ05UKGRldl9w cml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1JfUEVSRl9DTlQoaW50ZWxf ZHAtPnBzci50cmFuc2NvZGVyKSk7Cj4gIAkJdmFsICY9IEVEUF9QU1JfUEVSRl9DTlRfTUFTSzsK PiAgCQlzZXFfcHJpbnRmKG0sICJQZXJmb3JtYW5jZSBjb3VudGVyOiAldVxuIiwgdmFsKTsKPiAg CX0KPiBAQCAtNDA0LDcgKzQwMSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAkJICovCj4gIAkJZm9yIChmcmFtZSA9 IDA7IGZyYW1lIDwgUFNSMl9TVV9TVEFUVVNfRlJBTUVTOyBmcmFtZSArPSAzKSB7Cj4gIAkJCXZh bCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkJICAgIFBTUjJfU1VfU1RBVFVTKGRl dl9wcml2LT5wc3IudHJhbnNjb2RlciwgZnJhbWUpKTsKPiArCQkJCQkgICAgUFNSMl9TVV9TVEFU VVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyLCBmcmFtZSkpOwo+ICAJCQlzdV9mcmFtZXNfdmFs W2ZyYW1lIC8gM10gPSB2YWw7Cj4gIAkJfQo+ICAKPiBAQCAtNDMwLDIzICs0MjcsNTcgQEAgc3Rh dGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0 YSkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0 dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4gKwlzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSBOVUxMOwo+ICsKPiArCWlmICghSEFTX1BTUihkZXZfcHJpdikpCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwo+ICsJLyogRmluZCB0aGUgZmlyc3QgRURQICovCj4gKwlmb3JfZWFjaF9pbnRlbF9k cCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgewo+ICsJCWlmIChlbmNvZGVyLT50eXBlID09IElO VEVMX09VVFBVVF9FRFApIHsKPiArCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rl cik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWludGVsX2RwKQo+ICsJ CXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJldHVybiBpbnRlbF9wc3Jfc3RhdHVzKG0sIGludGVs X2RwKTsKPiArfQo+ICsKPiAgc3RhdGljIGludAo+ICBpOTE1X2VkcF9wc3JfZGVidWdfc2V0KHZv aWQgKmRhdGEsIHU2NCB2YWwpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRhdGE7Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWludCByZXQ7Cj4g KwlpbnQgcmV0ID0gLUVOT0RFVjsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikpCj4gLQkJcmV0dXJuIC1FTk9ERVY7Cj4gKwlp ZiAoIUhBU19QU1IoZGV2X3ByaXYpKQo+ICsJCXJldHVybiByZXQ7Cj4gIAo+IC0JZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJTZXR0aW5nIFBTUiBkZWJ1ZyB0byAlbGx4XG4iLCB2YWwpOwo+ ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICAKPiAt CXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwo+ ICsJCWlmICghQ0FOX1BTUihpbnRlbF9kcCkpCj4gKwkJCWNvbnRpbnVlOwo+ICAKPiAtCXJldCA9 IGludGVsX3Bzcl9kZWJ1Z19zZXQoZGV2X3ByaXYsIHZhbCk7Cj4gKwkJaWYgKGVuY29kZXItPnR5 cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIlNldHRpbmcgUFNSIGRlYnVnIHRvICVsbHhcbiIsIHZhbCk7Cj4gIAo+IC0JaW50ZWxfcnVu dGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiArCQkJd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Cj4gKwo+ICsJ CQkvLyBUT0RPOiBzcGxpdCB0byBlYWNoIHRyYW5zY29kZXIncyBQU1IgZGVidWcgc3RhdGUKPiAr CQkJcmV0ID0gaW50ZWxfcHNyX2RlYnVnX3NldChpbnRlbF9kcCwgdmFsKTsKPiArCj4gKwkJCWlu dGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gKwkJ fQo+ICsJfQo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBAQCAtNDU1LDEyICs0ODYsMjUgQEAg c3RhdGljIGludAo+ICBpOTE1X2VkcF9wc3JfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFs KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkYXRhOwo+ICsJ c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4gIAo+IC0JaWYgKCFDQU5fUFNSKGRldl9w cml2KSkKPiArCWlmICghSEFTX1BTUihkZXZfcHJpdikpCj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4g IAo+IC0JKnZhbCA9IFJFQURfT05DRShkZXZfcHJpdi0+cHNyLmRlYnVnKTsKPiAtCXJldHVybiAw Owo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsKPiArCQlz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsK PiArCQlpZiAoIUNBTl9QU1IoaW50ZWxfZHApKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLy8g VE9ETzogc3BsaXQgdG8gZWFjaCB0cmFuc2NvZGVyJ3MgUFNSIGRlYnVnIHN0YXRlCj4gKwkJaWYg KGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ICsJCQkqdmFsID0gUkVBRF9P TkNFKGludGVsX2RwLT5wc3IuZGVidWcpOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIC1FTk9ERVY7Cj4gIH0KPiAgCj4gIERFRklORV9TSU1QTEVfQVRUUklCVVRF KGk5MTVfZWRwX3Bzcl9kZWJ1Z19mb3BzLAo+IEBAIC0xMjM0LDkgKzEyNzgsNiBAQCBzdGF0aWMg dm9pZCBkcnJzX3N0YXR1c19wZXJfY3J0YyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4gIAkJLyogZGlz YWJsZV9kcnJzKCkgd2lsbCBtYWtlIGRycnMtPmRwIE5VTEwgKi8KPiAgCQlpZiAoIWRycnMtPmRw KSB7Cj4gIAkJCXNlcV9wdXRzKG0sICJJZGxlbmVzcyBEUlJTOiBEaXNhYmxlZFxuIik7Cj4gLQkJ CWlmIChkZXZfcHJpdi0+cHNyLmVuYWJsZWQpCj4gLQkJCQlzZXFfcHV0cyhtLAo+IC0JCQkJIlx0 QXMgUFNSIGlzIGVuYWJsZWQsIERSUlMgaXMgbm90IGVuYWJsZWRcbiIpOwo+ICAJCQltdXRleF91 bmxvY2soJmRycnMtPm11dGV4KTsKPiAgCQkJcmV0dXJuOwo+ICAJCX0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+IGluZGV4IDVi YzViZmJjNDU1MS4uOTg5OWZkZGY0Yzk5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiBAQCAtMTMzOSw2ICsxMzM5LDQy IEBAIHN0cnVjdCBpbnRlbF9kcF9jb21wbGlhbmNlIHsKPiAgCXU4IHRlc3RfbGFuZV9jb3VudDsK PiAgfTsKPiAgCj4gK3N0cnVjdCBpbnRlbF9wc3Igewo+ICsJLyogTXV0ZXggZm9yIFBTUiBzdGF0 ZSBvZiB0aGUgdHJhbnNjb2RlciAqLwo+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4gKwo+ICsjZGVm aW5lIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSwkweDBmCj4gKyNkZWZpbmUgSTkxNV9QU1JfREVC VUdfREVGQVVMVAkJMHgwMAo+ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0RJU0FCTEUJCTB4MDEK PiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19FTkFCTEUJCTB4MDIKPiArI2RlZmluZSBJOTE1X1BT Ul9ERUJVR19GT1JDRV9QU1IxCTB4MDMKPiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19JUlEJCTB4 MTAKPiArCj4gKwl1MzIgZGVidWc7Cj4gKwlib29sIHNpbmtfc3VwcG9ydDsKPiArCWJvb2wgZW5h YmxlZDsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJZW51bSB0cmFuc2NvZGVyIHRyYW5zY29kZXI7 Cj4gKwlib29sIGFjdGl2ZTsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+ICsJdW5zaWdu ZWQgaW50IGJ1c3lfZnJvbnRidWZmZXJfYml0czsKPiArCWJvb2wgc2lua19wc3IyX3N1cHBvcnQ7 Cj4gKwlib29sIGxpbmtfc3RhbmRieTsKPiArCWJvb2wgY29sb3JpbWV0cnlfc3VwcG9ydDsKPiAr CWJvb2wgcHNyMl9lbmFibGVkOwo+ICsJYm9vbCBwc3IyX3NlbF9mZXRjaF9lbmFibGVkOwo+ICsJ dTggc2lua19zeW5jX2xhdGVuY3k7Cj4gKwlrdGltZV90IGxhc3RfZW50cnlfYXR0ZW1wdDsKPiAr CWt0aW1lX3QgbGFzdF9leGl0Owo+ICsJYm9vbCBzaW5rX25vdF9yZWxpYWJsZTsKPiArCWJvb2wg aXJxX2F1eF9lcnJvcjsKPiArCXUxNiBzdV94X2dyYW51bGFyaXR5Owo+ICsJYm9vbCBkYzNjb19l bmFibGVkOwo+ICsJdTMyIGRjM2NvX2V4aXRfZGVsYXk7Cj4gKwlzdHJ1Y3QgZGVsYXllZF93b3Jr IGRjM2NvX3dvcms7Cj4gKwlzdHJ1Y3QgZHJtX2RwX3ZzY19zZHAgdnNjOwo+ICt9Owo+ICsKPiAg c3RydWN0IGludGVsX2RwIHsKPiAgCWk5MTVfcmVnX3Qgb3V0cHV0X3JlZzsKPiAgCXUzMiBEUDsK PiBAQCAtMTQ2MCw2ICsxNDk2LDggQEAgc3RydWN0IGludGVsX2RwIHsKPiAgCj4gIAlib29sIGhv YmxfZmFpbGVkOwo+ICAJYm9vbCBob2JsX2FjdGl2ZTsKPiArCj4gKwlzdHJ1Y3QgaW50ZWxfcHNy IHBzcjsKPiAgfTsKPiAgCj4gIGVudW0gbHNwY29uX3ZlbmRvciB7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+IGluZGV4IGIyYmMwYzhjMzljNy4uNTczMGNhZDdiNmFj IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYwo+IEBAIC0yNzAy LDEyICsyNzAyLDEwIEBAIHZvaWQgaW50ZWxfZHBfY29tcHV0ZV9wc3JfdnNjX3NkcChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLAo+ICAJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSwKPiAgCQkJCSAgc3RydWN0IGRybV9kcF92c2Nfc2RwICp2c2MpCj4g IHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOwo+IC0KPiAgCXZzYy0+c2RwX3R5cGUgPSBEUF9TRFBfVlNDOwo+ICAKPiAtCWlmIChk ZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+IC0JCWlmIChkZXZfcHJpdi0+cHNyLmNvbG9y aW1ldHJ5X3N1cHBvcnQgJiYKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ ICsJCWlmIChpbnRlbF9kcC0+cHNyLmNvbG9yaW1ldHJ5X3N1cHBvcnQgJiYKPiAgCQkgICAgaW50 ZWxfZHBfbmVlZHNfdnNjX3NkcChjcnRjX3N0YXRlLCBjb25uX3N0YXRlKSkgewo+ICAJCQkvKiBb UFNSMiwgK0NvbG9yaW1ldHJ5XSAqLwo+ICAJCQlpbnRlbF9kcF9jb21wdXRlX3ZzY19jb2xvcmlt ZXRyeShjcnRjX3N0YXRlLCBjb25uX3N0YXRlLAo+IEBAIC0zODQ0LDcgKzM4NDIsNyBAQCBib29s IGludGVsX2RwX2luaXRpYWxfZmFzdHNldF9jaGVjayhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+IC0JaWYgKENBTl9QU1IoaTkxNSkg JiYgaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkgewo+ICsJaWYgKENBTl9QU1IoaW50ZWxfZHAp ICYmIGludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpIHsKPiAgCQlkcm1fZGJnX2ttcygmaTkxNS0+ ZHJtLCAiRm9yY2luZyBmdWxsIG1vZGVzZXQgdG8gY29tcHV0ZSBQU1Igc3RhdGVcbiIpOwo+ICAJ CWNydGNfc3RhdGUtPnVhcGkubW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiAgCQlyZXR1cm4gZmFsc2U7 Cj4gQEAgLTgwNzAsNiArODA2OCwxNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kcF9tb2Rlc2V0X3Jl dHJ5X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJZHJtX2ttc19oZWxwZXJf aG90cGx1Z19ldmVudChjb25uZWN0b3ItPmRldik7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIGlu dGVsX2RwX3VwZGF0ZV9waXBlKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJ CQkJIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJIGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsJCQkJIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsKPiArCWludGVsX3BhbmVsX3VwZGF0 ZV9iYWNrbGlnaHQoc3RhdGUsIGVuY29kZXIsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICsJ aW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtfY3RsKGludGVsX2RwLCBjcnRjX3N0YXRl KTsKPiArfQo+ICsKPiAgYm9vbAo+ICBpbnRlbF9kcF9pbml0X2Nvbm5lY3RvcihzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwKPiAgCQkJc3RydWN0IGludGVsX2Nvbm5lY3RvciAq aW50ZWxfY29ubmVjdG9yKQo+IEBAIC04MTg0LDYgKzgxOTMsOCBAQCBpbnRlbF9kcF9pbml0X2Nv bm5lY3RvcihzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwKPiAgCQkJICAgICAg ICh0ZW1wICYgfjB4ZikgfCAweGQpOwo+ICAJfQo+ICAKPiArCWludGVsX3Bzcl9pbml0KGludGVs X2RwKTsKPiArCj4gIAlyZXR1cm4gdHJ1ZTsKPiAgCj4gIGZhaWw6Cj4gQEAgLTgyMjUsNyArODIz Niw3IEBAIGJvb2wgaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gIAlpbnRlbF9lbmNvZGVyLT5nZXRfY29uZmlnID0gaW50ZWxfZHBfZ2V0X2NvbmZpZzsK PiAgCWludGVsX2VuY29kZXItPnN5bmNfc3RhdGUgPSBpbnRlbF9kcF9zeW5jX3N0YXRlOwo+ICAJ aW50ZWxfZW5jb2Rlci0+aW5pdGlhbF9mYXN0c2V0X2NoZWNrID0gaW50ZWxfZHBfaW5pdGlhbF9m YXN0c2V0X2NoZWNrOwo+IC0JaW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBpbnRlbF9wYW5l bF91cGRhdGVfYmFja2xpZ2h0Owo+ICsJaW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBpbnRl bF9kcF91cGRhdGVfcGlwZTsKPiAgCWludGVsX2VuY29kZXItPnN1c3BlbmQgPSBpbnRlbF9kcF9l bmNvZGVyX3N1c3BlbmQ7Cj4gIAlpbnRlbF9lbmNvZGVyLT5zaHV0ZG93biA9IGludGVsX2RwX2Vu Y29kZXJfc2h1dGRvd247Cj4gIAlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMKPiBpbmRleCBkOWEzOTVjNDg2ZDMu LmJlMmIxMjMwNTBjOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX3Bzci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9w c3IuYwo+IEBAIC03OSwxMSArNzksMTMgQEAKPiAgICogdXNlIHBhZ2UgZmxpcHMuCj4gICAqLwo+ ICAKPiAtc3RhdGljIGJvb2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+ICtzdGF0aWMgYm9vbCBwc3JfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAgewo+IC0Jc3dpdGNoIChpOTE1LT5wc3IuZGVidWcgJiBJOTE1X1BT Ul9ERUJVR19NT0RFX01BU0spIHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCXN3aXRjaCAoaW50ZWxfZHAtPnBzci5k ZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSykgewo+ICAJY2FzZSBJOTE1X1BTUl9ERUJV R19ERUZBVUxUOgo+IC0JCXJldHVybiBpOTE1LT5wYXJhbXMuZW5hYmxlX3BzcjsKPiArCQlyZXR1 cm4gZGV2X3ByaXYtPnBhcmFtcy5lbmFibGVfcHNyOwo+ICAJY2FzZSBJOTE1X1BTUl9ERUJVR19E SVNBQkxFOgo+ICAJCXJldHVybiBmYWxzZTsKPiAgCWRlZmF1bHQ6Cj4gQEAgLTkxLDkgKzkzLDkg QEAgc3RhdGljIGJvb2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgYm9vbCBwc3IyX2dsb2JhbF9lbmFibGVk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIGJvb2wgcHNyMl9n bG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzd2l0Y2gg KGRldl9wcml2LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHsKPiArCXN3 aXRjaCAoaW50ZWxfZHAtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSykgewo+ ICAJY2FzZSBJOTE1X1BTUl9ERUJVR19ESVNBQkxFOgo+ICAJY2FzZSBJOTE1X1BTUl9ERUJVR19G T1JDRV9QU1IxOgo+ICAJCXJldHVybiBmYWxzZTsKPiBAQCAtMTAyLDExICsxMDQsMTIgQEAgc3Rh dGljIGJvb2wgcHNyMl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHBzcl9pcnFfY29udHJvbChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIHBzcl9pcnFfY29u dHJvbChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAllbnVtIHRyYW5zY29kZXIg dHJhbnNfc2hpZnQ7Cj4gIAl1MzIgbWFzaywgdmFsOwo+ICAJaTkxNV9yZWdfdCBpbXJfcmVnOwo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9k cCk7Cj4gIAo+ICAJLyoKPiAgCSAqIGdlbjEyKyBoYXMgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIHRy YW5zY29kZXIgYW5kIG9uZSBwZXIgdHJhbnNjb2Rlcgo+IEBAIC0xMTUsMTQgKzExOCwxNCBAQCBz dGF0aWMgdm9pZCBwc3JfaXJxX2NvbnRyb2woc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICAJICovCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewo+ICAJCXRy YW5zX3NoaWZ0ID0gMDsKPiAtCQlpbXJfcmVnID0gVFJBTlNfUFNSX0lNUihkZXZfcHJpdi0+cHNy LnRyYW5zY29kZXIpOwo+ICsJCWltcl9yZWcgPSBUUkFOU19QU1JfSU1SKGludGVsX2RwLT5wc3Iu dHJhbnNjb2Rlcik7Cj4gIAl9IGVsc2Ugewo+IC0JCXRyYW5zX3NoaWZ0ID0gZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyOwo+ICsJCXRyYW5zX3NoaWZ0ID0gaW50ZWxfZHAtPnBzci50cmFuc2NvZGVy Owo+ICAJCWltcl9yZWcgPSBFRFBfUFNSX0lNUjsKPiAgCX0KPiAgCj4gIAltYXNrID0gRURQX1BT Ul9FUlJPUih0cmFuc19zaGlmdCk7Cj4gLQlpZiAoZGV2X3ByaXYtPnBzci5kZWJ1ZyAmIEk5MTVf UFNSX0RFQlVHX0lSUSkKPiArCWlmIChpbnRlbF9kcC0+cHNyLmRlYnVnICYgSTkxNV9QU1JfREVC VUdfSVJRKQo+ICAJCW1hc2sgfD0gRURQX1BTUl9QT1NUX0VYSVQodHJhbnNfc2hpZnQpIHwKPiAg CQkJRURQX1BTUl9QUkVfRU5UUlkodHJhbnNfc2hpZnQpOwo+ICAKPiBAQCAtMTcxLDM4ICsxNzQs MzcgQEAgc3RhdGljIHZvaWQgcHNyX2V2ZW50X3ByaW50KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAo+ICAJCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJcdFBTUiBkaXNhYmxlZFxuIik7 Cj4gIH0KPiAgCj4gLXZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgdTMyIHBzcl9paXIpCj4gK3ZvaWQgaW50ZWxfcHNyX2lycV9oYW5k bGVyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHUzMiBwc3JfaWlyKQo+ICB7Cj4gLQllbnVt IHRyYW5zY29kZXIgY3B1X3RyYW5zY29kZXIgPSBkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXI7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2Rw KTsKPiArCWVudW0gdHJhbnNjb2RlciBjcHVfdHJhbnNjb2RlciA9IGludGVsX2RwLT5wc3IudHJh bnNjb2RlcjsKPiAgCWVudW0gdHJhbnNjb2RlciB0cmFuc19zaGlmdDsKPiAgCWk5MTVfcmVnX3Qg aW1yX3JlZzsKPiAgCWt0aW1lX3QgdGltZV9ucyA9ICBrdGltZV9nZXQoKTsKPiAgCj4gIAlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewo+ICAJCXRyYW5zX3NoaWZ0ID0gMDsKPiAtCQlp bXJfcmVnID0gVFJBTlNfUFNSX0lNUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJCWlt cl9yZWcgPSBUUkFOU19QU1JfSU1SKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlcik7Cj4gIAl9IGVs c2Ugewo+IC0JCXRyYW5zX3NoaWZ0ID0gZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyOwo+ICsJCXRy YW5zX3NoaWZ0ID0gaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyOwo+ICAJCWltcl9yZWcgPSBFRFBf UFNSX0lNUjsKPiAgCX0KPiAgCj4gIAlpZiAocHNyX2lpciAmIEVEUF9QU1JfUFJFX0VOVFJZKHRy YW5zX3NoaWZ0KSkgewo+IC0JCWRldl9wcml2LT5wc3IubGFzdF9lbnRyeV9hdHRlbXB0ID0gdGlt ZV9uczsKPiAtCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJICAgICJbdHJhbnNj b2RlciAlc10gUFNSIGVudHJ5IGF0dGVtcHQgaW4gMiB2YmxhbmtzXG4iLAo+IC0JCQkgICAgdHJh bnNjb2Rlcl9uYW1lKGNwdV90cmFuc2NvZGVyKSk7Cj4gKwkJaW50ZWxfZHAtPnBzci5sYXN0X2Vu dHJ5X2F0dGVtcHQgPSB0aW1lX25zOwo+ICsJCURSTV9ERUJVR19LTVMoIlt0cmFuc2NvZGVyICVz XSBQU1IgZW50cnkgYXR0ZW1wdCBpbiAyIHZibGFua3NcbiIsCj4gKwkJCSAgICAgIHRyYW5zY29k ZXJfbmFtZShjcHVfdHJhbnNjb2RlcikpOwo+ICAJfQo+ICAKPiAgCWlmIChwc3JfaWlyICYgRURQ X1BTUl9QT1NUX0VYSVQodHJhbnNfc2hpZnQpKSB7Cj4gLQkJZGV2X3ByaXYtPnBzci5sYXN0X2V4 aXQgPSB0aW1lX25zOwo+IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgICAg Ilt0cmFuc2NvZGVyICVzXSBQU1IgZXhpdCBjb21wbGV0ZWRcbiIsCj4gLQkJCSAgICB0cmFuc2Nv ZGVyX25hbWUoY3B1X3RyYW5zY29kZXIpKTsKPiArCQlpbnRlbF9kcC0+cHNyLmxhc3RfZXhpdCA9 IHRpbWVfbnM7Cj4gKwkJRFJNX0RFQlVHX0tNUygiW3RyYW5zY29kZXIgJXNdIFBTUiBleGl0IGNv bXBsZXRlZFxuIiwKPiArCQkJICAgICAgdHJhbnNjb2Rlcl9uYW1lKGNwdV90cmFuc2NvZGVyKSk7 Cj4gIAo+ICAJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKPiAgCQkJdTMyIHZhbCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gIAkJCQkJCVBTUl9FVkVOVChjcHVfdHJhbnNjb2Rl cikpOwo+IC0JCQlib29sIHBzcjJfZW5hYmxlZCA9IGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVk Owo+ICsJCQlib29sIHBzcjJfZW5hYmxlZCA9IGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkOwo+ ICAKPiAgCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFBTUl9FVkVOVChjcHVfdHJhbnNjb2Rl ciksCj4gIAkJCQkgICAgICAgdmFsKTsKPiBAQCAtMjEzLDEwICsyMTUsMTAgQEAgdm9pZCBpbnRl bF9wc3JfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIg cHNyX2lpcikKPiAgCWlmIChwc3JfaWlyICYgRURQX1BTUl9FUlJPUih0cmFuc19zaGlmdCkpIHsK PiAgCQl1MzIgdmFsOwo+ICAKPiAtCQlkcm1fd2FybigmZGV2X3ByaXYtPmRybSwgIlt0cmFuc2Nv ZGVyICVzXSBQU1IgYXV4IGVycm9yXG4iLAo+ICsJCURSTV9XQVJOKCJbdHJhbnNjb2RlciAlc10g UFNSIGF1eCBlcnJvclxuIiwKPiAgCQkJIHRyYW5zY29kZXJfbmFtZShjcHVfdHJhbnNjb2Rlcikp Owo+ICAKPiAtCQlkZXZfcHJpdi0+cHNyLmlycV9hdXhfZXJyb3IgPSB0cnVlOwo+ICsJCWludGVs X2RwLT5wc3IuaXJxX2F1eF9lcnJvciA9IHRydWU7Cj4gIAo+ICAJCS8qCj4gIAkJICogSWYgdGhp cyBpbnRlcnJ1cHRpb24gaXMgbm90IG1hc2tlZCBpdCB3aWxsIGtlZXAKPiBAQCAtMjMwLDcgKzIz Miw3IEBAIHZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgdTMyIHBzcl9paXIpCj4gIAkJdmFsIHw9IEVEUF9QU1JfRVJST1IodHJhbnNf c2hpZnQpOwo+ICAJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbXJfcmVnLCB2YWwpOwo+ICAK PiAtCQlzY2hlZHVsZV93b3JrKCZkZXZfcHJpdi0+cHNyLndvcmspOwo+ICsJCXNjaGVkdWxlX3dv cmsoJmludGVsX2RwLT5wc3Iud29yayk7Cj4gIAl9Cj4gIH0KPiAgCj4gQEAgLTI5MSwxMiArMjkz LDYgQEAgdm9pZCBpbnRlbF9wc3JfaW5pdF9kcGNkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ICAJCXRvX2k5MTUoZHBf dG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2UuZGV2KTsKPiAgCj4gLQlpZiAoZGV2X3By aXYtPnBzci5kcCkgewo+IC0JCWRybV93YXJuKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkgIk1vcmUg dGhhbiBvbmUgZURQIHBhbmVsIGZvdW5kLCBQU1Igc3VwcG9ydCBzaG91bGQgYmUgZXh0ZW5kZWRc biIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gIAlkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9k cC0+YXV4LCBEUF9QU1JfU1VQUE9SVCwgaW50ZWxfZHAtPnBzcl9kcGNkLAo+ICAJCQkgc2l6ZW9m KGludGVsX2RwLT5wc3JfZHBjZCkpOwo+ICAKPiBAQCAtMzE3LDEyICszMTMsMTAgQEAgdm9pZCBp bnRlbF9wc3JfaW5pdF9kcGNkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkJcmV0dXJu Owo+ICAJfQo+ICAKPiAtCWRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0ID0gdHJ1ZTsKPiAtCWRl dl9wcml2LT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgPQo+ICsJaW50ZWxfZHAtPnBzci5zaW5rX3N1 cHBvcnQgPSB0cnVlOwo+ICsJaW50ZWxfZHAtPnBzci5zaW5rX3N5bmNfbGF0ZW5jeSA9Cj4gIAkJ aW50ZWxfZHBfZ2V0X3Npbmtfc3luY19sYXRlbmN5KGludGVsX2RwKTsKPiAgCj4gLQlkZXZfcHJp di0+cHNyLmRwID0gaW50ZWxfZHA7Cj4gLQo+ICAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSAmJgo+ICAJICAgIChpbnRlbF9kcC0+cHNyX2RwY2RbMF0gPT0gRFBfUFNSMl9XSVRIX1lfQ09P UkRfSVNfU1VQUE9SVEVEKSkgewo+ICAJCWJvb2wgeV9yZXEgPSBpbnRlbF9kcC0+cHNyX2RwY2Rb MV0gJgo+IEBAIC0zNDAsMTQgKzMzNCwxNCBAQCB2b2lkIGludGVsX3Bzcl9pbml0X2RwY2Qoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCQkgKiBZLWNvb3JkaW5hdGUgcmVxdWlyZW1lbnQg cGFuZWxzIHdlIHdvdWxkIG5lZWQgdG8gZW5hYmxlCj4gIAkJICogR1RDIGZpcnN0Lgo+ICAJCSAq Lwo+IC0JCWRldl9wcml2LT5wc3Iuc2lua19wc3IyX3N1cHBvcnQgPSB5X3JlcSAmJiBhbHBtOwo+ ICsJCWludGVsX2RwLT5wc3Iuc2lua19wc3IyX3N1cHBvcnQgPSB5X3JlcSAmJiBhbHBtOwo+ICAJ CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiUFNSMiAlc3N1cHBvcnRlZFxuIiwKPiAtCQkJ ICAgIGRldl9wcml2LT5wc3Iuc2lua19wc3IyX3N1cHBvcnQgPyAiIiA6ICJub3QgIik7Cj4gKwkJ CSAgICBpbnRlbF9kcC0+cHNyLnNpbmtfcHNyMl9zdXBwb3J0ID8gIiIgOiAibm90ICIpOwo+ICAK PiAtCQlpZiAoZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkgewo+IC0JCQlkZXZfcHJp di0+cHNyLmNvbG9yaW1ldHJ5X3N1cHBvcnQgPQo+ICsJCWlmIChpbnRlbF9kcC0+cHNyLnNpbmtf cHNyMl9zdXBwb3J0KSB7Cj4gKwkJCWludGVsX2RwLT5wc3IuY29sb3JpbWV0cnlfc3VwcG9ydCA9 Cj4gIAkJCQlpbnRlbF9kcF9nZXRfY29sb3JpbWV0cnlfc3RhdHVzKGludGVsX2RwKTsKPiAtCQkJ ZGV2X3ByaXYtPnBzci5zdV94X2dyYW51bGFyaXR5ID0KPiArCQkJaW50ZWxfZHAtPnBzci5zdV94 X2dyYW51bGFyaXR5ID0KPiAgCQkJCWludGVsX2RwX2dldF9zdV94X2dyYW51bGFydGl5KGludGVs X2RwKTsKPiAgCQl9Cj4gIAl9Cj4gQEAgLTM3Myw3ICszNjcsNyBAQCBzdGF0aWMgdm9pZCBoc3df cHNyX3NldHVwX2F1eChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJQlVJTERfQlVHX09O KHNpemVvZihhdXhfbXNnKSA+IDIwKTsKPiAgCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYXV4X21z Zyk7IGkgKz0gNCkKPiAgCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwKPiAtCQkJICAgICAgIEVE UF9QU1JfQVVYX0RBVEEoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyLCBpID4+IDIpLAo+ICsJCQkg ICAgICAgRURQX1BTUl9BVVhfREFUQShpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIsIGkgPj4gMiks Cj4gIAkJCSAgICAgICBpbnRlbF9kcF9wYWNrX2F1eCgmYXV4X21zZ1tpXSwgc2l6ZW9mKGF1eF9t c2cpIC0gaSkpOwo+ICAKPiAgCWF1eF9jbG9ja19kaXZpZGVyID0gaW50ZWxfZHAtPmdldF9hdXhf Y2xvY2tfZGl2aWRlcihpbnRlbF9kcCwgMCk7Cj4gQEAgLTM4NCw3ICszNzgsNyBAQCBzdGF0aWMg dm9pZCBoc3dfcHNyX3NldHVwX2F1eChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAKPiAg CS8qIFNlbGVjdCBvbmx5IHZhbGlkIGJpdHMgZm9yIFNSRF9BVVhfQ1RMICovCj4gIAlhdXhfY3Rs ICY9IHBzcl9hdXhfbWFzazsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0FV WF9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwKPiArCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCBFRFBfUFNSX0FVWF9DVEwoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwKPiAgCQkgICAg ICAgYXV4X2N0bCk7Cj4gIH0KPiAgCj4gQEAgLTM5NCwxNCArMzg4LDE0IEBAIHN0YXRpYyB2b2lk IGludGVsX3Bzcl9lbmFibGVfc2luayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJdTgg ZHBjZF92YWwgPSBEUF9QU1JfRU5BQkxFOwo+ICAKPiAgCS8qIEVuYWJsZSBBTFBNIGF0IHNpbmsg Zm9yIHBzcjIgKi8KPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ICsJaWYg KGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gIAkJZHJtX2RwX2RwY2Rfd3JpdGViKCZp bnRlbF9kcC0+YXV4LCBEUF9SRUNFSVZFUl9BTFBNX0NPTkZJRywKPiAgCQkJCSAgIERQX0FMUE1f RU5BQkxFIHwKPiAgCQkJCSAgIERQX0FMUE1fTE9DS19FUlJPUl9JUlFfSFBEX0VOQUJMRSk7Cj4g IAo+ICAJCWRwY2RfdmFsIHw9IERQX1BTUl9FTkFCTEVfUFNSMiB8IERQX1BTUl9JUlFfSFBEX1dJ VEhfQ1JDX0VSUk9SUzsKPiAgCX0gZWxzZSB7Cj4gLQkJaWYgKGRldl9wcml2LT5wc3IubGlua19z dGFuZGJ5KQo+ICsJCWlmIChpbnRlbF9kcC0+cHNyLmxpbmtfc3RhbmRieSkKPiAgCQkJZHBjZF92 YWwgfD0gRFBfUFNSX01BSU5fTElOS19BQ1RJVkU7Cj4gIAo+ICAJCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDgpCj4gQEAgLTQ2NCw3ICs0NTgsNyBAQCBzdGF0aWMgdTggcHNyX2NvbXB1dGVf aWRsZV9mcmFtZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCSAqIG9mZi1ieS1vbmUg aXNzdWUgdGhhdCBIVyBoYXMgaW4gc29tZSBjYXNlcy4KPiAgCSAqLwo+ICAJaWRsZV9mcmFtZXMg PSBtYXgoNiwgZGV2X3ByaXYtPnZidC5wc3IuaWRsZV9mcmFtZXMpOwo+IC0JaWRsZV9mcmFtZXMg PSBtYXgoaWRsZV9mcmFtZXMsIGRldl9wcml2LT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgKyAxKTsK PiArCWlkbGVfZnJhbWVzID0gbWF4KGlkbGVfZnJhbWVzLCBpbnRlbF9kcC0+cHNyLnNpbmtfc3lu Y19sYXRlbmN5ICsgMSk7Cj4gIAo+ICAJaWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBp ZGxlX2ZyYW1lcyA+IDB4ZikpCj4gIAkJaWRsZV9mcmFtZXMgPSAweGY7Cj4gQEAgLTQ4NCw3ICs0 NzgsNyBAQCBzdGF0aWMgdm9pZCBoc3dfYWN0aXZhdGVfcHNyMShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQo+ICAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+ICAJCXZhbCB8PSBFRFBfUFNS X01JTl9MSU5LX0VOVFJZX1RJTUVfOF9MSU5FUzsKPiAgCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5s aW5rX3N0YW5kYnkpCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5saW5rX3N0YW5kYnkpCj4gIAkJdmFs IHw9IEVEUF9QU1JfTElOS19TVEFOREJZOwo+ICAKPiAgCXZhbCB8PSBpbnRlbF9wc3IxX2dldF90 cF90aW1lKGludGVsX2RwKTsKPiBAQCAtNDkyLDkgKzQ4Niw5IEBAIHN0YXRpYyB2b2lkIGhzd19h Y3RpdmF0ZV9wc3IxKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA4KQo+ICAJCXZhbCB8PSBFRFBfUFNSX0NSQ19FTkFCTEU7Cj4gIAo+IC0J dmFsIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNy LnRyYW5zY29kZXIpKSAmCj4gKwl2YWwgfD0gKGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVEUF9Q U1JfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlcikpICYKPiAgCQlFRFBfUFNSX1JFU1RPUkVf UFNSX0FDVElWRV9DVFhfTUFTSyk7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BT Ul9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwgdmFsKTsKPiArCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgdTMyIGludGVsX3BzcjJfZ2V0X3RwX3RpbWUoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiBAQCAtNTI5LDcgKzUyMyw3IEBAIHN0YXRpYyB2b2lkIGhzd19hY3Rp dmF0ZV9wc3IyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSAxMCB8fCBJU19HRU1JTklMQUtFKGRldl9wcml2KSkKPiAgCQl2YWwgfD0gRURQ X1lfQ09PUkRJTkFURV9FTkFCTEU7Cj4gIAo+IC0JdmFsIHw9IEVEUF9QU1IyX0ZSQU1FX0JFRk9S RV9TVShkZXZfcHJpdi0+cHNyLnNpbmtfc3luY19sYXRlbmN5ICsgMSk7Cj4gKwl2YWwgfD0gRURQ X1BTUjJfRlJBTUVfQkVGT1JFX1NVKGludGVsX2RwLT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgKyAx KTsKPiAgCXZhbCB8PSBpbnRlbF9wc3IyX2dldF90cF90aW1lKGludGVsX2RwKTsKPiAgCj4gIAlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgewo+IEBAIC01NDgsNyArNTQyLDcgQEAgc3Rh dGljIHZvaWQgaHN3X2FjdGl2YXRlX3BzcjIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAg CQl2YWwgfD0gRURQX1BTUjJfRkFTVF9XQUtFKDcpOwo+ICAJfQo+ICAKPiAtCWlmIChkZXZfcHJp di0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQpIHsKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBz cjJfc2VsX2ZldGNoX2VuYWJsZWQpIHsKPiAgCQkvKiBXQSAxNDA4MzMwODQ3ICovCj4gIAkJaWYg KElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xfUkVWSURfQTAsIFRHTF9SRVZJRF9BMCkg fHwKPiAgCQkgICAgSVNfUktMX1JFVklEKGRldl9wcml2LCBSS0xfUkVWSURfQTAsIFJLTF9SRVZJ RF9BMCkpCj4gQEAgLTU1NywyMCArNTUxLDIwIEBAIHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9w c3IyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkJCQkgICAgIERJU19SQU1fQllQQVNT X1BTUjJfTUFOX1RSQUNLKTsKPiAgCj4gIAkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsCj4gLQkJ CSAgICAgICBQU1IyX01BTl9UUktfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksCj4gKwkJ CSAgICAgICBQU1IyX01BTl9UUktfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksCj4gIAkJ CSAgICAgICBQU1IyX01BTl9UUktfQ1RMX0VOQUJMRSk7Cj4gIAl9IGVsc2UgaWYgKEhBU19QU1Iy X1NFTF9GRVRDSChkZXZfcHJpdikpIHsKPiAgCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwKPiAt CQkJICAgICAgIFBTUjJfTUFOX1RSS19DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwgMCk7 Cj4gKwkJCSAgICAgICBQU1IyX01BTl9UUktfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlciks IDApOwo+ICAJfQo+ICAKPiAgCS8qCj4gIAkgKiBQU1IyIEhXIGlzIGluY29ycmVjdGx5IHVzaW5n IEVEUF9QU1JfVFAxX1RQM19TRUwgYW5kIEJTcGVjIGlzCj4gIAkgKiByZWNvbW1lbmRpbmcga2Vl cCB0aGlzIGJpdCB1bnNldCB3aGlsZSBQU1IyIGlzIGVuYWJsZWQuCj4gIAkgKi8KPiAtCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIp LCAwKTsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9kcC0+ cHNyLnRyYW5zY29kZXIpLCAwKTsKPiAgCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQ X1BTUjJfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4gKwlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZh bCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBib29sCj4gQEAgLTU5Myw1NSArNTg3LDU4IEBAIHN0YXRp YyB1MzIgaW50ZWxfZ2V0X2ZyYW1lX3RpbWVfdXMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSkKPiAgCQkJICAgIGRybV9tb2RlX3ZyZWZyZXNoKCZjc3RhdGUtPmh3LmFkanVz dGVkX21vZGUpKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgcHNyMl9wcm9ncmFtX2lkbGVfZnJh bWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArc3RhdGljIHZvaWQgcHNy Ml9wcm9ncmFtX2lkbGVfZnJhbWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkJCQkg ICAgIHUzMiBpZGxlX2ZyYW1lcykKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4gIAl1MzIgdmFsOwo+ICAKPiAgCWlkbGVf ZnJhbWVzIDw8PSAgRURQX1BTUjJfSURMRV9GUkFNRV9TSElGVDsKPiAtCXZhbCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsK PiArCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+ cHNyLnRyYW5zY29kZXIpKTsKPiAgCXZhbCAmPSB+RURQX1BTUjJfSURMRV9GUkFNRV9NQVNLOwo+ ICAJdmFsIHw9IGlkbGVfZnJhbWVzOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9Q U1IyX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ICsJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLCB2YWwp Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCB0Z2xfcHNyMl9lbmFibGVfZGMzY28oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCB0Z2xfcHNyMl9lbmFibGVf ZGMzY28oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+IC0JcHNyMl9wcm9ncmFtX2lk bGVfZnJhbWVzKGRldl9wcml2LCAwKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICsKPiArCXBzcjJfcHJvZ3JhbV9pZGxlX2Zy YW1lcyhpbnRlbF9kcCwgMCk7Cj4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX3NldF90YXJnZXRfZGNf c3RhdGUoZGV2X3ByaXYsIERDX1NUQVRFX0VOX0RDM0NPKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZv aWQgdGdsX3BzcjJfZGlzYWJsZV9kYzNjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3N0YXRpYyB2b2lkIHRnbF9wc3IyX2Rpc2FibGVfZGMzY28oc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKPiAgewo+IC0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGRldl9wcml2 LT5wc3IuZHA7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKPiAgCj4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX3NldF90YXJnZXRfZGNf c3RhdGUoZGV2X3ByaXYsIERDX1NUQVRFX0VOX1VQVE9fREM2KTsKPiAtCXBzcjJfcHJvZ3JhbV9p ZGxlX2ZyYW1lcyhkZXZfcHJpdiwgcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoaW50ZWxfZHApKTsK PiArCXBzcjJfcHJvZ3JhbV9pZGxlX2ZyYW1lcyhpbnRlbF9kcCwgcHNyX2NvbXB1dGVfaWRsZV9m cmFtZXMoaW50ZWxfZHApKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgdGdsX2RjM2NvX2Rpc2Fi bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gLQkJY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqZGV2 X3ByaXYpLCBwc3IuZGMzY29fd29yay53b3JrKTsKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPQo+ICsJCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmludGVsX2RwKSwgcHNyLmRjM2Nv X3dvcmsud29yayk7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAr CW11dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIAkvKiBJZiBkZWxheWVkIHdvcmsg aXMgcGVuZGluZywgaXQgaXMgbm90IGlkbGUgKi8KPiAtCWlmIChkZWxheWVkX3dvcmtfcGVuZGlu ZygmZGV2X3ByaXYtPnBzci5kYzNjb193b3JrKSkKPiArCWlmIChkZWxheWVkX3dvcmtfcGVuZGlu ZygmaW50ZWxfZHAtPnBzci5kYzNjb193b3JrKSkKPiAgCQlnb3RvIHVubG9jazsKPiAgCj4gLQl0 Z2xfcHNyMl9kaXNhYmxlX2RjM2NvKGRldl9wcml2KTsKPiArCXRnbF9wc3IyX2Rpc2FibGVfZGMz Y28oaW50ZWxfZHApOwo+ICB1bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3Iu bG9jayk7Cj4gKwltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIH0KPiAgCj4g LXN0YXRpYyB2b2lkIHRnbF9kaXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCB0Z2xfZGlzYWxsb3dfZGMzY29f b25fcHNyMl9leGl0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsKPiAtCWlmICghZGV2 X3ByaXYtPnBzci5kYzNjb19lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmRjM2NvX2Vu YWJsZWQpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRldl9wcml2 LT5wc3IuZGMzY29fd29yayk7Cj4gKwljYW5jZWxfZGVsYXllZF93b3JrKCZpbnRlbF9kcC0+cHNy LmRjM2NvX3dvcmspOwo+ICAJLyogQmVmb3JlIFBTUjIgZXhpdCBkaXNhbGxvdyBkYzNjbyovCj4g LQl0Z2xfcHNyMl9kaXNhYmxlX2RjM2NvKGRldl9wcml2KTsKPiArCXRnbF9wc3IyX2Rpc2FibGVf ZGMzY28oaW50ZWxfZHApOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+IEBAIC03MTQsNyArNzEx LDcgQEAgc3RhdGljIGJvb2wgaW50ZWxfcHNyMl9jb25maWdfdmFsaWQoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwKPiAgCWludCBjcnRjX3ZkaXNwbGF5ID0gY3J0Y19zdGF0ZS0+aHcuYWRqdXN0 ZWRfbW9kZS5jcnRjX3ZkaXNwbGF5Owo+ICAJaW50IHBzcl9tYXhfaCA9IDAsIHBzcl9tYXhfdiA9 IDAsIG1heF9icHAgPSAwOwo+ICAKPiAtCWlmICghZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3Vw cG9ydCkKPiArCWlmICghaW50ZWxfZHAtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkKPiAgCQlyZXR1 cm4gZmFsc2U7Cj4gIAo+ICAJaWYgKCF0cmFuc2NvZGVyX2hhc19wc3IyKGRldl9wcml2LCBjcnRj X3N0YXRlLT5jcHVfdHJhbnNjb2RlcikpIHsKPiBAQCAtNzI0LDcgKzcyMSw3IEBAIHN0YXRpYyBi b29sIGludGVsX3BzcjJfY29uZmlnX3ZhbGlkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4g IAkJcmV0dXJuIGZhbHNlOwo+ICAJfQo+ICAKPiAtCWlmICghcHNyMl9nbG9iYWxfZW5hYmxlZChk ZXZfcHJpdikpIHsKPiArCWlmICghcHNyMl9nbG9iYWxfZW5hYmxlZChpbnRlbF9kcCkpIHsKPiAg CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlBTUjIgZGlzYWJsZWQgYnkgZmxhZ1xuIik7 Cj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAJfQo+IEBAIC03NzMsMTAgKzc3MCwxMCBAQCBzdGF0aWMg Ym9vbCBpbnRlbF9wc3IyX2NvbmZpZ192YWxpZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ ICAJICogb25seSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBTVSBibG9jayB3aWR0aCBpcyBhIG11bHRp cGxlIG9mCj4gIAkgKiB4IGdyYW51bGFyaXR5Lgo+ICAJICovCj4gLQlpZiAoY3J0Y19oZGlzcGxh eSAlIGRldl9wcml2LT5wc3Iuc3VfeF9ncmFudWxhcml0eSkgewo+ICsJaWYgKGNydGNfaGRpc3Bs YXkgJSBpbnRlbF9kcC0+cHNyLnN1X3hfZ3JhbnVsYXJpdHkpIHsKPiAgCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwKPiAgCQkJICAgICJQU1IyIG5vdCBlbmFibGVkLCBoZGlzcGxheSglZCkg bm90IG11bHRpcGxlIG9mICVkXG4iLAo+IC0JCQkgICAgY3J0Y19oZGlzcGxheSwgZGV2X3ByaXYt PnBzci5zdV94X2dyYW51bGFyaXR5KTsKPiArCQkJICAgIGNydGNfaGRpc3BsYXksIGludGVsX2Rw LT5wc3Iuc3VfeF9ncmFudWxhcml0eSk7Cj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAJfQo+ICAKPiBA QCAtODExLDEzICs4MDgsMTAgQEAgdm9pZCBpbnRlbF9wc3JfY29tcHV0ZV9jb25maWcoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQkmY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsK PiAgCWludCBwc3Jfc2V0dXBfdGltZTsKPiAgCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQo+ IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoaW50ZWxfZHAgIT0gZGV2X3ByaXYtPnBzci5kcCkKPiAr CWlmICghQ0FOX1BTUihpbnRlbF9kcCkpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmICghcHNyX2ds b2JhbF9lbmFibGVkKGRldl9wcml2KSkgewo+ICsJaWYgKCFwc3JfZ2xvYmFsX2VuYWJsZWQoaW50 ZWxfZHApKSB7Cj4gIAkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJQU1IgZGlzYWJsZWQg YnkgZmxhZ1xuIik7Cj4gIAkJcmV0dXJuOwo+ICAJfQo+IEBAIC04MzQsNyArODI4LDcgQEAgdm9p ZCBpbnRlbF9wc3JfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAg CQlyZXR1cm47Cj4gIAl9Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5wc3Iuc2lua19ub3RfcmVsaWFi bGUpIHsKPiArCWlmIChpbnRlbF9kcC0+cHNyLnNpbmtfbm90X3JlbGlhYmxlKSB7Cj4gIAkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gIAkJCSAgICAiUFNSIHNpbmsgaW1wbGVtZW50YXRp b24gaXMgbm90IHJlbGlhYmxlXG4iKTsKPiAgCQlyZXR1cm47Cj4gQEAgLTg3MCwyMyArODY0LDI0 IEBAIHZvaWQgaW50ZWxfcHNyX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCj4gIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9hY3RpdmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsKPiArCWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyID0gaW50ZWxf ZHAtPnBzci50cmFuc2NvZGVyOwo+ICAKPiAtCWlmICh0cmFuc2NvZGVyX2hhc19wc3IyKGRldl9w cml2LCBkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKQo+ICsJaWYgKHRyYW5zY29kZXJfaGFzX3Bz cjIoZGV2X3ByaXYsIHRyYW5zY29kZXIpKQo+ICAJCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJt LAo+IC0JCQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2 LT5wc3IudHJhbnNjb2RlcikpICYgRURQX1BTUjJfRU5BQkxFKTsKPiArCQkJICAgIGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTCh0cmFuc2NvZGVyKSkgJiBFRFBfUFNSMl9FTkFC TEUpOwo+ICAKPiAgCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCSAgICBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKSAm IEVEUF9QU1JfRU5BQkxFKTsKPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBkZXZfcHJp di0+cHNyLmFjdGl2ZSk7Cj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+cHNyLmxv Y2spOwo+ICsJCSAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTCh0cmFuc2Nv ZGVyKSkgJiBFRFBfUFNSX0VOQUJMRSk7Cj4gKwlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwg aW50ZWxfZHAtPnBzci5hY3RpdmUpOwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaW50ZWxfZHAt PnBzci5sb2NrKTsKPiAgCj4gIAkvKiBwc3IxIGFuZCBwc3IyIGFyZSBtdXR1YWxseSBleGNsdXNp dmUuKi8KPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkKPiArCWlmIChpbnRlbF9k cC0+cHNyLnBzcjJfZW5hYmxlZCkKPiAgCQloc3dfYWN0aXZhdGVfcHNyMihpbnRlbF9kcCk7Cj4g IAllbHNlCj4gIAkJaHN3X2FjdGl2YXRlX3BzcjEoaW50ZWxfZHApOwo+ICAKPiAtCWRldl9wcml2 LT5wc3IuYWN0aXZlID0gdHJ1ZTsKPiArCWludGVsX2RwLT5wc3IuYWN0aXZlID0gdHJ1ZTsKPiAg fQo+ICAKPiAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9zb3VyY2Uoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwKPiBAQCAtOTAyLDcgKzg5Nyw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bz cl9lbmFibGVfc291cmNlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoSVNfSEFT V0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAgCQloc3dfcHNyX3Nl dHVwX2F1eChpbnRlbF9kcCk7Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVk ICYmIChJU19HRU4oZGV2X3ByaXYsIDkpICYmCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2Vu YWJsZWQgJiYgKElTX0dFTihkZXZfcHJpdiwgOSkgJiYKPiAgCQkJCQkgICAhSVNfR0VNSU5JTEFL RShkZXZfcHJpdikpKSB7Cj4gIAkJaTkxNV9yZWdfdCByZWcgPSBDSElDS0VOX1RSQU5TKGNwdV90 cmFuc2NvZGVyKTsKPiAgCQl1MzIgY2hpY2tlbiA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Cj4gQEAgLTkyNiwxMCArOTIxLDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVf c291cmNlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA8IDExKQo+ICAJCW1hc2sgfD0gRURQX1BTUl9ERUJVR19NQVNLX0RJU1BfUkVHX1dSSVRF Owo+ICAKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0RFQlVHKGRldl9wcml2 LT5wc3IudHJhbnNjb2RlciksCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUl9E RUJVRyhpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpLAo+ICAJCSAgICAgICBtYXNrKTsKPiAgCj4g LQlwc3JfaXJxX2NvbnRyb2woZGV2X3ByaXYpOwo+ICsJcHNyX2lycV9jb250cm9sKGludGVsX2Rw KTsKPiAgCj4gIAlpZiAoY3J0Y19zdGF0ZS0+ZGMzY29fZXhpdGxpbmUpIHsKPiAgCQl1MzIgdmFs Owo+IEBAIC05NDcsMzAgKzk0MiwzMCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX3Nv dXJjZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAKPiAgCWlmIChIQVNfUFNSX0hXX1RS QUNLSU5HKGRldl9wcml2KSAmJiBIQVNfUFNSMl9TRUxfRkVUQ0goZGV2X3ByaXYpKQo+ICAJCWlu dGVsX2RlX3JtdyhkZXZfcHJpdiwgQ0hJQ0tFTl9QQVIxXzEsIElHTk9SRV9QU1IyX0hXX1RSQUNL SU5HLAo+IC0JCQkgICAgIGRldl9wcml2LT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCA/Cj4g KwkJCSAgICAgaW50ZWxfZHAtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkID8KPiAgCQkJICAg ICBJR05PUkVfUFNSMl9IV19UUkFDS0lORyA6IDApOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBp bnRlbF9wc3JfZW5hYmxlX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAsCj4gIAkJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCj4gIAkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGUpCj4gIHsKPiAtCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBkZXZfcHJpdi0+cHNy LmRwOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Cj4gIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3Rv X2RpZ19wb3J0KGludGVsX2RwKTsKPiAgCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0g JmRpZ19wb3J0LT5iYXNlOwo+ICAJdTMyIHZhbDsKPiAgCj4gLQlkcm1fV0FSTl9PTigmZGV2X3By aXYtPmRybSwgZGV2X3ByaXYtPnBzci5lbmFibGVkKTsKPiArCWRybV9XQVJOX09OKCZkZXZfcHJp di0+ZHJtLCBpbnRlbF9kcC0+cHNyLmVuYWJsZWQpOwo+ICAKPiAtCWRldl9wcml2LT5wc3IucHNy Ml9lbmFibGVkID0gY3J0Y19zdGF0ZS0+aGFzX3BzcjI7Cj4gLQlkZXZfcHJpdi0+cHNyLmJ1c3lf ZnJvbnRidWZmZXJfYml0cyA9IDA7Cj4gLQlkZXZfcHJpdi0+cHNyLnBpcGUgPSB0b19pbnRlbF9j cnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0YyktPnBpcGU7Cj4gLQlkZXZfcHJpdi0+cHNyLmRjM2Nv X2VuYWJsZWQgPSAhIWNydGNfc3RhdGUtPmRjM2NvX2V4aXRsaW5lOwo+IC0JZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyID0gY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXI7Cj4gKwlpbnRlbF9kcC0+ cHNyLnBzcjJfZW5hYmxlZCA9IGNydGNfc3RhdGUtPmhhc19wc3IyOwo+ICsJaW50ZWxfZHAtPnBz ci5idXN5X2Zyb250YnVmZmVyX2JpdHMgPSAwOwo+ICsJaW50ZWxfZHAtPnBzci5waXBlID0gdG9f aW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpLT5waXBlOwo+ICsJaW50ZWxfZHAtPnBz ci5kYzNjb19lbmFibGVkID0gISFjcnRjX3N0YXRlLT5kYzNjb19leGl0bGluZTsKPiArCWludGVs X2RwLT5wc3IudHJhbnNjb2RlciA9IGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOwo+ICAJLyog REM1L0RDNiByZXF1aXJlcyBhdCBsZWFzdCA2IGlkbGUgZnJhbWVzICovCj4gIAl2YWwgPSB1c2Vj c190b19qaWZmaWVzKGludGVsX2dldF9mcmFtZV90aW1lX3VzKGNydGNfc3RhdGUpICogNik7Cj4g LQlkZXZfcHJpdi0+cHNyLmRjM2NvX2V4aXRfZGVsYXkgPSB2YWw7Cj4gLQlkZXZfcHJpdi0+cHNy LnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxfZmV0 Y2g7Cj4gKwlpbnRlbF9kcC0+cHNyLmRjM2NvX2V4aXRfZGVsYXkgPSB2YWw7Cj4gKwlpbnRlbF9k cC0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9z ZWxfZmV0Y2g7Cj4gIAo+ICAJLyoKPiAgCSAqIElmIGEgUFNSIGVycm9yIGhhcHBlbmVkIGFuZCB0 aGUgZHJpdmVyIGlzIHJlbG9hZGVkLCB0aGUgRURQX1BTUl9JSVIKPiBAQCAtOTgyLDI3ICs5Nzcs MjcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJICovCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMikgewo+ICAJCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgVFJB TlNfUFNSX0lJUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpKTsKPiArCQkJCSAgICBUUkFOU19Q U1JfSUlSKGludGVsX2RwLT5wc3IudHJhbnNjb2RlcikpOwo+ICAJCXZhbCAmPSBFRFBfUFNSX0VS Uk9SKDApOwo+ICAJfSBlbHNlIHsKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBF RFBfUFNSX0lJUik7Cj4gLQkJdmFsICY9IEVEUF9QU1JfRVJST1IoZGV2X3ByaXYtPnBzci50cmFu c2NvZGVyKTsKPiArCQl2YWwgJj0gRURQX1BTUl9FUlJPUihpbnRlbF9kcC0+cHNyLnRyYW5zY29k ZXIpOwo+ICAJfQo+ICAJaWYgKHZhbCkgewo+IC0JCWRldl9wcml2LT5wc3Iuc2lua19ub3RfcmVs aWFibGUgPSB0cnVlOwo+ICsJCWludGVsX2RwLT5wc3Iuc2lua19ub3RfcmVsaWFibGUgPSB0cnVl Owo+ICAJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICAJCQkgICAgIlBTUiBpbnRlcnJ1 cHRpb24gZXJyb3Igc2V0LCBub3QgZW5hYmxpbmcgUFNSXG4iKTsKPiAgCQlyZXR1cm47Cj4gIAl9 Cj4gIAo+ICAJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJFbmFibGluZyBQU1Ilc1xuIiwK PiAtCQkgICAgZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQgPyAiMiIgOiAiMSIpOwo+ICsJCSAg ICBpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCA/ICIyIiA6ICIxIik7Cj4gIAlpbnRlbF9kcF9j b21wdXRlX3Bzcl92c2Nfc2RwKGludGVsX2RwLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlLAo+IC0J CQkJICAgICAmZGV2X3ByaXYtPnBzci52c2MpOwo+IC0JaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChl bmNvZGVyLCBjcnRjX3N0YXRlLCAmZGV2X3ByaXYtPnBzci52c2MpOwo+ICsJCQkJICAgICAmaW50 ZWxfZHAtPnBzci52c2MpOwo+ICsJaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRj X3N0YXRlLCAmaW50ZWxfZHAtPnBzci52c2MpOwo+ICAJaW50ZWxfcHNyX2VuYWJsZV9zaW5rKGlu dGVsX2RwKTsKPiAgCWludGVsX3Bzcl9lbmFibGVfc291cmNlKGludGVsX2RwLCBjcnRjX3N0YXRl KTsKPiAtCWRldl9wcml2LT5wc3IuZW5hYmxlZCA9IHRydWU7Cj4gKwlpbnRlbF9kcC0+cHNyLmVu YWJsZWQgPSB0cnVlOwo+ICAKPiAgCWludGVsX3Bzcl9hY3RpdmF0ZShpbnRlbF9kcCk7Cj4gIH0K PiBAQCAtMTAyMSw3ICsxMDE2LDcgQEAgdm9pZCBpbnRlbF9wc3JfZW5hYmxlKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJpdikg fHwgZGV2X3ByaXYtPnBzci5kcCAhPSBpbnRlbF9kcCkKPiArCWlmICghQ0FOX1BTUihpbnRlbF9k cCkpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWlmICghY3J0Y19zdGF0ZS0+aGFzX3BzcikKPiBAQCAt MTAyOSw0NiArMTAyNCw0NyBAQCB2b2lkIGludGVsX3Bzcl9lbmFibGUoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwKPiAgCj4gIAlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYt PmRycnMuZHApOwo+ICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gLQlp bnRlbF9wc3JfZW5hYmxlX2xvY2tlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7 Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZp bnRlbF9kcC0+cHNyLmxvY2spOwo+ICsJaW50ZWxfcHNyX2VuYWJsZV9sb2NrZWQoaW50ZWxfZHAs IGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNy LmxvY2spOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wc3JfZXhpdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9leGl0KHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAJdTMyIHZhbDsKPiAgCj4gLQlp ZiAoIWRldl9wcml2LT5wc3IuYWN0aXZlKSB7Cj4gLQkJaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIo ZGV2X3ByaXYsIGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpIHsKPiArCWlmICghaW50ZWxfZHAt PnBzci5hY3RpdmUpIHsKPiArCQlpZiAodHJhbnNjb2Rlcl9oYXNfcHNyMihkZXZfcHJpdiwgaW50 ZWxfZHAtPnBzci50cmFuc2NvZGVyKSkgewo+ICAJCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LAo+IC0JCQkJCSAgICBFRFBfUFNSMl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSk7 Cj4gKwkJCQkJICAgIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsKPiAg CQkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHZhbCAmIEVEUF9QU1IyX0VOQUJMRSk7Cj4g IAkJfQo+ICAKPiAgCQl2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJICAgIEVE UF9QU1JfQ1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1Jf Q1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlcikpOwo+ICAJCWRybV9XQVJOX09OKCZkZXZfcHJp di0+ZHJtLCB2YWwgJiBFRFBfUFNSX0VOQUJMRSk7Cj4gIAo+ICAJCXJldHVybjsKPiAgCX0KPiAg Cj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQpIHsKPiAtCQl0Z2xfZGlzYWxsb3df ZGMzY29fb25fcHNyMl9leGl0KGRldl9wcml2KTsKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJf ZW5hYmxlZCkgewo+ICsJCXRnbF9kaXNhbGxvd19kYzNjb19vbl9wc3IyX2V4aXQoaW50ZWxfZHAp Owo+ICAJCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUjJf Q1RMKGRldl9wcml2LT5wc3IudHJhbnNjb2RlcikpOwo+ICsJCQkJICAgIEVEUF9QU1IyX0NUTChp bnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpKTsKPiAgCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgISh2YWwgJiBFRFBfUFNSMl9FTkFCTEUpKTsKPiAgCQl2YWwgJj0gfkVEUF9QU1IyX0VOQUJM RTsKPiAgCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwKPiAtCQkJICAgICAgIEVEUF9QU1IyX0NU TChkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpLCB2YWwpOwo+ICsJCQkgICAgICAgRURQX1BTUjJf Q1RMKGludGVsX2RwLT5wc3IudHJhbnNjb2RlciksIHZhbCk7Cj4gIAl9IGVsc2Ugewo+ICAJCXZh bCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsCj4gLQkJCQkgICAgRURQX1BTUl9DVEwoZGV2X3By aXYtPnBzci50cmFuc2NvZGVyKSk7Cj4gKwkJCQkgICAgRURQX1BTUl9DVEwoaW50ZWxfZHAtPnBz ci50cmFuc2NvZGVyKSk7Cj4gIAkJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sICEodmFsICYg RURQX1BTUl9FTkFCTEUpKTsKPiAgCQl2YWwgJj0gfkVEUF9QU1JfRU5BQkxFOwo+ICAJCWludGVs X2RlX3dyaXRlKGRldl9wcml2LAo+IC0JCQkgICAgICAgRURQX1BTUl9DVEwoZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyKSwgdmFsKTsKPiArCQkJICAgICAgIEVEUF9QU1JfQ1RMKGludGVsX2RwLT5w c3IudHJhbnNjb2RlciksIHZhbCk7Cj4gIAl9Cj4gLQlkZXZfcHJpdi0+cHNyLmFjdGl2ZSA9IGZh bHNlOwo+ICsJaW50ZWxfZHAtPnBzci5hY3RpdmUgPSBmYWxzZTsKPiAgfQo+ICAKPiAgc3RhdGlj IHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cj4gQEAgLTEwNzcsMjEgKzEwNzMsMjEgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVf bG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAlpOTE1X3JlZ190IHBzcl9zdGF0 dXM7Cj4gIAl1MzIgcHNyX3N0YXR1c19tYXNrOwo+ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpbnRlbF9kcC0+ cHNyLmxvY2spOwo+ICAKPiAtCWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkKQo+ICsJaWYgKCFp bnRlbF9kcC0+cHNyLmVuYWJsZWQpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLCAiRGlzYWJsaW5nIFBTUiVzXG4iLAo+IC0JCSAgICBkZXZfcHJpdi0+cHNy LnBzcjJfZW5hYmxlZCA/ICIyIiA6ICIxIik7Cj4gKwkJICAgIGludGVsX2RwLT5wc3IucHNyMl9l bmFibGVkID8gIjIiIDogIjEiKTsKPiAgCj4gLQlpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7Cj4g KwlpbnRlbF9wc3JfZXhpdChpbnRlbF9kcCk7Cj4gIAo+IC0JaWYgKGRldl9wcml2LT5wc3IucHNy Ml9lbmFibGVkKSB7Cj4gLQkJcHNyX3N0YXR1cyA9IEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJpdi0+ cHNyLnRyYW5zY29kZXIpOwo+ICsJaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7Cj4g KwkJcHNyX3N0YXR1cyA9IEVEUF9QU1IyX1NUQVRVUyhpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIp Owo+ICAJCXBzcl9zdGF0dXNfbWFzayA9IEVEUF9QU1IyX1NUQVRVU19TVEFURV9NQVNLOwo+ICAJ fSBlbHNlIHsKPiAtCQlwc3Jfc3RhdHVzID0gRURQX1BTUl9TVEFUVVMoZGV2X3ByaXYtPnBzci50 cmFuc2NvZGVyKTsKPiArCQlwc3Jfc3RhdHVzID0gRURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtPnBz ci50cmFuc2NvZGVyKTsKPiAgCQlwc3Jfc3RhdHVzX21hc2sgPSBFRFBfUFNSX1NUQVRVU19TVEFU RV9NQVNLOwo+ICAJfQo+ICAKPiBAQCAtMTEwMSw3ICsxMDk3LDcgQEAgc3RhdGljIHZvaWQgaW50 ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkJZHJt X2VycigmZGV2X3ByaXYtPmRybSwgIlRpbWVkIG91dCB3YWl0aW5nIFBTUiBpZGxlIHN0YXRlXG4i KTsKPiAgCj4gIAkvKiBXQSAxNDA4MzMwODQ3ICovCj4gLQlpZiAoZGV2X3ByaXYtPnBzci5wc3Iy X3NlbF9mZXRjaF9lbmFibGVkICYmCj4gKwlpZiAoaW50ZWxfZHAtPnBzci5wc3IyX3NlbF9mZXRj aF9lbmFibGVkICYmCj4gIAkgICAgKElTX1RHTF9ESVNQX1JFVklEKGRldl9wcml2LCBUR0xfUkVW SURfQTAsIFRHTF9SRVZJRF9BMCkgfHwKPiAgCSAgICAgSVNfUktMX1JFVklEKGRldl9wcml2LCBS S0xfUkVWSURfQTAsIFJLTF9SRVZJRF9BMCkpKQo+ICAJCWludGVsX2RlX3JtdyhkZXZfcHJpdiwg Q0hJQ0tFTl9QQVIxXzEsCj4gQEAgLTExMTAsMTAgKzExMDYsMTAgQEAgc3RhdGljIHZvaWQgaW50 ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAkvKiBE aXNhYmxlIFBTUiBvbiBTaW5rICovCj4gIAlkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5h dXgsIERQX1BTUl9FTl9DRkcsIDApOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5h YmxlZCkKPiArCWlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkKPiAgCQlkcm1fZHBfZHBj ZF93cml0ZWIoJmludGVsX2RwLT5hdXgsIERQX1JFQ0VJVkVSX0FMUE1fQ09ORklHLCAwKTsKPiAg Cj4gLQlkZXZfcHJpdi0+cHNyLmVuYWJsZWQgPSBmYWxzZTsKPiArCWludGVsX2RwLT5wc3IuZW5h YmxlZCA9IGZhbHNlOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTEzMSwyMCArMTEyNywyMiBAQCB2 b2lkIGludGVsX3Bzcl9kaXNhYmxlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAo IW9sZF9jcnRjX3N0YXRlLT5oYXNfcHNyKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoZHJtX1dB Uk5fT04oJmRldl9wcml2LT5kcm0sICFDQU5fUFNSKGRldl9wcml2KSkpCj4gKwlpZiAoZHJtX1dB Uk5fT04oJmRldl9wcml2LT5kcm0sICFDQU5fUFNSKGludGVsX2RwKSkpCj4gIAkJcmV0dXJuOwo+ ICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZp bnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAgCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRl bF9kcCk7Cj4gIAo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+IC0JY2Fu Y2VsX3dvcmtfc3luYygmZGV2X3ByaXYtPnBzci53b3JrKTsKPiAtCWNhbmNlbF9kZWxheWVkX3dv cmtfc3luYygmZGV2X3ByaXYtPnBzci5kYzNjb193b3JrKTsKPiArCW11dGV4X3VubG9jaygmaW50 ZWxfZHAtPnBzci5sb2NrKTsKPiArCWNhbmNlbF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3Iud29y ayk7Cj4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3IuZGMzY29fd29y ayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19leGl0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIHZvaWQgcHNyX2ZvcmNl X2h3X3RyYWNraW5nX2V4aXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4g Kwo+ICAJaWYgKElTX1RJR0VSTEFLRShkZXZfcHJpdikpCj4gIAkJLyoKPiAgCQkgKiBXcml0ZXMg dG8gQ1VSU1VSRkxJVkUgaW4gVEdMIGFyZSBjYXVzaW5nIElPTU1VIGVycm9ycyBhbmQKPiBAQCAt MTE1OCw3ICsxMTU2LDcgQEAgc3RhdGljIHZvaWQgcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCSAqIFNvIHVzaW5nIHRoaXMg d29ya2Fyb3VuZCB1bnRpbCB0aGlzIGlzc3VlIGlzIHJvb3QgY2F1c2VkCj4gIAkJICogYW5kIGEg YmV0dGVyIGZpeCBpcyBmb3VuZC4KPiAgCQkgKi8KPiAtCQlpbnRlbF9wc3JfZXhpdChkZXZfcHJp dik7Cj4gKwkJaW50ZWxfcHNyX2V4aXQoaW50ZWxfZHApOwo+ICAJZWxzZSBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5KQo+ICAJCS8qCj4gIAkJICogRGlzcGxheSBXQSAjMDg4NDogc2tsKwo+ IEBAIC0xMTY5LDEzICsxMTY3LDEzIEBAIHN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2lu Z19leGl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQkgKiBidXQgaXQg bWFrZXMgbW9yZSBzZW5zZSB3cml0ZSB0byB0aGUgY3VycmVudCBhY3RpdmUKPiAgCQkgKiBwaXBl Lgo+ICAJCSAqLwo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBDVVJTVVJGTElWRShkZXZf cHJpdi0+cHNyLnBpcGUpLCAwKTsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ1VSU1VS RkxJVkUoaW50ZWxfZHAtPnBzci5waXBlKSwgMCk7Cj4gIAllbHNlCj4gIAkJLyoKPiAgCQkgKiBB IHdyaXRlIHRvIENVUlNVUkZMSVZFIGRvIG5vdCBjYXVzZSBIVyB0cmFja2luZyB0byBleGl0IFBT Ugo+ICAJCSAqIG9uIG9sZGVyIGdlbnMgc28gZG9pbmcgdGhlIG1hbnVhbCBleGl0IGluc3RlYWQu Cj4gIAkJICovCj4gLQkJaW50ZWxfcHNyX2V4aXQoZGV2X3ByaXYpOwo+ICsJCWludGVsX3Bzcl9l eGl0KGludGVsX2RwKTsKPiAgfQo+ICAKPiAgdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVf c2VsX2ZldGNoKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gQEAgLTEyMTUsMTEgKzEyMTMs MTEgQEAgdm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0cnVjdCBpbnRl bF9wbGFuZSAqcGxhbmUsCj4gIAlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgUExBTkVfU0VM X0ZFVENIX1NJWkUocGlwZSwgcGxhbmUtPmlkKSwgdmFsKTsKPiAgfQo+ICAKPiAtdm9pZCBpbnRl bF9wc3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCj4gK3ZvaWQgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90 cmtfY3RsKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gKwkJCQkJICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgewo+IC0Jc3RydWN0IGludGVsX2NydGMg KmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiAt CXN0cnVjdCBpOTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKPiArCXN0cnVjdCBp bnRlbF9wc3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ICAKPiAgCWlmICghSEFTX1BTUjJfU0VM X0ZFVENIKGRldl9wcml2KSB8fAo+ICAJICAgICFjcnRjX3N0YXRlLT5lbmFibGVfcHNyMl9zZWxf ZmV0Y2gpCj4gQEAgLTEzMzYsMTMgKzEzMzQsMTMgQEAgdm9pZCBpbnRlbF9wc3JfdXBkYXRlKHN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAkJICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGk5MTVfcHNyICpw c3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRlbF9k cC0+cHNyOwo+ICAJYm9vbCBlbmFibGUsIHBzcjJfZW5hYmxlOwo+ICAKPiAtCWlmICghQ0FOX1BT UihkZXZfcHJpdikgfHwgUkVBRF9PTkNFKHBzci0+ZHApICE9IGludGVsX2RwKQo+ICsJaWYgKCFD QU5fUFNSKGludGVsX2RwKSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3By aXYtPnBzci5sb2NrKTsKPiArCW11dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gIAo+ ICAJZW5hYmxlID0gY3J0Y19zdGF0ZS0+aGFzX3BzcjsKPiAgCXBzcjJfZW5hYmxlID0gY3J0Y19z dGF0ZS0+aGFzX3BzcjI7Cj4gQEAgLTEzNTAsMTUgKzEzNDgsMTUgQEAgdm9pZCBpbnRlbF9wc3Jf dXBkYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpZiAoZW5hYmxlID09IHBzci0+ ZW5hYmxlZCAmJiBwc3IyX2VuYWJsZSA9PSBwc3ItPnBzcjJfZW5hYmxlZCkgewo+ICAJCS8qIEZv cmNlIGEgUFNSIGV4aXQgd2hlbiBlbmFibGluZyBDUkMgdG8gYXZvaWQgQ1JDIHRpbWVvdXRzICov Cj4gIAkJaWYgKGNydGNfc3RhdGUtPmNyY19lbmFibGVkICYmIHBzci0+ZW5hYmxlZCkKPiAtCQkJ cHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoZGV2X3ByaXYpOwo+ICsJCQlwc3JfZm9yY2VfaHdf dHJhY2tpbmdfZXhpdChpbnRlbF9kcCk7Cj4gIAkJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8IDkgJiYgcHNyLT5lbmFibGVkKSB7Cj4gIAkJCS8qCj4gIAkJCSAqIEFjdGl2YXRlIFBTUiBh Z2FpbiBhZnRlciBhIGZvcmNlIGV4aXQgd2hlbiBlbmFibGluZwo+ICAJCQkgKiBDUkMgaW4gb2xk ZXIgZ2Vucwo+ICAJCQkgKi8KPiAtCQkJaWYgKCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSAmJgo+IC0J CQkgICAgIWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+IC0JCQkJc2NoZWR1 bGVfd29yaygmZGV2X3ByaXYtPnBzci53b3JrKTsKPiArCQkJaWYgKCFpbnRlbF9kcC0+cHNyLmFj dGl2ZSAmJgo+ICsJCQkgICAgIWludGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+ ICsJCQkJc2NoZWR1bGVfd29yaygmaW50ZWxfZHAtPnBzci53b3JrKTsKPiAgCQl9Cj4gIAo+ICAJ CWdvdG8gdW5sb2NrOwo+IEBAIC0xMzY4LDM0ICsxMzY2LDIzIEBAIHZvaWQgaW50ZWxfcHNyX3Vw ZGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJCWludGVsX3Bzcl9kaXNhYmxlX2xv Y2tlZChpbnRlbF9kcCk7Cj4gIAo+ICAJaWYgKGVuYWJsZSkKPiAtCQlpbnRlbF9wc3JfZW5hYmxl X2xvY2tlZChkZXZfcHJpdiwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gKwkJaW50ZWxfcHNy X2VuYWJsZV9sb2NrZWQoaW50ZWxfZHAsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ICAKPiAg dW5sb2NrOgo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhf dW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICB9Cj4gIAo+ICAvKioKPiAtICogaW50ZWxf cHNyX3dhaXRfZm9yX2lkbGUgLSB3YWl0IGZvciBQU1IxIHRvIGlkbGUKPiAtICogQG5ld19jcnRj X3N0YXRlOiBuZXcgQ1JUQyBzdGF0ZQo+ICsgKiBwc3Jfd2FpdF9mb3JfaWRsZSAtIHdhaXQgZm9y IFBTUjEgdG8gaWRsZQo+ICsgKiBAaW50ZWxfZHA6IEludGVsIERQCj4gICAqIEBvdXRfdmFsdWU6 IFBTUiBzdGF0dXMgaW4gY2FzZSBvZiBmYWlsdXJlCj4gICAqCj4gLSAqIFRoaXMgZnVuY3Rpb24g aXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGZyb20gcGlwZV91cGRhdGVfc3RhcnQoKSB3aGVyZSBp dCBpcwo+IC0gKiBub3QgZXhwZWN0ZWQgdG8gcmFjZSB3aXRoIFBTUiBlbmFibGUgb3IgZGlzYWJs ZS4KPiAtICoKPiAgICogUmV0dXJuczogMCBvbiBzdWNjZXNzIG9yIC1FVElNRU9VVCBpZiBQU1Ig c3RhdHVzIGRvZXMgbm90IGlkbGUuCj4gKyAqCj4gICAqLwo+IC1pbnQgaW50ZWxfcHNyX3dhaXRf Zm9yX2lkbGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLAo+ IC0JCQkgICAgdTMyICpvdXRfdmFsdWUpCj4gK3N0YXRpYyBpbnQgcHNyX3dhaXRfZm9yX2lkbGUo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTMyICpvdXRfdmFsdWUpCj4gIHsKPiAtCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhuZXdfY3J0Y19zdGF0ZS0+dWFwaS5j cnRjKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0 Yy0+YmFzZS5kZXYpOwo+IC0KPiAtCWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVkIHx8ICFuZXdf Y3J0Y19zdGF0ZS0+aGFzX3BzcikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBGSVhNRTogVXBk YXRlIHRoaXMgZm9yIFBTUjIgaWYgd2UgbmVlZCB0byB3YWl0IGZvciBpZGxlICovCj4gLQlpZiAo UkVBRF9PTkNFKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSkKPiAtCQlyZXR1cm4gMDsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Owo+ICAKPiAgCS8qCj4gIAkgKiBGcm9tIGJzcGVjOiBQYW5lbCBTZWxmIFJlZnJlc2ggKEJEVysp Cj4gQEAgLTE0MDMsMzIgKzEzOTAsNjcgQEAgaW50IGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwKPiAgCSAqIGV4aXQg dHJhaW5pbmcgdGltZSArIDEuNSBtcyBvZiBhdXggY2hhbm5lbCBoYW5kc2hha2UuIDUwIG1zIGlz Cj4gIAkgKiBkZWZlbnNpdmUgZW5vdWdoIHRvIGNvdmVyIGV2ZXJ5dGhpbmcuCj4gIAkgKi8KPiAt Cj4gIAlyZXR1cm4gX19pbnRlbF93YWl0X2Zvcl9yZWdpc3RlcigmZGV2X3ByaXYtPnVuY29yZSwK PiAtCQkJCQkgRURQX1BTUl9TVEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSwKPiArCQkJ CQkgRURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtPnBzci50cmFuc2NvZGVyKSwKPiAgCQkJCQkgRURQ X1BTUl9TVEFUVVNfU1RBVEVfTUFTSywKPiAgCQkJCQkgRURQX1BTUl9TVEFUVVNfU1RBVEVfSURM RSwgMiwgNTAsCj4gIAkJCQkJIG91dF92YWx1ZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIF9f cHNyX3dhaXRfZm9yX2lkbGVfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArLyoqCj4gKyAqIGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlIC0gd2FpdCBmb3IgUFNSMSB0 byBpZGxlCj4gKyAqIEBuZXdfY3J0Y19zdGF0ZTogbmV3IENSVEMgc3RhdGUKPiArICoKPiArICog VGhpcyBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgZnJvbSBwaXBlX3VwZGF0ZV9z dGFydCgpIHdoZXJlIGl0IGlzCj4gKyAqIG5vdCBleHBlY3RlZCB0byByYWNlIHdpdGggUFNSIGVu YWJsZSBvciBkaXNhYmxlLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUobmV3X2NydGNfc3RhdGUt PnVhcGkuY3J0Yy0+ZGV2KTsKPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICsJ dTMyIHBzcl9zdGF0dXM7Cj4gKwo+ICsJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+aGFzX3BzcikKPiAr CQlyZXR1cm47Cj4gKwo+ICsJZm9yX2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29k ZXIpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVu Y29kZXIpOwo+ICsKPiArCQlpZiAoZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogd2hlbiB0aGUgUFNSMSBpcyBlbmFibGVkICovCj4g KwkJaWYgKGludGVsX2RwLT5wc3IuZW5hYmxlZCAmJiAhaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJs ZWQpIHsKPiArCQkJaWYgKHBzcl93YWl0X2Zvcl9pZGxlKGludGVsX2RwLCAmcHNyX3N0YXR1cykp Cj4gKwkJCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJCSJQU1IgaWRsZSB0aW1lZCBv dXQgMHgleCwgYXRvbWljIHVwZGF0ZSBtYXkgZmFpbFxuIiwKPiArCQkJCQlwc3Jfc3RhdHVzKTsK PiArCj4gKwkJCS8qIG9ubHkgb25lIHRyYW5jb2RlciBjYW4gZW5hYmxlIFBTUjEgKi8KPiArCQkJ YnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBfX3Bzcl93YWl0X2Zv cl9pZGxlX2xvY2tlZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlpOTE1X3Jl Z190IHJlZzsKPiAgCXUzMiBtYXNrOwo+ICAJaW50IGVycjsKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAKPiAtCWlmICghZGV2 X3ByaXYtPnBzci5lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpCj4gIAkJ cmV0dXJuIGZhbHNlOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgewo+ IC0JCXJlZyA9IEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJ aWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7Cj4gKwkJcmVnID0gRURQX1BTUjJfU1RB VFVTKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlcik7Cj4gIAkJbWFzayA9IEVEUF9QU1IyX1NUQVRV U19TVEFURV9NQVNLOwo+ICAJfSBlbHNlIHsKPiAtCQlyZWcgPSBFRFBfUFNSX1NUQVRVUyhkZXZf cHJpdi0+cHNyLnRyYW5zY29kZXIpOwo+ICsJCXJlZyA9IEVEUF9QU1JfU1RBVFVTKGludGVsX2Rw LT5wc3IudHJhbnNjb2Rlcik7Cj4gIAkJbWFzayA9IEVEUF9QU1JfU1RBVFVTX1NUQVRFX01BU0s7 Cj4gIAl9Cj4gIAo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0 ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAgCWVyciA9IGludGVsX2RlX3dh aXRfZm9yX2NsZWFyKGRldl9wcml2LCByZWcsIG1hc2ssIDUwKTsKPiAgCWlmIChlcnIpCj4gQEAg LTE0MzYsOCArMTQ1OCw4IEBAIHN0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9yX2lkbGVfbG9ja2Vk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQkJIlRpbWVkIG91dCB3YWl0 aW5nIGZvciBQU1IgSWRsZSBmb3IgcmUtZW5hYmxlXG4iKTsKPiAgCj4gIAkvKiBBZnRlciB0aGUg dW5sb2NrZWQgd2FpdCwgdmVyaWZ5IHRoYXQgUFNSIGlzIHN0aWxsIHdhbnRlZCEgKi8KPiAtCW11 dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gLQlyZXR1cm4gZXJyID09IDAgJiYgZGV2 X3ByaXYtPnBzci5lbmFibGVkOwo+ICsJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsK PiArCXJldHVybiBlcnIgPT0gMCAmJiBpbnRlbF9kcC0+cHNyLmVuYWJsZWQ7Cj4gIH0KPiAgCj4g IHN0YXRpYyBpbnQgaW50ZWxfcHNyX2Zhc3RzZXRfZm9yY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+IEBAIC0xNTAzLDExICsxNTI1LDEyIEBAIHN0YXRpYyBpbnQgaW50ZWxf cHNyX2Zhc3RzZXRfZm9yY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJ cmV0dXJuIGVycjsKPiAgfQo+ICAKPiAtaW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgdmFsKQo+ICtpbnQgaW50ZWxfcHNyX2RlYnVn X3NldChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1NjQgdmFsKQo+ICB7Cj4gIAljb25zdCB1 MzIgbW9kZSA9IHZhbCAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSzsKPiAgCXUzMiBvbGRfbW9k ZTsKPiAgCWludCByZXQ7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk cF90b19pOTE1KGludGVsX2RwKTsKPiAgCj4gIAlpZiAodmFsICYgfihJOTE1X1BTUl9ERUJVR19J UlEgfCBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHx8Cj4gIAkgICAgbW9kZSA+IEk5MTVfUFNS X0RFQlVHX0ZPUkNFX1BTUjEpIHsKPiBAQCAtMTUxNSwyMSArMTUzOCwyMSBAQCBpbnQgaW50ZWxf cHNyX2RlYnVnX3NldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCB2YWwp Cj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4g cmV0Owo+ICAKPiAtCW9sZF9tb2RlID0gZGV2X3ByaXYtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RF QlVHX01PREVfTUFTSzsKPiAtCWRldl9wcml2LT5wc3IuZGVidWcgPSB2YWw7Cj4gKwlvbGRfbW9k ZSA9IGludGVsX2RwLT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0s7Cj4gKwlp bnRlbF9kcC0+cHNyLmRlYnVnID0gdmFsOwo+ICAKPiAgCS8qCj4gIAkgKiBEbyBpdCByaWdodCBh d2F5IGlmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkb25lCj4g IAkgKiB3aGVuIGVuYWJsaW5nIHRoZSBzb3VyY2UuCj4gIAkgKi8KPiAtCWlmIChkZXZfcHJpdi0+ cHNyLmVuYWJsZWQpCj4gLQkJcHNyX2lycV9jb250cm9sKGRldl9wcml2KTsKPiArCWlmIChpbnRl bF9kcC0+cHNyLmVuYWJsZWQpCj4gKwkJcHNyX2lycV9jb250cm9sKGludGVsX2RwKTsKPiAgCj4g LQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF91bmxvY2soJmlu dGVsX2RwLT5wc3IubG9jayk7Cj4gIAo+ICAJaWYgKG9sZF9tb2RlICE9IG1vZGUpCj4gIAkJcmV0 ID0gaW50ZWxfcHNyX2Zhc3RzZXRfZm9yY2UoZGV2X3ByaXYpOwo+IEBAIC0xNTM3LDI4ICsxNTYw LDI4IEBAIGludCBpbnRlbF9wc3JfZGVidWdfc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgdTY0IHZhbCkKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lk IGludGVsX3Bzcl9oYW5kbGVfaXJxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiArc3RhdGljIHZvaWQgaW50ZWxfcHNyX2hhbmRsZV9pcnEoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiAgewo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiAr CXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ICAKPiAtCWludGVsX3Bz cl9kaXNhYmxlX2xvY2tlZChwc3ItPmRwKTsKPiArCWludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChp bnRlbF9kcCk7Cj4gIAlwc3ItPnNpbmtfbm90X3JlbGlhYmxlID0gdHJ1ZTsKPiAgCS8qIGxldCdz IG1ha2Ugc3VyZSB0aGF0IHNpbmsgaXMgYXdha2VuICovCj4gLQlkcm1fZHBfZHBjZF93cml0ZWIo JnBzci0+ZHAtPmF1eCwgRFBfU0VUX1BPV0VSLCBEUF9TRVRfUE9XRVJfRDApOwo+ICsJZHJtX2Rw X2RwY2Rfd3JpdGViKCZpbnRlbF9kcC0+YXV4LCBEUF9TRVRfUE9XRVIsIERQX1NFVF9QT1dFUl9E MCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGludGVsX3Bzcl93b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0K PiAtCQljb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpkZXZfcHJpdiksIHBzci53b3JrKTsKPiAr CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQo+ICsJCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBl b2YoKmludGVsX2RwKSwgcHNyLndvcmspOwo+ICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5w c3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICAKPiAtCWlm ICghZGV2X3ByaXYtPnBzci5lbmFibGVkKQo+ICsJaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQp Cj4gIAkJZ290byB1bmxvY2s7Cj4gIAo+IC0JaWYgKFJFQURfT05DRShkZXZfcHJpdi0+cHNyLmly cV9hdXhfZXJyb3IpKQo+IC0JCWludGVsX3Bzcl9oYW5kbGVfaXJxKGRldl9wcml2KTsKPiArCWlm IChSRUFEX09OQ0UoaW50ZWxfZHAtPnBzci5pcnFfYXV4X2Vycm9yKSkKPiArCQlpbnRlbF9wc3Jf aGFuZGxlX2lycShpbnRlbF9kcCk7Cj4gIAo+ICAJLyoKPiAgCSAqIFdlIGhhdmUgdG8gbWFrZSBz dXJlIFBTUiBpcyByZWFkeSBmb3IgcmUtZW5hYmxlCj4gQEAgLTE1NjYsNyArMTU4OSw3IEBAIHN0 YXRpYyB2b2lkIGludGVsX3Bzcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgCSAq IFBTUiBtaWdodCB0YWtlIHNvbWUgdGltZSB0byBnZXQgZnVsbHkgZGlzYWJsZWQKPiAgCSAqIGFu ZCBiZSByZWFkeSBmb3IgcmUtZW5hYmxlLgo+ICAJICovCj4gLQlpZiAoIV9fcHNyX3dhaXRfZm9y X2lkbGVfbG9ja2VkKGRldl9wcml2KSkKPiArCWlmICghX19wc3Jfd2FpdF9mb3JfaWRsZV9sb2Nr ZWQoaW50ZWxfZHApKQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiAgCS8qCj4gQEAgLTE1NzQsMTIg KzE1OTcsMTIgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICAJICogcmVjaGVjay4gU2luY2UgcHNyX2ZsdXNoIGZpcnN0IGNsZWFycyB0aGlz IGFuZCB0aGVuIHJlc2NoZWR1bGVzIHdlCj4gIAkgKiB3b24ndCBldmVyIG1pc3MgYSBmbHVzaCB3 aGVuIGJhaWxpbmcgb3V0IGhlcmUuCj4gIAkgKi8KPiAtCWlmIChkZXZfcHJpdi0+cHNyLmJ1c3lf ZnJvbnRidWZmZXJfYml0cyB8fCBkZXZfcHJpdi0+cHNyLmFjdGl2ZSkKPiArCWlmIChpbnRlbF9k cC0+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cyB8fCBpbnRlbF9kcC0+cHNyLmFjdGl2ZSkKPiAg CQlnb3RvIHVubG9jazsKPiAgCj4gLQlpbnRlbF9wc3JfYWN0aXZhdGUoZGV2X3ByaXYtPnBzci5k cCk7Cj4gKwlpbnRlbF9wc3JfYWN0aXZhdGUoaW50ZWxfZHApOwo+ICB1bmxvY2s6Cj4gLQltdXRl eF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gKwltdXRleF91bmxvY2soJmludGVsX2Rw LT5wc3IubG9jayk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0xNTk4LDI3ICsxNjIxLDM1IEBAIHN0 YXRpYyB2b2lkIGludGVsX3Bzcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgdm9p ZCBpbnRlbF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gIAkJCSAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9vcF9vcmlnaW4gb3Jp Z2luKQo+ICB7Cj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQo+IC0JCXJldHVybjsKPiArCXN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwo+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9k cDsKPiAgCj4gLQlpZiAob3JpZ2luID09IE9SSUdJTl9GTElQKQo+IC0JCXJldHVybjsKPiArCWZv cl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gIAo+IC0JbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAtCWlmICghZGV2X3ByaXYtPnBzci5lbmFibGVk KSB7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+IC0JCXJldHVybjsK PiAtCX0KPiArCQlpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKPiArCQlpZiAo ZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ICsJCQljb250aW51ZTsKPiArCQlp ZiAoIUNBTl9QU1IoaW50ZWxfZHApKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKG9yaWdp biA9PSBPUklHSU5fRkxJUCkKPiArCQkJY29udGludWU7Cj4gIAo+IC0JZnJvbnRidWZmZXJfYml0 cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhkZXZfcHJpdi0+cHNyLnBpcGUpOwo+IC0J ZGV2X3ByaXYtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJvbnRidWZmZXJfYml0czsK PiArCQltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICsJCWlmICghaW50ZWxfZHAt PnBzci5lbmFibGVkKSB7Cj4gKwkJCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsK PiArCQkJY29udGludWU7Cj4gKwkJfQo+ICAKPiAtCWlmIChmcm9udGJ1ZmZlcl9iaXRzKQo+IC0J CWludGVsX3Bzcl9leGl0KGRldl9wcml2KTsKPiArCQlmcm9udGJ1ZmZlcl9iaXRzICY9IElOVEVM X0ZST05UQlVGRkVSX0FMTF9NQVNLKGludGVsX2RwLT5wc3IucGlwZSk7Cj4gKwkJaW50ZWxfZHAt PnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJvbnRidWZmZXJfYml0czsKPiAgCj4gLQlt dXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7Cj4gLX0KPiArCQlpZiAoZnJvbnRidWZm ZXJfYml0cykKPiArCQkJaW50ZWxfcHNyX2V4aXQoaW50ZWxfZHApOwo+ICAKPiArCQltdXRleF91 bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gKwl9Cj4gK30KPiAgLyoKPiAgICogV2hlbiB3 ZSB3aWxsIGJlIGNvbXBsZXRlbHkgcmVseSBvbiBQU1IyIFMvVyB0cmFja2luZyBpbiBmdXR1cmUs Cj4gICAqIGludGVsX3Bzcl9mbHVzaCgpIHdpbGwgaW52YWxpZGF0ZSBhbmQgZmx1c2ggdGhlIFBT UiBmb3IgT1JJR0lOX0ZMSVAKPiBAQCAtMTYyNiwxNSArMTY1NywxNSBAQCB2b2lkIGludGVsX3Bz cl9pbnZhbGlkYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgICogYWNj b3JkaW5nbHkgaW4gZnV0dXJlLgo+ICAgKi8KPiAgc3RhdGljIHZvaWQKPiAtdGdsX2RjM2NvX2Zs dXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQl1bnNpZ25lZCBpbnQg ZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQo+ICt0Z2xfZGMzY29f Zmx1c2goc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdW5zaWduZWQgaW50IGZyb250YnVmZmVy X2JpdHMsCj4gKwkJZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQo+ICB7Cj4gLQltdXRleF9sb2Nr KCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+ICsJbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2Nr KTsKPiAgCj4gLQlpZiAoIWRldl9wcml2LT5wc3IuZGMzY29fZW5hYmxlZCkKPiArCWlmICghaW50 ZWxfZHAtPnBzci5kYzNjb19lbmFibGVkKQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiAtCWlmICgh ZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQgfHwgIWRldl9wcml2LT5wc3IuYWN0aXZlKQo+ICsJ aWYgKCFpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCB8fCAhaW50ZWxfZHAtPnBzci5hY3RpdmUp Cj4gIAkJZ290byB1bmxvY2s7Cj4gIAo+ICAJLyoKPiBAQCAtMTY0MiwxNSArMTY3MywxNSBAQCB0 Z2xfZGMzY29fZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJICog d2hlbiBkZWxheWVkIHdvcmsgc2NoZWR1bGVzIHRoYXQgbWVhbnMgZGlzcGxheSBoYXMgYmVlbiBp ZGxlLgo+ICAJICovCj4gIAlpZiAoIShmcm9udGJ1ZmZlcl9iaXRzICYKPiAtCSAgICBJTlRFTF9G Uk9OVEJVRkZFUl9BTExfTUFTSyhkZXZfcHJpdi0+cHNyLnBpcGUpKSkKPiArCSAgICBJTlRFTF9G Uk9OVEJVRkZFUl9BTExfTUFTSyhpbnRlbF9kcC0+cHNyLnBpcGUpKSkKPiAgCQlnb3RvIHVubG9j azsKPiAgCj4gLQl0Z2xfcHNyMl9lbmFibGVfZGMzY28oZGV2X3ByaXYpOwo+IC0JbW9kX2RlbGF5 ZWRfd29yayhzeXN0ZW1fd3EsICZkZXZfcHJpdi0+cHNyLmRjM2NvX3dvcmssCj4gLQkJCSBkZXZf cHJpdi0+cHNyLmRjM2NvX2V4aXRfZGVsYXkpOwo+ICsJdGdsX3BzcjJfZW5hYmxlX2RjM2NvKGlu dGVsX2RwKTsKPiArCW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaW50ZWxfZHAtPnBzci5k YzNjb193b3JrLAo+ICsJCQkgaW50ZWxfZHAtPnBzci5kYzNjb19leGl0X2RlbGF5KTsKPiAgCj4g IHVubG9jazoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsKPiArCW11dGV4 X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTE2Njks NDUgKzE3MDAsNTQgQEAgdGdsX2RjM2NvX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAgdm9pZCBpbnRlbF9wc3JfZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICAJCSAgICAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywgZW51bSBmYl9v cF9vcmlnaW4gb3JpZ2luKQo+ICB7Cj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpKQo+IC0JCXJl dHVybjsKPiAtCj4gLQlpZiAob3JpZ2luID09IE9SSUdJTl9GTElQKSB7Cj4gLQkJdGdsX2RjM2Nv X2ZsdXNoKGRldl9wcml2LCBmcm9udGJ1ZmZlcl9iaXRzLCBvcmlnaW4pOwo+IC0JCXJldHVybjsK PiAtCX0KPiAtCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOwo+IC0JaWYgKCFk ZXZfcHJpdi0+cHNyLmVuYWJsZWQpIHsKPiAtCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wc3Iu bG9jayk7Cj4gLQkJcmV0dXJuOwo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7Cj4g KwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOwo+ICsKPiArCWZvcl9lYWNoX2ludGVsX2RwKCZk ZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAo ZW5jb2Rlcik7Cj4gKwo+ICsJCWlmIChlbmNvZGVyLT50eXBlID09IElOVEVMX09VVFBVVF9FRFAg JiYgQ0FOX1BTUihpbnRlbF9kcCkpIHsKPiArCQkJaWYgKG9yaWdpbiA9PSBPUklHSU5fRkxJUCkg ewo+ICsJCQkJdGdsX2RjM2NvX2ZsdXNoKGludGVsX2RwLCBmcm9udGJ1ZmZlcl9iaXRzLCBvcmln aW4pOwo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCW11dGV4X2xvY2soJmludGVs X2RwLT5wc3IubG9jayk7Cj4gKwkJCWlmICghaW50ZWxfZHAtPnBzci5lbmFibGVkKSB7Cj4gKwkJ CQltdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7Cj4gKwkJCQljb250aW51ZTsKPiAr CQkJfQo+ICsKPiArCQkJZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExf TUFTSyhpbnRlbF9kcC0+cHNyLnBpcGUpOwo+ICsJCQlpbnRlbF9kcC0+cHNyLmJ1c3lfZnJvbnRi dWZmZXJfYml0cyAmPSB+ZnJvbnRidWZmZXJfYml0czsKPiArCj4gKwkJCS8qIEJ5IGRlZmluaXRp b24gZmx1c2ggPSBpbnZhbGlkYXRlICsgZmx1c2ggKi8KPiArCQkJaWYgKGZyb250YnVmZmVyX2Jp dHMpCj4gKwkJCQlwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChpbnRlbF9kcCk7Cj4gKwo+ICsJ CQlpZiAoIWludGVsX2RwLT5wc3IuYWN0aXZlICYmICFpbnRlbF9kcC0+cHNyLmJ1c3lfZnJvbnRi dWZmZXJfYml0cykKPiArCQkJCXNjaGVkdWxlX3dvcmsoJmludGVsX2RwLT5wc3Iud29yayk7Cj4g KwkJCW11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiArCQl9Cj4gIAl9Cj4gLQo+ IC0JZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhkZXZfcHJp di0+cHNyLnBpcGUpOwo+IC0JZGV2X3ByaXYtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgJj0g fmZyb250YnVmZmVyX2JpdHM7Cj4gLQo+IC0JLyogQnkgZGVmaW5pdGlvbiBmbHVzaCA9IGludmFs aWRhdGUgKyBmbHVzaCAqLwo+IC0JaWYgKGZyb250YnVmZmVyX2JpdHMpCj4gLQkJcHNyX2ZvcmNl X2h3X3RyYWNraW5nX2V4aXQoZGV2X3ByaXYpOwo+IC0KPiAtCWlmICghZGV2X3ByaXYtPnBzci5h Y3RpdmUgJiYgIWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQo+IC0JCXNjaGVk dWxlX3dvcmsoJmRldl9wcml2LT5wc3Iud29yayk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2 LT5wc3IubG9jayk7Cj4gIH0KPiAgCj4gIC8qKgo+ICAgKiBpbnRlbF9wc3JfaW5pdCAtIEluaXQg YmFzaWMgUFNSIHdvcmsgYW5kIG11dGV4Lgo+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIHBy aXZhdGUKPiArICogQGludGVsX2RwOiBJbnRlbCBEUAo+ICAgKgo+IC0gKiBUaGlzIGZ1bmN0aW9u IGlzICBjYWxsZWQgb25seSBvbmNlIGF0IGRyaXZlciBsb2FkIHRvIGluaXRpYWxpemUgYmFzaWMK PiAtICogUFNSIHN0dWZmLgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUg aW5pdGlhbGl6aW5nIGNvbm5lY3Rvci4KPiArICogKHRoZSBpbml0aWFsaXppbmcgb2YgY29ubmVj dG9yIHRyZWF0cyB0aGUgaGFuZGxpbmcgb2YgY29ubmVjdG9yIGNhcGFiaWxpdGllcykKPiArICog QW5kIGl0IGluaXRpYWxpemVzIGJhc2ljIFBTUiBzdHVmZiBmb3IgZWFjaCBEUCBFbmNvZGVyLgo+ ICAgKi8KPiAtdm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gK3ZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK PiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Cj4gKwo+ICAJaWYgKCFIQVNfUFNSKGRldl9wcml2KSkKPiAgCQlyZXR1cm47Cj4g IAo+IC0JaWYgKCFkZXZfcHJpdi0+cHNyLnNpbmtfc3VwcG9ydCkKPiArCWlmICghaW50ZWxfZHAt PnBzci5zaW5rX3N1cHBvcnQpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWlmIChJU19IQVNXRUxMKGRl dl9wcml2KSkKPiBAQCAtMTcyNSwxNCArMTc2NSwxNCBAQCB2b2lkIGludGVsX3Bzcl9pbml0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCS8qIFNldCBsaW5rX3N0YW5kYnkg eCBsaW5rX29mZiBkZWZhdWx0cyAqLwo+ICAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElT X0JST0FEV0VMTChkZXZfcHJpdikpCj4gIAkJLyogSFNXIGFuZCBCRFcgcmVxdWlyZSB3b3JrYXJv dW5kcyB0aGF0IHdlIGRvbid0IGltcGxlbWVudC4gKi8KPiAtCQlkZXZfcHJpdi0+cHNyLmxpbmtf c3RhbmRieSA9IGZhbHNlOwo+ICsJCWludGVsX2RwLT5wc3IubGlua19zdGFuZGJ5ID0gZmFsc2U7 Cj4gIAllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIpCj4gIAkJLyogRm9yIG5ldyBw bGF0Zm9ybXMgdXAgdG8gVEdMIGxldCdzIHJlc3BlY3QgVkJUIGJhY2sgYWdhaW4gKi8KPiAtCQlk ZXZfcHJpdi0+cHNyLmxpbmtfc3RhbmRieSA9IGRldl9wcml2LT52YnQucHNyLmZ1bGxfbGluazsK PiArCQlpbnRlbF9kcC0+cHNyLmxpbmtfc3RhbmRieSA9IGRldl9wcml2LT52YnQucHNyLmZ1bGxf bGluazsKPiAgCj4gLQlJTklUX1dPUksoJmRldl9wcml2LT5wc3Iud29yaywgaW50ZWxfcHNyX3dv cmspOwo+IC0JSU5JVF9ERUxBWUVEX1dPUksoJmRldl9wcml2LT5wc3IuZGMzY29fd29yaywgdGds X2RjM2NvX2Rpc2FibGVfd29yayk7Cj4gLQltdXRleF9pbml0KCZkZXZfcHJpdi0+cHNyLmxvY2sp Owo+ICsJSU5JVF9XT1JLKCZpbnRlbF9kcC0+cHNyLndvcmssIGludGVsX3Bzcl93b3JrKTsKPiAr CUlOSVRfREVMQVlFRF9XT1JLKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dvcmssIHRnbF9kYzNjb19k aXNhYmxlX3dvcmspOwo+ICsJbXV0ZXhfaW5pdCgmaW50ZWxfZHAtPnBzci5sb2NrKTsKPiAgfQo+ ICAKPiAgc3RhdGljIGludCBwc3JfZ2V0X3N0YXR1c19hbmRfZXJyb3Jfc3RhdHVzKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAsCj4gQEAgLTE3NTgsNyArMTc5OCw3IEBAIHN0YXRpYyB2b2lkIHBz cl9hbHBtX2NoZWNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsKPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+ICAJc3Ry dWN0IGRybV9kcF9hdXggKmF1eCA9ICZpbnRlbF9kcC0+YXV4Owo+IC0Jc3RydWN0IGk5MTVfcHNy ICpwc3IgPSAmZGV2X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRl bF9kcC0+cHNyOwo+ICAJdTggdmFsOwo+ICAJaW50IHI7Cj4gIAo+IEBAIC0xNzg1LDcgKzE4MjUs NyBAQCBzdGF0aWMgdm9pZCBwc3JfYWxwbV9jaGVjayhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQo+ICBzdGF0aWMgdm9pZCBwc3JfY2FwYWJpbGl0eV9jaGFuZ2VkX2NoZWNrKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2 X3ByaXYtPnBzcjsKPiArCXN0cnVjdCBpbnRlbF9wc3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOwo+ ICAJdTggdmFsOwo+ICAJaW50IHI7Cj4gIAo+IEBAIC0xODA5LDE4ICsxODQ5LDE4IEBAIHN0YXRp YyB2b2lkIHBzcl9jYXBhYmlsaXR5X2NoYW5nZWRfY2hlY2soc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiAgdm9pZCBpbnRlbF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7Cj4gLQlzdHJ1Y3QgaTkxNV9wc3IgKnBzciA9ICZkZXZfcHJpdi0+cHNy Owo+ICsJc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7Cj4gIAl1OCBzdGF0 dXMsIGVycm9yX3N0YXR1czsKPiAgCWNvbnN0IHU4IGVycm9ycyA9IERQX1BTUl9SRkJfU1RPUkFH RV9FUlJPUiB8Cj4gIAkJCSAgRFBfUFNSX1ZTQ19TRFBfVU5DT1JSRUNUQUJMRV9FUlJPUiB8Cj4g IAkJCSAgRFBfUFNSX0xJTktfQ1JDX0VSUk9SOwo+ICAKPiAtCWlmICghQ0FOX1BTUihkZXZfcHJp dikgfHwgIWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpCj4gKwlpZiAoIUNBTl9QU1IoaW50ZWxf ZHApIHx8ICFpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKQo+ICAJCXJldHVybjsKPiAgCj4gIAlt dXRleF9sb2NrKCZwc3ItPmxvY2spOwo+ICAKPiAtCWlmICghcHNyLT5lbmFibGVkIHx8IHBzci0+ ZHAgIT0gaW50ZWxfZHApCj4gKwlpZiAoIXBzci0+ZW5hYmxlZCkKPiAgCQlnb3RvIGV4aXQ7Cj4g IAo+ICAJaWYgKHBzcl9nZXRfc3RhdHVzX2FuZF9lcnJvcl9zdGF0dXMoaW50ZWxfZHAsICZzdGF0 dXMsICZlcnJvcl9zdGF0dXMpKSB7Cj4gQEAgLTE4NjMsMTUgKzE5MDMsMTQgQEAgdm9pZCBpbnRl bF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCj4gIGJvb2wg aW50ZWxfcHNyX2VuYWJsZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgewo+IC0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Cj4g IAlib29sIHJldDsKPiAgCj4gLQlpZiAoIUNBTl9QU1IoZGV2X3ByaXYpIHx8ICFpbnRlbF9kcF9p c19lZHAoaW50ZWxfZHApKQo+ICsJaWYgKCFDQU5fUFNSKGludGVsX2RwKSB8fCAhaW50ZWxfZHBf aXNfZWRwKGludGVsX2RwKSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+IC0JbXV0ZXhfbG9jaygm ZGV2X3ByaXYtPnBzci5sb2NrKTsKPiAtCXJldCA9IChkZXZfcHJpdi0+cHNyLmRwID09IGludGVs X2RwICYmIGRldl9wcml2LT5wc3IuZW5hYmxlZCk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2 LT5wc3IubG9jayk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOwo+ICsJcmV0 ID0gaW50ZWxfZHAtPnBzci5lbmFibGVkOwo+ICsJbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNy LmxvY2spOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfcHNyLmgKPiBpbmRleCAwYTUxNzk3OGU4YWYuLjAzZWIxOTU0N2QwOSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaAo+IEBAIC0xOCw3ICsx OCw3IEBAIHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7Cj4gIHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZTsKPiAgc3RydWN0IGludGVsX3BsYW5lOwo+ICAKPiAtI2RlZmluZSBDQU5fUFNSKGRldl9w cml2KSAoSEFTX1BTUihkZXZfcHJpdikgJiYgZGV2X3ByaXYtPnBzci5zaW5rX3N1cHBvcnQpCj4g KyNkZWZpbmUgQ0FOX1BTUihpbnRlbF9kcCkgKEhBU19QU1IoZHBfdG9faTkxNShpbnRlbF9kcCkp ICYmIGludGVsX2RwLT5wc3Iuc2lua19zdXBwb3J0KQo+ICB2b2lkIGludGVsX3Bzcl9pbml0X2Rw Y2Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIHZvaWQgaW50ZWxfcHNyX2VuYWJsZShz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IEBAIC0yOCwyNCArMjgsMjQgQEAgdm9pZCBpbnRlbF9w c3JfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICB2b2lkIGludGVsX3Bzcl91 cGRhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCQkgICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7Cj4gLWludCBpbnRlbF9wc3JfZGVidWdfc2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IHZhbHVlKTsKPiAraW50IGlu dGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTY0IHZhbHVlKTsK PiAgdm9pZCBpbnRlbF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gIAkJCSAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywKPiAgCQkJICBlbnVtIGZi X29wX29yaWdpbiBvcmlnaW4pOwo+ICB2b2lkIGludGVsX3Bzcl9mbHVzaChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJICAgICB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRz LAo+ICAJCSAgICAgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKTsKPiAtdm9pZCBpbnRlbF9wc3Jf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICt2b2lkIGludGVsX3Bz cl9pbml0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICB2b2lkIGludGVsX3Bzcl9jb21w dXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJCQkgICAgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gLXZvaWQgaW50ZWxfcHNyX2lycV9oYW5k bGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBzcl9paXIpOwo+ICt2 b2lkIGludGVsX3Bzcl9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1MzIg cHNyX2lpcik7Cj4gIHZvaWQgaW50ZWxfcHNyX3Nob3J0X3B1bHNlKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApOwo+IC1pbnQgaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLAo+IC0JCQkgICAgdTMyICpvdXRfdmFsdWUp Owo+ICt2b2lkIGludGVsX3Bzcl93YWl0X2Zvcl9pZGxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpuZXdfY3J0Y19zdGF0ZSk7Cj4gIGJvb2wgaW50ZWxfcHNyX2VuYWJsZWQoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIGludCBpbnRlbF9wc3IyX3NlbF9mZXRjaF91cGRhdGUo c3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAkJCQlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0Yyk7Cj4gLXZvaWQgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtfY3RsKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiArdm9pZCBpbnRlbF9w c3IyX3Byb2dyYW1fdHJhbnNfbWFuX3Rya19jdGwoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK PiArCQkJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsKPiAg dm9pZCBpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCj4gIAkJCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCj4gIAkJCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKPiBpbmRleCBi N2UyMDg4MTYwNzQuLjk0ODIzNGM2MDY0OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9zcHJpdGUuYwo+IEBAIC04NCw3ICs4NCw2IEBAIHZvaWQgaW50ZWxfcGlw ZV91cGRhdGVfc3RhcnQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0 YXRlKQo+ICAJYm9vbCBuZWVkX3Zsdl9kc2lfd2EgPSAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikg fHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpICYmCj4gIAkJaW50ZWxfY3J0Y19oYXNfdHlwZShu ZXdfY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RTSSk7Cj4gIAlERUZJTkVfV0FJVCh3YWl0KTsK PiAtCXUzMiBwc3Jfc3RhdHVzOwo+ICAKPiAgCWlmIChuZXdfY3J0Y19zdGF0ZS0+dWFwaS5hc3lu Y19mbGlwKQo+ICAJCXJldHVybjsKPiBAQCAtMTA5LDEwICsxMDgsNyBAQCB2b2lkIGludGVsX3Bp cGVfdXBkYXRlX3N0YXJ0KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19z dGF0ZSkKPiAgCSAqIFZCTCBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgdGhlIFBTUiBleGl0IGFuZCBw cmV2ZW50IGEgUFNSCj4gIAkgKiByZS1lbnRyeSBhcyB3ZWxsLgo+ICAJICovCj4gLQlpZiAoaW50 ZWxfcHNyX3dhaXRfZm9yX2lkbGUobmV3X2NydGNfc3RhdGUsICZwc3Jfc3RhdHVzKSkKPiAtCQlk cm1fZXJyKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkiUFNSIGlkbGUgdGltZWQgb3V0IDB4JXgsIGF0 b21pYyB1cGRhdGUgbWF5IGZhaWxcbiIsCj4gLQkJCXBzcl9zdGF0dXMpOwo+ICsJaW50ZWxfcHNy X3dhaXRfZm9yX2lkbGUobmV3X2NydGNfc3RhdGUpOwo+ICAKPiAgCWxvY2FsX2lycV9kaXNhYmxl KCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDVkMDRiMjgyYzA2MC4uYTJl MzllOGFkY2JlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTQ3NSw0MiArNDc1 LDYgQEAgc3RydWN0IGk5MTVfZHJycyB7Cj4gIAllbnVtIGRycnNfc3VwcG9ydF90eXBlIHR5cGU7 Cj4gIH07Cj4gIAo+IC1zdHJ1Y3QgaTkxNV9wc3Igewo+IC0Jc3RydWN0IG11dGV4IGxvY2s7Cj4g LQo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSwkweDBmCj4gLSNkZWZpbmUgSTkx NV9QU1JfREVCVUdfREVGQVVMVAkJMHgwMAo+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0RJU0FC TEUJCTB4MDEKPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19FTkFCTEUJCTB4MDIKPiAtI2RlZmlu ZSBJOTE1X1BTUl9ERUJVR19GT1JDRV9QU1IxCTB4MDMKPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJV R19JUlEJCTB4MTAKPiAtCj4gLQl1MzIgZGVidWc7Cj4gLQlib29sIHNpbmtfc3VwcG9ydDsKPiAt CWJvb2wgZW5hYmxlZDsKPiAtCXN0cnVjdCBpbnRlbF9kcCAqZHA7Cj4gLQllbnVtIHBpcGUgcGlw ZTsKPiAtCWVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyOwo+IC0JYm9vbCBhY3RpdmU7Cj4gLQlz dHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPiAtCXVuc2lnbmVkIGJ1c3lfZnJvbnRidWZmZXJfYml0 czsKPiAtCWJvb2wgc2lua19wc3IyX3N1cHBvcnQ7Cj4gLQlib29sIGxpbmtfc3RhbmRieTsKPiAt CWJvb2wgY29sb3JpbWV0cnlfc3VwcG9ydDsKPiAtCWJvb2wgcHNyMl9lbmFibGVkOwo+IC0JYm9v bCBwc3IyX3NlbF9mZXRjaF9lbmFibGVkOwo+IC0JdTggc2lua19zeW5jX2xhdGVuY3k7Cj4gLQlr dGltZV90IGxhc3RfZW50cnlfYXR0ZW1wdDsKPiAtCWt0aW1lX3QgbGFzdF9leGl0Owo+IC0JYm9v bCBzaW5rX25vdF9yZWxpYWJsZTsKPiAtCWJvb2wgaXJxX2F1eF9lcnJvcjsKPiAtCXUxNiBzdV94 X2dyYW51bGFyaXR5Owo+IC0JYm9vbCBkYzNjb19lbmFibGVkOwo+IC0JdTMyIGRjM2NvX2V4aXRf ZGVsYXk7Cj4gLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRjM2NvX3dvcms7Cj4gLQlzdHJ1Y3QgZHJt X2RwX3ZzY19zZHAgdnNjOwo+IC19Owo+IC0KPiAgI2RlZmluZSBRVUlSS19MVkRTX1NTQ19ESVNB QkxFICgxPDwxKQo+ICAjZGVmaW5lIFFVSVJLX0lOVkVSVF9CUklHSFRORVNTICgxPDwyKQo+ICAj ZGVmaW5lIFFVSVJLX0JBQ0tMSUdIVF9QUkVTRU5UICgxPDwzKQo+IEBAIC0xMDQxLDggKzEwMDUs NiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAo+ICAJc3RydWN0IGk5MTVfcG93ZXJf ZG9tYWlucyBwb3dlcl9kb21haW5zOwo+ICAKPiAtCXN0cnVjdCBpOTE1X3BzciBwc3I7Cj4gLQo+ ICAJc3RydWN0IGk5MTVfZ3B1X2Vycm9yIGdwdV9lcnJvcjsKPiAgCj4gIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqdmx2X3BjdHg7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gaW5kZXgg YjI0NTEwOWY3M2UzLi5iMGFlZTQ3YzdhZDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMK PiBAQCAtMjA1NywxMCArMjA1NywyMiBAQCBzdGF0aWMgdm9pZCBpdmJfZGlzcGxheV9pcnFfaGFu ZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJaXZiX2Vycl9pbnRf aGFuZGxlcihkZXZfcHJpdik7Cj4gIAo+ICAJaWYgKGRlX2lpciAmIERFX0VEUF9QU1JfSU5UX0hT Vykgewo+IC0JCXUzMiBwc3JfaWlyID0gaW50ZWxfdW5jb3JlX3JlYWQoJmRldl9wcml2LT51bmNv cmUsIEVEUF9QU1JfSUlSKTsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAg Cj4gLQkJaW50ZWxfcHNyX2lycV9oYW5kbGVyKGRldl9wcml2LCBwc3JfaWlyKTsKPiAtCQlpbnRl bF91bmNvcmVfd3JpdGUoJmRldl9wcml2LT51bmNvcmUsIEVEUF9QU1JfSUlSLCBwc3JfaWlyKTsK PiArCQlmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgewo+ICsJCQlz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwo+ICsK PiArCQkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCAmJgo+ICsJCQkgICAg Q0FOX1BTUihpbnRlbF9kcCkpIHsKPiArCQkJCXUzMiBwc3JfaWlyID0gaW50ZWxfdW5jb3JlX3Jl YWQoJmRldl9wcml2LT51bmNvcmUsCj4gKwkJCQkJCQkJRURQX1BTUl9JSVIpOwo+ICsKPiArCQkJ CWludGVsX3Bzcl9pcnFfaGFuZGxlcihpbnRlbF9kcCwgcHNyX2lpcik7Cj4gKwkJCQlpbnRlbF91 bmNvcmVfd3JpdGUoJmRldl9wcml2LT51bmNvcmUsCj4gKwkJCQkJCSAgIEVEUF9QU1JfSUlSLCBw c3JfaWlyKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICAJfQo+ICAKPiAgCWlmIChk ZV9paXIgJiBERV9BVVhfQ0hBTk5FTF9BX0lWQikKPiBAQCAtMjI2OCwyMSArMjI4MCwzNCBAQCBn ZW44X2RlX21pc2NfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCB1MzIgaWlyKQo+ICAJfQo+ICAKPiAgCWlmIChpaXIgJiBHRU44X0RFX0VEUF9QU1IpIHsKPiAr CQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAgCQl1MzIgcHNyX2lpcjsKPiAgCQlp OTE1X3JlZ190IGlpcl9yZWc7Cj4gIAo+IC0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEy KQo+IC0JCQlpaXJfcmVnID0gVFJBTlNfUFNSX0lJUihkZXZfcHJpdi0+cHNyLnRyYW5zY29kZXIp Owo+IC0JCWVsc2UKPiAtCQkJaWlyX3JlZyA9IEVEUF9QU1JfSUlSOwo+ICsJCWZvcl9lYWNoX2lu dGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7Cj4gKwkJCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Cj4gIAo+IC0JCXBzcl9paXIgPSBp bnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3JlZyk7Cj4gLQkJaW50ZWxf dW5jb3JlX3dyaXRlKCZkZXZfcHJpdi0+dW5jb3JlLCBpaXJfcmVnLCBwc3JfaWlyKTsKPiArCQkJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTIgJiYgQ0FOX1BTUihpbnRlbF9kcCkpIHsKPiAr CQkJCWlpcl9yZWcgPSBUUkFOU19QU1JfSUlSKGludGVsX2RwLT5wc3IudHJhbnNjb2Rlcik7Cj4g KwkJCX0gZWxzZSBpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQICYmCj4gKwkJ CQkgICBDQU5fUFNSKGludGVsX2RwKSkgewo+ICsJCQkJaWlyX3JlZyA9IEVEUF9QU1JfSUlSOwo+ ICsJCQl9IGVsc2Ugewo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCXBzcl9paXIg PSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3JlZyk7Cj4gKwkJCWlu dGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3JlZywgcHNyX2lpcik7Cj4g Kwo+ICsJCQlpZiAocHNyX2lpcikKPiArCQkJCWZvdW5kID0gdHJ1ZTsKPiAgCj4gLQkJaWYgKHBz cl9paXIpCj4gLQkJCWZvdW5kID0gdHJ1ZTsKPiArCQkJaW50ZWxfcHNyX2lycV9oYW5kbGVyKGlu dGVsX2RwLCBwc3JfaWlyKTsKPiAgCj4gLQkJaW50ZWxfcHNyX2lycV9oYW5kbGVyKGRldl9wcml2 LCBwc3JfaWlyKTsKPiArCQkJLyogcHJpb3IgR0VOMTIgb25seSBoYXZlIG9uZSBFRFAgUFNSICov Cj4gKwkJCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIpCj4gKwkJCQlicmVhazsKPiArCQl9 Cj4gIAl9Cj4gIAo+ICAJaWYgKCFmb3VuZCkKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBT b3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=