From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vidya Srinivas Subject: [PATCH v1 09/14] drm/i915/skl: split skl_compute_ddb function Date: Mon, 9 Apr 2018 09:11:08 +0530 Message-ID: <1523245273-30264-10-git-send-email-vidya.srinivas@intel.com> References: <1523245273-30264-1-git-send-email-vidya.srinivas@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B0566E271 for ; Mon, 9 Apr 2018 03:44:30 +0000 (UTC) In-Reply-To: <1523245273-30264-1-git-send-email-vidya.srinivas@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Vidya Srinivas List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTWFoZXNoIEt1bWFyIDxtYWhlc2gxLmt1bWFyQGludGVsLmNvbT4KClRoaXMgcGF0Y2gg c3BsaXRzIHNrbF9jb21wdXRlX3dtL2RkYiBmdW5jdGlvbnMgaW50byB0d28gcGFydHMuCk9uZSBh ZGRzIGFsbCBhZmZlY3RlZCBwaXBlcyBhZnRlciB0aGUgY29tbWl0IHRvIGF0b21pY19zdGF0ZSBz dHJ1Y3R1cmUKYW5kIHNlY29uZCBwYXJ0IGRvZXMgY29tcHV0ZSB0aGUgRERCLgoKdjI6IEFkZGVk IHJldmlld2VkIGJ5IHRhZyBmcm9tIFNoYXNoYW5rIFNoYXJtYQoKdjM6IEFkZGVkIHJldmlld2Vk IGJ5IGZyb20gSnVoYS1QZWtrYSBIZWlra2lsYQoKdjQ6IFJlYmFzZWQgdGhlIHNlcmllcwoKdjU6 IEZpeGVkIGNoZWNrcGF0Y2ggZXJyb3IuIENoYW5nZWQgKmNoYW5nZWQgPSB0cnVlCnRvICgqY2hh bmdlZCkgPSB0cnVlOwoKUmV2aWV3ZWQtYnk6IEp1aGEtUGVra2EgSGVpa2tpbGEgPGp1aGFwZWtr YS5oZWlra2lsYUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBTaGFzaGFuayBTaGFybWEgPHNoYXNo YW5rLnNoYXJtYUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1haGVzaCBLdW1hciA8bWFoZXNo MS5rdW1hckBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFZpZHlhIFNyaW5pdmFzIDx2aWR5YS5z cmluaXZhc0BpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyB8 IDE1NyArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hh bmdlZCwgODggaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKaW5kZXggOWQ1YTdiMy4uMDA3YTEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCkBA IC01MDU5LDY5ICs1MDU5LDE2IEBAIHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BsYW5lcyhzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQogc3RhdGljIGludAogc2tsX2NvbXB1dGVfZGRiKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gc3RhdGUtPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7CisJY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShzdGF0ZS0+ZGV2KTsKIAlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0 ZSA9IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Ci0Jc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGM7CiAJc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiID0gJmludGVsX3N0YXRl LT53bV9yZXN1bHRzLmRkYjsKLQl1aW50MzJfdCByZWFsbG9jX3BpcGVzID0gcGlwZXNfbW9kaWZp ZWQoc3RhdGUpOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXMgb3VyIGZpcnN0IGF0 b21pYyB1cGRhdGUgZm9sbG93aW5nIGhhcmR3YXJlIHJlYWRvdXQsCi0JICogd2UgY2FuJ3QgdHJ1 c3QgdGhlIEREQiB0aGF0IHRoZSBCSU9TIHByb2dyYW1tZWQgZm9yIHVzLiAgTGV0J3MKLQkgKiBw cmV0ZW5kIHRoYXQgYWxsIHBpcGVzIHN3aXRjaGVkIGFjdGl2ZSBzdGF0dXMgc28gdGhhdCB3ZSds bAotCSAqIGVuc3VyZSBhIGZ1bGwgRERCIHJlY29tcHV0ZS4KLQkgKi8KLQlpZiAoZGV2X3ByaXYt PndtLmRpc3RydXN0X2Jpb3Nfd20pIHsKLQkJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmZGV2LT5t b2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4LAotCQkJCSAgICAgICBzdGF0ZS0+YWNxdWlyZV9j dHgpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlpbnRlbF9zdGF0ZS0+YWN0aXZl X3BpcGVfY2hhbmdlcyA9IH4wOwotCi0JCS8qCi0JCSAqIFdlIHVzdWFsbHkgb25seSBpbml0aWFs aXplIGludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3MgaWYgd2UKLQkJICogd2UncmUgZG9pbmcgYSBt b2Rlc2V0OyBtYWtlIHN1cmUgdGhpcyBmaWVsZCBpcyBhbHdheXMKLQkJICogaW5pdGlhbGl6ZWQg ZHVyaW5nIHRoZSBzYW5pdGl6YXRpb24gcHJvY2VzcyB0aGF0IGhhcHBlbnMKLQkJICogb24gdGhl IGZpcnN0IGNvbW1pdCB0b28uCi0JCSAqLwotCQlpZiAoIWludGVsX3N0YXRlLT5tb2Rlc2V0KQot CQkJaW50ZWxfc3RhdGUtPmFjdGl2ZV9jcnRjcyA9IGRldl9wcml2LT5hY3RpdmVfY3J0Y3M7Ci0J fQotCi0JLyoKLQkgKiBJZiB0aGUgbW9kZXNldCBjaGFuZ2VzIHdoaWNoIENSVEMncyBhcmUgYWN0 aXZlLCB3ZSBuZWVkIHRvCi0JICogcmVjb21wdXRlIHRoZSBEREIgYWxsb2NhdGlvbiBmb3IgKmFs bCogYWN0aXZlIHBpcGVzLCBldmVuCi0JICogdGhvc2UgdGhhdCB3ZXJlbid0IG90aGVyd2lzZSBi ZWluZyBtb2RpZmllZCBpbiBhbnkgd2F5IGJ5IHRoaXMKLQkgKiBhdG9taWMgY29tbWl0LiAgRHVl IHRvIHRoZSBzaHJpbmtpbmcgb2YgdGhlIHBlci1waXBlIGFsbG9jYXRpb25zCi0JICogd2hlbiBu ZXcgYWN0aXZlIENSVEMncyBhcmUgYWRkZWQsIGl0J3MgcG9zc2libGUgZm9yIGEgcGlwZSB0aGF0 Ci0JICogd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIGFuZCBhcmVuJ3QgY2hhbmdpbmcgYXQgYWxsIGhl cmUgdG8gc3VkZGVubHkKLQkgKiBiZWNvbWUgaW52YWxpZCBpZiBpdHMgRERCIG5lZWRzIGV4Y2Vl ZHMgaXRzIG5ldyBhbGxvY2F0aW9uLgotCSAqCi0JICogTm90ZSB0aGF0IGlmIHdlIHdpbmQgdXAg ZG9pbmcgYSBmdWxsIEREQiByZWNvbXB1dGUsIHdlIGNhbid0IGxldAotCSAqIGFueSBvdGhlciBk aXNwbGF5IHVwZGF0ZXMgcmFjZSB3aXRoIHRoaXMgdHJhbnNhY3Rpb24sIHNvIHdlIG5lZWQKLQkg KiB0byBncmFiIHRoZSBsb2NrIG9uICphbGwqIENSVEMncy4KLQkgKi8KLQlpZiAoaW50ZWxfc3Rh dGUtPmFjdGl2ZV9waXBlX2NoYW5nZXMpIHsKLQkJcmVhbGxvY19waXBlcyA9IH4wOwotCQlpbnRl bF9zdGF0ZS0+d21fcmVzdWx0cy5kaXJ0eV9waXBlcyA9IH4wOwotCX0KKwlzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlOworCWludCByZXQs IGk7CiAKLQkvKgotCSAqIFdlJ3JlIG5vdCByZWNvbXB1dGluZyBmb3IgdGhlIHBpcGVzIG5vdCBp bmNsdWRlZCBpbiB0aGUgY29tbWl0LCBzbwotCSAqIG1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIHRo ZSBjdXJyZW50IHN0YXRlLgotCSAqLwogCW1lbWNweShkZGIsICZkZXZfcHJpdi0+d20uc2tsX2h3 LmRkYiwgc2l6ZW9mKCpkZGIpKTsKIAotCWZvcl9lYWNoX2ludGVsX2NydGNfbWFzayhkZXYsIGlu dGVsX2NydGMsIHJlYWxsb2NfcGlwZXMpIHsKLQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNz dGF0ZTsKLQotCQljc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGlu dGVsX2NydGMpOwotCQlpZiAoSVNfRVJSKGNzdGF0ZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihjc3Rh dGUpOwotCisJZm9yX2VhY2hfbmV3X2ludGVsX2NydGNfaW5fc3RhdGUoaW50ZWxfc3RhdGUsIGNy dGMsIGNzdGF0ZSwgaSkgewogCQlyZXQgPSBza2xfYWxsb2NhdGVfcGlwZV9kZGIoY3N0YXRlLCBk ZGIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTUxODMsMjMgKzUxMzAsMjMgQEAg c2tsX3ByaW50X3dtX2NoYW5nZXMoY29uc3Qgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KQogfQogCiBzdGF0aWMgaW50Ci1za2xfY29tcHV0ZV93bShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCitza2xfZGRiX2FkZF9hZmZlY3RlZF9waXBlcyhzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUsIGJvb2wgKmNoYW5nZWQpCiB7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwot CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwotCXN0cnVjdCBpbnRlbF9hdG9taWNfc3Rh dGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKLQlzdHJ1Y3Qg c2tsX2RkYl92YWx1ZXMgKnJlc3VsdHMgPSAmaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHM7CiAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7Ci0Jc3RydWN0IHNrbF9waXBlX3dtICpw aXBlX3dtOwotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2NydGMg KmNydGM7CisJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7CisJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGM7CisJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxf c3RhdGUgPSB0b19pbnRlbF9hdG9taWNfc3RhdGUoc3RhdGUpOworCXVpbnQzMl90IHJlYWxsb2Nf cGlwZXMgPSBwaXBlc19tb2RpZmllZChzdGF0ZSk7CiAJaW50IHJldCwgaTsKIAogCS8qCiAJICog V2hlbiB3ZSBkaXN0cnVzdCBiaW9zIHdtIHdlIGFsd2F5cyBuZWVkIHRvIHJlY29tcHV0ZSB0byBz ZXQgdGhlCiAJICogZXhwZWN0ZWQgRERCIGFsbG9jYXRpb25zIGZvciBlYWNoIENSVEMuCiAJICov Ci0JaWYgKHRvX2k5MTUoZGV2KS0+d20uZGlzdHJ1c3RfYmlvc193bSkKLQkJY2hhbmdlZCA9IHRy dWU7CisJaWYgKGRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9zX3dtKQorCQkoKmNoYW5nZWQpID0g dHJ1ZTsKIAogCS8qCiAJICogSWYgdGhpcyB0cmFuc2FjdGlvbiBpc24ndCBhY3R1YWxseSB0b3Vj aGluZyBhbnkgQ1JUQydzLCBkb24ndApAQCAtNTIxMCwxNCArNTE1Nyw4NiBAQCBza2xfY29tcHV0 ZV93bShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJICogaG9sZCBfYWxsXyBDUlRD IHN0YXRlIG11dGV4ZXMuCiAJICovCiAJZm9yX2VhY2hfbmV3X2NydGNfaW5fc3RhdGUoc3RhdGUs IGNydGMsIGNzdGF0ZSwgaSkKLQkJY2hhbmdlZCA9IHRydWU7CisJCSgqY2hhbmdlZCkgPSB0cnVl OwogCi0JaWYgKCFjaGFuZ2VkKQorCWlmICghKmNoYW5nZWQpCiAJCXJldHVybiAwOwogCisJLyoK KwkgKiBJZiB0aGlzIGlzIG91ciBmaXJzdCBhdG9taWMgdXBkYXRlIGZvbGxvd2luZyBoYXJkd2Fy ZSByZWFkb3V0LAorCSAqIHdlIGNhbid0IHRydXN0IHRoZSBEREIgdGhhdCB0aGUgQklPUyBwcm9n cmFtbWVkIGZvciB1cy4gIExldCdzCisJICogcHJldGVuZCB0aGF0IGFsbCBwaXBlcyBzd2l0Y2hl ZCBhY3RpdmUgc3RhdHVzIHNvIHRoYXQgd2UnbGwKKwkgKiBlbnN1cmUgYSBmdWxsIEREQiByZWNv bXB1dGUuCisJICovCisJaWYgKGRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9zX3dtKSB7CisJCXJl dCA9IGRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwK KwkJCQkgICAgICAgc3RhdGUtPmFjcXVpcmVfY3R4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisKKwkJaW50ZWxfc3RhdGUtPmFjdGl2ZV9waXBlX2NoYW5nZXMgPSB+MDsKKworCQkvKgor CQkgKiBXZSB1c3VhbGx5IG9ubHkgaW5pdGlhbGl6ZSBpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNz IGlmIHdlCisJCSAqIHdlJ3JlIGRvaW5nIGEgbW9kZXNldDsgbWFrZSBzdXJlIHRoaXMgZmllbGQg aXMgYWx3YXlzCisJCSAqIGluaXRpYWxpemVkIGR1cmluZyB0aGUgc2FuaXRpemF0aW9uIHByb2Nl c3MgdGhhdCBoYXBwZW5zCisJCSAqIG9uIHRoZSBmaXJzdCBjb21taXQgdG9vLgorCQkgKi8KKwkJ aWYgKCFpbnRlbF9zdGF0ZS0+bW9kZXNldCkKKwkJCWludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3Mg PSBkZXZfcHJpdi0+YWN0aXZlX2NydGNzOworCX0KKworCS8qCisJICogSWYgdGhlIG1vZGVzZXQg Y2hhbmdlcyB3aGljaCBDUlRDJ3MgYXJlIGFjdGl2ZSwgd2UgbmVlZCB0bworCSAqIHJlY29tcHV0 ZSB0aGUgRERCIGFsbG9jYXRpb24gZm9yICphbGwqIGFjdGl2ZSBwaXBlcywgZXZlbgorCSAqIHRo b3NlIHRoYXQgd2VyZW4ndCBvdGhlcndpc2UgYmVpbmcgbW9kaWZpZWQgaW4gYW55IHdheSBieSB0 aGlzCisJICogYXRvbWljIGNvbW1pdC4gIER1ZSB0byB0aGUgc2hyaW5raW5nIG9mIHRoZSBwZXIt cGlwZSBhbGxvY2F0aW9ucworCSAqIHdoZW4gbmV3IGFjdGl2ZSBDUlRDJ3MgYXJlIGFkZGVkLCBp dCdzIHBvc3NpYmxlIGZvciBhIHBpcGUgdGhhdAorCSAqIHdlIHdlcmUgYWxyZWFkeSB1c2luZyBh bmQgYXJlbid0IGNoYW5naW5nIGF0IGFsbCBoZXJlIHRvIHN1ZGRlbmx5CisJICogYmVjb21lIGlu dmFsaWQgaWYgaXRzIEREQiBuZWVkcyBleGNlZWRzIGl0cyBuZXcgYWxsb2NhdGlvbi4KKwkgKgor CSAqIE5vdGUgdGhhdCBpZiB3ZSB3aW5kIHVwIGRvaW5nIGEgZnVsbCBEREIgcmVjb21wdXRlLCB3 ZSBjYW4ndCBsZXQKKwkgKiBhbnkgb3RoZXIgZGlzcGxheSB1cGRhdGVzIHJhY2Ugd2l0aCB0aGlz IHRyYW5zYWN0aW9uLCBzbyB3ZSBuZWVkCisJICogdG8gZ3JhYiB0aGUgbG9jayBvbiAqYWxsKiBD UlRDJ3MuCisJICovCisJaWYgKGludGVsX3N0YXRlLT5hY3RpdmVfcGlwZV9jaGFuZ2VzKSB7CisJ CXJlYWxsb2NfcGlwZXMgPSB+MDsKKwkJaW50ZWxfc3RhdGUtPndtX3Jlc3VsdHMuZGlydHlfcGlw ZXMgPSB+MDsKKwl9CisKKwkvKgorCSAqIFdlJ3JlIG5vdCByZWNvbXB1dGluZyBmb3IgdGhlIHBp cGVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29tbWl0LCBzbworCSAqIG1ha2Ugc3VyZSB3ZSBzdGFy dCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlLgorCSAqLworCWZvcl9lYWNoX2ludGVsX2NydGNfbWFz ayhkZXYsIGludGVsX2NydGMsIHJlYWxsb2NfcGlwZXMpIHsKKwkJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNzdGF0ZTsKKworCQljc3RhdGUgPSBpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUo c3RhdGUsIGludGVsX2NydGMpOworCQlpZiAoSVNfRVJSKGNzdGF0ZSkpCisJCQlyZXR1cm4gUFRS X0VSUihjc3RhdGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citza2xfY29t cHV0ZV93bShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9j cnRjICpjcnRjOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOworCXN0cnVjdCBpbnRl bF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRl KTsKKwlzdHJ1Y3Qgc2tsX2RkYl92YWx1ZXMgKnJlc3VsdHMgPSAmaW50ZWxfc3RhdGUtPndtX3Jl c3VsdHM7CisJc3RydWN0IHNrbF9waXBlX3dtICpwaXBlX3dtOworCWJvb2wgY2hhbmdlZCA9IGZh bHNlOworCWludCByZXQsIGk7CisKIAkvKiBDbGVhciBhbGwgZGlydHkgZmxhZ3MgKi8KIAlyZXN1 bHRzLT5kaXJ0eV9waXBlcyA9IDA7CiAKKwlyZXQgPSBza2xfZGRiX2FkZF9hZmZlY3RlZF9waXBl cyhzdGF0ZSwgJmNoYW5nZWQpOworCWlmIChyZXQgfHwgIWNoYW5nZWQpCisJCXJldHVybiByZXQ7 CisKIAlyZXQgPSBza2xfY29tcHV0ZV9kZGIoc3RhdGUpOwogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==