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 9287AC0018C for ; Wed, 16 Dec 2020 10:38:39 +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 2F84323104 for ; Wed, 16 Dec 2020 10:38:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F84323104 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.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 8D2876E118; Wed, 16 Dec 2020 10:38:38 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 415986E118 for ; Wed, 16 Dec 2020 10:38:37 +0000 (UTC) IronPort-SDR: zjLzfg+ecYUBUCBOnrZakJcVvA2U8KUeGy9VnkGAJ5nPzXMCXc+CtjhQiX+9UNr8egB/yDoT2l s8Fp8ACkaQ5A== X-IronPort-AV: E=McAfee;i="6000,8403,9836"; a="172471321" X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="172471321" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 02:38:36 -0800 IronPort-SDR: cznElz8dAtZ/RZZ1dMMw7hpS0jLu2RB063jzYHeY8RUJvLX0cSpD9tpR3YbdxS6RNkXtzbpoE2 qNpRZP4P/k8g== X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="412537221" Received: from slevy-mobl.ger.corp.intel.com (HELO localhost) ([10.214.192.176]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 02:38:33 -0800 From: Jani Nikula To: Dave Airlie , intel-gfx@lists.freedesktop.org In-Reply-To: <20201211072922.19101-8-airlied@gmail.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20201211072922.19101-1-airlied@gmail.com> <20201211072922.19101-8-airlied@gmail.com> Date: Wed, 16 Dec 2020 12:38:29 +0200 Message-ID: <871rfq593u.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 07/11] drm/i915: split fdi code out from intel_display.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gRnJpLCAxMSBEZWMgMjAyMCwgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAZ21haWwuY29tPiB3cm90 ZToKPiBGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+Cj4gVGhpcyBqdXN0 IHJlZmFjdG9ycyBvdXQgdGhlIGZkaSBjb2RlIHRvIGEgc2VwYXJhdGUgZmlsZS4KCkxHVE0sIHNh dmUgZm9yIGFub3RoZXIgaGVhZGVyIGZpeCB0aGF0IEkgbWFkZSBsb2NhbGx5LiA7KQoKU2VlIENP TkZJR19EUk1fSTkxNV9XRVJST1I9eSBmb3Igd2hhdCB3ZSBkbyBpbiBDSSB0byBrZWVwIHN0dWZm IGNsZWFuLgoKQlIsCkphbmkuCgo+Cj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxp ZWRAcmVkaGF0LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAg ICAgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMgIHwgNjg1ICstLS0tLS0tLS0tLS0tLS0tLQo+ICAuLi4vZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggICAgfCAgIDkgKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jICAgICAgfCA2ODMgKysrKysrKysrKysrKysrKysKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuaCAgICAgIHwgIDIxICsKPiAg NSBmaWxlcyBjaGFuZ2VkLCA3MTcgaW5zZXJ0aW9ucygrKSwgNjgyIGRlbGV0aW9ucygtKQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGku Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9mZGkuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA1ZDUzM2RlMTYzMzUuLmM0NmMx OWE0ZTgzMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTIwNiw2ICsyMDYsNyBAQCBp OTE1LXkgKz0gXAo+ICAJZGlzcGxheS9pbnRlbF9kcGxsX21nci5vIFwKPiAgCWRpc3BsYXkvaW50 ZWxfZHNiLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9mYmMubyBcCj4gKwlkaXNwbGF5L2ludGVsX2Zk aS5vIFwKPiAgCWRpc3BsYXkvaW50ZWxfZmlmb191bmRlcnJ1bi5vIFwKPiAgCWRpc3BsYXkvaW50 ZWxfZnJvbnRidWZmZXIubyBcCj4gIAlkaXNwbGF5L2ludGVsX2dsb2JhbF9zdGF0ZS5vIFwKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IGEw ZDljZDdiNGUzNC4uYjU4MjExNGE5ZDYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtNzQsNiArNzQsNyBAQAo+ICAjaW5jbHVkZSAi aW50ZWxfZGlzcGxheV90eXBlcy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZHBfbGlua190cmFpbmlu Zy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZmJjLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9mZGkuaCIK PiAgI2luY2x1ZGUgImludGVsX2ZiZGV2LmgiCj4gICNpbmNsdWRlICJpbnRlbF9maWZvX3VuZGVy cnVuLmgiCj4gICNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgo+IEBAIC0xNzIsMTYgKzE3 Myw2IEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9jemNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gIAkJZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwo+ICB9Cj4gIAo+IC0v KiB1bml0cyBvZiAxMDBNSHogKi8KPiAtc3RhdGljIHUzMiBpbnRlbF9mZGlfbGlua19mcmVxKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiAtewo+IC0JaWYgKEhBU19EREkoZGV2 X3ByaXYpKQo+IC0JCXJldHVybiBwaXBlX2NvbmZpZy0+cG9ydF9jbG9jazsgLyogU1BMTCAqLwo+ IC0JZWxzZQo+IC0JCXJldHVybiBkZXZfcHJpdi0+ZmRpX3BsbF9mcmVxOwo+IC19Cj4gLQo+ICAv KiBXQSBEaXNwbGF5ICMwODI3OiBHZW45OmFsbCAqLwo+ICBzdGF0aWMgdm9pZAo+ICBza2xfd2Ff ODI3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsIGJv b2wgZW5hYmxlKQo+IEBAIC0zNzY2LDUzMiArMzc1Nyw2IEBAIHN0YXRpYyB2b2lkIGljbF9zZXRf cGlwZV9jaGlja2VuKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+ICAJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIFBJUEVfQ0hJQ0tFTihwaXBlKSwgdG1wKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZv aWQgaW50ZWxfZmRpX25vcm1hbF90cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiAtewo+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0JZW51bSBwaXBlIHBp cGUgPSBjcnRjLT5waXBlOwo+IC0JaTkxNV9yZWdfdCByZWc7Cj4gLQl1MzIgdGVtcDsKPiAtCj4g LQkvKiBlbmFibGUgbm9ybWFsIHRyYWluICovCj4gLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ IC0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQlpZiAoSVNfSVZZQlJJ REdFKGRldl9wcml2KSkgewo+IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZCOwo+ IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORV9JVkIgfCBGRElfVFhfRU5IQU5DRV9GUkFN RV9FTkFCTEU7Cj4gLQl9IGVsc2Ugewo+IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7 Cj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05FIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVf RU5BQkxFOwo+IC0JfQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4g LQo+IC0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOwo+IC0JaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgewo+IC0JCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Cj4gLQkJdGVtcCB8PSBGRElfTElO S19UUkFJTl9OT1JNQUxfQ1BUOwo+IC0JfSBlbHNlIHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOwo+IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORTsKPiAtCX0KPiAtCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfRU5IQU5DRV9GUkFNRV9F TkFCTEUpOwo+IC0KPiAtCS8qIHdhaXQgb25lIGlkbGUgcGF0dGVybiB0aW1lICovCj4gLQlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl1ZGVsYXkoMTAwMCk7Cj4gLQo+ IC0JLyogSVZCIHdhbnRzIGVycm9yIGNvcnJlY3Rpb24gZW5hYmxlZCAqLwo+IC0JaWYgKElTX0lW WUJSSURHRShkZXZfcHJpdikpCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKPiAt CQkgICAgICAgICAgICAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpIHwgRkRJX0ZTX0VS UkNfRU5BQkxFIHwgRkRJX0ZFX0VSUkNfRU5BQkxFKTsKPiAtfQo+IC0KPiAtLyogVGhlIEZESSBs aW5rIHRyYWluaW5nIGZ1bmN0aW9ucyBmb3IgSUxLL0liZXhwZWFrLiAqLwo+IC1zdGF0aWMgdm9p ZCBpbGtfZmRpX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gLQkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBj cnRjLT5waXBlOwo+IC0JaTkxNV9yZWdfdCByZWc7Cj4gLQl1MzIgdGVtcCwgdHJpZXM7Cj4gLQo+ IC0JLyogRkRJIG5lZWRzIGJpdHMgZnJvbSBwaXBlIGZpcnN0ICovCj4gLQlhc3NlcnRfcGlwZV9l bmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rlcik7Cj4gLQo+IC0JLyog VHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9jayBhbmQgYml0X2xvY2sg Yml0Cj4gLQkgICBmb3IgdHJhaW4gcmVzdWx0ICovCj4gLQlyZWcgPSBGRElfUlhfSU1SKHBpcGUp Owo+IC0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl0ZW1wICY9IH5G RElfUlhfU1lNQk9MX0xPQ0s7Cj4gLQl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7Cj4gLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiAtCWludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZyk7Cj4gLQl1ZGVsYXkoMTUwKTsKPiAtCj4gLQkvKiBlbmFibGUgQ1BVIEZESSBUWCBh bmQgUENIIEZESSBSWCAqLwo+IC0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lE VEhfTUFTSzsKPiAtCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgoY3J0Y19zdGF0ZS0+ZmRpX2xh bmVzKTsKPiAtCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Cj4gLQl0ZW1wIHw9IEZESV9M SU5LX1RSQUlOX1BBVFRFUk5fMTsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRl bXAgfCBGRElfVFhfRU5BQkxFKTsKPiAtCj4gLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+IC0J dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl0ZW1wICY9IH5GRElfTElO S19UUkFJTl9OT05FOwo+IC0JdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Cj4gLQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7Cj4gLQo+ IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDE1MCk7 Cj4gLQo+IC0JLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZW5hYmxlIGNsb2NrIHBvaW50ZXIgYWZ0 ZXIgRkRJIGVuYWJsZSovCj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNL RU4ocGlwZSksCj4gLQkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSKTsKPiAt CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKPiAtCQkgICAg ICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIgfCBGRElfUlhfUEhBU0VfU1lOQ19QT0lO VEVSX0VOKTsKPiAtCj4gLQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwo+IC0JZm9yICh0cmllcyA9 IDA7IHRyaWVzIDwgNTsgdHJpZXMrKykgewo+IC0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCByZWcpOwo+IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAw eCV4XG4iLCB0ZW1wKTsKPiAtCj4gLQkJaWYgKCh0ZW1wICYgRkRJX1JYX0JJVF9MT0NLKSkgewo+ IC0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGRvbmUuXG4iKTsK PiAtCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9CSVRfTE9D Syk7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCX0KPiAtCWlmICh0cmllcyA9PSA1KQo+IC0JCWRy bV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBmYWlsIVxuIik7Cj4gLQo+IC0JLyog VHJhaW4gMiAqLwo+IC0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsK PiAtCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwo+IC0JaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAt CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fTk9ORTsKPiAtCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwo+IC0J aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9z dGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDE1MCk7Cj4gLQo+IC0JcmVnID0g RkRJX1JYX0lJUihwaXBlKTsKPiAtCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKysp IHsKPiAtCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Cj4gLQo+IC0J CWlmICh0ZW1wICYgRkRJX1JYX1NZTUJPTF9MT0NLKSB7Cj4gLQkJCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsCj4gLQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7Cj4g LQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZG9uZS5cbiIpOwo+ IC0JCQlicmVhazsKPiAtCQl9Cj4gLQl9Cj4gLQlpZiAodHJpZXMgPT0gNSkKPiAtCQlkcm1fZXJy KCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZmFpbCFcbiIpOwo+IC0KPiAtCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmVcbiIpOwo+IC0KPiAtfQo+IC0KPiAt c3RhdGljIGNvbnN0IGludCBzbmJfYl9mZGlfdHJhaW5fcGFyYW1bXSA9IHsKPiAtCUZESV9MSU5L X1RSQUlOXzQwME1WXzBEQl9TTkJfQiwKPiAtCUZESV9MSU5LX1RSQUlOXzQwME1WXzZEQl9TTkJf QiwKPiAtCUZESV9MSU5LX1RSQUlOXzYwME1WXzNfNURCX1NOQl9CLAo+IC0JRkRJX0xJTktfVFJB SU5fODAwTVZfMERCX1NOQl9CLAo+IC19Owo+IC0KPiAtLyogVGhlIEZESSBsaW5rIHRyYWluaW5n IGZ1bmN0aW9ucyBmb3IgU05CL0NvdWdhcnBvaW50LiAqLwo+IC1zdGF0aWMgdm9pZCBnZW42X2Zk aV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+IC0JCQkJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiAt CWk5MTVfcmVnX3QgcmVnOwo+IC0JdTMyIHRlbXAsIGksIHJldHJ5Owo+IC0KPiAtCS8qIFRyYWlu IDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAo+ IC0JICAgZm9yIHRyYWluIHJlc3VsdCAqLwo+IC0JcmVnID0gRkRJX1JYX0lNUihwaXBlKTsKPiAt CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX1JY X1NZTUJPTF9MT0NLOwo+IC0JdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwo+IC0JaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDE1MCk7Cj4gLQo+IC0JLyogZW5hYmxlIENQVSBG REkgVFggYW5kIFBDSCBGREkgUlggKi8KPiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9EUF9Q T1JUX1dJRFRIX01BU0s7Cj4gLQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUt PmZkaV9sYW5lcyk7Cj4gLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+IC0JdGVtcCB8 PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Cj4gLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9W T0xfRU1QX01BU0s7Cj4gLQkvKiBTTkItQiAqLwo+IC0JdGVtcCB8PSBGRElfTElOS19UUkFJTl80 MDBNVl8wREJfU05CX0I7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwg RkRJX1RYX0VOQUJMRSk7Cj4gLQo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9N SVNDKHBpcGUpLAo+IC0JCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElf REVMQVlfOTApOwo+IC0KPiAtCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikp IHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwo+IC0JCXRl bXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKPiAtCX0gZWxzZSB7Cj4gLQkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMTsKPiAtCX0KPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBG RElfUlhfRU5BQkxFKTsKPiAtCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Cj4gLQl1ZGVsYXkoMTUwKTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4g LQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKTsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Cj4g LQkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1baV07Cj4gLQkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZf cHJpdiwgcmVnKTsKPiAtCQl1ZGVsYXkoNTAwKTsKPiAtCj4gLQkJZm9yIChyZXRyeSA9IDA7IHJl dHJ5IDwgNTsgcmV0cnkrKykgewo+IC0JCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwo+IC0JCQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQkJZHJtX2RiZ19rbXMoJmRl dl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwo+IC0JCQlpZiAodGVtcCAm IEZESV9SWF9CSVRfTE9DSykgewo+IC0JCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywK PiAtCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7Cj4gLQkJCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKPiAtCQkJCQkgICAgIkZESSB0cmFpbiAxIGRvbmUuXG4iKTsKPiAt CQkJCWJyZWFrOwo+IC0JCQl9Cj4gLQkJCXVkZWxheSg1MCk7Cj4gLQkJfQo+IC0JCWlmIChyZXRy eSA8IDUpCj4gLQkJCWJyZWFrOwo+IC0JfQo+IC0JaWYgKGkgPT0gNCkKPiAtCQlkcm1fZXJyKCZk ZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOwo+IC0KPiAtCS8qIFRyYWluIDIg Ki8KPiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Cj4gLQl0ZW1w IHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKPiAtCWlmIChJU19HRU4oZGV2X3ByaXYsIDYp KSB7Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOwo+IC0JCS8qIFNO Qi1CICovCj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl80MDBNVl8wREJfU05CX0I7Cj4gLQl9 Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiAtCj4gLQlyZWcgPSBG RElfUlhfQ1RMKHBpcGUpOwo+IC0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Cj4gLQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktf VFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRF Uk5fMl9DUFQ7Cj4gLQl9IGVsc2Ugewo+IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7 Cj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Cj4gLQl9Cj4gLQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiAtCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl1ZGVsYXkoMTUwKTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBp IDwgNDsgaSsrKSB7Cj4gLQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCQl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9W T0xfRU1QX01BU0s7Cj4gLQkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1baV07Cj4gLQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl1ZGVsYXkoNTAwKTsKPiAtCj4gLQkJZm9y IChyZXRyeSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgewo+IC0JCQlyZWcgPSBGRElfUlhfSUlS KHBpcGUpOwo+IC0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwo+ IC0JCQlpZiAodGVtcCAmIEZESV9SWF9TWU1CT0xfTE9DSykgewo+IC0JCQkJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywKPiAtCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9D Syk7Cj4gLQkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJCQkgICAgIkZESSB0 cmFpbiAyIGRvbmUuXG4iKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQl9Cj4gLQkJCXVkZWxheSg1MCk7 Cj4gLQkJfQo+IC0JCWlmIChyZXRyeSA8IDUpCj4gLQkJCWJyZWFrOwo+IC0JfQo+IC0JaWYgKGkg PT0gNCkKPiAtCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZmFpbCFcbiIp Owo+IC0KPiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmUuXG4i KTsKPiAtfQo+IC0KPiAtLyogTWFudWFsIGxpbmsgdHJhaW5pbmcgZm9yIEl2eSBCcmlkZ2UgQTAg cGFydHMgKi8KPiAtc3RhdGljIHZvaWQgaXZiX21hbnVhbF9mZGlfbGlua190cmFpbihzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YywKPiAtCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ YmFzZS5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7Cj4gLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gLQlpOTE1X3JlZ190IHJl ZzsKPiAtCXUzMiB0ZW1wLCBpLCBqOwo+IC0KPiAtCS8qIFRyYWluIDE6IHVtYXNrIEZESSBSWCBJ bnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAo+IC0JICAgZm9yIHRyYWluIHJl c3VsdCAqLwo+IC0JcmVnID0gRkRJX1JYX0lNUihwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwo+IC0J dGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl ZywgdGVtcCk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ IC0JdWRlbGF5KDE1MCk7Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElf UlhfSUlSIGJlZm9yZSBsaW5rIHRyYWluIDB4JXhcbiIsCj4gLQkJICAgIGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIEZESV9SWF9JSVIocGlwZSkpKTsKPiAtCj4gLQkvKiBUcnkgZWFjaCB2c3dpbmcg YW5kIHByZWVtcGhhc2lzIHNldHRpbmcgdHdpY2UgYmVmb3JlIG1vdmluZyBvbiAqLwo+IC0JZm9y IChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc25iX2JfZmRpX3RyYWluX3BhcmFtKSAqIDI7IGorKykg ewo+IC0JCS8qIGRpc2FibGUgZmlyc3QgaW4gY2FzZSB3ZSBuZWVkIHRvIHJldHJ5ICovCj4gLQkJ cmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKPiAtCQl0ZW1wICY9IH4oRkRJX0xJTktfVFJBSU5fQVVUTyB8IEZESV9MSU5LX1RS QUlOX05PTkVfSVZCKTsKPiAtCQl0ZW1wICY9IH5GRElfVFhfRU5BQkxFOwo+IC0JCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCQlyZWcgPSBGRElfUlhfQ1RMKHBp cGUpOwo+IC0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX0FVVE87Cj4gLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFU VEVSTl9NQVNLX0NQVDsKPiAtCQl0ZW1wICY9IH5GRElfUlhfRU5BQkxFOwo+IC0JCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+IC0KPiAtCQkvKiBlbmFibGUgQ1BVIEZESSBU WCBhbmQgUENIIEZESSBSWCAqLwo+IC0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQkJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJdGVtcCAmPSB+RkRJX0RQX1BP UlRfV0lEVEhfTUFTSzsKPiAtCQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUt PmZkaV9sYW5lcyk7Cj4gLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzFfSVZCOwo+ IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsKPiAtCQl0ZW1wIHw9IHNu Yl9iX2ZkaV90cmFpbl9wYXJhbVtqLzJdOwo+IC0JCXRlbXAgfD0gRkRJX0NPTVBPU0lURV9TWU5D Owo+IC0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxF KTsKPiAtCj4gLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9NSVNDKHBpcGUpLAo+ IC0JCQkgICAgICAgRkRJX1JYX1RQMV9UT19UUDJfNDggfCBGRElfUlhfRkRJX0RFTEFZXzkwKTsK PiAtCj4gLQkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9D UFQ7Cj4gLQkJdGVtcCB8PSBGRElfQ09NUE9TSVRFX1NZTkM7Cj4gLQkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwo+IC0KPiAtCQlpbnRlbF9kZV9w b3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQkJdWRlbGF5KDEpOyAvKiBzaG91bGQgYmUg MC41dXMgKi8KPiAtCj4gLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+IC0JCQlyZWcgPSBG RElfUlhfSUlSKHBpcGUpOwo+IC0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KTsKPiAtCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIs IHRlbXApOwo+IC0KPiAtCQkJaWYgKHRlbXAgJiBGRElfUlhfQklUX0xPQ0sgfHwKPiAtCQkJICAg IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpICYgRkRJX1JYX0JJVF9MT0NLKSkgewo+IC0J CQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKPiAtCQkJCQkgICAgICAgdGVtcCB8IEZE SV9SWF9CSVRfTE9DSyk7Cj4gLQkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJ CQkgICAgIkZESSB0cmFpbiAxIGRvbmUsIGxldmVsICVpLlxuIiwKPiAtCQkJCQkgICAgaSk7Cj4g LQkJCQlicmVhazsKPiAtCQkJfQo+IC0JCQl1ZGVsYXkoMSk7IC8qIHNob3VsZCBiZSAwLjV1cyAq Lwo+IC0JCX0KPiAtCQlpZiAoaSA9PSA0KSB7Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAo+IC0JCQkJICAgICJGREkgdHJhaW4gMSBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIp Owo+IC0JCQljb250aW51ZTsKPiAtCQl9Cj4gLQo+IC0JCS8qIFRyYWluIDIgKi8KPiAtCQlyZWcg PSBGRElfVFhfQ1RMKHBpcGUpOwo+IC0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwo+IC0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZCOwo+IC0JCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0lWQjsKPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgcmVnLCB0ZW1wKTsKPiAtCj4gLQkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCQl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9QQVRURVJOX01BU0tfQ1BUOwo+IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVS Tl8yX0NQVDsKPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiAtCj4g LQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JCXVkZWxheSgyKTsg Lyogc2hvdWxkIGJlIDEuNXVzICovCj4gLQo+IC0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK PiAtCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiAtCQkJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JY X0lJUiAweCV4XG4iLCB0ZW1wKTsKPiAtCj4gLQkJCWlmICh0ZW1wICYgRkRJX1JYX1NZTUJPTF9M T0NLIHx8Cj4gLQkJCSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9T WU1CT0xfTE9DSykpIHsKPiAtCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCj4gLQkJ CQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOwo+IC0JCQkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCj4gLQkJCQkJICAgICJGREkgdHJhaW4gMiBkb25lLCBsZXZlbCAlaS5c biIsCj4gLQkJCQkJICAgIGkpOwo+IC0JCQkJZ290byB0cmFpbl9kb25lOwo+IC0JCQl9Cj4gLQkJ CXVkZWxheSgyKTsgLyogc2hvdWxkIGJlIDEuNXVzICovCj4gLQkJfQo+IC0JCWlmIChpID09IDQp Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkJICAgICJGREkgdHJhaW4g MiBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIpOwo+IC0JfQo+IC0KPiAtdHJhaW5fZG9uZToK PiAtCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmUuXG4iKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgaWxrX2ZkaV9wbGxfZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfY3J0Yy0+YmFzZS5k ZXYpOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+IC0JaTkxNV9yZWdf dCByZWc7Cj4gLQl1MzIgdGVtcDsKPiAtCj4gLQkvKiBlbmFibGUgUENIIEZESSBSWCBQTEwsIHdh aXQgd2FybXVwIHBsdXMgRE1JIGxhdGVuY3kgKi8KPiAtCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7 Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXRlbXAgJj0gfihG RElfRFBfUE9SVF9XSURUSF9NQVNLIHwgKDB4NyA8PCAxNikpOwo+IC0JdGVtcCB8PSBGRElfRFBf UE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOwo+IC0JdGVtcCB8PSAoaW50ZWxfZGVf cmVhZChkZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDEx Owo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9QTExfRU5B QkxFKTsKPiAtCj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl1 ZGVsYXkoMjAwKTsKPiAtCj4gLQkvKiBTd2l0Y2ggZnJvbSBSYXdjbGsgdG8gUENEY2xrICovCj4g LQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUENEQ0xLKTsKPiAtCj4gLQlpbnRlbF9kZV9wb3N0 aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gLQl1ZGVsYXkoMjAwKTsKPiAtCj4gLQkvKiBFbmFi bGUgQ1BVIEZESSBUWCBQTEwsIGFsd2F5cyBvbiBmb3IgSXJvbmxha2UgKi8KPiAtCXJlZyA9IEZE SV9UWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK PiAtCWlmICgodGVtcCAmIEZESV9UWF9QTExfRU5BQkxFKSA9PSAwKSB7Cj4gLQkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9QTExfRU5BQkxFKTsKPiAtCj4gLQkJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JCXVkZWxheSgxMDApOwo+ IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbGtfZmRpX3BsbF9kaXNhYmxlKHN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g aW50ZWxfY3J0Yy0+YmFzZS5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7 Cj4gLQlpOTE1X3JlZ190IHJlZzsKPiAtCXUzMiB0ZW1wOwo+IC0KPiAtCS8qIFN3aXRjaCBmcm9t IFBDRGNsayB0byBSYXdjbGsgKi8KPiAtCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gLQl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIHRlbXAgJiB+RkRJX1BDRENMSyk7Cj4gLQo+IC0JLyogRGlzYWJsZSBDUFUgRkRJ IFRYIFBMTCAqLwo+IC0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywg dGVtcCAmIH5GRElfVFhfUExMX0VOQUJMRSk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9zdGluZ19yZWFk KGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDEwMCk7Cj4gLQo+IC0JcmVnID0gRkRJX1JYX0NU TChwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JaW50 ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUlhfUExMX0VOQUJMRSk7Cj4g LQo+IC0JLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KPiAtCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCXVkZWxheSgxMDApOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBpbGtfZmRpX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4g LXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+ YmFzZS5kZXYpOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+IC0JaTkxNV9yZWdf dCByZWc7Cj4gLQl1MzIgdGVtcDsKPiAtCj4gLQkvKiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBD SCBGREkgcnggKi8KPiAtCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gLQl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiAtCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXAgJiB+RkRJX1RYX0VOQUJMRSk7Cj4gLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIHJlZyk7Cj4gLQo+IC0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdGVtcCAmPSB+KDB4NyA8PCAxNik7Cj4gLQl0 ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09O Rl9CUENfTUFTSykgPDwgMTE7Cj4gLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1w ICYgfkZESV9SWF9FTkFCTEUpOwo+IC0KPiAtCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJp diwgcmVnKTsKPiAtCXVkZWxheSgxMDApOwo+IC0KPiAtCS8qIElyb25sYWtlIHdvcmthcm91bmQs IGRpc2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3duaW5nIEZESSAqLwo+IC0JaWYgKEhBU19Q Q0hfSUJYKGRldl9wcml2KSkKPiAtCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NI SUNLRU4ocGlwZSksCj4gLQkJCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7 Cj4gLQo+IC0JLyogc3RpbGwgc2V0IHRyYWluIHBhdHRlcm4gMSAqLwo+IC0JcmVnID0gRkRJX1RY X0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+IC0J dGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiAtCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8xOwo+IC0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+ IC0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiAtCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCByZWcpOwo+IC0JaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgewo+IC0JCXRlbXAgJj0g fkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Cj4gLQkJdGVtcCB8PSBGRElfTElOS19U UkFJTl9QQVRURVJOXzFfQ1BUOwo+IC0JfSBlbHNlIHsKPiAtCQl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOwo+IC0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwo+IC0JfQo+ IC0JLyogQlBDIGluIEZESSByeCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBQSVBFQ09ORiAq Lwo+IC0JdGVtcCAmPSB+KDB4MDcgPDwgMTYpOwo+IC0JdGVtcCB8PSAoaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDExOwo+IC0J aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gLQo+IC0JaW50ZWxfZGVfcG9z dGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+IC0JdWRlbGF5KDEwMCk7Cj4gLX0KPiAtCj4gIGJv b2wgaW50ZWxfaGFzX3BlbmRpbmdfZmJfdW5waW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gQEAgLTY2OTgsMTQzICs2 MTYzLDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfY29ubmVjdG9yX3ZlcmlmeV9zdGF0ZShzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGlu dCBwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKPiAtewo+IC0JaWYgKGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJiBjcnRjX3N0YXRlLT5o YXNfcGNoX2VuY29kZXIpCj4gLQkJcmV0dXJuIGNydGNfc3RhdGUtPmZkaV9sYW5lczsKPiAtCj4g LQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpbGtfY2hlY2tfZmRpX2xhbmVzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBlLAo+IC0JCQkgICAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gLQlzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUgPSBwaXBlX2NvbmZpZy0+dWFwaS5zdGF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9j cnRjICpvdGhlcl9jcnRjOwo+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm90aGVyX2NydGNf c3RhdGU7Cj4gLQo+IC0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJICAgICJjaGVj a2luZyBmZGkgY29uZmlnIG9uIHBpcGUgJWMsIGxhbmVzICVpXG4iLAo+IC0JCSAgICBwaXBlX25h bWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+IC0JaWYgKHBpcGVfY29uZmlnLT5m ZGlfbGFuZXMgPiA0KSB7Cj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCSAg ICAiaW52YWxpZCBmZGkgbGFuZSBjb25maWcgb24gcGlwZSAlYzogJWkgbGFuZXNcbiIsCj4gLQkJ CSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+IC0JCXJldHVy biAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19C Uk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gLQkJaWYgKHBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPiAy KSB7Cj4gLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkJICAgICJvbmx5IDIg bGFuZXMgb24gaGFzd2VsbCwgcmVxdWlyZWQ6ICVpIGxhbmVzXG4iLAo+IC0JCQkJICAgIHBpcGVf Y29uZmlnLT5mZGlfbGFuZXMpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9IGVsc2Ugewo+ IC0JCQlyZXR1cm4gMDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKElOVEVMX05VTV9QSVBFUyhk ZXZfcHJpdikgPT0gMikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBJdnlicmlkZ2UgMyBwaXBl IGlzIHJlYWxseSBjb21wbGljYXRlZCAqLwo+IC0Jc3dpdGNoIChwaXBlKSB7Cj4gLQljYXNlIFBJ UEVfQToKPiAtCQlyZXR1cm4gMDsKPiAtCWNhc2UgUElQRV9COgo+IC0JCWlmIChwaXBlX2NvbmZp Zy0+ZmRpX2xhbmVzIDw9IDIpCj4gLQkJCXJldHVybiAwOwo+IC0KPiAtCQlvdGhlcl9jcnRjID0g aW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVfQyk7Cj4gLQkJb3RoZXJfY3J0 Y19zdGF0ZSA9Cj4gLQkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3RoZXJf Y3J0Yyk7Cj4gLQkJaWYgKElTX0VSUihvdGhlcl9jcnRjX3N0YXRlKSkKPiAtCQkJcmV0dXJuIFBU Ul9FUlIob3RoZXJfY3J0Y19zdGF0ZSk7Cj4gLQo+IC0JCWlmIChwaXBlX3JlcXVpcmVkX2ZkaV9s YW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDApIHsKPiAtCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sCj4gLQkJCQkgICAgImludmFsaWQgc2hhcmVkIGZkaSBsYW5lIGNvbmZpZyBvbiBwaXBl ICVjOiAlaSBsYW5lc1xuIiwKPiAtCQkJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmln LT5mZGlfbGFuZXMpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQkJcmV0dXJuIDA7 Cj4gLQljYXNlIFBJUEVfQzoKPiAtCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDIpIHsK PiAtCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCQkgICAgIm9ubHkgMiBsYW5l cyBvbiBwaXBlICVjOiByZXF1aXJlZCAlaSBsYW5lc1xuIiwKPiAtCQkJCSAgICBwaXBlX25hbWUo cGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAt CQl9Cj4gLQo+IC0JCW90aGVyX2NydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJp diwgUElQRV9CKTsKPiAtCQlvdGhlcl9jcnRjX3N0YXRlID0KPiAtCQkJaW50ZWxfYXRvbWljX2dl dF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKPiAtCQlpZiAoSVNfRVJSKG90aGVyX2Ny dGNfc3RhdGUpKQo+IC0JCQlyZXR1cm4gUFRSX0VSUihvdGhlcl9jcnRjX3N0YXRlKTsKPiAtCj4g LQkJaWYgKHBpcGVfcmVxdWlyZWRfZmRpX2xhbmVzKG90aGVyX2NydGNfc3RhdGUpID4gMikgewo+ IC0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJCSAgICAiZmRpIGxpbmsgQiB1 c2VzIHRvbyBtYW55IGxhbmVzIHRvIGVuYWJsZSBsaW5rIENcbiIpOwo+IC0JCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCQl9Cj4gLQkJcmV0dXJuIDA7Cj4gLQlkZWZhdWx0Ogo+IC0JCUJVRygpOwo+IC0J fQo+IC19Cj4gLQo+IC0jZGVmaW5lIFJFVFJZIDEKPiAtc3RhdGljIGludCBpbGtfZmRpX2NvbXB1 dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+IC0JCQkJICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBpbnRlbF9jcnRjLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gdG9faTkxNShkZXYpOwo+IC0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7Cj4gLQlpbnQg bGFuZSwgbGlua19idywgZmRpX2RvdGNsb2NrLCByZXQ7Cj4gLQlib29sIG5lZWRzX3JlY29tcHV0 ZSA9IGZhbHNlOwo+IC0KPiAtcmV0cnk6Cj4gLQkvKiBGREkgaXMgYSBiaW5hcnkgc2lnbmFsIHJ1 bm5pbmcgYXQgfjIuN0dIeiwgZW5jb2RpbmcKPiAtCSAqIGVhY2ggb3V0cHV0IG9jdGV0IGFzIDEw IGJpdHMuIFRoZSBhY3R1YWwgZnJlcXVlbmN5Cj4gLQkgKiBpcyBzdG9yZWQgYXMgYSBkaXZpZGVy IGludG8gYSAxMDBNSHogY2xvY2ssIGFuZCB0aGUKPiAtCSAqIG1vZGUgcGl4ZWwgY2xvY2sgaXMg c3RvcmVkIGluIHVuaXRzIG9mIDFLSHouCj4gLQkgKiBIZW5jZSB0aGUgYncgb2YgZWFjaCBsYW5l IGluIHRlcm1zIG9mIHRoZSBtb2RlIHNpZ25hbAo+IC0JICogaXM6Cj4gLQkgKi8KPiAtCWxpbmtf YncgPSBpbnRlbF9mZGlfbGlua19mcmVxKGk5MTUsIHBpcGVfY29uZmlnKTsKPiAtCj4gLQlmZGlf ZG90Y2xvY2sgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrOwo+IC0KPiAtCWxhbmUgPSBpbGtf Z2V0X2xhbmVzX3JlcXVpcmVkKGZkaV9kb3RjbG9jaywgbGlua19idywKPiAtCQkJCSAgICAgIHBp cGVfY29uZmlnLT5waXBlX2JwcCk7Cj4gLQo+IC0JcGlwZV9jb25maWctPmZkaV9sYW5lcyA9IGxh bmU7Cj4gLQo+IC0JaW50ZWxfbGlua19jb21wdXRlX21fbihwaXBlX2NvbmZpZy0+cGlwZV9icHAs IGxhbmUsIGZkaV9kb3RjbG9jaywKPiAtCQkJICAgICAgIGxpbmtfYncsICZwaXBlX2NvbmZpZy0+ ZmRpX21fbiwgZmFsc2UsIGZhbHNlKTsKPiAtCj4gLQlyZXQgPSBpbGtfY2hlY2tfZmRpX2xhbmVz KGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgcGlwZV9jb25maWcpOwo+IC0JaWYgKHJldCA9PSAtRURF QURMSykKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCWlmIChyZXQgPT0gLUVJTlZBTCAmJiBwaXBl X2NvbmZpZy0+cGlwZV9icHAgPiA2KjMpIHsKPiAtCQlwaXBlX2NvbmZpZy0+cGlwZV9icHAgLT0g MiozOwo+IC0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCj4gLQkJCSAgICAiZmRpIGxpbmsgYncg Y29uc3RyYWludCwgcmVkdWNpbmcgcGlwZSBicHAgdG8gJWlcbiIsCj4gLQkJCSAgICBwaXBlX2Nv bmZpZy0+cGlwZV9icHApOwo+IC0JCW5lZWRzX3JlY29tcHV0ZSA9IHRydWU7Cj4gLQkJcGlwZV9j b25maWctPmJ3X2NvbnN0cmFpbmVkID0gdHJ1ZTsKPiAtCj4gLQkJZ290byByZXRyeTsKPiAtCX0K PiAtCj4gLQlpZiAobmVlZHNfcmVjb21wdXRlKQo+IC0JCXJldHVybiBSRVRSWTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICBib29sIGhzd19jcnRjX3N0YXRlX2lwc19jYXBhYmxlKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsK PiBAQCAtMTEzNjksNyArMTA2OTcsNyBAQCBpbnRlbF9tb2Rlc2V0X3BpcGVfY29uZmlnKHN0cnVj dCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+ IC0JaWYgKHJldCA9PSBSRVRSWSkgewo+ICsJaWYgKHJldCA9PSBJOTE1X0RJU1BMQVlfQ09ORklH X1JFVFJZKSB7Cj4gIAkJaWYgKGRybV9XQVJOKCZpOTE1LT5kcm0sICFyZXRyeSwKPiAgCQkJICAg ICAibG9vcCBpbiBwaXBlIGNvbmZpZ3VyYXRpb24gY29tcHV0YXRpb25cbiIpKQo+ICAJCQlyZXR1 cm4gLUVJTlZBTDsKPiBAQCAtMTUxNjgsMTQgKzE0NDk2LDcgQEAgdm9pZCBpbnRlbF9pbml0X2Rp c3BsYXlfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCWRldl9w cml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZSA9IGk5eHhfY3J0Y19kaXNhYmxlOwo+ICAJfQo+ICAK PiAtCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKSB7Cj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuZmRp X2xpbmtfdHJhaW4gPSBpbGtfZmRpX2xpbmtfdHJhaW47Cj4gLQl9IGVsc2UgaWYgKElTX0dFTihk ZXZfcHJpdiwgNikpIHsKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGdl bjZfZmRpX2xpbmtfdHJhaW47Cj4gLQl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikp IHsKPiAtCQkvKiBGSVhNRTogZGV0ZWN0IEIwKyBzdGVwcGluZyBhbmQgdXNlIGF1dG8gdHJhaW5p bmcgKi8KPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGl2Yl9tYW51YWxf ZmRpX2xpbmtfdHJhaW47Cj4gLQl9Cj4gKwlpbnRlbF9mZGlfaW5pdF9ob29rKGRldl9wcml2KTsK PiAgCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7Cj4gIAkJZGV2X3ByaXYtPmRp c3BsYXkuY29tbWl0X21vZGVzZXRfZW5hYmxlcyA9IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVz Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXlfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90 eXBlcy5oCj4gaW5kZXggNmQ0Y2E1ZWJjMzIwLi4yY2NmMGFkN2ZhZDQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAo+IEBA IC0xODE2LDQgKzE4MTYsMTMgQEAgc3RhdGljIGlubGluZSB1MzIgaTl4eF9kcGxsX2NvbXB1dGVf ZnAoc3RydWN0IGRwbGwgKmRwbGwpCj4gIAlyZXR1cm4gZHBsbC0+biA8PCAxNiB8IGRwbGwtPm0x IDw8IDggfCBkcGxsLT5tMjsKPiAgfQo+ICAKPiArc3RhdGljIGlubGluZSB1MzIgaW50ZWxfZmRp X2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQkgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gK3sKPiArCWlm IChIQVNfRERJKGRldl9wcml2KSkKPiArCQlyZXR1cm4gcGlwZV9jb25maWctPnBvcnRfY2xvY2s7 IC8qIFNQTEwgKi8KPiArCWVsc2UKPiArCQlyZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsK PiArfQo+ICsKPiAgI2VuZGlmIC8qICBfX0lOVEVMX0RJU1BMQVlfVFlQRVNfSF9fICovCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmIyZWI5NmFlMTBhMgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jCj4gQEAgLTAsMCAr MSw2ODMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArI2luY2x1ZGUgImlu dGVsX2F0b21pYy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgo+ICsjaW5j bHVkZSAiaW50ZWxfZmRpLmgiCj4gKwo+ICsvKiB1bml0cyBvZiAxMDBNSHogKi8KPiArc3RhdGlj IGludCBwaXBlX3JlcXVpcmVkX2ZkaV9sYW5lcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKPiArewo+ICsJaWYgKGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJiBjcnRjX3N0YXRl LT5oYXNfcGNoX2VuY29kZXIpCj4gKwkJcmV0dXJuIGNydGNfc3RhdGUtPmZkaV9sYW5lczsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbGtfY2hlY2tfZmRpX2xhbmVz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBlLAo+ICsJCQkgICAgICAgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUgPSBwaXBlX2NvbmZpZy0+dWFwaS5zdGF0ZTsKPiArCXN0cnVjdCBpbnRl bF9jcnRjICpvdGhlcl9jcnRjOwo+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm90aGVyX2Ny dGNfc3RhdGU7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJICAgICJj aGVja2luZyBmZGkgY29uZmlnIG9uIHBpcGUgJWMsIGxhbmVzICVpXG4iLAo+ICsJCSAgICBwaXBl X25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+ICsJaWYgKHBpcGVfY29uZmln LT5mZGlfbGFuZXMgPiA0KSB7Cj4gKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJ CSAgICAiaW52YWxpZCBmZGkgbGFuZSBjb25maWcgb24gcGlwZSAlYzogJWkgbGFuZXNcbiIsCj4g KwkJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJ U19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gKwkJaWYgKHBpcGVfY29uZmlnLT5mZGlfbGFuZXMg PiAyKSB7Cj4gKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJICAgICJvbmx5 IDIgbGFuZXMgb24gaGFzd2VsbCwgcmVxdWlyZWQ6ICVpIGxhbmVzXG4iLAo+ICsJCQkJICAgIHBp cGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9IGVsc2Ug ewo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKElOVEVMX05VTV9QSVBF UyhkZXZfcHJpdikgPT0gMikKPiArCQlyZXR1cm4gMDsKPiArCj4gKwkvKiBJdnlicmlkZ2UgMyBw aXBlIGlzIHJlYWxseSBjb21wbGljYXRlZCAqLwo+ICsJc3dpdGNoIChwaXBlKSB7Cj4gKwljYXNl IFBJUEVfQToKPiArCQlyZXR1cm4gMDsKPiArCWNhc2UgUElQRV9COgo+ICsJCWlmIChwaXBlX2Nv bmZpZy0+ZmRpX2xhbmVzIDw9IDIpCj4gKwkJCXJldHVybiAwOwo+ICsKPiArCQlvdGhlcl9jcnRj ID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVfQyk7Cj4gKwkJb3RoZXJf Y3J0Y19zdGF0ZSA9Cj4gKwkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3Ro ZXJfY3J0Yyk7Cj4gKwkJaWYgKElTX0VSUihvdGhlcl9jcnRjX3N0YXRlKSkKPiArCQkJcmV0dXJu IFBUUl9FUlIob3RoZXJfY3J0Y19zdGF0ZSk7Cj4gKwo+ICsJCWlmIChwaXBlX3JlcXVpcmVkX2Zk aV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDApIHsKPiArCQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCj4gKwkJCQkgICAgImludmFsaWQgc2hhcmVkIGZkaSBsYW5lIGNvbmZpZyBvbiBw aXBlICVjOiAlaSBsYW5lc1xuIiwKPiArCQkJCSAgICBwaXBlX25hbWUocGlwZSksIHBpcGVfY29u ZmlnLT5mZGlfbGFuZXMpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwkJcmV0dXJu IDA7Cj4gKwljYXNlIFBJUEVfQzoKPiArCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDIp IHsKPiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCQkgICAgIm9ubHkgMiBs YW5lcyBvbiBwaXBlICVjOiByZXF1aXJlZCAlaSBsYW5lc1xuIiwKPiArCQkJCSAgICBwaXBlX25h bWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsK PiArCQl9Cj4gKwo+ICsJCW90aGVyX2NydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZf cHJpdiwgUElQRV9CKTsKPiArCQlvdGhlcl9jcnRjX3N0YXRlID0KPiArCQkJaW50ZWxfYXRvbWlj X2dldF9jcnRjX3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKPiArCQlpZiAoSVNfRVJSKG90aGVy X2NydGNfc3RhdGUpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihvdGhlcl9jcnRjX3N0YXRlKTsKPiAr Cj4gKwkJaWYgKHBpcGVfcmVxdWlyZWRfZmRpX2xhbmVzKG90aGVyX2NydGNfc3RhdGUpID4gMikg ewo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJCSAgICAiZmRpIGxpbmsg QiB1c2VzIHRvbyBtYW55IGxhbmVzIHRvIGVuYWJsZSBsaW5rIENcbiIpOwo+ICsJCQlyZXR1cm4g LUVJTlZBTDsKPiArCQl9Cj4gKwkJcmV0dXJuIDA7Cj4gKwlkZWZhdWx0Ogo+ICsJCUJVRygpOwo+ ICsJfQo+ICt9Cj4gKwo+ICtpbnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKPiArCQkJCSAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVf Y29uZmlnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFz ZS5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZGV2KTsK PiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJnBpcGVf Y29uZmlnLT5ody5hZGp1c3RlZF9tb2RlOwo+ICsJaW50IGxhbmUsIGxpbmtfYncsIGZkaV9kb3Rj bG9jaywgcmV0Owo+ICsJYm9vbCBuZWVkc19yZWNvbXB1dGUgPSBmYWxzZTsKPiArCj4gK3JldHJ5 Ogo+ICsJLyogRkRJIGlzIGEgYmluYXJ5IHNpZ25hbCBydW5uaW5nIGF0IH4yLjdHSHosIGVuY29k aW5nCj4gKwkgKiBlYWNoIG91dHB1dCBvY3RldCBhcyAxMCBiaXRzLiBUaGUgYWN0dWFsIGZyZXF1 ZW5jeQo+ICsJICogaXMgc3RvcmVkIGFzIGEgZGl2aWRlciBpbnRvIGEgMTAwTUh6IGNsb2NrLCBh bmQgdGhlCj4gKwkgKiBtb2RlIHBpeGVsIGNsb2NrIGlzIHN0b3JlZCBpbiB1bml0cyBvZiAxS0h6 Lgo+ICsJICogSGVuY2UgdGhlIGJ3IG9mIGVhY2ggbGFuZSBpbiB0ZXJtcyBvZiB0aGUgbW9kZSBz aWduYWwKPiArCSAqIGlzOgo+ICsJICovCj4gKwlsaW5rX2J3ID0gaW50ZWxfZmRpX2xpbmtfZnJl cShpOTE1LCBwaXBlX2NvbmZpZyk7Cj4gKwo+ICsJZmRpX2RvdGNsb2NrID0gYWRqdXN0ZWRfbW9k ZS0+Y3J0Y19jbG9jazsKPiArCj4gKwlsYW5lID0gaWxrX2dldF9sYW5lc19yZXF1aXJlZChmZGlf ZG90Y2xvY2ssIGxpbmtfYncsCj4gKwkJCQkgICAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHApOwo+ ICsKPiArCXBpcGVfY29uZmlnLT5mZGlfbGFuZXMgPSBsYW5lOwo+ICsKPiArCWludGVsX2xpbmtf Y29tcHV0ZV9tX24ocGlwZV9jb25maWctPnBpcGVfYnBwLCBsYW5lLCBmZGlfZG90Y2xvY2ssCj4g KwkJCSAgICAgICBsaW5rX2J3LCAmcGlwZV9jb25maWctPmZkaV9tX24sIGZhbHNlLCBmYWxzZSk7 Cj4gKwo+ICsJcmV0ID0gaWxrX2NoZWNrX2ZkaV9sYW5lcyhkZXYsIGludGVsX2NydGMtPnBpcGUs IHBpcGVfY29uZmlnKTsKPiArCWlmIChyZXQgPT0gLUVERUFETEspCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwlpZiAocmV0ID09IC1FSU5WQUwgJiYgcGlwZV9jb25maWctPnBpcGVfYnBwID4gNioz KSB7Cj4gKwkJcGlwZV9jb25maWctPnBpcGVfYnBwIC09IDIqMzsKPiArCQlkcm1fZGJnX2ttcygm aTkxNS0+ZHJtLAo+ICsJCQkgICAgImZkaSBsaW5rIGJ3IGNvbnN0cmFpbnQsIHJlZHVjaW5nIHBp cGUgYnBwIHRvICVpXG4iLAo+ICsJCQkgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKPiArCQlu ZWVkc19yZWNvbXB1dGUgPSB0cnVlOwo+ICsJCXBpcGVfY29uZmlnLT5id19jb25zdHJhaW5lZCA9 IHRydWU7Cj4gKwo+ICsJCWdvdG8gcmV0cnk7Cj4gKwl9Cj4gKwo+ICsJaWYgKG5lZWRzX3JlY29t cHV0ZSkKPiArCQlyZXR1cm4gSTkxNV9ESVNQTEFZX0NPTkZJR19SRVRSWTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2ZkaV9ub3JtYWxfdHJhaW4oc3RydWN0IGlu dGVsX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5i YXNlLmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZGV2KTsKPiArCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiArCWk5MTVfcmVnX3QgcmVn Owo+ICsJdTMyIHRlbXA7Cj4gKwo+ICsJLyogZW5hYmxlIG5vcm1hbCB0cmFpbiAqLwo+ICsJcmVn ID0gRkRJX1RYX0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwo+ICsJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpIHsKPiArCQl0ZW1wICY9IH5GRElf TElOS19UUkFJTl9OT05FX0lWQjsKPiArCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05PTkVfSVZC IHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOwo+ICsJfSBlbHNlIHsKPiArCQl0ZW1wICY9 IH5GRElfTElOS19UUkFJTl9OT05FOwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORSB8 IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKPiArCX0KPiArCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Cj4gKwl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWlmIChIQVNfUENIX0NQVChk ZXZfcHJpdikpIHsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BU Owo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9STUFMX0NQVDsKPiArCX0gZWxzZSB7Cj4g KwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiArCQl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOX05PTkU7Cj4gKwl9Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwg RkRJX1JYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFKTsKPiArCj4gKwkvKiB3YWl0IG9uZSBpZGxlIHBh dHRlcm4gdGltZSAqLwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ ICsJdWRlbGF5KDEwMDApOwo+ICsKPiArCS8qIElWQiB3YW50cyBlcnJvciBjb3JyZWN0aW9uIGVu YWJsZWQgKi8KPiArCWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKQo+ICsJCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsCj4gKwkJCSAgICAgICBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpIHwgRkRJX0ZTX0VSUkNfRU5BQkxFIHwgRkRJX0ZFX0VSUkNfRU5BQkxFKTsKPiArfQo+ICsK PiArLyogVGhlIEZESSBsaW5rIHRyYWluaW5nIGZ1bmN0aW9ucyBmb3IgSUxLL0liZXhwZWFrLiAq Lwo+ICtzdGF0aWMgdm9pZCBpbGtfZmRpX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2NydGMgKmNy dGMsCj4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJZW51 bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ICsJaTkxNV9yZWdfdCByZWc7Cj4gKwl1MzIgdGVt cCwgdHJpZXM7Cj4gKwo+ICsJLyogRkRJIG5lZWRzIGJpdHMgZnJvbSBwaXBlIGZpcnN0ICovCj4g Kwlhc3NlcnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rl cik7Cj4gKwo+ICsJLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9j ayBhbmQgYml0X2xvY2sgYml0Cj4gKwkgICBmb3IgdHJhaW4gcmVzdWx0ICovCj4gKwlyZWcgPSBG RElfUlhfSU1SKHBpcGUpOwo+ICsJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Cj4gKwl0ZW1wICY9IH5GRElfUlhfU1lNQk9MX0xPQ0s7Cj4gKwl0ZW1wICY9IH5GRElfUlhfQklU X0xPQ0s7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiArCWludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVsYXkoMTUwKTsKPiArCj4gKwkvKiBlbmFi bGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLwo+ICsJcmVnID0gRkRJX1RYX0NUTChwaXBl KTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAmPSB+ RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKPiArCXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgoY3J0 Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKPiArCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Cj4g Kwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKPiArCWludGVsX2RlX3dyaXRlKGRl dl9wcml2LCByZWcsIHRlbXAgfCBGRElfVFhfRU5BQkxFKTsKPiArCj4gKwlyZWcgPSBGRElfUlhf Q1RMKHBpcGUpOwo+ICsJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl0 ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwo+ICsJdGVtcCB8PSBGRElfTElOS19UUkFJTl9Q QVRURVJOXzE7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JY X0VOQUJMRSk7Cj4gKwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ ICsJdWRlbGF5KDE1MCk7Cj4gKwo+ICsJLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZW5hYmxlIGNs b2NrIHBvaW50ZXIgYWZ0ZXIgRkRJIGVuYWJsZSovCj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgRkRJX1JYX0NISUNLRU4ocGlwZSksCj4gKwkJICAgICAgIEZESV9SWF9QSEFTRV9TWU5DX1BP SU5URVJfT1ZSKTsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihw aXBlKSwKPiArCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIgfCBGRElfUlhf UEhBU0VfU1lOQ19QT0lOVEVSX0VOKTsKPiArCj4gKwlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwo+ ICsJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNTsgdHJpZXMrKykgewo+ICsJCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKPiArCj4gKwkJaWYgKCh0ZW1wICYgRkRJX1JY X0JJVF9MT0NLKSkgewo+ICsJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFp biAxIGRvbmUuXG4iKTsKPiArCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8 IEZESV9SWF9CSVRfTE9DSyk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCWlmICh0cmll cyA9PSA1KQo+ICsJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBmYWlsIVxu Iik7Cj4gKwo+ICsJLyogVHJhaW4gMiAqLwo+ICsJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiAr CXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fTk9ORTsKPiArCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwo+ICsJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJcmVnID0gRkRJX1JY X0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJ dGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiArCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8yOwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDE1MCk7 Cj4gKwo+ICsJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiArCWZvciAodHJpZXMgPSAwOyB0cmll cyA8IDU7IHRyaWVzKyspIHsKPiArCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KTsKPiArCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwg dGVtcCk7Cj4gKwo+ICsJCWlmICh0ZW1wICYgRkRJX1JYX1NZTUJPTF9MT0NLKSB7Cj4gKwkJCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCj4gKwkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9T WU1CT0xfTE9DSyk7Cj4gKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWlu IDIgZG9uZS5cbiIpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlpZiAodHJpZXMgPT0g NSkKPiArCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDIgZmFpbCFcbiIpOwo+ ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmVcbiIpOwo+ ICsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGludCBzbmJfYl9mZGlfdHJhaW5fcGFyYW1bXSA9 IHsKPiArCUZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQiwKPiArCUZESV9MSU5LX1RSQUlO XzQwME1WXzZEQl9TTkJfQiwKPiArCUZESV9MSU5LX1RSQUlOXzYwME1WXzNfNURCX1NOQl9CLAo+ ICsJRkRJX0xJTktfVFJBSU5fODAwTVZfMERCX1NOQl9CLAo+ICt9Owo+ICsKPiArLyogVGhlIEZE SSBsaW5rIHRyYWluaW5nIGZ1bmN0aW9ucyBmb3IgU05CL0NvdWdhcnBvaW50LiAqLwo+ICtzdGF0 aWMgdm9pZCBnZW42X2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsJ CQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCWVudW0gcGlwZSBwaXBlID0g Y3J0Yy0+cGlwZTsKPiArCWk5MTVfcmVnX3QgcmVnOwo+ICsJdTMyIHRlbXAsIGksIHJldHJ5Owo+ ICsKPiArCS8qIFRyYWluIDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5k IGJpdF9sb2NrIGJpdAo+ICsJICAgZm9yIHRyYWluIHJlc3VsdCAqLwo+ICsJcmVnID0gRkRJX1JY X0lNUihwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJ dGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwo+ICsJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NL Owo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJaW50ZWxf ZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDE1MCk7Cj4gKwo+ICsJ LyogZW5hYmxlIENQVSBGREkgVFggYW5kIFBDSCBGREkgUlggKi8KPiArCXJlZyA9IEZESV9UWF9D VEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRl bXAgJj0gfkZESV9EUF9QT1JUX1dJRFRIX01BU0s7Cj4gKwl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJ RFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Cj4gKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9O T05FOwo+ICsJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7Cj4gKwl0ZW1wICY9IH5G RElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Cj4gKwkvKiBTTkItQiAqLwo+ICsJdGVtcCB8PSBG RElfTElOS19UUkFJTl80MDBNVl8wREJfU05CX0I7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7Cj4gKwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIEZESV9SWF9NSVNDKHBpcGUpLAo+ICsJCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80 OCB8IEZESV9SWF9GRElfREVMQVlfOTApOwo+ICsKPiArCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7 Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWlmIChIQVNfUENI X0NQVChkZXZfcHJpdikpIHsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01B U0tfQ1BUOwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKPiArCX0g ZWxzZSB7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiArCQl0ZW1wIHw9IEZE SV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKPiArCX0KPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXAgfCBGRElfUlhfRU5BQkxFKTsKPiArCj4gKwlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVsYXkoMTUwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBp IDwgNDsgaSsrKSB7Cj4gKwkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiArCQl0ZW1wID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9W T0xfRU1QX01BU0s7Cj4gKwkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1baV07Cj4gKwkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl1ZGVsYXkoNTAwKTsKPiArCj4gKwkJZm9y IChyZXRyeSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgewo+ICsJCQlyZWcgPSBGRElfUlhfSUlS KHBpcGUpOwo+ICsJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwo+ ICsJCQlpZiAodGVtcCAmIEZESV9SWF9CSVRfTE9DSykgewo+ICsJCQkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywKPiArCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7Cj4g KwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJCQkgICAgIkZESSB0cmFpbiAx IGRvbmUuXG4iKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJCXVkZWxheSg1MCk7Cj4gKwkJ fQo+ICsJCWlmIChyZXRyeSA8IDUpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsJaWYgKGkgPT0gNCkK PiArCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIDEgZmFpbCFcbiIpOwo+ICsK PiArCS8qIFRyYWluIDIgKi8KPiArCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwl0ZW1wID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlO X05PTkU7Cj4gKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMjsKPiArCWlmIChJU19H RU4oZGV2X3ByaXYsIDYpKSB7Cj4gKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9N QVNLOwo+ICsJCS8qIFNOQi1CICovCj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl80MDBNVl8w REJfU05CX0I7Cj4gKwl9Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsK PiArCj4gKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+ICsJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Cj4gKwlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Cj4gKwkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiArCQl0ZW1wIHw9IEZESV9M SU5LX1RSQUlOX1BBVFRFUk5fMl9DUFQ7Cj4gKwl9IGVsc2Ugewo+ICsJCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX05PTkU7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Cj4g Kwl9Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiArCj4gKwlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVsYXkoMTUwKTsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4gKwkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsK PiArCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl0ZW1wICY9IH5G RElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7Cj4gKwkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5f cGFyYW1baV07Cj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ ICsJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl1ZGVsYXkoNTAw KTsKPiArCj4gKwkJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgewo+ICsJCQly ZWcgPSBGRElfUlhfSUlSKHBpcGUpOwo+ICsJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKPiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4 JXhcbiIsIHRlbXApOwo+ICsJCQlpZiAodGVtcCAmIEZESV9SWF9TWU1CT0xfTE9DSykgewo+ICsJ CQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKPiArCQkJCQkgICAgICAgdGVtcCB8IEZE SV9SWF9TWU1CT0xfTE9DSyk7Cj4gKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAr CQkJCQkgICAgIkZESSB0cmFpbiAyIGRvbmUuXG4iKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4g KwkJCXVkZWxheSg1MCk7Cj4gKwkJfQo+ICsJCWlmIChyZXRyeSA8IDUpCj4gKwkJCWJyZWFrOwo+ ICsJfQo+ICsJaWYgKGkgPT0gNCkKPiArCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRy YWluIDIgZmFpbCFcbiIpOwo+ICsKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJ IHRyYWluIGRvbmUuXG4iKTsKPiArfQo+ICsKPiArLyogTWFudWFsIGxpbmsgdHJhaW5pbmcgZm9y IEl2eSBCcmlkZ2UgQTAgcGFydHMgKi8KPiArc3RhdGljIHZvaWQgaXZiX21hbnVhbF9mZGlfbGlu a190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCSAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4g KwlpOTE1X3JlZ190IHJlZzsKPiArCXUzMiB0ZW1wLCBpLCBqOwo+ICsKPiArCS8qIFRyYWluIDE6 IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAo+ICsJ ICAgZm9yIHRyYWluIHJlc3VsdCAqLwo+ICsJcmVnID0gRkRJX1JYX0lNUihwaXBlKTsKPiArCXRl bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAmPSB+RkRJX1JYX1NZ TUJPTF9MT0NLOwo+ICsJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwo+ICsJaW50ZWxfZGVfd3Jp dGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDE1MCk7Cj4gKwo+ICsJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sICJGRElfUlhfSUlSIGJlZm9yZSBsaW5rIHRyYWluIDB4JXhcbiIsCj4gKwkJICAg IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIEZESV9SWF9JSVIocGlwZSkpKTsKPiArCj4gKwkvKiBU cnkgZWFjaCB2c3dpbmcgYW5kIHByZWVtcGhhc2lzIHNldHRpbmcgdHdpY2UgYmVmb3JlIG1vdmlu ZyBvbiAqLwo+ICsJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc25iX2JfZmRpX3RyYWluX3Bh cmFtKSAqIDI7IGorKykgewo+ICsJCS8qIGRpc2FibGUgZmlyc3QgaW4gY2FzZSB3ZSBuZWVkIHRv IHJldHJ5ICovCj4gKwkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiArCQl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl0ZW1wICY9IH4oRkRJX0xJTktfVFJBSU5fQVVU TyB8IEZESV9MSU5LX1RSQUlOX05PTkVfSVZCKTsKPiArCQl0ZW1wICY9IH5GRElfVFhfRU5BQkxF Owo+ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCQlyZWcg PSBGRElfUlhfQ1RMKHBpcGUpOwo+ICsJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwo+ICsJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX0FVVE87Cj4gKwkJdGVtcCAmPSB+RkRJ X0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKPiArCQl0ZW1wICY9IH5GRElfUlhfRU5BQkxF Owo+ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwo+ICsKPiArCQkvKiBl bmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLwo+ICsJCXJlZyA9IEZESV9UWF9DVEwo cGlwZSk7Cj4gKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdGVt cCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKPiArCQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJ RFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9Q QVRURVJOXzFfSVZCOwo+ICsJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTSzsK PiArCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtqLzJdOwo+ICsJCXRlbXAgfD0gRkRJ X0NPTVBPU0lURV9TWU5DOwo+ICsJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAg fCBGRElfVFhfRU5BQkxFKTsKPiArCj4gKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9S WF9NSVNDKHBpcGUpLAo+ICsJCQkgICAgICAgRkRJX1JYX1RQMV9UT19UUDJfNDggfCBGRElfUlhf RkRJX0RFTEFZXzkwKTsKPiArCj4gKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiArCQl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOX1BBVFRFUk5fMV9DUFQ7Cj4gKwkJdGVtcCB8PSBGRElfQ09NUE9TSVRFX1NZTkM7Cj4gKwkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwo+ICsK PiArCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdWRlbGF5KDEp OyAvKiBzaG91bGQgYmUgMC41dXMgKi8KPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewo+ICsJCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwo+ICsJCQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKPiArCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJGRElf UlhfSUlSIDB4JXhcbiIsIHRlbXApOwo+ICsKPiArCQkJaWYgKHRlbXAgJiBGRElfUlhfQklUX0xP Q0sgfHwKPiArCQkJICAgIChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpICYgRkRJX1JYX0JJ VF9MT0NLKSkgewo+ICsJCQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKPiArCQkJCQkg ICAgICAgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7Cj4gKwkJCQlkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwKPiArCQkJCQkgICAgIkZESSB0cmFpbiAxIGRvbmUsIGxldmVsICVpLlxuIiwKPiAr CQkJCQkgICAgaSk7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQl1ZGVsYXkoMSk7IC8qIHNo b3VsZCBiZSAwLjV1cyAqLwo+ICsJCX0KPiArCQlpZiAoaSA9PSA0KSB7Cj4gKwkJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJICAgICJGREkgdHJhaW4gMSBmYWlsIG9uIHZzd2lu ZyAlZFxuIiwgaiAvIDIpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCS8qIFRyYWlu IDIgKi8KPiArCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwo+ICsJCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOwo+ICsJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZC Owo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0lWQjsKPiArCQlpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKPiArCj4gKwkJcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKPiArCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCQl0ZW1w ICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwo+ICsJCXRlbXAgfD0gRkRJX0xJ TktfVFJBSU5fUEFUVEVSTl8yX0NQVDsKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LCB0ZW1wKTsKPiArCj4gKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwo+ ICsJCXVkZWxheSgyKTsgLyogc2hvdWxkIGJlIDEuNXVzICovCj4gKwo+ICsJCWZvciAoaSA9IDA7 IGkgPCA0OyBpKyspIHsKPiArCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKPiArCQkJdGVtcCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKPiArCj4gKwkJCWlmICh0ZW1wICYg RkRJX1JYX1NZTUJPTF9MT0NLIHx8Cj4gKwkJCSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKSAmIEZESV9SWF9TWU1CT0xfTE9DSykpIHsKPiArCQkJCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsCj4gKwkJCQkJICAgICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOwo+ICsJ CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gKwkJCQkJICAgICJGREkgdHJhaW4gMiBk b25lLCBsZXZlbCAlaS5cbiIsCj4gKwkJCQkJICAgIGkpOwo+ICsJCQkJZ290byB0cmFpbl9kb25l Owo+ICsJCQl9Cj4gKwkJCXVkZWxheSgyKTsgLyogc2hvdWxkIGJlIDEuNXVzICovCj4gKwkJfQo+ ICsJCWlmIChpID09IDQpCj4gKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkJ ICAgICJGREkgdHJhaW4gMiBmYWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIpOwo+ICsJfQo+ICsK PiArdHJhaW5fZG9uZToKPiArCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWlu IGRvbmUuXG4iKTsKPiArfQo+ICsKPiArdm9pZCBpbGtfZmRpX3BsbF9lbmFibGUoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9jcnRj LT5iYXNlLmRldik7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gKwlp OTE1X3JlZ190IHJlZzsKPiArCXUzMiB0ZW1wOwo+ICsKPiArCS8qIGVuYWJsZSBQQ0ggRkRJIFJY IFBMTCwgd2FpdCB3YXJtdXAgcGx1cyBETUkgbGF0ZW5jeSAqLwo+ICsJcmVnID0gRkRJX1JYX0NU TChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVt cCAmPSB+KEZESV9EUF9QT1JUX1dJRFRIX01BU0sgfCAoMHg3IDw8IDE2KSk7Cj4gKwl0ZW1wIHw9 IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Cj4gKwl0ZW1wIHw9IChp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFT SykgPDwgMTE7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JY X1BMTF9FTkFCTEUpOwo+ICsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKPiArCXVkZWxheSgyMDApOwo+ICsKPiArCS8qIFN3aXRjaCBmcm9tIFJhd2NsayB0byBQQ0Rj bGsgKi8KPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9QQ0RDTEspOwo+ICsKPiArCWludGVs X2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCXVkZWxheSgyMDApOwo+ICsKPiAr CS8qIEVuYWJsZSBDUFUgRkRJIFRYIFBMTCwgYWx3YXlzIG9uIGZvciBJcm9ubGFrZSAqLwo+ICsJ cmVnID0gRkRJX1RYX0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCByZWcpOwo+ICsJaWYgKCh0ZW1wICYgRkRJX1RYX1BMTF9FTkFCTEUpID09IDApIHsKPiArCQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX1BMTF9FTkFCTEUpOwo+ ICsKPiArCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwkJdWRlbGF5 KDEwMCk7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgaWxrX2ZkaV9wbGxfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGludGVsX2NydGMtPmJhc2UuZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwo+ICsJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBl Owo+ICsJaTkxNV9yZWdfdCByZWc7Cj4gKwl1MzIgdGVtcDsKPiArCj4gKwkvKiBTd2l0Y2ggZnJv bSBQQ0RjbGsgdG8gUmF3Y2xrICovCj4gKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwo+ICsJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wICYgfkZESV9QQ0RDTEspOwo+ICsKPiArCS8qIERpc2FibGUgQ1BVIEZE SSBUWCBQTEwgKi8KPiArCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXAgJiB+RkRJX1RYX1BMTF9FTkFCTEUpOwo+ICsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVh ZChkZXZfcHJpdiwgcmVnKTsKPiArCXVkZWxheSgxMDApOwo+ICsKPiArCXJlZyA9IEZESV9SWF9D VEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKPiArCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1JYX1BMTF9FTkFCTEUpOwo+ ICsKPiArCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCj4gKwlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Cj4gKwl1ZGVsYXkoMTAwKTsKPiArfQo+ICsK PiArdm9pZCBpbGtfZmRpX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gK3sKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5k ZXYpOwo+ICsJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ICsJaTkxNV9yZWdfdCByZWc7 Cj4gKwl1MzIgdGVtcDsKPiArCj4gKwkvKiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBDSCBGREkg cnggKi8KPiArCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Cj4gKwl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKPiArCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAg JiB+RkRJX1RYX0VOQUJMRSk7Cj4gKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Cj4gKwo+ICsJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAmPSB+KDB4NyA8PCAxNik7Cj4gKwl0ZW1wIHw9 IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENf TUFTSykgPDwgMTE7Cj4gKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZE SV9SWF9FTkFCTEUpOwo+ICsKPiArCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKPiArCXVkZWxheSgxMDApOwo+ICsKPiArCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRpc2Fi bGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3duaW5nIEZESSAqLwo+ICsJaWYgKEhBU19QQ0hfSUJY KGRldl9wcml2KSkKPiArCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX0NISUNLRU4o cGlwZSksCj4gKwkJCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7Cj4gKwo+ ICsJLyogc3RpbGwgc2V0IHRyYWluIHBhdHRlcm4gMSAqLwo+ICsJcmVnID0gRkRJX1RYX0NUTChw aXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdGVtcCAm PSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKPiArCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVS Tl8xOwo+ICsJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJcmVn ID0gRkRJX1JYX0NUTChwaXBlKTsKPiArCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwo+ICsJaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkgewo+ICsJCXRlbXAgJj0gfkZESV9M SU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Cj4gKwkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9Q QVRURVJOXzFfQ1BUOwo+ICsJfSBlbHNlIHsKPiArCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9O T05FOwo+ICsJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwo+ICsJfQo+ICsJLyog QlBDIGluIEZESSByeCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBQSVBFQ09ORiAqLwo+ICsJ dGVtcCAmPSB+KDB4MDcgPDwgMTYpOwo+ICsJdGVtcCB8PSAoaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgUElQRUNPTkYocGlwZSkpICYgUElQRUNPTkZfQlBDX01BU0spIDw8IDExOwo+ICsJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Cj4gKwo+ICsJaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOwo+ICsJdWRlbGF5KDEwMCk7Cj4gK30KPiArCj4gK3ZvaWQKPiAr aW50ZWxfZmRpX2luaXRfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g K3sKPiArCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKSB7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXku ZmRpX2xpbmtfdHJhaW4gPSBpbGtfZmRpX2xpbmtfdHJhaW47Cj4gKwl9IGVsc2UgaWYgKElTX0dF TihkZXZfcHJpdiwgNikpIHsKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9 IGdlbjZfZmRpX2xpbmtfdHJhaW47Cj4gKwl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXZfcHJp dikpIHsKPiArCQkvKiBGSVhNRTogZGV0ZWN0IEIwKyBzdGVwcGluZyBhbmQgdXNlIGF1dG8gdHJh aW5pbmcgKi8KPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGl2Yl9tYW51 YWxfZmRpX2xpbmtfdHJhaW47Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZmRpLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uNzQ0MWZiMWNlMzcwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmgKPiBAQCAtMCwwICsxLDIxIEBACj4gKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMjAgSW50 ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaWZuZGVmIF9JTlRFTF9GRElfSF8KPiArI2Rl ZmluZSBfSU5URUxfRkRJX0hfCj4gKwo+ICtzdHJ1Y3QgaW50ZWxfY3J0YzsKPiArc3RydWN0IGlu dGVsX2NydGNfc3RhdGU7Cj4gKwo+ICsjZGVmaW5lIEk5MTVfRElTUExBWV9DT05GSUdfUkVUUlkg MQo+ICtpbnQgaWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YywKPiArCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKPiAr dm9pZCBpbnRlbF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKPiAr dm9pZCBpbGtfZmRpX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwo+ICt2b2lkIGls a19mZGlfcGxsX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpOwo+ICt2b2lk IGlsa19mZGlfcGxsX2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7Cj4gK3ZvaWQgaW50ZWxfZmRpX2luaXRfaG9vayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+ICsKPiArI2VuZGlmCgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4g U291cmNlIEdyYXBoaWNzIENlbnRlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK