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 B4047C433DB for ; Wed, 27 Jan 2021 03:06:21 +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 7E77E205F4 for ; Wed, 27 Jan 2021 03:06:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E77E205F4 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 1D33B6E4F4; Wed, 27 Jan 2021 03:06:21 +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 E8A0C6E4F1 for ; Wed, 27 Jan 2021 03:06:13 +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-533-1clqImMTMg-0SC9iP-J2iw-1; Tue, 26 Jan 2021 22:06:10 -0500 X-MC-Unique: 1clqImMTMg-0SC9iP-J2iw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C671A180A094 for ; Wed, 27 Jan 2021 03:06:09 +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 07E7260C05; Wed, 27 Jan 2021 03:06:08 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 27 Jan 2021 13:05:47 +1000 Message-Id: <20210127030548.29296-10-airlied@gmail.com> In-Reply-To: <20210127030548.29296-1-airlied@gmail.com> References: <20210127030548.29296-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 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 bGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA0MGNiYTZmMDc5MmQuLmI0 ZjBjMDk0MmZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTIyNCw2ICsyMjQsNyBAQCBpOTE1 LXkgKz0gXAogCWRpc3BsYXkvaW50ZWxfdGMubyBcCiAJZGlzcGxheS9pbnRlbF92Z2EubyBcCiAJ ZGlzcGxheS9pOXh4X3BsYW5lLm8gXAorCWRpc3BsYXkvc2tsX3NjYWxlci5vIFwKIAlkaXNwbGF5 L3NrbF91bml2ZXJzYWxfcGxhbmUubwogaTkxNS0kKENPTkZJR19BQ1BJKSArPSBcCiAJZGlzcGxh eS9pbnRlbF9hY3BpLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pY2xfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYwppbmRl eCA5ZWVlYzZmYWRlYzcuLjdlZjZiODljNzlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pY2xfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pY2xfZHNpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJpbnRlbF9kc2kuaCIKICNp bmNsdWRlICJpbnRlbF9wYW5lbC5oIgogI2luY2x1ZGUgImludGVsX3Zkc2MuaCIKKyNpbmNsdWRl ICJza2xfc2NhbGVyLmgiCiAjaW5jbHVkZSAic2tsX3VuaXZlcnNhbF9wbGFuZS5oIgogCiBzdGF0 aWMgaW50IGhlYWRlcl9jcmVkaXRzX2F2YWlsYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYwpp bmRleCBlMDBmZGM0N2MwZWIuLjI3ZjdkNzEwOWNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2F0b21pYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiaW50 ZWxfZ2xvYmFsX3N0YXRlLmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgogI2luY2x1ZGUgImlu dGVsX3Bzci5oIgotI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgorI2luY2x1ZGUgInNrbF91bml2 ZXJzYWxfcGxhbmUuaCIKIAogLyoqCiAgKiBpbnRlbF9kaWdpdGFsX2Nvbm5lY3Rvcl9hdG9taWNf Z2V0X3Byb3BlcnR5IC0gaG9vayBmb3IgY29ubmVjdG9yLT5hdG9taWNfZ2V0X3Byb3BlcnR5Lgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKaW5kZXggNGMwNDViMTIzMWQz Li42ZjU3ZmM4YTNmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGku YwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50 ZWxfdmRzYy5oIgogI2luY2x1ZGUgImludGVsX3Zyci5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIu aCIKICNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyBjb25zdCB1OCBp bmRleF90b19kcF9zaWduYWxfbGV2ZWxzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IGMxMDAzYjBjNTllOC4uYjAyNWFmOGE5OGMxIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTQs NiArOTQsNyBAQAogI2luY2x1ZGUgImludGVsX3RjLmgiCiAjaW5jbHVkZSAiaW50ZWxfdmdhLmgi CiAjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKICNpbmNs dWRlICJza2xfdW5pdmVyc2FsX3BsYW5lLmgiCiAKIHN0YXRpYyB2b2lkIGk5eHhfY3J0Y19jbG9j a19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCkBAIC0yNTA4LDQ3ICsyNTA5LDYgQEAgaW50 ZWxfZmluZF9pbml0aWFsX3BsYW5lX29iaihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywK IAkJICAmdG9faW50ZWxfZnJvbnRidWZmZXIoZmIpLT5iaXRzKTsKIH0KIAotc3RhdGljIHZvaWQg c2tsX2RldGFjaF9zY2FsZXIoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsIGludCBpZCkK LXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwotCXVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5s b2NrLCBpcnFmbGFncyk7Ci0KLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX0NU UkwoaW50ZWxfY3J0Yy0+cGlwZSwgaWQpLCAwKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgU0tMX1BTX1dJTl9QT1MoaW50ZWxfY3J0Yy0+cGlwZSwgaWQpLCAwKTsKLQlpbnRlbF9kZV93 cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1dJTl9TWihpbnRlbF9jcnRjLT5waXBlLCBpZCksIDAp OwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFm bGFncyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGRldGFjaGVzIChha2EuIHVuYmluZHMp IHVudXNlZCBzY2FsZXJzIGluIGhhcmR3YXJlCi0gKi8KLXN0YXRpYyB2b2lkIHNrbF9kZXRhY2hf c2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+ dWFwaS5jcnRjKTsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNjYWxl cl9zdGF0ZSA9Ci0JCSZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7Ci0JaW50IGk7Ci0KLQkvKiBs b29wIHRocm91Z2ggYW5kIGRpc2FibGUgc2NhbGVycyB0aGF0IGFyZW4ndCBpbiB1c2UgKi8KLQlm b3IgKGkgPSAwOyBpIDwgaW50ZWxfY3J0Yy0+bnVtX3NjYWxlcnM7IGkrKykgewotCQlpZiAoIXNj YWxlcl9zdGF0ZS0+c2NhbGVyc1tpXS5pbl91c2UpCi0JCQlza2xfZGV0YWNoX3NjYWxlcihpbnRl bF9jcnRjLCBpKTsKLQl9Ci19Ci0KLXZvaWQgc2tsX3NjYWxlcl9kaXNhYmxlKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0JaW50 IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+bnVtX3NjYWxlcnM7IGkrKykKLQkJc2tsX2Rl dGFjaF9zY2FsZXIoY3J0YywgaSk7Ci19Ci0KIHVuc2lnbmVkIGludAogaW50ZWxfcGxhbmVfZmVu Y2VfeV9vZmZzZXQoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK IHsKQEAgLTMxMjQsMzkzICszMDg0LDYgQEAgc3RhdGljIHZvaWQgY3B0X3ZlcmlmeV9tb2Rlc2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiB9CiAKLS8qCi0gKiBUaGUg aGFyZHdhcmUgcGhhc2UgMC4wIHJlZmVycyB0byB0aGUgY2VudGVyIG9mIHRoZSBwaXhlbC4KLSAq IFdlIHdhbnQgdG8gc3RhcnQgZnJvbSB0aGUgdG9wL2xlZnQgZWRnZSB3aGljaCBpcyBwaGFzZQot ICogLTAuNS4gVGhhdCBtYXRjaGVzIGhvdyB0aGUgaGFyZHdhcmUgY2FsY3VsYXRlcyB0aGUgc2Nh bGluZwotICogZmFjdG9ycyAoZnJvbSB0b3AtbGVmdCBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8gYm90 dG9tLXJpZ2h0Ci0gKiBvZiB0aGUgbGFzdCBwaXhlbCwgYXMgb3Bwb3NlZCB0byB0aGUgcGl4ZWwg Y2VudGVycykuCi0gKgotICogRm9yIDQ6MjowIHN1YnNhbXBsZWQgY2hyb21hIHBsYW5lcyB3ZSBv YnZpb3VzbHkgaGF2ZSB0bwotICogYWRqdXN0IHRoYXQgc28gdGhhdCB0aGUgY2hyb21hIHNhbXBs ZSBwb3NpdGlvbiBsYW5kcyBpbgotICogdGhlIHJpZ2h0IHNwb3QuCi0gKgotICogTm90ZSB0aGF0 IGZvciBwYWNrZWQgWUNiQ3IgNDoyOjIgZm9ybWF0cyB0aGVyZSBpcyBubyB3YXkgdG8KLSAqIGNv bnRyb2wgY2hyb21hIHNpdGluZy4gVGhlIGhhcmR3YXJlIHNpbXBseSByZXBsaWNhdGVzIHRoZQot ICogY2hyb21hIHNhbXBsZXMgZm9yIGJvdGggb2YgdGhlIGx1bWEgc2FtcGxlcywgYW5kIHRodXMg d2UgZG9uJ3QKLSAqIGFjdHVhbGx5IGdldCB0aGUgZXhwZWN0ZWQgTVBFRzIgY2hyb21hIHNpdGlu ZyBjb252ZW50aW9uIDooCi0gKiBUaGUgc2FtZSBiZWhhdmlvdXIgaXMgb2JzZXJ2ZWQgb24gcHJl LVNLTCBwbGF0Zm9ybXMgYXMgd2VsbC4KLSAqCi0gKiBUaGVvcnkgYmVoaW5kIHRoZSBmb3JtdWxh IChub3RlIHRoYXQgd2UgaWdub3JlIHN1Yi1waXhlbAotICogc291cmNlIGNvb3JkaW5hdGVzKToK LSAqIHMgPSBzb3VyY2Ugc2FtcGxlIHBvc2l0aW9uCi0gKiBkID0gZGVzdGluYXRpb24gc2FtcGxl IHBvc2l0aW9uCi0gKgotICogRG93bnNjYWxpbmcgNDoxOgotICogLTAuNQotICogfCAwLjAKLSAq IHwgfCAgICAgMS41IChpbml0aWFsIHBoYXNlKQotICogfCB8ICAgICB8Ci0gKiB2IHYgICAgIHYK LSAqIHwgcyB8IHMgfCBzIHwgcyB8Ci0gKiB8ICAgICAgIGQgICAgICAgfAotICoKLSAqIFVwc2Nh bGluZyAxOjQ6Ci0gKiAtMC41Ci0gKiB8IC0wLjM3NSAoaW5pdGlhbCBwaGFzZSkKLSAqIHwgfCAg ICAgMC4wCi0gKiB8IHwgICAgIHwKLSAqIHYgdiAgICAgdgotICogfCAgICAgICBzICAgICAgIHwK LSAqIHwgZCB8IGQgfCBkIHwgZCB8Ci0gKi8KLXUxNiBza2xfc2NhbGVyX2NhbGNfcGhhc2UoaW50 IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jb3NpdGVkKQotewotCWludCBwaGFzZSA9IC0w eDgwMDA7Ci0JdTE2IHRyaXAgPSAwOwotCi0JaWYgKGNocm9tYV9jb3NpdGVkKQotCQlwaGFzZSAr PSAoc3ViIC0gMSkgKiAweDgwMDAgLyBzdWI7Ci0KLQlwaGFzZSArPSBzY2FsZSAvICgyICogc3Vi KTsKLQotCS8qCi0JICogSGFyZHdhcmUgaW5pdGlhbCBwaGFzZSBsaW1pdGVkIHRvIFstMC41OjEu NV0uCi0JICogU2luY2UgdGhlIG1heCBoYXJkd2FyZSBzY2FsZSBmYWN0b3IgaXMgMy4wLCB3ZQot CSAqIHNob3VsZCBuZXZlciBhY3R1YWxseSBleGNkZWVkIDEuMCBoZXJlLgotCSAqLwotCVdBUk5f T04ocGhhc2UgPCAtMHg4MDAwIHx8IHBoYXNlID4gMHgxODAwMCk7Ci0KLQlpZiAocGhhc2UgPCAw KQotCQlwaGFzZSA9IDB4MTAwMDAgKyBwaGFzZTsKLQllbHNlCi0JCXRyaXAgPSBQU19QSEFTRV9U UklQOwotCi0JcmV0dXJuICgocGhhc2UgPj4gMikgJiBQU19QSEFTRV9NQVNLKSB8IHRyaXA7Ci19 Ci0KLSNkZWZpbmUgU0tMX01JTl9TUkNfVyA4Ci0jZGVmaW5lIFNLTF9NQVhfU1JDX1cgNDA5Ngot I2RlZmluZSBTS0xfTUlOX1NSQ19IIDgKLSNkZWZpbmUgU0tMX01BWF9TUkNfSCA0MDk2Ci0jZGVm aW5lIFNLTF9NSU5fRFNUX1cgOAotI2RlZmluZSBTS0xfTUFYX0RTVF9XIDQwOTYKLSNkZWZpbmUg U0tMX01JTl9EU1RfSCA4Ci0jZGVmaW5lIFNLTF9NQVhfRFNUX0ggNDA5NgotI2RlZmluZSBJQ0xf TUFYX1NSQ19XIDUxMjAKLSNkZWZpbmUgSUNMX01BWF9TUkNfSCA0MDk2Ci0jZGVmaW5lIElDTF9N QVhfRFNUX1cgNTEyMAotI2RlZmluZSBJQ0xfTUFYX0RTVF9IIDQwOTYKLSNkZWZpbmUgU0tMX01J Tl9ZVVZfNDIwX1NSQ19XIDE2Ci0jZGVmaW5lIFNLTF9NSU5fWVVWXzQyMF9TUkNfSCAxNgotCi1z dGF0aWMgaW50Ci1za2xfdXBkYXRlX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwgYm9vbCBmb3JjZV9kZXRhY2gsCi0JCSAgdW5zaWduZWQgaW50IHNjYWxlcl91c2Vy LCBpbnQgKnNjYWxlcl9pZCwKLQkJICBpbnQgc3JjX3csIGludCBzcmNfaCwgaW50IGRzdF93LCBp bnQgZHN0X2gsCi0JCSAgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZm9ybWF0LAotCQkg IHU2NCBtb2RpZmllciwgYm9vbCBuZWVkX3NjYWxlcikKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19z Y2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9Ci0JCSZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGU7 Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPQotCQl0b19pbnRlbF9jcnRjKGNydGNf c3RhdGUtPnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShpbnRlbF9jcnRjLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUgPQotCQkmY3J0Y19zdGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsK LQotCS8qCi0JICogU3JjIGNvb3JkaW5hdGVzIGFyZSBhbHJlYWR5IHJvdGF0ZWQgYnkgMjcwIGRl Z3JlZXMgZm9yCi0JICogdGhlIDkwLzI3MCBkZWdyZWUgcGxhbmUgcm90YXRpb24gY2FzZXMgKHRv IG1hdGNoIHRoZQotCSAqIEdUVCBtYXBwaW5nKSwgaGVuY2Ugbm8gbmVlZCB0byBhY2NvdW50IGZv ciByb3RhdGlvbiBoZXJlLgotCSAqLwotCWlmIChzcmNfdyAhPSBkc3RfdyB8fCBzcmNfaCAhPSBk c3RfaCkKLQkJbmVlZF9zY2FsZXIgPSB0cnVlOwotCi0JLyoKLQkgKiBTY2FsaW5nL2ZpdHRpbmcg bm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlIGluIEdFTjkrCi0JICogVE9ETzogSW50ZXJsYWNl IGZldGNoIG1vZGUgZG9lc24ndCBzdXBwb3J0IFlVVjQyMCBwbGFuYXIgZm9ybWF0cy4KLQkgKiBP bmNlIE5WMTIgaXMgZW5hYmxlZCwgaGFuZGxlIGl0IGhlcmUgd2hpbGUgYWxsb2NhdGluZyBzY2Fs ZXIKLQkgKiBmb3IgTlYxMi4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5ICYm IGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJgotCSAgICBuZWVkX3NjYWxlciAmJiBhZGp1c3RlZF9t b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7Ci0JCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAotCQkJICAgICJQaXBlL1BsYW5lIHNjYWxpbmcgbm90IHN1cHBvcnRlZCB3 aXRoIElGLUlEIG1vZGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIGlm IHBsYW5lIGlzIGJlaW5nIGRpc2FibGVkIG9yIHNjYWxlciBpcyBubyBtb3JlIHJlcXVpcmVkIG9y IGZvcmNlIGRldGFjaAotCSAqICAtIGZyZWUgc2NhbGVyIGJpbmRlZCB0byB0aGlzIHBsYW5lL2Ny dGMKLQkgKiAgLSBpbiBvcmRlciB0byBkbyB0aGlzLCB1cGRhdGUgY3J0Yy0+c2NhbGVyX3VzYWdl Ci0JICoKLQkgKiBIZXJlIHNjYWxlciBzdGF0ZSBpbiBjcnRjX3N0YXRlIGlzIHNldCBmcmVlIHNv IHRoYXQKLQkgKiBzY2FsZXIgY2FuIGJlIGFzc2lnbmVkIHRvIG90aGVyIHVzZXIuIEFjdHVhbCBy ZWdpc3RlcgotCSAqIHVwZGF0ZSB0byBmcmVlIHRoZSBzY2FsZXIgaXMgZG9uZSBpbiBwbGFuZS9w YW5lbC1maXQgcHJvZ3JhbW1pbmcuCi0JICogRm9yIHRoaXMgcHVycG9zZSBjcnRjL3BsYW5lX3N0 YXRlLT5zY2FsZXJfaWQgaXNuJ3QgcmVzZXQgaGVyZS4KLQkgKi8KLQlpZiAoZm9yY2VfZGV0YWNo IHx8ICFuZWVkX3NjYWxlcikgewotCQlpZiAoKnNjYWxlcl9pZCA+PSAwKSB7Ci0JCQlzY2FsZXJf c3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwgc2NhbGVyX3VzZXIpOwotCQkJc2NhbGVyX3N0 YXRlLT5zY2FsZXJzWypzY2FsZXJfaWRdLmluX3VzZSA9IDA7Ci0KLQkJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAic2NhbGVyX3VzZXIgaW5kZXggJXUuJXU6ICIKLQkJCQkg ICAgIlN0YWdlZCBmcmVlaW5nIHNjYWxlciBpZCAlZCBzY2FsZXJfdXNlcnMgPSAweCV4XG4iLAot CQkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgKnNjYWxlcl9pZCwKLQkJCQkg ICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOwotCQkJKnNjYWxlcl9pZCA9IC0xOwotCQl9 Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChmb3JtYXQgJiYgaW50ZWxfZm9ybWF0X2luZm9faXNf eXV2X3NlbWlwbGFuYXIoZm9ybWF0LCBtb2RpZmllcikgJiYKLQkgICAgKHNyY19oIDwgU0tMX01J Tl9ZVVZfNDIwX1NSQ19IIHx8IHNyY193IDwgU0tMX01JTl9ZVVZfNDIwX1NSQ19XKSkgewotCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiUGxhbmFyIFlVVjogc3JjIGRpbWVu c2lvbnMgbm90IG1ldFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHJhbmdlIGNo ZWNrcyAqLwotCWlmIChzcmNfdyA8IFNLTF9NSU5fU1JDX1cgfHwgc3JjX2ggPCBTS0xfTUlOX1NS Q19IIHx8Ci0JICAgIGRzdF93IDwgU0tMX01JTl9EU1RfVyB8fCBkc3RfaCA8IFNLTF9NSU5fRFNU X0ggfHwKLQkgICAgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEgJiYKLQkgICAgIChzcmNfdyA+ IElDTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBJQ0xfTUFYX1NSQ19IIHx8Ci0JICAgICAgZHN0X3cg PiBJQ0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gSUNMX01BWF9EU1RfSCkpIHx8Ci0JICAgIChJTlRF TF9HRU4oZGV2X3ByaXYpIDwgMTEgJiYKLQkgICAgIChzcmNfdyA+IFNLTF9NQVhfU1JDX1cgfHwg c3JjX2ggPiBTS0xfTUFYX1NSQ19IIHx8Ci0JICAgICAgZHN0X3cgPiBTS0xfTUFYX0RTVF9XIHx8 IGRzdF9oID4gU0tMX01BWF9EU1RfSCkpKQl7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJt LAotCQkJICAgICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogc3JjICV1eCV1IGRzdCAldXgldSAi Ci0JCQkgICAgInNpemUgaXMgb3V0IG9mIHNjYWxlciByYW5nZVxuIiwKLQkJCSAgICBpbnRlbF9j cnRjLT5waXBlLCBzY2FsZXJfdXNlciwgc3JjX3csIHNyY19oLAotCQkJICAgIGRzdF93LCBkc3Rf aCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIG1hcmsgdGhpcyBwbGFuZSBhcyBhIHNj YWxlciB1c2VyIGluIGNydGNfc3RhdGUgKi8KLQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyB8 PSAoMSA8PCBzY2FsZXJfdXNlcik7Ci0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJzY2Fs ZXJfdXNlciBpbmRleCAldS4ldTogIgotCQkgICAgInN0YWdlZCBzY2FsaW5nIHJlcXVlc3QgZm9y ICV1eCV1LT4ldXgldSBzY2FsZXJfdXNlcnMgPSAweCV4XG4iLAotCQkgICAgaW50ZWxfY3J0Yy0+ cGlwZSwgc2NhbGVyX3VzZXIsIHNyY193LCBzcmNfaCwgZHN0X3csIGRzdF9oLAotCQkgICAgc2Nh bGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg c2tsX3VwZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqcGlwZV9tb2RlID0gJmNydGNf c3RhdGUtPmh3LnBpcGVfbW9kZTsKLQlpbnQgd2lkdGgsIGhlaWdodDsKLQotCWlmIChjcnRjX3N0 YXRlLT5wY2hfcGZpdC5lbmFibGVkKSB7Ci0JCXdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJmNydGNf c3RhdGUtPnBjaF9wZml0LmRzdCk7Ci0JCWhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmY3J0Y19z dGF0ZS0+cGNoX3BmaXQuZHN0KTsKLQl9IGVsc2UgewotCQl3aWR0aCA9IHBpcGVfbW9kZS0+Y3J0 Y19oZGlzcGxheTsKLQkJaGVpZ2h0ID0gcGlwZV9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCX0KLQly ZXR1cm4gc2tsX3VwZGF0ZV9zY2FsZXIoY3J0Y19zdGF0ZSwgIWNydGNfc3RhdGUtPmh3LmFjdGl2 ZSwKLQkJCQkgU0tMX0NSVENfSU5ERVgsCi0JCQkJICZjcnRjX3N0YXRlLT5zY2FsZXJfc3RhdGUu c2NhbGVyX2lkLAotCQkJCSBjcnRjX3N0YXRlLT5waXBlX3NyY193LCBjcnRjX3N0YXRlLT5waXBl X3NyY19oLAotCQkJCSB3aWR0aCwgaGVpZ2h0LCBOVUxMLCAwLAotCQkJCSBjcnRjX3N0YXRlLT5w Y2hfcGZpdC5lbmFibGVkKTsKLX0KLQotLyoqCi0gKiBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZSAt IFN0YWdlcyB1cGRhdGUgdG8gc2NhbGVyIHN0YXRlIGZvciBhIGdpdmVuIHBsYW5lLgotICogQGNy dGNfc3RhdGU6IGNydGMncyBzY2FsZXIgc3RhdGUKLSAqIEBwbGFuZV9zdGF0ZTogYXRvbWljIHBs YW5lIHN0YXRlIHRvIHVwZGF0ZQotICoKLSAqIFJldHVybgotICogICAgIDAgLSBzY2FsZXJfdXNh Z2UgdXBkYXRlZCBzdWNjZXNzZnVsbHkKLSAqICAgIGVycm9yIC0gcmVxdWVzdGVkIHNjYWxpbmcg Y2Fubm90IGJlIHN1cHBvcnRlZCBvciBvdGhlciBlcnJvciBjb25kaXRpb24KLSAqLwotc3RhdGlj IGludCBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKLQkJCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQot ewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPQotCQl0b19pbnRlbF9wbGFuZShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShpbnRlbF9wbGFuZS0+YmFzZS5kZXYpOwotCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCWludCByZXQ7Ci0JYm9vbCBmb3JjZV9k ZXRhY2ggPSAhZmIgfHwgIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGU7Ci0JYm9vbCBuZWVkX3Nj YWxlciA9IGZhbHNlOwotCi0JLyogUHJlLWdlbjExIGFuZCBTRFIgcGxhbmVzIGFsd2F5cyBuZWVk IGEgc2NhbGVyIGZvciBwbGFuYXIgZm9ybWF0cy4gKi8KLQlpZiAoIWljbF9pc19oZHJfcGxhbmUo ZGV2X3ByaXYsIGludGVsX3BsYW5lLT5pZCkgJiYKLQkgICAgZmIgJiYgaW50ZWxfZm9ybWF0X2lu Zm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSkKLQkJbmVlZF9z Y2FsZXIgPSB0cnVlOwotCi0JcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXIoY3J0Y19zdGF0ZSwgZm9y Y2VfZGV0YWNoLAotCQkJCWRybV9wbGFuZV9pbmRleCgmaW50ZWxfcGxhbmUtPmJhc2UpLAotCQkJ CSZwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkLAotCQkJCWRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0 ZS0+dWFwaS5zcmMpID4+IDE2LAotCQkJCWRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVh cGkuc3JjKSA+PiAxNiwKLQkJCQlkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0 KSwKLQkJCQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCi0JCQkJZmIg PyBmYi0+Zm9ybWF0IDogTlVMTCwKLQkJCQlmYiA/IGZiLT5tb2RpZmllciA6IDAsCi0JCQkJbmVl ZF9zY2FsZXIpOwotCi0JaWYgKHJldCB8fCBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkIDwgMCkKLQkJ cmV0dXJuIHJldDsKLQotCS8qIGNoZWNrIGNvbG9ya2V5ICovCi0JaWYgKHBsYW5lX3N0YXRlLT5j a2V5LmZsYWdzKSB7Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJICAgICJbUExB TkU6JWQ6JXNdIHNjYWxpbmcgd2l0aCBjb2xvciBrZXkgbm90IGFsbG93ZWQiLAotCQkJICAgIGlu dGVsX3BsYW5lLT5iYXNlLmJhc2UuaWQsCi0JCQkgICAgaW50ZWxfcGxhbmUtPmJhc2UubmFtZSk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENoZWNrIHNyYyBmb3JtYXQgKi8KLQlzd2l0 Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Ci0JY2Fz ZSBEUk1fRk9STUFUX1hCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQljYXNl IERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0J Y2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAx MDoKLQljYXNlIERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQljYXNl IERSTV9GT1JNQVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQljYXNlIERSTV9GT1JN QVRfTlYxMjoKLQljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1Aw MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTI6Ci0JY2FzZSBEUk1fRk9STUFUX1AwMTY6Ci0JY2Fz ZSBEUk1fRk9STUFUX1kyMTA6Ci0JY2FzZSBEUk1fRk9STUFUX1kyMTI6Ci0JY2FzZSBEUk1fRk9S TUFUX1kyMTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1B VF9YVllVMTJfMTYxNjE2MTY6Ci0JY2FzZSBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNjoKLQkJYnJl YWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX0FC R1IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0IxNjE2MTYxNkY6Ci0JY2FzZSBEUk1f Rk9STUFUX0FSR0IxNjE2MTYxNkY6Ci0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQot CQkJYnJlYWs7Ci0JCWZhbGx0aHJvdWdoOwotCWRlZmF1bHQ6Ci0JCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAotCQkJICAgICJbUExBTkU6JWQ6JXNdIEZCOiVkIHVuc3VwcG9ydGVkIHNjYWxp bmcgZm9ybWF0IDB4JXhcbiIsCi0JCQkgICAgaW50ZWxfcGxhbmUtPmJhc2UuYmFzZS5pZCwgaW50 ZWxfcGxhbmUtPmJhc2UubmFtZSwKLQkJCSAgICBmYi0+YmFzZS5pZCwgZmItPmZvcm1hdC0+Zm9y bWF0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgY25sX2NvZWZfdGFwKGludCBpKQotewotCXJldHVybiBpICUgNzsKLX0KLQotc3RhdGljIHUx NiBjbmxfbmVhcmVzdF9maWx0ZXJfY29lZihpbnQgdCkKLXsKLQlyZXR1cm4gdCA9PSAzID8gMHgw ODAwIDogMHgzMDAwOwotfQotCi0vKgotICogIFRoZW9yeSBiZWhpbmQgc2V0dGluZyBuZWFyZXN0 LW5laWdoYm9yIGludGVnZXIgc2NhbGluZzoKLSAqCi0gKiAgMTcgcGhhc2Ugb2YgNyB0YXBzIHJl cXVpcmVzIDExOSBjb2VmZmljaWVudHMgaW4gNjAgZHdvcmRzIHBlciBzZXQuCi0gKiAgVGhlIGxl dHRlciByZXByZXNlbnRzIHRoZSBmaWx0ZXIgdGFwIChEIGlzIHRoZSBjZW50ZXIgdGFwKSBhbmQg dGhlIG51bWJlcgotICogIHJlcHJlc2VudHMgdGhlIGNvZWZmaWNpZW50IHNldCBmb3IgYSBwaGFz ZSAoMC0xNikuCi0gKgotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHxJbmRleCB2YWx1 ZSB8IERhdGEgdmFsdWUgY29lZmZpZW50IDEgfCBEYXRhIHZhbHVlIGNvZWZmaWVudCAyIHwKLSAq ICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMDBoICAgICAgfCAgICAgICAgICBCMCAg ICAgICAgICAgIHwgICAgICAgICAgQTAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICstLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK LSAqICAgICAgICAgfCAgIDAxaCAgICAgIHwgICAgICAgICAgRDAgICAgICAgICAgICB8ICAgICAg ICAgIEMwICAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgIHwgICAw MmggICAgICB8ICAgICAgICAgIEYwICAgICAgICAgICAgfCAgICAgICAgICBFMCAgICAgICAgICAg IHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMDNoICAgICAgfCAgICAgICAg ICBBMSAgICAgICAgICAgIHwgICAgICAgICAgRzAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKLSAqICAgICAgICAgfCAgIDA0aCAgICAgIHwgICAgICAgICAgQzEgICAgICAgICAgICB8 ICAgICAgICAgIEIxICAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAg IHwgICAuLi4gICAgICB8ICAgICAgICAgIC4uLiAgICAgICAgICAgfCAgICAgICAgICAuLi4gICAg ICAgICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgMzhoICAgICAgfCAg ICAgICAgICBCMTYgICAgICAgICAgIHwgICAgICAgICAgQTE2ICAgICAgICAgICB8Ci0gKiAgICAg ICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKLSAqICAgICAgICAgfCAgIDM5aCAgICAgIHwgICAgICAgICAgRDE2ICAgICAg ICAgICB8ICAgICAgICAgIEMxNiAgICAgICAgICAgfAotICogICAgICAgICArLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAg ICAgICAgIHwgICAzQWggICAgICB8ICAgICAgICAgIEYxNiAgICAgICAgICAgfCAgICAgICAgICBD MTYgICAgICAgICAgIHwKLSAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICB8ICAgM0JoICAg ICAgfCAgICAgICAgUmVzZXJ2ZWQgICAgICAgIHwgICAgICAgICAgRzE2ICAgICAgICAgICB8Ci0g KiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKLSAqCi0gKiAgVG8gZW5hYmxlIG5lYXJlc3QtbmVpZ2hib3Igc2Nh bGluZzogIHByb2dyYW0gc2NhbGVyIGNvZWZmaWNlbnRzIHdpdGgKLSAqICB0aGUgY2VudGVyIHRh cCAoRHh4KSB2YWx1ZXMgc2V0IHRvIDEgYW5kIGFsbCBvdGhlciB2YWx1ZXMgc2V0IHRvIDAgYXMg cGVyCi0gKiAgU0NBTEVSX0NPRUZGSUNJRU5UX0ZPUk1BVAotICoKLSAqLwotCi1zdGF0aWMgdm9p ZCBjbmxfcHJvZ3JhbV9uZWFyZXN0X2ZpbHRlcl9jb2VmcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCi0JCQkJCSAgICAgZW51bSBwaXBlIHBpcGUsIGludCBpZCwgaW50IHNldCkK LXsKLQlpbnQgaTsKLQotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDTkxfUFNfQ09FRl9J TkRFWF9TRVQocGlwZSwgaWQsIHNldCksCi0JCQkgIFBTX0NPRUVfSU5ERVhfQVVUT19JTkMpOwot Ci0JZm9yIChpID0gMDsgaSA8IDE3ICogNzsgaSArPSAyKSB7Ci0JCXUzMiB0bXA7Ci0JCWludCB0 OwotCi0JCXQgPSBjbmxfY29lZl90YXAoaSk7Ci0JCXRtcCA9IGNubF9uZWFyZXN0X2ZpbHRlcl9j b2VmKHQpOwotCi0JCXQgPSBjbmxfY29lZl90YXAoaSArIDEpOwotCQl0bXAgfD0gY25sX25lYXJl c3RfZmlsdGVyX2NvZWYodCkgPDwgMTY7Ci0KLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IENOTF9QU19DT0VGX0RBVEFfU0VUKHBpcGUsIGlkLCBzZXQpLAotCQkJCSAgdG1wKTsKLQl9Ci0K LQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ05MX1BTX0NPRUZfSU5ERVhfU0VUKHBpcGUs IGlkLCBzZXQpLCAwKTsKLX0KLQotdTMyIHNrbF9zY2FsZXJfZ2V0X2ZpbHRlcl9zZWxlY3QoZW51 bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyLCBpbnQgc2V0KQotewotCWlmIChmaWx0ZXIgPT0g RFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1IpIHsKLQkJcmV0dXJuIChQU19GSUxU RVJfUFJPR1JBTU1FRCB8Ci0JCQlQU19ZX1ZFUlRfRklMVEVSX1NFTEVDVChzZXQpIHwKLQkJCVBT X1lfSE9SWl9GSUxURVJfU0VMRUNUKHNldCkgfAotCQkJUFNfVVZfVkVSVF9GSUxURVJfU0VMRUNU KHNldCkgfAotCQkJUFNfVVZfSE9SWl9GSUxURVJfU0VMRUNUKHNldCkpOwotCX0KLQotCXJldHVy biBQU19GSUxURVJfTUVESVVNOwotfQotCi12b2lkIHNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCi0JCQkgICAg IGludCBpZCwgaW50IHNldCwgZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyKQotewotCXN3 aXRjaCAoZmlsdGVyKSB7Ci0JY2FzZSBEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVDoKLQkJYnJl YWs7Ci0JY2FzZSBEUk1fU0NBTElOR19GSUxURVJfTkVBUkVTVF9ORUlHSEJPUjoKLQkJY25sX3By b2dyYW1fbmVhcmVzdF9maWx0ZXJfY29lZnMoZGV2X3ByaXYsIHBpcGUsIGlkLCBzZXQpOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoZmlsdGVyKTsKLQl9Ci19Ci0KIHN0YXRp YyB2b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Y19zdGF0ZS0+dWFwaS5jcnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmgKaW5kZXggMWUwNTA4YmVjM2U1Li5lZmI1ZDk1NzkxZjkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCkBAIC02MDksMTIgKzYwOSw2 IEBAIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4KIGludGVsX2xlZ2FjeV9hdXhfdG9f cG93ZXJfZG9tYWluKGVudW0gYXV4X2NoIGF1eF9jaCk7CiB2b2lkIGludGVsX2NydGNfYXJtX2Zp Zm9fdW5kZXJydW4oc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Ci0KLXUxNiBza2xfc2NhbGVyX2NhbGNfcGhhc2UoaW50 IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jZW50ZXIpOwotdm9pZCBza2xfc2NhbGVyX2Rp c2FibGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKTsKLXUz MiBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZp bHRlciwgaW50IHNldCk7Ci12b2lkIHNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsCi0JCQkgICAgIGludCBpZCwg aW50IHNldCwgZW51bSBkcm1fc2NhbGluZ19maWx0ZXIgZmlsdGVyKTsKIHZvaWQgaWxrX3BmaXRf ZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpOwog CiBpbnQgYmR3X2dldF9waXBlbWlzY19icHAoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF9tc3QuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfbXN0LmMKaW5kZXggZDZhMWI5NjFh MGU4Li4zODYxOGRlMGY0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZHBfbXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcF9tc3QuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImludGVsX2RwX21zdC5oIgog I2luY2x1ZGUgImludGVsX2RwaW9fcGh5LmgiCiAjaW5jbHVkZSAiaW50ZWxfaGRjcC5oIgorI2lu Y2x1ZGUgInNrbF9zY2FsZXIuaCIKIAogc3RhdGljIGludCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9s aW5rX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAkJCQkJICAgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfc3ByaXRlLmMKaW5kZXggMzU1Yjk0NzcyNjVlLi5lNWQ5Zjg3ZGVkOTcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwpAQCAtMTM4LDY4 ICsxMzgsNiBAQCBpbnQgaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQKLXNr bF9wcm9ncmFtX3NjYWxlcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JZW51bSBwaXBlIHBpcGUg PSBwbGFuZS0+cGlwZTsKLQlpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUtPnNjYWxlcl9pZDsK LQljb25zdCBzdHJ1Y3QgaW50ZWxfc2NhbGVyICpzY2FsZXIgPQotCQkmY3J0Y19zdGF0ZS0+c2Nh bGVyX3N0YXRlLnNjYWxlcnNbc2NhbGVyX2lkXTsKLQlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUt PnVhcGkuZHN0LngxOwotCWludCBjcnRjX3kgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Ci0J dTMyIGNydGNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCXUz MiBjcnRjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0JdTE2 IHlfaHBoYXNlLCB1dl9yZ2JfaHBoYXNlOwotCXUxNiB5X3ZwaGFzZSwgdXZfcmdiX3ZwaGFzZTsK LQlpbnQgaHNjYWxlLCB2c2NhbGU7Ci0JdTMyIHBzX2N0cmw7Ci0KLQloc2NhbGUgPSBkcm1fcmVj dF9jYWxjX2hzY2FsZSgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjLAotCQkJCSAgICAgICZwbGFuZV9z dGF0ZS0+dWFwaS5kc3QsCi0JCQkJICAgICAgMCwgSU5UX01BWCk7Ci0JdnNjYWxlID0gZHJtX3Jl Y3RfY2FsY192c2NhbGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJCQkgICAgICAmcGxhbmVf c3RhdGUtPnVhcGkuZHN0LAotCQkJCSAgICAgIDAsIElOVF9NQVgpOwotCi0JLyogVE9ETzogaGFu ZGxlIHN1Yi1waXhlbCBjb29yZGluYXRlcyAqLwotCWlmIChpbnRlbF9mb3JtYXRfaW5mb19pc195 dXZfc2VtaXBsYW5hcihmYi0+Zm9ybWF0LCBmYi0+bW9kaWZpZXIpICYmCi0JICAgICFpY2xfaXNf aGRyX3BsYW5lKGRldl9wcml2LCBwbGFuZS0+aWQpKSB7Ci0JCXlfaHBoYXNlID0gc2tsX3NjYWxl cl9jYWxjX3BoYXNlKDEsIGhzY2FsZSwgZmFsc2UpOwotCQl5X3ZwaGFzZSA9IHNrbF9zY2FsZXJf Y2FsY19waGFzZSgxLCB2c2NhbGUsIGZhbHNlKTsKLQotCQkvKiBNUEVHMiBjaHJvbWEgc2l0aW5n IGNvbnZlbnRpb24gKi8KLQkJdXZfcmdiX2hwaGFzZSA9IHNrbF9zY2FsZXJfY2FsY19waGFzZSgy LCBoc2NhbGUsIHRydWUpOwotCQl1dl9yZ2JfdnBoYXNlID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNl KDIsIHZzY2FsZSwgZmFsc2UpOwotCX0gZWxzZSB7Ci0JCS8qIG5vdCB1c2VkICovCi0JCXlfaHBo YXNlID0gMDsKLQkJeV92cGhhc2UgPSAwOwotCi0JCXV2X3JnYl9ocGhhc2UgPSBza2xfc2NhbGVy X2NhbGNfcGhhc2UoMSwgaHNjYWxlLCBmYWxzZSk7Ci0JCXV2X3JnYl92cGhhc2UgPSBza2xfc2Nh bGVyX2NhbGNfcGhhc2UoMSwgdnNjYWxlLCBmYWxzZSk7Ci0JfQotCi0JcHNfY3RybCA9IHNrbF9z Y2FsZXJfZ2V0X2ZpbHRlcl9zZWxlY3QocGxhbmVfc3RhdGUtPmh3LnNjYWxpbmdfZmlsdGVyLCAw KTsKLQlwc19jdHJsIHw9IFBTX1NDQUxFUl9FTiB8IFBTX1BMQU5FX1NFTChwbGFuZS0+aWQpIHwg c2NhbGVyLT5tb2RlOwotCi0Jc2tsX3NjYWxlcl9zZXR1cF9maWx0ZXIoZGV2X3ByaXYsIHBpcGUs IHNjYWxlcl9pZCwgMCwKLQkJCQlwbGFuZV9zdGF0ZS0+aHcuc2NhbGluZ19maWx0ZXIpOwotCi0J aW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNLTF9QU19DVFJMKHBpcGUsIHNjYWxlcl9pZCks IHBzX2N0cmwpOwotCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfVlBIQVNFKHBp cGUsIHNjYWxlcl9pZCksCi0JCQkgIFBTX1lfUEhBU0UoeV92cGhhc2UpIHwgUFNfVVZfUkdCX1BI QVNFKHV2X3JnYl92cGhhc2UpKTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BT X0hQSEFTRShwaXBlLCBzY2FsZXJfaWQpLAotCQkJICBQU19ZX1BIQVNFKHlfaHBoYXNlKSB8IFBT X1VWX1JHQl9QSEFTRSh1dl9yZ2JfaHBoYXNlKSk7Ci0JaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFNLTF9QU19XSU5fUE9TKHBpcGUsIHNjYWxlcl9pZCksCi0JCQkgIChjcnRjX3ggPDwgMTYp IHwgY3J0Y195KTsKLQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BTX1dJTl9TWihw aXBlLCBzY2FsZXJfaWQpLAotCQkJICAoY3J0Y193IDw8IDE2KSB8IGNydGNfaCk7Ci19Ci0KIHN0 YXRpYyB2b2lkIGk5eHhfcGxhbmVfbGluZWFyX2dhbW1hKHUxNiBnYW1tYVs4XSkKIHsKIAkvKiBU aGUgcG9pbnRzIGFyZSBub3QgZXZlbmx5IHNwYWNlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5oCmluZGV4IDQxODg5N2Y5NTNmYy4uZjY5ODlkYTJkYzRi IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmgKQEAgLTQ1 LDEwICs0NSw2IEBAIHN0YXRpYyBpbmxpbmUgdTggaWNsX2hkcl9wbGFuZV9tYXNrKHZvaWQpCiAJ CUJJVChQTEFORV9TUFJJVEUwKSB8IEJJVChQTEFORV9TUFJJVEUxKTsKIH0KIAotYm9vbCBpY2xf aXNfbnYxMl95X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSBl bnVtIHBsYW5lX2lkIHBsYW5lX2lkKTsKLWJvb2wgaWNsX2lzX2hkcl9wbGFuZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpOwotCiBpbnQg aXZiX3BsYW5lX21pbl9jZGNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKIAkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwog aW50IGhzd19wbGFuZV9taW5fY2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCkBAIC01Niw3ICs1Miw0IEBAIGludCBoc3dfcGxhbmVfbWluX2NkY2xrKGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogaW50IHZsdl9wbGFuZV9taW5f Y2RjbGsoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQljb25z dCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKIAotdm9pZCBza2xfcHJv Z3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCWNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSk7CiAjZW5kaWYgLyogX19JTlRFTF9TUFJJVEVfSF9fICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF9zY2FsZXIuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvc2tsX3NjYWxlci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTA2YTJmYTc5MzYzCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfc2NhbGVyLmMKQEAgLTAsMCArMSw0OTcg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBl cy5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKKyNpbmNsdWRlICJza2xfdW5pdmVyc2FsX3Bs YW5lLmgiCisKKy8qCisgKiBUaGUgaGFyZHdhcmUgcGhhc2UgMC4wIHJlZmVycyB0byB0aGUgY2Vu dGVyIG9mIHRoZSBwaXhlbC4KKyAqIFdlIHdhbnQgdG8gc3RhcnQgZnJvbSB0aGUgdG9wL2xlZnQg ZWRnZSB3aGljaCBpcyBwaGFzZQorICogLTAuNS4gVGhhdCBtYXRjaGVzIGhvdyB0aGUgaGFyZHdh cmUgY2FsY3VsYXRlcyB0aGUgc2NhbGluZworICogZmFjdG9ycyAoZnJvbSB0b3AtbGVmdCBvZiB0 aGUgZmlyc3QgcGl4ZWwgdG8gYm90dG9tLXJpZ2h0CisgKiBvZiB0aGUgbGFzdCBwaXhlbCwgYXMg b3Bwb3NlZCB0byB0aGUgcGl4ZWwgY2VudGVycykuCisgKgorICogRm9yIDQ6MjowIHN1YnNhbXBs ZWQgY2hyb21hIHBsYW5lcyB3ZSBvYnZpb3VzbHkgaGF2ZSB0bworICogYWRqdXN0IHRoYXQgc28g dGhhdCB0aGUgY2hyb21hIHNhbXBsZSBwb3NpdGlvbiBsYW5kcyBpbgorICogdGhlIHJpZ2h0IHNw b3QuCisgKgorICogTm90ZSB0aGF0IGZvciBwYWNrZWQgWUNiQ3IgNDoyOjIgZm9ybWF0cyB0aGVy ZSBpcyBubyB3YXkgdG8KKyAqIGNvbnRyb2wgY2hyb21hIHNpdGluZy4gVGhlIGhhcmR3YXJlIHNp bXBseSByZXBsaWNhdGVzIHRoZQorICogY2hyb21hIHNhbXBsZXMgZm9yIGJvdGggb2YgdGhlIGx1 bWEgc2FtcGxlcywgYW5kIHRodXMgd2UgZG9uJ3QKKyAqIGFjdHVhbGx5IGdldCB0aGUgZXhwZWN0 ZWQgTVBFRzIgY2hyb21hIHNpdGluZyBjb252ZW50aW9uIDooCisgKiBUaGUgc2FtZSBiZWhhdmlv dXIgaXMgb2JzZXJ2ZWQgb24gcHJlLVNLTCBwbGF0Zm9ybXMgYXMgd2VsbC4KKyAqCisgKiBUaGVv cnkgYmVoaW5kIHRoZSBmb3JtdWxhIChub3RlIHRoYXQgd2UgaWdub3JlIHN1Yi1waXhlbAorICog c291cmNlIGNvb3JkaW5hdGVzKToKKyAqIHMgPSBzb3VyY2Ugc2FtcGxlIHBvc2l0aW9uCisgKiBk ID0gZGVzdGluYXRpb24gc2FtcGxlIHBvc2l0aW9uCisgKgorICogRG93bnNjYWxpbmcgNDoxOgor ICogLTAuNQorICogfCAwLjAKKyAqIHwgfCAgICAgMS41IChpbml0aWFsIHBoYXNlKQorICogfCB8 ICAgICB8CisgKiB2IHYgICAgIHYKKyAqIHwgcyB8IHMgfCBzIHwgcyB8CisgKiB8ICAgICAgIGQg ICAgICAgfAorICoKKyAqIFVwc2NhbGluZyAxOjQ6CisgKiAtMC41CisgKiB8IC0wLjM3NSAoaW5p dGlhbCBwaGFzZSkKKyAqIHwgfCAgICAgMC4wCisgKiB8IHwgICAgIHwKKyAqIHYgdiAgICAgdgor ICogfCAgICAgICBzICAgICAgIHwKKyAqIHwgZCB8IGQgfCBkIHwgZCB8CisgKi8KK3UxNiBza2xf c2NhbGVyX2NhbGNfcGhhc2UoaW50IHN1YiwgaW50IHNjYWxlLCBib29sIGNocm9tYV9jb3NpdGVk KQoreworCWludCBwaGFzZSA9IC0weDgwMDA7CisJdTE2IHRyaXAgPSAwOworCisJaWYgKGNocm9t YV9jb3NpdGVkKQorCQlwaGFzZSArPSAoc3ViIC0gMSkgKiAweDgwMDAgLyBzdWI7CisKKwlwaGFz ZSArPSBzY2FsZSAvICgyICogc3ViKTsKKworCS8qCisJICogSGFyZHdhcmUgaW5pdGlhbCBwaGFz ZSBsaW1pdGVkIHRvIFstMC41OjEuNV0uCisJICogU2luY2UgdGhlIG1heCBoYXJkd2FyZSBzY2Fs ZSBmYWN0b3IgaXMgMy4wLCB3ZQorCSAqIHNob3VsZCBuZXZlciBhY3R1YWxseSBleGNkZWVkIDEu MCBoZXJlLgorCSAqLworCVdBUk5fT04ocGhhc2UgPCAtMHg4MDAwIHx8IHBoYXNlID4gMHgxODAw MCk7CisKKwlpZiAocGhhc2UgPCAwKQorCQlwaGFzZSA9IDB4MTAwMDAgKyBwaGFzZTsKKwllbHNl CisJCXRyaXAgPSBQU19QSEFTRV9UUklQOworCisJcmV0dXJuICgocGhhc2UgPj4gMikgJiBQU19Q SEFTRV9NQVNLKSB8IHRyaXA7Cit9CisKKyNkZWZpbmUgU0tMX01JTl9TUkNfVyA4CisjZGVmaW5l IFNLTF9NQVhfU1JDX1cgNDA5NgorI2RlZmluZSBTS0xfTUlOX1NSQ19IIDgKKyNkZWZpbmUgU0tM X01BWF9TUkNfSCA0MDk2CisjZGVmaW5lIFNLTF9NSU5fRFNUX1cgOAorI2RlZmluZSBTS0xfTUFY X0RTVF9XIDQwOTYKKyNkZWZpbmUgU0tMX01JTl9EU1RfSCA4CisjZGVmaW5lIFNLTF9NQVhfRFNU X0ggNDA5NgorI2RlZmluZSBJQ0xfTUFYX1NSQ19XIDUxMjAKKyNkZWZpbmUgSUNMX01BWF9TUkNf SCA0MDk2CisjZGVmaW5lIElDTF9NQVhfRFNUX1cgNTEyMAorI2RlZmluZSBJQ0xfTUFYX0RTVF9I IDQwOTYKKyNkZWZpbmUgU0tMX01JTl9ZVVZfNDIwX1NSQ19XIDE2CisjZGVmaW5lIFNLTF9NSU5f WVVWXzQyMF9TUkNfSCAxNgorCitzdGF0aWMgaW50Citza2xfdXBkYXRlX3NjYWxlcihzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwgYm9vbCBmb3JjZV9kZXRhY2gsCisJCSAgdW5z aWduZWQgaW50IHNjYWxlcl91c2VyLCBpbnQgKnNjYWxlcl9pZCwKKwkJICBpbnQgc3JjX3csIGlu dCBzcmNfaCwgaW50IGRzdF93LCBpbnQgZHN0X2gsCisJCSAgY29uc3Qgc3RydWN0IGRybV9mb3Jt YXRfaW5mbyAqZm9ybWF0LAorCQkgIHU2NCBtb2RpZmllciwgYm9vbCBuZWVkX3NjYWxlcikKK3sK KwlzdHJ1Y3QgaW50ZWxfY3J0Y19zY2FsZXJfc3RhdGUgKnNjYWxlcl9zdGF0ZSA9CisJCSZjcnRj X3N0YXRlLT5zY2FsZXJfc3RhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPQor CQl0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9jcnRjLT5iYXNlLmRldik7CisJY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPQorCQkmY3J0Y19zdGF0 ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKKworCS8qCisJICogU3JjIGNvb3JkaW5hdGVzIGFyZSBhbHJl YWR5IHJvdGF0ZWQgYnkgMjcwIGRlZ3JlZXMgZm9yCisJICogdGhlIDkwLzI3MCBkZWdyZWUgcGxh bmUgcm90YXRpb24gY2FzZXMgKHRvIG1hdGNoIHRoZQorCSAqIEdUVCBtYXBwaW5nKSwgaGVuY2Ug bm8gbmVlZCB0byBhY2NvdW50IGZvciByb3RhdGlvbiBoZXJlLgorCSAqLworCWlmIChzcmNfdyAh PSBkc3RfdyB8fCBzcmNfaCAhPSBkc3RfaCkKKwkJbmVlZF9zY2FsZXIgPSB0cnVlOworCisJLyoK KwkgKiBTY2FsaW5nL2ZpdHRpbmcgbm90IHN1cHBvcnRlZCBpbiBJRi1JRCBtb2RlIGluIEdFTjkr CisJICogVE9ETzogSW50ZXJsYWNlIGZldGNoIG1vZGUgZG9lc24ndCBzdXBwb3J0IFlVVjQyMCBw bGFuYXIgZm9ybWF0cy4KKwkgKiBPbmNlIE5WMTIgaXMgZW5hYmxlZCwgaGFuZGxlIGl0IGhlcmUg d2hpbGUgYWxsb2NhdGluZyBzY2FsZXIKKwkgKiBmb3IgTlYxMi4KKwkgKi8KKwlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA+PSA5ICYmIGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJgorCSAgICBuZWVk X3NjYWxlciAmJiBhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNF KSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJQaXBlL1BsYW5lIHNj YWxpbmcgbm90IHN1cHBvcnRlZCB3aXRoIElGLUlEIG1vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwkvKgorCSAqIGlmIHBsYW5lIGlzIGJlaW5nIGRpc2FibGVkIG9yIHNjYWxlciBp cyBubyBtb3JlIHJlcXVpcmVkIG9yIGZvcmNlIGRldGFjaAorCSAqICAtIGZyZWUgc2NhbGVyIGJp bmRlZCB0byB0aGlzIHBsYW5lL2NydGMKKwkgKiAgLSBpbiBvcmRlciB0byBkbyB0aGlzLCB1cGRh dGUgY3J0Yy0+c2NhbGVyX3VzYWdlCisJICoKKwkgKiBIZXJlIHNjYWxlciBzdGF0ZSBpbiBjcnRj X3N0YXRlIGlzIHNldCBmcmVlIHNvIHRoYXQKKwkgKiBzY2FsZXIgY2FuIGJlIGFzc2lnbmVkIHRv IG90aGVyIHVzZXIuIEFjdHVhbCByZWdpc3RlcgorCSAqIHVwZGF0ZSB0byBmcmVlIHRoZSBzY2Fs ZXIgaXMgZG9uZSBpbiBwbGFuZS9wYW5lbC1maXQgcHJvZ3JhbW1pbmcuCisJICogRm9yIHRoaXMg cHVycG9zZSBjcnRjL3BsYW5lX3N0YXRlLT5zY2FsZXJfaWQgaXNuJ3QgcmVzZXQgaGVyZS4KKwkg Ki8KKwlpZiAoZm9yY2VfZGV0YWNoIHx8ICFuZWVkX3NjYWxlcikgeworCQlpZiAoKnNjYWxlcl9p ZCA+PSAwKSB7CisJCQlzY2FsZXJfc3RhdGUtPnNjYWxlcl91c2VycyAmPSB+KDEgPDwgc2NhbGVy X3VzZXIpOworCQkJc2NhbGVyX3N0YXRlLT5zY2FsZXJzWypzY2FsZXJfaWRdLmluX3VzZSA9IDA7 CisKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAic2NhbGVyX3VzZXIg aW5kZXggJXUuJXU6ICIKKwkJCQkgICAgIlN0YWdlZCBmcmVlaW5nIHNjYWxlciBpZCAlZCBzY2Fs ZXJfdXNlcnMgPSAweCV4XG4iLAorCQkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNl ciwgKnNjYWxlcl9pZCwKKwkJCQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOworCQkJ KnNjYWxlcl9pZCA9IC0xOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChmb3JtYXQgJiYg aW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZm9ybWF0LCBtb2RpZmllcikgJiYK KwkgICAgKHNyY19oIDwgU0tMX01JTl9ZVVZfNDIwX1NSQ19IIHx8IHNyY193IDwgU0tMX01JTl9Z VVZfNDIwX1NSQ19XKSkgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAi UGxhbmFyIFlVVjogc3JjIGRpbWVuc2lvbnMgbm90IG1ldFxuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCS8qIHJhbmdlIGNoZWNrcyAqLworCWlmIChzcmNfdyA8IFNLTF9NSU5fU1JDX1cg fHwgc3JjX2ggPCBTS0xfTUlOX1NSQ19IIHx8CisJICAgIGRzdF93IDwgU0tMX01JTl9EU1RfVyB8 fCBkc3RfaCA8IFNLTF9NSU5fRFNUX0ggfHwKKwkgICAgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTEgJiYKKwkgICAgIChzcmNfdyA+IElDTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBJQ0xfTUFYX1NS Q19IIHx8CisJICAgICAgZHN0X3cgPiBJQ0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gSUNMX01BWF9E U1RfSCkpIHx8CisJICAgIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEgJiYKKwkgICAgIChzcmNf dyA+IFNLTF9NQVhfU1JDX1cgfHwgc3JjX2ggPiBTS0xfTUFYX1NSQ19IIHx8CisJICAgICAgZHN0 X3cgPiBTS0xfTUFYX0RTVF9XIHx8IGRzdF9oID4gU0tMX01BWF9EU1RfSCkpKQl7CisJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTog c3JjICV1eCV1IGRzdCAldXgldSAiCisJCQkgICAgInNpemUgaXMgb3V0IG9mIHNjYWxlciByYW5n ZVxuIiwKKwkJCSAgICBpbnRlbF9jcnRjLT5waXBlLCBzY2FsZXJfdXNlciwgc3JjX3csIHNyY19o LAorCQkJICAgIGRzdF93LCBkc3RfaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIG1h cmsgdGhpcyBwbGFuZSBhcyBhIHNjYWxlciB1c2VyIGluIGNydGNfc3RhdGUgKi8KKwlzY2FsZXJf c3RhdGUtPnNjYWxlcl91c2VycyB8PSAoMSA8PCBzY2FsZXJfdXNlcik7CisJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sICJzY2FsZXJfdXNlciBpbmRleCAldS4ldTogIgorCQkgICAgInN0YWdl ZCBzY2FsaW5nIHJlcXVlc3QgZm9yICV1eCV1LT4ldXgldSBzY2FsZXJfdXNlcnMgPSAweCV4XG4i LAorCQkgICAgaW50ZWxfY3J0Yy0+cGlwZSwgc2NhbGVyX3VzZXIsIHNyY193LCBzcmNfaCwgZHN0 X3csIGRzdF9oLAorCQkgICAgc2NhbGVyX3N0YXRlLT5zY2FsZXJfdXNlcnMpOworCisJcmV0dXJu IDA7Cit9CisKK2ludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwaXBl X21vZGUgPSAmY3J0Y19zdGF0ZS0+aHcucGlwZV9tb2RlOworCWludCB3aWR0aCwgaGVpZ2h0Owor CisJaWYgKGNydGNfc3RhdGUtPnBjaF9wZml0LmVuYWJsZWQpIHsKKwkJd2lkdGggPSBkcm1fcmVj dF93aWR0aCgmY3J0Y19zdGF0ZS0+cGNoX3BmaXQuZHN0KTsKKwkJaGVpZ2h0ID0gZHJtX3JlY3Rf aGVpZ2h0KCZjcnRjX3N0YXRlLT5wY2hfcGZpdC5kc3QpOworCX0gZWxzZSB7CisJCXdpZHRoID0g cGlwZV9tb2RlLT5jcnRjX2hkaXNwbGF5OworCQloZWlnaHQgPSBwaXBlX21vZGUtPmNydGNfdmRp c3BsYXk7CisJfQorCXJldHVybiBza2xfdXBkYXRlX3NjYWxlcihjcnRjX3N0YXRlLCAhY3J0Y19z dGF0ZS0+aHcuYWN0aXZlLAorCQkJCSBTS0xfQ1JUQ19JTkRFWCwKKwkJCQkgJmNydGNfc3RhdGUt PnNjYWxlcl9zdGF0ZS5zY2FsZXJfaWQsCisJCQkJIGNydGNfc3RhdGUtPnBpcGVfc3JjX3csIGNy dGNfc3RhdGUtPnBpcGVfc3JjX2gsCisJCQkJIHdpZHRoLCBoZWlnaHQsIE5VTEwsIDAsCisJCQkJ IGNydGNfc3RhdGUtPnBjaF9wZml0LmVuYWJsZWQpOworfQorCisvKioKKyAqIHNrbF91cGRhdGVf c2NhbGVyX3BsYW5lIC0gU3RhZ2VzIHVwZGF0ZSB0byBzY2FsZXIgc3RhdGUgZm9yIGEgZ2l2ZW4g cGxhbmUuCisgKiBAY3J0Y19zdGF0ZTogY3J0YydzIHNjYWxlciBzdGF0ZQorICogQHBsYW5lX3N0 YXRlOiBhdG9taWMgcGxhbmUgc3RhdGUgdG8gdXBkYXRlCisgKgorICogUmV0dXJuCisgKiAgICAg MCAtIHNjYWxlcl91c2FnZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQorICogICAgZXJyb3IgLSByZXF1 ZXN0ZWQgc2NhbGluZyBjYW5ub3QgYmUgc3VwcG9ydGVkIG9yIG90aGVyIGVycm9yIGNvbmRpdGlv bgorICovCitpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUoc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0KKwkJdG9faW50ZWxf cGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwlpbnQgcmV0OworCWJvb2wg Zm9yY2VfZGV0YWNoID0gIWZiIHx8ICFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlOworCWJvb2wg bmVlZF9zY2FsZXIgPSBmYWxzZTsKKworCS8qIFByZS1nZW4xMSBhbmQgU0RSIHBsYW5lcyBhbHdh eXMgbmVlZCBhIHNjYWxlciBmb3IgcGxhbmFyIGZvcm1hdHMuICovCisJaWYgKCFpY2xfaXNfaGRy X3BsYW5lKGRldl9wcml2LCBpbnRlbF9wbGFuZS0+aWQpICYmCisJICAgIGZiICYmIGludGVsX2Zv cm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGZiLT5mb3JtYXQsIGZiLT5tb2RpZmllcikpCisJ CW5lZWRfc2NhbGVyID0gdHJ1ZTsKKworCXJldCA9IHNrbF91cGRhdGVfc2NhbGVyKGNydGNfc3Rh dGUsIGZvcmNlX2RldGFjaCwKKwkJCQlkcm1fcGxhbmVfaW5kZXgoJmludGVsX3BsYW5lLT5iYXNl KSwKKwkJCQkmcGxhbmVfc3RhdGUtPnNjYWxlcl9pZCwKKwkJCQlkcm1fcmVjdF93aWR0aCgmcGxh bmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNiwKKwkJCQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0 YXRlLT51YXBpLnNyYykgPj4gMTYsCisJCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCksCisJCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAor CQkJCWZiID8gZmItPmZvcm1hdCA6IE5VTEwsCisJCQkJZmIgPyBmYi0+bW9kaWZpZXIgOiAwLAor CQkJCW5lZWRfc2NhbGVyKTsKKworCWlmIChyZXQgfHwgcGxhbmVfc3RhdGUtPnNjYWxlcl9pZCA8 IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBjaGVjayBjb2xvcmtleSAqLworCWlmIChwbGFuZV9z dGF0ZS0+Y2tleS5mbGFncykgeworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCSAg ICAiW1BMQU5FOiVkOiVzXSBzY2FsaW5nIHdpdGggY29sb3Iga2V5IG5vdCBhbGxvd2VkIiwKKwkJ CSAgICBpbnRlbF9wbGFuZS0+YmFzZS5iYXNlLmlkLAorCQkJICAgIGludGVsX3BsYW5lLT5iYXNl Lm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayBzcmMgZm9ybWF0ICov CisJc3dpdGNoIChmYi0+Zm9ybWF0LT5mb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1 OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6 CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK KwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAx MDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfQUJH UjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6 CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJY2FzZSBE Uk1fRk9STUFUX05WMTI6CisJY2FzZSBEUk1fRk9STUFUX1hZVVY4ODg4OgorCWNhc2UgRFJNX0ZP Uk1BVF9QMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDEyOgorCWNhc2UgRFJNX0ZPUk1BVF9QMDE2 OgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZMjEyOgorCWNhc2Ug RFJNX0ZPUk1BVF9ZMjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMjEwMTAxMDoKKwljYXNlIERS TV9GT1JNQVRfWFZZVTEyXzE2MTYxNjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9YVllVMTYxNjE2MTY6 CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZP Uk1BVF9BQkdSMTYxNjE2MTZGOgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTYxNjE2MTZGOgorCWNh c2UgRFJNX0ZPUk1BVF9BUkdCMTYxNjE2MTZGOgorCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMSkKKwkJCWJyZWFrOworCQlmYWxsdGhyb3VnaDsKKwlkZWZhdWx0OgorCQlkcm1fZGJnX2tt cygmZGV2X3ByaXYtPmRybSwKKwkJCSAgICAiW1BMQU5FOiVkOiVzXSBGQjolZCB1bnN1cHBvcnRl ZCBzY2FsaW5nIGZvcm1hdCAweCV4XG4iLAorCQkJICAgIGludGVsX3BsYW5lLT5iYXNlLmJhc2Uu aWQsIGludGVsX3BsYW5lLT5iYXNlLm5hbWUsCisJCQkgICAgZmItPmJhc2UuaWQsIGZiLT5mb3Jt YXQtPmZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGNubF9jb2VmX3RhcChpbnQgaSkKK3sKKwlyZXR1cm4gaSAlIDc7Cit9CisKK3N0 YXRpYyB1MTYgY25sX25lYXJlc3RfZmlsdGVyX2NvZWYoaW50IHQpCit7CisJcmV0dXJuIHQgPT0g MyA/IDB4MDgwMCA6IDB4MzAwMDsKK30KKworLyoKKyAqICBUaGVvcnkgYmVoaW5kIHNldHRpbmcg bmVhcmVzdC1uZWlnaGJvciBpbnRlZ2VyIHNjYWxpbmc6CisgKgorICogIDE3IHBoYXNlIG9mIDcg dGFwcyByZXF1aXJlcyAxMTkgY29lZmZpY2llbnRzIGluIDYwIGR3b3JkcyBwZXIgc2V0LgorICog IFRoZSBsZXR0ZXIgcmVwcmVzZW50cyB0aGUgZmlsdGVyIHRhcCAoRCBpcyB0aGUgY2VudGVyIHRh cCkgYW5kIHRoZSBudW1iZXIKKyAqICByZXByZXNlbnRzIHRoZSBjb2VmZmljaWVudCBzZXQgZm9y IGEgcGhhc2UgKDAtMTYpLgorICoKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICB8SW5k ZXggdmFsdWUgfCBEYXRhIHZhbHVlIGNvZWZmaWVudCAxIHwgRGF0YSB2YWx1ZSBjb2VmZmllbnQg MiB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDAwaCAgICAgIHwgICAgICAg ICAgQjAgICAgICAgICAgICB8ICAgICAgICAgIEEwICAgICAgICAgICAgfAorICogICAgICAgICAr LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rCisgKiAgICAgICAgIHwgICAwMWggICAgICB8ICAgICAgICAgIEQwICAgICAgICAgICAg fCAgICAgICAgICBDMCAgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAg ICB8ICAgMDJoICAgICAgfCAgICAgICAgICBGMCAgICAgICAgICAgIHwgICAgICAgICAgRTAgICAg ICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDAzaCAgICAgIHwg ICAgICAgICAgQTEgICAgICAgICAgICB8ICAgICAgICAgIEcwICAgICAgICAgICAgfAorICogICAg ICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAwNGggICAgICB8ICAgICAgICAgIEMxICAgICAg ICAgICAgfCAgICAgICAgICBCMSAgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICog ICAgICAgICB8ICAgLi4uICAgICAgfCAgICAgICAgICAuLi4gICAgICAgICAgIHwgICAgICAgICAg Li4uICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAgIDM4aCAg ICAgIHwgICAgICAgICAgQjE2ICAgICAgICAgICB8ICAgICAgICAgIEExNiAgICAgICAgICAgfAor ICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgICAgICAgIHwgICAzOWggICAgICB8ICAgICAgICAgIEQx NiAgICAgICAgICAgfCAgICAgICAgICBDMTYgICAgICAgICAgIHwKKyAqICAgICAgICAgKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworICogICAgICAgICB8ICAgM0FoICAgICAgfCAgICAgICAgICBGMTYgICAgICAgICAgIHwgICAg ICAgICAgQzE2ICAgICAgICAgICB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgfCAg IDNCaCAgICAgIHwgICAgICAgIFJlc2VydmVkICAgICAgICB8ICAgICAgICAgIEcxNiAgICAgICAg ICAgfAorICogICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogIFRvIGVuYWJsZSBuZWFyZXN0LW5laWdo Ym9yIHNjYWxpbmc6ICBwcm9ncmFtIHNjYWxlciBjb2VmZmljZW50cyB3aXRoCisgKiAgdGhlIGNl bnRlciB0YXAgKER4eCkgdmFsdWVzIHNldCB0byAxIGFuZCBhbGwgb3RoZXIgdmFsdWVzIHNldCB0 byAwIGFzIHBlcgorICogIFNDQUxFUl9DT0VGRklDSUVOVF9GT1JNQVQKKyAqCisgKi8KKworc3Rh dGljIHZvaWQgY25sX3Byb2dyYW1fbmVhcmVzdF9maWx0ZXJfY29lZnMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgIGVudW0gcGlwZSBwaXBlLCBpbnQgaWQsIGlu dCBzZXQpCit7CisJaW50IGk7CisKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ05MX1BT X0NPRUZfSU5ERVhfU0VUKHBpcGUsIGlkLCBzZXQpLAorCQkJICBQU19DT0VFX0lOREVYX0FVVE9f SU5DKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNyAqIDc7IGkgKz0gMikgeworCQl1MzIgdG1wOwor CQlpbnQgdDsKKworCQl0ID0gY25sX2NvZWZfdGFwKGkpOworCQl0bXAgPSBjbmxfbmVhcmVzdF9m aWx0ZXJfY29lZih0KTsKKworCQl0ID0gY25sX2NvZWZfdGFwKGkgKyAxKTsKKwkJdG1wIHw9IGNu bF9uZWFyZXN0X2ZpbHRlcl9jb2VmKHQpIDw8IDE2OworCisJCWludGVsX2RlX3dyaXRlX2Z3KGRl dl9wcml2LCBDTkxfUFNfQ09FRl9EQVRBX1NFVChwaXBlLCBpZCwgc2V0KSwKKwkJCQkgIHRtcCk7 CisJfQorCisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENOTF9QU19DT0VGX0lOREVYX1NF VChwaXBlLCBpZCwgc2V0KSwgMCk7Cit9CisKK3UzMiBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2Vs ZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlciwgaW50IHNldCkKK3sKKwlpZiAoZmls dGVyID09IERSTV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSB7CisJCXJldHVybiAo UFNfRklMVEVSX1BST0dSQU1NRUQgfAorCQkJUFNfWV9WRVJUX0ZJTFRFUl9TRUxFQ1Qoc2V0KSB8 CisJCQlQU19ZX0hPUlpfRklMVEVSX1NFTEVDVChzZXQpIHwKKwkJCVBTX1VWX1ZFUlRfRklMVEVS X1NFTEVDVChzZXQpIHwKKwkJCVBTX1VWX0hPUlpfRklMVEVSX1NFTEVDVChzZXQpKTsKKwl9CisK KwlyZXR1cm4gUFNfRklMVEVSX01FRElVTTsKK30KKwordm9pZCBza2xfc2NhbGVyX3NldHVwX2Zp bHRlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlLAor CQkJICAgICBpbnQgaWQsIGludCBzZXQsIGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlcikK K3sKKwlzd2l0Y2ggKGZpbHRlcikgeworCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX0RFRkFVTFQ6 CisJCWJyZWFrOworCWNhc2UgRFJNX1NDQUxJTkdfRklMVEVSX05FQVJFU1RfTkVJR0hCT1I6CisJ CWNubF9wcm9ncmFtX25lYXJlc3RfZmlsdGVyX2NvZWZzKGRldl9wcml2LCBwaXBlLCBpZCwgc2V0 KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGZpbHRlcik7CisJfQorfQor Cit2b2lkCitza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJ ICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWVudW0g cGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJaW50IHNjYWxlcl9pZCA9IHBsYW5lX3N0YXRlLT5z Y2FsZXJfaWQ7CisJY29uc3Qgc3RydWN0IGludGVsX3NjYWxlciAqc2NhbGVyID0KKwkJJmNydGNf c3RhdGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJzW3NjYWxlcl9pZF07CisJaW50IGNydGNfeCA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdC54MTsKKwlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPnVhcGku ZHN0LnkxOworCXUzMiBjcnRjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KTsKKwl1MzIgY3J0Y19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOworCXUxNiB5X2hwaGFzZSwgdXZfcmdiX2hwaGFzZTsKKwl1MTYgeV92cGhhc2UsIHV2X3Jn Yl92cGhhc2U7CisJaW50IGhzY2FsZSwgdnNjYWxlOworCXUzMiBwc19jdHJsOworCisJaHNjYWxl ID0gZHJtX3JlY3RfY2FsY19oc2NhbGUoJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKKwkJCQkgICAg ICAmcGxhbmVfc3RhdGUtPnVhcGkuZHN0LAorCQkJCSAgICAgIDAsIElOVF9NQVgpOworCXZzY2Fs ZSA9IGRybV9yZWN0X2NhbGNfdnNjYWxlKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCisJCQkJICAg ICAgJnBsYW5lX3N0YXRlLT51YXBpLmRzdCwKKwkJCQkgICAgICAwLCBJTlRfTUFYKTsKKworCS8q IFRPRE86IGhhbmRsZSBzdWItcGl4ZWwgY29vcmRpbmF0ZXMgKi8KKwlpZiAoaW50ZWxfZm9ybWF0 X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoZmItPmZvcm1hdCwgZmItPm1vZGlmaWVyKSAmJgorCSAg ICAhaWNsX2lzX2hkcl9wbGFuZShkZXZfcHJpdiwgcGxhbmUtPmlkKSkgeworCQl5X2hwaGFzZSA9 IHNrbF9zY2FsZXJfY2FsY19waGFzZSgxLCBoc2NhbGUsIGZhbHNlKTsKKwkJeV92cGhhc2UgPSBz a2xfc2NhbGVyX2NhbGNfcGhhc2UoMSwgdnNjYWxlLCBmYWxzZSk7CisKKwkJLyogTVBFRzIgY2hy b21hIHNpdGluZyBjb252ZW50aW9uICovCisJCXV2X3JnYl9ocGhhc2UgPSBza2xfc2NhbGVyX2Nh bGNfcGhhc2UoMiwgaHNjYWxlLCB0cnVlKTsKKwkJdXZfcmdiX3ZwaGFzZSA9IHNrbF9zY2FsZXJf Y2FsY19waGFzZSgyLCB2c2NhbGUsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvKiBub3QgdXNlZCAq LworCQl5X2hwaGFzZSA9IDA7CisJCXlfdnBoYXNlID0gMDsKKworCQl1dl9yZ2JfaHBoYXNlID0g c2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIGhzY2FsZSwgZmFsc2UpOworCQl1dl9yZ2JfdnBoYXNl ID0gc2tsX3NjYWxlcl9jYWxjX3BoYXNlKDEsIHZzY2FsZSwgZmFsc2UpOworCX0KKworCXBzX2N0 cmwgPSBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2VsZWN0KHBsYW5lX3N0YXRlLT5ody5zY2FsaW5n X2ZpbHRlciwgMCk7CisJcHNfY3RybCB8PSBQU19TQ0FMRVJfRU4gfCBQU19QTEFORV9TRUwocGxh bmUtPmlkKSB8IHNjYWxlci0+bW9kZTsKKworCXNrbF9zY2FsZXJfc2V0dXBfZmlsdGVyKGRldl9w cml2LCBwaXBlLCBzY2FsZXJfaWQsIDAsCisJCQkJcGxhbmVfc3RhdGUtPmh3LnNjYWxpbmdfZmls dGVyKTsKKworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfQ1RSTChwaXBlLCBz Y2FsZXJfaWQpLCBwc19jdHJsKTsKKwlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgU0tMX1BT X1ZQSEFTRShwaXBlLCBzY2FsZXJfaWQpLAorCQkJICBQU19ZX1BIQVNFKHlfdnBoYXNlKSB8IFBT X1VWX1JHQl9QSEFTRSh1dl9yZ2JfdnBoYXNlKSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIFNLTF9QU19IUEhBU0UocGlwZSwgc2NhbGVyX2lkKSwKKwkJCSAgUFNfWV9QSEFTRSh5X2hw aGFzZSkgfCBQU19VVl9SR0JfUEhBU0UodXZfcmdiX2hwaGFzZSkpOworCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1BPUyhwaXBlLCBzY2FsZXJfaWQpLAorCQkJICAoY3J0 Y194IDw8IDE2KSB8IGNydGNfeSk7CisJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIFNLTF9Q U19XSU5fU1oocGlwZSwgc2NhbGVyX2lkKSwKKwkJCSAgKGNydGNfdyA8PCAxNikgfCBjcnRjX2gp OworfQorCitzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAq aW50ZWxfY3J0YywgaW50IGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9j cnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKworCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBTS0xfUFNfQ1RSTChpbnRlbF9jcnRjLT5waXBlLCBpZCksIDApOworCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1BPUyhpbnRlbF9jcnRjLT5waXBlLCBp ZCksIDApOworCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBTS0xfUFNfV0lOX1NaKGludGVs X2NydGMtPnBpcGUsIGlkKSwgMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJp di0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0 YWNoZXMgKGFrYS4gdW5iaW5kcykgdW51c2VkIHNjYWxlcnMgaW4gaGFyZHdhcmUKKyAqLwordm9p ZCBza2xfZGV0YWNoX3NjYWxlcnMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRj KGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc2NhbGVy X3N0YXRlICpzY2FsZXJfc3RhdGUgPQorCQkmY3J0Y19zdGF0ZS0+c2NhbGVyX3N0YXRlOworCWlu dCBpOworCisJLyogbG9vcCB0aHJvdWdoIGFuZCBkaXNhYmxlIHNjYWxlcnMgdGhhdCBhcmVuJ3Qg aW4gdXNlICovCisJZm9yIChpID0gMDsgaSA8IGludGVsX2NydGMtPm51bV9zY2FsZXJzOyBpKysp IHsKKwkJaWYgKCFzY2FsZXJfc3RhdGUtPnNjYWxlcnNbaV0uaW5fdXNlKQorCQkJc2tsX2RldGFj aF9zY2FsZXIoaW50ZWxfY3J0YywgaSk7CisJfQorfQorCit2b2lkIHNrbF9zY2FsZXJfZGlzYWJs ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCit7CisJc3Ry dWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKG9sZF9jcnRjX3N0YXRlLT51YXBp LmNydGMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNydGMtPm51bV9zY2FsZXJzOyBp KyspCisJCXNrbF9kZXRhY2hfc2NhbGVyKGNydGMsIGkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfc2NhbGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L3NrbF9zY2FsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjE2YmY4MjkzNTdjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvc2tsX3NjYWxlci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jw b3JhdGlvbgorICovCisjaWZuZGVmIElOVEVMX1NDQUxFUl9ICisjZGVmaW5lIElOVEVMX1NDQUxF Ul9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIGRybV9zY2FsaW5nX2ZpbHRl cjsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRlOworc3RydWN0IGludGVsX2NydGNfc3RhdGU7Citz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGU7CitzdHJ1Y3QgaW50ZWxfcGxhbmU7CitlbnVtIHBpcGU7 CisKK2ludCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKTsKKworaW50IHNrbF91cGRhdGVfc2NhbGVyX3BsYW5lKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUpOworCit1MTYgc2tsX3NjYWxlcl9jYWxjX3BoYXNlKGludCBzdWIsIGludCBz Y2FsZSwgYm9vbCBjaHJvbWFfY2VudGVyKTsKK3UzMiBza2xfc2NhbGVyX2dldF9maWx0ZXJfc2Vs ZWN0KGVudW0gZHJtX3NjYWxpbmdfZmlsdGVyIGZpbHRlciwgaW50IHNldCk7Cit2b2lkIHNrbF9z Y2FsZXJfc2V0dXBfZmlsdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51 bSBwaXBlIHBpcGUsCisJCQkgICAgIGludCBpZCwgaW50IHNldCwgZW51bSBkcm1fc2NhbGluZ19m aWx0ZXIgZmlsdGVyKTsKKwordm9pZCBza2xfcHJvZ3JhbV9zY2FsZXIoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAorCQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cit2b2lk IHNrbF9kZXRhY2hfc2NhbGVycyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7Cit2b2lkIHNrbF9zY2FsZXJfZGlzYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqb2xkX2NydGNfc3RhdGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvc2tsX3VuaXZlcnNhbF9wbGFuZS5jCmluZGV4IDAyOGUyODk3YjM5Zi4uMGNi OTNkZWI5Y2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91 bml2ZXJzYWxfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91 bml2ZXJzYWxfcGxhbmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgImludGVsX3BtLmgi CiAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCisjaW5j bHVkZSAic2tsX3NjYWxlci5oIgogI2luY2x1ZGUgInNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIAog c3RhdGljIGNvbnN0IHUzMiBza2xfcGxhbmVfZm9ybWF0c1tdID0gewpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L3NrbF91bml2ZXJzYWxfcGxhbmUuaAppbmRleCA3MGViNTAx MGNkMjguLjgxODI2NjY1MzYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9za2xfdW5pdmVyc2FsX3BsYW5lLmgKQEAgLTMwLDQgKzMwLDggQEAgaW50IHNrbF9jY3Nf dG9fbWFpbl9wbGFuZShjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNjc19w bGFuZSk7CiBpbnQgc2tsX2NhbGNfbWFpbl9zdXJmYWNlX29mZnNldChjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAogCQkJCSBpbnQgKngsIGludCAqeSwgdTMyICpv ZmZzZXQpOwogCitib29sIGljbF9pc19udjEyX3lfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAorCQkJIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQpOworYm9vbCBpY2xfaXNf aGRyX3BsYW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwbGFuZV9p ZCBwbGFuZV9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS92bHZfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L3Zsdl9kc2ku YwppbmRleCBmOTQwMjVlYzYwM2EuLjEwNTlhMjZjMWY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS92bHZfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS92bHZfZHNpLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJpbnRlbF9maWZv X3VuZGVycnVuLmgiCiAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKICNpbmNsdWRlICJpbnRlbF9z aWRlYmFuZC5oIgorI2luY2x1ZGUgInNrbF9zY2FsZXIuaCIKIAogLyogcmV0dXJuIHBpeGVscyBp biB0ZXJtcyBvZiB0eGJ5dGVjbGtocyAqLwogc3RhdGljIHUxNiB0eGJ5dGVjbGtocyh1MTYgcGl4 ZWxzLCBpbnQgYnBwLCBpbnQgbGFuZV9jb3VudCwKLS0gCjIuMjcuMAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==