From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 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,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 9BF4DC433DB for ; Mon, 21 Dec 2020 04:04: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 5373A22BF3 for ; Mon, 21 Dec 2020 04:04:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5373A22BF3 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 E53356E457; Mon, 21 Dec 2020 04:04:20 +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 16B226E456 for ; Mon, 21 Dec 2020 04:04:18 +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-71-TRMNtD17NNKMYhlU0iNBlw-1; Sun, 20 Dec 2020 23:04:15 -0500 X-MC-Unique: TRMNtD17NNKMYhlU0iNBlw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id AD8BE809DC3; Mon, 21 Dec 2020 04:04:14 +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 9922C5D9CA; Mon, 21 Dec 2020 04:04:13 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Mon, 21 Dec 2020 14:03:47 +1000 Message-Id: <20201221040357.4928-7-airlied@gmail.com> In-Reply-To: <20201221040357.4928-1-airlied@gmail.com> References: <20201221040357.4928-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=airlied@gmail.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 06/16] drm/i915: refactor some crtc code out of intel display. (v2) 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: Jani Nikula , Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoZXJlIG1heSBiZSBtb3Jl IGNydGMgY29kZSB0aGF0IGNhbiBiZSBwdWxsZWQgb3V0LCBidXQgdGhpcwppcyBhIGdvb2Qgc3Rh cnQuCgp2MjogbW92ZSBwbGFuZSBiZWZvcmUgdGhpcy4KClNpZ25lZC1vZmYtYnk6IERhdmUgQWly bGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CltKYW5pOiBjbGVhbmVkIHVwIGludGVsX2NydGMuaCBh IGJpdC5dClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+ ClJldmlld2VkLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jICAgIHwgMzI2 ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf Y3J0Yy5oICAgIHwgIDIyICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuYyB8IDMwNiArLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAzNTAgaW5z ZXJ0aW9ucygrKSwgMzA1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmgKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl CmluZGV4IGMxZmE1YTkzMTBmOS4uOWY1MDE2NTAwNGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpA QCAtMTk2LDYgKzE5Niw3IEBAIGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9jb2xvci5vIFwK IAlkaXNwbGF5L2ludGVsX2NvbWJvX3BoeS5vIFwKIAlkaXNwbGF5L2ludGVsX2Nvbm5lY3Rvci5v IFwKKwlkaXNwbGF5L2ludGVsX2NydGMubyBcCiAJZGlzcGxheS9pbnRlbF9jc3IubyBcCiAJZGlz cGxheS9pbnRlbF9jdXJzb3IubyBcCiAJZGlzcGxheS9pbnRlbF9kaXNwbGF5Lm8gXApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jcnRjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmFkNjNkZjE2Mzg1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCkBAIC0wLDAgKzEsMzI2IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAg SW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZS5oPgor I2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJpbnRlbF9hdG9t aWMuaCIKKyNpbmNsdWRlICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKKyNpbmNsdWRlICJpbnRlbF9j b2xvci5oIgorI2luY2x1ZGUgImludGVsX2NydGMuaCIKKyNpbmNsdWRlICJpbnRlbF9jdXJzb3Iu aCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpbnRlbF9k aXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfcGlwZV9jcmMuaCIKKyNpbmNsdWRlICJp bnRlbF9zcHJpdGUuaCIKKyNpbmNsdWRlICJpOXh4X3BsYW5lLmgiCisKK3N0YXRpYyB2b2lkIGFz c2VydF92YmxhbmtfZGlzYWJsZWQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCWlmIChJOTE1 X1NUQVRFX1dBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKSkKKwkJZHJtX2Ny dGNfdmJsYW5rX3B1dChjcnRjKTsKK30KKwordTMyIGludGVsX2NydGNfZ2V0X3ZibGFua19jb3Vu dGVyKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2 LT52YmxhbmtbZHJtX2NydGNfaW5kZXgoJmNydGMtPmJhc2UpXTsKKworCWlmICghdmJsYW5rLT5t YXhfdmJsYW5rX2NvdW50KQorCQlyZXR1cm4gKHUzMilkcm1fY3J0Y19hY2N1cmF0ZV92Ymxhbmtf Y291bnQoJmNydGMtPmJhc2UpOworCisJcmV0dXJuIGNydGMtPmJhc2UuZnVuY3MtPmdldF92Ymxh bmtfY291bnRlcigmY3J0Yy0+YmFzZSk7Cit9CisKK3UzMiBpbnRlbF9jcnRjX21heF92Ymxhbmtf Y291bnQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT51YXBp LmNydGMtPmRldik7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNy dGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJdTMyIG1vZGVfZmxhZ3MgPSBjcnRjLT5tb2RlX2ZsYWdz OworCisJLyoKKwkgKiBGcm9tIEdlbiAxMSwgSW4gY2FzZSBvZiBkc2kgY21kIG1vZGUsIGZyYW1l IGNvdW50ZXIgd291bGRudAorCSAqIGhhdmUgdXBkYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFRF LCBpZiB3ZSB3YW50IHRvIHVzZQorCSAqIHRoZSBodyBjb3VudGVyLCB0aGVuIHdlIHdvdWxkIGZp bmQgaXQgdXBkYXRlZCBpbiBvbmx5CisJICogdGhlIG5leHQgVEUsIGhlbmNlIHN3aXRjaGluZyB0 byBzdyBjb3VudGVyLgorCSAqLworCWlmIChtb2RlX2ZsYWdzICYgKEk5MTVfTU9ERV9GTEFHX0RT SV9VU0VfVEUwIHwgSTkxNV9NT0RFX0ZMQUdfRFNJX1VTRV9URTEpKQorCQlyZXR1cm4gMDsKKwor CS8qCisJICogT24gaTk2NWdtIHRoZSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyIHJlYWRzCisJICog emVybyB3aGVuIHRoZSBUViBlbmNvZGVyIGlzIGVuYWJsZWQgOigKKwkgKi8KKwlpZiAoSVNfSTk2 NUdNKGRldl9wcml2KSAmJgorCSAgICAoY3J0Y19zdGF0ZS0+b3V0cHV0X3R5cGVzICYgQklUKElO VEVMX09VVFBVVF9UVk9VVCkpKQorCQlyZXR1cm4gMDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7IC8qIGZ1 bGwgMzIgYml0IGNvdW50ZXIgKi8KKwllbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDMp CisJCXJldHVybiAweGZmZmZmZjsgLyogb25seSAyNCBiaXRzIG9mIGZyYW1lIGNvdW50ICovCisJ ZWxzZQorCQlyZXR1cm4gMDsgLyogR2VuMiBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBj b3VudGVyICovCit9CisKK3ZvaWQgaW50ZWxfY3J0Y192Ymxhbmtfb24oY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMg PSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisKKwlhc3NlcnRfdmJsYW5r X2Rpc2FibGVkKCZjcnRjLT5iYXNlKTsKKwlkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3VudCgm Y3J0Yy0+YmFzZSwKKwkJCQkgICAgICBpbnRlbF9jcnRjX21heF92YmxhbmtfY291bnQoY3J0Y19z dGF0ZSkpOworCWRybV9jcnRjX3ZibGFua19vbigmY3J0Yy0+YmFzZSk7Cit9CisKK3ZvaWQgaW50 ZWxfY3J0Y192Ymxhbmtfb2ZmKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0 YXRlLT51YXBpLmNydGMpOworCisJZHJtX2NydGNfdmJsYW5rX29mZigmY3J0Yy0+YmFzZSk7CisJ YXNzZXJ0X3ZibGFua19kaXNhYmxlZCgmY3J0Yy0+YmFzZSk7Cit9CisKK3N0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICppbnRlbF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KQoreworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJY3J0Y19zdGF0 ZSA9IGttYWxsb2Moc2l6ZW9mKCpjcnRjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoY3J0 Y19zdGF0ZSkKKwkJaW50ZWxfY3J0Y19zdGF0ZV9yZXNldChjcnRjX3N0YXRlLCBjcnRjKTsKKwor CXJldHVybiBjcnRjX3N0YXRlOworfQorCit2b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgc3RydWN0IGludGVsX2Ny dGMgKmNydGMpCit7CisJbWVtc2V0KGNydGNfc3RhdGUsIDAsIHNpemVvZigqY3J0Y19zdGF0ZSkp OworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX3N0YXRlX3Jlc2V0KCZjcnRjX3N0YXRlLT51 YXBpLCAmY3J0Yy0+YmFzZSk7CisKKwljcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2RlciA9IElOVkFM SURfVFJBTlNDT0RFUjsKKwljcnRjX3N0YXRlLT5tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURf VFJBTlNDT0RFUjsKKwljcnRjX3N0YXRlLT5oc3dfd29ya2Fyb3VuZF9waXBlID0gSU5WQUxJRF9Q SVBFOworCWNydGNfc3RhdGUtPm91dHB1dF9mb3JtYXQgPSBJTlRFTF9PVVRQVVRfRk9STUFUX0lO VkFMSUQ7CisJY3J0Y19zdGF0ZS0+c2NhbGVyX3N0YXRlLnNjYWxlcl9pZCA9IC0xOworCWNydGNf c3RhdGUtPm1zdF9tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKK30KKwor c3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjX2FsbG9jKHZvaWQpCit7CisJc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJc3RydWN0IGludGVsX2NydGMgKmNy dGM7CisKKwljcnRjID0ga3phbGxvYyhzaXplb2YoKmNydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWNydGMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJY3J0Y19zdGF0ZSA9IGludGVs X2NydGNfc3RhdGVfYWxsb2MoY3J0Yyk7CisJaWYgKCFjcnRjX3N0YXRlKSB7CisJCWtmcmVlKGNy dGMpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwljcnRjLT5iYXNlLnN0YXRl ID0gJmNydGNfc3RhdGUtPnVhcGk7CisJY3J0Yy0+Y29uZmlnID0gY3J0Y19zdGF0ZTsKKworCXJl dHVybiBjcnRjOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2ZyZWUoc3RydWN0IGludGVs X2NydGMgKmNydGMpCit7CisJaW50ZWxfY3J0Y19kZXN0cm95X3N0YXRlKCZjcnRjLT5iYXNlLCBj cnRjLT5iYXNlLnN0YXRlKTsKKwlrZnJlZShjcnRjKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxf Y3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwlkcm1fY3J0Y19jbGVhbnVw KGNydGMpOworCWtmcmVlKGludGVsX2NydGMpOworfQorCitzdGF0aWMgaW50IGludGVsX2NydGNf bGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaW50ZWxfY3J0Y19kZWJ1 Z2ZzX2FkZChjcnRjKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBJTlRFTF9DUlRDX0ZVTkNT IFwKKwkuZ2FtbWFfc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldCwgXAor CS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywgXAorCS5kZXN0cm95 ID0gaW50ZWxfY3J0Y19kZXN0cm95LCBcCisJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVy X3BhZ2VfZmxpcCwgXAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfY3J0Y19kdXBs aWNhdGVfc3RhdGUsIFwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9jcnRjX2Rlc3Ry b3lfc3RhdGUsIFwKKwkuc2V0X2NyY19zb3VyY2UgPSBpbnRlbF9jcnRjX3NldF9jcmNfc291cmNl LCBcCisJLnZlcmlmeV9jcmNfc291cmNlID0gaW50ZWxfY3J0Y192ZXJpZnlfY3JjX3NvdXJjZSwg XAorCS5nZXRfY3JjX3NvdXJjZXMgPSBpbnRlbF9jcnRjX2dldF9jcmNfc291cmNlcywgXAorCS5s YXRlX3JlZ2lzdGVyID0gaW50ZWxfY3J0Y19sYXRlX3JlZ2lzdGVyCisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2NydGNfZnVuY3MgYmR3X2NydGNfZnVuY3MgPSB7CisJSU5URUxfQ1JUQ19GVU5D UywKKworCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAorCS5l bmFibGVfdmJsYW5rID0gYmR3X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gYmR3 X2Rpc2FibGVfdmJsYW5rLAorCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0 X3ZibGFua190aW1lc3RhbXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1 bmNzIGlsa19jcnRjX2Z1bmNzID0geworCUlOVEVMX0NSVENfRlVOQ1MsCisKKwkuZ2V0X3ZibGFu a19jb3VudGVyID0gZzR4X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IGls a19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IGlsa19kaXNhYmxlX3ZibGFuaywK KwkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1w LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBnNHhfY3J0Y19mdW5j cyA9IHsKKwlJTlRFTF9DUlRDX0ZVTkNTLAorCisJLmdldF92YmxhbmtfY291bnRlciA9IGc0eF9n ZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBpOTY1X2VuYWJsZV92Ymxhbmss CisJLmRpc2FibGVfdmJsYW5rID0gaTk2NV9kaXNhYmxlX3ZibGFuaywKKwkuZ2V0X3ZibGFua190 aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOTY1X2NydGNfZnVuY3MgPSB7CisJSU5URUxf Q1JUQ19GVU5DUywKKworCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291 bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IGk5NjVfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92 YmxhbmsgPSBpOTY1X2Rpc2FibGVfdmJsYW5rLAorCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGlu dGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2Z1bmNzIGk5MTVnbV9jcnRjX2Z1bmNzID0geworCUlOVEVMX0NSVENfRlVOQ1Ms CisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVu YWJsZV92YmxhbmsgPSBpOTE1Z21fZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBp OTE1Z21fZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0 Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfZnVuY3MgaTkxNV9jcnRjX2Z1bmNzID0geworCUlOVEVMX0NSVENfRlVOQ1MsCisKKwkuZ2V0 X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92Ymxh bmsgPSBpOHh4X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTh4eF9kaXNhYmxl X3ZibGFuaywKKwkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92Ymxhbmtf dGltZXN0YW1wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpOHh4 X2NydGNfZnVuY3MgPSB7CisJSU5URUxfQ1JUQ19GVU5DUywKKworCS8qIG5vIGh3IHZibGFuayBj b3VudGVyICovCisJLmVuYWJsZV92YmxhbmsgPSBpOHh4X2VuYWJsZV92YmxhbmssCisJLmRpc2Fi bGVfdmJsYW5rID0gaTh4eF9kaXNhYmxlX3ZibGFuaywKKwkuZ2V0X3ZibGFua190aW1lc3RhbXAg PSBpbnRlbF9jcnRjX2dldF92YmxhbmtfdGltZXN0YW1wLAorfTsKKworaW50IGludGVsX2NydGNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKQor eworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcHJpbWFyeSwgKmN1cnNvcjsKKwljb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfZnVuY3MgKmZ1bmNzOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOworCWludCBz cHJpdGUsIHJldDsKKworCWNydGMgPSBpbnRlbF9jcnRjX2FsbG9jKCk7CisJaWYgKElTX0VSUihj cnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Yyk7CisKKwljcnRjLT5waXBlID0gcGlwZTsKKwlj cnRjLT5udW1fc2NhbGVycyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9zY2FsZXJzW3Bp cGVdOworCisJcHJpbWFyeSA9IGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKGRldl9wcml2LCBw aXBlKTsKKwlpZiAoSVNfRVJSKHByaW1hcnkpKSB7CisJCXJldCA9IFBUUl9FUlIocHJpbWFyeSk7 CisJCWdvdG8gZmFpbDsKKwl9CisJY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKHByaW1hcnkt PmlkKTsKKworCWZvcl9lYWNoX3Nwcml0ZShkZXZfcHJpdiwgcGlwZSwgc3ByaXRlKSB7CisJCXN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7CisKKwkJcGxhbmUgPSBpbnRlbF9zcHJpdGVfcGxhbmVf Y3JlYXRlKGRldl9wcml2LCBwaXBlLCBzcHJpdGUpOworCQlpZiAoSVNfRVJSKHBsYW5lKSkgewor CQkJcmV0ID0gUFRSX0VSUihwbGFuZSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJY3J0Yy0+cGxh bmVfaWRzX21hc2sgfD0gQklUKHBsYW5lLT5pZCk7CisJfQorCisJY3Vyc29yID0gaW50ZWxfY3Vy c29yX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7CisJaWYgKElTX0VSUihjdXJzb3IpKSB7 CisJCXJldCA9IFBUUl9FUlIoY3Vyc29yKTsKKwkJZ290byBmYWlsOworCX0KKwljcnRjLT5wbGFu ZV9pZHNfbWFzayB8PSBCSVQoY3Vyc29yLT5pZCk7CisKKwlpZiAoSEFTX0dNQ0goZGV2X3ByaXYp KSB7CisJCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fAorCQkgICAgSVNfVkFMTEVZVklF VyhkZXZfcHJpdikgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJCWZ1bmNzID0gJmc0eF9jcnRjX2Z1 bmNzOworCQllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDQpKQorCQkJZnVuY3MgPSAmaTk2NV9j cnRjX2Z1bmNzOworCQllbHNlIGlmIChJU19JOTQ1R00oZGV2X3ByaXYpIHx8IElTX0k5MTVHTShk ZXZfcHJpdikpCisJCQlmdW5jcyA9ICZpOTE1Z21fY3J0Y19mdW5jczsKKwkJZWxzZSBpZiAoSVNf R0VOKGRldl9wcml2LCAzKSkKKwkJCWZ1bmNzID0gJmk5MTVfY3J0Y19mdW5jczsKKwkJZWxzZQor CQkJZnVuY3MgPSAmaTh4eF9jcnRjX2Z1bmNzOworCX0gZWxzZSB7CisJCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDgpCisJCQlmdW5jcyA9ICZiZHdfY3J0Y19mdW5jczsKKwkJZWxzZQorCQkJ ZnVuY3MgPSAmaWxrX2NydGNfZnVuY3M7CisJfQorCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRo X3BsYW5lcygmZGV2X3ByaXYtPmRybSwgJmNydGMtPmJhc2UsCisJCQkJCSZwcmltYXJ5LT5iYXNl LCAmY3Vyc29yLT5iYXNlLAorCQkJCQlmdW5jcywgInBpcGUgJWMiLCBwaXBlX25hbWUocGlwZSkp OworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCUJVR19PTihwaXBlID49IEFSUkFZX1NJWkUo ZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nKSB8fAorCSAgICAgICBkZXZfcHJpdi0+cGlw ZV90b19jcnRjX21hcHBpbmdbcGlwZV0gIT0gTlVMTCk7CisJZGV2X3ByaXYtPnBpcGVfdG9fY3J0 Y19tYXBwaW5nW3BpcGVdID0gY3J0YzsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkg eworCQllbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSA9IHByaW1hcnktPmk5eHhfcGxhbmU7 CisKKwkJQlVHX09OKGk5eHhfcGxhbmUgPj0gQVJSQVlfU0laRShkZXZfcHJpdi0+cGxhbmVfdG9f Y3J0Y19tYXBwaW5nKSB8fAorCQkgICAgICAgZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGlu Z1tpOXh4X3BsYW5lXSAhPSBOVUxMKTsKKwkJZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGlu Z1tpOXh4X3BsYW5lXSA9IGNydGM7CisJfQorCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTApCisJCWRybV9jcnRjX2NyZWF0ZV9zY2FsaW5nX2ZpbHRlcl9wcm9wZXJ0eSgmY3J0Yy0+YmFz ZSwKKwkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfREVGQVVMVCkgfAorCQkJCQkJQklUKERS TV9TQ0FMSU5HX0ZJTFRFUl9ORUFSRVNUX05FSUdIQk9SKSk7CisKKwlpbnRlbF9jb2xvcl9pbml0 KGNydGMpOworCisJaW50ZWxfY3J0Y19jcmNfaW5pdChjcnRjKTsKKworCWRybV9XQVJOX09OKCZk ZXZfcHJpdi0+ZHJtLCBkcm1fY3J0Y19pbmRleCgmY3J0Yy0+YmFzZSkgIT0gY3J0Yy0+cGlwZSk7 CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpbnRlbF9jcnRjX2ZyZWUoY3J0Yyk7CisKKwlyZXR1 cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NydGMuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA4MTEyZDU1NzQxMQotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5oCkBA IC0wLDAgKzEsMjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX0lO VEVMX0NSVENfSF8KKyNkZWZpbmUgX0lOVEVMX0NSVENfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisKK2VudW0gcGlwZTsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRlOworc3RydWN0IGlu dGVsX2NydGM7CitzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKKwordTMyIGludGVsX2NydGNfbWF4 X3ZibGFua19jb3VudChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7 CitpbnQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg ZW51bSBwaXBlIHBpcGUpOworc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX2NydGNfc3Rh dGVfYWxsb2Moc3RydWN0IGludGVsX2NydGMgKmNydGMpOwordm9pZCBpbnRlbF9jcnRjX3N0YXRl X3Jlc2V0KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgIHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5jCmluZGV4IDE0ZTcxNGZiM2I0OS4uNTE0YjgzNzhhY2YxIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtNjgs OCArNjgsOCBAQAogI2luY2x1ZGUgImludGVsX2J3LmgiCiAjaW5jbHVkZSAiaW50ZWxfY2RjbGsu aCIKICNpbmNsdWRlICJpbnRlbF9jb2xvci5oIgorI2luY2x1ZGUgImludGVsX2NydGMuaCIKICNp bmNsdWRlICJpbnRlbF9jc3IuaCIKLSNpbmNsdWRlICJpbnRlbF9jdXJzb3IuaCIKICNpbmNsdWRl ICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHBfbGlua190cmFpbmlu Zy5oIgogI2luY2x1ZGUgImludGVsX2ZiYy5oIgpAQCAtMTE0LDcgKzExNCw2IEBAIHN0YXRpYyB2 b2lkIHNrbF9wZml0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSk7CiBzdGF0aWMgdm9pZCBpbGtfcGZpdF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpOwogc3RhdGljIHZvaWQgaW50ZWxfbW9kZXNldF9zZXR1cF9o d19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgc3RydWN0IGRybV9tb2Rlc2V0 X2FjcXVpcmVfY3R4ICpjdHgpOwotc3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRl bF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKIAogc3RydWN0IGlu dGVsX2xpbWl0IHsKIAlzdHJ1Y3QgewpAQCAtMTI1MywxMiArMTI1Miw2IEBAIHN0YXRpYyB2b2lk IGFzc2VydF9wbGFuZXNfZGlzYWJsZWQoc3RydWN0IGludGVsX2NydGMgKmNydGMpCiAJCWFzc2Vy dF9wbGFuZV9kaXNhYmxlZChwbGFuZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFzc2VydF92Ymxhbmtf ZGlzYWJsZWQoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWlmIChJOTE1X1NUQVRFX1dBUk5f T04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKSkKLQkJZHJtX2NydGNfdmJsYW5rX3B1 dChjcnRjKTsKLX0KLQogdm9pZCBhc3NlcnRfcGNoX3RyYW5zY29kZXJfZGlzYWJsZWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSAgICBlbnVtIHBpcGUgcGlwZSkKIHsK QEAgLTE3NDMsNTUgKzE3MzYsNiBAQCBlbnVtIHBpcGUgaW50ZWxfY3J0Y19wY2hfdHJhbnNjb2Rl cihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAkJcmV0dXJuIGNydGMtPnBpcGU7CiB9CiAKLXN0 YXRpYyB1MzIgaW50ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjLT5kZXYpOwotCXN0cnVjdCBpbnRl bF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwotCXUz MiBtb2RlX2ZsYWdzID0gY3J0Yy0+bW9kZV9mbGFnczsKLQotCS8qCi0JICogRnJvbSBHZW4gMTEs IEluIGNhc2Ugb2YgZHNpIGNtZCBtb2RlLCBmcmFtZSBjb3VudGVyIHdvdWxkbnQKLQkgKiBoYXZl IHVwZGF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBURSwgaWYgd2Ugd2FudCB0byB1c2UKLQkgKiB0 aGUgaHcgY291bnRlciwgdGhlbiB3ZSB3b3VsZCBmaW5kIGl0IHVwZGF0ZWQgaW4gb25seQotCSAq IHRoZSBuZXh0IFRFLCBoZW5jZSBzd2l0Y2hpbmcgdG8gc3cgY291bnRlci4KLQkgKi8KLQlpZiAo bW9kZV9mbGFncyAmIChJOTE1X01PREVfRkxBR19EU0lfVVNFX1RFMCB8IEk5MTVfTU9ERV9GTEFH X0RTSV9VU0VfVEUxKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIE9uIGk5NjVnbSB0aGUgaGFy ZHdhcmUgZnJhbWUgY291bnRlciByZWFkcwotCSAqIHplcm8gd2hlbiB0aGUgVFYgZW5jb2RlciBp cyBlbmFibGVkIDooCi0JICovCi0JaWYgKElTX0k5NjVHTShkZXZfcHJpdikgJiYKLQkgICAgKGNy dGNfc3RhdGUtPm91dHB1dF90eXBlcyAmIEJJVChJTlRFTF9PVVRQVVRfVFZPVVQpKSkKLQkJcmV0 dXJuIDA7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZfcHJp dikpCi0JCXJldHVybiAweGZmZmZmZmZmOyAvKiBmdWxsIDMyIGJpdCBjb3VudGVyICovCi0JZWxz ZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAzKQotCQlyZXR1cm4gMHhmZmZmZmY7IC8qIG9u bHkgMjQgYml0cyBvZiBmcmFtZSBjb3VudCAqLwotCWVsc2UKLQkJcmV0dXJuIDA7IC8qIEdlbjIg ZG9lc24ndCBoYXZlIGEgaGFyZHdhcmUgZnJhbWUgY291bnRlciAqLwotfQotCi12b2lkIGludGVs X2NydGNfdmJsYW5rX29uKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRl LT51YXBpLmNydGMpOwotCi0JYXNzZXJ0X3ZibGFua19kaXNhYmxlZCgmY3J0Yy0+YmFzZSk7Ci0J ZHJtX2NydGNfc2V0X21heF92YmxhbmtfY291bnQoJmNydGMtPmJhc2UsCi0JCQkJICAgICAgaW50 ZWxfY3J0Y19tYXhfdmJsYW5rX2NvdW50KGNydGNfc3RhdGUpKTsKLQlkcm1fY3J0Y192Ymxhbmtf b24oJmNydGMtPmJhc2UpOwotfQotCi12b2lkIGludGVsX2NydGNfdmJsYW5rX29mZihjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQotCWRybV9j cnRjX3ZibGFua19vZmYoJmNydGMtPmJhc2UpOwotCWFzc2VydF92YmxhbmtfZGlzYWJsZWQoJmNy dGMtPmJhc2UpOwotfQotCiB2b2lkIGludGVsX2VuYWJsZV9waXBlKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YyA9IHRvX2ludGVsX2NydGMobmV3X2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CkBAIC0xMTQ0NCwz MyArMTEzODgsNiBAQCBzdGF0aWMgdm9pZCBpbGtfcGNoX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKIAkJCQkJICZwaXBlX2NvbmZpZy0+ZmRpX21fbik7CiB9CiAKLXN0YXRpYyB2 b2lkIGludGVsX2NydGNfc3RhdGVfcmVzZXQoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCi0JCQkJICAgc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0JbWVtc2V0KGNydGNf c3RhdGUsIDAsIHNpemVvZigqY3J0Y19zdGF0ZSkpOwotCi0JX19kcm1fYXRvbWljX2hlbHBlcl9j cnRjX3N0YXRlX3Jlc2V0KCZjcnRjX3N0YXRlLT51YXBpLCAmY3J0Yy0+YmFzZSk7Ci0KLQljcnRj X3N0YXRlLT5jcHVfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKLQljcnRjX3N0YXRl LT5tYXN0ZXJfdHJhbnNjb2RlciA9IElOVkFMSURfVFJBTlNDT0RFUjsKLQljcnRjX3N0YXRlLT5o c3dfd29ya2Fyb3VuZF9waXBlID0gSU5WQUxJRF9QSVBFOwotCWNydGNfc3RhdGUtPm91dHB1dF9m b3JtYXQgPSBJTlRFTF9PVVRQVVRfRk9STUFUX0lOVkFMSUQ7Ci0JY3J0Y19zdGF0ZS0+c2NhbGVy X3N0YXRlLnNjYWxlcl9pZCA9IC0xOwotCWNydGNfc3RhdGUtPm1zdF9tYXN0ZXJfdHJhbnNjb2Rl ciA9IElOVkFMSURfVFJBTlNDT0RFUjsKLX0KLQotc3RhdGljIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICppbnRlbF9jcnRjX3N0YXRlX2FsbG9jKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQotewot CXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCi0JY3J0Y19zdGF0ZSA9IGtt YWxsb2Moc2l6ZW9mKCpjcnRjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoY3J0Y19zdGF0 ZSkKLQkJaW50ZWxfY3J0Y19zdGF0ZV9yZXNldChjcnRjX3N0YXRlLCBjcnRjKTsKLQotCXJldHVy biBjcnRjX3N0YXRlOwotfQotCiAvKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgcHJvZ3JhbW1lZCBt b2RlIG9mIHRoZSBnaXZlbiBlbmNvZGVyLiAqLwogc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKgog aW50ZWxfZW5jb2Rlcl9jdXJyZW50X21vZGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIp CkBAIC0xMTUxMSwxNCArMTE0MjgsNiBAQCBpbnRlbF9lbmNvZGVyX2N1cnJlbnRfbW9kZShzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIAlyZXR1cm4gbW9kZTsKIH0KIAotc3RhdGljIHZv aWQgaW50ZWxfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Ci0KLQlkcm1fY3J0 Y19jbGVhbnVwKGNydGMpOwotCWtmcmVlKGludGVsX2NydGMpOwotfQotCiAvKioKICAqIGludGVs X3dtX25lZWRfdXBkYXRlIC0gQ2hlY2sgd2hldGhlciB3YXRlcm1hcmtzIG5lZWQgdXBkYXRpbmcK ICAqIEBjdXI6IGN1cnJlbnQgcGxhbmUgc3RhdGUKQEAgLTE0NzIyLDE3ICsxNDYzMSw2IEBAIHN0 YXRpYyBpbnQgaW50ZWxfYXRvbWljX3ByZXBhcmVfY29tbWl0KHN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGUgKnN0YXRlKQogCXJldHVybiAwOwogfQogCi11MzIgaW50ZWxfY3J0Y19nZXRfdmJsYW5r X2NvdW50ZXIoc3RydWN0IGludGVsX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9 ICZkZXYtPnZibGFua1tkcm1fY3J0Y19pbmRleCgmY3J0Yy0+YmFzZSldOwotCi0JaWYgKCF2Ymxh bmstPm1heF92YmxhbmtfY291bnQpCi0JCXJldHVybiAodTMyKWRybV9jcnRjX2FjY3VyYXRlX3Zi bGFua19jb3VudCgmY3J0Yy0+YmFzZSk7Ci0KLQlyZXR1cm4gY3J0Yy0+YmFzZS5mdW5jcy0+Z2V0 X3ZibGFua19jb3VudGVyKCZjcnRjLT5iYXNlKTsKLX0KLQogdm9pZCBpbnRlbF9jcnRjX2FybV9m aWZvX3VuZGVycnVuKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJCSAgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CkBAIC0xNTc4NSwxMTQgKzE1NjgzLDYgQEAgdm9p ZCBpbnRlbF9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCWtmcmVlKHRv X2ludGVsX3BsYW5lKHBsYW5lKSk7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfY3J0Y19sYXRlX3Jl Z2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlpbnRlbF9jcnRjX2RlYnVnZnNfYWRk KGNydGMpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIElOVEVMX0NSVENfRlVOQ1MgXAotCS5n YW1tYV9zZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0LCBcCi0JLnNldF9j b25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLCBcCi0JLmRlc3Ryb3kgPSBpbnRl bF9jcnRjX2Rlc3Ryb3ksIFwKLQkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9m bGlwLCBcCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9jcnRjX2R1cGxpY2F0ZV9z dGF0ZSwgXAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX2NydGNfZGVzdHJveV9zdGF0 ZSwgXAotCS5zZXRfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfc2V0X2NyY19zb3VyY2UsIFwKLQku dmVyaWZ5X2NyY19zb3VyY2UgPSBpbnRlbF9jcnRjX3ZlcmlmeV9jcmNfc291cmNlLCBcCi0JLmdl dF9jcmNfc291cmNlcyA9IGludGVsX2NydGNfZ2V0X2NyY19zb3VyY2VzLCBcCi0JLmxhdGVfcmVn aXN0ZXIgPSBpbnRlbF9jcnRjX2xhdGVfcmVnaXN0ZXIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY3J0Y19mdW5jcyBiZHdfY3J0Y19mdW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZVTkNTLAotCi0J LmdldF92YmxhbmtfY291bnRlciA9IGc0eF9nZXRfdmJsYW5rX2NvdW50ZXIsCi0JLmVuYWJsZV92 YmxhbmsgPSBiZHdfZW5hYmxlX3ZibGFuaywKLQkuZGlzYWJsZV92YmxhbmsgPSBiZHdfZGlzYWJs ZV92YmxhbmssCi0JLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0Y19nZXRfdmJsYW5r X3RpbWVzdGFtcCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaWxr X2NydGNfZnVuY3MgPSB7Ci0JSU5URUxfQ1JUQ19GVU5DUywKLQotCS5nZXRfdmJsYW5rX2NvdW50 ZXIgPSBnNHhfZ2V0X3ZibGFua19jb3VudGVyLAotCS5lbmFibGVfdmJsYW5rID0gaWxrX2VuYWJs ZV92YmxhbmssCi0JLmRpc2FibGVfdmJsYW5rID0gaWxrX2Rpc2FibGVfdmJsYW5rLAotCS5nZXRf dmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCi19Owot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGc0eF9jcnRjX2Z1bmNzID0gewot CUlOVEVMX0NSVENfRlVOQ1MsCi0KLQkuZ2V0X3ZibGFua19jb3VudGVyID0gZzR4X2dldF92Ymxh bmtfY291bnRlciwKLQkuZW5hYmxlX3ZibGFuayA9IGk5NjVfZW5hYmxlX3ZibGFuaywKLQkuZGlz YWJsZV92YmxhbmsgPSBpOTY1X2Rpc2FibGVfdmJsYW5rLAotCS5nZXRfdmJsYW5rX3RpbWVzdGFt cCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCi19OwotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jcnRjX2Z1bmNzIGk5NjVfY3J0Y19mdW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZV TkNTLAotCi0JLmdldF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyLAot CS5lbmFibGVfdmJsYW5rID0gaTk2NV9lbmFibGVfdmJsYW5rLAotCS5kaXNhYmxlX3ZibGFuayA9 IGk5NjVfZGlzYWJsZV92YmxhbmssCi0JLmdldF92YmxhbmtfdGltZXN0YW1wID0gaW50ZWxfY3J0 Y19nZXRfdmJsYW5rX3RpbWVzdGFtcCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfZnVuY3MgaTkxNWdtX2NydGNfZnVuY3MgPSB7Ci0JSU5URUxfQ1JUQ19GVU5DUywKLQotCS5n ZXRfdmJsYW5rX2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKLQkuZW5hYmxlX3Zi bGFuayA9IGk5MTVnbV9lbmFibGVfdmJsYW5rLAotCS5kaXNhYmxlX3ZibGFuayA9IGk5MTVnbV9k aXNhYmxlX3ZibGFuaywKLQkuZ2V0X3ZibGFua190aW1lc3RhbXAgPSBpbnRlbF9jcnRjX2dldF92 YmxhbmtfdGltZXN0YW1wLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5j cyBpOTE1X2NydGNfZnVuY3MgPSB7Ci0JSU5URUxfQ1JUQ19GVU5DUywKLQotCS5nZXRfdmJsYW5r X2NvdW50ZXIgPSBpOTE1X2dldF92YmxhbmtfY291bnRlciwKLQkuZW5hYmxlX3ZibGFuayA9IGk4 eHhfZW5hYmxlX3ZibGFuaywKLQkuZGlzYWJsZV92YmxhbmsgPSBpOHh4X2Rpc2FibGVfdmJsYW5r LAotCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVsX2NydGNfZ2V0X3ZibGFua190aW1lc3Rh bXAsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGk4eHhfY3J0Y19m dW5jcyA9IHsKLQlJTlRFTF9DUlRDX0ZVTkNTLAotCi0JLyogbm8gaHcgdmJsYW5rIGNvdW50ZXIg Ki8KLQkuZW5hYmxlX3ZibGFuayA9IGk4eHhfZW5hYmxlX3ZibGFuaywKLQkuZGlzYWJsZV92Ymxh bmsgPSBpOHh4X2Rpc2FibGVfdmJsYW5rLAotCS5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IGludGVs X2NydGNfZ2V0X3ZibGFua190aW1lc3RhbXAsCi19OwotCi1zdGF0aWMgc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGNfYWxsb2Modm9pZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKLQotCWNydGMgPSBremFsbG9j KHNpemVvZigqY3J0YyksIEdGUF9LRVJORUwpOwotCWlmICghY3J0YykKLQkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Ci0KLQljcnRjX3N0YXRlID0gaW50ZWxfY3J0Y19zdGF0ZV9hbGxvYyhjcnRj KTsKLQlpZiAoIWNydGNfc3RhdGUpIHsKLQkJa2ZyZWUoY3J0Yyk7Ci0JCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwotCX0KLQotCWNydGMtPmJhc2Uuc3RhdGUgPSAmY3J0Y19zdGF0ZS0+dWFwaTsK LQljcnRjLT5jb25maWcgPSBjcnRjX3N0YXRlOwotCi0JcmV0dXJuIGNydGM7Ci19Ci0KLXN0YXRp YyB2b2lkIGludGVsX2NydGNfZnJlZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKLXsKLQlpbnRl bF9jcnRjX2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsIGNydGMtPmJhc2Uuc3RhdGUpOwotCWtm cmVlKGNydGMpOwotfQotCiBzdGF0aWMgdm9pZCBpbnRlbF9wbGFuZV9wb3NzaWJsZV9jcnRjc19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lOwpAQCAtMTU5MDUsMTAwICsxNTY5NSw2IEBAIHN0YXRpYyB2b2lkIGludGVs X3BsYW5lX3Bvc3NpYmxlX2NydGNzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQogCX0KIH0KIAotc3RhdGljIGludCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxh bmUgKnByaW1hcnksICpjdXJzb3I7Ci0JY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzICpmdW5j czsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKLQlpbnQgc3ByaXRlLCByZXQ7Ci0KLQljcnRj ID0gaW50ZWxfY3J0Y19hbGxvYygpOwotCWlmIChJU19FUlIoY3J0YykpCi0JCXJldHVybiBQVFJf RVJSKGNydGMpOwotCi0JY3J0Yy0+cGlwZSA9IHBpcGU7Ci0JY3J0Yy0+bnVtX3NjYWxlcnMgPSBS VU5USU1FX0lORk8oZGV2X3ByaXYpLT5udW1fc2NhbGVyc1twaXBlXTsKLQotCXByaW1hcnkgPSBp bnRlbF9wcmltYXJ5X3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlwZSk7Ci0JaWYgKElTX0VSUihw cmltYXJ5KSkgewotCQlyZXQgPSBQVFJfRVJSKHByaW1hcnkpOwotCQlnb3RvIGZhaWw7Ci0JfQot CWNydGMtPnBsYW5lX2lkc19tYXNrIHw9IEJJVChwcmltYXJ5LT5pZCk7Ci0KLQlmb3JfZWFjaF9z cHJpdGUoZGV2X3ByaXYsIHBpcGUsIHNwcml0ZSkgewotCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lOwotCi0JCXBsYW5lID0gaW50ZWxfc3ByaXRlX3BsYW5lX2NyZWF0ZShkZXZfcHJpdiwgcGlw ZSwgc3ByaXRlKTsKLQkJaWYgKElTX0VSUihwbGFuZSkpIHsKLQkJCXJldCA9IFBUUl9FUlIocGxh bmUpOwotCQkJZ290byBmYWlsOwotCQl9Ci0JCWNydGMtPnBsYW5lX2lkc19tYXNrIHw9IEJJVChw bGFuZS0+aWQpOwotCX0KLQotCWN1cnNvciA9IGludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUoZGV2 X3ByaXYsIHBpcGUpOwotCWlmIChJU19FUlIoY3Vyc29yKSkgewotCQlyZXQgPSBQVFJfRVJSKGN1 cnNvcik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JY3J0Yy0+cGxhbmVfaWRzX21hc2sgfD0gQklUKGN1 cnNvci0+aWQpOwotCi0JaWYgKEhBU19HTUNIKGRldl9wcml2KSkgewotCQlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikgfHwKLQkJICAgIElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0c0 WChkZXZfcHJpdikpCi0JCQlmdW5jcyA9ICZnNHhfY3J0Y19mdW5jczsKLQkJZWxzZSBpZiAoSVNf R0VOKGRldl9wcml2LCA0KSkKLQkJCWZ1bmNzID0gJmk5NjVfY3J0Y19mdW5jczsKLQkJZWxzZSBp ZiAoSVNfSTk0NUdNKGRldl9wcml2KSB8fCBJU19JOTE1R00oZGV2X3ByaXYpKQotCQkJZnVuY3Mg PSAmaTkxNWdtX2NydGNfZnVuY3M7Ci0JCWVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwgMykpCi0J CQlmdW5jcyA9ICZpOTE1X2NydGNfZnVuY3M7Ci0JCWVsc2UKLQkJCWZ1bmNzID0gJmk4eHhfY3J0 Y19mdW5jczsKLQl9IGVsc2UgewotCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQotCQkJ ZnVuY3MgPSAmYmR3X2NydGNfZnVuY3M7Ci0JCWVsc2UKLQkJCWZ1bmNzID0gJmlsa19jcnRjX2Z1 bmNzOwotCX0KLQotCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoJmRldl9wcml2LT5k cm0sICZjcnRjLT5iYXNlLAotCQkJCQkmcHJpbWFyeS0+YmFzZSwgJmN1cnNvci0+YmFzZSwKLQkJ CQkJZnVuY3MsICJwaXBlICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKLQlpZiAocmV0KQotCQlnb3Rv IGZhaWw7Ci0KLQlCVUdfT04ocGlwZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2LT5waXBlX3RvX2Ny dGNfbWFwcGluZykgfHwKLQkgICAgICAgZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW3Bp cGVdICE9IE5VTEwpOwotCWRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXSA9IGNy dGM7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkpIHsKLQkJZW51bSBpOXh4X3BsYW5l X2lkIGk5eHhfcGxhbmUgPSBwcmltYXJ5LT5pOXh4X3BsYW5lOwotCi0JCUJVR19PTihpOXh4X3Bs YW5lID49IEFSUkFZX1NJWkUoZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGluZykgfHwKLQkJ ICAgICAgIGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaTl4eF9wbGFuZV0gIT0gTlVM TCk7Ci0JCWRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaTl4eF9wbGFuZV0gPSBjcnRj OwotCX0KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQotCQlkcm1fY3J0Y19jcmVh dGVfc2NhbGluZ19maWx0ZXJfcHJvcGVydHkoJmNydGMtPmJhc2UsCi0JCQkJCQlCSVQoRFJNX1ND QUxJTkdfRklMVEVSX0RFRkFVTFQpIHwKLQkJCQkJCUJJVChEUk1fU0NBTElOR19GSUxURVJfTkVB UkVTVF9ORUlHSEJPUikpOwotCi0JaW50ZWxfY29sb3JfaW5pdChjcnRjKTsKLQotCWludGVsX2Ny dGNfY3JjX2luaXQoY3J0Yyk7Ci0KLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZHJtX2Ny dGNfaW5kZXgoJmNydGMtPmJhc2UpICE9IGNydGMtPnBpcGUpOwotCi0JcmV0dXJuIDA7Ci0KLWZh aWw6Ci0JaW50ZWxfY3J0Y19mcmVlKGNydGMpOwotCi0JcmV0dXJuIHJldDsKLX0KIAogaW50IGlu dGVsX2dldF9waXBlX2Zyb21fY3J0Y19pZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAogCQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKLS0gCjIuMjcuMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==