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=-7.9 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,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 C0937C433E0 for ; Thu, 21 Jan 2021 21:59:54 +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 83FD723A5C for ; Thu, 21 Jan 2021 21:59:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 83FD723A5C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 850C76E969; Thu, 21 Jan 2021 21:59:53 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F8A36E967 for ; Thu, 21 Jan 2021 21:59:50 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-109-t3L7_CZ5PtSsH8Nc7l1McQ-1; Thu, 21 Jan 2021 16:59:47 -0500 X-MC-Unique: t3L7_CZ5PtSsH8Nc7l1McQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7F1311DDF3 for ; Thu, 21 Jan 2021 21:59:42 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id B508119CB1; Thu, 21 Jan 2021 21:59:41 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 22 Jan 2021 07:59:22 +1000 Message-Id: <20210121215924.18964-10-airlied@gmail.com> In-Reply-To: <20210121215924.18964-1-airlied@gmail.com> References: <20210121215924.18964-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 09/10] drm/i915: refactor skylake scaler code into new file. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgbW92ZXMgdGhlIGNv ZGUgZnJvbSB2YXJpb3VzIHBsYWNlcyBhbmQgY29uc29saWRhdGVzIGl0CmludG8gb25lIG5ldyBm aWxlLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMgICAgICAgIHwgICAxICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfYXRvbWljLmMgICB8ICAgMiArLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyAgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8IDQyOSArLS0tLS0tLS0t LS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oICB8ICAg NiAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX21zdC5jICAgfCAgIDEg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyAgIHwgIDYyIC0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuaCAgIHwgICA3IC0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3NjYWxlci5jICAgICB8IDQ5NyArKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3NjYWxlci5o ICAgICB8ICAzMiArKwogLi4uL2RybS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5j ICAgIHwgICAxICsKIC4uLi9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaCAg ICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Zsdl9kc2kuYyAgICAgICAg fCAgIDEgKwogMTQgZmlsZXMgY2hhbmdlZCwgNTQxIGluc2VydGlvbnMoKyksIDUwNCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Nr bF9zY2FsZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvc2tsX3NjYWxlci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBjMTE4ZmQ1MTZjZGMuLjc5 MTJkNzYwNjdlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTIyNCw2ICsyMjQsNyBAQCBpOTE1 LXkgKz0gXAogCWRpc3BsYXkvaW50ZWxfdGMubyBcCiAJZGlzcGxheS9pbnRlbF92Z2EubyBcCiAJ ZGlzcGxheS9pOXh4X3BsYW5lLm8gXAorCWRpc3BsYXkvc2tsX3NjYWxlci5vIFwKIAlkaXNwbGF5 L3NrbF91bml2ZXJzYWxfcGxhbmUubwogaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxh eS9pbnRlbF9hY3BpLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pY2xfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYwppbmRl eCA5ZWVlYzZmYWRlYzcuLjdlZjZiODljNzlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pY2xfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pY2xfZHNpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJpbnRlbF9kc2kuaCIKICNp bmNsdWRlICJpbnRlbF9wYW5lbC5oIgogI2luY2x1ZGUgImludGVsX3Zkc2MuaCIKKyNpbmNsdWRl ICJza2xfc2NhbGVyLmgiCiAjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0 aWMgaW50IGhlYWRlcl9jcmVkaXRzX2F2YWlsYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYwpp bmRleCBlMDBmZGM0N2MwZWIuLjI3ZjdkNzEwOWNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2F0b21pYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiaW50 ZWxfZ2xvYmFsX3N0YXRlLmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgogI2luY2x1ZGUgImlu dGVsX3Bzci5oIgotI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgorI2luY2x1ZGUgInNrbF91bml2 ZXJzYWxfcGxhbmUuaCIKIAogLyoqCiAgKiBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9hdG9taWNf Z2V0X3Byb3BlcnR5IC0gaG9vayBmb3IgY29ubmVjdG9yLT5hdG9taWNfZ2V0X3Byb3BlcnR5Lgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKaW5kZXggZmFlN2NjYzVmOTVj Li4zOGNmOTE1M2EzMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGku YwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgogI2luY2x1ZGUg ImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmRzYy5oIgorI2luY2x1ZGUgInNrbF9zY2Fs ZXIuaCIKICNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyBjb25zdCB1 OCBpbmRleF90b19kcF9zaWduYWxfbGV2ZWxzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IDNkYjgwYjIxNDM5Zi4uNzkzZTYxZjNkZDI2 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAt OTAsNiArOTAsNyBAQAogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdh LmgiCiAjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKICNp bmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyB2b2lkIGk5eHhfY3J0Y19j bG9ja19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCkBAIC0yNDY2LDQ3ICsyNDY3LDYgQEAg aW50ZWxfZmluZF9pbml0aWFsX3BsYW5lX29iaihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YywKIAkJICAmdG9faW50ZWxfZnJvbnRidWZmZXIoZmIpLT5iaXRzKTsKIH0KIAotc3RhdGljIHZv aWQgc2tsX2RldGFjaF9zY2FsZXIoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsIGludCBp ZCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXVuc2ln bmVkIGxvbmcgaXJxZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29y ZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BT X0NUUkwoaW50ZWxfY3J0Yy0+cGlwZSwgaWQpLCAwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgU0tMX1BTX1dJTl9QT1MoaW50ZWxfY3J0Yy0+cGlwZSwgaWQpLCAwKTsKLQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1dJTl9TWihpbnRlbF9jcnRjLT5waXBlLCBpZCks IDApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBp cnFmbGFncyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGRldGFjaGVzIChha2EuIHVuYmlu ZHMpIHVudXNlZCBzY2FsZXJzIGluIGhhcmR3YXJlCi0gKi8KLXN0YXRpYyB2b2lkIHNrbF9kZXRh Y2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsK LQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0 ZS0+dWFwaS5jcnRjKTsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNj YWxlcl9zdGF0ZSA9Ci0JCSZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7Ci0JaW50IGk7Ci0KLQkv KiBsb29wIHRocm91Z2ggYW5kIGRpc2FibGUgc2NhbGVycyB0aGF0IGFyZW4ndCBpbiB1c2UgKi8K LQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfY3J0Yy0+bnVtX3NjYWxlcnM7IGkrKykgewotCQlpZiAo IXNjYWxlcl9zdGF0ZS0+c2NhbGVyc1tpXS5pbl91c2UpCi0JCQlza2xfZGV0YWNoX3NjYWxlcihp bnRlbF9jcnRjLCBpKTsKLQl9Ci19Ci0KLXZvaWQgc2tsX3NjYWxlcl9kaXNhYmxlKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0J aW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+bnVtX3NjYWxlcnM7IGkrKykKLQkJc2ts X2RldGFjaF9zY2FsZXIoY3J0YywgaSk7Ci19Ci0KIHVuc2lnbmVkIGludAogaW50ZWxfcGxhbmVf ZmVuY2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKIHsKQEAgLTMwODIsMzkzICszMDQyLDYgQEAgc3RhdGljIHZvaWQgY3B0X3ZlcmlmeV9tb2Rl c2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiB9CiAKLS8qCi0gKiBU aGUgaGFyZHdhcmUgcGhhc2UgMC4wIHJlZmVycyB0byB0aGUgY2VudGVyIG9mIHRoZSBwaXhlbC4K LSAqIFdlIHdhbnQgdG8gc3RhcnQgZnJvbSB0aGUgdG9wL2xlZnQgZWRnZSB3aGljaCBpcyBwaGFz ZQotICogLTAuNS4gVGhhdCBtYXRjaGVzIGhvdyB0aGUgaGFyZHdhcmUgY2FsY3VsYXRlcyB0aGUg c2NhbGluZwotICogZmFjdG9ycyAoZnJvbSB0b3AtbGVmdCBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8g Ym90dG9tLXJpZ2h0Ci0gKiBvZiB0aGUgbGFzdCBwaXhlbCwgYXMgb3Bwb3NlZCB0byB0aGUgcGl4 ZWwgY2VudGVycykuCi0gKgotICogRm9yIDQ6MjowIHN1YnNhbXBsZWQgY2hyb21hIHBsYW5lcyB3 ZSBvYnZpb3VzbHkgaGF2ZSB0bwotICogYWRqdXN0IHRoYXQgc28gdGhhdCB0aGUgY2hyb21hIHNh bXBsZSBwb3NpdGlvbiBsYW5kcyBpbgotICogdGhlIHJpZ2h0IHNwb3QuCi0gKgotICogTm90ZSB0 aGF0IGZvciBwYWNrZWQgWUNiQ3IgNDoyOjIgZm9ybWF0cyB0aGVyZSBpcyBubyB3YXkgdG8KLSAq IGNvbnRyb2wgY2hyb21hIHNpdGluZy4gVGhlIGhhcmR3YXJlIHNpbXBseSByZXBsaWNhdGVzIHRo ZQotICogY2hyb21hIHNhbXBsZXMgZm9yIGJvdGggb2YgdGhlIGx1bWEgc2FtcGxlcywgYW5kIHRo dXMgd2UgZG9uJ3QKLSAqIGFjdHVhbGx5IGdldCB0aGUgZXhwZWN0ZWQgTVBFRzIgY2hyb21hIHNp dGluZyBjb252ZW50aW9uIDooCi0gKiBUaGUgc2FtZSBiZWhhdmlvdXIgaXMgb2JzZXJ2ZWQgb24g cHJlLVNLTCBwbGF0Zm9ybXMgYXMgd2VsbC4KLSAqCi0gKiBUaGVvcnkgYmVoaW5kIHRoZSBmb3Jt dWxhIChub3RlIHRoYXQgd2UgaWdub3JlIHN1Yi1waXhlbAotICogc291cmNlIGNvb3JkaW5hdGVz KToKLSAqIHMgPSBzb3VyY2Ugc2FtcGxlIHBvc2l0aW9uCi0gKiBkID0gZGVzdGluYXRpb24gc2Ft cGxlIHBvc2l0aW9uCi0gKgotICogRG93bnNjYWxpbmcgNDoxOgotICogLTAuNQotICogfCAwLjAK LSAqIHwgfCAgICAgMS41IChpbml0aWFsIHBoYXNlKQotICogfCB8ICAgICB8Ci0gKiB2IHYgICAg IHYKLSAqIHwgcyB8IHMgfCBzIHwgcyB8Ci0gKiB8ICAgICAgIGQgICAgICAgfAotICoKLSAqIFVw c2NhbGluZyAxOjQ6Ci0gKiAtMC41Ci0gKiB8IC0wLjM3NSAoaW5pdGlhbCBwaGFzZSkKLSAqIHwg fCAgICAgMC4wCi0gKiB8IHwgICAgIHwKLSAqIHYgdiAgICAgdgotICogfCAgICAgICBzICAgICAg IHwKLSAqIHwgZCB8IGQgfCBkIHwgZCB8Ci0gKi8KLXUxNiBza2xfc2NhbGVyX2NhbGNfcGhhc2Uo aW50IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jb3NpdGVkKQotewotCWludCBwaGFzZSA9 IC0weDgwMDA7Ci0JdTE2IHRyaXAgPSAwOwotCi0JaWYgKGNocm9tYV9jb3NpdGVkKQotCQlwaGFz ZSArPSAoc3ViIC0gMSkgKiAweDgwMDAgLyBzdWI7Ci0KLQlwaGFzZSArPSBzY2FsZSAvICgyICog c3ViKTsKLQotCS8qCi0JICogSGFyZHdhcmUgaW5pdGlhbCBwaGFzZSBsaW1pdGVkIHRvIFstMC41 OjEuNV0uCi0JICogU2luY2UgdGhlIG1heCBoYXJkd2FyZSBzY2FsZSBmYWN0b3IgaXMgMy4wLCB3 ZQotCSAqIHNob3VsZCBuZXZlciBhY3R1YWxseSBleGNkZWVkIDEuMCBoZXJlLgotCSAqLwotCVdB Uk5fT04ocGhhc2UgPCAtMHg4MDAwIHx8IHBoYXNlID4gMHgxODAwMCk7Ci0KLQlpZiAocGhhc2Ug PCAwKQotCQlwaGFzZSA9IDB4MTAwMDAgKyBwaGFzZTsKLQllbHNlCi0JCXRyaXAgPSBQU19QSEFT RV9UUklQOwotCi0JcmV0dXJuICgocGhhc2UgPj4gMikgJiBQU19QSEFTRV9NQVNLKSB8IHRyaXA7 Ci19Ci0KLSNkZWZpbmUgU0tMX01JTl9TUkNfVyA4Ci0jZGVmaW5lIFNLTF9NQVhfU1JDX1cgNDA5 NgotI2RlZmluZSBTS0xfTUlOX1NSQ19IIDgKLSNkZWZpbmUgU0tMX01BWF9TUkNfSCA0MDk2Ci0j ZGVmaW5lIFNLTF9NSU5fRFNUX1cgOAotI2RlZmluZSBTS0xfTUFYX0RTVF9XIDQwOTYKLSNkZWZp bmUgU0tMX01JTl9EU1RfSCA4Ci0jZGVmaW5lIFNLTF9NQVhfRFNUX0ggNDA5NgotI2RlZmluZSBJ Q0xfTUFYX1NSQ19XIDUxMjAKLSNkZWZpbmUgSUNMX01BWF9TUkNfSCA0MDk2Ci0jZGVmaW5lIElD TF9NQVhfRFNUX1cgNTEyMAotI2RlZmluZSBJQ0xfTUFYX0RTVF9IIDQwOTYKLSNkZWZpbmUgU0tM X01JTl9ZVVZfNDIwX1NSQ19XIDE2Ci0jZGVmaW5lIFNLTF9NSU5fWVVWXzQyMF9TUkNfSCAxNgot Ci1zdGF0aWMgaW50Ci1za2xfdXBkYXRlX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwgYm9vbCBmb3JjZV9kZXRhY2gsCi0JCSAgdW5zaWduZWQgaW50IHNjYWxlcl91 c2VyLCBpbnQgKnNjYWxlcl9pZCwKLQkJICBpbnQgc3JjX3csIGludCBzcmNfaCwgaW50IGRzdF93 LCBpbnQgZHN0X2gsCi0JCSAgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0LAot CQkgIHU2NCBtb2RpZmllciwgYm9vbCBuZWVkX3NjYWxlcikKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0 Y19zY2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9Ci0JCSZjcnRjX3N0YXRlLT5zY2FsZXJfc3Rh dGU7Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPQotCQl0b19pbnRlbF9jcnRjKGNy dGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShpbnRlbF9jcnRjLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQotCQkmY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9k ZTsKLQotCS8qCi0JICogU3JjIGNvb3JkaW5hdGVzIGFyZSBhbHJlYWR5IHJvdGF0ZWQgYnkgMjcw IGRlZ3JlZXMgZm9yCi0JICogdGhlIDkwLzI3MCBkZWdyZWUgcGxhbmUgcm90YXRpb24gY2FzZXMg KHRvIG1hdGNoIHRoZQotCSAqIEdUVCBtYXBwaW5nKSwgaGVuY2Ugbm8gbmVlZCB0byBhY2NvdW50 IGZvciByb3RhdGlvbiBoZXJlLgotCSAqLwotCWlmIChzcmNfdyAhPSBkc3RfdyB8fCBzcmNfaCAh PSBkc3RfaCkKLQkJbmVlZF9zY2FsZXIgPSB0cnVlOwotCi0JLyoKLQkgKiBTY2FsaW5nL2ZpdHRp bmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlIGluIEdFTjkrCi0JICogVE9ETzogSW50ZXJs YWNlIGZldGNoIG1vZGUgZG9lc24ndCBzdXBwb3J0IFlVVjQyMCBwbGFuYXIgZm9ybWF0cy4KLQkg KiBPbmNlIE5WMTIgaXMgZW5hYmxlZCwgaGFuZGxlIGl0IGhlcmUgd2hpbGUgYWxsb2NhdGluZyBz Y2FsZXIKLQkgKiBmb3IgTlYxMi4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5 ICYmIGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJgotCSAgICBuZWVkX3NjYWxlciAmJiBhZGp1c3Rl ZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7Ci0JCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJQaXBlL1BsYW5lIHNjYWxpbmcgbm90IHN1cHBvcnRl ZCB3aXRoIElGLUlEIG1vZGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAq IGlmIHBsYW5lIGlzIGJlaW5nIGRpc2FibGVkIG9yIHNjYWxlciBpcyBubyBtb3JlIHJlcXVpcmVk IG9yIGZvcmNlIGRldGFjaAotCSAqICAtIGZyZWUgc2NhbGVyIGJpbmRlZCB0byB0aGlzIHBsYW5l L2NydGMKLQkgKiAgLSBpbiBvcmRlciB0byBkbyB0aGlzLCB1cGRhdGUgY3J0Yy0+c2NhbGVyX3Vz YWdlCi0JICoKLQkgKiBIZXJlIHNjYWxlciBzdGF0ZSBpbiBjcnRjX3N0YXRlIGlzIHNldCBmcmVl IHNvIHRoYXQKLQkgKiBzY2FsZXIgY2FuIGJlIGFzc2lnbmVkIHRvIG90aGVyIHVzZXIuIEFjdHVh bCByZWdpc3RlcgotCSAqIHVwZGF0ZSB0byBmcmVlIHRoZSBzY2FsZXIgaXMgZG9uZSBpbiBwbGFu ZS9wYW5lbC1maXQgcHJvZ3JhbW1pbmcuCi0JICogRm9yIHRoaXMgcHVycG9zZSBjcnRjL3BsYW5l X3N0YXRlLT5zY2FsZXJfaWQgaXNuJ3QgcmVzZXQgaGVyZS4KLQkgKi8KLQlpZiAoZm9yY2VfZGV0 YWNoIHx8ICFuZWVkX3NjYWxlcikgewotCQlpZiAoKnNjYWxlcl9pZCA+PSAwKSB7Ci0JCQlzY2Fs ZXJfc3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwgc2NhbGVyX3VzZXIpOwotCQkJc2NhbGVy X3N0YXRlLT5zY2FsZXJzWypzY2FsZXJfaWRdLmluX3VzZSA9IDA7Ci0KLQkJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAic2NhbGVyX3VzZXIgaW5kZXggJXUuJXU6ICIKLQkJ CQkgICAgIlN0YWdlZCBmcmVlaW5nIHNjYWxlciBpZCAlZCBzY2FsZXJfdXNlcnMgPSAweCV4XG4i LAotCQkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgKnNjYWxlcl9pZCwKLQkJ CQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOwotCQkJKnNjYWxlcl9pZCA9IC0xOwot CQl9Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChmb3JtYXQgJiYgaW50ZWxfZm9ybWF0X2luZm9f aXNfeXV2X3NlbWlwbGFuYXIoZm9ybWF0LCBtb2RpZmllcikgJiYKLQkgICAgKHNyY19oIDwgU0tM X01JTl9ZVVZfNDIwX1NSQ19IIHx8IHNyY193IDwgU0tMX01JTl9ZVVZfNDIwX1NSQ19XKSkgewot CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiUGxhbmFyIFlVVjogc3JjIGRp bWVuc2lvbnMgbm90IG1ldFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHJhbmdl IGNoZWNrcyAqLwotCWlmIChzcmNfdyA8IFNLTF9NSU5fU1JDX1cgfHwgc3JjX2ggPCBTS0xfTUlO X1NSQ19IIHx8Ci0JICAgIGRzdF93IDwgU0tMX01JTl9EU1RfVyB8fCBkc3RfaCA8IFNLTF9NSU5f RFNUX0ggfHwKLQkgICAgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKLQkgICAgIChzcmNf dyA+IElDTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBJQ0xfTUFYX1NSQ19IIHx8Ci0JICAgICAgZHN0 X3cgPiBJQ0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gSUNMX01BWF9EU1RfSCkpIHx8Ci0JICAgIChJ TlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEgJiYKLQkgICAgIChzcmNfdyA+IFNLTF9NQVhfU1JDX1cg fHwgc3JjX2ggPiBTS0xfTUFYX1NSQ19IIHx8Ci0JICAgICAgZHN0X3cgPiBTS0xfTUFYX0RTVF9X IHx8IGRzdF9oID4gU0tMX01BWF9EU1RfSCkpKQl7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLAotCQkJICAgICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogc3JjICV1eCV1IGRzdCAldXgl dSAiCi0JCQkgICAgInNpemUgaXMgb3V0IG9mIHNjYWxlciByYW5nZVxuIiwKLQkJCSAgICBpbnRl bF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgc3JjX3csIHNyY19oLAotCQkJICAgIGRzdF93LCBk c3RfaCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIG1hcmsgdGhpcyBwbGFuZSBhcyBh IHNjYWxlciB1c2VyIGluIGNydGNfc3RhdGUgKi8KLQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2Vy cyB8PSAoMSA8PCBzY2FsZXJfdXNlcik7Ci0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJz Y2FsZXJfdXNlciBpbmRleCAldS4ldTogIgotCQkgICAgInN0YWdlZCBzY2FsaW5nIHJlcXVlc3Qg Zm9yICV1eCV1LT4ldXgldSBzY2FsZXJfdXNlcnMgPSAweCV4XG4iLAotCQkgICAgaW50ZWxfY3J0 Yy0+cGlwZSwgc2NhbGVyX3VzZXIsIHNyY193LCBzcmNfaCwgZHN0X3csIGRzdF9oLAotCQkgICAg c2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgc2tsX3VwZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqcGlwZV9tb2RlID0gJmNy dGNfc3RhdGUtPmh3LnBpcGVfbW9kZTsKLQlpbnQgd2lkdGgsIGhlaWdodDsKLQotCWlmIChjcnRj X3N0YXRlLT5wY2hfcGZpdC5lbmFibGVkKSB7Ci0JCXdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJmNy dGNfc3RhdGUtPnBjaF9wZml0LmRzdCk7Ci0JCWhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmY3J0 Y19zdGF0ZS0+cGNoX3BmaXQuZHN0KTsKLQl9IGVsc2UgewotCQl3aWR0aCA9IHBpcGVfbW9kZS0+ Y3J0Y19oZGlzcGxheTsKLQkJaGVpZ2h0ID0gcGlwZV9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCX0K LQlyZXR1cm4gc2tsX3VwZGF0ZV9zY2FsZXIoY3J0Y19zdGF0ZSwgIWNydGNfc3RhdGUtPmh3LmFj dGl2ZSwKLQkJCQkgU0tMX0NSVENfSU5ERVgsCi0JCQkJICZjcnRjX3N0YXRlLT5zY2FsZXJfc3Rh dGUuc2NhbGVyX2lkLAotCQkJCSBjcnRjX3N0YXRlLT5waXBlX3NyY193LCBjcnRjX3N0YXRlLT5w aXBlX3NyY19oLAotCQkJCSB3aWR0aCwgaGVpZ2h0LCBOVUxMLCAwLAotCQkJCSBjcnRjX3N0YXRl LT5wY2hfcGZpdC5lbmFibGVkKTsKLX0KLQotLyoqCi0gKiBza2xfdXBkYXRlX3NjYWxlcl9wbGFu ZSAtIFN0YWdlcyB1cGRhdGUgdG8gc2NhbGVyIHN0YXRlIGZvciBhIGdpdmVuIHBsYW5lLgotICog QGNydGNfc3RhdGU6IGNydGMncyBzY2FsZXIgc3RhdGUKLSAqIEBwbGFuZV9zdGF0ZTogYXRvbWlj IHBsYW5lIHN0YXRlIHRvIHVwZGF0ZQotICoKLSAqIFJldHVybgotICogICAgIDAgLSBzY2FsZXJf dXNhZ2UgdXBkYXRlZCBzdWNjZXNzZnVsbHkKLSAqICAgIGVycm9yIC0gcmVxdWVzdGVkIHNjYWxp bmcgY2Fubm90IGJlIHN1cHBvcnRlZCBvciBvdGhlciBlcnJvciBjb25kaXRpb24KLSAqLwotc3Rh dGljIGludCBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKLQkJCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPQotCQl0b19pbnRlbF9wbGFu ZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwotCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCByZXQ7Ci0JYm9vbCBmb3Jj ZV9kZXRhY2ggPSAhZmIgfHwgIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGU7Ci0JYm9vbCBuZWVk X3NjYWxlciA9IGZhbHNlOwotCi0JLyogUHJlLWdlbjExIGFuZCBTRFIgcGxhbmVzIGFsd2F5cyBu ZWVkIGEgc2NhbGVyIGZvciBwbGFuYXIgZm9ybWF0cy4gKi8KLQlpZiAoIWljbF9pc19oZHJfcGxh bmUoZGV2X3ByaXYsIGludGVsX3BsYW5lLT5pZCkgJiYKLQkgICAgZmIgJiYgaW50ZWxfZm9ybWF0 X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKLQkJbmVl ZF9zY2FsZXIgPSB0cnVlOwotCi0JcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXIoY3J0Y19zdGF0ZSwg Zm9yY2VfZGV0YWNoLAotCQkJCWRybV9wbGFuZV9pbmRleCgmaW50ZWxfcGxhbmUtPmJhc2UpLAot CQkJCSZwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkLAotCQkJCWRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5zcmMpID4+IDE2LAotCQkJCWRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUt PnVhcGkuc3JjKSA+PiAxNiwKLQkJCQlkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KSwKLQkJCQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCi0JCQkJ ZmIgPyBmYi0+Zm9ybWF0IDogTlVMTCwKLQkJCQlmYiA/IGZiLT5tb2RpZmllciA6IDAsCi0JCQkJ bmVlZF9zY2FsZXIpOwotCi0JaWYgKHJldCB8fCBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkIDwgMCkK LQkJcmV0dXJuIHJldDsKLQotCS8qIGNoZWNrIGNvbG9ya2V5ICovCi0JaWYgKHBsYW5lX3N0YXRl LT5ja2V5LmZsYWdzKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJb UExBTkU6JWQ6JXNdIHNjYWxpbmcgd2l0aCBjb2xvciBrZXkgbm90IGFsbG93ZWQiLAotCQkJICAg IGludGVsX3BsYW5lLT5iYXNlLmJhc2UuaWQsCi0JCQkgICAgaW50ZWxfcGxhbmUtPmJhc2UubmFt ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENoZWNrIHNyYyBmb3JtYXQgKi8KLQlz d2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0J Y2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQlj YXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6 Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEw MTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQlj YXNlIERSTV9GT1JNQVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQljYXNlIERSTV9G T1JNQVRfTlYxMjoKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFU X1AwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0J Y2FzZSBEUk1fRk9STUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6Ci0JY2FzZSBEUk1f Rk9STUFUX1kyMTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgotCWNhc2UgRFJNX0ZP Uk1BVF9YVllVMTJfMTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJ YnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFU X0FCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JY2FzZSBE Uk1fRk9STUFUX0FSR0IxNjE2MTYxNkY6Ci0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQotCQkJYnJlYWs7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAotCQkJICAgICJbUExBTkU6JWQ6JXNdIEZCOiVkIHVuc3VwcG9ydGVkIHNj YWxpbmcgZm9ybWF0IDB4JXhcbiIsCi0JCQkgICAgaW50ZWxfcGxhbmUtPmJhc2UuYmFzZS5pZCwg aW50ZWxfcGxhbmUtPmJhc2UubmFtZSwKLQkJCSAgICBmYi0+YmFzZS5pZCwgZmItPmZvcm1hdC0+ Zm9ybWF0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgY25sX2NvZWZfdGFwKGludCBpKQotewotCXJldHVybiBpICUgNzsKLX0KLQotc3RhdGlj IHUxNiBjbmxfbmVhcmVzdF9maWx0ZXJfY29lZihpbnQgdCkKLXsKLQlyZXR1cm4gdCA9PSAzID8g MHgwODAwIDogMHgzMDAwOwotfQotCi0vKgotICogIFRoZW9yeSBiZWhpbmQgc2V0dGluZyBuZWFy ZXN0LW5laWdoYm9yIGludGVnZXIgc2NhbGluZzoKLSAqCi0gKiAgMTcgcGhhc2Ugb2YgNyB0YXBz IHJlcXVpcmVzIDExOSBjb2VmZmljaWVudHMgaW4gNjAgZHdvcmRzIHBlciBzZXQuCi0gKiAgVGhl IGxldHRlciByZXByZXNlbnRzIHRoZSBmaWx0ZXIgdGFwIChEIGlzIHRoZSBjZW50ZXIgdGFwKSBh bmQgdGhlIG51bWJlcgotICogIHJlcHJlc2VudHMgdGhlIGNvZWZmaWNpZW50IHNldCBmb3IgYSBw aGFzZSAoMC0xNikuCi0gKgotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHxJbmRleCB2 YWx1ZSB8IERhdGEgdmFsdWUgY29lZmZpZW50IDEgfCBEYXRhIHZhbHVlIGNvZWZmaWVudCAyIHwK LSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMDBoICAgICAgfCAgICAgICAgICBC MCAgICAgICAgICAgIHwgICAgICAgICAgQTAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKLSAqICAgICAgICAgfCAgIDAxaCAgICAgIHwgICAgICAgICAgRDAgICAgICAgICAgICB8ICAg ICAgICAgIEMwICAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHwg ICAwMmggICAgICB8ICAgICAgICAgIEYwICAgICAgICAgICAgfCAgICAgICAgICBFMCAgICAgICAg ICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMDNoICAgICAgfCAgICAg ICAgICBBMSAgICAgICAgICAgIHwgICAgICAgICAgRzAgICAgICAgICAgICB8Ci0gKiAgICAgICAg ICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKLSAqICAgICAgICAgfCAgIDA0aCAgICAgIHwgICAgICAgICAgQzEgICAgICAgICAg ICB8ICAgICAgICAgIEIxICAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAg ICAgIHwgICAuLi4gICAgICB8ICAgICAgICAgIC4uLiAgICAgICAgICAgfCAgICAgICAgICAuLi4g ICAgICAgICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMzhoICAgICAg fCAgICAgICAgICBCMTYgICAgICAgICAgIHwgICAgICAgICAgQTE2ICAgICAgICAgICB8Ci0gKiAg ICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKLSAqICAgICAgICAgfCAgIDM5aCAgICAgIHwgICAgICAgICAgRDE2ICAg ICAgICAgICB8ICAgICAgICAgIEMxNiAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0g KiAgICAgICAgIHwgICAzQWggICAgICB8ICAgICAgICAgIEYxNiAgICAgICAgICAgfCAgICAgICAg ICBDMTYgICAgICAgICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgM0Jo ICAgICAgfCAgICAgICAgUmVzZXJ2ZWQgICAgICAgIHwgICAgICAgICAgRzE2ICAgICAgICAgICB8 Ci0gKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqCi0gKiAgVG8gZW5hYmxlIG5lYXJlc3QtbmVpZ2hib3Ig c2NhbGluZzogIHByb2dyYW0gc2NhbGVyIGNvZWZmaWNlbnRzIHdpdGgKLSAqICB0aGUgY2VudGVy IHRhcCAoRHh4KSB2YWx1ZXMgc2V0IHRvIDEgYW5kIGFsbCBvdGhlciB2YWx1ZXMgc2V0IHRvIDAg YXMgcGVyCi0gKiAgU0NBTEVSX0NPRUZGSUNJRU5UX0ZPUk1BVAotICoKLSAqLwotCi1zdGF0aWMg dm9pZCBjbmxfcHJvZ3JhbV9uZWFyZXN0X2ZpbHRlcl9jb2VmcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCi0JCQkJCSAgICAgZW51bSBwaXBlIHBpcGUsIGludCBpZCwgaW50IHNl dCkKLXsKLQlpbnQgaTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDTkxfUFNfQ09F Rl9JTkRFWF9TRVQocGlwZSwgaWQsIHNldCksCi0JCQkgIFBTX0NPRUVfSU5ERVhfQVVUT19JTkMp OwotCi0JZm9yIChpID0gMDsgaSA8IDE3ICogNzsgaSArPSAyKSB7Ci0JCXUzMiB0bXA7Ci0JCWlu dCB0OwotCi0JCXQgPSBjbmxfY29lZl90YXAoaSk7Ci0JCXRtcCA9IGNubF9uZWFyZXN0X2ZpbHRl cl9jb2VmKHQpOwotCi0JCXQgPSBjbmxfY29lZl90YXAoaSArIDEpOwotCQl0bXAgfD0gY25sX25l YXJlc3RfZmlsdGVyX2NvZWYodCkgPDwgMTY7Ci0KLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIENOTF9QU19DT0VGX0RBVEFfU0VUKHBpcGUsIGlkLCBzZXQpLAotCQkJCSAgdG1wKTsKLQl9 Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ05MX1BTX0NPRUZfSU5ERVhfU0VUKHBp cGUsIGlkLCBzZXQpLCAwKTsKLX0KLQotdTMyIHNrbF9zY2FsZXJfZ2V0X2ZpbHRlcl9zZWxlY3Qo ZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyLCBpbnQgc2V0KQotewotCWlmIChmaWx0ZXIg PT0gRFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1IpIHsKLQkJcmV0dXJuIChQU19G SUxURVJfUFJPR1JBTU1FRCB8Ci0JCQlQU19ZX1ZFUlRfRklMVEVSX1NFTEVDVChzZXQpIHwKLQkJ CVBTX1lfSE9SWl9GSUxURVJfU0VMRUNUKHNldCkgfAotCQkJUFNfVVZfVkVSVF9GSUxURVJfU0VM RUNUKHNldCkgfAotCQkJUFNfVVZfSE9SWl9GSUxURVJfU0VMRUNUKHNldCkpOwotCX0KLQotCXJl dHVybiBQU19GSUxURVJfTUVESVVNOwotfQotCi12b2lkIHNrbF9zY2FsZXJfc2V0dXBfZmlsdGVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCi0JCQkg ICAgIGludCBpZCwgaW50IHNldCwgZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyKQotewot CXN3aXRjaCAoZmlsdGVyKSB7Ci0JY2FzZSBEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVDoKLQkJ YnJlYWs7Ci0JY2FzZSBEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlHSEJPUjoKLQkJY25s X3Byb2dyYW1fbmVhcmVzdF9maWx0ZXJfY29lZnMoZGV2X3ByaXYsIHBpcGUsIGlkLCBzZXQpOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmlsdGVyKTsKLQl9Ci19Ci0KIHN0 YXRpYyB2b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmgKaW5kZXggMWNjMTA3M2E4ZjY0Li4yZGE3OTAzYWFiN2UgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCkBAIC02MTAsMTIgKzYx MCw2IEBAIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4KIGludGVsX2xlZ2FjeV9hdXhf dG9fcG93ZXJfZG9tYWluKGVudW0gYXV4X2NoIGF1eF9jaCk7CiB2b2lkIGludGVsX2NydGNfYXJt X2ZpZm9fdW5kZXJydW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci0KLXUxNiBza2xfc2NhbGVyX2NhbGNfcGhhc2Uo aW50IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jZW50ZXIpOwotdm9pZCBza2xfc2NhbGVy X2Rpc2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsK LXUzMiBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVy IGZpbHRlciwgaW50IHNldCk7Ci12b2lkIHNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCi0JCQkgICAgIGludCBp ZCwgaW50IHNldCwgZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyKTsKIHZvaWQgaWxrX3Bm aXRfZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUp OwogCiBpbnQgYmR3X2dldF9waXBlbWlzY19icHAoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMKaW5kZXggZDZhMWI5 NjFhMGU4Li4zODYxOGRlMGY0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZHBfbXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kcF9tc3QuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImludGVsX2RwX21zdC5o IgogI2luY2x1ZGUgImludGVsX2RwaW9fcGh5LmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgor I2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKIAogc3RhdGljIGludCBpbnRlbF9kcF9tc3RfY29tcHV0 ZV9saW5rX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAkJCQkJICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKaW5kZXggOTk5NWJmNmMzOWI5Li43YjMxMWZiMmFmZDMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMTM3 LDY4ICsxMzcsNiBAQCBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQK LXNrbF9wcm9ncmFtX3NjYWxlcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JZW51bSBwaXBlIHBp cGUgPSBwbGFuZS0+cGlwZTsKLQlpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUtPnNjYWxlcl9p ZDsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfc2NhbGVyICpzY2FsZXIgPQotCQkmY3J0Y19zdGF0ZS0+ c2NhbGVyX3N0YXRlLnNjYWxlcnNbc2NhbGVyX2lkXTsKLQlpbnQgY3J0Y194ID0gcGxhbmVfc3Rh dGUtPnVhcGkuZHN0LngxOwotCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7 Ci0JdTMyIGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwot CXUzMiBjcnRjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0J dTE2IHlfaHBoYXNlLCB1dl9yZ2JfaHBoYXNlOwotCXUxNiB5X3ZwaGFzZSwgdXZfcmdiX3ZwaGFz ZTsKLQlpbnQgaHNjYWxlLCB2c2NhbGU7Ci0JdTMyIHBzX2N0cmw7Ci0KLQloc2NhbGUgPSBkcm1f cmVjdF9jYWxjX2hzY2FsZSgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJCSAgICAgICZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QsCi0JCQkJICAgICAgMCwgSU5UX01BWCk7Ci0JdnNjYWxlID0gZHJt X3JlY3RfY2FsY192c2NhbGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJCQkgICAgICAmcGxh bmVfc3RhdGUtPnVhcGkuZHN0LAotCQkJCSAgICAgIDAsIElOVF9NQVgpOwotCi0JLyogVE9ETzog aGFuZGxlIHN1Yi1waXhlbCBjb29yZGluYXRlcyAqLwotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19p c195dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgICFpY2xf aXNfaGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKSB7Ci0JCXlfaHBoYXNlID0gc2tsX3Nj YWxlcl9jYWxjX3BoYXNlKDEsIGhzY2FsZSwgZmFsc2UpOwotCQl5X3ZwaGFzZSA9IHNrbF9zY2Fs ZXJfY2FsY19waGFzZSgxLCB2c2NhbGUsIGZhbHNlKTsKLQotCQkvKiBNUEVHMiBjaHJvbWEgc2l0 aW5nIGNvbnZlbnRpb24gKi8KLQkJdXZfcmdiX2hwaGFzZSA9IHNrbF9zY2FsZXJfY2FsY19waGFz ZSgyLCBoc2NhbGUsIHRydWUpOwotCQl1dl9yZ2JfdnBoYXNlID0gc2tsX3NjYWxlcl9jYWxjX3Bo YXNlKDIsIHZzY2FsZSwgZmFsc2UpOwotCX0gZWxzZSB7Ci0JCS8qIG5vdCB1c2VkICovCi0JCXlf aHBoYXNlID0gMDsKLQkJeV92cGhhc2UgPSAwOwotCi0JCXV2X3JnYl9ocGhhc2UgPSBza2xfc2Nh bGVyX2NhbGNfcGhhc2UoMSwgaHNjYWxlLCBmYWxzZSk7Ci0JCXV2X3JnYl92cGhhc2UgPSBza2xf c2NhbGVyX2NhbGNfcGhhc2UoMSwgdnNjYWxlLCBmYWxzZSk7Ci0JfQotCi0JcHNfY3RybCA9IHNr bF9zY2FsZXJfZ2V0X2ZpbHRlcl9zZWxlY3QocGxhbmVfc3RhdGUtPmh3LnNjYWxpbmdfZmlsdGVy LCAwKTsKLQlwc19jdHJsIHw9IFBTX1NDQUxFUl9FTiB8IFBTX1BMQU5FX1NFTChwbGFuZS0+aWQp IHwgc2NhbGVyLT5tb2RlOwotCi0Jc2tsX3NjYWxlcl9zZXR1cF9maWx0ZXIoZGV2X3ByaXYsIHBp cGUsIHNjYWxlcl9pZCwgMCwKLQkJCQlwbGFuZV9zdGF0ZS0+aHcuc2NhbGluZ19maWx0ZXIpOwot Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19DVFJMKHBpcGUsIHNjYWxlcl9p ZCksIHBzX2N0cmwpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfVlBIQVNF KHBpcGUsIHNjYWxlcl9pZCksCi0JCQkgIFBTX1lfUEhBU0UoeV92cGhhc2UpIHwgUFNfVVZfUkdC X1BIQVNFKHV2X3JnYl92cGhhc2UpKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tM X1BTX0hQSEFTRShwaXBlLCBzY2FsZXJfaWQpLAotCQkJICBQU19ZX1BIQVNFKHlfaHBoYXNlKSB8 IFBTX1VWX1JHQl9QSEFTRSh1dl9yZ2JfaHBoYXNlKSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFNLTF9QU19XSU5fUE9TKHBpcGUsIHNjYWxlcl9pZCksCi0JCQkgIChjcnRjX3ggPDwg MTYpIHwgY3J0Y195KTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1dJTl9T WihwaXBlLCBzY2FsZXJfaWQpLAotCQkJICAoY3J0Y193IDw8IDE2KSB8IGNydGNfaCk7Ci19Ci0K IHN0YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUxNiBnYW1tYVs4XSkKIHsKIAkv KiBUaGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCmluZGV4IDQxODg5N2Y5NTNmYy4uZjY5ODlkYTJk YzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0 ZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmgKQEAg LTQ1LDEwICs0NSw2IEBAIHN0YXRpYyBpbmxpbmUgdTggaWNsX2hkcl9wbGFuZV9tYXNrKHZvaWQp CiAJCUJJVChQTEFORV9TUFJJVEUwKSB8IEJJVChQTEFORV9TUFJJVEUxKTsKIH0KIAotYm9vbCBp Y2xfaXNfbnYxMl95X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJ CSBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKTsKLWJvb2wgaWNsX2lzX2hkcl9wbGFuZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpOwotCiBp bnQgaXZiX3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKIAkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp OwogaW50IGhzd19wbGFuZV9taW5fY2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCkBAIC01Niw3ICs1Miw0IEBAIGludCBoc3dfcGxhbmVfbWluX2NkY2xrKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogaW50IHZsdl9wbGFuZV9t aW5fY2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQlj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIAotdm9pZCBza2xf cHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCWNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CiAjZW5kaWYgLyogX19JTlRFTF9TUFJJVEVfSF9fICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF9zY2FsZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3NjYWxlci5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTA2YTJmYTc5MzYzCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfc2NhbGVyLmMKQEAgLTAsMCArMSw0 OTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90 eXBlcy5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2Fs X3BsYW5lLmgiCisKKy8qCisgKiBUaGUgaGFyZHdhcmUgcGhhc2UgMC4wIHJlZmVycyB0byB0aGUg Y2VudGVyIG9mIHRoZSBwaXhlbC4KKyAqIFdlIHdhbnQgdG8gc3RhcnQgZnJvbSB0aGUgdG9wL2xl ZnQgZWRnZSB3aGljaCBpcyBwaGFzZQorICogLTAuNS4gVGhhdCBtYXRjaGVzIGhvdyB0aGUgaGFy ZHdhcmUgY2FsY3VsYXRlcyB0aGUgc2NhbGluZworICogZmFjdG9ycyAoZnJvbSB0b3AtbGVmdCBv ZiB0aGUgZmlyc3QgcGl4ZWwgdG8gYm90dG9tLXJpZ2h0CisgKiBvZiB0aGUgbGFzdCBwaXhlbCwg YXMgb3Bwb3NlZCB0byB0aGUgcGl4ZWwgY2VudGVycykuCisgKgorICogRm9yIDQ6MjowIHN1YnNh bXBsZWQgY2hyb21hIHBsYW5lcyB3ZSBvYnZpb3VzbHkgaGF2ZSB0bworICogYWRqdXN0IHRoYXQg c28gdGhhdCB0aGUgY2hyb21hIHNhbXBsZSBwb3NpdGlvbiBsYW5kcyBpbgorICogdGhlIHJpZ2h0 IHNwb3QuCisgKgorICogTm90ZSB0aGF0IGZvciBwYWNrZWQgWUNiQ3IgNDoyOjIgZm9ybWF0cyB0 aGVyZSBpcyBubyB3YXkgdG8KKyAqIGNvbnRyb2wgY2hyb21hIHNpdGluZy4gVGhlIGhhcmR3YXJl IHNpbXBseSByZXBsaWNhdGVzIHRoZQorICogY2hyb21hIHNhbXBsZXMgZm9yIGJvdGggb2YgdGhl IGx1bWEgc2FtcGxlcywgYW5kIHRodXMgd2UgZG9uJ3QKKyAqIGFjdHVhbGx5IGdldCB0aGUgZXhw ZWN0ZWQgTVBFRzIgY2hyb21hIHNpdGluZyBjb252ZW50aW9uIDooCisgKiBUaGUgc2FtZSBiZWhh dmlvdXIgaXMgb2JzZXJ2ZWQgb24gcHJlLVNLTCBwbGF0Zm9ybXMgYXMgd2VsbC4KKyAqCisgKiBU aGVvcnkgYmVoaW5kIHRoZSBmb3JtdWxhIChub3RlIHRoYXQgd2UgaWdub3JlIHN1Yi1waXhlbAor ICogc291cmNlIGNvb3JkaW5hdGVzKToKKyAqIHMgPSBzb3VyY2Ugc2FtcGxlIHBvc2l0aW9uCisg KiBkID0gZGVzdGluYXRpb24gc2FtcGxlIHBvc2l0aW9uCisgKgorICogRG93bnNjYWxpbmcgNDox OgorICogLTAuNQorICogfCAwLjAKKyAqIHwgfCAgICAgMS41IChpbml0aWFsIHBoYXNlKQorICog fCB8ICAgICB8CisgKiB2IHYgICAgIHYKKyAqIHwgcyB8IHMgfCBzIHwgcyB8CisgKiB8ICAgICAg IGQgICAgICAgfAorICoKKyAqIFVwc2NhbGluZyAxOjQ6CisgKiAtMC41CisgKiB8IC0wLjM3NSAo aW5pdGlhbCBwaGFzZSkKKyAqIHwgfCAgICAgMC4wCisgKiB8IHwgICAgIHwKKyAqIHYgdiAgICAg dgorICogfCAgICAgICBzICAgICAgIHwKKyAqIHwgZCB8IGQgfCBkIHwgZCB8CisgKi8KK3UxNiBz a2xfc2NhbGVyX2NhbGNfcGhhc2UoaW50IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jb3Np dGVkKQoreworCWludCBwaGFzZSA9IC0weDgwMDA7CisJdTE2IHRyaXAgPSAwOworCisJaWYgKGNo cm9tYV9jb3NpdGVkKQorCQlwaGFzZSArPSAoc3ViIC0gMSkgKiAweDgwMDAgLyBzdWI7CisKKwlw aGFzZSArPSBzY2FsZSAvICgyICogc3ViKTsKKworCS8qCisJICogSGFyZHdhcmUgaW5pdGlhbCBw aGFzZSBsaW1pdGVkIHRvIFstMC41OjEuNV0uCisJICogU2luY2UgdGhlIG1heCBoYXJkd2FyZSBz Y2FsZSBmYWN0b3IgaXMgMy4wLCB3ZQorCSAqIHNob3VsZCBuZXZlciBhY3R1YWxseSBleGNkZWVk IDEuMCBoZXJlLgorCSAqLworCVdBUk5fT04ocGhhc2UgPCAtMHg4MDAwIHx8IHBoYXNlID4gMHgx ODAwMCk7CisKKwlpZiAocGhhc2UgPCAwKQorCQlwaGFzZSA9IDB4MTAwMDAgKyBwaGFzZTsKKwll bHNlCisJCXRyaXAgPSBQU19QSEFTRV9UUklQOworCisJcmV0dXJuICgocGhhc2UgPj4gMikgJiBQ U19QSEFTRV9NQVNLKSB8IHRyaXA7Cit9CisKKyNkZWZpbmUgU0tMX01JTl9TUkNfVyA4CisjZGVm aW5lIFNLTF9NQVhfU1JDX1cgNDA5NgorI2RlZmluZSBTS0xfTUlOX1NSQ19IIDgKKyNkZWZpbmUg U0tMX01BWF9TUkNfSCA0MDk2CisjZGVmaW5lIFNLTF9NSU5fRFNUX1cgOAorI2RlZmluZSBTS0xf TUFYX0RTVF9XIDQwOTYKKyNkZWZpbmUgU0tMX01JTl9EU1RfSCA4CisjZGVmaW5lIFNLTF9NQVhf RFNUX0ggNDA5NgorI2RlZmluZSBJQ0xfTUFYX1NSQ19XIDUxMjAKKyNkZWZpbmUgSUNMX01BWF9T UkNfSCA0MDk2CisjZGVmaW5lIElDTF9NQVhfRFNUX1cgNTEyMAorI2RlZmluZSBJQ0xfTUFYX0RT VF9IIDQwOTYKKyNkZWZpbmUgU0tMX01JTl9ZVVZfNDIwX1NSQ19XIDE2CisjZGVmaW5lIFNLTF9N SU5fWVVWXzQyMF9TUkNfSCAxNgorCitzdGF0aWMgaW50Citza2xfdXBkYXRlX3NjYWxlcihzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgYm9vbCBmb3JjZV9kZXRhY2gsCisJCSAg dW5zaWduZWQgaW50IHNjYWxlcl91c2VyLCBpbnQgKnNjYWxlcl9pZCwKKwkJICBpbnQgc3JjX3cs IGludCBzcmNfaCwgaW50IGRzdF93LCBpbnQgZHN0X2gsCisJCSAgY29uc3Qgc3RydWN0IGRybV9m b3JtYXRfaW5mbyAqZm9ybWF0LAorCQkgIHU2NCBtb2RpZmllciwgYm9vbCBuZWVkX3NjYWxlcikK K3sKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9CisJCSZj cnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMg PQorCQl0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9jcnRjLT5iYXNlLmRldik7CisJ Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQorCQkmY3J0Y19z dGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKKworCS8qCisJICogU3JjIGNvb3JkaW5hdGVzIGFyZSBh bHJlYWR5IHJvdGF0ZWQgYnkgMjcwIGRlZ3JlZXMgZm9yCisJICogdGhlIDkwLzI3MCBkZWdyZWUg cGxhbmUgcm90YXRpb24gY2FzZXMgKHRvIG1hdGNoIHRoZQorCSAqIEdUVCBtYXBwaW5nKSwgaGVu Y2Ugbm8gbmVlZCB0byBhY2NvdW50IGZvciByb3RhdGlvbiBoZXJlLgorCSAqLworCWlmIChzcmNf dyAhPSBkc3RfdyB8fCBzcmNfaCAhPSBkc3RfaCkKKwkJbmVlZF9zY2FsZXIgPSB0cnVlOworCisJ LyoKKwkgKiBTY2FsaW5nL2ZpdHRpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlIGluIEdF TjkrCisJICogVE9ETzogSW50ZXJsYWNlIGZldGNoIG1vZGUgZG9lc24ndCBzdXBwb3J0IFlVVjQy MCBwbGFuYXIgZm9ybWF0cy4KKwkgKiBPbmNlIE5WMTIgaXMgZW5hYmxlZCwgaGFuZGxlIGl0IGhl cmUgd2hpbGUgYWxsb2NhdGluZyBzY2FsZXIKKwkgKiBmb3IgTlYxMi4KKwkgKi8KKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA5ICYmIGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJgorCSAgICBu ZWVkX3NjYWxlciAmJiBhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJM QUNFKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJQaXBlL1BsYW5l IHNjYWxpbmcgbm90IHN1cHBvcnRlZCB3aXRoIElGLUlEIG1vZGVcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwkvKgorCSAqIGlmIHBsYW5lIGlzIGJlaW5nIGRpc2FibGVkIG9yIHNjYWxl ciBpcyBubyBtb3JlIHJlcXVpcmVkIG9yIGZvcmNlIGRldGFjaAorCSAqICAtIGZyZWUgc2NhbGVy IGJpbmRlZCB0byB0aGlzIHBsYW5lL2NydGMKKwkgKiAgLSBpbiBvcmRlciB0byBkbyB0aGlzLCB1 cGRhdGUgY3J0Yy0+c2NhbGVyX3VzYWdlCisJICoKKwkgKiBIZXJlIHNjYWxlciBzdGF0ZSBpbiBj cnRjX3N0YXRlIGlzIHNldCBmcmVlIHNvIHRoYXQKKwkgKiBzY2FsZXIgY2FuIGJlIGFzc2lnbmVk IHRvIG90aGVyIHVzZXIuIEFjdHVhbCByZWdpc3RlcgorCSAqIHVwZGF0ZSB0byBmcmVlIHRoZSBz Y2FsZXIgaXMgZG9uZSBpbiBwbGFuZS9wYW5lbC1maXQgcHJvZ3JhbW1pbmcuCisJICogRm9yIHRo aXMgcHVycG9zZSBjcnRjL3BsYW5lX3N0YXRlLT5zY2FsZXJfaWQgaXNuJ3QgcmVzZXQgaGVyZS4K KwkgKi8KKwlpZiAoZm9yY2VfZGV0YWNoIHx8ICFuZWVkX3NjYWxlcikgeworCQlpZiAoKnNjYWxl cl9pZCA+PSAwKSB7CisJCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwgc2Nh bGVyX3VzZXIpOworCQkJc2NhbGVyX3N0YXRlLT5zY2FsZXJzWypzY2FsZXJfaWRdLmluX3VzZSA9 IDA7CisKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAic2NhbGVyX3Vz ZXIgaW5kZXggJXUuJXU6ICIKKwkJCQkgICAgIlN0YWdlZCBmcmVlaW5nIHNjYWxlciBpZCAlZCBz Y2FsZXJfdXNlcnMgPSAweCV4XG4iLAorCQkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJf dXNlciwgKnNjYWxlcl9pZCwKKwkJCQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOwor CQkJKnNjYWxlcl9pZCA9IC0xOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChmb3JtYXQg JiYgaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZm9ybWF0LCBtb2RpZmllcikg JiYKKwkgICAgKHNyY19oIDwgU0tMX01JTl9ZVVZfNDIwX1NSQ19IIHx8IHNyY193IDwgU0tMX01J Tl9ZVVZfNDIwX1NSQ19XKSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAg ICAiUGxhbmFyIFlVVjogc3JjIGRpbWVuc2lvbnMgbm90IG1ldFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCS8qIHJhbmdlIGNoZWNrcyAqLworCWlmIChzcmNfdyA8IFNLTF9NSU5fU1JD X1cgfHwgc3JjX2ggPCBTS0xfTUlOX1NSQ19IIHx8CisJICAgIGRzdF93IDwgU0tMX01JTl9EU1Rf VyB8fCBkc3RfaCA8IFNLTF9NSU5fRFNUX0ggfHwKKwkgICAgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTEgJiYKKwkgICAgIChzcmNfdyA+IElDTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBJQ0xfTUFY X1NSQ19IIHx8CisJICAgICAgZHN0X3cgPiBJQ0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gSUNMX01B WF9EU1RfSCkpIHx8CisJICAgIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEgJiYKKwkgICAgIChz cmNfdyA+IFNLTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBTS0xfTUFYX1NSQ19IIHx8CisJICAgICAg ZHN0X3cgPiBTS0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gU0tMX01BWF9EU1RfSCkpKQl7CisJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJzY2FsZXJfdXNlciBpbmRleCAldS4l dTogc3JjICV1eCV1IGRzdCAldXgldSAiCisJCQkgICAgInNpemUgaXMgb3V0IG9mIHNjYWxlciBy YW5nZVxuIiwKKwkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgc3JjX3csIHNy Y19oLAorCQkJICAgIGRzdF93LCBkc3RfaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8q IG1hcmsgdGhpcyBwbGFuZSBhcyBhIHNjYWxlciB1c2VyIGluIGNydGNfc3RhdGUgKi8KKwlzY2Fs ZXJfc3RhdGUtPnNjYWxlcl91c2VycyB8PSAoMSA8PCBzY2FsZXJfdXNlcik7CisJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogIgorCQkgICAgInN0 YWdlZCBzY2FsaW5nIHJlcXVlc3QgZm9yICV1eCV1LT4ldXgldSBzY2FsZXJfdXNlcnMgPSAweCV4 XG4iLAorCQkgICAgaW50ZWxfY3J0Yy0+cGlwZSwgc2NhbGVyX3VzZXIsIHNyY193LCBzcmNfaCwg ZHN0X3csIGRzdF9oLAorCQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOworCisJcmV0 dXJuIDA7Cit9CisKK2ludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpw aXBlX21vZGUgPSAmY3J0Y19zdGF0ZS0+aHcucGlwZV9tb2RlOworCWludCB3aWR0aCwgaGVpZ2h0 OworCisJaWYgKGNydGNfc3RhdGUtPnBjaF9wZml0LmVuYWJsZWQpIHsKKwkJd2lkdGggPSBkcm1f cmVjdF93aWR0aCgmY3J0Y19zdGF0ZS0+cGNoX3BmaXQuZHN0KTsKKwkJaGVpZ2h0ID0gZHJtX3Jl Y3RfaGVpZ2h0KCZjcnRjX3N0YXRlLT5wY2hfcGZpdC5kc3QpOworCX0gZWxzZSB7CisJCXdpZHRo ID0gcGlwZV9tb2RlLT5jcnRjX2hkaXNwbGF5OworCQloZWlnaHQgPSBwaXBlX21vZGUtPmNydGNf dmRpc3BsYXk7CisJfQorCXJldHVybiBza2xfdXBkYXRlX3NjYWxlcihjcnRjX3N0YXRlLCAhY3J0 Y19zdGF0ZS0+aHcuYWN0aXZlLAorCQkJCSBTS0xfQ1JUQ19JTkRFWCwKKwkJCQkgJmNydGNfc3Rh dGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJfaWQsCisJCQkJIGNydGNfc3RhdGUtPnBpcGVfc3JjX3cs IGNydGNfc3RhdGUtPnBpcGVfc3JjX2gsCisJCQkJIHdpZHRoLCBoZWlnaHQsIE5VTEwsIDAsCisJ CQkJIGNydGNfc3RhdGUtPnBjaF9wZml0LmVuYWJsZWQpOworfQorCisvKioKKyAqIHNrbF91cGRh dGVfc2NhbGVyX3BsYW5lIC0gU3RhZ2VzIHVwZGF0ZSB0byBzY2FsZXIgc3RhdGUgZm9yIGEgZ2l2 ZW4gcGxhbmUuCisgKiBAY3J0Y19zdGF0ZTogY3J0YydzIHNjYWxlciBzdGF0ZQorICogQHBsYW5l X3N0YXRlOiBhdG9taWMgcGxhbmUgc3RhdGUgdG8gdXBkYXRlCisgKgorICogUmV0dXJuCisgKiAg ICAgMCAtIHNjYWxlcl91c2FnZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQorICogICAgZXJyb3IgLSBy ZXF1ZXN0ZWQgc2NhbGluZyBjYW5ub3QgYmUgc3VwcG9ydGVkIG9yIG90aGVyIGVycm9yIGNvbmRp dGlvbgorICovCitpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0KKwkJdG9faW50 ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgcmV0OworCWJv b2wgZm9yY2VfZGV0YWNoID0gIWZiIHx8ICFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlOworCWJv b2wgbmVlZF9zY2FsZXIgPSBmYWxzZTsKKworCS8qIFByZS1nZW4xMSBhbmQgU0RSIHBsYW5lcyBh bHdheXMgbmVlZCBhIHNjYWxlciBmb3IgcGxhbmFyIGZvcm1hdHMuICovCisJaWYgKCFpY2xfaXNf aGRyX3BsYW5lKGRldl9wcml2LCBpbnRlbF9wbGFuZS0+aWQpICYmCisJICAgIGZiICYmIGludGVs X2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikp CisJCW5lZWRfc2NhbGVyID0gdHJ1ZTsKKworCXJldCA9IHNrbF91cGRhdGVfc2NhbGVyKGNydGNf c3RhdGUsIGZvcmNlX2RldGFjaCwKKwkJCQlkcm1fcGxhbmVfaW5kZXgoJmludGVsX3BsYW5lLT5i YXNlKSwKKwkJCQkmcGxhbmVfc3RhdGUtPnNjYWxlcl9pZCwKKwkJCQlkcm1fcmVjdF93aWR0aCgm cGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNiwKKwkJCQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5l X3N0YXRlLT51YXBpLnNyYykgPj4gMTYsCisJCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLmRzdCksCisJCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3Qp LAorCQkJCWZiID8gZmItPmZvcm1hdCA6IE5VTEwsCisJCQkJZmIgPyBmYi0+bW9kaWZpZXIgOiAw LAorCQkJCW5lZWRfc2NhbGVyKTsKKworCWlmIChyZXQgfHwgcGxhbmVfc3RhdGUtPnNjYWxlcl9p ZCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBjaGVjayBjb2xvcmtleSAqLworCWlmIChwbGFu ZV9zdGF0ZS0+Y2tleS5mbGFncykgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJ CSAgICAiW1BMQU5FOiVkOiVzXSBzY2FsaW5nIHdpdGggY29sb3Iga2V5IG5vdCBhbGxvd2VkIiwK KwkJCSAgICBpbnRlbF9wbGFuZS0+YmFzZS5iYXNlLmlkLAorCQkJICAgIGludGVsX3BsYW5lLT5i YXNlLm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayBzcmMgZm9ybWF0 ICovCisJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUkdC NTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1Iy MTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRf QUJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lW WVU6CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2Fz ZSBEUk1fRk9STUFUX05WMTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNhc2UgRFJN X0ZPUk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9Q MDE2OgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNh c2UgRFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwljYXNl IERSTV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2 MTY6CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJN X0ZPUk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMSkKKwkJCWJyZWFrOworCQlmYWxsdGhyb3VnaDsKKwlkZWZhdWx0OgorCQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiW1BMQU5FOiVkOiVzXSBGQjolZCB1bnN1cHBv cnRlZCBzY2FsaW5nIGZvcm1hdCAweCV4XG4iLAorCQkJICAgIGludGVsX3BsYW5lLT5iYXNlLmJh c2UuaWQsIGludGVsX3BsYW5lLT5iYXNlLm5hbWUsCisJCQkgICAgZmItPmJhc2UuaWQsIGZiLT5m b3JtYXQtPmZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGNubF9jb2VmX3RhcChpbnQgaSkKK3sKKwlyZXR1cm4gaSAlIDc7Cit9CisK K3N0YXRpYyB1MTYgY25sX25lYXJlc3RfZmlsdGVyX2NvZWYoaW50IHQpCit7CisJcmV0dXJuIHQg PT0gMyA/IDB4MDgwMCA6IDB4MzAwMDsKK30KKworLyoKKyAqICBUaGVvcnkgYmVoaW5kIHNldHRp bmcgbmVhcmVzdC1uZWlnaGJvciBpbnRlZ2VyIHNjYWxpbmc6CisgKgorICogIDE3IHBoYXNlIG9m IDcgdGFwcyByZXF1aXJlcyAxMTkgY29lZmZpY2llbnRzIGluIDYwIGR3b3JkcyBwZXIgc2V0Lgor ICogIFRoZSBsZXR0ZXIgcmVwcmVzZW50cyB0aGUgZmlsdGVyIHRhcCAoRCBpcyB0aGUgY2VudGVy IHRhcCkgYW5kIHRoZSBudW1iZXIKKyAqICByZXByZXNlbnRzIHRoZSBjb2VmZmljaWVudCBzZXQg Zm9yIGEgcGhhc2UgKDAtMTYpLgorICoKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICB8 SW5kZXggdmFsdWUgfCBEYXRhIHZhbHVlIGNvZWZmaWVudCAxIHwgRGF0YSB2YWx1ZSBjb2VmZmll bnQgMiB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDAwaCAgICAgIHwgICAg ICAgICAgQjAgICAgICAgICAgICB8ICAgICAgICAgIEEwICAgICAgICAgICAgfAorICogICAgICAg ICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAwMWggICAgICB8ICAgICAgICAgIEQwICAgICAgICAg ICAgfCAgICAgICAgICBDMCAgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAg ICAgICB8ICAgMDJoICAgICAgfCAgICAgICAgICBGMCAgICAgICAgICAgIHwgICAgICAgICAgRTAg ICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDAzaCAgICAg IHwgICAgICAgICAgQTEgICAgICAgICAgICB8ICAgICAgICAgIEcwICAgICAgICAgICAgfAorICog ICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAwNGggICAgICB8ICAgICAgICAgIEMxICAg ICAgICAgICAgfCAgICAgICAgICBCMSAgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor ICogICAgICAgICB8ICAgLi4uICAgICAgfCAgICAgICAgICAuLi4gICAgICAgICAgIHwgICAgICAg ICAgLi4uICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDM4 aCAgICAgIHwgICAgICAgICAgQjE2ICAgICAgICAgICB8ICAgICAgICAgIEExNiAgICAgICAgICAg fAorICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAzOWggICAgICB8ICAgICAgICAg IEQxNiAgICAgICAgICAgfCAgICAgICAgICBDMTYgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKworICogICAgICAgICB8ICAgM0FoICAgICAgfCAgICAgICAgICBGMTYgICAgICAgICAgIHwg ICAgICAgICAgQzE2ICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAg fCAgIDNCaCAgICAgIHwgICAgICAgIFJlc2VydmVkICAgICAgICB8ICAgICAgICAgIEcxNiAgICAg ICAgICAgfAorICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogIFRvIGVuYWJsZSBuZWFyZXN0LW5l aWdoYm9yIHNjYWxpbmc6ICBwcm9ncmFtIHNjYWxlciBjb2VmZmljZW50cyB3aXRoCisgKiAgdGhl IGNlbnRlciB0YXAgKER4eCkgdmFsdWVzIHNldCB0byAxIGFuZCBhbGwgb3RoZXIgdmFsdWVzIHNl dCB0byAwIGFzIHBlcgorICogIFNDQUxFUl9DT0VGRklDSUVOVF9GT1JNQVQKKyAqCisgKi8KKwor c3RhdGljIHZvaWQgY25sX3Byb2dyYW1fbmVhcmVzdF9maWx0ZXJfY29lZnMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgIGVudW0gcGlwZSBwaXBlLCBpbnQgaWQs IGludCBzZXQpCit7CisJaW50IGk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ05M X1BTX0NPRUZfSU5ERVhfU0VUKHBpcGUsIGlkLCBzZXQpLAorCQkJICBQU19DT0VFX0lOREVYX0FV VE9fSU5DKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNyAqIDc7IGkgKz0gMikgeworCQl1MzIgdG1w OworCQlpbnQgdDsKKworCQl0ID0gY25sX2NvZWZfdGFwKGkpOworCQl0bXAgPSBjbmxfbmVhcmVz dF9maWx0ZXJfY29lZih0KTsKKworCQl0ID0gY25sX2NvZWZfdGFwKGkgKyAxKTsKKwkJdG1wIHw9 IGNubF9uZWFyZXN0X2ZpbHRlcl9jb2VmKHQpIDw8IDE2OworCisJCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDTkxfUFNfQ09FRl9EQVRBX1NFVChwaXBlLCBpZCwgc2V0KSwKKwkJCQkgIHRt cCk7CisJfQorCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENOTF9QU19DT0VGX0lOREVY X1NFVChwaXBlLCBpZCwgc2V0KSwgMCk7Cit9CisKK3UzMiBza2xfc2NhbGVyX2dldF9maWx0ZXJf c2VsZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlciwgaW50IHNldCkKK3sKKwlpZiAo ZmlsdGVyID09IERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSB7CisJCXJldHVy biAoUFNfRklMVEVSX1BST0dSQU1NRUQgfAorCQkJUFNfWV9WRVJUX0ZJTFRFUl9TRUxFQ1Qoc2V0 KSB8CisJCQlQU19ZX0hPUlpfRklMVEVSX1NFTEVDVChzZXQpIHwKKwkJCVBTX1VWX1ZFUlRfRklM VEVSX1NFTEVDVChzZXQpIHwKKwkJCVBTX1VWX0hPUlpfRklMVEVSX1NFTEVDVChzZXQpKTsKKwl9 CisKKwlyZXR1cm4gUFNfRklMVEVSX01FRElVTTsKK30KKwordm9pZCBza2xfc2NhbGVyX3NldHVw X2ZpbHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBl LAorCQkJICAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRl cikKK3sKKwlzd2l0Y2ggKGZpbHRlcikgeworCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX0RFRkFV TFQ6CisJCWJyZWFrOworCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1I6 CisJCWNubF9wcm9ncmFtX25lYXJlc3RfZmlsdGVyX2NvZWZzKGRldl9wcml2LCBwaXBlLCBpZCwg c2V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGZpbHRlcik7CisJfQor fQorCit2b2lkCitza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwK KwkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgIGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWVu dW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJaW50IHNjYWxlcl9pZCA9IHBsYW5lX3N0YXRl LT5zY2FsZXJfaWQ7CisJY29uc3Qgc3RydWN0IGludGVsX3NjYWxlciAqc2NhbGVyID0KKwkJJmNy dGNfc3RhdGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJzW3NjYWxlcl9pZF07CisJaW50IGNydGNfeCA9 IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVh cGkuZHN0LnkxOworCXUzMiBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKKwl1MzIgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpOworCXUxNiB5X2hwaGFzZSwgdXZfcmdiX2hwaGFzZTsKKwl1MTYgeV92cGhhc2UsIHV2 X3JnYl92cGhhc2U7CisJaW50IGhzY2FsZSwgdnNjYWxlOworCXUzMiBwc19jdHJsOworCisJaHNj YWxlID0gZHJtX3JlY3RfY2FsY19oc2NhbGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCQkg ICAgICAmcGxhbmVfc3RhdGUtPnVhcGkuZHN0LAorCQkJCSAgICAgIDAsIElOVF9NQVgpOworCXZz Y2FsZSA9IGRybV9yZWN0X2NhbGNfdnNjYWxlKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJCQkJ ICAgICAgJnBsYW5lX3N0YXRlLT51YXBpLmRzdCwKKwkJCQkgICAgICAwLCBJTlRfTUFYKTsKKwor CS8qIFRPRE86IGhhbmRsZSBzdWItcGl4ZWwgY29vcmRpbmF0ZXMgKi8KKwlpZiAoaW50ZWxfZm9y bWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgor CSAgICAhaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkgeworCQl5X2hwaGFz ZSA9IHNrbF9zY2FsZXJfY2FsY19waGFzZSgxLCBoc2NhbGUsIGZhbHNlKTsKKwkJeV92cGhhc2Ug PSBza2xfc2NhbGVyX2NhbGNfcGhhc2UoMSwgdnNjYWxlLCBmYWxzZSk7CisKKwkJLyogTVBFRzIg Y2hyb21hIHNpdGluZyBjb252ZW50aW9uICovCisJCXV2X3JnYl9ocGhhc2UgPSBza2xfc2NhbGVy X2NhbGNfcGhhc2UoMiwgaHNjYWxlLCB0cnVlKTsKKwkJdXZfcmdiX3ZwaGFzZSA9IHNrbF9zY2Fs ZXJfY2FsY19waGFzZSgyLCB2c2NhbGUsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvKiBub3QgdXNl ZCAqLworCQl5X2hwaGFzZSA9IDA7CisJCXlfdnBoYXNlID0gMDsKKworCQl1dl9yZ2JfaHBoYXNl ID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIGhzY2FsZSwgZmFsc2UpOworCQl1dl9yZ2JfdnBo YXNlID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIHZzY2FsZSwgZmFsc2UpOworCX0KKworCXBz X2N0cmwgPSBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KHBsYW5lX3N0YXRlLT5ody5zY2Fs aW5nX2ZpbHRlciwgMCk7CisJcHNfY3RybCB8PSBQU19TQ0FMRVJfRU4gfCBQU19QTEFORV9TRUwo cGxhbmUtPmlkKSB8IHNjYWxlci0+bW9kZTsKKworCXNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKGRl dl9wcml2LCBwaXBlLCBzY2FsZXJfaWQsIDAsCisJCQkJcGxhbmVfc3RhdGUtPmh3LnNjYWxpbmdf ZmlsdGVyKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfQ1RSTChwaXBl LCBzY2FsZXJfaWQpLCBwc19jdHJsKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tM X1BTX1ZQSEFTRShwaXBlLCBzY2FsZXJfaWQpLAorCQkJICBQU19ZX1BIQVNFKHlfdnBoYXNlKSB8 IFBTX1VWX1JHQl9QSEFTRSh1dl9yZ2JfdnBoYXNlKSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIFNLTF9QU19IUEhBU0UocGlwZSwgc2NhbGVyX2lkKSwKKwkJCSAgUFNfWV9QSEFTRSh5 X2hwaGFzZSkgfCBQU19VVl9SR0JfUEhBU0UodXZfcmdiX2hwaGFzZSkpOworCWludGVsX2RlX3dy aXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1BPUyhwaXBlLCBzY2FsZXJfaWQpLAorCQkJICAo Y3J0Y194IDw8IDE2KSB8IGNydGNfeSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNL TF9QU19XSU5fU1oocGlwZSwgc2NhbGVyX2lkKSwKKwkJCSAgKGNydGNfdyA8PCAxNikgfCBjcnRj X2gpOworfQorCitzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YywgaW50IGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRl bF9jcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGRldik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFz YXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBTS0xfUFNfQ1RSTChpbnRlbF9jcnRjLT5waXBlLCBpZCksIDApOworCWlu dGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1BPUyhpbnRlbF9jcnRjLT5waXBl LCBpZCksIDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1NaKGlu dGVsX2NydGMtPnBpcGUsIGlkKSwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZf cHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24g ZGV0YWNoZXMgKGFrYS4gdW5iaW5kcykgdW51c2VkIHNjYWxlcnMgaW4gaGFyZHdhcmUKKyAqLwor dm9pZCBza2xfZGV0YWNoX3NjYWxlcnMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc2Nh bGVyX3N0YXRlICpzY2FsZXJfc3RhdGUgPQorCQkmY3J0Y19zdGF0ZS0+c2NhbGVyX3N0YXRlOwor CWludCBpOworCisJLyogbG9vcCB0aHJvdWdoIGFuZCBkaXNhYmxlIHNjYWxlcnMgdGhhdCBhcmVu J3QgaW4gdXNlICovCisJZm9yIChpID0gMDsgaSA8IGludGVsX2NydGMtPm51bV9zY2FsZXJzOyBp KyspIHsKKwkJaWYgKCFzY2FsZXJfc3RhdGUtPnNjYWxlcnNbaV0uaW5fdXNlKQorCQkJc2tsX2Rl dGFjaF9zY2FsZXIoaW50ZWxfY3J0YywgaSk7CisJfQorfQorCit2b2lkIHNrbF9zY2FsZXJfZGlz YWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCit7CisJ c3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKG9sZF9jcnRjX3N0YXRlLT51 YXBpLmNydGMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNydGMtPm51bV9zY2FsZXJz OyBpKyspCisJCXNrbF9kZXRhY2hfc2NhbGVyKGNydGMsIGkpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfc2NhbGVyLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L3NrbF9zY2FsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjE2YmY4MjkzNTdjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvc2tsX3NjYWxlci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBD b3Jwb3JhdGlvbgorICovCisjaWZuZGVmIElOVEVMX1NDQUxFUl9ICisjZGVmaW5lIElOVEVMX1ND QUxFUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIGRybV9zY2FsaW5nX2Zp bHRlcjsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRlOworc3RydWN0IGludGVsX2NydGNfc3RhdGU7 CitzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7CitzdHJ1Y3QgaW50ZWxfcGxhbmU7CitlbnVtIHBp cGU7CisKK2ludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKTsKKworaW50IHNrbF91cGRhdGVfc2NhbGVyX3BsYW5lKHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpOworCit1MTYgc2tsX3NjYWxlcl9jYWxjX3BoYXNlKGludCBzdWIsIGlu dCBzY2FsZSwgYm9vbCBjaHJvbWFfY2VudGVyKTsKK3UzMiBza2xfc2NhbGVyX2dldF9maWx0ZXJf c2VsZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlciwgaW50IHNldCk7Cit2b2lkIHNr bF9zY2FsZXJfc2V0dXBfZmlsdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg ZW51bSBwaXBlIHBpcGUsCisJCQkgICAgIGludCBpZCwgaW50IHNldCwgZW51bSBkcm1fc2NhbGlu Z19maWx0ZXIgZmlsdGVyKTsKKwordm9pZCBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSwKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLAorCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cit2 b2lkIHNrbF9kZXRhY2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSk7Cit2b2lkIHNrbF9zY2FsZXJfZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jCmluZGV4IDQ5M2JmZjRkODk4Mi4u NDU4ZmQxNmQ3M2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Nr bF91bml2ZXJzYWxfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Nr bF91bml2ZXJzYWxfcGxhbmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgImludGVsX3Bt LmgiCiAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCisj aW5jbHVkZSAic2tsX3NjYWxlci5oIgogI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIK IAogc3RhdGljIGNvbnN0IHUzMiBza2xfcGxhbmVfZm9ybWF0c1tdID0gewpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaAppbmRleCA3MGVi NTAxMGNkMjguLjgxODI2NjY1MzYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKQEAgLTMwLDQgKzMwLDggQEAgaW50IHNrbF9j Y3NfdG9fbWFpbl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNj c19wbGFuZSk7CiBpbnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAogCQkJCSBpbnQgKngsIGludCAqeSwgdTMy ICpvZmZzZXQpOwogCitib29sIGljbF9pc19udjEyX3lfcGxhbmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAorCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpOworYm9vbCBpY2xf aXNfaGRyX3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwbGFu ZV9pZCBwbGFuZV9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS92bHZfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Zsdl9k c2kuYwppbmRleCBmOTQwMjVlYzYwM2EuLjEwNTlhMjZjMWY1OCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS92bHZfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS92bHZfZHNpLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJpbnRlbF9m aWZvX3VuZGVycnVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKICNpbmNsdWRlICJpbnRl bF9zaWRlYmFuZC5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKIAogLyogcmV0dXJuIHBpeGVs cyBpbiB0ZXJtcyBvZiB0eGJ5dGVjbGtocyAqLwogc3RhdGljIHUxNiB0eGJ5dGVjbGtocyh1MTYg cGl4ZWxzLCBpbnQgYnBwLCBpbnQgbGFuZV9jb3VudCwKLS0gCjIuMjcuMAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==