From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/9] drm: Add variable refresh rate properties to DRM connector Date: Tue, 11 Sep 2018 19:31:19 +0300 Message-ID: <20180911163119.GO5565@intel.com> References: <20180911161333.5334-1-nicholas.kazlauskas@amd.com> <20180911161333.5334-2-nicholas.kazlauskas@amd.com> <20180911162243.GN5565@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: <20180911162243.GN5565-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Nicholas Kazlauskas Cc: Aric.Cyr-5C7GfCeVMHo@public.gmane.org, nicolai.haehnle-5C7GfCeVMHo@public.gmane.org, michel-otUistvHUpPR7s880joybQ@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Christian.Koenig-5C7GfCeVMHo@public.gmane.org, manasi.d.navare-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, daniel-/w4YWyX8dFk@public.gmane.org, Alexander.Deucher-5C7GfCeVMHo@public.gmane.org, harry.wentland-5C7GfCeVMHo@public.gmane.org, Marek.Olsak-5C7GfCeVMHo@public.gmane.org T24gVHVlLCBTZXAgMTEsIDIwMTggYXQgMDc6MjI6NDNQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFR1ZSwgU2VwIDExLCAyMDE4IGF0IDEyOjEzOjI1UE0gLTA0MDAsIE5pY2hv bGFzIEthemxhdXNrYXMgd3JvdGU6Cj4gPiBNb2Rlcm4gbW9uaXRvciBoYXJkd2FyZSBpcyBjYXBh YmxlIG9mIHN1cHBvcnRpbmcgdmFyaWFibGUgcmVmcmVzaCByYXRlcwo+ID4gYW5kIGFkYXB0aXZl IHN5bmMgdGVjaG5vbG9naWVzLiBUaGUgcHJvcGVydGllcyBmb3IgcXVlcnlpbmcgYW5kCj4gPiBj b250cm9sbGluZyB0aGVzZSBmZWF0dXJlcyBzaG91bGQgYmUgZXhwb3NlZCBvbiB0aGUgRFJNIGNv bm5lY3Rvci4KPiA+IAo+ID4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgcHJvcGVydGll cyBmb3IgdmFyaWFibGUgcmVmcmVzaCByYXRlCj4gPiBzdXBwb3J0Ogo+ID4gCj4gPiAtIHZhcmlh YmxlX3JlZnJlc2hfY2FwYWJsZQo+ID4gLSB2YXJpYWJsZV9yZWZyZXNoX2VuYWJsZWQKPiA+IAo+ ID4gVGhlc2UgYXJlIG9wdGlvbmFsIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBE Uk0gY29ubmVjdG9yCj4gPiBkeW5hbWljYWxseSBieSB1c2luZyBkcm1fY29ubmVjdG9yX2F0dGFj aF92YXJpYWJsZV9yZWZyZXNoX3Byb3BlcnRpZXMuCj4gPiAKPiA+IERSTSBkcml2ZXJzIHNob3Vs ZCBzZXQgdmFyaWFibGVfcmVmcmVzaF9jYXBhYmxlIGFzIGFwcGxpY2FibGUgZm9yCj4gPiB0aGVp ciBoYXJkd2FyZS4gVGhlIHByb3BlcnR5IHZhcmlhYmxlX3JlZnJlc2hfZW5hYmxlZCBhcyBhIHVz ZXJzcGFjZQo+ID4gY29udHJvbGxlZCBvcHRpb24uCj4gPiAKPiA+IENoYW5nZS1JZDogSTVmNjBm OGI1NzUzNGUxZDNkYWNkYTRjNjRjNmM5MTA2YjQyZjQ0MzkKPiA+IFNpZ25lZC1vZmYtYnk6IE5p Y2hvbGFzIEthemxhdXNrYXMgPG5pY2hvbGFzLmthemxhdXNrYXNAYW1kLmNvbT4KPiA+IC0tLQo+ ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgICAgfCAgOSArKysrKysrKysKPiA+ICBk cml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jIHwgMzUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oICAgICB8IDI3ICsr KysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDcxIGluc2VydGlv bnMoKykKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gPiBpbmRleCBkMDQ3OGFiYzAxYmQuLjJm ODlhYjBmYWM4NyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMK PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiA+IEBAIC0xNDAzLDYgKzE0 MDMsMTEgQEAgc3RhdGljIGludCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICAJCXN0YXRlLT5jb250ZW50X3R5cGUg PSB2YWw7Cj4gPiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29ubmVjdG9yLT5zY2FsaW5nX21v ZGVfcHJvcGVydHkpIHsKPiA+ICAJCXN0YXRlLT5zY2FsaW5nX21vZGUgPSB2YWw7Cj4gPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29ubmVjdG9yLT52YXJpYWJsZV9yZWZyZXNoX2NhcGFibGVf cHJvcGVydHkpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIm9ubHkgZHJpdmVycyBjYW4gc2V0IHZh cmlhYmxlX3JlZnJlc2hfY2FwYWJsZVxuIik7Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAKPiBX aHkgaXMgdGhhdCBuZWVkZWQ/IFdoeSBub3QganVzdCBhdm9pZCBleHBvc2luZyB0aGUgdnJyX2Vu YWJsZWQgcHJvcAo+IHdoZW4gaXQncyBub3Qgc3VwcG9ydGVkPwoKQWgsIEkgZ3Vlc3MgeW91IHdh bnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBhZnRlciBwbHVnZ2luZyBpbiBhIG5ldwpkaXNwbGF5LiBZ ZWFoLCBpZiB3ZSBkb24ndCB3YW50IHVzZXJzcGFjZSB0byBoYXZlIHRvIHBhcnNlIHRoZSBFRElE IEkKZ3Vlc3Mgd2UgbmVlZCB0aGlzLiBCdXQgaW4gdGhhdCBjYXNlIGl0IHNob3VsZCBiZSBtYXJr ZWQgaW1tdXRhYmxlLAphbmQgdGhlbiB5b3UgZG9uJ3QgbmVlZCBhbnkgb2YgdGhpcyBhdG9taWMg c3RhdGUgcmVsYXRlZCBjb2RlIGZvciBpdC4KCj4gCj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29ubmVjdG9yLT52YXJpYWJsZV9yZWZyZXNoX2VuYWJsZWRfcHJvcGVydHkpIHsKPiA+ICsJ CXN0YXRlLT52YXJpYWJsZV9yZWZyZXNoX2VuYWJsZWQgPSB2YWw7Cj4gCj4gU28gb25lIHRoaW5n IEkgYWxyZWFkeSBhc2tlZCBsb25nIGFnbyBpcyB3aGV0aGVyIHRoZXJlIHdvdWxkIGEgcG9pbnQg aW4KPiBleHBvc2luZyBzb21lIGtpbmQgb2YgbWluL21heCByZWZyZXNoIHJhdGUgcmFuZ2UgY29u dHJvbC4gTmV2ZXIgcmVhbGx5Cj4gZ290IGFuIGFuc3dlci4gV2FzIHNvbWVodGluZyBsaWtlIHRo YXQgY29uc2lkZXJlZCBhbmQgcmVqZWN0ZWQ/Cj4gCj4gPiAgCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29ubmVjdG9yLT5jb250ZW50X3Byb3RlY3Rpb25fcHJvcGVydHkpIHsKPiA+ICAJCWlmICh2 YWwgPT0gRFJNX01PREVfQ09OVEVOVF9QUk9URUNUSU9OX0VOQUJMRUQpIHsKPiA+ICAJCQlEUk1f REVCVUdfS01TKCJvbmx5IGRyaXZlcnMgY2FuIHNldCBDUCBFbmFibGVkXG4iKTsKPiA+IEBAIC0x NTA4LDYgKzE1MTMsMTAgQEAgZHJtX2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAgCQkqdmFsID0gc3RhdGUtPmNvbnRlbnRf dHlwZTsKPiA+ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPnNjYWxpbmdfbW9k ZV9wcm9wZXJ0eSkgewo+ID4gIAkJKnZhbCA9IHN0YXRlLT5zY2FsaW5nX21vZGU7Cj4gPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29ubmVjdG9yLT52YXJpYWJsZV9yZWZyZXNoX2NhcGFibGVf cHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+dmFyaWFibGVfcmVmcmVzaF9jYXBhYmxl Owo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+dmFyaWFibGVfcmVmcmVz aF9lbmFibGVkX3Byb3BlcnR5KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnZhcmlhYmxlX3JlZnJl c2hfZW5hYmxlZDsKPiA+ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmNvbnRl bnRfcHJvdGVjdGlvbl9wcm9wZXJ0eSkgewo+ID4gIAkJKnZhbCA9IHN0YXRlLT5jb250ZW50X3By b3RlY3Rpb247Cj4gPiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT53cml0ZWJhY2tf ZmJfaWRfcHJvcGVydHkpIHsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nv bm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYwo+ID4gaW5kZXggNjAx MWQ3NjlkNTBiLi4zN2ZiMzNmYTc3YjkgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2Nvbm5lY3Rvci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5j Cj4gPiBAQCAtMTI1MCw2ICsxMjUwLDQxIEBAIGludCBkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19t b2RlX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAgfQo+ID4gIEVYUE9SVF9T WU1CT0woZHJtX21vZGVfY3JlYXRlX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eSk7Cj4gPiAgCj4gPiAr LyoqCj4gPiArICogZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfdmFyaWFibGVfcmVmcmVzaF9wcm9wZXJ0 aWVzIC0gY3JlYXRlcyBhbmQgYXR0YWNoZXMKPiA+ICsgKiBwcm9wZXJ0aWVzIGZvciBjb25uZWN0 b3JzIHRoYXQgc3VwcG9ydCBhZGFwdGl2ZSByZWZyZXNoCj4gPiArICogQGNvbm5lY3RvcjogY29u bmVjdG9yIHRvIGNyZWF0ZSBhZGFwdGl2ZSByZWZyZXNoIHByb3BlcnRpZXMgb24KPiA+ICsgKi8K PiA+ICtpbnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfdmFyaWFibGVfcmVmcmVzaF9wcm9wZXJ0aWVz KAo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX3By b3BlcnR5ICpwcm9wOwo+ID4gKwo+ID4gKwlpZiAoIWNvbm5lY3Rvci0+dmFyaWFibGVfcmVmcmVz aF9jYXBhYmxlX3Byb3BlcnR5KSB7Cj4gPiArCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9i b29sKGRldiwgMCwKPiA+ICsJCQkidmFyaWFibGVfcmVmcmVzaF9jYXBhYmxlIik7Cj4gPiArCQlp ZiAoIXByb3ApCj4gPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCQljb25uZWN0b3It PnZhcmlhYmxlX3JlZnJlc2hfY2FwYWJsZV9wcm9wZXJ0eSA9IHByb3A7Cj4gPiArCQlkcm1fb2Jq ZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLCBwcm9wLCAwKTsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlpZiAoIWNvbm5lY3Rvci0+dmFyaWFibGVfcmVmcmVzaF9lbmFibGVkX3Byb3Bl cnR5KSB7Cj4gPiArCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ib29sKGRldiwgMCwKPiA+ ICsJCQkidmFyaWFibGVfcmVmcmVzaF9lbmFibGVkIik7Cj4gPiArCQlpZiAoIXByb3ApCj4gPiAr CQkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCQljb25uZWN0b3ItPnZhcmlhYmxlX3JlZnJl c2hfZW5hYmxlZF9wcm9wZXJ0eSA9IHByb3A7Cj4gPiArCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9w ZXJ0eSgmY29ubmVjdG9yLT5iYXNlLCBwcm9wLCAwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX2F0dGFjaF92YXJp YWJsZV9yZWZyZXNoX3Byb3BlcnRpZXMpOwo+ID4gKwo+ID4gIC8qKgo+ID4gICAqIGRybV9jb25u ZWN0b3JfYXR0YWNoX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eSAtIGF0dGFjaCBhdG9taWMgc2NhbGlu ZyBtb2RlIHByb3BlcnR5Cj4gPiAgICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHRvIGF0dGFjaCBz Y2FsaW5nIG1vZGUgcHJvcGVydHkgb24uCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJt X2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gPiBpbmRleCA5N2Vh NDFkYzY3OGYuLjEwNWExMjdlOTE5MSAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9j b25uZWN0b3IuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gPiBAQCAt NDQ4LDYgKzQ0OCwxOCBAQCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSB7Cj4gPiAgCSAqLwo+ ID4gIAl1bnNpZ25lZCBpbnQgY29udGVudF9wcm90ZWN0aW9uOwo+ID4gIAo+ID4gKwkvKioKPiA+ ICsJICogQHZhcmlhYmxlX3JlZnJlc2hfZW5hYmxlZDogQ29ubmVjdG9yIHByb3BlcnR5IHVzZWQg dG8gY2hlY2sKPiA+ICsJICogaWYgdmFyaWFibGUgcmVmcmVzaCBpcyBzdXBwb3J0ZWQgb24gdGhl IGRldmljZS4KPiA+ICsJICovCj4gPiArCWJvb2wgdmFyaWFibGVfcmVmcmVzaF9jYXBhYmxlOwo+ ID4gKwo+ID4gKwkvKioKPiA+ICsJICogQHZhcmlhYmxlX3JlZnJlc2hfZW5hYmxlZDogQ29ubmVj dG9yIHByb3BlcnR5IHVzZWQgdG8gY2hlY2sKPiA+ICsJICogaWYgdmFyaWFibGUgcmVmcmVzaCBp cyBlbmFibGVkLgo+ID4gKwkgKi8KPiA+ICsJYm9vbCB2YXJpYWJsZV9yZWZyZXNoX2VuYWJsZWQ7 Cj4gPiArCj4gPiAgCS8qKgo+ID4gIAkgKiBAd3JpdGViYWNrX2pvYjogV3JpdGViYWNrIGpvYiBm b3Igd3JpdGViYWNrIGNvbm5lY3RvcnMKPiA+ICAJICoKPiA+IEBAIC05MDksNiArOTIxLDE5IEBA IHN0cnVjdCBkcm1fY29ubmVjdG9yIHsKPiA+ICAJICovCj4gPiAgCXN0cnVjdCBkcm1fcHJvcGVy dHkgKnNjYWxpbmdfbW9kZV9wcm9wZXJ0eTsKPiA+ICAKPiA+ICsJLyoqCj4gPiArCSAqIEB2YXJp YWJsZV9yZWZyZXNoX2NhcGFibGVfcHJvcGVydHk6IE9wdGlvbmFsIHByb3BlcnR5IGZvcgo+ID4g KwkgKiBxdWVyeWluZyBoYXJkd2FyZSBzdXBwb3J0IGZvciB2YXJpYWJsZSByZWZyZXNoLgo+ID4g KwkgKi8KPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqdmFyaWFibGVfcmVmcmVzaF9jYXBhYmxl X3Byb3BlcnR5Owo+ID4gKwo+ID4gKwkvKioKPiA+ICsJICogQHZhcmlhYmxlX3JlZnJlc2hfZW5h YmxlZF9wcm9wZXJ0eTogT3B0aW9uYWwgcHJvcGVydHkgZm9yCj4gPiArCSAqIGVuYWJsaW5nIG9y IGRpc2FibGluZyBzdXBwb3J0IGZvciB2YXJpYWJsZSByZWZyZXNoCj4gPiArCSAqIG9uIHRoZSBj b25uZWN0b3IuCj4gPiArCSAqLwo+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp2YXJpYWJsZV9y ZWZyZXNoX2VuYWJsZWRfcHJvcGVydHk7Cj4gPiArCj4gPiAgCS8qKgo+ID4gIAkgKiBAY29udGVu dF9wcm90ZWN0aW9uX3Byb3BlcnR5OiBEUk0gRU5VTSBwcm9wZXJ0eSBmb3IgY29udGVudAo+ID4g IAkgKiBwcm90ZWN0aW9uLiBTZWUgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfY29udGVudF9wcm90ZWN0 aW9uX3Byb3BlcnR5KCkuCj4gPiBAQCAtMTE4Miw2ICsxMjA3LDggQEAgaW50IGRybV9tb2RlX2Ny ZWF0ZV9zY2FsaW5nX21vZGVfcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAg aW50IGRybV9jb25uZWN0b3JfYXR0YWNoX2NvbnRlbnRfdHlwZV9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqZGV2KTsKPiA+ICBpbnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfc2NhbGluZ19t b2RlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAgCQkJCQkg ICAgICAgdTMyIHNjYWxpbmdfbW9kZV9tYXNrKTsKPiA+ICtpbnQgZHJtX2Nvbm5lY3Rvcl9hdHRh Y2hfdmFyaWFibGVfcmVmcmVzaF9wcm9wZXJ0aWVzKAo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKTsKPiA+ICBpbnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfY29udGVudF9wcm90 ZWN0aW9uX3Byb3BlcnR5KAo+ID4gIAkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7 Cj4gPiAgaW50IGRybV9tb2RlX2NyZWF0ZV9hc3BlY3RfcmF0aW9fcHJvcGVydHkoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gPiAtLSAKPiA+IDIuMTcuMQo+IAo+IC0tIAo+IFZpbGxlIFN5cmrD pGzDpAo+IEludGVsCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=