From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v9 06/11] x86/entry: Organise the use of MSR_SPEC_CTRL at each entry/exit point Date: Fri, 19 Jan 2018 13:36:17 +0000 Message-ID: <1fe16c0c-7c91-f43f-c3b6-47e82dcd2909@citrix.com> References: <1516290370-14958-1-git-send-email-andrew.cooper3@citrix.com> <1516290370-14958-7-git-send-email-andrew.cooper3@citrix.com> <5A61E7E702000078001A0553@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <5A61E7E702000078001A0553@prv-mh.provo.novell.com> Content-Language: en-GB List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Jan Beulich Cc: Xen-devel List-Id: xen-devel@lists.xenproject.org T24gMTkvMDEvMTggMTE6NDMsIEphbiBCZXVsaWNoIHdyb3RlOgo+Pj4+IE9uIDE4LjAxLjE4IGF0 IDE2OjQ2LCA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4gd3JvdGU6Cj4+IFdlIG5lZWQgdG8g YmUgYWJsZSB0byBlaXRoZXIgc2V0IG9yIGNsZWFyIElCUlMgaW4gWGVuIGNvbnRleHQsIGFzIHdl bGwgYXMKPj4gcmVzdG9yZSBhcHByb3ByaWF0ZSBndWVzdCB2YWx1ZXMgaW4gZ3Vlc3QgY29udGV4 dC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBpbgo+PiBhc20teDg2L3NwZWNfY3RybF9hc20uaCBm b3IgZGV0YWlscy4KPj4KPj4gV3JpdGVzIHRvICVjcjMgYXJlIHNsb3dlciB3aGVuIFNQRUNfQ1RS TC5JQlJTIGlzIHNldCwgc28gdGhlCj4+IFNQRUNfQ1RSTF97RU5UUlkvRVhJVH0qIHBvc2l0aW9u aW5nIGlzIGltcG9ydGFudCwgYW5kIG9wdGltaXNlZCBmb3IgdGhlCj4+IGV4cGVjdGVkIGNvbW1v biBjYXNlIG9mIFhlbiBub3QgdXNpbmcgSUJSUyBpdHNlbGYuCj4gQW5kIHRoaXMgZXhwZWN0YXRp b24gaXMgYmVjYXVzZSBvbiBwcmUtU2t5bGFrZSB3ZSdyZSBmaW5lIHVzaW5nIGp1c3QKPiByZXRw b2xpbmUsIGFuZCB3ZSBleHBlY3QgcG9zdC1Ta3lsYWtlIHRvIG5vdCBoYXZlIHRoZSBpc3N1ZSBh bnltb3JlPwo+IFN1Y2ggcmVhc29uaW5nIHdvdWxkIGhlbHAgYmVpbmcgc3BlbGxlZCBvdXQgaGVy ZS4KCkthYnkgTGFrZSBpcyBpbiB0aGUgc2FtZSBidWNrZXQgYXMgU2t5bGFrZS7CoCBDb2ZmZWUg TGFrZSBhbmQgQ2Fubm9uIExha2UKYXJlIHVua25vd24gcXVhbnRpdGllcy4KCkludGVsIGhhdmUg c3RhdGVkIHRoYXQgdGhlIGV4cGVjdCB0aGVzZSBpc3N1ZXMgdG8gYmUgcmVzb2x2ZWQgb24gdGhl CnNhbWUgaGFyZHdhcmUgYXMgQ0VULCBhcyByZXRwb2xpbmUgaXMgYSBkZWxpYmVyYXRlIFJPUC1n YWRnZXQgYW5kIHdvbid0CmZ1bmN0aW9uIHdpdGggQ29udHJvbGZsb3cgRW5mb3JjZW1lbnQgVGVj aG5vbG9neSBlbmFibGVkLgoKQXMgZmFyIGFzIEknbSBhd2FyZSwgQ0VUIGlzIGV4cGVjdGVkIGlu IEljZSBMYWtlLCBidXQgd2hvIGtub3dzIHdoYXQKdGhpcyBpc3N1ZSBoYXMgZG9uZSB0byBJbnRl bCdzIHJlbGVhc2Ugc2NoZWR1bGUuCgo+IEFzIHRvIHRoZSBiZWhhdmlvciBvZiBDUjMgd3JpdGVz IC0gaXMgdGhpcyB3cml0dGVuIGRvd24gYW55d2hlcmUgaW4KPiBJbnRlbCdzIGFuZC9vciBBTUQn cyBkb2NzPyBPciBlbHNlLCBob3cgZG8geW91IGtub3cgdGhpcyBpcyB1bmlmb3JtbHkKPiB0aGUg Y2FzZSBvbiBhbGwgcGFzdCwgY3VycmVudCwgYW5kIGZ1dHVyZSBoYXJkd2FyZT8KCkFNRCBkb24n dCBpbXBsZW1lbnQgSUJSUywgc28gdGhpcyBpc24ndCBhcHBsaWNhYmxlIHRvIHRoZW0uCgpJJ20g bm90IHN1cmUgaWYgdGhpcyBpcyBzdGF0ZWQgaW4gYW55IHB1YmxpYyBkb2N1bWVudGF0aW9uLsKg IEknbGwgc2VlCmFib3V0IHBva2luZyBwZW9wbGUuLi4KCklycmVzcGVjdGl2ZSwgaXQgY2FuIGJl IGRlbW9uc3RyYXRlZCB0cml2aWFsbHkgd2l0aCBzb21lIHRpbWluZyBhbmFseXNpcy4KCj4+IEBA IC05OSw2ICsxMDYsMTAgQEAgVU5MSUtFTFlfRU5EKHJlYWxtb2RlKQo+PiAgLkx2bXhfdm1lbnRy eV9mYWlsOgo+PiAgICAgICAgICBzdGkKPj4gICAgICAgICAgU0FWRV9BTEwKPj4gKwo+PiArICAg ICAgICBTUEVDX0NUUkxfRU5UUllfRlJPTV9QViAvKiBSZXE6ICVyc3A9cmVncy9jcHVpbmZvIENs b2I6IGFjZCAqLwo+IEkgdGhpbmsgdGhlIHVzZSBvZiB0aGUgUFYgdmFyaWFudCBoZXJlIHJlcXVp cmVzIGEgY29tbWVudC4KCk9oLsKgIEl0IHVzZWQgdG8gaGF2ZSBvbmUuLi7CoCBJJ2xsIHRyeSB0 byBmaW5kIGl0LgoKPgo+PiBAQCAtMTQyLDYgKzE0NiwxMyBAQCBFTlRSWShjb21wYXRfcmVzdG9y ZV9hbGxfZ3Vlc3QpCj4+ICAgICAgICAgIC5wb3BzZWN0aW9uCj4+ICAgICAgICAgIG9yICAgICRY ODZfRUZMQUdTX0lGLCVyMTEKPj4gICAgICAgICAgbW92ICAgJXIxMWQsVVJFR1NfZWZsYWdzKCVy c3ApCj4+ICsKPj4gKyAgICAgICAgbW92IFZDUFVfYXJjaF9tc3IoJXJieCksICVyYXgKPj4gKyAg ICAgICAgbW92IFZDUFVNU1Jfc3BlY19jdHJsX3JhdyglcmF4KSwgJWVheAo+IEkgdW5kZXJzdGFu ZCB0aGF0IGl0J3MgY29kZSBsaWtlIHRoaXMgd2hpY2ggaXMgbWlzc2luZyBmcm9tIHRoZSBTVk0K PiBhbmQgVk1YIGV4aXQgcGF0aHMuCgpDb3JyZWN0LgoKPgo+PiBAQCAtNzI5LDYgKzc2MCw5IEBA IEVOVFJZKG5taSkKPj4gIGhhbmRsZV9pc3RfZXhjZXB0aW9uOgo+PiAgICAgICAgICBTQVZFX0FM TCBDTEFDCj4+ICAKPj4gKyAgICAgICAgU1BFQ19DVFJMX0VOVFJZX0ZST01fSU5UUiAvKiBSZXE6 ICVyc3A9cmVncywgQ2xvYjogYWNkICovCj4+ICsgICAgICAgIC8qIFdBUk5JTkchIGByZXRgLCBg Y2FsbCAqYCwgYGptcCAqYCBub3Qgc2FmZSBiZWZvcmUgdGhpcyBwb2ludC4gKi8KPiBGb2xsb3dp bmcgbXkgY29uc2lkZXJhdGlvbnMgdG93YXJkcyBhbHRlcm5hdGl2ZSBwYXRjaGluZyB0bwo+IGVs aW1pbmF0ZSBhcyBtdWNoIG92ZXJoZWFkIGFzIHBvc3NpYmxlIGZyb20gdGhlIE1lbHRkb3duCj4g YmFuZC1haWQgaW4gY2FzZSBpdCBpcyBiZWluZyBkaXNhYmxlZCwgSSdtIHJhdGhlciBoZXNpdGFu dCB0byBzZWUgYW55Cj4gcGF0Y2hhYmxlIGNvZGUgYmVpbmcgaW50cm9kdWNlZCBpbnRvIHRoZSBO TUkvI01DIGVudHJ5IHBhdGhzCj4gd2l0aG91dCB0aGUgcGF0Y2hpbmcgbG9naWMgZmlyc3QgYmVp bmcgbWFkZSBzYWZlIGluIHRoaXMgcmVnYXJkLgo+IEV4Y2VwdGlvbnMgY29taW5nIGhlcmUgYXJl bid0IHZlcnkgZnJlcXVlbnQgKGV4Y2VwdCBwZXJoYXBzIG9uCj4gaGFyZHdhcmUgYWJvdXQgdG8g ZGllKSwgc28gdGhlIHBhdGggaXNuJ3QgcGVyZm9ybWFuY2UgY3JpdGljYWwuCj4gVGhlcmVmb3Jl IEkgdGhpbmsgd2Ugc2hvdWxkIHRyeSB0byBhdm9pZCBhbnkgcGF0Y2hpbmcgaGVyZSwgYW5kCj4g anVzdCBjb25kaXRpb25hbHMgaW5zdGVhZC4gVGhpcyBpbiBmYWN0IGlzIG9uZSBvZiB0aGUgcmVh c29ucyB3aHkgSQo+IGRpZG4ndCB3YW50IHRvIG1hY3JvLWl6ZSB0aGUgYXNzZW1ibHkgYWRkaXRp b25zIGRvbmUgaW4gdGhlCj4gTWVsdGRvd24gYmFuZC1haWQuCj4KPiBJIGRvIHJlYWxpemUgdGhh dCB0aGlzIHRoZW4gYWxzbyBhZmZlY3RzIHRoZSBleGl0LXRvLVhlbiBwYXRoLAo+IHdoaWNoIEkg YWdyZWUgaXMgbGVzcyBkZXNpcmFibGUgdG8gdXNlIGNvbmRpdGlvbmFscyBvbi4KCldoaWxlIEkg YWdyZWUgdGhhdCBvdXIgbGFjayBvZiBJU1Qtc2FmZSBwYXRjaGluZyBpcyBhIHByb2JsZW0sIHRo ZXNlCmFsdGVybmF0aXZlIHBvaW50cyBhcmUgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBOTUkgYW5k IE1DRSBwYXRocywgYW5kCm5lZWQgdG8gYmUuwqAgQXMgYSByZXN1bHQsIHRoZSBERiBoYW5kbGVy IGlzIGluIG5vIHdvcnNlIG9mIGEgcG9zaXRpb24uwqAKQXMgYSBwZXJmZWN0IGV4YW1wbGUsIG9i c2VydmUgdGhlIENMQUMgaW4gY29udGV4dC4KCkkgY291bGQgcGVyaGFwcyBiZSB0YWxrZWQgaW50 byBtYWtpbmcgYSBTUEVDX0NUUkxfRU5UUllfRlJPTV9JU1QgdmFyaWFudAp3aGljaCBkb2Vzbid0 IHVzZSBhbHRlcm5hdGl2ZXMgKGJ1dCBJTU8gdGhpcyBpcyBwb2ludGxlc3MgaW4gdGhlCnByZXNl bmNlIG9mIENMQUMpLCBidXQgc3RpbGwgZG9uJ3QgdGhpbmsgaXQgaXMgcmVhc29uYWJsZSB0byB0 cmVhdCBERgpkaWZmZXJlbnRseSB0byBOTUkvTUNFLgoKPgo+PiAtLS0gL2Rldi9udWxsCj4+ICsr KyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvc3BlY19jdHJsX2FzbS5oCj4+IEBAIC0wLDAgKzEsMjI3 IEBACj4+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4+ICsgKiBpbmNsdWRlL2FzbS14ODYvc3Bl Y19jdHJsLmgKPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPj4g KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKPj4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3 LTIwMTggQ2l0cml4IFN5c3RlbXMgTHRkLgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX19YODZf U1BFQ19DVFJMX0FTTV9IX18KPj4gKyNkZWZpbmUgX19YODZfU1BFQ19DVFJMX0FTTV9IX18KPj4g Kwo+PiArI2lmZGVmIF9fQVNTRU1CTFlfXwo+PiArI2luY2x1ZGUgPGFzbS9tc3IuaD4KPj4gKwo+ PiArLyoKPj4gKyAqIFNhdmluZyBhbmQgcmVzdG9yaW5nIE1TUl9TUEVDX0NUUkwgc3RhdGUgaXMg YSBsaXR0bGUgdHJpY2t5Lgo+PiArICoKPj4gKyAqIFdlIHdhbnQgdGhlIGd1ZXN0cyBjaG9pY2Ug b2YgU1BFQ19DVFJMIHdoaWxlIGluIGd1ZXN0IGNvbnRleHQsIGFuZCBJQlJTCj4+ICsgKiAoc2V0 IG9yIGNsZWFyLCBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlKSB3aGlsZSBydW5uaW5nIGluIFhl biBjb250ZXh0Lgo+IFRvIG1lIHRoaXMgY29udGludWVzIHRvIGJlIHNvbWV3aGF0IHN0cmFuZ2Ug dG8gcmVhZC4gT25lIHBvc3NpYmlsaXR5Cj4gdG8gaW1wcm92ZSBpdCB3b3VsZCBiZSB0byBtb3Zl IHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzIGFmdGVyICJzZXQgb3IKPiBjbGVhciIsIGFub3RoZXIg d291bGQgYmUgdG8gc2F5ICIuLi4sIGFuZCBYZW4ncyBjaG9pY2UgKHNldCBvciAuLi4iLgo+IEJ1 dCB5b3UncmUgdGhlIG5hdGl2ZSBzcGVha2VyLCBzbyBJJ20gb3BlbiB0byBvdGhlciBhbHRlcm5h dGl2ZXMgeW91Cj4gbWF5IGNvbnNpZGVyIGV2ZW4gYmV0dGVyLgoKWW91ciBzdWdnZXN0aW9uIGlz IGNsZWFyZXIuwqAgSSdsbCBib3Jyb3cgdGhhdC4KCj4+ICsgKiBUaGVyZWZvcmUsIGEgc2ltcGxp c3RpYyBhbGdvcml0aG0gaXM6Cj4+ICsgKgo+PiArICogIC0gU2V0L2NsZWFyIElCUlMgb24gZW50 cnkgdG8gWGVuCj4+ICsgKiAgLSBTZXQgdGhlIGd1ZXN0cycgY2hvaWNlIG9uIGV4aXQgdG8gZ3Vl c3QKPj4gKyAqICAtIExlYXZlIFNQRUNfQ1RSTCB1bmNoYW5nZWQgb24gZXhpdCB0byB4ZW4KPj4g KyAqCj4+ICsgKiBUaGVyZSBhcmUgdHdvIGNvbXBsaWNhdGluZyBmYWN0b3JzOgo+PiArICogIDEp IEhWTSBndWVzdHMgY2FuIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgTVNSLCBzbyBpdCBjYW4g Y2hhbmdlCj4+ICsgKiAgICAgYmVoaW5kIFhlbidzIGJhY2suCj4+ICsgKiAgMikgQW4gTk1JIG9y IE1DRSBjYW4gaW50ZXJydXB0IGF0IGFueSBwb2ludCwgaW5jbHVkaW5nIGVhcmx5IGluIHRoZSBl bnRyeQo+PiArICogICAgIHBhdGgsIG9yIGxhdGUgaW4gdGhlIGV4aXQgcGF0aCBhZnRlciByZXN0 b3JpbmcgdGhlIGd1ZXN0IHZhbHVlLiAgVGhpcwo+PiArICogICAgIHdpbGwgY29ycnVwdCB0aGUg Z3Vlc3QgdmFsdWUuCj4+ICsgKgo+PiArICogRmFjdG9yIDEgaXMgZGVhbHQgd2l0aCBieSByZWx5 aW5nIG9uIE5NSXMvTUNFcyBiZWluZyBibG9ja2VkIGltbWVkaWF0ZWx5Cj4+ICsgKiBhZnRlciBW TUVYSVQuICBUaGUgVk1FWElULXNwZWNpZmljIGNvZGUgcmVhZHMgTVNSX1NQRUNfQ1RSTCBhbmQg dXBkYXRlcwo+PiArICogY3VycmVudCBiZWZvcmUgbG9hZGluZyBYZW4ncyBNU1JfU1BFQ19DVFJM IHNldHRpbmcuCj4+ICsgKgo+PiArICogRmFjdG9yIDIgaXMgaGFyZGVyLiAgV2UgbWFpbnRhaW4g YSBzaGFkb3dfc3BlY19jdHJsIHZhbHVlLCBhbmQKPj4gKyAqIHVzZV9zaGFkb3dfc3BlY19jdHJs IGJvb2xlYW4gcGVyIGNwdS4gIFRoZSBzeW5jaHJvbm91cyB1c2UgaXM6Cj4+ICsgKgo+PiArICog IDEpIFN0b3JlIGd1ZXN0IHZhbHVlIGluIHNoYWRvd19zcGVjX2N0cmwKPj4gKyAqICAyKSBTZXQg dXNlX3NoYWRvd19zcGVjX2N0cmwgYm9vbGVhbgo+PiArICogIDMpIExvYWQgZ3Vlc3QgdmFsdWUg aW50byBNU1JfU1BFQ19DVFJMCj4+ICsgKiAgNCkgRXhpdCB0byBndWVzdAo+PiArICogIDUpIEVu dHJ5IGZyb20gZ3Vlc3QKPj4gKyAqICA2KSBDbGVhciB1c2Vfc2hhZG93X3NwZWNfY3RybCBib29s ZWFuCj4gNykgTG9hZCBYZW4gdmFsdWUgaW50byBNU1JfU1BFQ19DVFJMCj4KPiAoSXQgaXMgaW1w b3J0YW50IHRvIHNwZWxsIG91dCB0aGF0IHRoZSBNU1Igd3JpdGUgaW4gX2JvdGhfIGNhc2VzCj4g bmVlZHMgdG8gY29tZSBhZnRlciB0aGUgd3JpdGUgb2YgdGhlIGJvb2xlYW4uKQoKT2suCgo+Cj4+ ICsubWFjcm8gRE9fU1BFQ19DVFJMX0VOVFJZX0ZST01fVk1FWElUIGlicnNfdmFsOnJlcQo+PiAr LyoKPj4gKyAqIFJlcXVpcmVzICVyYng9Y3VycmVudCwgJXJzcD1yZWdzL2NwdWluZm8KPj4gKyAq IENsb2JiZXJzICVyYXgsICVyY3gsICVyZHgKPj4gKyAqCj4+ICsgKiBUaGUgY29tbW9uIGNhc2Ug aXMgdGhhdCBhIGd1ZXN0IGhhcyBkaXJlY3QgYWNjZXNzIHRvIE1TUl9TUEVDX0NUUkwsIGF0Cj4+ ICsgKiB3aGljaCBwb2ludCB3ZSBuZWVkIHRvIHNhdmUgdGhlIGd1ZXN0IHZhbHVlIGJlZm9yZSBz ZXR0aW5nIElCUlMgZm9yIFhlbi4KPj4gKyAqIFVuaWxhdGVyYWxseSBzYXZpbmcgdGhlIGd1ZXN0 IHZhbHVlIGlzIHNob3J0ZXIgYW5kIGZhc3RlciB0aGFuIGNoZWNraW5nLgo+PiArICovCj4+ICsg ICAgbW92ICRNU1JfU1BFQ19DVFJMLCAlZWN4Cj4+ICsgICAgcmRtc3IKPj4gKwo+PiArICAgIC8q IFN0YXNoIHRoZSB2YWx1ZSBmcm9tIGhhcmR3YXJlLiAqLwo+PiArICAgIG1vdiBWQ1BVX2FyY2hf bXNyKCVyYngpLCAlcmR4Cj4+ICsgICAgbW92ICVhbCwgVkNQVU1TUl9zcGVjX2N0cmxfcmF3KCVy ZHgpCj4gUGF0Y2ggMyBtYWtlcyB0aGlzIGEgMzItYml0IGZpZWxkIG5vdyAtIHdoeSBzdGlsbCAl YWw/CgpPdmVyc2lnaHQuCgo+Cj4+ICsubWFjcm8gRE9fU1BFQ19DVFJMX0VOVFJZIG1heWJleGVu OnJlcSBpYnJzX3ZhbDpyZXEKPj4gKy8qCj4+ICsgKiBSZXF1aXJlcyAlcnNwPXJlZ3MgKGFsc28g Y3B1aW5mbyBpZiAhbWF5YmV4ZW4pCj4+ICsgKiBDbG9iYmVycyAlcmF4LCAlcmN4LCAlcmR4Cj4+ ICsgKgo+PiArICogUFYgZ3Vlc3RzIGNhbid0IHVwZGF0ZSBNU1JfU1BFQ19DVFJMIGJlaGluZCBY ZW4ncyBiYWNrLCBzbyBubyBuZWVkIHRvIHJlYWQKPj4gKyAqIGl0IGJhY2suICBFbnRyaWVzIGZy b20gZ3Vlc3QgY29udGV4dCBuZWVkIHRvIGNsZWFyIFNQRUNfQ1RSTCBzaGFkb3dpbmcsCj4+ICsg KiB3aGlsZSBlbnRyaWVzIGZyb20gWGVuIG11c3QgbGVhdmUgc2hhZG93aW5nIGluIGl0cyBjdXJy ZW50IHN0YXRlLgo+PiArICovCj4+ICsgICAgbW92ICRNU1JfU1BFQ19DVFJMLCAlZWN4Cj4+ICsK Pj4gKyAgICAuaWYgXG1heWJleGVuCj4+ICsgICAgICAgIHRlc3RiICQzLCBVUkVHU19jcyglcnNw KQo+PiArICAgICAgICBqeiAuTFxAX2VudHJ5X2Zyb21feGVuCj4+ICsgICAgLmVuZGlmCj4+ICsK Pj4gKyAgICAvKgo+PiArICAgICAqIENsZWFyIFNQRUNfQ1RSTCBzaGFkb3dpbmcgKmJlZm9yZSog bG9hZGluZyBYZW4ncyB2YWx1ZS4gIElmIGVudGVyaW5nCj4+ICsgICAgICogZnJvbSBhIHBvc3Np Ymx5LXhlbiBjb250ZXh0LCAlcnNwIGRvZXNuJ3QgbmVjZXNzYXJpbHkgYWxpYXMgdGhlIGNwdWlu Zm8KPj4gKyAgICAgKiBibG9jayBzbyBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIGRpcmVjdGx5Lgo+ PiArICAgICAqLwo+PiArICAgIC5pZiBcbWF5YmV4ZW4KPj4gKyAgICAgICAgR0VUX1NUQUNLX0VO RChkeCkKPiBJbiBhbG1vc3QgYWxsIGNhc2VzIChhbmQgcGVyaGFwcyBpbiBhbGwgb25lcyB3aXRo IG1heWJleGVuIHNldCkgdGhlCj4gbWFjcm8gaW52b2NhdGlvbiBzaXRzIHJpZ2h0IGFoZWFkIG9m IGEgR0VUX1NUQUNLX0JBU0UoKS4gSWYgeW91Cj4gc3dhcHBlZCB0aGVtIGFuZCBhbGxvd2VkIHRo ZSByZWdpc3RlciB0byBiZSBwYXNzZWQgaW4sIHlvdSBjb3VsZAo+IGF2b2lkIHRoaXMgbG9hZC4K Ckkgc2VlbSB0byByZWNhbGwgdGhpcyBiZWluZyBwcm9ibGVtYXRpYy7CoCBJJ2xsIHJlY2hlY2su Cgo+Cj4+ICsubWFjcm8gRE9fU1BFQ19DVFJMX0VYSVRfVE9fR1VFU1QKPj4gKy8qCj4+ICsgKiBS ZXF1aXJlcyAlZWF4PXNwZWNfY3RybCwgJXJzcD1yZWdzL2NwdWluZm8KPj4gKyAqIENsb2JiZXJz ICVyYXgsICVyY3gsICVyZHgKPiAlcmF4IGlzbid0IHJlYWxseSBiZWluZyBjbG9iYmVyZWQgYW55 bW9yZS4gVGhlIGNsb2JiZXIgYW5ub3RhdGlvbnMKPiBvbiBhbGwgdXNlIHNpdGVzIGFwcGVhciB0 byBiZSBzaW1pbGFybHkgc3RhbGUuCgpUcnVlLgoKfkFuZHJldwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t YWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==