From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas De Marchi Subject: [PATCH 25/39] drm/i915/tgl: Implement TGL DisplayPort training sequence Date: Fri, 16 Aug 2019 01:04:49 -0700 Message-ID: <20190816080503.28594-26-lucas.demarchi@intel.com> References: <20190816080503.28594-1-lucas.demarchi@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 580946EB23 for ; Fri, 16 Aug 2019 08:06:04 +0000 (UTC) In-Reply-To: <20190816080503.28594-1-lucas.demarchi@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9zw6kgUm9iZXJ0byBkZSBTb3V6YSA8am9zZS5zb3V6YUBpbnRlbC5jb20+CgpPbiBU R0wgc29tZSByZWdpc3RlcnMgbW92ZWQgZnJvbSBEREkgdG8gdHJhbnNjb2RlciBhbmQgdGhlCkRp c3BsYXlQb3J0IHRyYWluaW5nIHNlcXVlbmNlIGhhcyBhIHNlcGFyYXRlIEJTcGVjIHBhZ2UuCgpJ IHN0YXJ0ZWQgYWRkaW5nICdpZnMnIHRvIHRoZSBvcmlnaW5hbCBpbnRlbF9kZGlfcHJlX2VuYWJs ZV9kcCgpIGJ1dAppdCB3YXMgYmVjb21pbmcgcmVhbGx5IGhhcmQgdG8gZm9sbG93LCBzbyBhIG5l dyBhbmQgY2xlYW5lciBmdW5jdGlvbgpmb3IgVEdMIHdhcyBhZGRlZCB3aXRoIGNvbW1lbnRzIG9m IGFsbCBzdGVwcy4gSXQncyBzaW1pbGFyIHRvIElDTCwgYnV0CmRpZmZlcmVudCBlbm91Z2ggdG8g ZGVzZXJ2ZSBhIG5ldyBmdW5jdGlvbgoKVGhlIHJlc3Qgb2YgRGlzcGxheVBvcnQgZW5hYmxlIGFu ZCB0aGUgd2hvbGUgZGlzYWJsZSBzZXF1ZW5jZXMKcmVtYWluZWQgdGhlIHNhbWUuCgpCU3BlYzog NDkxOTAKQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+CkNjOiBW aWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2Zm LWJ5OiBKb3PDqSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KU2lnbmVk LW9mZi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYyB8IDEzNCArKysrKysrKysr KysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jICB8 ICAgOCArLQogMiBmaWxlcyBjaGFuZ2VkLCAxMzQgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kZGkuYwppbmRleCAxN2Q0OWM3 N2ZhYTAuLjVkOTcxZTlkMDQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kZGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RkaS5jCkBAIC0xNzYxLDcgKzE3NjEsMTQgQEAgdm9pZCBpbnRlbF9kZGlfc2V0X3ZjX3BheWxv YWRfYWxsb2MoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJSTkx NV9XUklURShUUkFOU19ERElfRlVOQ19DVEwoY3B1X3RyYW5zY29kZXIpLCB0ZW1wKTsKIH0KIAot dm9pZCBpbnRlbF9kZGlfZW5hYmxlX3RyYW5zY29kZXJfZnVuYyhjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKKy8qCisgKiBSZXR1cm5zIHRoZSBUUkFOU19ERElfRlVO Q19DVEwgdmFsdWUgYmFzZWQgb24gQ1JUQyBzdGF0ZS4KKyAqCisgKiBPbmx5IGludGVuZGVkIHRv IGJlIHVzZWQgYnkgaW50ZWxfZGRpX2VuYWJsZV90cmFuc2NvZGVyX2Z1bmMoKSBhbmQKKyAqIGlu dGVsX2RkaV9jb25maWdfdHJhbnNjb2Rlcl9mdW5jKCkuCisgKi8KK3N0YXRpYyB1MzIKK2ludGVs X2RkaV90cmFuc2NvZGVyX2Z1bmNfcmVnX3ZhbF9nZXQoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCiB7CiAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRl bF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIgPSBpbnRlbF9kZGlfZ2V0X2NydGNfZW5jb2RlcihjcnRjKTsKQEAgLTE4NTEsNiArMTg1 OCwzMyBAQCB2b2lkIGludGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCQl0ZW1wIHw9IERESV9QT1JUX1dJRFRI KGNydGNfc3RhdGUtPmxhbmVfY291bnQpOwogCX0KIAorCXJldHVybiB0ZW1wOworfQorCit2b2lk IGludGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9mdW5jKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50 ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gdHJhbnNjb2RlciBj cHVfdHJhbnNjb2RlciA9IGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOworCXUzMiB0ZW1wOwor CisJdGVtcCA9IGludGVsX2RkaV90cmFuc2NvZGVyX2Z1bmNfcmVnX3ZhbF9nZXQoY3J0Y19zdGF0 ZSk7CisJSTkxNV9XUklURShUUkFOU19ERElfRlVOQ19DVEwoY3B1X3RyYW5zY29kZXIpLCB0ZW1w KTsKK30KKworLyoKKyAqIFNhbWUgYXMgaW50ZWxfZGRpX2VuYWJsZV90cmFuc2NvZGVyX2Z1bmMo KSBidXQgaXQgZG8gbm90IHNldCB0aGUgZW5hYmxlIGJpdAorICovCitzdGF0aWMgdm9pZAoraW50 ZWxfZGRpX2NvbmZpZ190cmFuc2NvZGVyX2Z1bmMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9j cnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJZW51bSB0cmFuc2NvZGVyIGNwdV90 cmFuc2NvZGVyID0gY3J0Y19zdGF0ZS0+Y3B1X3RyYW5zY29kZXI7CisJdTMyIHRlbXA7CisKKwl0 ZW1wID0gaW50ZWxfZGRpX3RyYW5zY29kZXJfZnVuY19yZWdfdmFsX2dldChjcnRjX3N0YXRlKTsK Kwl0ZW1wICY9IH5UUkFOU19ERElfRlVOQ19FTkFCTEU7CiAJSTkxNV9XUklURShUUkFOU19ERElf RlVOQ19DVEwoY3B1X3RyYW5zY29kZXIpLCB0ZW1wKTsKIH0KIApAQCAtMzE3Niw5ICszMjEwLDg5 IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9kaXNhYmxlX2ZlY19zdGF0ZShzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwKIAlQT1NUSU5HX1JFQUQoY3RsKTsKIH0KIAotc3RhdGljIHZvaWQg aW50ZWxfZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0J CQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJCSAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3N0YXRpYyB2 b2lkIHRnbF9kZGlfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwK KwkJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAg Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcCgmZW5jb2Rlci0+YmFzZSk7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNl LmRldik7CisJZW51bSBwaHkgcGh5ID0gaW50ZWxfcG9ydF90b19waHkoZGV2X3ByaXYsIGVuY29k ZXItPnBvcnQpOworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZW5jX3Rv X2RpZ19wb3J0KCZlbmNvZGVyLT5iYXNlKTsKKwlib29sIGlzX21zdCA9IGludGVsX2NydGNfaGFz X3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0RQX01TVCk7CisJaW50IGxldmVsID0gaW50 ZWxfZGRpX2RwX2xldmVsKGludGVsX2RwKTsKKworCWludGVsX2RwX3NldF9saW5rX3BhcmFtcyhp bnRlbF9kcCwgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jaywKKwkJCQkgY3J0Y19zdGF0ZS0+bGFuZV9j b3VudCwgaXNfbXN0KTsKKworCS8qIDEuYSBnb3Qgb24gaW50ZWxfYXRvbWljX2NvbW1pdF90YWls KCkgKi8KKworCS8qIDIuICovCisJaW50ZWxfZWRwX3BhbmVsX29uKGludGVsX2RwKTsKKworCS8q CisJICogMS5iLCAzLiBhbmQgNC4gaXMgZG9uZSBieSBiZWZvcmUgdGhpcyBmdW5jdGlvbnMgYnkK KwkgKiBoYXN3ZWxsX2NydGNfZW5hYmxlKCktPmludGVsX2VuY29kZXJzX3ByZV9wbGxfZW5hYmxl KCkgYW5kCisJICogaGFzd2VsbF9jcnRjX2VuYWJsZSgpLT5pbnRlbF9lbmFibGVfc2hhcmVkX2Rw bGwoKQorCSAqLworCisJLyogNS4gKi8KKwlpZiAoIWludGVsX3BoeV9pc190YyhkZXZfcHJpdiwg cGh5KSB8fAorCSAgICBkaWdfcG9ydC0+dGNfbW9kZSAhPSBUQ19QT1JUX1RCVF9BTFQpCisJCWlu dGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LAorCQkJCQlkaWdfcG9ydC0+ZGRpX2lvX3Bv d2VyX2RvbWFpbik7CisKKwkvKiA2LiAqLworCWljbF9wcm9ncmFtX21nX2RwX21vZGUoZGlnX3Bv cnQpOworCisJLyoKKwkgKiA3LmEgLSBTdGVwcyBpbiB0aGlzIGZ1bmN0aW9uIHRoYXQgc2hvdWxk IG9ubHkgYmUgZXhlY3V0ZWQgb3ZlciBNU1QKKwkgKiBtYXN0ZXIgYXMgTVNUIGVuY29kZXJzIHdp bGwgb25seSBiZSBleGVjdXRlZCBvbiBNU1QgbWFzdGVyIGFzIE1TVAorCSAqIGVuY29kZXIgaGF2 ZSBoYXZlIGl0J3Mgb3duIHByZV9lbmFibGUoKSBob29rCisJICovCisJaW50ZWxfZGRpX2VuYWJs ZV9waXBlX2Nsb2NrKGNydGNfc3RhdGUpOworCisJLyogNy5iICovCisJaW50ZWxfZGRpX2NvbmZp Z190cmFuc2NvZGVyX2Z1bmMoY3J0Y19zdGF0ZSk7CisKKwkvKiA3LmQgKi8KKwlpY2xfZGlzYWJs ZV9waHlfY2xvY2tfZ2F0aW5nKGRpZ19wb3J0KTsKKworCS8qIDcuZSAqLworCWljbF9kZGlfdnN3 aW5nX3NlcXVlbmNlKGVuY29kZXIsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssIGxldmVsLAorCQkJ CWVuY29kZXItPnR5cGUpOworCisJLyogNy5mICovCisJaWYgKGludGVsX3BoeV9pc19jb21ibyhk ZXZfcHJpdiwgcGh5KSkgeworCQlib29sIGxhbmVfcmV2ZXJzYWwgPQorCQkJZGlnX3BvcnQtPnNh dmVkX3BvcnRfYml0cyAmIERESV9CVUZfUE9SVF9SRVZFUlNBTDsKKworCQlpbnRlbF9jb21ib19w aHlfcG93ZXJfdXBfbGFuZXMoZGV2X3ByaXYsIHBoeSwgZmFsc2UsCisJCQkJCSAgICAgICBjcnRj X3N0YXRlLT5sYW5lX2NvdW50LAorCQkJCQkgICAgICAgbGFuZV9yZXZlcnNhbCk7CisJfQorCisJ LyogNy5nICovCisJaW50ZWxfZGRpX2luaXRfZHBfYnVmX3JlZyhlbmNvZGVyKTsKKworCWlmICgh aXNfbXN0KQorCQlpbnRlbF9kcF9zaW5rX2RwbXMoaW50ZWxfZHAsIERSTV9NT0RFX0RQTVNfT04p OworCisJLyogNy5jLCA3LmgsIDcuaSwgNy5qICovCisJaW50ZWxfZHBfc3RhcnRfbGlua190cmFp bihpbnRlbF9kcCk7CisKKwkvKiA3LmsgKi8KKwlpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oaW50 ZWxfZHApOworCisJLyogNy5sICovCisJaW50ZWxfZHBfc2lua19zZXRfZGVjb21wcmVzc2lvbl9z dGF0ZShpbnRlbF9kcCwgY3J0Y19zdGF0ZSwKKwkJCQkJICAgICAgdHJ1ZSk7CisJaW50ZWxfZHBf c2lua19zZXRfZmVjX3JlYWR5KGludGVsX2RwLCBjcnRjX3N0YXRlKTsKKwlpbnRlbF9kc2NfZW5h YmxlKGVuY29kZXIsIGNydGNfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBoc3dfZGRpX3ByZV9l bmFibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2UpOwogCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwpAQCAtMzI0NCw2 ICszMzU4LDE4IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAogCWludGVsX2RzY19lbmFibGUoZW5jb2RlciwgY3J0Y19z dGF0ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSAxMikKKwkJdGdsX2RkaV9wcmVfZW5hYmxlX2RwKGVuY29kZXIsIGNydGNfc3RhdGUsIGNvbm5f c3RhdGUpOworCWVsc2UKKwkJaHN3X2RkaV9wcmVfZW5hYmxlX2RwKGVuY29kZXIsIGNydGNfc3Rh dGUsIGNvbm5fc3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfcHJlX2VuYWJsZV9o ZG1pKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kcC5jCmluZGV4IGViZmNmMTgzYzdmMS4uMWE4ZTA0MWE1YzQzIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCkBAIC00MDA3LDEzICs0MDA3LDEzIEBAIHZv aWQgaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQogCUk5MTVfV1JJVEUoY3RsLCB2YWwpOwogCiAJLyoKLQkgKiBPbiBQT1JUX0Egd2UgY2FuIGhh dmUgb25seSBlRFAgaW4gU1NUIG1vZGUuIFRoZXJlIHRoZSBvbmx5IHJlYXNvbgotCSAqIHdlIG5l ZWQgdG8gc2V0IGlkbGUgdHJhbnNtaXNzaW9uIG1vZGUgaXMgdG8gd29yayBhcm91bmQgYSBIVyBp c3N1ZQotCSAqIHdoZXJlIHdlIGVuYWJsZSB0aGUgcGlwZSB3aGlsZSBub3QgaW4gaWRsZSBsaW5r LXRyYWluaW5nIG1vZGUuCisJICogVW50aWwgVEdMIG9uIFBPUlRfQSB3ZSBjYW4gaGF2ZSBvbmx5 IGVEUCBpbiBTU1QgbW9kZS4gVGhlcmUgdGhlIG9ubHkKKwkgKiByZWFzb24gd2UgbmVlZCB0byBz ZXQgaWRsZSB0cmFuc21pc3Npb24gbW9kZSBpcyB0byB3b3JrIGFyb3VuZCBhIEhXCisJICogaXNz dWUgd2hlcmUgd2UgZW5hYmxlIHRoZSBwaXBlIHdoaWxlIG5vdCBpbiBpZGxlIGxpbmstdHJhaW5p bmcgbW9kZS4KIAkgKiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMgcmVxdWlyZW1lbnQgdG8gd2FpdCBm b3IgYSBtaW5pbXVtIG51bWJlciBvZgogCSAqIGlkbGUgcGF0dGVybnMgdG8gYmUgc2VudC4KIAkg Ki8KLQlpZiAocG9ydCA9PSBQT1JUX0EpCisJaWYgKHBvcnQgPT0gUE9SVF9BICYmIElOVEVMX0dF TihkZXZfcHJpdikgPCAxMikKIAkJcmV0dXJuOwogCiAJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lz dGVyKCZkZXZfcHJpdi0+dW5jb3JlLCBzdGF0dXMsCi0tIAoyLjIxLjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==