From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH 1/8] x86/time: improve cross-CPU clock monotonicity (and more) Date: Thu, 16 Jun 2016 02:27:19 -0600 Message-ID: <57627F0702000078000F590A@prv-mh.provo.novell.com> References: <576140F302000078000F52FE@prv-mh.provo.novell.com> <5761496802000078000F5395@prv-mh.provo.novell.com> <5761DC0E.5010201@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bDSe3-00019g-Ac for xen-devel@lists.xenproject.org; Thu, 16 Jun 2016 08:27:23 +0000 In-Reply-To: <5761DC0E.5010201@oracle.com> Content-Disposition: inline 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 , Dario Faggioli , xen-devel List-Id: xen-devel@lists.xenproject.org Pj4+IE9uIDE2LjA2LjE2IGF0IDAwOjUxLCA8am9hby5tLm1hcnRpbnNAb3JhY2xlLmNvbT4gd3Jv dGU6Cj4gT24gMDYvMTUvMjAxNiAxMToyNiBBTSwgSmFuIEJldWxpY2ggd3JvdGU6Cj4+IC0tLSBh L3hlbi9hcmNoL3g4Ni90aW1lLmMKPj4gKysrIGIveGVuL2FyY2gveDg2L3RpbWUuYwo+PiBAQCAt MTMyOCwyMSArMTMyOCw1MSBAQCBzdGF0aWMgdm9pZCB0aW1lX2NhbGlicmF0aW9uKHZvaWQgKnVu dXNlCj4+ICAgICAgICAgICAgICAgICAgICAgICAmciwgMSk7Cj4+ICB9Cj4+ICAKPj4gK3N0YXRp YyBzdHJ1Y3Qgewo+PiArICAgIHNfdGltZV90IGxvY2FsX3N0aW1lLCBtYXN0ZXJfc3RpbWU7Cj4+ ICt9IGFwX2JyaW5ndXBfcmVmOwo+PiArCj4+ICt2b2lkIHRpbWVfbGF0Y2hfc3RhbXBzKHZvaWQp IHsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gc3R5bGU6IHNob3VsZG4ndCB0 aGlzIGJyYWNrZXQgYmUgb24gYSBuZXcgbGluZT8KCk9oLCB5ZXMsIG9mIGNvdXJzZS4KCj4+ICsg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gKyAgICB1NjQgdHNjOwo+PiArCj4+ICsgICAgbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOwo+PiArICAgIGFwX2JyaW5ndXBfcmVmLm1hc3Rlcl9zdGltZSA9 IHJlYWRfcGxhdGZvcm1fc3RpbWUoKTsKPj4gKyAgICB0c2MgPSByZHRzYygpOwo+PiArICAgIGxv Y2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKPj4gKwo+PiArICAgIGFwX2JyaW5ndXBfcmVmLmxvY2Fs X3N0aW1lID0gZ2V0X3NfdGltZV9maXhlZCh0c2MpOwo+PiArfQo+PiArCj4+ICB2b2lkIGluaXRf cGVyY3B1X3RpbWUodm9pZCkKPj4gIHsKPj4gICAgICBzdHJ1Y3QgY3B1X3RpbWUgKnQgPSAmdGhp c19jcHUoY3B1X3RpbWUpOwo+PiAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsgICAgdTY0 IHRzYzsKPj4gICAgICBzX3RpbWVfdCBub3c7Cj4+ICAKPj4gICAgICAvKiBJbml0aWFsIGVzdGlt YXRlIGZvciBUU0MgcmF0ZS4gKi8KPj4gICAgICB0LT50c2Nfc2NhbGUgPSBwZXJfY3B1KGNwdV90 aW1lLCAwKS50c2Nfc2NhbGU7Cj4+ICAKPj4gICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Cj4+ IC0gICAgdC0+bG9jYWxfdHNjX3N0YW1wID0gcmR0c2MoKTsKPj4gICAgICBub3cgPSByZWFkX3Bs YXRmb3JtX3N0aW1lKCk7Cj4gRG8gd2UgbmVlZCB0byB0YWtlIGFub3RoZXIgcmVhZCBmcm9tIHRo ZSBwbGF0Zm9ybSB0aW1lciBoZXJlPyBXZSBjb3VsZAo+IGp1c3QgcmV1c2UgdGhlIG9uZSBvbiBh cF9icmluZ3VwX3JlZi5tYXN0ZXJfc3RpbWUuIFNlZSBhbHNvIGJlbG93LgoKWWVzLCBmb3IgdGhp cyBtb2RlbCBvZiBhcHByb3hpbWF0aW9uIG9mIHRoZSBsb2NhbCBzdGltZSBkZWx0YSBieQptYXN0 ZXIgc3RpbWUgZGVsdGEgd2Ugb2J2aW91c2x5IG5lZWQgdG8gcmVhZCB0aGUgbWFzdGVyIGNsb2Nr CmhlcmUgYWdhaW4gKG9yIGVsc2Ugd2UgaGF2ZSBubyB3YXkgdG8gY2FsY3VsYXRlIHRoZSBtYXN0 ZXIKZGVsdGEsIHdoaWNoIHdlIHdhbnQgdG8gdXNlIGFzIHRoZSBjb3JyZWN0aW5nIHZhbHVlKS4K Cj4+ICsgICAgdHNjID0gcmR0c2MoKTsKPj4gICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7 Cj4+ICAKPj4gICAgICB0LT5zdGltZV9tYXN0ZXJfc3RhbXAgPSBub3c7Cj4+ICsgICAgLyoKPj4g KyAgICAgKiBUbyBhdm9pZCBhIGRpc2NvbnRpbnVpdHkgKFRTQyBhbmQgcGxhdGZvcm0gY2xvY2sg Y2FuJ3QgYmUgZXhwZWN0ZWQKPj4gKyAgICAgKiB0byBiZSBpbiBwZXJmZWN0IHN5bmMpLCBpbml0 aWFsaXphdGlvbiBoZXJlIG5lZWRzIHRvIG1hdGNoIHVwIHdpdGgKPj4gKyAgICAgKiBsb2NhbF90 aW1lX2NhbGlicmF0aW9uKCkncyBkZWNpc2lvbiB3aGV0aGVyIHRvIHVzZSBpdHMgZmFzdCBwYXRo Lgo+PiArICAgICAqLwo+PiArICAgIGlmICggYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNU QU5UX1RTQykgKQo+PiArICAgIHsKPj4gKyAgICAgICAgaWYgKCBzeXN0ZW1fc3RhdGUgPCBTWVNf U1RBVEVfc21wX2Jvb3QgKQo+PiArICAgICAgICAgICAgbm93ID0gZ2V0X3NfdGltZV9maXhlZCh0 c2MpOwo+PiArICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICBub3cgKz0gYXBfYnJpbmd1cF9y ZWYubG9jYWxfc3RpbWUgLSBhcF9icmluZ3VwX3JlZi5tYXN0ZXJfc3RpbWU7Cj4+ICsgICAgfQo+ PiArICAgIHQtPmxvY2FsX3RzY19zdGFtcCAgICA9IHRzYzsKPiAKPiBBcyBmYXIgYXMgbXkgY3Vy cmVudCBleHBlcmltZW50YXRpb24gKGJvdGggdjEgb2YgdGhpcyBwYXRjaCBhbmQgdGhlIHdob2xl IAo+IHNlcmllcyBvbgo+IHYyKSwgdGhlIHNvdXJjZSBvZiB0aGUgcmVtYWluaW5nIHdhcnBzIGNv dWxkIGJlIGZpeGVkIHdpdGggdGhpcyBzZWVkaW5nLiAKPiBUaG91Z2ggSQo+IHRoaW5rIHRoaXMg c2VlZGluZyBtaWdodCBub3QgeWV0IGJlIGNvcnJlY3QuIEVzc2VudGlhbGx5IHRoZSBib290IENQ VSB5b3UgZG8KPiBnZXRfc190aW1lX2ZpeGVkKHRzYyksIHdoaWNoIGJhc2ljYWxseSBnaXZlcyB5 b3UgYSB2YWx1ZSBzdHJpY3RseSBjYWxjdWxhdGVkIAo+IHdpdGggVFNDCj4gc2luY2UgYm9vdF90 c2Nfc3RhbXAuIEZvciB0aGUgb3RoZXIgQ1BVcyB5b3UgYXBwZW5kIHRoZSB0aW1lIHNrZXcgYmV0 d2VlbiAKPiBUU0MgYW5kCj4gcGxhdGZvcm0gdGltZXIgY2FsY3VsYXRlZCBiZWZvcmUgQVAgYnJp bmd1cCwgd2l0aCBhIHZhbHVlIGp1c3QgcmVhZCBvbiB0aGUgCj4gcGxhdGZvcm0KPiB0aW1lci4g V2hpY2ggSSBhc3N1bWUgeW91IHRha2UgdGhpcyBhcyBhbiBhcHByb3hpbWF0aW9uIHNrZXcgYmV0 d2VlbiBUU0MgYW5kIAo+IHBsYXRmb3JtCj4gdGltZXIuCgpDb3JyZWN0LgoKPiBTbywgYmVmb3Jl IHRoaXMgcGF0Y2ggY3B1X3RpbWUgaXMgZmlsbGVkIGxpa2UgdGhpczoKPiAKPiBDUFUgMDogTTAg LCBUMAo+IENQVSAxOiBNMSAsIFQxCj4gQ1BVIDI6IE0yICwgVDIKPiAKPiBXaXRoIHRoaXMgcGF0 Y2ggaXQgZ29lcyBsaWtlOgo+IAo+IENQVSAwOiBMMCAsIFQwCj4gQ1BVIDE6IEwxID0gKE0xICsg KEwgLSBNKSksIFQxCj4gQ1BVIDI6IEwyID0gKE0yICsgKEwgLSBNKSksIFQyCj4gCj4gR2l2ZW4g dGhhdCwKPiAKPiAxKSB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcyBhcmUgcmVzcGVjdGl2ZWx5 IGxvY2FsIHN0aW1lLCB0c2MgdGhhdCBhcmUKPiB3cml0dGVuIGluIGNwdV90aW1lCj4gMikgTTIg PiBNMSA+IE0wIGFzIHZhbHVlcyByZWFkIGZyb20gcGxhdGZvcm0gdGltZXIuCj4gMykgTCBhbmQg TSBzb2xlbHkgYXMgdmFsdWVzIGNhbGN1bGF0ZWQgb24gQ1BVIGRvaW5nIEFQIGJyaW5ndXAuCj4g Cj4gQWZ0ZXIgdGhpcyBzZWVkaW5nLCBsb2NhbF90aW1lX2NhbGlicmF0aW9uIHdpbGwgaW5jcmVt ZW50IHRoZSBkZWx0YXMgYmV0d2Vlbgo+IGNhbGlicmF0aW9ucyBldmVyeSBzZWNvbmQsIGJhc2Vk IGVudGlyZWx5IG9uIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIFRTQy4gCj4gQWx0b3VnaAo+ IEkgc2VlIHR3byBpc3N1ZXMgaGVyZTogMSkgYXBwZW5kaW5nIHRvIGEgbmV3IHJlYWQgZnJvbSBw bGF0Zm9ybSB0aW1lIHdoaWNoIAo+IG1pZ2h0Cj4gYWxyZWFkeSBiZSBvZmZzZXR0ZWQgYnkgdGhl IG9uZSB0YWtlbiBmcm9tIHRoZSBib290IENQVSBhbmQgMikgdGhlIHNrZXcgeW91IAo+IGNhbGN1 bGF0ZQo+IGRvbid0IGFjY291bnQgZm9yIHRoZSBjdXJyZW50IHRzYy4gV2hpY2ggbGVhZHMgdG8g bG9jYWwgc3RpbWUgYW5kIHRzYyBzdGlsbCAKPiBub3QgYmVpbmcKPiBhIHZhbGlkIHBhaXIgZm9y IHRoZSBzZWNvbmRhcnkgQ1BVcy4KClRoYXQncyB0cnVlIGlmIHBsYXRmb3JtIGNsb2NrIGFuZCBU U0MsIGV2ZW4gb3ZlciB0aGlzIHNtYWxsIHRpbWUKcGVyaW9kLCBkaXZlcmdlIGVub3VnaC4gVGhl IGNhbGN1bGF0ZSBsb2NhbCB0aW1lIGluZGVlZCBpcyBvbmx5IGFuCmFwcHJveGltYXRpb24gdG8g bWF0Y2ggdGhlIFRTQyBqdXN0IHJlYWQuCgo+IFNvIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRoYXQg Cj4gZ2V0X3NfdGltZShTMCkgb24KPiBDUFUwIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgZ2V0 X3NfdGltZShTMSkgb24gQ1BVMSBbUzEgPiBTMF0gZW5kcyB1cCAKPiByZXR1cm5pbmcgYQo+IHZh bHVlIGJhY2t3YXJkcyBJT1cgTDAgKyBzY2FsZShTMCAtIFQwKSBpcyBiaWdnZXIgdGhhbiBMMSAr IHNjYWxlKFMxIC0gVDEpLiAKPiBUaGF0IGlzCj4gaW5kZXBlbmRlbnRseSBvZiB0aGUgZGVsdGFz IGJlaW5nIGFkZGVkIG9uIGV2ZXJ5IGNhbGlicmF0aW9uLgo+IAo+IFNvIGhvdyBhYm91dCB3ZSBk byB0aGUgc2VlZGluZyBpbiBhbm90aGVyIHdheT8KPiAKPiAxKSBSZWx5aW5nIG9uIGluZGl2aWR1 YWwgQ1BVIFRTQyBsaWtlIHlvdSBkbyBvbiBDUFUgMDoKPiAKPiAgICAgIHQtPnN0YW1wLm1hc3Rl cl9zdGltZSA9IG5vdzsKPiArICAgIHQtPnN0YW1wLmxvY2FsX3RzYyA9IDA7Cj4gKyAgICB0LT5z dGFtcC5sb2NhbF9zdGltZSA9IDA7Cj4gKwo+ICAgICAgaWYgKCBib290X2NwdV9oYXMoWDg2X0ZF QVRVUkVfQ09OU1RBTlRfVFNDKSApCj4gICAgICB7Cj4gICAgICAgICAgbm93ID0gZ2V0X3NfdGlt ZV9maXhlZCh0c2MpOwo+ICAgICAgfQoKQXMgc2FpZCBiZWZvcmUgZWxzZXdoZXJlLCBzdWNoIGEg bW9kZWwgY2FuIG9ubHkgd29yayBpZiBhbGwgVFNDcwpzdGFydCB0aWNraW5nIGF0IHRoZSBzYW1l IHRpbWUuIFRoZSBsYXRlc3QgdGhpcyBhc3N1bXB0aW9uIGJyZWFrcwppcyB3aGVuIGEgQ1BVIGdl dHMgcGh5c2ljYWxseSBob3RwbHVnZ2VkLgoKPiBPciAyKSB0YWtpbmcgaW50byBhY2NvdW50IHRo ZSBza2V3IGJldHdlZW4gcGxhdGZvcm0gdGltZXIgYW5kIHRzYyB3ZSB0YWtlIG9uCj4gaW5pdF9w ZXJjcHVfdGltZS4gRGlmZiBiZWxvdyBiYXNlZCBvbiB0aGlzIHNlcmllczoKPiAKPiBAQCAtMTM5 NCwxMSArMTUwOCwxNCBAQCB2b2lkIGluaXRfcGVyY3B1X3RpbWUodm9pZCkKPiAgICAgIHQtPnRz Y19zY2FsZSA9IHBlcl9jcHUoY3B1X3RpbWUsIDApLnRzY19zY2FsZTsKPiAKPiAgICAgIGxvY2Fs X2lycV9zYXZlKGZsYWdzKTsKPiAtICAgIG5vdyA9IHJlYWRfcGxhdGZvcm1fc3RpbWUoKTsKPiAr ICAgIG5vdyA9IGFwX2JyaW5ndXBfcmVmLm1hc3Rlcl9zdGltZTsKPiAgICAgIHRzYyA9IHJkdHNj X29yZGVyZWQoKTsKPiAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKPiAKPiAgICAgIHQt PnN0YW1wLm1hc3Rlcl9zdGltZSA9IG5vdzsKPiArICAgIHQtPnN0YW1wLmxvY2FsX3RzYyA9IGJv b3RfdHNjX3N0YW1wOwoKQWdhaW4gLSB0aGlzIGlzIGludmFsaWQuIEl0IGluZGVlZCB3b3JrcyBm aW5lIG9uIGEgc2luZ2xlIHNvY2tldCBzeXN0ZW0KKHdoZXJlIGFsbCBUU0NzIHN0YXJ0IHRpY2tp bmcgYXQgdGhlIHNhbWUgdGltZSksIGFuZCBnaXZlcyByZWFsbHkgZ29vZApyZXN1bHRzLiBCdXQg ZHVlIHRvIGhvdHBsdWcgKGFuZCB0byBhIGxlc3NlciBkZWdyZWUgbXVsdGktc29ja2V0LCBidXQK bGlrZWx5IHRvIGEgc29tZXdoYXQgaGlnaGVyIGRlZ3JlZSBtdWx0aS1ub2RlLCBzeXN0ZW1zKSB3 ZSBqdXN0IGNhbid0CnVzZSBib290X3RzY19zdGFtcCBhcyByZWZlcmVuY2UgZm9yIEFQcy4KCj4g KyAgICB0LT5zdGFtcC5sb2NhbF9zdGltZSA9IDA7Cj4gKwo+IAo+ICAgICAgLyoKPiAgICAgICAq IFRvIGF2b2lkIGEgZGlzY29udGludWl0eSAoVFNDIGFuZCBwbGF0Zm9ybSBjbG9jayBjYW4ndCBi ZSBleHBlY3RlZAo+ICAgICAgICogdG8gYmUgaW4gcGVyZmVjdCBzeW5jKSwgaW5pdGlhbGl6YXRp b24gaGVyZSBuZWVkcyB0byBtYXRjaCB1cCB3aXRoCj4gQEAgLTE0MDYsMTAgKzE1MjMsMTIgQEAg dm9pZCBpbml0X3BlcmNwdV90aW1lKHZvaWQpCj4gICAgICAgKi8KPiAgICAgIGlmICggYm9vdF9j cHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgKQo+ICAgICAgewo+ICsgICAgICAgIHU2 NCBzdGltZSA9IGdldF9zX3RpbWVfZml4ZWQodHNjKTsKPiArCj4gICAgICAgICAgaWYgKCBzeXN0 ZW1fc3RhdGUgPCBTWVNfU1RBVEVfc21wX2Jvb3QgKQo+IC0gICAgICAgICAgICBub3cgPSBnZXRf c190aW1lX2ZpeGVkKHRzYyk7Cj4gKyAgICAgICAgICAgIG5vdyA9IHN0aW1lOwo+ICAgICAgICAg IGVsc2UKPiAtICAgICAgICAgICAgbm93ICs9IGFwX2JyaW5ndXBfcmVmLmxvY2FsX3N0aW1lIC0g YXBfYnJpbmd1cF9yZWYubWFzdGVyX3N0aW1lOwo+ICsgICAgICAgICAgICBub3cgKz0gc3RpbWUg LSBhcF9icmluZ3VwX3JlZi5tYXN0ZXJfc3RpbWU7CgpUaGF0IHNlZW1zIHRvIGNvbnRyYWRpY3Qg eW91ciBkZXNpcmUgdG8ga2VlcCBvdXQgb2YgYWxsIGNhbGN1bGF0aW9ucwp0aGUgc2tldyBiZXR3 ZWVuIHBsYXRmb3JtIHRpbWVyIGFuZCBUU0MuCgo+ICAgICAgfQo+IAo+IFNlY29uZCBvcHRpb24g Zm9sbG93cyBhIHNpbWlsYXIgdGhpbmtpbmcgb2YgdGhpcyBwYXRjaCwgYnV0IG9uIGJvdGggd2F5 cyB0aGUKPiBsb2NhbF9zdGltZSB3aWxsIG1hdGNoIHRoZSB0c2Mgb24gaW5pdF9wZXJjcHVfdGlt ZSwgdGh1cyBiZWluZyBhIG1hdGNoZWQgCj4gcGFpci4gSSBoYXZlCj4gYSB0ZXN0IHNpbWlsYXIg dG8gY2hlY2tfdHNjX3dhcnAgYnV0IHdpdGggZ2V0X3NfdGltZSgpIGFuZCBJIG5vIGxvbmdlciAK PiBvYnNlcnZlIHRpbWUKPiBnb2luZyBiYWNrd2FyZHMuIEJ1dCB3aXRob3V0IHRoZSBhYm92ZSBJ IHN0aWxsIG9ic2VydmUgaXQgZXZlbiBvbiBzaG9ydCAKPiBwZXJpb2RzLgoKUmlnaHQgLSBJJ20g bm90IGNsYWltaW5nIHRoZSBzZXJpZXMgZWxpbWluYXRlcyBhbGwgYmFja3dhcmRzIG1vdmVzLgpC dXQgSSBzaW1wbHkgY2FuJ3Qgc2VlIGEgbW9kZWwgdG8gZnVsbHkgZWxpbWluYXRlIHRoZW0uIEku ZS4gbXkgcGxhbgp3YXMsIG9uY2UgdGhlIGJhY2t3YXJkcyBtb3ZlcyBhcmUgc21hbGwgZW5vdWdo LCB0byBtYXliZQppbmRlZWQgY29tcGVuc2F0ZSB0aGVtIGJ5IG1haW50YWluaW5nIGEgZ2xvYmFs IHZhcmlhYmxlIHRyYWNraW5nCnRoZSBtb3N0IHJlY2VudGx5IHJldHVybmVkIHZhbHVlLiBUaGVy ZSBhcmUgaXNzdWVzIHdpdGggc3VjaCBhbgphcHByb2FjaCB0b28sIHRob3VnaDogSFQgZWZmZWN0 cyBjYW4gcmVzdWx0IGluIG9uZSBoeXBlcnRocmVhZAptYWtpbmcgaXQganVzdCBwYXN0IHRoYXQg Y2hlY2sgb2YgdGhlIGdsb2JhbCwgdGhlbiBoYXJkd2FyZQpzd2l0Y2hpbmcgdG8gdGhlIG90aGVy IGh5cGVydGhyZWFkLCBOT1coKSBwcm9kdWNpbmcgYSBzbGlnaHRseQpsYXJnZXIgdmFsdWUgdGhl cmUsIGFuZCBoYXJkd2FyZSBzd2l0Y2hpbmcgYmFjayB0byB0aGUgZmlyc3QKaHlwZXJ0aHJlYWQg b25seSBhZnRlciB0aGUgc2Vjb25kIG9uZSBjb25zdW1lZCB0aGUgcmVzdWx0IG9mCk5PVygpLiBE YXJpbydzIHVzZSB3b3VsZCBiZSB1bmFmZmVjdGVkIGJ5IHRoaXMgYWl1aSwgYXMgaGlzIE5PVygp Cmludm9jYXRpb25zIGFyZSBnbG9iYWxseSBzZXJpYWxpemVkIHRocm91Z2ggYSBzcGlubG9jaywg YnV0IGFyYml0cmFyeQpOT1coKSBpbnZvY2F0aW9ucyBvbiB0d28gaHlwZXJ0aHJlYWRzIGNhbid0 IGJlIG1hZGUgc3VjaCB0aGF0CnRoZSBpbnZva2luZyBwYXJ0eSBjYW4gYmUgZ3VhcmFudGVlZCB0 byBzZWUgc3RyaWN0bHkgbW9udG9uaWMKdmFsdWVzLgoKQW5kIGJ0dy4sIHNpbWlsYXIgY29uc2lk ZXJhdGlvbnMgYXBwbHkgZm9yIHR3byBmdWxseSBpbmRlcGVuZGVudApDUFVzLCBpZiBvbmUgcnVu cyBhdCBhIG11Y2ggaGlnaGVyIFAtc3RhdGUgdGhhbiB0aGUgb3RoZXIgKGkuZS4KdGhlIGZhc3Rl ciBvbmUgY291bGQgb3ZlcnRha2UgdGhlIHNsb3dlciBvbmUgYmV0d2VlbiB0aGUKbW9udG9uaWNp dHkgY2hlY2sgaW4gTk9XKCkgYW5kIHRoZSBjYWxsZXJzIGNvbnN1bWluZyB0aGUgcmV0dXJuZWQK dmFsdWVzKS4gU28gaW4gdGhlIGVuZCBJJ20gbm90IHN1cmUgaXQncyB3b3J0aCB0aGUgcGVyZm9y bWFuY2UgaGl0CnN1Y2ggYSBnbG9iYWwgbW9udG9uaWNpdHkgY2hlY2sgd291bGQgaW5jdXIsIGFu ZCB0aGVyZWZvcmUgSSBkaWRuJ3QKbWFrZSBhIHJlc3BlY3RpdmUgcGF0Y2ggcGFydCBvZiB0aGlz IHNlcmllcy4KCkphbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK