From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v8 08/35] drm/i915: Implement HDCP2.2 repeater authentication Date: Thu, 6 Dec 2018 11:45:49 +0100 Message-ID: <20181206104549.GQ21184@phenom.ffwll.local> References: <1543315413-24302-1-git-send-email-ramalingam.c@intel.com> <1543315413-24302-9-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1543315413-24302-9-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: Ramalingam C Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, tomas.winkler@intel.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgMjcsIDIwMTggYXQgMDQ6MTM6MDZQTSArMDUzMCwgUmFtYWxpbmdhbSBDIHdy b3RlOgo+IEltcGxlbWVudHMgdGhlIEhEQ1AyLjIgcmVwZWF0ZXJzIGF1dGhlbnRpY2F0aW9uIHN0 ZXBzIHN1Y2ggYXMgdmVyaWZ5aW5nCj4gdGhlIGRvd25zdHJlYW0gdG9wb2xvZ3kgYW5kIHNlbmRp bmcgc3RyZWFtIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24uCj4gCj4gdjI6Cj4gICBSZWJhc2VkLgo+ IHYzOgo+ICAgTm8gQ2hhbmdlcy4KPiB2NDoKPiAgIC1FSU5WQUwgaXMgcmV0dXJuZWQgZm9yIHRv cG9sb2d5IGVycm9yIGFuZCByb2xsb3ZlciBzY2VuYXJpby4KPiAgIEVuZGlhbm5lc3MgY29udmVy c2lvbiBmdW5jIGZyb20gZHJtX2hkY3AuaCBpcyB1c2VkIFtVbWFdCj4gdjU6Cj4gICBSZWJhc2Vk IGFzIHBhcnQgb2YgcGF0Y2hlcyByZW9yZGVyaW5nLgo+ICAgRGVmaW5lZCB0aGUgbWVpIHNlcnZp Y2UgZnVuY3Rpb25zIFtEYW5pZWxdCj4gdjY6Cj4gICBSZWRlZmluZWQgdGhlIG1laSBzZXJ2aWNl IGZ1bmN0aW9ucyBhcyBwZXIgY29tcCByZWRlc2lnbi4KPiB2NzoKPiAgICVzL3VpbnR4eF90L3V4 eAo+ICAgQ2hlY2sgZm9yIGNvbXBfbWFzdGVyIGlzIHJlbW92ZWQuCj4gdjg6Cj4gICBBZGp1c3Qg dG8gdGhlIG5ldyBtZWkgaW50ZXJmYWNlLgo+ICAgc3R5bGUgaXNzdWUgZml4ZWQuCj4gCj4gU2ln bmVkLW9mZi1ieTogUmFtYWxpbmdhbSBDIDxyYW1hbGluZ2FtLmNAaW50ZWwuY29tPgo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMgfCAxMjUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KPiAgaW5jbHVkZS9kcm0vZHJtX2hkY3AuaCAgICAgICAg ICAgIHwgIDE1ICsrKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTM4IGluc2VydGlvbnMoKyksIDIg ZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2hkY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+IGluZGV4IDBkN2Zl YTljOWJiMS4uNjc5ZjNjMTY0NTgyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2hkY3AuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+ IEBAIC0xMDY5LDcgKzEwNjksNyBAQCBzdGF0aWMgaW50IGhkY3AyX3ByZXBhcmVfc2tleShzdHJ1 Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ IC1zdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaW50Cj4gK3N0YXRpYyBpbnQKPiAgaGRj cDJfdmVyaWZ5X3JlcF90b3BvbG9neV9wcmVwYXJlX2FjayhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IsCj4gIAkJCQkgICAgICBzdHJ1Y3QgaGRjcDJfcmVwX3NlbmRfcmVjZWl2ZXJp ZF9saXN0Cj4gIAkJCQkJCQkJKnJlcF90b3BvbG9neSwKPiBAQCAtMTA5OSw3ICsxMDk5LDcgQEAg aGRjcDJfdmVyaWZ5X3JlcF90b3BvbG9neV9wcmVwYXJlX2FjayhzdHJ1Y3QgaW50ZWxfY29ubmVj dG9yICpjb25uZWN0b3IsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgX19hdHRy aWJ1dGVfXygodW51c2VkKSkgaW50Cj4gK3N0YXRpYyBpbnQKPiAgaGRjcDJfdmVyaWZ5X21wcmlt ZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAkJICAgIHN0cnVjdCBoZGNw Ml9yZXBfc3RyZWFtX3JlYWR5ICpzdHJlYW1fcmVhZHkpCj4gIHsKPiBAQCAtMTMxNSw2ICsxMzE1 LDEyMSBAQCBzdGF0aWMgaW50IGhkY3AyX3Nlc3Npb25fa2V5X2V4Y2hhbmdlKHN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMK PiAraW50IGhkY3AyX3Byb3BhZ2F0ZV9zdHJlYW1fbWFuYWdlbWVudF9pbmZvKHN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4gKwlzdHJ1 Y3QgaW50ZWxfaGRjcCAqaGRjcCA9ICZjb25uZWN0b3ItPmhkY3A7Cj4gKwl1bmlvbiB7Cj4gKwkJ c3RydWN0IGhkY3AyX3JlcF9zdHJlYW1fbWFuYWdlIHN0cmVhbV9tYW5hZ2U7Cj4gKwkJc3RydWN0 IGhkY3AyX3JlcF9zdHJlYW1fcmVhZHkgc3RyZWFtX3JlYWR5Owo+ICsJfSBtc2dzOwo+ICsJY29u c3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqc2hpbSA9IGhkY3AtPnNoaW07Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCS8qIFByZXBhcmUgUmVwZWF0ZXJBdXRoX1N0cmVhbV9NYW5hZ2UgbXNnICovCj4g Kwltc2dzLnN0cmVhbV9tYW5hZ2UubXNnX2lkID0gSERDUF8yXzJfUkVQX1NUUkVBTV9NQU5BR0U7 Cj4gKwlyZXZlcnNlX2VuZGlhbm5lc3MobXNncy5zdHJlYW1fbWFuYWdlLnNlcV9udW1fbSwgSERD UF8yXzJfU0VRX05VTV9MRU4sCj4gKwkJCSAgICh1OCAqKSZoZGNwLT5zZXFfbnVtX20pOwo+ICsK PiArCS8qIEsgbm8gb2Ygc3RyZWFtcyBpcyBmaXhlZCBhcyAxLiBTdG9yZWQgYXMgYmlnLWVuZGlh bi4gKi8KPiArCW1zZ3Muc3RyZWFtX21hbmFnZS5rID0gX19zd2FiMTYoMSk7Cj4gKwo+ICsJLyog Rm9yIEhETUkgdGhpcyBpcyBmb3JjZWQgdG8gYmUgMHgwLiBGb3IgRFAgU1NUIGFsc28gdGhpcyBp cyAweDAuICovCj4gKwltc2dzLnN0cmVhbV9tYW5hZ2Uuc3RyZWFtc1swXS5zdHJlYW1faWQgPSAw Owo+ICsJbXNncy5zdHJlYW1fbWFuYWdlLnN0cmVhbXNbMF0uc3RyZWFtX3R5cGUgPSBoZGNwLT5j b250ZW50X3R5cGU7Cj4gKwo+ICsJLyogU2VuZCBpdCB0byBSZXBlYXRlciAqLwo+ICsJcmV0ID0g c2hpbS0+d3JpdGVfMl8yX21zZyhpbnRlbF9kaWdfcG9ydCwgJm1zZ3Muc3RyZWFtX21hbmFnZSwK PiArCQkJCSAgc2l6ZW9mKG1zZ3Muc3RyZWFtX21hbmFnZSkpOwo+ICsJaWYgKHJldCA8IDApCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBzaGltLT5yZWFkXzJfMl9tc2coaW50ZWxfZGln X3BvcnQsIEhEQ1BfMl8yX1JFUF9TVFJFQU1fUkVBRFksCj4gKwkJCQkgJm1zZ3Muc3RyZWFtX3Jl YWR5LCBzaXplb2YobXNncy5zdHJlYW1fcmVhZHkpKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJaGRjcC0+bWVpX2RhdGEuc2VxX251bV9tID0gaGRjcC0+c2VxX251 bV9tOwo+ICsJaGRjcC0+bWVpX2RhdGEuc3RyZWFtc1swXS5zdHJlYW1fdHlwZSA9IGhkY3AtPmNv bnRlbnRfdHlwZTsKPiArCj4gKwlyZXQgPSBoZGNwMl92ZXJpZnlfbXByaW1lKGNvbm5lY3Rvciwg Jm1zZ3Muc3RyZWFtX3JlYWR5KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJaGRjcC0+c2VxX251bV9tKys7Cj4gKwo+ICsJaWYgKGhkY3AtPnNlcV9udW1fbSA+IEhE Q1BfMl8yX1NFUV9OVU1fTUFYKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygic2VxX251bV9tIHJvbGwg b3Zlci5cbiIpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljCj4gK2ludCBoZGNwMl9hdXRoZW50aWNhdGVfcmVwZWF0ZXJfdG9wb2xvZ3ko c3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGNvbm5fdG9fZGlnX3BvcnQoY29ubmVjdG9y KTsKPiArCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0gJmNvbm5lY3Rvci0+aGRjcDsKPiArCXVu aW9uIHsKPiArCQlzdHJ1Y3QgaGRjcDJfcmVwX3NlbmRfcmVjZWl2ZXJpZF9saXN0IHJlY3ZpZF9s aXN0Owo+ICsJCXN0cnVjdCBoZGNwMl9yZXBfc2VuZF9hY2sgcmVwX2FjazsKPiArCX0gbXNnczsK PiArCWNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0gPSBoZGNwLT5zaGltOwo+ICsJ dTggKnJ4X2luZm87Cj4gKwl1MzIgc2VxX251bV92Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBzaGltLT5yZWFkXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsIEhEQ1BfMl8yX1JFUF9TRU5EX1JF Q1ZJRF9MSVNULAo+ICsJCQkJICZtc2dzLnJlY3ZpZF9saXN0LCBzaXplb2YobXNncy5yZWN2aWRf bGlzdCkpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyeF9pbmZv ID0gbXNncy5yZWN2aWRfbGlzdC5yeF9pbmZvOwo+ICsKPiArCWlmIChIRENQXzJfMl9NQVhfQ0FT Q0FERV9FWENFRURFRChyeF9pbmZvWzFdKSB8fAo+ICsJICAgIEhEQ1BfMl8yX01BWF9ERVZTX0VY Q0VFREVEKHJ4X2luZm9bMV0pKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiVG9wb2xvZ3kgTWF4IFNp emUgRXhjZWVkZWRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIENv bnZlcnRpbmcgYW5kIFN0b3JpbmcgdGhlIHNlcV9udW1fdiB0byBsb2NhbCB2YXJpYWJsZSBhcyBE V09SRCAqLwo+ICsJcmV2ZXJzZV9lbmRpYW5uZXNzKCh1OCAqKSZzZXFfbnVtX3YsIEhEQ1BfMl8y X1NFUV9OVU1fTEVOLAo+ICsJCQkgICBtc2dzLnJlY3ZpZF9saXN0LnNlcV9udW1fdik7Cj4gKwo+ ICsJaWYgKHNlcV9udW1fdiA8IGhkY3AtPnNlcV9udW1fdikgewo+ICsJCS8qIFJvbGwgb3ZlciBv ZiB0aGUgc2VxX251bV92IGZyb20gcmVwZWF0ZXIuIFJlYXV0aGVudGljYXRlLiAqLwo+ICsJCURS TV9ERUJVR19LTVMoIlNlcV9udW1fdiByb2xsIG92ZXIuXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlyZXQgPSBoZGNwMl92ZXJpZnlfcmVwX3RvcG9sb2d5X3ByZXBhcmVf YWNrKGNvbm5lY3RvciwKPiArCQkJCQkJICAgICZtc2dzLnJlY3ZpZF9saXN0LAo+ICsJCQkJCQkg ICAgJm1zZ3MucmVwX2Fjayk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCWhkY3AtPnNlcV9udW1fdiA9IHNlcV9udW1fdjsKPiArCXJldCA9IHNoaW0tPndyaXRlXzJf Ml9tc2coaW50ZWxfZGlnX3BvcnQsICZtc2dzLnJlcF9hY2ssCj4gKwkJCQkgIHNpemVvZihtc2dz LnJlcF9hY2spKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaGRjcDJfYXV0aGVudGljYXRlX3JlcGVhdGVy KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJaW50IHJldDsKPiAr Cj4gKwlyZXQgPSBoZGNwMl9hdXRoZW50aWNhdGVfcmVwZWF0ZXJfdG9wb2xvZ3koY29ubmVjdG9y KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIGhkY3Ay X3Byb3BhZ2F0ZV9zdHJlYW1fbWFuYWdlbWVudF9pbmZvKGNvbm5lY3Rvcik7Cj4gK30KPiArCj4g IHN0YXRpYyBpbnQgaGRjcDJfYXV0aGVudGljYXRlX3Npbmsoc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9k aWdfcG9ydCA9IGNvbm5fdG9fZGlnX3BvcnQoY29ubmVjdG9yKTsKPiBAQCAtMTM1Niw2ICsxNDcx LDEyIEBAIHN0YXRpYyBpbnQgaGRjcDJfYXV0aGVudGljYXRlX3Npbmsoc3RydWN0IGludGVsX2Nv bm5lY3RvciAqY29ubmVjdG9yKQo+ICAJCQkJCSAgICAgICBzaXplb2Yoc3RyZWFtX3R5cGVfbXNn KSk7Cj4gIAkJaWYgKHJldCA8IDApCj4gIAkJCXJldHVybiByZXQ7Cj4gKwl9IGVsc2UgaWYgKGhk Y3AtPmlzX3JlcGVhdGVyKSB7Cj4gKwkJcmV0ID0gaGRjcDJfYXV0aGVudGljYXRlX3JlcGVhdGVy KGNvbm5lY3Rvcik7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJRFJNX0RFQlVHX0tNUygiUmVw ZWF0ZXIgQXV0aCBGYWlsZWQuIEVycjogJWRcbiIsIHJldCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4g KwkJfQo+ICAJfQo+ICAKPiAgCWhkY3AtPm1laV9kYXRhLnN0cmVhbXNbMF0uc3RyZWFtX3R5cGUg PSBoZGNwLT5jb250ZW50X3R5cGU7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9oZGNw LmggYi9pbmNsdWRlL2RybS9kcm1faGRjcC5oCj4gaW5kZXggYTZkZTA5YzVlNDdmLi4zZTQ1YTc2 MThhYjMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2hkY3AuaAo+ICsrKyBiL2luY2x1 ZGUvZHJtL2RybV9oZGNwLmgKPiBAQCAtMjUwLDQgKzI1MCwxOSBAQCBzdHJ1Y3QgaGRjcDJfZHBf ZXJyYXRhX3N0cmVhbV90eXBlIHsKPiAgI2RlZmluZSBIRENQXzJfMl9IRE1JX1JYU1RBVFVTX1JF QURZKHgpCQkoKHgpICYgQklUKDIpKQo+ICAjZGVmaW5lIEhEQ1BfMl8yX0hETUlfUlhTVEFUVVNf UkVBVVRIX1JFUSh4KQkoKHgpICYgQklUKDMpKQo+ICAKPiArLyoKPiArICogTGlicmFyeSBmdW5j dGlvbnMgZm9yIGVuZGlhbm5lc3MgYXJlIGFsaWduZWQgZm9yIDE2LzMyLzY0IGJpdHMuCj4gKyAq IEJ1dCBoZGNwIHNlcXVlbmNlIG51bWJlcnMgYXJlIDI0Yml0cy4gU28gZm9yIHRoZWlyIEJ5dGUg c3dhcHBpbmcsCj4gKyAqIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBkZXZlbG9wZWQuCj4gKyAq Lwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgcmV2ZXJzZV9lbmRpYW5uZXNzKHU4ICpkZXN0LCBzaXpl X3Qgc3osIHU4ICpzcmMpCgpUaGlzIGZlZWxzIGEgYml0IGZha2UtZ2VuZXJpYyBhbmQgZG9lc24n dCBmaXQgdGhhdCB3ZWxsIGludG8gd2hhdCB5b3Ugd2FudAppdCB0byBkbyBpbiB0aGUgY29kZSBh Y3R1YWxseS4gV2hhdCBhYm91dDoKCnUzMiBkcm1faGRjcDJfc2VxX251bV90b191MzIodTggc2Vx X251bVtIRENQXzJfMl9TRVFfTlVNX0xFTl0pCnsKCXJldHVybiBzZXFfbnVtWzJdIHwgc2VxX251 bVsxXSA8PCA4IHwgc2VxX251bVswXSA8PCAxNjsKfQoKKEkgZGlkbid0IGNoZWNrIHRoZSBtYXRo KS4KCkkgdGhpbmsgdGhpcyB3b3VsZCBib3RoIG1ha2UgdGhlIGNvZGUgbW9yZSBjbGVhcmVyIGFu ZCBhdm9pZCB0aGUgcHJvYmxlbQpvZiAic2hvdWxkbid0IHdlIG1ha2Ugc3VyZSB0aGlzIHdvcmtz IGZvciBldmVyeXRoaW5nIGFuZCBwdXQgaXQgaW50bwpsaW51eC9zdHJpbmcuaD8iCgpBZ2FpbiBJ J2xsIGNoZWNrIHRoZSBhY3R1YWwgaGRjcDIgZmxvdyBsYXRlciBvbi4KCkluIGdlbmVyYWwgSSdt IGtpbmRhIG5vdCBoYXBweSB3aXRoIHRoZSBzaGltIG1pZGxheWVyIGRlc2lnbiwgYnV0IEkgd2Fz bid0CmhhcHB5IHdpdGggdGhhdCB3aXRoIGhkY3AxIGVpdGhlciwgYW5kIGhkY3AyIGlzIGp1c3Qg YW4gZXh0ZW5zaW9uLCBhbmQgSQpkb24ndCByZWFsbHkgaGF2ZSBhIGJldHRlciBpZGVhIGVpdGhl ciBzbyBzZWVtcyBhbGwgZ29vZCB0byBtZS4KLURhbmllbAoKPiArewo+ICsJdTMyIGluZGV4Owo+ ICsKPiArCWlmICghc3ogfHwgc3ogPiBzaXplb2YodTMyKSkKPiArCQlyZXR1cm47Cj4gKwlmb3Ig KGluZGV4ID0gMDsgaW5kZXggPCBzejsgaW5kZXgrKykKPiArCQlkZXN0W3N6IC0gaW5kZXggLSAx XSA9IHNyY1tpbmRleF07Cj4gK30KPiArCj4gICNlbmRpZgo+IC0tIAo+IDIuNy40Cj4gCgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==