From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH 37/43] drm/i915: Initialize HDCP2.2 and its MEI interface Date: Wed, 14 Feb 2018 19:43:52 +0530 Message-ID: <1518617638-21684-38-git-send-email-ramalingam.c@intel.com> References: <1518617638-21684-1-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6DCBC6E40E for ; Wed, 14 Feb 2018 14:21:14 +0000 (UTC) In-Reply-To: <1518617638-21684-1-git-send-email-ramalingam.c@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: seanpaul@chromium.org, intel-gfx@lists.freedesktop.org, rodrigo.vivi@intel.com, daniel.vetter@ffwll.ch Cc: tomas.winkler@intel.com List-Id: intel-gfx@lists.freedesktop.org SW1wbGVtZW50cyB0aGUgaW5pdCBhbmQgZXhpdCBmb3IgaGRjcDIuMiBzdXBwb3J0LiBUaGlzIGlu Y2x1ZGVzIHRoZQptZWkgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGFsc28uCgpTaWduZWQtb2Zm LWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYyB8 IDE0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfaGRtaS5jIHwgICAyICstCiA0IGZpbGVzIGNoYW5nZWQsIDE0NyBpbnNl cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDg4 NDdmMWEzNjUwNC4uNmY2YjRjOGUzYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTY0 NjMsNyArNjQ2Myw4IEBAIGludGVsX2RwX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAogCWludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKGludGVs X2RwLCBjb25uZWN0b3IpOwogCiAJaWYgKGlzX2hkY3Bfc3VwcG9ydGVkKGRldl9wcml2LCBwb3J0 KSAmJiAhaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkgewotCQlpbnQgcmV0ID0gaW50ZWxfaGRj cF9pbml0KGludGVsX2Nvbm5lY3RvciwgJmludGVsX2RwX2hkY3Bfc2hpbSk7CisJCWludCByZXQg PSBpbnRlbF9oZGNwX2luaXQoaW50ZWxfY29ubmVjdG9yLCAmaW50ZWxfZHBfaGRjcF9zaGltLAor CQkJCQkgIE5VTEwpOwogCQlpZiAocmV0KQogCQkJRFJNX0RFQlVHX0tNUygiSERDUCBpbml0IGZh aWxlZCwgc2tpcHBpbmcuXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDlj MDUwNDljMjVkNS4uODQyYTIyNTAyNzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAt MTk1MCw3ICsxOTUwLDggQEAgdm9pZCBpbnRlbF9oZGNwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqb2xkX3N0YXRlLAogCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X3N0 YXRlKTsKIGludCBpbnRlbF9oZGNwX2luaXQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVj dG9yLAotCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqaGRjcF9zaGltKTsKKwkJ ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKmhkY3Bfc2hpbSwKKwkJICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9oZGNwMl9zaGltICpoZGNwMl9zaGltKTsKIGludCBpbnRlbF9oZGNwX2Vu YWJsZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpOwogaW50IGludGVsX2hkY3Bf ZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpOwogaW50IGludGVsX2hk Y3BfY2hlY2tfbGluayhzdHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9oZGNwLmMKaW5kZXggOWQwMWQxZmY4YzczLi5iYjU2ZTRlNTk1ZDggMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9oZGNwLmMKQEAgLTI2LDYgKzI2LDcgQEAgc3RhdGljIGludCBfaW50ZWxfaGRjcDJf ZW5hYmxlKHN0cnVjdCBpbnRlbF9oZGNwICpoZGNwKTsKIHN0YXRpYyBpbnQgX2ludGVsX2hkY3Ay X2Rpc2FibGUoc3RydWN0IGludGVsX2hkY3AgKmhkY3ApOwogc3RhdGljIHZvaWQgaW50ZWxfaGRj cDJfY2hlY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIGludCBpbnRl bF9oZGNwMl9jaGVja19saW5rKHN0cnVjdCBpbnRlbF9oZGNwICpoZGNwKTsKK3N0YXRpYyB2b2lk IGludGVsX2hkY3AyX2V4aXQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIAog c3RhdGljIGlubGluZSBib29sIGludGVsX2hkY3AxX3N1cHBvcnRlZChzdHJ1Y3QgaW50ZWxfaGRj cCAqaGRjcCkKIHsKQEAgLTczOCwxMSArNzM5LDEzNiBAQCBib29sIGlzX2hkY3Bfc3VwcG9ydGVk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQpCiAJCSFJ U19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwb3J0IDwgUE9SVF9FKTsKIH0KIAotaW50IGludGVs X2hkY3BfaW5pdChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCSAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltICpoZGNwX3NoaW0pCitzdGF0aWMgaW5saW5lIGludCBp bml0aWFsaXplX21laV9oZGNwX2RhdGEoc3RydWN0IGludGVsX2hkY3AgKmhkY3ApCit7CisJc3Ry dWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gaGRjcC0+Y29ubmVjdG9yOworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRl dik7CisJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSBoZGNwLT5tZWlfaGRjcF9kYXRhOwor CWVudW0gcG9ydCBwb3J0OworCisJZGF0YS0+Y2xkZXYgPSBkZXZfcHJpdi0+bWVpX2NsZGV2Owor CisJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlcikgeworCQlwb3J0ID0gY29ubmVjdG9yLT5lbmNvZGVy LT5wb3J0OworCQlkYXRhLT5wb3J0ID0gR0VUX01FSV9ERElfSU5ERVgocG9ydCk7CisJfQorCisJ ZGF0YS0+cG9ydF90eXBlID0gSU5URUdSQVRFRDsKKwlkYXRhLT5wcm90b2NvbCA9IGhkY3AtPmhk Y3AyX3NoaW0tPmhkY3BfcHJvdG9jb2woKTsKKworCWRhdGEtPmsgPSAxOworCWlmICghZGF0YS0+ c3RyZWFtcykKKwkJZGF0YS0+c3RyZWFtcyA9IGtjYWxsb2MoZGF0YS0+aywKKwkJCQkJc2l6ZW9m KHN0cnVjdCBoZGNwMl9zdHJlYW1pZF90eXBlKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFk YXRhLT5zdHJlYW1zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPnN0cmVhbXNbMF0uc3Ry ZWFtX2lkID0gMDsKKwlkYXRhLT5zdHJlYW1zWzBdLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVu dF90eXBlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaW50ZWxfbWVpX2NsZGV2X3JlZmVyZW5j ZV9ub3RpZnkodm9pZCAqY2xpZW50LAorCQkJCSAgICAgIHN0cnVjdCBtZWlfY2xfZGV2aWNlICpj bGRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjbGllbnQ7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOworCXN0cnVjdCBpbnRlbF9j b25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7CisKKwlEUk1f SU5GTygiTUVJX0hEQ1AgTm90aWZpY2F0aW9uLiBJbnRlcmZhY2U6ICVzXG4iLAorCQkgIGNsZGV2 ID8gIlVQIiA6ICJEb3duIik7CisJZGV2X3ByaXYtPm1laV9jbGRldiA9IGNsZGV2OworCisJZHJt X2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fZm9yX2Vh Y2hfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7CisJCWludGVsX2Nvbm5l Y3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQlpZiAoIWludGVsX2Nvbm5l Y3Rvci0+aGRjcCB8fAorCQkgICAgIShpbnRlbF9jb25uZWN0b3ItPmhkY3AtPnBsYXRfY2FwICYg SERDUDJfQ0FQQUJJTElUWSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNsZGV2KQorCQkJaW5pdGlh bGl6ZV9tZWlfaGRjcF9kYXRhKGludGVsX2Nvbm5lY3Rvci0+aGRjcCk7CisJCWVsc2UKKwkJCWlu dGVsX2hkY3AyX2V4aXQoaW50ZWxfY29ubmVjdG9yKTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0 X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOworfQorCitzdGF0aWMgaW50IGludGVsX2hkY3AyX2luaXQo c3RydWN0IGludGVsX2hkY3AgKmhkY3AsCisJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2hkY3Ay X3NoaW0gKnNoaW0pCiB7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gaGRj cC0+Y29ubmVjdG9yOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY29ubmVjdG9yLT5iYXNlLmRldik7CiAJaW50IHJldDsKKworCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpIDwgMTAgJiYgIUlTX0dFTUlOSUxBS0UoZGV2X3ByaXYpICYmCisJICAgICFJU19LQUJZ TEFLRShkZXZfcHJpdikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFkZXZfcHJpdi0+bWVp X2NsZGV2ICYmICFkZXZfcHJpdi0+bWVpX3JlZl9jbnQpIHsKKwkJcmV0ID0gbWVpX2hkY3BfY2xk ZXZfZ2V0X3JlZmVyZW5jZSgodm9pZCAqKWRldl9wcml2LAorCQkJCQkmZGV2X3ByaXYtPm1laV9j bGRldiwKKwkJCQkJaW50ZWxfbWVpX2NsZGV2X3JlZmVyZW5jZV9ub3RpZnkpOworCQlpZiAocmV0 IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZGV2X3ByaXYtPm1laV9yZWZfY250Kys7CisK KwloZGNwLT5oZGNwMl9zaGltID0gc2hpbTsKKwloZGNwLT5tZWlfaGRjcF9kYXRhID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IG1laV9oZGNwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkY3At Pm1laV9oZGNwX2RhdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZXhpdDsKKwl9 CisKKwlyZXQgPSBpbml0aWFsaXplX21laV9oZGNwX2RhdGEoaGRjcCk7CisJaWYgKHJldCkKKwkJ Z290byBlcnIyX2V4aXQ7CisKKwlJTklUX0RFTEFZRURfV09SSygmaGRjcC0+aGRjcDJfY2hlY2tf d29yaywgaW50ZWxfaGRjcDJfY2hlY2tfd29yayk7CisJaGRjcC0+cGxhdF9jYXAgfD0gSERDUDJf Q0FQQUJJTElUWTsKKwlyZXR1cm4gMDsKKworZXJyMl9leGl0OgorCWtmcmVlKGhkY3AtPm1laV9o ZGNwX2RhdGEpOworZXJyX2V4aXQ6CisJaWYgKCEoLS1kZXZfcHJpdi0+bWVpX3JlZl9jbnQpKSB7 CisJCW1laV9oZGNwX2NsZGV2X3B1dF9yZWZlcmVuY2UoZGV2X3ByaXYtPm1laV9jbGRldik7CisJ CWRldl9wcml2LT5tZWlfY2xkZXYgPSBOVUxMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCBpbnRlbF9oZGNwMl9leGl0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5l Y3Rvci0+YmFzZS5kZXYpOworCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0gY29ubmVjdG9yLT5o ZGNwOworCisJaW50ZWxfaGRjcF9kaXNhYmxlKGNvbm5lY3Rvcik7CisKKwlpZiAoZGV2X3ByaXYt Pm1laV9jbGRldiAmJiAhKC0tZGV2X3ByaXYtPm1laV9yZWZfY250KSkgeworCQltZWlfaGRjcF9j bGRldl9wdXRfcmVmZXJlbmNlKGRldl9wcml2LT5tZWlfY2xkZXYpOworCQlkZXZfcHJpdi0+bWVp X2NsZGV2ID0gTlVMTDsKKwl9CisKKwlrZnJlZShoZGNwLT5tZWlfaGRjcF9kYXRhLT5zdHJlYW1z KTsKKwlrZnJlZShoZGNwLT5tZWlfaGRjcF9kYXRhKTsKKwloZGNwLT5wbGF0X2NhcCAmPSB+SERD UDJfQ0FQQUJJTElUWTsKK30KKworaW50IGludGVsX2hkY3BfaW5pdChzdHJ1Y3QgaW50ZWxfY29u bmVjdG9yICpjb25uZWN0b3IsCisJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltICpo ZGNwX3NoaW0sCisJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcDJfc2hpbSAqaGRjcDJfc2hp bSkKK3sKIAlzdHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcDsKKwlpbnQgcmV0OworCisJaWYgKCFoZGNw X3NoaW0gJiYgIWhkY3AyX3NoaW0pCisJCXJldHVybiAtRUlOVkFMOwogCiAJaGRjcCA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9oZGNwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZGNwKSB7 CkBAIC03NTAsNiArODc2LDIwIEBAIGludCBpbnRlbF9oZGNwX2luaXQoc3RydWN0IGludGVsX2Nv bm5lY3RvciAqY29ubmVjdG9yLAogCQlnb3RvIGVycjsKIAl9CiAKKwloZGNwLT5jb25uZWN0b3Ig PSBjb25uZWN0b3I7CisJaWYgKGhkY3Bfc2hpbSkgeworCisJCS8qIEluaXRpYWxpemUgSERDUDEu NCAqLworCQlJTklUX0RFTEFZRURfV09SSygmaGRjcC0+aGRjcF9jaGVja193b3JrLAorCQkJCSAg aW50ZWxfaGRjcF9jaGVja193b3JrKTsKKwkJaGRjcC0+aGRjcF9zaGltID0gaGRjcF9zaGltOwor CisJCWhkY3AtPnBsYXRfY2FwIHw9IEhEQ1BfQ0FQQUJJTElUWTsKKwl9CisKKwlpZiAoaGRjcDJf c2hpbSkKKwkJaW50ZWxfaGRjcDJfaW5pdChoZGNwLCBoZGNwMl9zaGltKTsKKwogCXJldCA9IGRy bV9jb25uZWN0b3JfYXR0YWNoX2NvbnRlbnRfcHJvdGVjdGlvbl9wcm9wZXJ0eSgKIAkJCSZjb25u ZWN0b3ItPmJhc2UpOwogCWlmIChyZXQpCkBAIC03NTcsNyArODk3LDYgQEAgaW50IGludGVsX2hk Y3BfaW5pdChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCiAKIAloZGNwLT5oZGNw X3NoaW0gPSBoZGNwX3NoaW07CiAJbXV0ZXhfaW5pdCgmaGRjcC0+aGRjcF9tdXRleCk7Ci0JSU5J VF9ERUxBWUVEX1dPUksoJmhkY3AtPmhkY3BfY2hlY2tfd29yaywgaW50ZWxfaGRjcF9jaGVja193 b3JrKTsKIAlJTklUX1dPUksoJmhkY3AtPmhkY3BfcHJvcF93b3JrLCBpbnRlbF9oZGNwX3Byb3Bf d29yayk7CiAJSU5JVF9XT1JLKCZoZGNwLT5oZGNwX2VuYWJsZV93b3JrLCBpbnRlbF9oZGNwX2Vu YWJsZV93b3JrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRt aS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGY1ZDdiZmI0MzAw Ni4uMjM5ODZjMDJkZDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o ZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC0yMzQyLDcg KzIzNDIsNyBAQCB2b2lkIGludGVsX2hkbWlfaW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCiAKIAlpZiAoaXNfaGRjcF9zdXBwb3J0ZWQoZGV2 X3ByaXYsIHBvcnQpKSB7CiAJCWludCByZXQgPSBpbnRlbF9oZGNwX2luaXQoaW50ZWxfY29ubmVj dG9yLAotCQkJCQkgICZpbnRlbF9oZG1pX2hkY3Bfc2hpbSk7CisJCQkJCSAgJmludGVsX2hkbWlf aGRjcF9zaGltLCBOVUxMKTsKIAkJaWYgKHJldCkKIAkJCURSTV9ERUJVR19LTVMoIkhEQ1AgaW5p dCBmYWlsZWQsIHNraXBwaW5nLlxuIik7CiAJfQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=