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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 30CBFC47082 for ; Tue, 8 Jun 2021 07:36:42 +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 039CF610C7 for ; Tue, 8 Jun 2021 07:36:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 039CF610C7 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 82BB96EADB; Tue, 8 Jun 2021 07:36:41 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 803B46EB16 for ; Tue, 8 Jun 2021 07:36:40 +0000 (UTC) IronPort-SDR: tpz8CNepEZ9wzKiMgbfqTUZQ5W4Ng4xHoTfLtYMrqHE0CwuRLo/w5mIfHy8QhZALHo17kuhKnf XE/krxlTCIoQ== X-IronPort-AV: E=McAfee;i="6200,9189,10008"; a="201771425" X-IronPort-AV: E=Sophos;i="5.83,257,1616482800"; d="scan'208";a="201771425" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2021 00:36:40 -0700 IronPort-SDR: 1h2sn+M0YRYbyDah/VaTsifkoKpb4S6X2QoLP2b4JT5aeToPfr121MWTrQkZ5i0SHfT2IP0uLl YMI26Yb73tVA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,257,1616482800"; d="scan'208";a="413296239" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.171]) by fmsmga007.fm.intel.com with SMTP; 08 Jun 2021 00:36:37 -0700 Received: by stinkbox (sSMTP sendmail emulation); Tue, 08 Jun 2021 10:36:37 +0300 From: Ville Syrjala To: intel-gfx@lists.freedesktop.org Date: Tue, 8 Jun 2021 10:35:56 +0300 Message-Id: <20210608073603.2408-11-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210608073603.2408-1-ville.syrjala@linux.intel.com> References: <20210608073603.2408-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 10/17] drm/i915: Clean up hsw/bdw/skl/kbl buf trans funcs 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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClNw bGl0IHRoZSBoc3cvYmR3L3NrbC9rYmwgZ2V0X2J1Zl90cmFucygpIGZ1bmN0aW9ucyBpbnRvCmNs ZWFuIHBsYXRmb3JtIHNwZWNpZmljIHZhcmlhbnRzLgoKUmV2aWV3ZWQtYnk6IEphbmkgTmlrdWxh IDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogLi4uL2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGRpX2J1Zl90cmFucy5jICAgIHwgMzA4ICsrKysrKystLS0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAxOTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGlfYnVmX3RyYW5zLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaV9idWZfdHJhbnMuYwppbmRleCBm ODkxNWE4Yzc4ZDguLmVmOTYyMmVjZjM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kZGlfYnVmX3RyYW5zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kZGlfYnVmX3RyYW5zLmMKQEAgLTEwNTEsMTAyICsxMDUxLDM0IEBA IGludGVsX2dldF9idWZfdHJhbnMoY29uc3Qgc3RydWN0IGludGVsX2RkaV9idWZfdHJhbnMgKmRk aV90cmFuc2xhdGlvbnMsIGludCAqbnVtCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf ZGRpX2J1Zl90cmFucyAqCi1iZHdfZ2V0X2J1Zl90cmFuc19lZHAoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsIGludCAqbl9lbnRyaWVzKQoraHN3X2dldF9idWZfdHJhbnMoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCisJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCisJCSAgaW50ICpuX2VudHJpZXMpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0KLQlpZiAoZGV2 X3ByaXYtPnZidC5lZHAubG93X3Zzd2luZykgewotCQlyZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFu cygmYmR3X2RkaV90cmFuc2xhdGlvbnNfZWRwLAotCQkJCQkgICBuX2VudHJpZXMpOwotCX0gZWxz ZSB7Ci0JCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZiZHdfZGRpX3RyYW5zbGF0aW9uc19k cCwKLQkJCQkJICAgbl9lbnRyaWVzKTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50 ZWxfZGRpX2J1Zl90cmFucyAqCi1za2xfZ2V0X2J1Zl90cmFuc19kcChzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciwgaW50ICpuX2VudHJpZXMpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0KLQlpZiAoSVNfU0tM X1VMWChkZXZfcHJpdikpIHsKLQkJcmV0dXJuIGludGVsX2dldF9idWZfdHJhbnMoJnNrbF95X2Rk aV90cmFuc2xhdGlvbnNfZHAsCi0JCQkJCSAgIG5fZW50cmllcyk7Ci0JfSBlbHNlIGlmIChJU19T S0xfVUxUKGRldl9wcml2KSkgewotCQlyZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmc2tsX3Vf ZGRpX3RyYW5zbGF0aW9uc19kcCwKLQkJCQkJICAgbl9lbnRyaWVzKTsKLQl9IGVsc2UgewotCQly ZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmc2tsX2RkaV90cmFuc2xhdGlvbnNfZHAsCi0JCQkJ CSAgIG5fZW50cmllcyk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RkaV9i dWZfdHJhbnMgKgota2JsX2dldF9idWZfdHJhbnNfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIsIGludCAqbl9lbnRyaWVzKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwotCi0JaWYgKElTX0tCTF9VTFgoZGV2 X3ByaXYpIHx8Ci0JICAgIElTX0NGTF9VTFgoZGV2X3ByaXYpIHx8Ci0JICAgIElTX0NNTF9VTFgo ZGV2X3ByaXYpKSB7Ci0JCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZrYmxfeV9kZGlfdHJh bnNsYXRpb25zX2RwLAotCQkJCQkgICBuX2VudHJpZXMpOwotCX0gZWxzZSBpZiAoSVNfS0JMX1VM VChkZXZfcHJpdikgfHwKLQkJICAgSVNfQ0ZMX1VMVChkZXZfcHJpdikgfHwKLQkJICAgSVNfQ01M X1VMVChkZXZfcHJpdikpIHsKLQkJcmV0dXJuIGludGVsX2dldF9idWZfdHJhbnMoJmtibF91X2Rk aV90cmFuc2xhdGlvbnNfZHAsCi0JCQkJCSAgIG5fZW50cmllcyk7Ci0JfSBlbHNlIHsKLQkJcmV0 dXJuIGludGVsX2dldF9idWZfdHJhbnMoJmtibF9kZGlfdHJhbnNsYXRpb25zX2RwLAotCQkJCQkg ICBuX2VudHJpZXMpOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVm X3RyYW5zICoKLXNrbF9nZXRfYnVmX3RyYW5zX2VkcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwgaW50ICpuX2VudHJpZXMpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0KLQlpZiAoZGV2X3ByaXYtPnZidC5l ZHAubG93X3Zzd2luZykgewotCQlpZiAoSVNfU0tMX1VMWChkZXZfcHJpdikgfHwKLQkJICAgIElT X0tCTF9VTFgoZGV2X3ByaXYpIHx8Ci0JCSAgICBJU19DRkxfVUxYKGRldl9wcml2KSB8fAotCQkg ICAgSVNfQ01MX1VMWChkZXZfcHJpdikpIHsKLQkJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5z KCZza2xfeV9kZGlfdHJhbnNsYXRpb25zX2VkcCwKLQkJCQkJCSAgIG5fZW50cmllcyk7Ci0JCX0g ZWxzZSBpZiAoSVNfU0tMX1VMVChkZXZfcHJpdikgfHwKLQkJCSAgIElTX0tCTF9VTFQoZGV2X3By aXYpIHx8Ci0JCQkgICBJU19DRkxfVUxUKGRldl9wcml2KSB8fAotCQkJICAgSVNfQ01MX1VMVChk ZXZfcHJpdikpIHsKLQkJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZza2xfdV9kZGlfdHJh bnNsYXRpb25zX2VkcCwKLQkJCQkJCSAgIG5fZW50cmllcyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1 cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmc2tsX2RkaV90cmFuc2xhdGlvbnNfZWRwLAotCQkJCQkJ ICAgbl9lbnRyaWVzKTsKLQkJfQotCX0KLQotCWlmIChJU19LQUJZTEFLRShkZXZfcHJpdikgfHwK LQkgICAgSVNfQ09GRkVFTEFLRShkZXZfcHJpdikgfHwKLQkgICAgSVNfQ09NRVRMQUtFKGRldl9w cml2KSkKLQkJcmV0dXJuIGtibF9nZXRfYnVmX3RyYW5zX2RwKGVuY29kZXIsIG5fZW50cmllcyk7 CisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0FOQUxP RykpCisJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZoc3dfZGRpX3RyYW5zbGF0aW9uc19m ZGksIG5fZW50cmllcyk7CisJZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRl LCBJTlRFTF9PVVRQVVRfSERNSSkpCisJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZoc3df ZGRpX3RyYW5zbGF0aW9uc19oZG1pLCBuX2VudHJpZXMpOwogCWVsc2UKLQkJcmV0dXJuIHNrbF9n ZXRfYnVmX3RyYW5zX2RwKGVuY29kZXIsIG5fZW50cmllcyk7CisJCXJldHVybiBpbnRlbF9nZXRf YnVmX3RyYW5zKCZoc3dfZGRpX3RyYW5zbGF0aW9uc19kcCwgbl9lbnRyaWVzKTsKIH0KIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVmX3RyYW5zICoKLXNrbF9nZXRfYnVmX3RyYW5z X2hkbWkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgKm5fZW50cmllcykK K2Jkd19nZXRfYnVmX3RyYW5zKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgIGludCAqbl9lbnRy aWVzKQogewotCWlmIChJU19TS0xfVUxYKGRldl9wcml2KSB8fAotCSAgICBJU19LQkxfVUxYKGRl dl9wcml2KSB8fAotCSAgICBJU19DRkxfVUxYKGRldl9wcml2KSB8fAotCSAgICBJU19DTUxfVUxY KGRldl9wcml2KSkgewotCQlyZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmc2tsX3lfZGRpX3Ry YW5zbGF0aW9uc19oZG1pLAotCQkJCQkgICBuX2VudHJpZXMpOwotCX0gZWxzZSB7Ci0JCXJldHVy biBpbnRlbF9nZXRfYnVmX3RyYW5zKCZza2xfZGRpX3RyYW5zbGF0aW9uc19oZG1pLAotCQkJCQkg ICBuX2VudHJpZXMpOwotCX0KKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5 MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19z dGF0ZSwgSU5URUxfT1VUUFVUX0FOQUxPRykpCisJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5z KCZiZHdfZGRpX3RyYW5zbGF0aW9uc19mZGksIG5fZW50cmllcyk7CisJZWxzZSBpZiAoaW50ZWxf Y3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfSERNSSkpCisJCXJldHVybiBp bnRlbF9nZXRfYnVmX3RyYW5zKCZiZHdfZGRpX3RyYW5zbGF0aW9uc19oZG1pLCBuX2VudHJpZXMp OworCWVsc2UgaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVU X0VEUCkgJiYKKwkJIGk5MTUtPnZidC5lZHAubG93X3Zzd2luZykKKwkJcmV0dXJuIGludGVsX2dl dF9idWZfdHJhbnMoJmJkd19kZGlfdHJhbnNsYXRpb25zX2VkcCwgbl9lbnRyaWVzKTsKKwllbHNl CisJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZiZHdfZGRpX3RyYW5zbGF0aW9uc19kcCwg bl9lbnRyaWVzKTsKIH0KIAogc3RhdGljIGludCBza2xfYnVmX3RyYW5zX251bV9lbnRyaWVzKGVu dW0gcG9ydCBwb3J0LCBpbnQgbl9lbnRyaWVzKQpAQCAtMTE1OSwxMzEgKzEwOTEsMTA5IEBAIHN0 YXRpYyBpbnQgc2tsX2J1Zl90cmFuc19udW1fZW50cmllcyhlbnVtIHBvcnQgcG9ydCwgaW50IG5f ZW50cmllcykKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVmX3RyYW5zICoK LWhzd19nZXRfYnVmX3RyYW5zX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLCBpbnQg Km5fZW50cmllcykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsKLQotCWlmIChJU19LQUJZTEFLRShkZXZfcHJpdikgfHwK LQkgICAgSVNfQ09GRkVFTEFLRShkZXZfcHJpdikgfHwKLQkgICAgSVNfQ09NRVRMQUtFKGRldl9w cml2KSkgewotCQljb25zdCBzdHJ1Y3QgaW50ZWxfZGRpX2J1Zl90cmFucyAqZGRpX3RyYW5zbGF0 aW9ucyA9Ci0JCQlrYmxfZ2V0X2J1Zl90cmFuc19kcChlbmNvZGVyLCBuX2VudHJpZXMpOwotCQkq bl9lbnRyaWVzID0gc2tsX2J1Zl90cmFuc19udW1fZW50cmllcyhlbmNvZGVyLT5wb3J0LCAqbl9l bnRyaWVzKTsKLQkJcmV0dXJuIGRkaV90cmFuc2xhdGlvbnM7Ci0JfSBlbHNlIGlmIChJU19TS1lM QUtFKGRldl9wcml2KSkgewotCQljb25zdCBzdHJ1Y3QgaW50ZWxfZGRpX2J1Zl90cmFucyAqZGRp X3RyYW5zbGF0aW9ucyA9Ci0JCQlza2xfZ2V0X2J1Zl90cmFuc19kcChlbmNvZGVyLCBuX2VudHJp ZXMpOwotCQkqbl9lbnRyaWVzID0gc2tsX2J1Zl90cmFuc19udW1fZW50cmllcyhlbmNvZGVyLT5w b3J0LCAqbl9lbnRyaWVzKTsKLQkJcmV0dXJuIGRkaV90cmFuc2xhdGlvbnM7Ci0JfSBlbHNlIGlm IChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Ci0JCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5z KCZiZHdfZGRpX3RyYW5zbGF0aW9uc19kcCwKLQkJCQkJICAgbl9lbnRyaWVzKTsKLQl9IGVsc2Ug aWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7Ci0JCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5z KCZoc3dfZGRpX3RyYW5zbGF0aW9uc19kcCwKLQkJCQkJICAgbl9lbnRyaWVzKTsKLQl9Ci0KLQkq bl9lbnRyaWVzID0gMDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9kZGlfYnVmX3RyYW5zICoKLWhzd19nZXRfYnVmX3RyYW5zX2VkcChzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwgaW50ICpuX2VudHJpZXMpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0KLQlpZiAoRElT UExBWV9WRVIoZGV2X3ByaXYpID09IDkgJiYgIUlTX0JST1hUT04oZGV2X3ByaXYpKSB7Ci0JCWNv bnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVmX3RyYW5zICpkZGlfdHJhbnNsYXRpb25zID0KLQkJCXNr bF9nZXRfYnVmX3RyYW5zX2VkcChlbmNvZGVyLCBuX2VudHJpZXMpOwotCQkqbl9lbnRyaWVzID0g c2tsX2J1Zl90cmFuc19udW1fZW50cmllcyhlbmNvZGVyLT5wb3J0LCAqbl9lbnRyaWVzKTsKLQkJ cmV0dXJuIGRkaV90cmFuc2xhdGlvbnM7Ci0JfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3By aXYpKSB7Ci0JCXJldHVybiBiZHdfZ2V0X2J1Zl90cmFuc19lZHAoZW5jb2Rlciwgbl9lbnRyaWVz KTsKLQl9IGVsc2UgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7Ci0JCXJldHVybiBpbnRlbF9n ZXRfYnVmX3RyYW5zKCZoc3dfZGRpX3RyYW5zbGF0aW9uc19kcCwKLQkJCQkJICAgbl9lbnRyaWVz KTsKLQl9Ci0KLQkqbl9lbnRyaWVzID0gMDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVmX3RyYW5zICoKLWhzd19nZXRfYnVmX3RyYW5zX2ZkaShz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKK19za2xfZ2V0X2J1Zl90cmFuc19kcChzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2Rk aV9idWZfdHJhbnMgKmRkaV90cmFuc2xhdGlvbnMsCiAJCSAgICAgIGludCAqbl9lbnRyaWVzKQog ewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+ YmFzZS5kZXYpOworCWRkaV90cmFuc2xhdGlvbnMgPSBpbnRlbF9nZXRfYnVmX3RyYW5zKGRkaV90 cmFuc2xhdGlvbnMsIG5fZW50cmllcyk7CisJKm5fZW50cmllcyA9IHNrbF9idWZfdHJhbnNfbnVt X2VudHJpZXMoZW5jb2Rlci0+cG9ydCwgKm5fZW50cmllcyk7CisJcmV0dXJuIGRkaV90cmFuc2xh dGlvbnM7Cit9CiAKLQlpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSkgewotCQlyZXR1cm4gaW50 ZWxfZ2V0X2J1Zl90cmFucygmYmR3X2RkaV90cmFuc2xhdGlvbnNfZmRpLAotCQkJCQkgICBuX2Vu dHJpZXMpOwotCX0gZWxzZSBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikpIHsKLQkJcmV0dXJuIGlu dGVsX2dldF9idWZfdHJhbnMoJmhzd19kZGlfdHJhbnNsYXRpb25zX2ZkaSwKLQkJCQkJICAgbl9l bnRyaWVzKTsKLQl9CitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RkaV9idWZfdHJhbnMgKgor c2tsX3lfZ2V0X2J1Zl90cmFucyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICAgaW50ICpu X2VudHJpZXMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVu Y29kZXItPmJhc2UuZGV2KTsKIAotCSpuX2VudHJpZXMgPSAwOwotCXJldHVybiBOVUxMOworCWlm IChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkKKwkJ cmV0dXJuIGludGVsX2dldF9idWZfdHJhbnMoJnNrbF95X2RkaV90cmFuc2xhdGlvbnNfaGRtaSwg bl9lbnRyaWVzKTsKKwllbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElO VEVMX09VVFBVVF9FRFApICYmCisJCSBpOTE1LT52YnQuZWRwLmxvd192c3dpbmcpCisJCXJldHVy biBfc2tsX2dldF9idWZfdHJhbnNfZHAoZW5jb2RlciwgJnNrbF95X2RkaV90cmFuc2xhdGlvbnNf ZWRwLCBuX2VudHJpZXMpOworCWVsc2UKKwkJcmV0dXJuIF9za2xfZ2V0X2J1Zl90cmFuc19kcChl bmNvZGVyLCAmc2tsX3lfZGRpX3RyYW5zbGF0aW9uc19kcCwgbl9lbnRyaWVzKTsKIH0KIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVmX3RyYW5zICoKLWhzd19nZXRfYnVmX3RyYW5z X2hkbWkoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCSAgICAgICBpbnQgKm5fZW50 cmllcykKK3NrbF91X2dldF9idWZfdHJhbnMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIs CisJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJICAg IGludCAqbl9lbnRyaWVzKQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CiAKLQlpZiAoRElTUExBWV9WRVIoZGV2 X3ByaXYpID09IDkgJiYgIUlTX0JST1hUT04oZGV2X3ByaXYpKSB7Ci0JCXJldHVybiBza2xfZ2V0 X2J1Zl90cmFuc19oZG1pKGRldl9wcml2LCBuX2VudHJpZXMpOwotCX0gZWxzZSBpZiAoSVNfQlJP QURXRUxMKGRldl9wcml2KSkgewotCQlyZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmYmR3X2Rk aV90cmFuc2xhdGlvbnNfaGRtaSwKLQkJCQkJICAgbl9lbnRyaWVzKTsKLQl9IGVsc2UgaWYgKElT X0hBU1dFTEwoZGV2X3ByaXYpKSB7Ci0JCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZoc3df ZGRpX3RyYW5zbGF0aW9uc19oZG1pLAotCQkJCQkgICBuX2VudHJpZXMpOwotCX0KLQotCSpuX2Vu dHJpZXMgPSAwOwotCXJldHVybiBOVUxMOworCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNf c3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkKKwkJcmV0dXJuIGludGVsX2dldF9idWZfdHJhbnMo JnNrbF9kZGlfdHJhbnNsYXRpb25zX2hkbWksIG5fZW50cmllcyk7CisJZWxzZSBpZiAoaW50ZWxf Y3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRURQKSAmJgorCQkgaTkxNS0+ dmJ0LmVkcC5sb3dfdnN3aW5nKQorCQlyZXR1cm4gX3NrbF9nZXRfYnVmX3RyYW5zX2RwKGVuY29k ZXIsICZza2xfdV9kZGlfdHJhbnNsYXRpb25zX2VkcCwgbl9lbnRyaWVzKTsKKwllbHNlCisJCXJl dHVybiBfc2tsX2dldF9idWZfdHJhbnNfZHAoZW5jb2RlciwgJnNrbF91X2RkaV90cmFuc2xhdGlv bnNfZHAsIG5fZW50cmllcyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGRpX2J1 Zl90cmFucyAqCi1oc3dfZ2V0X2J1Zl90cmFucyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKK3NrbF9nZXRfYnVmX3RyYW5zKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCQkg IGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkgIGludCAqbl9l bnRyaWVzKQogewotCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09V VFBVVF9BTkFMT0cpKQotCQlyZXR1cm4gaHN3X2dldF9idWZfdHJhbnNfZmRpKGVuY29kZXIsIG5f ZW50cmllcyk7Ci0JZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRF TF9PVVRQVVRfSERNSSkpCi0JCXJldHVybiBoc3dfZ2V0X2J1Zl90cmFuc19oZG1pKGVuY29kZXIs IG5fZW50cmllcyk7Ci0JZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJ TlRFTF9PVVRQVVRfRURQKSkKLQkJcmV0dXJuIGhzd19nZXRfYnVmX3RyYW5zX2VkcChlbmNvZGVy LCBuX2VudHJpZXMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShl bmNvZGVyLT5iYXNlLmRldik7CisKKwlpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRl LCBJTlRFTF9PVVRQVVRfSERNSSkpCisJCXJldHVybiBpbnRlbF9nZXRfYnVmX3RyYW5zKCZza2xf ZGRpX3RyYW5zbGF0aW9uc19oZG1pLCBuX2VudHJpZXMpOworCWVsc2UgaWYgKGludGVsX2NydGNf aGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0VEUCkgJiYKKwkJIGk5MTUtPnZidC5l ZHAubG93X3Zzd2luZykKKwkJcmV0dXJuIF9za2xfZ2V0X2J1Zl90cmFuc19kcChlbmNvZGVyLCAm c2tsX2RkaV90cmFuc2xhdGlvbnNfZWRwLCBuX2VudHJpZXMpOwogCWVsc2UKLQkJcmV0dXJuIGhz d19nZXRfYnVmX3RyYW5zX2RwKGVuY29kZXIsIG5fZW50cmllcyk7CisJCXJldHVybiBfc2tsX2dl dF9idWZfdHJhbnNfZHAoZW5jb2RlciwgJnNrbF9kZGlfdHJhbnNsYXRpb25zX2RwLCBuX2VudHJp ZXMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RkaV9idWZfdHJhbnMgKgotYnh0 X2dldF9idWZfdHJhbnNfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsIGludCAqbl9l bnRyaWVzKQora2JsX3lfZ2V0X2J1Zl90cmFucyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKKwkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkg ICAgaW50ICpuX2VudHJpZXMpCiB7Ci0JcmV0dXJuIGludGVsX2dldF9idWZfdHJhbnMoJmJ4dF9k ZGlfdHJhbnNsYXRpb25zX2RwLCBuX2VudHJpZXMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisKKwlpZiAoaW50ZWxfY3J0Y19o YXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfSERNSSkpCisJCXJldHVybiBpbnRlbF9n ZXRfYnVmX3RyYW5zKCZza2xfeV9kZGlfdHJhbnNsYXRpb25zX2hkbWksIG5fZW50cmllcyk7CisJ ZWxzZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRURQ KSAmJgorCQkgaTkxNS0+dmJ0LmVkcC5sb3dfdnN3aW5nKQorCQlyZXR1cm4gX3NrbF9nZXRfYnVm X3RyYW5zX2RwKGVuY29kZXIsICZza2xfeV9kZGlfdHJhbnNsYXRpb25zX2VkcCwgbl9lbnRyaWVz KTsKKwllbHNlCisJCXJldHVybiBfc2tsX2dldF9idWZfdHJhbnNfZHAoZW5jb2RlciwgJmtibF95 X2RkaV90cmFuc2xhdGlvbnNfZHAsIG5fZW50cmllcyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfZGRpX2J1Zl90cmFucyAqCi1ieHRfZ2V0X2J1Zl90cmFuc19lZHAoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsIGludCAqbl9lbnRyaWVzKQora2JsX3VfZ2V0X2J1Zl90cmFu cyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJICAgIGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkgICAgaW50ICpuX2VudHJpZXMpCiB7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRl dik7Ci0KLQlpZiAoZGV2X3ByaXYtPnZidC5lZHAubG93X3Zzd2luZykgewotCQlyZXR1cm4gaW50 ZWxfZ2V0X2J1Zl90cmFucygmYnh0X2RkaV90cmFuc2xhdGlvbnNfZWRwLAotCQkJCQkgICBuX2Vu dHJpZXMpOwotCX0KKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUoZW5j b2Rlci0+YmFzZS5kZXYpOwogCi0JcmV0dXJuIGJ4dF9nZXRfYnVmX3RyYW5zX2RwKGVuY29kZXIs IG5fZW50cmllcyk7CisJaWYgKGludGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxf T1VUUFVUX0hETUkpKQorCQlyZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmc2tsX2RkaV90cmFu c2xhdGlvbnNfaGRtaSwgbl9lbnRyaWVzKTsKKwllbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBl KGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9FRFApICYmCisJCSBpOTE1LT52YnQuZWRwLmxvd192 c3dpbmcpCisJCXJldHVybiBfc2tsX2dldF9idWZfdHJhbnNfZHAoZW5jb2RlciwgJnNrbF91X2Rk aV90cmFuc2xhdGlvbnNfZWRwLCBuX2VudHJpZXMpOworCWVsc2UKKwkJcmV0dXJuIF9za2xfZ2V0 X2J1Zl90cmFuc19kcChlbmNvZGVyLCAma2JsX3VfZGRpX3RyYW5zbGF0aW9uc19kcCwgbl9lbnRy aWVzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZGlfYnVmX3RyYW5zICoKLWJ4 dF9nZXRfYnVmX3RyYW5zX2hkbWkoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsIGludCAq bl9lbnRyaWVzKQora2JsX2dldF9idWZfdHJhbnMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCisJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAg aW50ICpuX2VudHJpZXMpCiB7Ci0JcmV0dXJuIGludGVsX2dldF9idWZfdHJhbnMoJmJ4dF9kZGlf dHJhbnNsYXRpb25zX2hkbWksIG5fZW50cmllcyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKKworCWlmIChpbnRlbF9jcnRjX2hh c190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkKKwkJcmV0dXJuIGludGVsX2dl dF9idWZfdHJhbnMoJnNrbF9kZGlfdHJhbnNsYXRpb25zX2hkbWksIG5fZW50cmllcyk7CisJZWxz ZSBpZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRURQKSAm JgorCQkgaTkxNS0+dmJ0LmVkcC5sb3dfdnN3aW5nKQorCQlyZXR1cm4gX3NrbF9nZXRfYnVmX3Ry YW5zX2RwKGVuY29kZXIsICZza2xfZGRpX3RyYW5zbGF0aW9uc19lZHAsIG5fZW50cmllcyk7CisJ ZWxzZQorCQlyZXR1cm4gX3NrbF9nZXRfYnVmX3RyYW5zX2RwKGVuY29kZXIsICZrYmxfZGRpX3Ry YW5zbGF0aW9uc19kcCwgbl9lbnRyaWVzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRl bF9kZGlfYnVmX3RyYW5zICoKQEAgLTEyOTEsMTEgKzEyMDEsMTUgQEAgYnh0X2dldF9idWZfdHJh bnMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJCSAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCSAgaW50ICpuX2VudHJpZXMpCiB7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKKwog CWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkK LQkJcmV0dXJuIGJ4dF9nZXRfYnVmX3RyYW5zX2hkbWkoZW5jb2Rlciwgbl9lbnRyaWVzKTsKLQlp ZiAoaW50ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRURQKSkKLQkJ cmV0dXJuIGJ4dF9nZXRfYnVmX3RyYW5zX2VkcChlbmNvZGVyLCBuX2VudHJpZXMpOwotCXJldHVy biBieHRfZ2V0X2J1Zl90cmFuc19kcChlbmNvZGVyLCBuX2VudHJpZXMpOworCQlyZXR1cm4gaW50 ZWxfZ2V0X2J1Zl90cmFucygmYnh0X2RkaV90cmFuc2xhdGlvbnNfaGRtaSwgbl9lbnRyaWVzKTsK KwllbHNlIGlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9F RFApICYmCisJCSBpOTE1LT52YnQuZWRwLmxvd192c3dpbmcpCisJCXJldHVybiBpbnRlbF9nZXRf YnVmX3RyYW5zKCZieHRfZGRpX3RyYW5zbGF0aW9uc19lZHAsIG5fZW50cmllcyk7CisJZWxzZQor CQlyZXR1cm4gaW50ZWxfZ2V0X2J1Zl90cmFucygmYnh0X2RkaV90cmFuc2xhdGlvbnNfZHAsIG5f ZW50cmllcyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGRpX2J1Zl90cmFucyAq CkBAIC0xNzQ2LDYgKzE2NjAsMjAgQEAgdm9pZCBpbnRlbF9kZGlfYnVmX3RyYW5zX2luaXQoc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCiAJCWVuY29kZXItPmdldF9idWZfdHJhbnMgPSBj bmxfZ2V0X2J1Zl90cmFuczsKIAl9IGVsc2UgaWYgKElTX0dFTUlOSUxBS0UoaTkxNSkgfHwgSVNf QlJPWFRPTihpOTE1KSkgewogCQllbmNvZGVyLT5nZXRfYnVmX3RyYW5zID0gYnh0X2dldF9idWZf dHJhbnM7CisJfSBlbHNlIGlmIChJU19DTUxfVUxYKGk5MTUpIHx8IElTX0NGTF9VTFgoaTkxNSkg fHwgSVNfS0JMX1VMWChpOTE1KSkgeworCQllbmNvZGVyLT5nZXRfYnVmX3RyYW5zID0ga2JsX3lf Z2V0X2J1Zl90cmFuczsKKwl9IGVsc2UgaWYgKElTX0NNTF9VTFQoaTkxNSkgfHwgSVNfQ0ZMX1VM VChpOTE1KSB8fCBJU19LQkxfVUxUKGk5MTUpKSB7CisJCWVuY29kZXItPmdldF9idWZfdHJhbnMg PSBrYmxfdV9nZXRfYnVmX3RyYW5zOworCX0gZWxzZSBpZiAoSVNfQ09NRVRMQUtFKGk5MTUpIHx8 IElTX0NPRkZFRUxBS0UoaTkxNSkgfHwgSVNfS0FCWUxBS0UoaTkxNSkpIHsKKwkJZW5jb2Rlci0+ Z2V0X2J1Zl90cmFucyA9IGtibF9nZXRfYnVmX3RyYW5zOworCX0gZWxzZSBpZiAoSVNfU0tMX1VM WChpOTE1KSkgeworCQllbmNvZGVyLT5nZXRfYnVmX3RyYW5zID0gc2tsX3lfZ2V0X2J1Zl90cmFu czsKKwl9IGVsc2UgaWYgKElTX1NLTF9VTFQoaTkxNSkpIHsKKwkJZW5jb2Rlci0+Z2V0X2J1Zl90 cmFucyA9IHNrbF91X2dldF9idWZfdHJhbnM7CisJfSBlbHNlIGlmIChJU19TS1lMQUtFKGk5MTUp KSB7CisJCWVuY29kZXItPmdldF9idWZfdHJhbnMgPSBza2xfZ2V0X2J1Zl90cmFuczsKKwl9IGVs c2UgaWYgKElTX0JST0FEV0VMTChpOTE1KSkgeworCQllbmNvZGVyLT5nZXRfYnVmX3RyYW5zID0g YmR3X2dldF9idWZfdHJhbnM7CiAJfSBlbHNlIHsKIAkJZW5jb2Rlci0+Z2V0X2J1Zl90cmFucyA9 IGhzd19nZXRfYnVmX3RyYW5zOwogCX0KLS0gCjIuMzEuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==