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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 5889CC4361B for ; Wed, 16 Dec 2020 10:05: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 F165E2313B for ; Wed, 16 Dec 2020 10:05:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F165E2313B 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 2080A89C63; Wed, 16 Dec 2020 10:05:38 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED75789C63 for ; Wed, 16 Dec 2020 10:05:36 +0000 (UTC) IronPort-SDR: zZib9RmyCPoZNRgwUQkOBdfLVi+o4QfqbyHDlNF09spPv36BOtOgyrQjOUHKGSKEiOQMuoEDMI KgJDEGnzr7tQ== X-IronPort-AV: E=McAfee;i="6000,8403,9836"; a="171526141" X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="171526141" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 02:05:36 -0800 IronPort-SDR: OnIB8hn1gHKsqk1z5yDqhnpjsNwmjJQ8sPd9kawq8S0KEawaK/wzt6K6Np+aQ7WRosHv5lzz/A xZBwAuNdEfLw== X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="338292274" Received: from slevy-mobl.ger.corp.intel.com (HELO localhost) ([10.214.192.176]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 02:05:33 -0800 From: Jani Nikula To: Dave Airlie , intel-gfx@lists.freedesktop.org In-Reply-To: <20201211072922.19101-5-airlied@gmail.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20201211072922.19101-1-airlied@gmail.com> <20201211072922.19101-5-airlied@gmail.com> Date: Wed, 16 Dec 2020 12:05:29 +0200 Message-ID: <87a6ue5amu.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 04/11] drm/i915: refactor cursor code out of i915_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+Cj4gVGhpcyBmaWxl IGlzIGEgbW9uc3RlciwgbGV0J3Mgc3RhcnQgc2ltcGxlLCB0aGUgY3Vyc29yIHBsYW5lIGNvZGUK PiBzZWVtcyBwcmV0dHkgc3RhbmRhbG9uZSwgYW5kIHNwbGl0cyBvdXQgZWFzaWx5IGVub3VnaC4K CkkgY2xlYW5lZCB1cCBpbnRlbF9jdXJzb3IuaCBhIGJpdCBsb2NhbGx5LCBidXQgdGhlIGNvZGUg bW92ZW1lbnQgY2hlY2tzCm91dC4KCkJSLApKYW5pLgoKPgo+IFJldmlld2VkLWJ5OiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6 IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuYyAgfCA4MDYgKysrKysrKysrKysrKysrKysrKwo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5oICB8ICAxOCArCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIHwgNzk3ICstLS0t LS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3Bs YXkuaCB8ICAgNyArCj4gIDUgZmlsZXMgY2hhbmdlZCwgODM5IGluc2VydGlvbnMoKyksIDc5MCBk ZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfY3Vyc29yLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmgKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5k ZXggZTU1NzRlNTA2YTVjLi45OGEzNWI5MzkwNTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ IEBAIC0xOTcsNiArMTk3LDcgQEAgaTkxNS15ICs9IFwKPiAgCWRpc3BsYXkvaW50ZWxfY29tYm9f cGh5Lm8gXAo+ICAJZGlzcGxheS9pbnRlbF9jb25uZWN0b3IubyBcCj4gIAlkaXNwbGF5L2ludGVs X2Nzci5vIFwKPiArCWRpc3BsYXkvaW50ZWxfY3Vyc29yLm8gXAo+ICAJZGlzcGxheS9pbnRlbF9k aXNwbGF5Lm8gXAo+ICAJZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLm8gXAo+ICAJZGlzcGxh eS9pbnRlbF9kcGlvX3BoeS5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfY3Vyc29yLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u Mjc2ZDJiYjBlMmNmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmMKPiBAQCAtMCwwICsxLDgwNiBAQAo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVs IENvcnBvcmF0aW9uCj4gKyAqLwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKwo+ICsj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY191YXBpLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJj Yy5oPgo+ICsKPiArI2luY2x1ZGUgImludGVsX2F0b21pYy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf YXRvbWljX3BsYW5lLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9jdXJzb3IuaCIKPiArI2luY2x1ZGUg ImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKPiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXkuaCIKPiAr Cj4gKyNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcG0u aCIKPiArI2luY2x1ZGUgImludGVsX3Bzci5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgi Cj4gKwo+ICsvKiBDdXJzb3IgZm9ybWF0cyAqLwo+ICtzdGF0aWMgY29uc3QgdTMyIGludGVsX2N1 cnNvcl9mb3JtYXRzW10gPSB7Cj4gKwlEUk1fRk9STUFUX0FSR0I4ODg4LAo+ICt9Owo+ICsKPiAr c3RhdGljIGNvbnN0IHU2NCBjdXJzb3JfZm9ybWF0X21vZGlmaWVyc1tdID0gewo+ICsJRFJNX0ZP Uk1BVF9NT0RfTElORUFSLAo+ICsJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+ICt9Owo+ICsKPiAr c3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfYmFzZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPQo+ICsJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Cj4gKwljb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKPiArCWNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ ICsJdTMyIGJhc2U7Cj4gKwo+ICsJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5kaXNwbGF5LmN1 cnNvcl9uZWVkc19waHlzaWNhbCkKPiArCQliYXNlID0gc2dfZG1hX2FkZHJlc3Mob2JqLT5tbS5w YWdlcy0+c2dsKTsKPiArCWVsc2UKPiArCQliYXNlID0gaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQo cGxhbmVfc3RhdGUpOwo+ICsKPiArCXJldHVybiBiYXNlICsgcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzBdLm9mZnNldDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfcG9zaXRp b24oY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsJ aW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7Cj4gKwlpbnQgeSA9IHBsYW5lX3N0YXRl LT51YXBpLmRzdC55MTsKPiArCXUzMiBwb3MgPSAwOwo+ICsKPiArCWlmICh4IDwgMCkgewo+ICsJ CXBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1hfU0hJRlQ7Cj4gKwkJeCA9IC14Owo+ ICsJfQo+ICsJcG9zIHw9IHggPDwgQ1VSU09SX1hfU0hJRlQ7Cj4gKwo+ICsJaWYgKHkgPCAwKSB7 Cj4gKwkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWV9TSElGVDsKPiArCQl5ID0g LXk7Cj4gKwl9Cj4gKwlwb3MgfD0geSA8PCBDVVJTT1JfWV9TSElGVDsKPiArCj4gKwlyZXR1cm4g cG9zOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICt7Cj4gKwljb25zdCBzdHJ1 Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPQo+ICsJCSZwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZS0+ZGV2LT5tb2RlX2NvbmZpZzsKPiArCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpOwo+ICsJaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxh bmVfc3RhdGUtPnVhcGkuZHN0KTsKPiArCj4gKwlyZXR1cm4gd2lkdGggPiAwICYmIHdpZHRoIDw9 IGNvbmZpZy0+Y3Vyc29yX3dpZHRoICYmCj4gKwkJaGVpZ2h0ID4gMCAmJiBoZWlnaHQgPD0gY29u ZmlnLT5jdXJzb3JfaGVpZ2h0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGludGVsX2N1cnNvcl9j aGVja19zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gKwkJdG9faTkxNShwbGFu ZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiArCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBs YW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKPiArCWludCBzcmNfeCwgc3JjX3k7Cj4gKwl1MzIgb2Zm c2V0Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChw bGFuZV9zdGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKCFw bGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXNyY194ID0g cGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2Owo+ICsJc3JjX3kgPSBwbGFuZV9zdGF0ZS0+ dWFwaS5zcmMueTEgPj4gMTY7Cj4gKwo+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJnNyY194LCAm c3JjX3ksIHBsYW5lX3N0YXRlLCAwKTsKPiArCW9mZnNldCA9IGludGVsX3BsYW5lX2NvbXB1dGVf YWxpZ25lZF9vZmZzZXQoJnNyY194LCAmc3JjX3ksCj4gKwkJCQkJCSAgICBwbGFuZV9zdGF0ZSwg MCk7Cj4gKwo+ICsJaWYgKHNyY194ICE9IDAgfHwgc3JjX3kgIT0gMCkgewo+ICsJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAo+ICsJCQkgICAgIkFyYml0cmFyeSBjdXJzb3IgcGFubmluZyBu b3Qgc3VwcG9ydGVkXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKgo+ ICsJICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRoYXQgdGhlIHNyYwo+ICsJ ICogY29vcmRpbmF0ZSBjaGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KPiArCSAqLwo+ ICsJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCj4gKwkJCSAg ICAgIHNyY194IDw8IDE2LCBzcmNfeSA8PCAxNik7Cj4gKwo+ICsJLyogSUxLKyBkbyB0aGlzIGF1 dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KPiArCWlmIChIQVNfR01DSChkZXZfcHJpdikgJiYg cm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Cj4gKwkJaW50IHNyY193ID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Cj4gKwkJaW50IHNyY19o ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2Owo+ICsKPiAr CQlvZmZzZXQgKz0gKHNyY19oICogc3JjX3cgLSAxKSAqIGZiLT5mb3JtYXQtPmNwcFswXTsKPiAr CX0KPiArCj4gKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0Owo+ ICsJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnggPSBzcmNfeDsKPiArCXBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVswXS55ID0gc3JjX3k7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgaW50ZWxfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAo+ICsJCQkgICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPiArCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCBz cmMgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmM7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX3JlY3QgZHN0 ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoZmIgJiYg ZmItPm1vZGlmaWVyICE9IERSTV9GT1JNQVRfTU9EX0xJTkVBUikgewo+ICsJCWRybV9kYmdfa21z KCZpOTE1LT5kcm0sICJjdXJzb3IgY2Fubm90IGJlIHRpbGVkXG4iKTsKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBp bmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCj4gKwkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9f U0NBTElORywKPiArCQkJCQkJRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ICsJCQkJCQl0 cnVlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBVc2UgdGhlIHVu Y2xpcHBlZCBzcmMvZHN0IHJlY3RhbmdsZXMsIHdoaWNoIHdlIHByb2dyYW0gdG8gaHcgKi8KPiAr CXBsYW5lX3N0YXRlLT51YXBpLnNyYyA9IHNyYzsKPiArCXBsYW5lX3N0YXRlLT51YXBpLmRzdCA9 IGRzdDsKPiArCj4gKwlyZXQgPSBpbnRlbF9jdXJzb3JfY2hlY2tfc3VyZmFjZShwbGFuZV9zdGF0 ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKCFwbGFuZV9zdGF0 ZS0+dWFwaS52aXNpYmxlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9IGludGVsX3BsYW5l X2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBp bnQKPiAraTg0NV9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ ICsJCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCj4gKwkJICAgICAgIHVu c2lnbmVkIGludCByb3RhdGlvbikKPiArewo+ICsJcmV0dXJuIDIwNDg7Cj4gK30KPiArCj4gK3N0 YXRpYyB1MzIgaTg0NV9jdXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXUzMiBjbnRsID0gMDsKPiArCj4gKwlpZiAoY3J0Y19z dGF0ZS0+Z2FtbWFfZW5hYmxlKQo+ICsJCWNudGwgfD0gQ1VSU09SX0dBTU1BX0VOQUJMRTsKPiAr Cj4gKwlyZXR1cm4gY250bDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGwo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCSAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCXJldHVybiBD VVJTT1JfRU5BQkxFIHwKPiArCQlDVVJTT1JfRk9STUFUX0FSR0IgfAo+ICsJCUNVUlNPUl9TVFJJ REUocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7Cj4gK30KPiArCj4gK3N0YXRp YyBib29sIGk4NDVfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKPiArewo+ICsJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5l X3N0YXRlLT51YXBpLmRzdCk7Cj4gKwo+ICsJLyoKPiArCSAqIDg0NWcvODY1ZyBhcmUgb25seSBs aW1pdGVkIGJ5IHRoZSB3aWR0aCBvZiB0aGVpciBjdXJzb3JzLAo+ICsJICogdGhlIGhlaWdodCBp cyBhcmJpdHJhcnkgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgcmVnaXN0ZXIuCj4gKwkgKi8K PiArCXJldHVybiBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkgJiYgSVNfQUxJR05F RCh3aWR0aCwgNjQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk4NDVfY2hlY2tfY3Vyc29yKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsJCQkgICAgIHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+ICsJ aW50IHJldDsKPiArCj4gKwlyZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxh bmVfc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIGlmIHdl IHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwo+ ICsJaWYgKCFmYikKPiArCQlyZXR1cm4gMDsKPiArCj4gKwkvKiBDaGVjayBmb3Igd2hpY2ggY3Vy c29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KPiArCWlmICghaTg0NV9jdXJzb3Jfc2l6ZV9vayhwbGFu ZV9zdGF0ZSkpIHsKPiArCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAo+ICsJCQkgICAgIkN1cnNv ciBkaW1lbnNpb24gJWR4JWQgbm90IHN1cHBvcnRlZFxuIiwKPiArCQkJICAgIGRybV9yZWN0X3dp ZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAo+ICsJCQkgICAgZHJtX3JlY3RfaGVpZ2h0KCZw bGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g Kwlkcm1fV0FSTl9PTigmaTkxNS0+ZHJtLCBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmCj4g KwkJICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNb MF0pOwo+ICsKPiArCXN3aXRjaCAoZmItPnBpdGNoZXNbMF0pIHsKPiArCWNhc2UgMjU2Ogo+ICsJ Y2FzZSA1MTI6Cj4gKwljYXNlIDEwMjQ6Cj4gKwljYXNlIDIwNDg6Cj4gKwkJYnJlYWs7Cj4gKwlk ZWZhdWx0Ogo+ICsJCSBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiSW52YWxpZCBjdXJzb3Igc3Ry aWRlICgldSlcbiIsCj4gKwkJCSAgICAgZmItPnBpdGNoZXNbMF0pOwo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCXBsYW5lX3N0YXRlLT5jdGwgPSBpODQ1X2N1cnNvcl9jdGwoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpODQ1X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAr CQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICsJ CQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAr ewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOwo+ICsJdTMyIGNudGwgPSAwLCBiYXNlID0gMCwgcG9zID0gMCwgc2l6ZSA9IDA7 Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ICsKPiArCWlmIChwbGFuZV9zdGF0ZSAmJiBw bGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7Cj4gKwkJdW5zaWduZWQgaW50IHdpZHRoID0gZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gKwkJdW5zaWduZWQgaW50IGhl aWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiArCj4gKwkJ Y250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAo+ICsJCQlpODQ1X2N1cnNvcl9jdGxfY3J0YyhjcnRj X3N0YXRlKTsKPiArCj4gKwkJc2l6ZSA9IChoZWlnaHQgPDwgMTIpIHwgd2lkdGg7Cj4gKwo+ICsJ CWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7Cj4gKwkJcG9zID0gaW50ZWxf Y3Vyc29yX3Bvc2l0aW9uKHBsYW5lX3N0YXRlKTsKPiArCX0KPiArCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gKwo+ICsJLyogT24gdGhl c2UgY2hpcHNldHMgd2UgY2FuIG9ubHkgbW9kaWZ5IHRoZSBiYXNlL3NpemUvc3RyaWRlCj4gKwkg KiB3aGlsc3QgdGhlIGN1cnNvciBpcyBkaXNhYmxlZC4KPiArCSAqLwo+ICsJaWYgKHBsYW5lLT5j dXJzb3IuYmFzZSAhPSBiYXNlIHx8Cj4gKwkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IHNpemUg fHwKPiArCSAgICBwbGFuZS0+Y3Vyc29yLmNudGwgIT0gY250bCkgewo+ICsJCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSksIDApOwo+ICsJCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBDVVJCQVNFKFBJUEVfQSksIGJhc2UpOwo+ICsJCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBDVVJTSVpFLCBzaXplKTsKPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7Cj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIENVUkNOVFIoUElQRV9BKSwgY250bCk7Cj4gKwo+ICsJCXBsYW5lLT5jdXJzb3IuYmFzZSA9 IGJhc2U7Cj4gKwkJcGxhbmUtPmN1cnNvci5zaXplID0gc2l6ZTsKPiArCQlwbGFuZS0+Y3Vyc29y LmNudGwgPSBjbnRsOwo+ICsJfSBlbHNlIHsKPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7Cj4gKwl9Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGk4NDVfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAr CQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICt7Cj4gKwlp ODQ1X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKPiArCQkJCSAgICAgZW51bSBwaXBlICpwaXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gKwllbnVt IGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKPiArCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOwo+ICsJYm9vbCByZXQ7Cj4gKwo+ICsJcG93ZXJfZG9tYWluID0gUE9XRVJf RE9NQUlOX1BJUEUoUElQRV9BKTsKPiArCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dl dF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOwo+ICsJaWYgKCF3YWtlcmVmKQo+ ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXQgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBD VVJDTlRSKFBJUEVfQSkpICYgQ1VSU09SX0VOQUJMRTsKPiArCj4gKwkqcGlwZSA9IFBJUEVfQTsK PiArCj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3 YWtlcmVmKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQg aW50Cj4gK2k5eHhfY3Vyc29yX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwK PiArCQkgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAo+ICsJCSAgICAgICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gK3sKPiArCXJldHVybiBwbGFuZS0+YmFzZS5kZXYtPm1v ZGVfY29uZmlnLmN1cnNvcl93aWR0aCAqIDQ7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgaTl4eF9j dXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0 YXRlLT51YXBpLmNydGMpOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gKwl1MzIgY250bCA9IDA7Cj4gKwo+ICsJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCj4gKwkJcmV0dXJuIGNudGw7Cj4gKwo+ICsJaWYgKGNy dGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKPiArCQljbnRsID0gTUNVUlNPUl9HQU1NQV9FTkFCTEU7 Cj4gKwo+ICsJaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCj4gKwkJY250bCB8PSBNQ1VSU09S X1BJUEVfQ1NDX0VOQUJMRTsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUgJiYg IUlTX0c0WChkZXZfcHJpdikpCj4gKwkJY250bCB8PSBNQ1VSU09SX1BJUEVfU0VMRUNUKGNydGMt PnBpcGUpOwo+ICsKPiArCXJldHVybiBjbnRsOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGk5eHhf Y3Vyc29yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAr CQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiArCQl0b19pOTE1KHBsYW5l X3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+ICsJdTMyIGNudGwgPSAwOwo+ICsKPiArCWlmIChJ U19HRU4oZGV2X3ByaXYsIDYpIHx8IElTX0lWWUJSSURHRShkZXZfcHJpdikpCj4gKwkJY250bCB8 PSBNQ1VSU09SX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwo+ICsKPiArCXN3aXRjaCAoZHJtX3JlY3Rf d2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpIHsKPiArCWNhc2UgNjQ6Cj4gKwkJY250bCB8 PSBNQ1VSU09SX01PREVfNjRfQVJHQl9BWDsKPiArCQlicmVhazsKPiArCWNhc2UgMTI4Ogo+ICsJ CWNudGwgfD0gTUNVUlNPUl9NT0RFXzEyOF9BUkdCX0FYOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAy NTY6Cj4gKwkJY250bCB8PSBNQ1VSU09SX01PREVfMjU2X0FSR0JfQVg7Cj4gKwkJYnJlYWs7Cj4g KwlkZWZhdWx0Ogo+ICsJCU1JU1NJTkdfQ0FTRShkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuZHN0KSk7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKHBsYW5lX3N0YXRl LT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCj4gKwkJY250bCB8PSBNQ1VSU09S X1JPVEFURV8xODA7Cj4gKwo+ICsJcmV0dXJuIGNudGw7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IGk5eHhfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiAr CQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+ICsJaW50IHdpZHRoID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gKwlpbnQgaGVpZ2h0ID0g ZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+ICsKPiArCWlmICghaW50 ZWxfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4g KwkvKiBDdXJzb3Igd2lkdGggaXMgbGltaXRlZCB0byBhIGZldyBwb3dlci1vZi10d28gc2l6ZXMg Ki8KPiArCXN3aXRjaCAod2lkdGgpIHsKPiArCWNhc2UgMjU2Ogo+ICsJY2FzZSAxMjg6Cj4gKwlj YXNlIDY0Ogo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9 Cj4gKwo+ICsJLyoKPiArCSAqIElWQisgaGF2ZSBDVVJfRkJDX0NUTCB3aGljaCBhbGxvd3MgYW4g YXJiaXRyYXJ5IGN1cnNvcgo+ICsJICogaGVpZ2h0IGZyb20gOCBsaW5lcyB1cCB0byB0aGUgY3Vy c29yIHdpZHRoLCB3aGVuIHRoZQo+ICsJICogY3Vyc29yIGlzIG5vdCByb3RhdGVkLiBFdmVyeXRo aW5nIGVsc2UgcmVxdWlyZXMgc3F1YXJlCj4gKwkgKiBjdXJzb3JzLgo+ICsJICovCj4gKwlpZiAo SEFTX0NVUl9GQkMoZGV2X3ByaXYpICYmCj4gKwkgICAgcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9u ICYgRFJNX01PREVfUk9UQVRFXzApIHsKPiArCQlpZiAoaGVpZ2h0IDwgOCB8fCBoZWlnaHQgPiB3 aWR0aCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAoaGVpZ2h0ICE9 IHdpZHRoKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgaTl4eF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCSAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+ICsJZW51bSBwaXBl IHBpcGUgPSBwbGFuZS0+cGlwZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gaW50ZWxfY2hl Y2tfY3Vyc29yKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3IgaWdu b3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KPiArCWlmICghZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJLyogQ2hlY2sgZm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3ZSBzdXBwb3J0ICovCj4gKwlpZiAo IWk5eHhfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKSB7Cj4gKwkJZHJtX2RiZygmZGV2X3By aXYtPmRybSwKPiArCQkJIkN1cnNvciBkaW1lbnNpb24gJWR4JWQgbm90IHN1cHBvcnRlZFxuIiwK PiArCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCj4gKwkJCWRybV9y ZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwl9Cj4gKwo+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBsYW5lX3N0YXRlLT51 YXBpLnZpc2libGUgJiYKPiArCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlk ZSAhPSBmYi0+cGl0Y2hlc1swXSk7Cj4gKwo+ICsJaWYgKGZiLT5waXRjaGVzWzBdICE9Cj4gKwkg ICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkgKiBmYi0+Zm9ybWF0LT5j cHBbMF0pIHsKPiArCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiArCQkJICAgICJJbnZh bGlkIGN1cnNvciBzdHJpZGUgKCV1KSAoY3Vyc29yIHdpZHRoICVkKVxuIiwKPiArCQkJICAgIGZi LT5waXRjaGVzWzBdLAo+ICsJCQkgICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBp LmRzdCkpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUaGVy ZSdzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBjdXJzb3Igb24gQ0hWIHBpcGUgQy4KPiArCSAq IElmIGl0IHN0cmFkZGxlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBzY3JlZW4gdGhlbgo+ICsJICog bW92aW5nIGl0IGF3YXkgZnJvbSB0aGUgZWRnZSBvciBkaXNhYmxpbmcgaXQgb2Z0ZW4KPiArCSAq IHJlc3VsdHMgaW4gYSBwaXBlIHVuZGVycnVuLCBhbmQgb2Z0ZW4gdGhhdCBjYW4gbGVhZCB0bwo+ ICsJICogZGVhZCBwaXBlIChjb25zdGFudCB1bmRlcnJ1biByZXBvcnRlZCwgYW5kIGl0IHNjYW5z Cj4gKwkgKiBvdXQganVzdCBhIHNvbGlkIGNvbG9yKS4gVG8gcmVjb3ZlciBmcm9tIHRoYXQsIHRo ZQo+ICsJICogZGlzcGxheSBwb3dlciB3ZWxsIG11c3QgYmUgdHVybmVkIG9mZiBhbmQgb24gYWdh aW4uCj4gKwkgKiBSZWZ1c2UgdGhlIHB1dCB0aGUgY3Vyc29yIGludG8gdGhhdCBjb21wcm9taXNl ZCBwb3NpdGlvbi4KPiArCSAqLwo+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBp cGUgPT0gUElQRV9DICYmCj4gKwkgICAgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJiBwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QueDEgPCAwKSB7Cj4gKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCj4gKwkJCSAgICAiQ0hWIGN1cnNvciBDIG5vdCBhbGxvd2VkIHRvIHN0cmFkZGxlIHRoZSBs ZWZ0IHNjcmVlbiBlZGdlXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlw bGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9jdXJzb3JfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTl4eF91cGRhdGVf Y3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gKwkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArCWVudW0g cGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4gKwl1MzIgY250bCA9IDAsIGJhc2UgPSAwLCBwb3Mg PSAwLCBmYmNfY3RsID0gMDsKPiArCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gKwo+ICsJaWYg KHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpIHsKPiArCQl1bnNpZ25l ZCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+ICsJCXVu c2lnbmVkIGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsK PiArCj4gKwkJY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAo+ICsJCQlpOXh4X2N1cnNvcl9jdGxf Y3J0YyhjcnRjX3N0YXRlKTsKPiArCj4gKwkJaWYgKHdpZHRoICE9IGhlaWdodCkKPiArCQkJZmJj X2N0bCA9IENVUl9GQkNfQ1RMX0VOIHwgKGhlaWdodCAtIDEpOwo+ICsKPiArCQliYXNlID0gaW50 ZWxfY3Vyc29yX2Jhc2UocGxhbmVfc3RhdGUpOwo+ICsJCXBvcyA9IGludGVsX2N1cnNvcl9wb3Np dGlvbihwbGFuZV9zdGF0ZSk7Cj4gKwl9Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9w cml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCS8qCj4gKwkgKiBPbiBzb21lIHBs YXRmb3JtcyB3cml0aW5nIENVUkNOVFIgZmlyc3Qgd2lsbCBhbHNvCj4gKwkgKiBjYXVzZSBDVVJQ T1MgdG8gYmUgYXJtZWQgYnkgdGhlIENVUkJBU0Ugd3JpdGUuCj4gKwkgKiBXaXRob3V0IHRoZSBD VVJDTlRSIHdyaXRlIHRoZSBDVVJQT1Mgd3JpdGUgd291bGQKPiArCSAqIGFybSBpdHNlbGYuIFRo dXMgd2UgYWx3YXlzIHVwZGF0ZSBDVVJDTlRSIGJlZm9yZQo+ICsJICogQ1VSUE9TLgo+ICsJICoK PiArCSAqIE9uIG90aGVyIHBsYXRmb3JtcyBDVVJQT1MgYWx3YXlzIHJlcXVpcmVzIHRoZQo+ICsJ ICogQ1VSQkFTRSB3cml0ZSB0byBhcm0gdGhlIHVwZGF0ZS4gQWRkaXRvbmFsbHkKPiArCSAqIGEg d3JpdGUgdG8gYW55IG9mIHRoZSBjdXJzb3IgcmVnaXN0ZXIgd2lsbCBjYW5jZWwKPiArCSAqIGFu IGFscmVhZHkgYXJtZWQgY3Vyc29yIHVwZGF0ZS4gVGh1cyBsZWF2aW5nIG91dAo+ICsJICogdGhl IENVUkJBU0Ugd3JpdGUgYWZ0ZXIgQ1VSUE9TIGNvdWxkIGxlYWQgdG8gYQo+ICsJICogY3Vyc29y IHRoYXQgZG9lc24ndCBhcHBlYXIgdG8gbW92ZSwgb3IgZXZlbiBjaGFuZ2UKPiArCSAqIHNoYXBl LiBUaHVzIHdlIGFsd2F5cyB3cml0ZSBDVVJCQVNFLgo+ICsJICoKPiArCSAqIFRoZSBvdGhlciBy ZWdpc3RlcnMgYXJlIGFybWVkIGJ5IGJ5IHRoZSBDVVJCQVNFIHdyaXRlCj4gKwkgKiBleGNlcHQg d2hlbiB0aGUgcGxhbmUgaXMgZ2V0dGluZyBlbmFibGVkIGF0IHdoaWNoIHRpbWUKPiArCSAqIHRo ZSBDVVJDTlRSIHdyaXRlIGFybXMgdGhlIHVwZGF0ZS4KPiArCSAqLwo+ICsKPiArCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDkpCj4gKwkJc2tsX3dyaXRlX2N1cnNvcl93bShwbGFuZSwgY3J0 Y19zdGF0ZSk7Cj4gKwo+ICsJaWYgKCFpbnRlbF9jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0 ZSkpCj4gKwkJaW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5lX3NlbF9mZXRjaChwbGFuZSwgY3J0Y19z dGF0ZSwgcGxhbmVfc3RhdGUsIDApOwo+ICsKPiArCWlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0g YmFzZSB8fAo+ICsJICAgIHBsYW5lLT5jdXJzb3Iuc2l6ZSAhPSBmYmNfY3RsIHx8Cj4gKwkgICAg cGxhbmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKPiArCQlpZiAoSEFTX0NVUl9GQkMoZGV2X3By aXYpKQo+ICsJCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSX0ZCQ19DVEwocGlwZSks Cj4gKwkJCQkJICBmYmNfY3RsKTsKPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VS Q05UUihwaXBlKSwgY250bCk7Cj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBP UyhwaXBlKSwgcG9zKTsKPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShw aXBlKSwgYmFzZSk7Cj4gKwo+ICsJCXBsYW5lLT5jdXJzb3IuYmFzZSA9IGJhc2U7Cj4gKwkJcGxh bmUtPmN1cnNvci5zaXplID0gZmJjX2N0bDsKPiArCQlwbGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRs Owo+ICsJfSBlbHNlIHsKPiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKHBp cGUpLCBwb3MpOwo+ICsJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJCQVNFKHBpcGUp LCBiYXNlKTsKPiArCX0KPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTl4eF9kaXNh YmxlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICsJCQkJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCWk5eHhfdXBkYXRlX2N1cnNv cihwbGFuZSwgY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGk5eHhf Y3Vyc29yX2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ICsJCQkJICAg ICBlbnVtIHBpcGUgKnBpcGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiArCWVudW0gaW50ZWxfZGlzcGxheV9w b3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4g Kwlib29sIHJldDsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJLyoKPiArCSAqIE5vdCAxMDAlIGNvcnJl Y3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdlZW4gcGlwZXMsCj4gKwkgKiBidXQgdGhh dCdzIG9ubHkgdGhlIGNhc2UgZm9yIGdlbjItMyB3aGljaCBkb24ndCBoYXZlIGFueQo+ICsJICog ZGlzcGxheSBwb3dlciB3ZWxscy4KPiArCSAqLwo+ICsJcG93ZXJfZG9tYWluID0gUE9XRVJfRE9N QUlOX1BJUEUocGxhbmUtPnBpcGUpOwo+ICsJd2FrZXJlZiA9IGludGVsX2Rpc3BsYXlfcG93ZXJf Z2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7Cj4gKwlpZiAoIXdha2VyZWYp Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IENVUkNOVFIocGxhbmUtPnBpcGUpKTsKPiArCj4gKwlyZXQgPSB2YWwgJiBNQ1VSU09SX01PREU7 Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYp KQo+ICsJCSpwaXBlID0gcGxhbmUtPnBpcGU7Cj4gKwllbHNlCj4gKwkJKnBpcGUgPSAodmFsICYg TUNVUlNPUl9QSVBFX1NFTEVDVF9NQVNLKSA+Pgo+ICsJCQlNQ1VSU09SX1BJUEVfU0VMRUNUX1NI SUZUOwo+ICsKPiArCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21h aW4sIHdha2VyZWYpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxh bmUsCj4gKwkJCQkJICAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQo+ICt7Cj4gKwlyZXR1 cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSICYmCj4gKwkJZm9ybWF0ID09IERS TV9GT1JNQVRfQVJHQjg4ODg7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfbGVnYWN5 X2N1cnNvcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAo+ICsJCQkgICBzdHJ1Y3Qg ZHJtX2NydGMgKl9jcnRjLAo+ICsJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAr CQkJICAgaW50IGNydGNfeCwgaW50IGNydGNfeSwKPiArCQkJICAgdW5zaWduZWQgaW50IGNydGNf dywgdW5zaWduZWQgaW50IGNydGNfaCwKPiArCQkJICAgdTMyIHNyY194LCB1MzIgc3JjX3ksCj4g KwkJCSAgIHUzMiBzcmNfdywgdTMyIHNyY19oLAo+ICsJCQkgICBzdHJ1Y3QgZHJtX21vZGVzZXRf YWNxdWlyZV9jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRv X2ludGVsX3BsYW5lKF9wbGFuZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2lu dGVsX2NydGMoX2NydGMpOwo+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVf c3RhdGUgPQo+ICsJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKPiAr CXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlOwo+ICsJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQo+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0 Yy0+YmFzZS5zdGF0ZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3Rh dGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBXaGVuIGNydGMgaXMgaW5hY3RpdmUg b3IgdGhlcmUgaXMgYSBtb2Rlc2V0IHBlbmRpbmcsCj4gKwkgKiB3YWl0IGZvciBpdCB0byBjb21w bGV0ZSBpbiB0aGUgc2xvd3BhdGgKPiArCSAqCj4gKwkgKiBGSVhNRSBiaWdqb2luZXIgZmFzdHBh dGggd291bGQgYmUgZ29vZAo+ICsJICovCj4gKwlpZiAoIWNydGNfc3RhdGUtPmh3LmFjdGl2ZSB8 fCBpbnRlbF9jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgfHwKPiArCSAgICBjcnRjX3N0 YXRlLT51cGRhdGVfcGlwZSB8fCBjcnRjX3N0YXRlLT5iaWdqb2luZXIpCj4gKwkJZ290byBzbG93 Owo+ICsKPiArCS8qCj4gKwkgKiBEb24ndCBkbyBhbiBhc3luYyB1cGRhdGUgaWYgdGhlcmUgaXMg YW4gb3V0c3RhbmRpbmcgY29tbWl0IG1vZGlmeWluZwo+ICsJICogdGhlIHBsYW5lLiAgVGhpcyBw cmV2ZW50cyBvdXIgYXN5bmMgdXBkYXRlJ3MgY2hhbmdlcyBmcm9tIGdldHRpbmcKPiArCSAqIG92 ZXJyaWRkZW4gYnkgYSBwcmV2aW91cyBzeW5jaHJvbm91cyB1cGRhdGUncyBzdGF0ZS4KPiArCSAq Lwo+ICsJaWYgKG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQgJiYKPiArCSAgICAhdHJ5X3dh aXRfZm9yX2NvbXBsZXRpb24oJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQtPmh3X2RvbmUp KQo+ICsJCWdvdG8gc2xvdzsKPiArCj4gKwkvKgo+ICsJICogSWYgYW55IHBhcmFtZXRlcnMgY2hh bmdlIHRoYXQgbWF5IGFmZmVjdCB3YXRlcm1hcmtzLAo+ICsJICogdGFrZSB0aGUgc2xvd3BhdGgu IE9ubHkgY2hhbmdpbmcgZmIgb3IgcG9zaXRpb24gc2hvdWxkIGJlCj4gKwkgKiBpbiB0aGUgZmFz dHBhdGguCj4gKwkgKi8KPiArCWlmIChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0YyAhPSAmY3J0 Yy0+YmFzZSB8fAo+ICsJICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfdyAhPSBzcmNfdyB8 fAo+ICsJICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCAhPSBzcmNfaCB8fAo+ICsJICAg IG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgIT0gY3J0Y193IHx8Cj4gKwkgICAgb2xkX3Bs YW5lX3N0YXRlLT51YXBpLmNydGNfaCAhPSBjcnRjX2ggfHwKPiArCSAgICAhb2xkX3BsYW5lX3N0 YXRlLT51YXBpLmZiICE9ICFmYikKPiArCQlnb3RvIHNsb3c7Cj4gKwo+ICsJbmV3X3BsYW5lX3N0 YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlKCZw bGFuZS0+YmFzZSkpOwo+ICsJaWYgKCFuZXdfcGxhbmVfc3RhdGUpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsJbmV3X2NydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGludGVsX2Ny dGNfZHVwbGljYXRlX3N0YXRlKCZjcnRjLT5iYXNlKSk7Cj4gKwlpZiAoIW5ld19jcnRjX3N0YXRl KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIG91dF9mcmVlOwo+ICsJfQo+ICsKPiAr CWRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZSgmbmV3X3BsYW5lX3N0YXRlLT51YXBpLCBmYik7 Cj4gKwo+ICsJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY194ID0gc3JjX3g7Cj4gKwluZXdfcGxh bmVfc3RhdGUtPnVhcGkuc3JjX3kgPSBzcmNfeTsKPiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5z cmNfdyA9IHNyY193Owo+ICsJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY19oID0gc3JjX2g7Cj4g KwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y194ID0gY3J0Y194Owo+ICsJbmV3X3BsYW5lX3N0 YXRlLT51YXBpLmNydGNfeSA9IGNydGNfeTsKPiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRj X3cgPSBjcnRjX3c7Cj4gKwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oID0gY3J0Y19oOwo+ ICsKPiArCWludGVsX3BsYW5lX2NvcHlfdWFwaV90b19od19zdGF0ZShuZXdfcGxhbmVfc3RhdGUs IG5ld19wbGFuZV9zdGF0ZSwgY3J0Yyk7Cj4gKwo+ICsJcmV0ID0gaW50ZWxfcGxhbmVfYXRvbWlj X2NoZWNrX3dpdGhfc3RhdGUoY3J0Y19zdGF0ZSwgbmV3X2NydGNfc3RhdGUsCj4gKwkJCQkJCSAg b2xkX3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IG91dF9mcmVlOwo+ICsKPiArCXJldCA9IGludGVsX3BsYW5lX3Bpbl9mYihuZXdfcGxhbmVfc3Rh dGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dF9mcmVlOwo+ICsKPiArCWludGVsX2Zyb250 YnVmZmVyX2ZsdXNoKHRvX2ludGVsX2Zyb250YnVmZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIp LAo+ICsJCQkJT1JJR0lOX0ZMSVApOwo+ICsJaW50ZWxfZnJvbnRidWZmZXJfdHJhY2sodG9faW50 ZWxfZnJvbnRidWZmZXIob2xkX3BsYW5lX3N0YXRlLT5ody5mYiksCj4gKwkJCQl0b19pbnRlbF9m cm9udGJ1ZmZlcihuZXdfcGxhbmVfc3RhdGUtPmh3LmZiKSwKPiArCQkJCXBsYW5lLT5mcm9udGJ1 ZmZlcl9iaXQpOwo+ICsKPiArCS8qIFN3YXAgcGxhbmUgc3RhdGUgKi8KPiArCXBsYW5lLT5iYXNl LnN0YXRlID0gJm5ld19wbGFuZV9zdGF0ZS0+dWFwaTsKPiArCj4gKwkvKgo+ICsJICogV2UgY2Fu bm90IHN3YXAgY3J0Y19zdGF0ZSBhcyBpdCBtYXkgYmUgaW4gdXNlIGJ5IGFuIGF0b21pYyBjb21t aXQgb3IKPiArCSAqIHBhZ2UgZmxpcCB0aGF0J3MgcnVubmluZyBzaW11bHRhbmVvdXNseS4gSWYg d2Ugc3dhcCBjcnRjX3N0YXRlIGFuZAo+ICsJICogZGVzdHJveSB0aGUgb2xkIHN0YXRlLCB3ZSB3 aWxsIGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUgdGhlcmUuCj4gKwkgKgo+ICsJICogT25seSB1cGRh dGUgYWN0aXZlX3BsYW5lcywgd2hpY2ggaXMgbmVlZGVkIGZvciBvdXIgaW50ZXJuYWwKPiArCSAq IGJvb2trZWVwaW5nLiBFaXRoZXIgdmFsdWUgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiB1 cGRhdGluZwo+ICsJICogcGxhbmVzIGF0b21pY2FsbHkuIElmIHRoZSBjdXJzb3Igd2FzIHBhcnQg b2YgdGhlIGF0b21pYyB1cGRhdGUgdGhlbgo+ICsJICogd2Ugd291bGQgaGF2ZSB0YWtlbiB0aGUg c2xvd3BhdGguCj4gKwkgKi8KPiArCWNydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXMgPSBuZXdfY3J0 Y19zdGF0ZS0+YWN0aXZlX3BsYW5lczsKPiArCj4gKwlpZiAobmV3X3BsYW5lX3N0YXRlLT51YXBp LnZpc2libGUpCj4gKwkJaW50ZWxfdXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBuZXdf cGxhbmVfc3RhdGUpOwo+ICsJZWxzZQo+ICsJCWludGVsX2Rpc2FibGVfcGxhbmUocGxhbmUsIGNy dGNfc3RhdGUpOwo+ICsKPiArCWludGVsX3BsYW5lX3VucGluX2ZiKG9sZF9wbGFuZV9zdGF0ZSk7 Cj4gKwo+ICtvdXRfZnJlZToKPiArCWlmIChuZXdfY3J0Y19zdGF0ZSkKPiArCQlpbnRlbF9jcnRj X2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsICZuZXdfY3J0Y19zdGF0ZS0+dWFwaSk7Cj4gKwlp ZiAocmV0KQo+ICsJCWludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoJnBsYW5lLT5iYXNlLCAmbmV3 X3BsYW5lX3N0YXRlLT51YXBpKTsKPiArCWVsc2UKPiArCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0 YXRlKCZwbGFuZS0+YmFzZSwgJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaSk7Cj4gKwlyZXR1cm4gcmV0 Owo+ICsKPiArc2xvdzoKPiArCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUo JnBsYW5lLT5iYXNlLCAmY3J0Yy0+YmFzZSwgZmIsCj4gKwkJCQkJICAgICAgY3J0Y194LCBjcnRj X3ksIGNydGNfdywgY3J0Y19oLAo+ICsJCQkJCSAgICAgIHNyY194LCBzcmNfeSwgc3JjX3csIHNy Y19oLCBjdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5j cyBpbnRlbF9jdXJzb3JfcGxhbmVfZnVuY3MgPSB7Cj4gKwkudXBkYXRlX3BsYW5lID0gaW50ZWxf bGVnYWN5X2N1cnNvcl91cGRhdGUsCj4gKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVs cGVyX2Rpc2FibGVfcGxhbmUsCj4gKwkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCj4g KwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwK PiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4g KwkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpbnRlbF9jdXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0 ZWQsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfcGxhbmUgKgo+ICtpbnRlbF9jdXJzb3JfcGxh bmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJICBlbnVt IHBpcGUgcGlwZSkKPiArewo+ICsJc3RydWN0IGludGVsX3BsYW5lICpjdXJzb3I7Cj4gKwlpbnQg cmV0LCB6cG9zOwo+ICsKPiArCWN1cnNvciA9IGludGVsX3BsYW5lX2FsbG9jKCk7Cj4gKwlpZiAo SVNfRVJSKGN1cnNvcikpCj4gKwkJcmV0dXJuIGN1cnNvcjsKPiArCj4gKwljdXJzb3ItPnBpcGUg PSBwaXBlOwo+ICsJY3Vyc29yLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlw ZTsKPiArCWN1cnNvci0+aWQgPSBQTEFORV9DVVJTT1I7Cj4gKwljdXJzb3ItPmZyb250YnVmZmVy X2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIGN1cnNvci0+aWQpOwo+ICsKPiArCWlmIChJ U19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpKSB7Cj4gKwkJY3Vyc29yLT5t YXhfc3RyaWRlID0gaTg0NV9jdXJzb3JfbWF4X3N0cmlkZTsKPiArCQljdXJzb3ItPnVwZGF0ZV9w bGFuZSA9IGk4NDVfdXBkYXRlX2N1cnNvcjsKPiArCQljdXJzb3ItPmRpc2FibGVfcGxhbmUgPSBp ODQ1X2Rpc2FibGVfY3Vyc29yOwo+ICsJCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTg0NV9jdXJz b3JfZ2V0X2h3X3N0YXRlOwo+ICsJCWN1cnNvci0+Y2hlY2tfcGxhbmUgPSBpODQ1X2NoZWNrX2N1 cnNvcjsKPiArCX0gZWxzZSB7Cj4gKwkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTl4eF9jdXJzb3Jf bWF4X3N0cmlkZTsKPiArCQljdXJzb3ItPnVwZGF0ZV9wbGFuZSA9IGk5eHhfdXBkYXRlX2N1cnNv cjsKPiArCQljdXJzb3ItPmRpc2FibGVfcGxhbmUgPSBpOXh4X2Rpc2FibGVfY3Vyc29yOwo+ICsJ CWN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlOwo+ICsJCWN1 cnNvci0+Y2hlY2tfcGxhbmUgPSBpOXh4X2NoZWNrX2N1cnNvcjsKPiArCX0KPiArCj4gKwljdXJz b3ItPmN1cnNvci5iYXNlID0gfjA7Cj4gKwljdXJzb3ItPmN1cnNvci5jbnRsID0gfjA7Cj4gKwo+ ICsJaWYgKElTX0k4NDVHKGRldl9wcml2KSB8fCBJU19JODY1RyhkZXZfcHJpdikgfHwgSEFTX0NV Ul9GQkMoZGV2X3ByaXYpKQo+ICsJCWN1cnNvci0+Y3Vyc29yLnNpemUgPSB+MDsKPiArCj4gKwly ZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZjdXJzb3ItPmJh c2UsCj4gKwkJCQkgICAgICAgMCwgJmludGVsX2N1cnNvcl9wbGFuZV9mdW5jcywKPiArCQkJCSAg ICAgICBpbnRlbF9jdXJzb3JfZm9ybWF0cywKPiArCQkJCSAgICAgICBBUlJBWV9TSVpFKGludGVs X2N1cnNvcl9mb3JtYXRzKSwKPiArCQkJCSAgICAgICBjdXJzb3JfZm9ybWF0X21vZGlmaWVycywK PiArCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9DVVJTT1IsCj4gKwkJCQkgICAgICAgImN1cnNv ciAlYyIsIHBpcGVfbmFtZShwaXBlKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZmFpbDsKPiAr Cj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQo+ICsJCWRybV9wbGFuZV9jcmVhdGVf cm90YXRpb25fcHJvcGVydHkoJmN1cnNvci0+YmFzZSwKPiArCQkJCQkJICAgRFJNX01PREVfUk9U QVRFXzAsCj4gKwkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wIHwKPiArCQkJCQkJICAgRFJNX01P REVfUk9UQVRFXzE4MCk7Cj4gKwo+ICsJenBvcyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51 bV9zcHJpdGVzW3BpcGVdICsgMTsKPiArCWRybV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVf cHJvcGVydHkoJmN1cnNvci0+YmFzZSwgenBvcyk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gMTIpCj4gKwkJZHJtX3BsYW5lX2VuYWJsZV9mYl9kYW1hZ2VfY2xpcHMoJmN1cnNv ci0+YmFzZSk7Cj4gKwo+ICsJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJmN1cnNvci0+YmFzZSwgJmlu dGVsX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJcmV0dXJuIGN1cnNvcjsKPiArCj4gK2Zh aWw6Cj4gKwlpbnRlbF9wbGFuZV9mcmVlKGN1cnNvcik7Cj4gKwo+ICsJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2N1cnNvci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3Iu aAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xYzgzMzllNTQ3 ZmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9jdXJzb3IuaAo+IEBAIC0wLDAgKzEsMTggQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3Jh dGlvbgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0lOVEVMX0NVUlNPUl9IXwo+ICsjZGVmaW5lIF9J TlRFTF9DVVJTT1JfSF8KPiArCj4gKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5LmgiCj4gKwo+ICtz dHJ1Y3QgaW50ZWxfcGxhbmU7Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfcGxhbmUgKgo+ICtpbnRlbF9j dXJzb3JfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAr CQkJICBlbnVtIHBpcGUgcGlwZSk7Cj4gKwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCA3OWQ3NDc5YmVlZDIuLjI4 ODU1ODQ0ZjhkZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZGlzcGxheS5jCj4gQEAgLTY5LDYgKzY5LDcgQEAKPiAgI2luY2x1ZGUgImludGVsX2NkY2xrLmgi Cj4gICNpbmNsdWRlICJpbnRlbF9jb2xvci5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfY3NyLmgiCj4g KyNpbmNsdWRlICJpbnRlbF9jdXJzb3IuaCIKPiAgI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlw ZXMuaCIKPiAgI2luY2x1ZGUgImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKPiAgI2luY2x1ZGUg ImludGVsX2ZiYy5oIgo+IEBAIC0xMzcsMTYgKzEzOCw2IEBAIHN0YXRpYyBjb25zdCB1NjQgaTl4 eF9mb3JtYXRfbW9kaWZpZXJzW10gPSB7Cj4gIAlEUk1fRk9STUFUX01PRF9JTlZBTElECj4gIH07 Cj4gIAo+IC0vKiBDdXJzb3IgZm9ybWF0cyAqLwo+IC1zdGF0aWMgY29uc3QgdTMyIGludGVsX2N1 cnNvcl9mb3JtYXRzW10gPSB7Cj4gLQlEUk1fRk9STUFUX0FSR0I4ODg4LAo+IC19Owo+IC0KPiAt c3RhdGljIGNvbnN0IHU2NCBjdXJzb3JfZm9ybWF0X21vZGlmaWVyc1tdID0gewo+IC0JRFJNX0ZP Uk1BVF9NT0RfTElORUFSLAo+IC0JRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+IC19Owo+IC0KPiAg c3RhdGljIHZvaWQgaTl4eF9jcnRjX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywK PiAgCQkJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gIHN0YXRpYyB2 b2lkIGlsa19wY2hfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+IEBAIC0yNTI4 LDkgKzI1MTksOSBAQCBzdGF0aWMgdTMyIGludGVsX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJcmV0dXJuIG9mZnNldF9hbGlnbmVk Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdTMyIGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCj4gLQkJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpzdGF0ZSwKPiAtCQkJCQkgICAgICBpbnQgY29sb3JfcGxhbmUpCj4gK3UzMiBpbnRl bF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ICsJCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4gKwkJCQkgICAgICAg aW50IGNvbG9yX3BsYW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5l ID0gdG9faW50ZWxfcGxhbmUoc3RhdGUtPnVhcGkucGxhbmUpOwo+ICAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwo+IEBA IC0zMjY3LDcgKzMyNTgsNyBAQCBpbnRlbF9wbGFuZV9yZW1hcF9ndHQoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGludAo+ICtp bnQKPiAgaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpmYiA9 Cj4gQEAgLTExNTM2LDU2OSArMTE1MjcsNiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9jcnRjX2dldF9w aXBlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgCXJldHVy biB0cnVlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdTMyIGludGVsX2N1cnNvcl9iYXNlKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gLQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5w bGFuZS0+ZGV2KTsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmh3LmZiOwo+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 IGludGVsX2ZiX29iaihmYik7Cj4gLQl1MzIgYmFzZTsKPiAtCj4gLQlpZiAoSU5URUxfSU5GTyhk ZXZfcHJpdiktPmRpc3BsYXkuY3Vyc29yX25lZWRzX3BoeXNpY2FsKQo+IC0JCWJhc2UgPSBzZ19k bWFfYWRkcmVzcyhvYmotPm1tLnBhZ2VzLT5zZ2wpOwo+IC0JZWxzZQo+IC0JCWJhc2UgPSBpbnRl bF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSk7Cj4gLQo+IC0JcmV0dXJuIGJhc2UgKyBw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdTMy IGludGVsX2N1cnNvcl9wb3NpdGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBs YW5lX3N0YXRlKQo+IC17Cj4gLQlpbnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKPiAt CWludCB5ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0LnkxOwo+IC0JdTMyIHBvcyA9IDA7Cj4gLQo+ IC0JaWYgKHggPCAwKSB7Cj4gLQkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWF9T SElGVDsKPiAtCQl4ID0gLXg7Cj4gLQl9Cj4gLQlwb3MgfD0geCA8PCBDVVJTT1JfWF9TSElGVDsK PiAtCj4gLQlpZiAoeSA8IDApIHsKPiAtCQlwb3MgfD0gQ1VSU09SX1BPU19TSUdOIDw8IENVUlNP Ul9ZX1NISUZUOwo+IC0JCXkgPSAteTsKPiAtCX0KPiAtCXBvcyB8PSB5IDw8IENVUlNPUl9ZX1NI SUZUOwo+IC0KPiAtCXJldHVybiBwb3M7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGludGVsX2N1 cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Cj4gLXsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9Cj4gLQkJJnBs YW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYtPm1vZGVfY29uZmlnOwo+IC0JaW50IHdpZHRoID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Cj4gLQlpbnQgaGVpZ2h0ID0g ZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+IC0KPiAtCXJldHVybiB3 aWR0aCA+IDAgJiYgd2lkdGggPD0gY29uZmlnLT5jdXJzb3Jfd2lkdGggJiYKPiAtCQloZWlnaHQg PiAwICYmIGhlaWdodCA8PSBjb25maWctPmN1cnNvcl9oZWlnaHQ7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0KPiAtCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+IC0JdW5zaWdu ZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uOwo+IC0JaW50IHNyY194 LCBzcmNfeTsKPiAtCXUzMiBvZmZzZXQ7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGludGVs X3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJu IHJldDsKPiAtCj4gLQlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCj4gLQkJcmV0dXJu IDA7Cj4gLQo+IC0Jc3JjX3ggPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmMueDEgPj4gMTY7Cj4gLQlz cmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKPiAtCj4gLQlpbnRlbF9hZGRf ZmJfb2Zmc2V0cygmc3JjX3gsICZzcmNfeSwgcGxhbmVfc3RhdGUsIDApOwo+IC0Jb2Zmc2V0ID0g aW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmc3JjX3gsICZzcmNfeSwKPiAtCQkJ CQkJICAgIHBsYW5lX3N0YXRlLCAwKTsKPiAtCj4gLQlpZiAoc3JjX3ggIT0gMCB8fCBzcmNfeSAh PSAwKSB7Cj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4gLQkJCSAgICAiQXJiaXRy YXJ5IGN1cnNvciBwYW5uaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBQdXQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sg c28gdGhhdCB0aGUgc3JjCj4gLQkgKiBjb29yZGluYXRlIGNoZWNrcyB3aWxsIHNlZSB0aGUgcmln aHQgdmFsdWVzLgo+IC0JICovCj4gLQlkcm1fcmVjdF90cmFuc2xhdGVfdG8oJnBsYW5lX3N0YXRl LT51YXBpLnNyYywKPiAtCQkJICAgICAgc3JjX3ggPDwgMTYsIHNyY195IDw8IDE2KTsKPiAtCj4g LQkvKiBJTEsrIGRvIHRoaXMgYXV0b21hZ2ljYWxseSBpbiBoYXJkd2FyZSAqLwo+IC0JaWYgKEhB U19HTUNIKGRldl9wcml2KSAmJiByb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApIHsKPiAt CQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsK PiAtCQlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+ PiAxNjsKPiAtCQlpbnQgc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBp LnNyYykgPj4gMTY7Cj4gLQo+IC0JCW9mZnNldCArPSAoc3JjX2ggKiBzcmNfdyAtIDEpICogZmIt PmZvcm1hdC0+Y3BwWzBdOwo+IC0JfQo+IC0KPiAtCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS5vZmZzZXQgPSBvZmZzZXQ7Cj4gLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueCA9IHNy Y194Owo+IC0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnkgPSBzcmNfeTsKPiAtCj4gLQly ZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpbnRlbF9jaGVja19jdXJzb3Ioc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJCSAgICAgIHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gLXsKPiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+IC0JY29u c3Qgc3RydWN0IGRybV9yZWN0IHNyYyA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYzsKPiAtCWNvbnN0 IHN0cnVjdCBkcm1fcmVjdCBkc3QgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3Q7Cj4gLQlpbnQgcmV0 Owo+IC0KPiAtCWlmIChmYiAmJiBmYi0+bW9kaWZpZXIgIT0gRFJNX0ZPUk1BVF9NT0RfTElORUFS KSB7Cj4gLQkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgImN1cnNvciBjYW5ub3QgYmUgdGlsZWRc biIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXJldCA9IGludGVsX2F0b21p Y19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKPiAtCQkJCQkJ RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+IC0JCQkJCQlEUk1fUExBTkVfSEVMUEVSX05P X1NDQUxJTkcsCj4gLQkJCQkJCXRydWUpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ IC0KPiAtCS8qIFVzZSB0aGUgdW5jbGlwcGVkIHNyYy9kc3QgcmVjdGFuZ2xlcywgd2hpY2ggd2Ug cHJvZ3JhbSB0byBodyAqLwo+IC0JcGxhbmVfc3RhdGUtPnVhcGkuc3JjID0gc3JjOwo+IC0JcGxh bmVfc3RhdGUtPnVhcGkuZHN0ID0gZHN0Owo+IC0KPiAtCXJldCA9IGludGVsX2N1cnNvcl9jaGVj a19zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAt Cj4gLQlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+ IC0JcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsK PiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIHVuc2lnbmVkIGludAo+IC1pODQ1X2N1cnNvcl9tYXhfc3RyaWRlKHN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUsCj4gLQkJICAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2Rp ZmllciwKPiAtCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+IC17Cj4gLQlyZXR1cm4g MjA0ODsKPiAtfQo+IC0KPiAtc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0JdTMyIGNudGwgPSAw Owo+IC0KPiAtCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCj4gLQkJY250bCB8PSBDVVJT T1JfR0FNTUFfRU5BQkxFOwo+IC0KPiAtCXJldHVybiBjbnRsOwo+IC19Cj4gLQo+IC1zdGF0aWMg dTMyIGk4NDVfY3Vyc29yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKPiAtCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKPiAtewo+IC0JcmV0dXJuIENVUlNPUl9FTkFCTEUgfAo+IC0JCUNVUlNPUl9GT1JNQVRfQVJH QiB8Cj4gLQkJQ1VSU09SX1NUUklERShwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRl KTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgaTg0NV9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLQlpbnQgd2lkdGggPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPiAtCj4gLQkvKgo+IC0JICog ODQ1Zy84NjVnIGFyZSBvbmx5IGxpbWl0ZWQgYnkgdGhlIHdpZHRoIG9mIHRoZWlyIGN1cnNvcnMs Cj4gLQkgKiB0aGUgaGVpZ2h0IGlzIGFyYml0cmFyeSB1cCB0byB0aGUgcHJlY2lzaW9uIG9mIHRo ZSByZWdpc3Rlci4KPiAtCSAqLwo+IC0JcmV0dXJuIGludGVsX2N1cnNvcl9zaXplX29rKHBsYW5l X3N0YXRlKSAmJiBJU19BTElHTkVEKHdpZHRoLCA2NCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQg aTg0NV9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4g LQkJCSAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAtewo+IC0J Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVh cGkucGxhbmUtPmRldik7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGludGVsX2NoZWNrX2N1 cnNvcihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiBy ZXQ7Cj4gLQo+IC0JLyogaWYgd2Ugd2FudCB0byB0dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3 aWR0aCBhbmQgaGVpZ2h0ICovCj4gLQlpZiAoIWZiKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCS8q IENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwo+IC0JaWYgKCFpODQ1 X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkgewo+IC0JCWRybV9kYmdfa21zKCZpOTE1LT5k cm0sCj4gLQkJCSAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9ydGVkXG4iLAo+ IC0JCQkgICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCj4gLQkJCSAg ICBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwo+IC0JCXJldHVybiAt RUlOVkFMOwo+IC0JfQo+IC0KPiAtCWRybV9XQVJOX09OKCZpOTE1LT5kcm0sIHBsYW5lX3N0YXRl LT51YXBpLnZpc2libGUgJiYKPiAtCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0 cmlkZSAhPSBmYi0+cGl0Y2hlc1swXSk7Cj4gLQo+IC0Jc3dpdGNoIChmYi0+cGl0Y2hlc1swXSkg ewo+IC0JY2FzZSAyNTY6Cj4gLQljYXNlIDUxMjoKPiAtCWNhc2UgMTAyNDoKPiAtCWNhc2UgMjA0 ODoKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJIGRybV9kYmdfa21zKCZpOTE1LT5kcm0s ICJJbnZhbGlkIGN1cnNvciBzdHJpZGUgKCV1KVxuIiwKPiAtCQkJICAgICBmYi0+cGl0Y2hlc1sw XSk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcGxhbmVfc3RhdGUtPmN0bCA9 IGk4NDVfY3Vyc29yX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk4NDVfdXBkYXRlX2N1cnNvcihzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAo+IC0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCj4gLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gLQl1MzIgY250bCA9IDAsIGJhc2UgPSAw LCBwb3MgPSAwLCBzaXplID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Cj4gLQo+IC0J aWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpIHsKPiAtCQl1bnNp Z25lZCBpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsK PiAtCQl1bnNpZ25lZCBpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QpOwo+IC0KPiAtCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Cj4gLQkJCWk4NDVf Y3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+IC0KPiAtCQlzaXplID0gKGhlaWdodCA8PCAx MikgfCB3aWR0aDsKPiAtCj4gLQkJYmFzZSA9IGludGVsX2N1cnNvcl9iYXNlKHBsYW5lX3N0YXRl KTsKPiAtCQlwb3MgPSBpbnRlbF9jdXJzb3JfcG9zaXRpb24ocGxhbmVfc3RhdGUpOwo+IC0JfQo+ IC0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdz KTsKPiAtCj4gLQkvKiBPbiB0aGVzZSBjaGlwc2V0cyB3ZSBjYW4gb25seSBtb2RpZnkgdGhlIGJh c2Uvc2l6ZS9zdHJpZGUKPiAtCSAqIHdoaWxzdCB0aGUgY3Vyc29yIGlzIGRpc2FibGVkLgo+IC0J ICovCj4gLQlpZiAocGxhbmUtPmN1cnNvci5iYXNlICE9IGJhc2UgfHwKPiAtCSAgICBwbGFuZS0+ Y3Vyc29yLnNpemUgIT0gc2l6ZSB8fAo+IC0JICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBjbnRs KSB7Cj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgMCk7 Cj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0UoUElQRV9BKSwgYmFzZSk7 Cj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlNJWkUsIHNpemUpOwo+IC0JCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKPiAtCQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0EpLCBjbnRsKTsKPiAtCj4gLQkJ cGxhbmUtPmN1cnNvci5iYXNlID0gYmFzZTsKPiAtCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBzaXpl Owo+IC0JCXBsYW5lLT5jdXJzb3IuY250bCA9IGNudGw7Cj4gLQl9IGVsc2Ugewo+IC0JCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKPiAtCX0KPiAtCj4g LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdz KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTg0NV9kaXNhYmxlX2N1cnNvcihzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAo+IC0JCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCj4gLXsKPiAtCWk4NDVfdXBkYXRlX2N1cnNvcihwbGFuZSwgY3J0Y19zdGF0ZSwg TlVMTCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGk4NDVfY3Vyc29yX2dldF9od19zdGF0ZShz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+IC0JCQkJICAgICBlbnVtIHBpcGUgKnBpcGUpCj4g LXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUt PmJhc2UuZGV2KTsKPiAtCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9t YWluOwo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQlib29sIHJldDsKPiAtCj4gLQlw b3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShQSVBFX0EpOwo+IC0Jd2FrZXJlZiA9IGlu dGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7 Cj4gLQlpZiAoIXdha2VyZWYpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXJldCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOwo+IC0K PiAtCSpwaXBlID0gUElQRV9BOwo+IC0KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9w cml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQKPiAtaTl4eF9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3Qg aW50ZWxfcGxhbmUgKnBsYW5lLAo+IC0JCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9k aWZpZXIsCj4gLQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPiAtewo+IC0JcmV0dXJu IHBsYW5lLT5iYXNlLmRldi0+bW9kZV9jb25maWcuY3Vyc29yX3dpZHRoICogNDsKPiAtfQo+IC0K PiAtc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0 b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiAtCXUzMiBjbnRs ID0gMDsKPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKPiAtCQlyZXR1cm4g Y250bDsKPiAtCj4gLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQo+IC0JCWNudGwgPSBN Q1VSU09SX0dBTU1BX0VOQUJMRTsKPiAtCj4gLQlpZiAoY3J0Y19zdGF0ZS0+Y3NjX2VuYWJsZSkK PiAtCQljbnRsIHw9IE1DVVJTT1JfUElQRV9DU0NfRU5BQkxFOwo+IC0KPiAtCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpIDwgNSAmJiAhSVNfRzRYKGRldl9wcml2KSkKPiAtCQljbnRsIHw9IE1DVVJT T1JfUElQRV9TRUxFQ1QoY3J0Yy0+cGlwZSk7Cj4gLQo+IC0JcmV0dXJuIGNudGw7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1MzIgaTl4eF9jdXJzb3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAo+IC0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PQo+IC0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Cj4gLQl1MzIgY250 bCA9IDA7Cj4gLQo+IC0JaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwgSVNfSVZZQlJJREdFKGRl dl9wcml2KSkKPiAtCQljbnRsIHw9IE1DVVJTT1JfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7Cj4gLQo+ IC0Jc3dpdGNoIChkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSkgewo+IC0J Y2FzZSA2NDoKPiAtCQljbnRsIHw9IE1DVVJTT1JfTU9ERV82NF9BUkdCX0FYOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSAxMjg6Cj4gLQkJY250bCB8PSBNQ1VSU09SX01PREVfMTI4X0FSR0JfQVg7Cj4g LQkJYnJlYWs7Cj4gLQljYXNlIDI1NjoKPiAtCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8yNTZfQVJH Ql9BWDsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJTUlTU0lOR19DQVNFKGRybV9yZWN0 X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAt Cj4gLQlpZiAocGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkK PiAtCQljbnRsIHw9IE1DVVJTT1JfUk9UQVRFXzE4MDsKPiAtCj4gLQlyZXR1cm4gY250bDsKPiAt fQo+IC0KPiAtc3RhdGljIGJvb2wgaTl4eF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPQo+IC0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7Cj4gLQlpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0 KTsKPiAtCWludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRz dCk7Cj4gLQo+IC0JaWYgKCFpbnRlbF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpCj4gLQkJ cmV0dXJuIGZhbHNlOwo+IC0KPiAtCS8qIEN1cnNvciB3aWR0aCBpcyBsaW1pdGVkIHRvIGEgZmV3 IHBvd2VyLW9mLXR3byBzaXplcyAqLwo+IC0Jc3dpdGNoICh3aWR0aCkgewo+IC0JY2FzZSAyNTY6 Cj4gLQljYXNlIDEyODoKPiAtCWNhc2UgNjQ6Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0J CXJldHVybiBmYWxzZTsKPiAtCX0KPiAtCj4gLQkvKgo+IC0JICogSVZCKyBoYXZlIENVUl9GQkNf Q1RMIHdoaWNoIGFsbG93cyBhbiBhcmJpdHJhcnkgY3Vyc29yCj4gLQkgKiBoZWlnaHQgZnJvbSA4 IGxpbmVzIHVwIHRvIHRoZSBjdXJzb3Igd2lkdGgsIHdoZW4gdGhlCj4gLQkgKiBjdXJzb3IgaXMg bm90IHJvdGF0ZWQuIEV2ZXJ5dGhpbmcgZWxzZSByZXF1aXJlcyBzcXVhcmUKPiAtCSAqIGN1cnNv cnMuCj4gLQkgKi8KPiAtCWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikgJiYKPiAtCSAgICBwbGFu ZV9zdGF0ZS0+aHcucm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMCkgewo+IC0JCWlmIChoZWln aHQgPCA4IHx8IGhlaWdodCA+IHdpZHRoKQo+IC0JCQlyZXR1cm4gZmFsc2U7Cj4gLQl9IGVsc2Ug ewo+IC0JCWlmIChoZWlnaHQgIT0gd2lkdGgpCj4gLQkJCXJldHVybiBmYWxzZTsKPiAtCX0KPiAt Cj4gLQlyZXR1cm4gdHJ1ZTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpOXh4X2NoZWNrX2N1cnNv cihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtCQkJICAgICBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5k ZXYpOwo+IC0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ aHcuZmI7Cj4gLQllbnVtIHBpcGUgcGlwZSA9IHBsYW5lLT5waXBlOwo+IC0JaW50IHJldDsKPiAt Cj4gLQlyZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+ IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCS8qIGlmIHdlIHdhbnQgdG8gdHVy biBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwo+IC0JaWYgKCFmYikK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdl IHN1cHBvcnQgKi8KPiAtCWlmICghaTl4eF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsK PiAtCQlkcm1fZGJnKCZkZXZfcHJpdi0+ZHJtLAo+IC0JCQkiQ3Vyc29yIGRpbWVuc2lvbiAlZHgl ZCBub3Qgc3VwcG9ydGVkXG4iLAo+IC0JCQlkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KSwKPiAtCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYt PmRybSwgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJgo+IC0JCSAgICBwbGFuZV9zdGF0ZS0+ Y29sb3JfcGxhbmVbMF0uc3RyaWRlICE9IGZiLT5waXRjaGVzWzBdKTsKPiAtCj4gLQlpZiAoZmIt PnBpdGNoZXNbMF0gIT0KPiAtCSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KSAqIGZiLT5mb3JtYXQtPmNwcFswXSkgewo+IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAo+IC0JCQkgICAgIkludmFsaWQgY3Vyc29yIHN0cmlkZSAoJXUpIChjdXJzb3Igd2lkdGgg JWQpXG4iLAo+IC0JCQkgICAgZmItPnBpdGNoZXNbMF0sCj4gLQkJCSAgICBkcm1fcmVjdF93aWR0 aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4g LQo+IC0JLyoKPiAtCSAqIFRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGN1cnNvciBv biBDSFYgcGlwZSBDLgo+IC0JICogSWYgaXQgc3RyYWRkbGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhl IHNjcmVlbiB0aGVuCj4gLQkgKiBtb3ZpbmcgaXQgYXdheSBmcm9tIHRoZSBlZGdlIG9yIGRpc2Fi bGluZyBpdCBvZnRlbgo+IC0JICogcmVzdWx0cyBpbiBhIHBpcGUgdW5kZXJydW4sIGFuZCBvZnRl biB0aGF0IGNhbiBsZWFkIHRvCj4gLQkgKiBkZWFkIHBpcGUgKGNvbnN0YW50IHVuZGVycnVuIHJl cG9ydGVkLCBhbmQgaXQgc2NhbnMKPiAtCSAqIG91dCBqdXN0IGEgc29saWQgY29sb3IpLiBUbyBy ZWNvdmVyIGZyb20gdGhhdCwgdGhlCj4gLQkgKiBkaXNwbGF5IHBvd2VyIHdlbGwgbXVzdCBiZSB0 dXJuZWQgb2ZmIGFuZCBvbiBhZ2Fpbi4KPiAtCSAqIFJlZnVzZSB0aGUgcHV0IHRoZSBjdXJzb3Ig aW50byB0aGF0IGNvbXByb21pc2VkIHBvc2l0aW9uLgo+IC0JICovCj4gLQlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikgJiYgcGlwZSA9PSBQSVBFX0MgJiYKPiAtCSAgICBwbGFuZV9zdGF0ZS0+ dWFwaS52aXNpYmxlICYmIHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MSA8IDApIHsKPiAtCQlkcm1f ZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKPiAtCQkJICAgICJDSFYgY3Vyc29yIEMgbm90IGFsbG93 ZWQgdG8gc3RyYWRkbGUgdGhlIGxlZnQgc2NyZWVuIGVkZ2VcbiIpOwo+IC0JCXJldHVybiAtRUlO VkFMOwo+IC0JfQo+IC0KPiAtCXBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X2N1cnNvcl9jdGwoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiAt CQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0J CQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAt ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOwo+IC0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKPiAtCXUzMiBjbnRs ID0gMCwgYmFzZSA9IDAsIHBvcyA9IDAsIGZiY19jdGwgPSAwOwo+IC0JdW5zaWduZWQgbG9uZyBp cnFmbGFnczsKPiAtCj4gLQlpZiAocGxhbmVfc3RhdGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkudmlz aWJsZSkgewo+IC0JCXVuc2lnbmVkIHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLmRzdCk7Cj4gLQkJdW5zaWduZWQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpOwo+IC0KPiAtCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Cj4g LQkJCWk5eHhfY3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+IC0KPiAtCQlpZiAod2lkdGgg IT0gaGVpZ2h0KQo+IC0JCQlmYmNfY3RsID0gQ1VSX0ZCQ19DVExfRU4gfCAoaGVpZ2h0IC0gMSk7 Cj4gLQo+IC0JCWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7Cj4gLQkJcG9z ID0gaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKHBsYW5lX3N0YXRlKTsKPiAtCX0KPiAtCj4gLQlzcGlu X2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gLQo+IC0J LyoKPiAtCSAqIE9uIHNvbWUgcGxhdGZvcm1zIHdyaXRpbmcgQ1VSQ05UUiBmaXJzdCB3aWxsIGFs c28KPiAtCSAqIGNhdXNlIENVUlBPUyB0byBiZSBhcm1lZCBieSB0aGUgQ1VSQkFTRSB3cml0ZS4K PiAtCSAqIFdpdGhvdXQgdGhlIENVUkNOVFIgd3JpdGUgdGhlIENVUlBPUyB3cml0ZSB3b3VsZAo+ IC0JICogYXJtIGl0c2VsZi4gVGh1cyB3ZSBhbHdheXMgdXBkYXRlIENVUkNOVFIgYmVmb3JlCj4g LQkgKiBDVVJQT1MuCj4gLQkgKgo+IC0JICogT24gb3RoZXIgcGxhdGZvcm1zIENVUlBPUyBhbHdh eXMgcmVxdWlyZXMgdGhlCj4gLQkgKiBDVVJCQVNFIHdyaXRlIHRvIGFybSB0aGUgdXBkYXRlLiBB ZGRpdG9uYWxseQo+IC0JICogYSB3cml0ZSB0byBhbnkgb2YgdGhlIGN1cnNvciByZWdpc3RlciB3 aWxsIGNhbmNlbAo+IC0JICogYW4gYWxyZWFkeSBhcm1lZCBjdXJzb3IgdXBkYXRlLiBUaHVzIGxl YXZpbmcgb3V0Cj4gLQkgKiB0aGUgQ1VSQkFTRSB3cml0ZSBhZnRlciBDVVJQT1MgY291bGQgbGVh ZCB0byBhCj4gLQkgKiBjdXJzb3IgdGhhdCBkb2Vzbid0IGFwcGVhciB0byBtb3ZlLCBvciBldmVu IGNoYW5nZQo+IC0JICogc2hhcGUuIFRodXMgd2UgYWx3YXlzIHdyaXRlIENVUkJBU0UuCj4gLQkg Kgo+IC0JICogVGhlIG90aGVyIHJlZ2lzdGVycyBhcmUgYXJtZWQgYnkgYnkgdGhlIENVUkJBU0Ug d3JpdGUKPiAtCSAqIGV4Y2VwdCB3aGVuIHRoZSBwbGFuZSBpcyBnZXR0aW5nIGVuYWJsZWQgYXQg d2hpY2ggdGltZQo+IC0JICogdGhlIENVUkNOVFIgd3JpdGUgYXJtcyB0aGUgdXBkYXRlLgo+IC0J ICovCj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKPiAtCQlza2xfd3JpdGVf Y3Vyc29yX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKPiAtCj4gLQlpZiAoIWludGVsX2NydGNfbmVl ZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKPiAtCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2Vs X2ZldGNoKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgMCk7Cj4gLQo+IC0JaWYgKHBs YW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8Cj4gLQkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9 IGZiY19jdGwgfHwKPiAtCSAgICBwbGFuZS0+Y3Vyc29yLmNudGwgIT0gY250bCkgewo+IC0JCWlm IChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCj4gLQkJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2 LCBDVVJfRkJDX0NUTChwaXBlKSwKPiAtCQkJCQkgIGZiY19jdGwpOwo+IC0JCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKHBpcGUpLCBjbnRsKTsKPiAtCQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKHBpcGUpLCBwb3MpOwo+IC0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKPiAtCj4gLQkJcGxhbmUtPmN1cnNvci5i YXNlID0gYmFzZTsKPiAtCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBmYmNfY3RsOwo+IC0JCXBsYW5l LT5jdXJzb3IuY250bCA9IGNudGw7Cj4gLQl9IGVsc2Ugewo+IC0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDVVJQT1MocGlwZSksIHBvcyk7Cj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIENVUkJBU0UocGlwZSksIGJhc2UpOwo+IC0JfQo+IC0KPiAtCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBpOXh4X2Rpc2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUs Cj4gLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAtewo+ IC0JaTl4eF91cGRhdGVfY3Vyc29yKHBsYW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKPiAtfQo+IC0K PiAtc3RhdGljIGJvb2wgaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCj4gLQkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+IC0J ZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Cj4gLQlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWJvb2wgcmV0Owo+IC0JdTMyIHZhbDsKPiAtCj4gLQkvKgo+ IC0JICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUgYmV0d2VlbiBw aXBlcywKPiAtCSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi0zIHdoaWNoIGRv bid0IGhhdmUgYW55Cj4gLQkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgo+IC0JICovCj4gLQlwb3dl cl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7Cj4gLQl3YWtlcmVmID0g aW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWlu KTsKPiAtCWlmICghd2FrZXJlZikKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0JdmFsID0gaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihwbGFuZS0+cGlwZSkpOwo+IC0KPiAtCXJldCA9 IHZhbCAmIE1DVVJTT1JfTU9ERTsKPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1 IHx8IElTX0c0WChkZXZfcHJpdikpCj4gLQkJKnBpcGUgPSBwbGFuZS0+cGlwZTsKPiAtCWVsc2UK PiAtCQkqcGlwZSA9ICh2YWwgJiBNQ1VSU09SX1BJUEVfU0VMRUNUX01BU0spID4+Cj4gLQkJCU1D VVJTT1JfUElQRV9TRUxFQ1RfU0hJRlQ7Cj4gLQo+IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo ZGV2X3ByaXYsIHBvd2VyX2RvbWFpbiwgd2FrZXJlZik7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAt fQo+IC0KPiAgLyogVkVTQSA2NDB4NDgweDcySHogbW9kZSB0byBzZXQgb24gdGhlIHBpcGUgKi8K PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGxvYWRfZGV0ZWN0X21vZGUg PSB7Cj4gIAlEUk1fTU9ERSgiNjQweDQ4MCIsIERSTV9NT0RFX1RZUEVfREVGQVVMVCwgMzE1MDAs IDY0MCwgNjY0LAo+IEBAIC0xNjYwOSw3ICsxNjAzNyw3IEBAIHN0YXRpYyB2b2lkIGFkZF9ycHNf Ym9vc3RfYWZ0ZXJfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCWFkZF93YWl0X3F1 ZXVlKGRybV9jcnRjX3ZibGFua193YWl0cXVldWUoY3J0YyksICZ3YWl0LT53YWl0KTsKPiAgfQo+ ICAKPiAtc3RhdGljIGludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSkKPiAraW50IGludGVsX3BsYW5lX3Bpbl9mYihzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwo+ICAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+ IEBAIC0xNjYzOSw3ICsxNjA2Nyw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfcGluX2ZiKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKPiAtc3RhdGljIHZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4gK3ZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOwo+ICAKPiBAQCAtMTY4NzUsMTMgKzE2MzAzLDYgQEAgc3RhdGljIGJvb2wg aTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUs Cj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1 cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCj4gLQkJCQkJICAgICAgdTMyIGZvcm1h dCwgdTY0IG1vZGlmaWVyKQo+IC17Cj4gLQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9N T0RfTElORUFSICYmCj4gLQkJZm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4ODg7Cj4gLX0KPiAt Cj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGk5NjVfcGxhbmVfZnVuY3Mg PSB7Cj4gIAkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAo+ ICAJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+IEBA IC0xNjkwMCwxNDIgKzE2MzIxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVu Y3MgaTh4eF9wbGFuZV9mdW5jcyA9IHsKPiAgCS5mb3JtYXRfbW9kX3N1cHBvcnRlZCA9IGk4eHhf cGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCj4gIH07Cj4gIAo+IC1zdGF0aWMgaW50Cj4gLWlu dGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPiAtCQkJ ICAgc3RydWN0IGRybV9jcnRjICpfY3J0YywKPiAtCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIsCj4gLQkJCSAgIGludCBjcnRjX3gsIGludCBjcnRjX3ksCj4gLQkJCSAgIHVuc2lnbmVk IGludCBjcnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCj4gLQkJCSAgIHUzMiBzcmNfeCwgdTMy IHNyY195LAo+IC0JCQkgICB1MzIgc3JjX3csIHUzMiBzcmNfaCwKPiAtCQkJICAgc3RydWN0IGRy bV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOwo+IC0Jc3RydWN0IGludGVsX2NydGMgKmNy dGMgPSB0b19pbnRlbF9jcnRjKF9jcnRjKTsKPiAtCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq b2xkX3BsYW5lX3N0YXRlID0KPiAtCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5z dGF0ZSk7Cj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm5ld19wbGFuZV9zdGF0ZTsKPiAt CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KPiAtCQl0b19pbnRlbF9jcnRj X3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5l d19jcnRjX3N0YXRlOwo+IC0JaW50IHJldDsKPiAtCj4gLQkvKgo+IC0JICogV2hlbiBjcnRjIGlz IGluYWN0aXZlIG9yIHRoZXJlIGlzIGEgbW9kZXNldCBwZW5kaW5nLAo+IC0JICogd2FpdCBmb3Ig aXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dwYXRoCj4gLQkgKgo+IC0JICogRklYTUUgYmlnam9p bmVyIGZhc3RwYXRoIHdvdWxkIGJlIGdvb2QKPiAtCSAqLwo+IC0JaWYgKCFjcnRjX3N0YXRlLT5o dy5hY3RpdmUgfHwgaW50ZWxfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8Cj4gLQkg ICAgY3J0Y19zdGF0ZS0+dXBkYXRlX3BpcGUgfHwgY3J0Y19zdGF0ZS0+Ymlnam9pbmVyKQo+IC0J CWdvdG8gc2xvdzsKPiAtCj4gLQkvKgo+IC0JICogRG9uJ3QgZG8gYW4gYXN5bmMgdXBkYXRlIGlm IHRoZXJlIGlzIGFuIG91dHN0YW5kaW5nIGNvbW1pdCBtb2RpZnlpbmcKPiAtCSAqIHRoZSBwbGFu ZS4gIFRoaXMgcHJldmVudHMgb3VyIGFzeW5jIHVwZGF0ZSdzIGNoYW5nZXMgZnJvbSBnZXR0aW5n Cj4gLQkgKiBvdmVycmlkZGVuIGJ5IGEgcHJldmlvdXMgc3luY2hyb25vdXMgdXBkYXRlJ3Mgc3Rh dGUuCj4gLQkgKi8KPiAtCWlmIChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29tbWl0ICYmCj4gLQkg ICAgIXRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29tbWl0 LT5od19kb25lKSkKPiAtCQlnb3RvIHNsb3c7Cj4gLQo+IC0JLyoKPiAtCSAqIElmIGFueSBwYXJh bWV0ZXJzIGNoYW5nZSB0aGF0IG1heSBhZmZlY3Qgd2F0ZXJtYXJrcywKPiAtCSAqIHRha2UgdGhl IHNsb3dwYXRoLiBPbmx5IGNoYW5naW5nIGZiIG9yIHBvc2l0aW9uIHNob3VsZCBiZQo+IC0JICog aW4gdGhlIGZhc3RwYXRoLgo+IC0JICovCj4gLQlpZiAob2xkX3BsYW5lX3N0YXRlLT51YXBpLmNy dGMgIT0gJmNydGMtPmJhc2UgfHwKPiAtCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX3cg IT0gc3JjX3cgfHwKPiAtCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX2ggIT0gc3JjX2gg fHwKPiAtCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ICE9IGNydGNfdyB8fAo+IC0J ICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX2ggIT0gY3J0Y19oIHx8Cj4gLQkgICAgIW9s ZF9wbGFuZV9zdGF0ZS0+dWFwaS5mYiAhPSAhZmIpCj4gLQkJZ290byBzbG93Owo+IC0KPiAtCW5l d19wbGFuZV9zdGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKGludGVsX3BsYW5lX2R1cGxpY2F0 ZV9zdGF0ZSgmcGxhbmUtPmJhc2UpKTsKPiAtCWlmICghbmV3X3BsYW5lX3N0YXRlKQo+IC0JCXJl dHVybiAtRU5PTUVNOwo+IC0KPiAtCW5ld19jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0 ZShpbnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSgmY3J0Yy0+YmFzZSkpOwo+IC0JaWYgKCFuZXdf Y3J0Y19zdGF0ZSkgewo+IC0JCXJldCA9IC1FTk9NRU07Cj4gLQkJZ290byBvdXRfZnJlZTsKPiAt CX0KPiAtCj4gLQlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoJm5ld19wbGFuZV9zdGF0ZS0+ dWFwaSwgZmIpOwo+IC0KPiAtCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfeCA9IHNyY194Owo+ IC0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY195ID0gc3JjX3k7Cj4gLQluZXdfcGxhbmVfc3Rh dGUtPnVhcGkuc3JjX3cgPSBzcmNfdzsKPiAtCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCA9 IHNyY19oOwo+IC0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfeCA9IGNydGNfeDsKPiAtCW5l d19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3kgPSBjcnRjX3k7Cj4gLQluZXdfcGxhbmVfc3RhdGUt PnVhcGkuY3J0Y193ID0gY3J0Y193Owo+IC0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCA9 IGNydGNfaDsKPiAtCj4gLQlpbnRlbF9wbGFuZV9jb3B5X3VhcGlfdG9faHdfc3RhdGUobmV3X3Bs YW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUsIGNydGMpOwo+IC0KPiAtCXJldCA9IGludGVsX3Bs YW5lX2F0b21pY19jaGVja193aXRoX3N0YXRlKGNydGNfc3RhdGUsIG5ld19jcnRjX3N0YXRlLAo+ IC0JCQkJCQkgIG9sZF9wbGFuZV9zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKPiAtCWlmIChyZXQp Cj4gLQkJZ290byBvdXRfZnJlZTsKPiAtCj4gLQlyZXQgPSBpbnRlbF9wbGFuZV9waW5fZmIobmV3 X3BsYW5lX3N0YXRlKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBvdXRfZnJlZTsKPiAtCj4gLQlp bnRlbF9mcm9udGJ1ZmZlcl9mbHVzaCh0b19pbnRlbF9mcm9udGJ1ZmZlcihuZXdfcGxhbmVfc3Rh dGUtPmh3LmZiKSwKPiAtCQkJCU9SSUdJTl9GTElQKTsKPiAtCWludGVsX2Zyb250YnVmZmVyX3Ry YWNrKHRvX2ludGVsX2Zyb250YnVmZmVyKG9sZF9wbGFuZV9zdGF0ZS0+aHcuZmIpLAo+IC0JCQkJ dG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiksCj4gLQkJCQlwbGFu ZS0+ZnJvbnRidWZmZXJfYml0KTsKPiAtCj4gLQkvKiBTd2FwIHBsYW5lIHN0YXRlICovCj4gLQlw bGFuZS0+YmFzZS5zdGF0ZSA9ICZuZXdfcGxhbmVfc3RhdGUtPnVhcGk7Cj4gLQo+IC0JLyoKPiAt CSAqIFdlIGNhbm5vdCBzd2FwIGNydGNfc3RhdGUgYXMgaXQgbWF5IGJlIGluIHVzZSBieSBhbiBh dG9taWMgY29tbWl0IG9yCj4gLQkgKiBwYWdlIGZsaXAgdGhhdCdzIHJ1bm5pbmcgc2ltdWx0YW5l b3VzbHkuIElmIHdlIHN3YXAgY3J0Y19zdGF0ZSBhbmQKPiAtCSAqIGRlc3Ryb3kgdGhlIG9sZCBz dGF0ZSwgd2Ugd2lsbCBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIHRoZXJlLgo+IC0JICoKPiAtCSAq IE9ubHkgdXBkYXRlIGFjdGl2ZV9wbGFuZXMsIHdoaWNoIGlzIG5lZWRlZCBmb3Igb3VyIGludGVy bmFsCj4gLQkgKiBib29ra2VlcGluZy4gRWl0aGVyIHZhbHVlIHdpbGwgZG8gdGhlIHJpZ2h0IHRo aW5nIHdoZW4gdXBkYXRpbmcKPiAtCSAqIHBsYW5lcyBhdG9taWNhbGx5LiBJZiB0aGUgY3Vyc29y IHdhcyBwYXJ0IG9mIHRoZSBhdG9taWMgdXBkYXRlIHRoZW4KPiAtCSAqIHdlIHdvdWxkIGhhdmUg dGFrZW4gdGhlIHNsb3dwYXRoLgo+IC0JICovCj4gLQljcnRjX3N0YXRlLT5hY3RpdmVfcGxhbmVz ID0gbmV3X2NydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXM7Cj4gLQo+IC0JaWYgKG5ld19wbGFuZV9z dGF0ZS0+dWFwaS52aXNpYmxlKQo+IC0JCWludGVsX3VwZGF0ZV9wbGFuZShwbGFuZSwgY3J0Y19z dGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKPiAtCWVsc2UKPiAtCQlpbnRlbF9kaXNhYmxlX3BsYW5l KHBsYW5lLCBjcnRjX3N0YXRlKTsKPiAtCj4gLQlpbnRlbF9wbGFuZV91bnBpbl9mYihvbGRfcGxh bmVfc3RhdGUpOwo+IC0KPiAtb3V0X2ZyZWU6Cj4gLQlpZiAobmV3X2NydGNfc3RhdGUpCj4gLQkJ aW50ZWxfY3J0Y19kZXN0cm95X3N0YXRlKCZjcnRjLT5iYXNlLCAmbmV3X2NydGNfc3RhdGUtPnVh cGkpOwo+IC0JaWYgKHJldCkKPiAtCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+ YmFzZSwgJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSk7Cj4gLQllbHNlCj4gLQkJaW50ZWxfcGxhbmVf ZGVzdHJveV9zdGF0ZSgmcGxhbmUtPmJhc2UsICZvbGRfcGxhbmVfc3RhdGUtPnVhcGkpOwo+IC0J cmV0dXJuIHJldDsKPiAtCj4gLXNsb3c6Cj4gLQlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBk YXRlX3BsYW5lKCZwbGFuZS0+YmFzZSwgJmNydGMtPmJhc2UsIGZiLAo+IC0JCQkJCSAgICAgIGNy dGNfeCwgY3J0Y195LCBjcnRjX3csIGNydGNfaCwKPiAtCQkJCQkgICAgICBzcmNfeCwgc3JjX3ks IHNyY193LCBzcmNfaCwgY3R4KTsKPiAtfQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfZnVuY3MgaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzID0gewo+IC0JLnVwZGF0ZV9wbGFu ZSA9IGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlLAo+IC0JLmRpc2FibGVfcGxhbmUgPSBkcm1f YXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+IC0JLmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9k ZXN0cm95LAo+IC0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNh dGVfc3RhdGUsCj4gLQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95 X3N0YXRlLAo+IC0JLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaW50ZWxfY3Vyc29yX2Zvcm1hdF9t b2Rfc3VwcG9ydGVkLAo+IC19Owo+IC0KPiAgc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9oYXNfZmJj KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJICAgICAgIGVudW0gaTl4 eF9wbGFuZV9pZCBpOXh4X3BsYW5lKQo+ICB7Cj4gQEAgLTE3MTg3LDc0ICsxNjQ3Miw2IEBAIGlu dGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgZW51bSBwaXBlIHBpcGUpCj4gIAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICB9Cj4gIAo+IC1z dGF0aWMgc3RydWN0IGludGVsX3BsYW5lICoKPiAtaW50ZWxfY3Vyc29yX3BsYW5lX2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgZW51bSBwaXBlIHBpcGUp Cj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9wbGFuZSAqY3Vyc29yOwo+IC0JaW50IHJldCwgenBvczsK PiAtCj4gLQljdXJzb3IgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwo+IC0JaWYgKElTX0VSUihjdXJz b3IpKQo+IC0JCXJldHVybiBjdXJzb3I7Cj4gLQo+IC0JY3Vyc29yLT5waXBlID0gcGlwZTsKPiAt CWN1cnNvci0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7Cj4gLQljdXJz b3ItPmlkID0gUExBTkVfQ1VSU09SOwo+IC0JY3Vyc29yLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRF TF9GUk9OVEJVRkZFUihwaXBlLCBjdXJzb3ItPmlkKTsKPiAtCj4gLQlpZiAoSVNfSTg0NUcoZGV2 X3ByaXYpIHx8IElTX0k4NjVHKGRldl9wcml2KSkgewo+IC0JCWN1cnNvci0+bWF4X3N0cmlkZSA9 IGk4NDVfY3Vyc29yX21heF9zdHJpZGU7Cj4gLQkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpODQ1 X3VwZGF0ZV9jdXJzb3I7Cj4gLQkJY3Vyc29yLT5kaXNhYmxlX3BsYW5lID0gaTg0NV9kaXNhYmxl X2N1cnNvcjsKPiAtCQljdXJzb3ItPmdldF9od19zdGF0ZSA9IGk4NDVfY3Vyc29yX2dldF9od19z dGF0ZTsKPiAtCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTg0NV9jaGVja19jdXJzb3I7Cj4gLQl9 IGVsc2Ugewo+IC0JCWN1cnNvci0+bWF4X3N0cmlkZSA9IGk5eHhfY3Vyc29yX21heF9zdHJpZGU7 Cj4gLQkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9jdXJzb3I7Cj4gLQkJY3Vy c29yLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNhYmxlX2N1cnNvcjsKPiAtCQljdXJzb3ItPmdl dF9od19zdGF0ZSA9IGk5eHhfY3Vyc29yX2dldF9od19zdGF0ZTsKPiAtCQljdXJzb3ItPmNoZWNr X3BsYW5lID0gaTl4eF9jaGVja19jdXJzb3I7Cj4gLQl9Cj4gLQo+IC0JY3Vyc29yLT5jdXJzb3Iu YmFzZSA9IH4wOwo+IC0JY3Vyc29yLT5jdXJzb3IuY250bCA9IH4wOwo+IC0KPiAtCWlmIChJU19J ODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpIHx8IEhBU19DVVJfRkJDKGRldl9w cml2KSkKPiAtCQljdXJzb3ItPmN1cnNvci5zaXplID0gfjA7Cj4gLQo+IC0JcmV0ID0gZHJtX3Vu aXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmY3Vyc29yLT5iYXNlLAo+IC0JCQkJ ICAgICAgIDAsICZpbnRlbF9jdXJzb3JfcGxhbmVfZnVuY3MsCj4gLQkJCQkgICAgICAgaW50ZWxf Y3Vyc29yX2Zvcm1hdHMsCj4gLQkJCQkgICAgICAgQVJSQVlfU0laRShpbnRlbF9jdXJzb3JfZm9y bWF0cyksCj4gLQkJCQkgICAgICAgY3Vyc29yX2Zvcm1hdF9tb2RpZmllcnMsCj4gLQkJCQkgICAg ICAgRFJNX1BMQU5FX1RZUEVfQ1VSU09SLAo+IC0JCQkJICAgICAgICJjdXJzb3IgJWMiLCBwaXBl X25hbWUocGlwZSkpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGZhaWw7Cj4gLQo+IC0JaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gNCkKPiAtCQlkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3By b3BlcnR5KCZjdXJzb3ItPmJhc2UsCj4gLQkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAo+IC0J CQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMCB8Cj4gLQkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8x ODApOwo+IC0KPiAtCXpwb3MgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5udW1fc3ByaXRlc1tw aXBlXSArIDE7Cj4gLQlkcm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZj dXJzb3ItPmJhc2UsIHpwb3MpOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEy KQo+IC0JCWRybV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZjdXJzb3ItPmJhc2UpOwo+ IC0KPiAtCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZjdXJzb3ItPmJhc2UsICZpbnRlbF9wbGFuZV9o ZWxwZXJfZnVuY3MpOwo+IC0KPiAtCXJldHVybiBjdXJzb3I7Cj4gLQo+IC1mYWlsOgo+IC0JaW50 ZWxfcGxhbmVfZnJlZShjdXJzb3IpOwo+IC0KPiAtCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gLX0K PiAtCj4gIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19sYXRlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPiAgewo+ICAJaW50ZWxfY3J0Y19kZWJ1Z2ZzX2FkZChjcnRjKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAo+IGluZGV4IGE1NzcxYmZl Y2JhNi4uNzE3YjBlNDE2MGU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5LmgKPiBAQCAtNjQ3LDYgKzY0NywxMyBAQCBib29sCj4gIGludGVsX2Zv cm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8g KmluZm8sCj4gIAkJCQkgICAgdWludDY0X3QgbW9kaWZpZXIpOwo+ICAKPiAraW50IGludGVsX3Bs YW5lX2NvbXB1dGVfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ ICt1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwK PiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAo+ICsJ CQkJICAgICAgIGludCBjb2xvcl9wbGFuZSk7Cj4gK2ludCBpbnRlbF9wbGFuZV9waW5fZmIoc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cj4gK3ZvaWQgaW50ZWxfcGxhbmVf dW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpOwo+ICsK PiAgLyogbW9kZXNldHRpbmcgKi8KPiAgdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICBpbnQgaW50ZWxfbW9kZXNldF9pbml0X25vaXJx KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwg T3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=