From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v4 6/6] x86/microcode: Synchronize late microcode loading Date: Thu, 29 Nov 2018 12:43:25 +0800 Message-ID: <20181129044325.GD23701@gao-cwp> References: <1543383256-12371-1-git-send-email-chao.gao@intel.com> <1543383256-12371-7-git-send-email-chao.gao@intel.com> <20181128152209.hqpgqtuy2mx7ytk6@mac> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gSE88-000053-TJ for xen-devel@lists.xenproject.org; Thu, 29 Nov 2018 04:40:48 +0000 Content-Disposition: inline In-Reply-To: <20181128152209.hqpgqtuy2mx7ytk6@mac> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: Kevin Tian , Wei Liu , Jan Beulich , Andrew Cooper , Jun Nakajima , xen-devel@lists.xenproject.org, Thomas Gleixner , Borislav Petkov , Ashok Raj List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBOb3YgMjgsIDIwMTggYXQgMDQ6MjI6MDlQTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPk9uIFdlZCwgTm92IDI4LCAyMDE4IGF0IDAxOjM0OjE2UE0gKzA4MDAsIENoYW8g R2FvIHdyb3RlOgo+PiBUaGlzIHBhdGNoIHBvcnRzIG1pY3JvY29kZSBpbXByb3ZlbWVudCBwYXRj aGVzIGZyb20gbGludXgga2VybmVsLgo+PiAKPj4gQmVmb3JlIHlvdSByZWFkIGFueSBmdXJ0aGVy OiB0aGUgZWFybHkgbG9hZGluZyBtZXRob2QgaXMgc3RpbGwgdGhlCj4+IHByZWZlcnJlZCBvbmUg YW5kIHlvdSBzaG91bGQgYWx3YXlzIGRvIHRoYXQuIFRoZSBmb2xsb3dpbmcgcGF0Y2ggaXMKPj4g aW1wcm92aW5nIHRoZSBsYXRlIGxvYWRpbmcgbWVjaGFuaXNtIGZvciBsb25nIHJ1bm5pbmcgam9i cyBhbmQgY2xvdWQgdXNlCj4+IGNhc2VzLgo+PiAKPj4gR2F0aGVyIGFsbCBjb3JlcyBhbmQgc2Vy aWFsaXplIHRoZSBtaWNyb2NvZGUgdXBkYXRlIG9uIHRoZW0gYnkgZG9pbmcgaXQKPj4gb25lLWJ5 LW9uZSB0byBtYWtlIHRoZSBsYXRlIHVwZGF0ZSBwcm9jZXNzIGFzIHJlbGlhYmxlIGFzIHBvc3Np YmxlIGFuZAo+PiBhdm9pZCBwb3RlbnRpYWwgaXNzdWVzIGNhdXNlZCBieSB0aGUgbWljcm9jb2Rl IHVwZGF0ZS4KPj4gCj4+IFNpZ25lZC1vZmYtYnk6IENoYW8gR2FvIDxjaGFvLmdhb0BpbnRlbC5j b20+Cj4+IFRlc3RlZC1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4KPj4gW2xpbnV4 IGNvbW1pdDogYTUzMjFhZWM2NDEyYjIwYjVhZDE1ZGIyZDZiOTE2YzA1MzQ5ZGJmZl0KPj4gW2xp bnV4IGNvbW1pdDogYmI4YzEzZDYxYTYyOTI3NmExNjJjMWQyYjFhMjBhODE1Y2JjZmJiN10KPgo+ SWYgdGhpcyBwYXRjaCBpcyB0aGUgc3F1YXNoIG9mIHR3byBMaW51eCBjb21taXRzLCBwbGVhc2Ug cG9zdCB0aGUKPnBvcnRlZCB2ZXJzaW9ucyBvZiB0aGUgdHdvIGNvbW1pdHMgc2VwYXJhdGVseS4K CkkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIG9uZS4KCj4KPj4gQ2M6IEtldmluIFRpYW4gPGtldmlu LnRpYW5AaW50ZWwuY29tPgo+PiBDYzogSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwu Y29tPgo+PiBDYzogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgo+PiBDYzogQm9yaXNs YXYgUGV0a292IDxicEBzdXNlLmRlPgo+PiBDYzogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0 cm9uaXguZGU+Cj4+IENjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29t Pgo+PiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgo+PiAtLS0KPj4gIHhlbi9h cmNoL3g4Ni9taWNyb2NvZGUuYyB8IDEyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLQo+PiAgMSBmaWxlIGNoYW5nZWQsIDk3IGluc2VydGlvbnMoKyksIDI2 IGRlbGV0aW9ucygtKQo+PiAKPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9taWNyb2NvZGUu YyBiL3hlbi9hcmNoL3g4Ni9taWNyb2NvZGUuYwo+PiBpbmRleCAwYjQzNWY0Li5kNWEyYTk0IDEw MDY0NAo+PiAtLS0gYS94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMKPj4gKysrIGIveGVuL2FyY2gv eDg2L21pY3JvY29kZS5jCj4+IEBAIC0yMiw2ICsyMiw3IEBACj4+ICAgKi8KPj4gIAo+PiAgI2lu Y2x1ZGUgPHhlbi9jcHUuaD4KPj4gKyNpbmNsdWRlIDx4ZW4vY3B1bWFzay5oPgo+PiAgI2luY2x1 ZGUgPHhlbi9saWIuaD4KPj4gICNpbmNsdWRlIDx4ZW4va2VybmVsLmg+Cj4+ICAjaW5jbHVkZSA8 eGVuL2luaXQuaD4KPj4gQEAgLTMwLDE4ICszMSwyNSBAQAo+PiAgI2luY2x1ZGUgPHhlbi9zbXAu aD4KPj4gICNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPgo+PiAgI2luY2x1ZGUgPHhlbi9zcGlubG9j ay5oPgo+PiArI2luY2x1ZGUgPHhlbi9zdG9wX21hY2hpbmUuaD4KPj4gICNpbmNsdWRlIDx4ZW4v dGFza2xldC5oPgo+PiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPj4gICNpbmNsdWRl IDx4ZW4vZWFybHljcGlvLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL3dhdGNoZG9nLmg+Cj4+ICAKPj4g KyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KPj4gICNpbmNsdWRlIDxhc20vbXNyLmg+Cj4+ICAjaW5j bHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgo+PiAgI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgo+PiAgI2lu Y2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KPj4gIAo+PiArLyogQnkgZGVmYXVsdCwgd2FpdCBmb3Ig MzAwMDB1cyAqLwo+PiArI2RlZmluZSBNSUNST0NPREVfREVGQVVMVF9USU1FT1VUX1VTIDMwMDAw Cj4+ICsKPj4gIHN0YXRpYyBtb2R1bGVfdCBfX2luaXRkYXRhIHVjb2RlX21vZDsKPj4gIHN0YXRp YyBzaWduZWQgaW50IF9faW5pdGRhdGEgdWNvZGVfbW9kX2lkeDsKPj4gIHN0YXRpYyBib29sX3Qg X19pbml0ZGF0YSB1Y29kZV9tb2RfZm9yY2VkOwo+PiArc3RhdGljIHVuc2lnbmVkIGludCBucl9j b3JlczsKPj4gIAo+PiAgLyoKPj4gICAqIElmIHdlIHNjYW4gdGhlIGluaXRyYW1mcy5jcGlvIGZv ciB0aGUgZWFybHkgbWljcm9jb2RlIGNvZGUKPj4gQEAgLTE4OSw4ICsxOTcsNyBAQCBzdGF0aWMg REVGSU5FX1NQSU5MT0NLKG1pY3JvY29kZV9tdXRleCk7Cj4+ICBERUZJTkVfUEVSX0NQVShzdHJ1 Y3QgdWNvZGVfY3B1X2luZm8sIHVjb2RlX2NwdV9pbmZvKTsKPj4gIAo+PiAgc3RydWN0IG1pY3Jv Y29kZV9pbmZvIHsKPj4gLSAgICB1bnNpZ25lZCBpbnQgY3B1Owo+PiAtICAgIGludCBlcnJvcjsK Pj4gKyAgICBhdG9taWNfdCBjcHVfaW4sIGNwdV9vdXQ7Cj4KPkNhbiB5b3UgbWFrZSB0aGlzIHZh cmlhYmxlcyBnbG9iYWwgdG8gdGhlIGZpbGUgYW5kIGp1c3QgcmVtb3ZlCj5taWNyb2NvZGVfaW5m bz8KClllcy4gR29vZCBzdWdnZXN0aW9uLgoKPgo+PiAgfTsKPj4gIAo+PiAgc3RhdGljIHZvaWQg X19taWNyb2NvZGVfZmluaV9jcHUodW5zaWduZWQgaW50IGNwdSkKPj4gQEAgLTI0MiwzMSArMjQ5 LDYyIEBAIHN0YXRpYyBpbnQgbWljcm9jb2RlX3VwZGF0ZV9jcHUodm9pZCkKPj4gICAgICByZXR1 cm4gZXJyOwo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgbG9uZyBkb19taWNyb2NvZGVfdXBkYXRlKHZv aWQgKl9pbmZvKQo+PiArLyogV2FpdCBmb3IgYWxsIENQVXMgdG8gcmVuZGV6dm91cyB3aXRoIGEg dGltZW91dCAodXMpICovCj4+ICtzdGF0aWMgaW50IHdhaXRfZm9yX2NwdXMoYXRvbWljX3QgKmNu dCwgdW5zaWduZWQgaW50IHRpbWVvdXQpCj4+ICB7Cj4+IC0gICAgc3RydWN0IG1pY3JvY29kZV9p bmZvICppbmZvID0gX2luZm87Cj4+IC0gICAgaW50IGVycm9yOwo+PiArICAgIHVuc2lnbmVkIGlu dCBjcHVzID0gbnVtX29ubGluZV9jcHVzKCk7Cj4+ICAKPj4gLSAgICBCVUdfT04oaW5mby0+Y3B1 ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7Cj4+ICsgICAgYXRvbWljX2luYyhjbnQpOwo+PiAgCj4+ IC0gICAgZXJyb3IgPSBtaWNyb2NvZGVfdXBkYXRlX2NwdSgpOwo+PiAtICAgIGlmICggZXJyb3Ig KQo+PiAtICAgICAgICBpbmZvLT5lcnJvciA9IGVycm9yOwo+PiArICAgIHdoaWxlICggYXRvbWlj X3JlYWQoY250KSAhPSBjcHVzICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIGlmICggdGltZW91dCA8 PSAwICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgcHJpbnRrKCJUaW1lb3V0IHdoZW4g d2FpdGluZyBmb3IgQ1BVcyBjYWxsaW5nIGluXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAt RUJVU1k7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgdWRlbGF5KDEpOwo+PiArICAgICAgICB0 aW1lb3V0LS07Cj4+ICsgICAgfQo+PiAgCj4+IC0gICAgaW5mby0+Y3B1ID0gY3B1bWFza19uZXh0 KGluZm8tPmNwdSwgJmNwdV9vbmxpbmVfbWFwKTsKPj4gLSAgICBpZiAoIGluZm8tPmNwdSA8IG5y X2NwdV9pZHMgKQo+PiAtICAgICAgICByZXR1cm4gY29udGludWVfaHlwZXJjYWxsX29uX2NwdShp bmZvLT5jcHUsIGRvX21pY3JvY29kZV91cGRhdGUsIGluZm8pOwo+PiArICAgIHJldHVybiAwOwo+ PiArfQo+PiAgCj4+IC0gICAgZXJyb3IgPSBpbmZvLT5lcnJvcjsKPj4gLSAgICB4ZnJlZShpbmZv KTsKPj4gLSAgICByZXR1cm4gZXJyb3I7Cj4+ICtzdGF0aWMgaW50IGRvX21pY3JvY29kZV91cGRh dGUodm9pZCAqX2luZm8pCj4+ICt7Cj4+ICsgICAgc3RydWN0IG1pY3JvY29kZV9pbmZvICppbmZv ID0gX2luZm87Cj4+ICsgICAgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsK Pj4gKyAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgcmV0ID0gd2FpdF9mb3JfY3B1cygmaW5mby0+ Y3B1X2luLCBNSUNST0NPREVfREVGQVVMVF9USU1FT1VUX1VTKTsKPj4gKyAgICBpZiAoIHJldCAp Cj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4gKyAgICAvKgo+PiArICAgICAqIEluaXRp YXRlIGFuIHVwZGF0ZSBvbiBhbGwgcHJvY2Vzc29ycyB3aGljaCBkb24ndCBoYXZlIGFuIG9ubGlu ZSBzaWJsaW5nCj4+ICsgICAgICogdGhyZWFkIHdpdGggYSBsb3dlciB0aHJlYWQgaWQuIE90aGVy IHNpYmxpbmcgdGhyZWFkcyBqdXN0IGF3YWl0IHRoZQo+PiArICAgICAqIGNvbXBsZXRpb24gb2Yg bWljcm9jb2RlIHVwZGF0ZS4KPj4gKyAgICAgKi8KPj4gKyAgICBpZiAoIGNwdSA9PSBjcHVtYXNr X2ZpcnN0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFzaywgY3B1KSkgKQo+PiArICAgICAgICByZXQg PSBtaWNyb2NvZGVfdXBkYXRlX2NwdSgpOwo+PiArICAgIC8qCj4+ICsgICAgICogSW5jcmVhc2Ug dGhlIHdhaXQgdGltZW91dCB0byBhIHNhZmUgdmFsdWUgaGVyZSBzaW5jZSB3ZSdyZSBzZXJpYWxp emluZwo+PiArICAgICAqIHRoZSBtaWNyb2NvZGUgdXBkYXRlIGFuZCB0aGF0IGNvdWxkIHRha2Ug YSB3aGlsZSBvbiBhIGxhcmdlIG51bWJlciBvZgo+PiArICAgICAqIENQVXMuIEFuZCB0aGF0IGlz IGZpbmUgYXMgdGhlICphY3R1YWwqIHRpbWVvdXQgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5Cj4+ICsg ICAgICogdGhlIGxhc3QgQ1BVIGZpbmlzaGVkIHVwZGF0aW5nIGFuZCB0aHVzIGN1dCBzaG9ydAo+ PiArICAgICAqLwo+PiArICAgIGlmICggd2FpdF9mb3JfY3B1cygmaW5mby0+Y3B1X291dCwgTUlD Uk9DT0RFX0RFRkFVTFRfVElNRU9VVF9VUyAqCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBucl9jb3JlcykgKQo+Cj5Jc24ndCB0aGlzIGxpa2VseSB0byB0cmlnZ2Vy IHRoZSB3YXRjaGRvZyBvbiBiaWcgc3lzdGVtcz8gT2ggSSBzZWUKPmJlbG93IHRoYXQgeW91IGRp c2FibGUgdGhlIHdhdGNoZG9nLgo+Cj4+ICsgICAgICAgIHBhbmljKCJUaW1lb3V0IHdoZW4gZmlu aXNoaW5nIHVwZGF0aW5nIG1pY3JvY29kZSIpOwo+PiArCj4+ICsgICAgcmV0dXJuIHJldDsKPj4g IH0KPj4gIAo+PiAgaW50IG1pY3JvY29kZV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShj b25zdF92b2lkKSBidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQo+PiAgewo+PiAgICAgIGludCByZXQ7 Cj4+IC0gICAgc3RydWN0IG1pY3JvY29kZV9pbmZvICppbmZvOwo+PiAgICAgIHVuc2lnbmVkIGlu dCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cj4+ICsgICAgc3RydWN0IG1pY3JvY29kZV9pbmZv ICppbmZvOwo+PiAgICAgIHN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gJnBlcl9jcHUodWNv ZGVfY3B1X2luZm8sIGNwdSk7Cj4+ICAgICAgdm9pZCAqIGJ1ZmZlcjsKPj4gIAo+PiBAQCAtMjgz LDE5ICszMjEsMjAgQEAgaW50IG1pY3JvY29kZV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJB TShjb25zdF92b2lkKSBidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQo+PiAgCj4+ICAgICAgcmV0ID0g Y29weV9mcm9tX2d1ZXN0KGJ1ZmZlciwgYnVmLCBsZW4pOwo+PiAgICAgIGlmICggcmV0ICE9IDAg KQo+PiArICAgICAgICBnb3RvIGZyZWU7Cj4+ICsKPj4gKyAgICAvKiBjcHVfb25saW5lX21hcCBt dXN0IG5vdCBjaGFuZ2UgZHVyaW5nIHVwZGF0ZSAqLwo+PiArICAgIGlmICggIWdldF9jcHVfbWFw cygpICkKPj4gICAgICB7Cj4+IC0gICAgICAgIHhmcmVlKGluZm8pOwo+PiAtICAgICAgICByZXR1 cm4gcmV0Owo+PiArICAgICAgICByZXQgPSAtRUJVU1k7Cj4+ICsgICAgICAgIGdvdG8gZnJlZTsK Pj4gICAgICB9Cj4+ICAKPj4gICAgICBpZiAoIG1pY3JvY29kZV9vcHMtPnN0YXJ0X3VwZGF0ZSAp Cj4+ICAgICAgewo+PiAgICAgICAgICByZXQgPSBtaWNyb2NvZGVfb3BzLT5zdGFydF91cGRhdGUo KTsKPj4gICAgICAgICAgaWYgKCByZXQgIT0gMCApCj4+IC0gICAgICAgIHsKPj4gLSAgICAgICAg ICAgIHhmcmVlKGluZm8pOwo+PiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gLSAgICAgICAg fQo+PiArICAgICAgICAgICAgZ290byBwdXQ7Cj4+ICAgICAgfQo+PiAgCj4+ICAgICAgc3Bpbl9s b2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwo+PiBAQCAtMzExLDEzICszNTAsNDUgQEAgaW50IG1pY3Jv Y29kZV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShjb25zdF92b2lkKSBidWYsIHVuc2ln bmVkIGxvbmcgbGVuKQo+PiAgICAgIGlmICggcmV0IDw9IDAgKQo+PiAgICAgIHsKPj4gICAgICAg ICAgcHJpbnRrKCJObyB2YWxpZCBvciBuZXdlciBtaWNyb2NvZGUgZm91bmQuIFVwZGF0ZSBhYm9y dCFcbiIpOwo+PiAtICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICAgcmV0ID0gLUVJ TlZBTDsKPj4gKyAgICAgICAgZ290byBwdXQ7Cj4+ICAgICAgfQo+PiAgCj4+IC0gICAgaW5mby0+ ZXJyb3IgPSAwOwo+PiAtICAgIGluZm8tPmNwdSA9IGNwdW1hc2tfZmlyc3QoJmNwdV9vbmxpbmVf bWFwKTsKPj4gKyAgICBhdG9taWNfc2V0KCZpbmZvLT5jcHVfaW4sIDApOwo+PiArICAgIGF0b21p Y19zZXQoJmluZm8tPmNwdV9vdXQsIDApOwo+PiArCj4+ICsgICAgLyogQ2FsY3VsYXRlIHRoZSBu dW1iZXIgb2Ygb25saW5lIENQVSBjb3JlICovCj4+ICsgICAgbnJfY29yZXMgPSAwOwo+PiArICAg IGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQo+PiArICAgICAgICBpZiAoIGNwdSA9PSBjcHVtYXNr X2ZpcnN0KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFzaywgY3B1KSkgKQo+PiArICAgICAgICAgICAg bnJfY29yZXMrKzsKPj4gKwo+PiArICAgIHByaW50aygiJWQgY29yZXMgYXJlIHRvIHVwZGF0ZSBp dHMgbWljcm9jb2RlXG4iLCBucl9jb3Jlcyk7Cj4+ICAKPj4gLSAgICByZXR1cm4gY29udGludWVf aHlwZXJjYWxsX29uX2NwdShpbmZvLT5jcHUsIGRvX21pY3JvY29kZV91cGRhdGUsIGluZm8pOwo+ PiArICAgIC8qCj4+ICsgICAgICogV2UgaW50ZW5kIHRvIGRpc2FibGUgaW50ZXJydXB0IGZvciBs b25nIHRpbWUsIHdoaWNoIG1heSBsZWFkIHRvCj4+ICsgICAgICogd2F0Y2hkb2cgdGltZW91dC4K Pj4gKyAgICAgKi8KPj4gKyAgICB3YXRjaGRvZ19kaXNhYmxlKCk7Cj4+ICsgICAgLyoKPj4gKyAg ICAgKiBMYXRlIGxvYWRpbmcgZGFuY2UuIFdoeSB0aGUgaGVhdnktaGFuZGVkIHN0b3BfbWFjaGlu ZSBlZmZvcnQ/Cj4+ICsgICAgICoKPj4gKyAgICAgKiAtIEhUIHNpYmxpbmdzIG11c3QgYmUgaWRs ZSBhbmQgbm90IGV4ZWN1dGUgb3RoZXIgY29kZSB3aGlsZSB0aGUgb3RoZXIKPj4gKyAgICAgKiAg IHNpYmxpbmcgaXMgbG9hZGluZyBtaWNyb2NvZGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55IG5lZ2F0 aXZlCj4+ICsgICAgICogICBpbnRlcmFjdGlvbnMgY2F1c2UgYnkgdGhlIGxvYWRpbmcuCj4KPldl bGwsIHRoZSBIVCBzaWJsaW5ncyB3aWxsIGJlIGV4ZWN1dGluZyBjb2RlLCBzaW5jZSB0aGV5IGFy ZSBpbiBhCj53aGlsZSBsb29wIHdhaXRpbmcgZm9yIHRoZSBub24tc2libGluZ3MgY29yZXMgdG8g ZmluaXNoIHVwZGF0aW5nLgoKU3RyaWN0bHkgc3BlYWtpbmcsIHlvdSBhcmUgcmlnaHQuIFRoZSAn aWRsZScgSSB0aGluayBtZWFucyBubyBvdGhlcgp3b3JrbG9hZCBvbiB0aGUgY3B1IGV4Y2VwdCBt aWNyb2NvZGUgbG9hZGluZyAoZm9yIGEgSFQgc2libGluZyB3aGljaAppc24ndCBjaG9zZW4gdG8g ZG8gdGhlIHVwZGF0ZSwgbWVhbnMgd2FpdGluZyBmb3IgdGhlIGNvbXBsZXRpb24gb2YKdGhlIG90 aGVyIHNpYmxpbmcpLgoKVGhhbmtzCkNoYW8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0 aW5mby94ZW4tZGV2ZWw=