From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 11/12] drm/i915: Extract DIMM info on cnl+ Date: Wed, 6 Mar 2019 21:25:09 +0200 Message-ID: <20190306192509.GO3888@intel.com> References: <20190225202907.731-1-ville.syrjala@linux.intel.com> <20190225202907.731-12-ville.syrjala@linux.intel.com> <87woldb8jq.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id E5DAA6E19C for ; Wed, 6 Mar 2019 19:25:12 +0000 (UTC) Content-Disposition: inline In-Reply-To: <87woldb8jq.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBNYXIgMDUsIDIwMTkgYXQgMDY6MTY6NTdQTSArMDIwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gT24gTW9uLCAyNSBGZWIgMjAxOSwgVmlsbGUgU3lyamFsYSA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+IHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+Cj4gPiBXZSdsbCBuZWVkIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBtZW1vcnkgY29uZmlndXJhdGlvbiBvbiBjbmwrIHRvby4KPiA+IEV4dGVuZCB0aGUg Y29kZSB0byBwYXJzZSB0aGUgc2xpZ2h0bHkgY2hhbmdlZCByZWdpc3RlciBsYXlvdXQuCj4gPgo+ ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgfCA2 OSArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oIHwgMTcgKysrKysrKy0KPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDY2IGlu c2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu Ywo+ID4gaW5kZXggZTNhYWZlMmJmM2I3Li45NTM2MTgxNGI1MzEgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCj4gPiBAQCAtMTA5NSwxNyArMTA5NSw0MyBAQCBzdGF0aWMgaW50IHNr bF9nZXRfZGltbV9yYW5rcyh1MTYgdmFsKQo+ID4gIAlpZiAoc2tsX2dldF9kaW1tX3NpemUodmFs KSA9PSAwKQo+ID4gIAkJcmV0dXJuIDA7Cj4gPiAgCj4gPiAtCXN3aXRjaCAodmFsICYgU0tMX0RS QU1fUkFOS19NQVNLKSB7Cj4gPiAtCWNhc2UgU0tMX0RSQU1fUkFOS19TSU5HTEU6Cj4gPiAtCWNh c2UgU0tMX0RSQU1fUkFOS19EVUFMOgo+ID4gLQkJdmFsID0gKHZhbCAmIFNLTF9EUkFNX1JBTktf TUFTSykgPj4gU0tMX0RSQU1fUkFOS19TSElGVDsKPiA+IC0JCXJldHVybiB2YWwgKyAxOwo+ID4g Kwl2YWwgPSAodmFsICYgU0tMX0RSQU1fUkFOS19NQVNLKSA+PiBTS0xfRFJBTV9SQU5LX1NISUZU Owo+ID4gKwo+ID4gKwlyZXR1cm4gdmFsICsgMTsKPiAKPiBUaGlzIHBhcnQgaXMgYSBiaXQgb3V0 IG9mIHBsYWNlLiBSZWJhc2UgZmFpbD8KCkF5ZS4gTW92ZWQgdG8gcGF0Y2ggMDIgd2hlcmUgaXQg YmVsb25ncy4KCj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgY25sX2dldF9kaW1tX3Np emUodTE2IHZhbCkKPiA+ICt7Cj4gPiArCXJldHVybiAodmFsICYgQ05MX0RSQU1fU0laRV9NQVNL KSAvIDI7Cj4gCj4gTXVsdGlwbGVzIG9mIDAuNSBHQi4uLiB3aGF0IGFuIG9kZCB1bml0LiBXaGF0 IGlmIHRoZXJlJ3MgYW4gb2RkIHZhbHVlPwoKVGhlIHdvcnN0IHRoaW5nIHRoYXQgY291bGQgaGFw cGVuIGlzIHRoYXQgdGhlIDE2IEdiIGRldGVjdGlvbgpnaXZlcyB1cyB0aGUgd3JvbmcgYW5zd2Vy LiBUaGUgb3RoZXIgdGhpbmcgaXMgdGhhdCB3ZSdkIHByaW50Cm91dCB0aGUgd3Jvbmcgc2l6ZS4K CkknbSBub3Qgc3VyZSBpZiB0aGVyZSBpcyBhbnkgY2hhbmNlIG9mIGhhdmluZyBzdWNoIG9kZGx5 IHNpemVkCkRSQU0gY2hpcHMgb24gYW55IG1vZGVybiBESU1NIHRoYXQgd2UnZCBoaXQgdGhpcy4g SSBkaWRuJ3QKcmVhbGx5IHdhbnQgdG8gY2hhbmdlIGV2ZXJ5dGhpbmcganVzdCBmb3IgdGhpcyBh dCB0aGlzIHRpbWUuCldlIGNhbiBhbHdheXMgcmV2aXNpdCBpdCBsYXRlciBpZiBuZWNlc2FyeS4K Cj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgY25sX2dldF9kaW1tX3dpZHRoKHUxNiB2 YWwpCj4gPiArewo+ID4gKwlpZiAoY25sX2dldF9kaW1tX3NpemUodmFsKSA9PSAwKQo+ID4gKwkJ cmV0dXJuIDA7Cj4gPiArCj4gPiArCXN3aXRjaCAodmFsICYgQ05MX0RSQU1fV0lEVEhfTUFTSykg ewo+ID4gKwljYXNlIENOTF9EUkFNX1dJRFRIX1g4Ogo+ID4gKwljYXNlIENOTF9EUkFNX1dJRFRI X1gxNjoKPiA+ICsJY2FzZSBDTkxfRFJBTV9XSURUSF9YMzI6Cj4gPiArCQl2YWwgPSAodmFsICYg Q05MX0RSQU1fV0lEVEhfTUFTSykgPj4gQ05MX0RSQU1fV0lEVEhfU0hJRlQ7Cj4gPiArCQlyZXR1 cm4gOCA8PCB2YWw7Cj4gPiAgCWRlZmF1bHQ6Cj4gPiAgCQlNSVNTSU5HX0NBU0UodmFsKTsKPiA+ ICAJCXJldHVybiAwOwo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyBpbnQgY25sX2dl dF9kaW1tX3JhbmtzKHUxNiB2YWwpCj4gPiArewo+ID4gKwlpZiAoY25sX2dldF9kaW1tX3NpemUo dmFsKSA9PSAwKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXZhbCA9ICh2YWwgJiBDTkxf RFJBTV9SQU5LX01BU0spID4+IENOTF9EUkFNX1JBTktfU0hJRlQ7Cj4gPiArCj4gPiArCXJldHVy biB2YWwgKyAxOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgYm9vbAo+ID4gIHNrbF9pc18xNmdi X2RpbW0oY29uc3Qgc3RydWN0IGRyYW1fZGltbV9pbmZvICpkaW1tKQo+ID4gIHsKPiA+IEBAIC0x MTEzLDEyICsxMTM5LDE5IEBAIHNrbF9pc18xNmdiX2RpbW0oY29uc3Qgc3RydWN0IGRyYW1fZGlt bV9pbmZvICpkaW1tKQo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZAo+ID4gLXNrbF9kcmFt X2dldF9kaW1tX2luZm8oc3RydWN0IGRyYW1fZGltbV9pbmZvICpkaW1tLAo+ID4gK3NrbF9kcmFt X2dldF9kaW1tX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJ ICAgICAgIHN0cnVjdCBkcmFtX2RpbW1faW5mbyAqZGltbSwKPiA+ICAJCSAgICAgICBpbnQgY2hh bm5lbCwgY2hhciBkaW1tX25hbWUsIHUxNiB2YWwpCj4gPiAgewo+ID4gLQlkaW1tLT5zaXplID0g c2tsX2dldF9kaW1tX3NpemUodmFsKTsKPiA+IC0JZGltbS0+d2lkdGggPSBza2xfZ2V0X2RpbW1f d2lkdGgodmFsKTsKPiA+IC0JZGltbS0+cmFua3MgPSBza2xfZ2V0X2RpbW1fcmFua3ModmFsKTsK PiA+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsKPiA+ICsJCWRpbW0tPnNpemUg PSBjbmxfZ2V0X2RpbW1fc2l6ZSh2YWwpOwo+ID4gKwkJZGltbS0+d2lkdGggPSBjbmxfZ2V0X2Rp bW1fd2lkdGgodmFsKTsKPiA+ICsJCWRpbW0tPnJhbmtzID0gY25sX2dldF9kaW1tX3JhbmtzKHZh bCk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlkaW1tLT5zaXplID0gc2tsX2dldF9kaW1tX3NpemUo dmFsKTsKPiA+ICsJCWRpbW0tPndpZHRoID0gc2tsX2dldF9kaW1tX3dpZHRoKHZhbCk7Cj4gPiAr CQlkaW1tLT5yYW5rcyA9IHNrbF9nZXRfZGltbV9yYW5rcyh2YWwpOwo+ID4gKwl9Cj4gPiAgCj4g PiAgCURSTV9ERUJVR19LTVMoIkNIJWQgRElNTSAlYyBzaXplOiAlZCBHQiwgd2lkdGg6IFglZCwg cmFua3M6ICVkLCAxNkdiIERJTU1zOiAlc1xuIiwKPiA+ICAJCSAgICAgIGNoYW5uZWwsIGRpbW1f bmFtZSwgZGltbS0+c2l6ZSwgZGltbS0+d2lkdGgsIGRpbW0tPnJhbmtzLAo+ID4gQEAgLTExMjYs MTEgKzExNTksMTQgQEAgc2tsX2RyYW1fZ2V0X2RpbW1faW5mbyhzdHJ1Y3QgZHJhbV9kaW1tX2lu Zm8gKmRpbW0sCj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyBpbnQKPiA+IC1za2xfZHJhbV9nZXRf Y2hhbm5lbF9pbmZvKHN0cnVjdCBkcmFtX2NoYW5uZWxfaW5mbyAqY2gsCj4gPiArc2tsX2RyYW1f Z2V0X2NoYW5uZWxfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAr CQkJICBzdHJ1Y3QgZHJhbV9jaGFubmVsX2luZm8gKmNoLAo+ID4gIAkJCSAgaW50IGNoYW5uZWws IHUzMiB2YWwpCj4gPiAgewo+ID4gLQlza2xfZHJhbV9nZXRfZGltbV9pbmZvKCZjaC0+ZGltbV9s LCBjaGFubmVsLCAnTCcsIHZhbCAmIDB4ZmZmZik7Cj4gPiAtCXNrbF9kcmFtX2dldF9kaW1tX2lu Zm8oJmNoLT5kaW1tX3MsIGNoYW5uZWwsICdTJywgdmFsID4+IDE2KTsKPiA+ICsJc2tsX2RyYW1f Z2V0X2RpbW1faW5mbyhkZXZfcHJpdiwgJmNoLT5kaW1tX2wsCj4gPiArCQkJICAgICAgIGNoYW5u ZWwsICdMJywgdmFsICYgMHhmZmZmKTsKPiA+ICsJc2tsX2RyYW1fZ2V0X2RpbW1faW5mbyhkZXZf cHJpdiwgJmNoLT5kaW1tX3MsCj4gPiArCQkJICAgICAgIGNoYW5uZWwsICdTJywgdmFsID4+IDE2 KTsKPiA+ICAKPiA+ICAJaWYgKGNoLT5kaW1tX2wuc2l6ZSA9PSAwICYmIGNoLT5kaW1tX3Muc2l6 ZSA9PSAwKSB7Cj4gPiAgCQlEUk1fREVCVUdfS01TKCJDSCVkIG5vdCBwb3B1bGF0ZWRcbiIsIGNo YW5uZWwpOwo+ID4gQEAgLTExNzIsMTIgKzEyMDgsMTIgQEAgc2tsX2RyYW1fZ2V0X2NoYW5uZWxz X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIAlpbnQgcmV0Owo+ ID4gIAo+ID4gIAl2YWwgPSBJOTE1X1JFQUQoU0tMX01BRF9ESU1NX0NIMF8wXzBfMF9NQ0hCQVJf TUNNQUlOKTsKPiA+IC0JcmV0ID0gc2tsX2RyYW1fZ2V0X2NoYW5uZWxfaW5mbygmY2gwLCAwLCB2 YWwpOwo+ID4gKwlyZXQgPSBza2xfZHJhbV9nZXRfY2hhbm5lbF9pbmZvKGRldl9wcml2LCAmY2gw LCAwLCB2YWwpOwo+ID4gIAlpZiAocmV0ID09IDApCj4gPiAgCQlkcmFtX2luZm8tPm51bV9jaGFu bmVscysrOwo+ID4gIAo+ID4gIAl2YWwgPSBJOTE1X1JFQUQoU0tMX01BRF9ESU1NX0NIMV8wXzBf MF9NQ0hCQVJfTUNNQUlOKTsKPiA+IC0JcmV0ID0gc2tsX2RyYW1fZ2V0X2NoYW5uZWxfaW5mbygm Y2gxLCAxLCB2YWwpOwo+ID4gKwlyZXQgPSBza2xfZHJhbV9nZXRfY2hhbm5lbF9pbmZvKGRldl9w cml2LCAmY2gxLCAxLCB2YWwpOwo+ID4gIAlpZiAocmV0ID09IDApCj4gPiAgCQlkcmFtX2luZm8t Pm51bV9jaGFubmVscysrOwo+ID4gIAo+ID4gQEAgLTEzNjksMTMgKzE0MDUsMTAgQEAgaW50ZWxf Z2V0X2RyYW1faW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gPiAgCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgOSkKPiA+ICAJCXJldHVybjsKPiA+ICAKPiA+IC0JLyog TmVlZCB0byBjYWxjdWxhdGUgYmFuZHdpZHRoIG9ubHkgZm9yIEdlbjkgKi8KPiA+ICAJaWYgKElT X0dFTjlfTFAoZGV2X3ByaXYpKQo+ID4gIAkJcmV0ID0gYnh0X2dldF9kcmFtX2luZm8oZGV2X3By aXYpOwo+ID4gLQllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDkpKQo+ID4gLQkJcmV0ID0gc2ts X2dldF9kcmFtX2luZm8oZGV2X3ByaXYpOwo+ID4gIAllbHNlCj4gPiAtCQlyZXQgPSBza2xfZHJh bV9nZXRfY2hhbm5lbHNfaW5mbyhkZXZfcHJpdik7Cj4gPiArCQlyZXQgPSBza2xfZ2V0X2RyYW1f aW5mbyhkZXZfcHJpdik7Cj4gCj4gVGhlIHBhcnQgdGhhdCdzIGhpZGRlbiBoZXJlIGlzIHRoZSB1 c2Ugb2YgdGhlIGNvbW1vbiBwYXJ0cyBpbgo+IHNrbF9nZXRfZHJhbV9pbmZvKCkgYW5kIGluIHBh cnRpY3VsYXIKPiBTS0xfTUVNT1JZX0ZSRVFfTVVMVElQTElFUl9IWi4gU3BlYyBzYXlzICJUaGUg dmFsdWUgaXMgZ2l2ZW4gaW4gdW5pdHMgb2YKPiAxMzMuMzMgTUh6Ii4gQnV0IGl0IHNheXMgdGhl IHNhbWUgZm9yIFNLTCB0b28uIFdoYXQgYW0gSSBtaXNzaW5nPwoKVGhlIHdob2xlIERSQU0gY2xv Y2tpbmcgaXMgYSBiaXQgb2YgYSBteXN0ZXJ5IHRvIG1lLiBTbyBmYXIgSSBkaWRuJ3QKZmluZCBh bnkgZ29vZCBkb2NzIG9uIHRoZSBzdWJqZWN0LiBUaGUgcmVnaXN0ZXJzIHRhbGsgYWJvdXQgUUNM SyAod2hpY2gKaXMgdGhlIGRhdGEgY2xvY2sgSUlVQykgYnV0IGJ1bmNoIG9mIHN0dWZmIGlzIGlu dGVyZXN0ZWQgaW4gdGhlIERDTEsKKHRoZSBjb21tYW5kIGNsb2NrKSB0aG91Z2guIEkgZ3Vlc3Mg dGhlcmUncyAxOjEgcmVsYXRpb25zaGlwLCBhbmQgSQpzdXBwb3NlIHRoZSBmYWN0b3Igb2YgdHdv IGhlcmUgaXMgbWF5YmUganVzdCBkdWUgdG8gdGhlIEREUi4KCj4gCj4gVGVudGF0aXZlIFJldmll d2VkLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgo+IAo+ID4gIAlpZiAo cmV0KQo+ID4gIAkJcmV0dXJuOwo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gPiBp bmRleCA3MzBiYjE5MTdmZDEuLmIzNWIwMjIwNzY0ZiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKPiA+IEBAIC05ODc1LDggKzk4NzUsMjEgQEAgZW51bSBza2xfcG93ZXJfZ2F0ZSB7 Cj4gPiAgI2RlZmluZSAgU0tMX0RSQU1fV0lEVEhfWDMyCQkJKDB4MiA8PCA4KQo+ID4gICNkZWZp bmUgIFNLTF9EUkFNX1JBTktfTUFTSwkJCSgweDEgPDwgMTApCj4gPiAgI2RlZmluZSAgU0tMX0RS QU1fUkFOS19TSElGVAkJCTEwCj4gPiAtI2RlZmluZSAgU0tMX0RSQU1fUkFOS19TSU5HTEUJCQko MHgwIDw8IDEwKQo+ID4gLSNkZWZpbmUgIFNLTF9EUkFNX1JBTktfRFVBTAkJCSgweDEgPDwgMTAp Cj4gPiArI2RlZmluZSAgU0tMX0RSQU1fUkFOS18xCQkJKDB4MCA8PCAxMCkKPiA+ICsjZGVmaW5l ICBTS0xfRFJBTV9SQU5LXzIJCQkoMHgxIDw8IDEwKQo+ID4gKyNkZWZpbmUgIFNLTF9EUkFNX1JB TktfTUFTSwkJCSgweDEgPDwgMTApCj4gPiArI2RlZmluZSAgQ05MX0RSQU1fU0laRV9NQVNLCQkJ MHg3Rgo+ID4gKyNkZWZpbmUgIENOTF9EUkFNX1dJRFRIX01BU0sJCQkoMHgzIDw8IDcpCj4gPiAr I2RlZmluZSAgQ05MX0RSQU1fV0lEVEhfU0hJRlQJCQk3Cj4gPiArI2RlZmluZSAgQ05MX0RSQU1f V0lEVEhfWDgJCQkoMHgwIDw8IDcpCj4gPiArI2RlZmluZSAgQ05MX0RSQU1fV0lEVEhfWDE2CQkJ KDB4MSA8PCA3KQo+ID4gKyNkZWZpbmUgIENOTF9EUkFNX1dJRFRIX1gzMgkJCSgweDIgPDwgNykK PiA+ICsjZGVmaW5lICBDTkxfRFJBTV9SQU5LX01BU0sJCQkoMHgzIDw8IDkpCj4gPiArI2RlZmlu ZSAgQ05MX0RSQU1fUkFOS19TSElGVAkJCTkKPiA+ICsjZGVmaW5lICBDTkxfRFJBTV9SQU5LXzEJ CQkoMHgwIDw8IDkpCj4gPiArI2RlZmluZSAgQ05MX0RSQU1fUkFOS18yCQkJKDB4MSA8PCA5KQo+ ID4gKyNkZWZpbmUgIENOTF9EUkFNX1JBTktfMwkJCSgweDIgPDwgOSkKPiA+ICsjZGVmaW5lICBD TkxfRFJBTV9SQU5LXzQJCQkoMHgzIDw8IDkpCj4gPiAgCj4gPiAgLyogUGxlYXNlIHNlZSBoc3df cmVhZF9kY29tcCgpIGFuZCBoc3dfd3JpdGVfZGNvbXAoKSBiZWZvcmUgdXNpbmcgdGhpcyByZWdp c3RlciwKPiA+ICAgKiBzaW5jZSBvbiBIU1cgd2UgY2FuJ3Qgd3JpdGUgdG8gaXQgdXNpbmcgSTkx NV9XUklURS4gKi8KPiAKPiAtLSAKPiBKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgR3Jh cGhpY3MgQ2VudGVyCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==