From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v2 3/6] x86/time: implement tsc as clocksource Date: Fri, 1 Apr 2016 12:43:00 -0400 Message-ID: <20160401164300.GB10820@char.us.oracle.com> References: <1459259051-4943-1-git-send-email-joao.m.martins@oracle.com> <1459259051-4943-4-git-send-email-joao.m.martins@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1459259051-4943-4-git-send-email-joao.m.martins@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Joao Martins Cc: Andrew Cooper , Keir Fraser , Jan Beulich , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBNYXIgMjksIDIwMTYgYXQgMDI6NDQ6MDhQTSArMDEwMCwgSm9hbyBNYXJ0aW5zIHdy b3RlOgo+IEludHJvZHVjZSBzdXBwb3J0IGZvciB1c2luZyBUU0MgYXMgcGxhdGZvcm0gdGltZSB3 aGljaCBpcyB0aGUgaGlnaGVzdAo+IHJlc29sdXRpb24gdGltZSBhbmQgbW9zdCBwZXJmb3JtYW50 IHRvIGdldCAofjIwIG5zZWNzKS4gIFRob3VnaCB0aGVyZQo+IGFyZSBhbHNvIHNldmVyYWwgcHJv YmxlbXMgYXNzb2NpYXRlZCB3aXRoIGl0cyB1c2FnZSwgYW5kIHRoZXJlIGlzbid0IGEKPiBjb21w bGV0ZSAoYW5kIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkKSBndWFyYW50ZWUgdGhhdCBhbGwgbWFj aGluZXMKPiB3aWxsIHByb3ZpZGUgcmVsaWFibGUgYW5kIG1vbm90b25pYyBUU0MgYWNyb3NzIGFs bCBDUFVzLCBvbiBkaWZmZXJlbnQKPiBzb2NrZXRzIGFuZCBkaWZmZXJlbnQgUC9DIHN0YXRlcy4g IEkgYmVsaWV2ZSBJbnRlbCB0byBiZSB0aGUgb25seSB0aGF0Cj4gY2FuIGd1YXJhbnRlZSB0aGF0 LiBGb3IgdGhpcyByZWFzb24gaXQncyBvbmx5IHNldCB3aGVuIGFkbWluc3RyYXRvcgo+IGNoYW5n ZXMgImNsb2Nrc291cmNlIiBib290IG9wdGlvbiB0byAidHNjIi4gSW5pdGlhbGl6aW5nIFRTQwo+ IGNsb2Nrc291cmNlIHJlcXVpcmVzIGFsbCBDUFVzIHRvIGhhdmUgdGhlIHRzYyByZWxpYWJpbGl0 eSBjaGVja3MKPiBwZXJmb3JtZWQuIGluaXRfeGVuX3RpbWUgaXMgY2FsbGVkIGJlZm9yZSBhbGwg Q1BVcyBhcmUgdXAsIGFuZCBzbyB3ZQo+IHN0YXJ0IHdpdGggSFBFVCBhdCBib290IHRpbWUsIGFu ZCBzd2l0Y2ggbGF0ZXIgdG8gVFNDLiBUaGUgc3dpdGNoIHRoZW4KPiBoYXBwZW5zIG9uIHZlcmlm eV90c2NfcmVsaWFiaWxpdHkgaW5pdGNhbGwgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWxsCj4gQ1BV cyBhcmUgdXAuIFdoZW4gYXR0ZW1wdGluZyB0byBpbml0aWFsaXppbmcgVFNDIHdlIGFsc28gY2hl Y2sgZm9yCj4gdGltZSB3YXJwcyBhbmQgYXBwcm9wcmlhdGUgQ1BVIGZlYXR1cmVzIGkuZS4gIFRT Q19SRUxJQUJMRSwKPiBDT05TVEFOVF9UU0MgYW5kIE5PTlNUT1BfVFNDLiBBbmQgaW4gY2FzZSBu b25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJlCj4gbWV0LCB3ZSBrZWVwIHRoZSBjbG9ja3NvdXJj ZSB0aGF0IHdhcyBwcmV2aW91c2x5IGluaXRpYWxpemVkIG9uCj4gaW5pdF94ZW5fdGltZS4KPiAK PiBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IHdpdGggY2xvY2tzb3VyY2U9dHNjIHRoZXJl IGlzbid0IGFueQo+IG5lZWQgdG8gc3luY2hyb25pc2Ugd2l0aCBhbm90aGVyIGNsb2Nrc291cmNl LCBhbmQgSSBjb3VsZCB2ZXJpZnkgdGhhdAo+IGdyZWF0IHBvcnRpb24gdGhlIHRpbWUgc2tldyB3 YXMgZWxpbWluYXRlZCBhbmQgc2VlaW5nIG11Y2ggbGVzcyB0aW1lCj4gd2FycHMgaGFwcGVuaW5n LiBXaXRoIEhQRVQgSSB1c2VkIHRvIG9ic2VydmUgfjUwMCB3YXJwcyBpbiB0aGUgcGVyaW9kCj4g b2YgMWggb2YgYXJvdW5kIDI3IHVzLCBhbmQgd2l0aCBUU0MgZG93biB0byA1MCB3YXJwcyBpbiB0 aGUgc2FtZQo+IHBlcmlvZCBoYXZpbmcgZWFjaCB3YXJwIDwgMTAwIG5zLiBUaGUgd2FycHMgc3Rp bGwgZXhpc3QgdGhvdWdoIGJ1dAo+IGFyZSBvbmx5IHJlbGF0ZWQgdG8gY3Jvc3MgQ1BVIGNhbGli cmF0aW9uIChiZWluZyBob3cgbXVjaCBpdCB0YWtlcyB0bwo+IHJlbmRlenZvdXMgd2l0aCBtYXN0 ZXIpLCBpbiB3aGljaCBhIGxhdGVyIHBhdGNoIGluIHRoaXMgc2VyaWVzIGFpbXMgdG8KPiBzb2x2 ZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKb2FvIE1hcnRpbnMgPGpvYW8ubS5tYXJ0aW5zQG9yYWNs ZS5jb20+Cj4gLS0tCj4gQ2M6IEtlaXIgRnJhc2VyIDxrZWlyQHhlbi5vcmc+Cj4gQ2M6IEphbiBC ZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KPiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNv b3BlcjNAY2l0cml4LmNvbT4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ICAtIHMvcHJpbnRrL3By aW50ayhYRU5MT0dfSU5GTwo+ICAtIFJlbW92ZSBleHRyYSBzcGFjZSBvbiBpbm5lciBicmFja2V0 cwo+ICAtIEFkZCBtaXNzaW5nIHNwYWNlIGFyb3VuZCBicmFja2V0cwo+ICAtIERlZmVyIGNsb2Nr c291cmNlIFRTQyBpbml0aWFsaXphdGlvbiB3aGVuIGFsbCBDUFVzIGFyZSB1cC4KPiAKPiBDaGFu Z2VzIHNpbmNlIFJGQzoKPiAgLSBTcGVsbGluZyBmaXhlcyBpbiB0aGUgY29tbWl0IG1lc3NhZ2Uu Cj4gIC0gUmVtb3ZlIHVudXNlZCBjbG9ja3NvdXJjZV9pc190c2MgdmFyaWFibGUgYW5kIGludHJv ZHVjZSBpdCBpbnN0ZWFkCj4gIG9uIHRoZSBwYXRjaCB0aGF0IHVzZXMgaXQuCj4gIC0gTW92ZSBw bHRfdHNjIGZyb20gc2Vjb25kIHRvIGxhc3QgaW4gdGhlIGF2YWlsYWJsZSBjbG9ja3NvdXJjZXMu Cj4gLS0tCj4gIHhlbi9hcmNoL3g4Ni90aW1lLmMgfCA5NyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+ICAxIGZpbGUgY2hhbmdlZCwgOTUgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L3RpbWUuYyBiL3hlbi9hcmNoL3g4Ni90aW1lLmMKPiBpbmRleCBlZDRlZDI0Li4yNjAyZGRhIDEw MDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni90aW1lLmMKPiArKysgYi94ZW4vYXJjaC94ODYvdGlt ZS5jCj4gQEAgLTQzMiw2ICs0MzIsNjMgQEAgdWludDY0X3QgbnNfdG9fYWNwaV9wbV90aWNrKHVp bnQ2NF90IG5zKQo+ICB9Cj4gIAo+ICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIFBMQVRGT1JNIFRJTUVSIDQ6IFRTQwo+ ICsgKi8KPiArc3RhdGljIHU2NCB0c2NfZnJlcTsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgdHNj X21heF93YXJwOwo+ICtzdGF0aWMgdm9pZCB0c2NfY2hlY2tfcmVsaWFiaWxpdHkodm9pZCk7Cj4g Kwo+ICtzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzY3RpbWVyKHN0cnVjdCBwbGF0Zm9ybV90aW1l c291cmNlICpwdHMpCj4gK3sKPiArICAgIGJvb2xfdCB0c2NfcmVsaWFibGUgPSAwOwoKTm8gbmVl ZCB0byBzZXQgaXQgdG8gemVyby4KPiArCj4gKyAgICB0c2NfY2hlY2tfcmVsaWFiaWxpdHkoKTsK ClRoaXMgaGFzIGJlZW4gYWxyZWFkeSBjYWxsZWQgYnkgdmVyaWZ5X3RzY19yZWxpYWJpbGl0eSB3 aGljaCBjYWxscyB0aGlzCmZ1bmN0aW9uLiBTaG91bGQgd2Ugc2V0IHRzY19tYXhfd2FycCB0byB6 ZXJvIGJlZm9yZSBjYWxsaW5nIGl0PwoKPiArCj4gKyAgICBpZiAoIHRzY19tYXhfd2FycCA+IDAg KQo+ICsgICAgewo+ICsgICAgICAgIHRzY19yZWxpYWJsZSA9IDA7CgpEaXR0by4gSXQgaXMgYnkg ZGVmYXVsdCB6ZXJvLgoKPiArICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIlRTQzogZGlkbid0 IHBhc3NlZCB3YXJwIHRlc3RcbiIpOwoKU28gdGhlIGVhcmxpZXIgdGVzdCBieSB2ZXJpZnlfdHNj X3JlbGlhYmlsaXR5IGRpZCBhbHJlYWR5IHRoaXMgY2hlY2sgYW5kCnByaW50ZWQgdGhpcyBvdXQg LSBhbmQgYWxzbyBjbGVhcmVkIHRoZSBYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUuCgpTbyBjYW4g dGhpcyBjaGVjayBhYm92ZSBiZSByZW1vdmVkIHRoZW4/CgpPciBhcmUgeW91IHRoaW5raW5nIHRv IGRpdGNoIHdoYXQgdmVyaWZ5X3RzY19yZWxpYWJpbGl0eSBkb2VzPwoKPiArICAgIH0KPiArICAg IGVsc2UgaWYgKCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKSB8fAo+ICsg ICAgICAgICAgICAgIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSAmJgo+ ICsgICAgICAgICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpKSAp Cj4gKyAgICB7Cj4gKyAgICAgICAgdHNjX3JlbGlhYmxlID0gMTsKPiArICAgIH0KPiArICAgIGVs c2UgaWYgKCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSApCj4gKyAgICB7 Cj4gKyAgICAgICAgdHNjX3JlbGlhYmxlID0gKG1heF9jc3RhdGUgPD0gMik7Cj4gKwo+ICsgICAg ICAgIGlmICggdHNjX3JlbGlhYmxlICkKPiArICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19JTkZP ICJUU0M6IG5vIGRlZXAgQ3N0YXRlcywgZGVlbWVkIHJlbGlhYmxlXG4iKTsKPiArICAgICAgICBl bHNlCj4gKyAgICAgICAgICAgIHByaW50ayhYRU5MT0dfSU5GTyAiVFNDOiBkZWVwIENzdGF0ZXMg cG9zc2libGUsIHNvIG5vdCByZWxpYWJsZVxuIik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHRzLT5m cmVxdWVuY3kgPSB0c2NfZnJlcTsKPiArICAgIHJldHVybiB0c2NfcmVsaWFibGU7Cj4gK30KPiAr Cj4gK3N0YXRpYyB1NjQgcmVhZF90c2Modm9pZCkKPiArewo+ICsgICAgcmV0dXJuIHJkdHNjKCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJlc3VtZV90c2N0aW1lcihzdHJ1Y3QgcGxhdGZvcm1f dGltZXNvdXJjZSAqcHRzKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f dGltZXNvdXJjZSBfX2luaXRkYXRhIHBsdF90c2MgPQo+ICt7Cj4gKyAgICAuaWQgPSAidHNjIiwK PiArICAgIC5uYW1lID0gIlRTQyIsCj4gKyAgICAucmVhZF9jb3VudGVyID0gcmVhZF90c2MsCj4g KyAgICAuY291bnRlcl9iaXRzID0gNjQsCj4gKyAgICAuaW5pdCA9IGluaXRfdHNjdGltZXIsCgpD b3VsZCB5b3UgYWRkIGEgbm90ZSBpbiBoZXJlOgoKLyogTm90IGNhbGxlZCBieSBpbml0X3BsYXRm b3JtX3RpbWVyIGFzIGl0IGlzIG5vdCBvbiB0aGUgcGx0X3RpbWVycyBhcnJheS4gKi8KCj4gKyAg ICAucmVzdW1lID0gcmVzdW1lX3RzY3RpbWVyLAo+ICt9Owo+ICsKPiArLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgKiBHRU5F UklDIFBMQVRGT1JNIFRJTUVSIElORlJBU1RSVUNUVVJFCj4gICAqLwo+ICAKPiBAQCAtNTMzLDYg KzU5MCwyMSBAQCBzdGF0aWMgdm9pZCByZXN1bWVfcGxhdGZvcm1fdGltZXIodm9pZCkKPiAgICAg IHBsdF9zdGFtcCA9IHBsdF9zcmMucmVhZF9jb3VudGVyKCk7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2 b2lkIF9faW5pdCByZXNldF9wbGF0Zm9ybV90aW1lcih2b2lkKQo+ICt7Cj4gKyAgICAvKiBEZWFj dGl2YXRlIGFueSB0aW1lcnMgcnVubmluZyAqLwo+ICsgICAga2lsbF90aW1lcigmcGx0X292ZXJm bG93X3RpbWVyKTsKPiArICAgIGtpbGxfdGltZXIoJmNhbGlicmF0aW9uX3RpbWVyKTsKPiArCj4g KyAgICAvKiBSZXNldCBjb3VudGVycyBhbmQgc3RhbXBzICovCj4gKyAgICBzcGluX2xvY2tfaXJx KCZwbGF0Zm9ybV90aW1lcl9sb2NrKTsKPiArICAgIHBsdF9zdGFtcCA9IDA7Cj4gKyAgICBwbHRf c3RhbXA2NCA9IDA7Cj4gKyAgICBwbGF0Zm9ybV90aW1lcl9zdGFtcCA9IDA7Cj4gKyAgICBzdGlt ZV9wbGF0Zm9ybV9zdGFtcCA9IDA7Cj4gKyAgICBzcGluX3VubG9ja19pcnEoJnBsYXRmb3JtX3Rp bWVyX2xvY2spOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IF9faW5pdCB0cnlfcGxhdGZvcm1fdGlt ZXIoc3RydWN0IHBsYXRmb3JtX3RpbWVzb3VyY2UgKnB0cykKPiAgewo+ICAgICAgaW50IHJjID0g LTE7Cj4gQEAgLTU0MSw2ICs2MTMsMTAgQEAgc3RhdGljIGludCBfX2luaXQgdHJ5X3BsYXRmb3Jt X3RpbWVyKHN0cnVjdCBwbGF0Zm9ybV90aW1lc291cmNlICpwdHMpCj4gICAgICBpZiAoIHJjIDw9 IDAgKQo+ICAgICAgICAgIHJldHVybiByYzsKPiAgCj4gKyAgICAvKiBXZSBoYXZlIGEgcGxhdGZv cm0gdGltZXNvdXJjZSBhbHJlYWR5IHNvIHJlc2V0IGl0ICovCj4gKyAgICBpZiAoIHBsdF9zcmMu Y291bnRlcl9iaXRzICE9IDAgKQo+ICsgICAgICAgIHJlc2V0X3BsYXRmb3JtX3RpbWVyKCk7Cj4g Kwo+ICAgICAgcGx0X21hc2sgPSAodTY0KX4wdWxsID4+ICg2NCAtIHB0cy0+Y291bnRlcl9iaXRz KTsKPiAgCj4gICAgICBzZXRfdGltZV9zY2FsZSgmcGx0X3NjYWxlLCBwdHMtPmZyZXF1ZW5jeSk7 Cj4gQEAgLTU2Niw3ICs2NDIsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wbGF0Zm9ybV90 aW1lcih2b2lkKQo+ICAgICAgc3RydWN0IHBsYXRmb3JtX3RpbWVzb3VyY2UgKnB0cyA9IE5VTEw7 Cj4gICAgICBpbnQgaSwgcmMgPSAtMTsKPiAgCj4gLSAgICBpZiAoIG9wdF9jbG9ja3NvdXJjZVsw XSAhPSAnXDAnICkKPiArICAgIC8qIGNsb2Nrc291cmNlPXRzYyBpcyBpbml0aWFsaXplZCBsYXRl ciB3aGVuIGFsbCBDUFVTIGFyZSB1cCAqLwoKUGVyaGFwczoKLyogY2xvY2tzb3VyY2U9dHNjIGlz IGluaXRpYWxpemVkIHZpYSBfX2luaXRjYWxscyAod2hlbiBDUFVzIGFyZSB1cCkuICovID8KCj4g KyAgICBpZiAoIChvcHRfY2xvY2tzb3VyY2VbMF0gIT0gJ1wwJykgJiYKPiArICAgICAgICAgKHN0 cmNtcChvcHRfY2xvY2tzb3VyY2UsICJ0c2MiKSAhPSAwKSApCj4gICAgICB7Cj4gICAgICAgICAg Zm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBsdF90aW1lcnMpOyBpKysgKQo+ICAgICAgICAg IHsKPiBAQCAtMTE5Miw3ICsxMjcwLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfdHNjX3dhcnAodW5z aWduZWQgbG9uZyB0c2Nfa2h6LCB1bnNpZ25lZCBsb25nICptYXhfd2FycCkKPiAgICAgIH0KPiAg fQo+ICAKPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgdHNjX21heF93YXJwLCB0c2NfY2hlY2tfY291 bnQ7Cj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRzY19jaGVja19jb3VudDsKPiAgc3RhdGljIGNw dW1hc2tfdCB0c2NfY2hlY2tfY3B1bWFzazsKPiAgCj4gIHN0YXRpYyB2b2lkIHRzY19jaGVja19z bGF2ZSh2b2lkICp1bnVzZWQpCj4gQEAgLTE0MzcsNiArMTUxNSwyMCBAQCBzdGF0aWMgaW50IF9f aW5pdCB2ZXJpZnlfdHNjX3JlbGlhYmlsaXR5KHZvaWQpCj4gICAgICAgICAgfQo+ICAgICAgfQo+ ICAKPiArICAgIGlmICggIXN0cmNtcChvcHRfY2xvY2tzb3VyY2UsICJ0c2MiKSApCj4gKyAgICB7 Cj4gKyAgICAgICAgaWYgKCB0cnlfcGxhdGZvcm1fdGltZXIoJnBsdF90c2MpID4gMCApCj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIlN3aXRjaGVkIHRvIFBs YXRmb3JtIHRpbWVyICVzIFRTQ1xuIiwKPiArICAgICAgICAgICAgICAgICAgIGZyZXFfc3RyaW5n KHBsdF9zcmMuZnJlcXVlbmN5KSk7Cj4gKwo+ICsgICAgICAgICAgICBpbml0X3BlcmNwdV90aW1l KCk7Cj4gKwo+ICsgICAgICAgICAgICBpbml0X3RpbWVyKCZjYWxpYnJhdGlvbl90aW1lciwgdGlt ZV9jYWxpYnJhdGlvbiwgTlVMTCwgMCk7Cj4gKyAgICAgICAgICAgIHNldF90aW1lcigmY2FsaWJy YXRpb25fdGltZXIsIE5PVygpICsgRVBPQ0gpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4g ICAgICByZXR1cm4gMDsKPiAgfQo+ICBfX2luaXRjYWxsKHZlcmlmeV90c2NfcmVsaWFiaWxpdHkp Owo+IEBAIC0xNDc2LDYgKzE1NjgsNyBAQCB2b2lkIF9faW5pdCBlYXJseV90aW1lX2luaXQodm9p ZCkKPiAgICAgIHN0cnVjdCBjcHVfdGltZSAqdCA9ICZ0aGlzX2NwdShjcHVfdGltZSk7Cj4gICAg ICB1NjQgdG1wID0gaW5pdF9waXRfYW5kX2NhbGlicmF0ZV90c2MoKTsKPiAgCj4gKyAgICB0c2Nf ZnJlcSA9IHRtcDsKPiAgICAgIHNldF90aW1lX3NjYWxlKCZ0LT50c2Nfc2NhbGUsIHRtcCk7Cj4g ICAgICB0LT5sb2NhbF90c2Nfc3RhbXAgPSBib290X3RzY19zdGFtcDsKPiAgCj4gLS0gCj4gMi4x LjQKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPiBYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwo+IGh0 dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK