From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Xu, Quan" Subject: Re: [PATCH v3 1/2] IOMMU/spinlock: Fix a bug found in AMD IOMMU initialization Date: Fri, 11 Mar 2016 12:36:28 +0000 Message-ID: <945CA011AD5F084CBEA3E851C0AB28894B861C07@SHSMSX101.ccr.corp.intel.com> References: <1457529455-38314-1-git-send-email-quan.xu@intel.com> <1457529455-38314-2-git-send-email-quan.xu@intel.com> <945CA011AD5F084CBEA3E851C0AB28894B861913@SHSMSX101.ccr.corp.intel.com> <1457692537.3102.563.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457692537.3102.563.camel@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Dario Faggioli , Meng Xu Cc: Jan Beulich , Suravee Suthikulpanit , "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org T24gTWFyY2ggMTEsIDIwMTYgNjozNnBtLCA8RGFyaW8gRmFnZ2lvbGk+IHdyb3RlOg0KPiBPbiBG cmksIDIwMTYtMDMtMTEgYXQgMDY6NTQgKzAwMDAsIFh1LCBRdWFuIHdyb3RlOg0KPiA+IE9uIE1h cmNoIDExLCAyMDE2IDExOjI1YW0sIDxtZW5neHVAY2lzLnVwZW5uLmVkdT4gd3JvdGU6DQo+ID4g Pg0KPiA+ID4gT24gV2VkLCBNYXIgOSwgMjAxNiBhdCA4OjE3IEFNLCBRdWFuIFh1IDxxdWFuLnh1 QGludGVsLmNvbT4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+IHBjaWRldnNfbG9jayBzaG91bGQg YmUgaGVsZCB3aXRoIGludGVycnVwdCBlbmFibGVkLiBIb3dldmVyIHRoZXJlDQo+ID4gPiA+IHJl bWFpbnMgYW4gZXhjZXB0aW9uIGluIEFNRCBJT01NVSBjb2RlLCB3aGVyZSB0aGUgbG9jayBpcyBh Y3F1aXJlZA0KPiA+ID4gPiB3aXRoIGludGVycnVwdCBkaXNhYmxlZC4gVGhpcyBpbmNvbnNpc3Rl bmN5IG1pZ2h0IGxlYWQgdG8NCj4gPiA+ID4gZGVhZGxvY2suDQo+ID4gPiBXaHkgd2lsbCB0aGlz IGluY29uc2lzdGVuY3kgbGVhZCB0byBkZWFkbG9jaz8NCj4gPiA+IEkgdW5kZXJzdGFuZCB0aGUg ZGlmZmVyZW5jZSBiZXR3ZWVuIHNwaW5fbG9ja19pcnFzYXZlKCksIHdoaWNoDQo+ID4gPiBkaXNh YmxlIGludGVycnVwdCwgYW5kIHNwaW5fbG9jaygpLCB3aGljaCBhbGxvd3MgaW50ZXJydXB0LCBo b3dldmVyLA0KPiA+ID4gSSBkaWRuJ3QgZ2V0IHdoeSBtaXN1c2UgdGhlDQo+ID4gPiBzcGluX2xv Y2tfaXJxc2F2ZSgpIGF0IHRoZSBwbGFjZSBvZiBzcGluX2xvY2soKSBjb3VsZCBwb3RlbnRpYWxs eQ0KPiA+ID4gbGVhZCB0byBhIGRlYWRsb2NrPw0KPiA+DQo+ID4gwqAxKS5BcyBKYW4gbWVudGlv bmVkLCBUaGUgaW1wbGljYXRpb24gZnJvbSBkaXNhYmxpbmcgaW50ZXJydXB0cyB3aGlsZQ0KPiA+ IGFjcXVpcmluZyBhIGxvY2sgaXMgdGhhdCB0aGUgbG9jayBpcyBhbHNvIGJlaW5nIGFjcXVpcmVk IGJ5IHNvbWUNCj4gPiBpbnRlcnJ1cHQgaGFuZGxlci4NCj4gPiDCoCBJZiB5b3UgbWl4IGFjcXVp cmUgdHlwZXMsIHRoZSBvbmUgbm90IGRpc2FibGluZyBpbnRlcnJ1cHRzIGlzIHByb25lDQo+ID4g dG8gYmUgaW50ZXJydXB0ZWQsIGFuZCB0aGUgaW50ZXJydXB0IHRyeWluZyB0byBnZXQgaG9sZCBv ZiB0aGUgbG9jaw0KPiA+IHRoZSBzYW1lIENQVSBhbHJlYWR5IG93bnMuDQo+ID4NCj4gVGhlIGtl eSBpc3N1ZSBpcyB3aGV0aGVyIG9yIG5vdCBhIGxvY2sgY2FuIGJlIGFjcXVpcmVkIGZyb20gSVJR IGNvbnRleHQgKGkuZS4sIGluDQo+IGFuIGludGVycnVwdCBoYW5kbGVyLCBvciBhIGZ1bmN0aW9u IGNhbGxlZCBieSB0aGF0LCBhcyBhIHJlc3VsdCBvZiBhbiBpbnRlcnJ1cHQNCj4gb2NjdXJyaW5n KS4NCj4gDQo+IEZvciBsb2NrIHRoYXQgY2FuLCBJUlEgZGlzYWJsaW5nIHZhcmlhbnRzIG11c3Qg YmUgdXNlZCAqZXZlcnl3aGVyZSogdGhlIGxvY2sgaXMNCj4gdGFrZW4gKHNvLCBlLmcuLCBub3Qg b25seSB3aGVuIGl0IGlzIGFjdHVhbGx5IHRha2VuIGZyb20gSVJRIGNvbnRleHQsIGp1c3QNCj4g KmFsd2F5cyohKS4NCj4gDQo+IElmIHRoYXQgcnVsZSBpcyBub3QgaG9ub3JlZCwgd2UgYXJlIG9r IGlmIHRoZSBsb2NrIGlzIHRha2VuIG9uIENQVUEsIGFuZCB0aGUNCj4gaW50ZXJydXB0IGhhbmRs ZWQgb24gQ1BVQjoNCj4gDQo+IMKgIENQVUEgwqAgwqAgwqAgwqAgwqAgwqAgwqBDUFVCDQo+IMKg IC4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLg0KPiDCoCAuIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIC4NCj4gwqAgc3Bpbl9sb2NrKGwpIMKgIMKgIMKgLg0KPiDCoCAuIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIC4NCj4gwqAgLiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAuIDwtLSBJbnRlcnJ1 cHQhDQo+IMKgIC4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAuDQo+IMKgIC4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3Bpbl9sb2NrKGwpOyAvL3NwaW5zIG9u IGwNCj4gwqAgLiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB4IMKgIMKgIMKgIMKg IMKgIMKgIC8vc3BpbnMgb24gbA0KPiDCoCAuIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHggwqAgwqAgwqAgwqAgwqAgwqAgLy9zcGlucyBvbiBsDQo+IMKgIHNwaW5fdW5sb2NrKGwp IMKgIMKgIMKgIMKgIMKgLiDCoCDCoCDCoCDCoCDCoCDCoCAvL3Rha2VzIGwNCj4gwqAgLiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAuDQo+IMKgIC4gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgc3Bpbl91bmxvY2sobCk7DQo+IMKgIC4gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLiA8LS0gLg0KPiDCoCAuIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC4NCj4gDQo+IGJ1 dCB0aGUgZm9sbG93aW5nIGNhbiBoYXBwZW4sIGlmIHRoZSBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVk IHRvIHRoZSBDUFUgdGhhdCBoYXMNCj4gYWxyZWFkeSB0YWtlbiB0aGUgbG9jazoNCj4gDQo+IMKg IMKgIMKgQ1BVDQo+IMKgIMKgIMKgLg0KPiDCoCDCoCDCoC4NCj4gWzFdIMKgc3Bpbl9sb2NrKGwp OyDCoCDCoCDCoCAvL3Rha2VzIGwNCj4gwqAgwqAgwqAuDQo+IMKgIMKgIMKgLiA8LS0gSW50ZXJy dXB0IQ0KPiDCoCDCoCDCoCDCoCDCoCDCoC4NCj4gwqAgwqAgwqAgwqAgwqAgwqBzcGluX2xvY2so bCkgLy8gQ1BVIGRlYWRsb2Nrcw0KPiANCj4gSWYsIGluIHRoZSBsYXR0ZXIgY2FzZSwgc3Bpbl9s b2NrX2lycShsKSB3ZXJlIHVzZWQgYXQgWzFdLCB0aGluZ3Mgd291bGQgaGF2ZSBiZWVuDQo+IGZp bmUsIGFzIHRoZSBpbnRlcnJ1cHQgd291bGRuJ3QgaGF2ZSBvY2N1cnJlZCB1bnRpbCBsIHdlcmVu J3QNCj4gcmVsZWFzZWQ6DQo+IA0KPiDCoCBDUFUNCj4gwqAgLg0KPiDCoCAuDQo+IMKgIHNwaW5f bG9ja19pcnEobCkgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAvL3Rha2VzIGwN Cj4gwqAgLg0KPiDCoCAuIDwtLS0tLS0tLS0tLS0tLS0tIEludGVycnVwdCENCj4gwqAgLiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8vSVJR cyBhcmUgZGlzYWJsZWQNCj4gwqAgLiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8vSVJRcyBhcmUgZGlzYWJsZWQNCj4gwqAgLiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8vSVJRcyBh cmUgZGlzYWJsZWQNCj4gwqAgc3Bpbl91bmxvY2tfaXJxKGwpIMKgLiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAvL0lSUXMgcmUtaGFuYmxlZA0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBzcGluX2xvY2tfaXJxKGwpOyDCoCAvL3Rha2VzIGwNCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgLg0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAu DQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwaW5fdW5sb2NrX2lycShsKTsN Cj4gwqAuIDwtLS0tLS0tLS0tLS0tLS0tLSAuDQo+IMKgLg0KPiANCj4gTm90ZSB0aGF0IHdoZXRo ZXIgc3Bpbl9sb2NrX2lycSgpIG9yIHNwaW5fbG9ja19pcnFzYXZlKCkgc2hvdWxkIGJlIHVzZWQs IGlzDQo+IGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJvbSB0aGlzLCBhbmQgaXQgbXVzdCBiZSBk ZWNpZGVkIGFjY29yZGluZyB0byB3aGV0aGVyDQo+IElSUXMgYXJlIGRpc2FibGVkIGFscmVhZHkg b3Igbm90IHdoZW4gdGFraW5nIHRoZSBsb2NrLiBBbmQgKHF1aXRlIG9idmlvdXNseSwgYnV0DQo+ IHNpbmNlIHdyZSdyZSBoZXJlKSBpdCBpcyBmaW5lIHRvIG1peA0KPiBzcGluX2xvY2tfaXJxKCkg YW5kIHNwaW5fbG9ja19pcnFzYXZlKCksIGFzIHRoZXkgYm90aCBkaXNhYmxlIGludGVycnVwdHMs IHdoaWNoIGlzDQo+IHdoYXQgbWF0dGVycy4NCj4gDQo+IFNvLCBub3csIGlmIHdlIGtub3cgZm9y IHN1cmUgdGhhdCBhIGxvY2sgaXMgX25ldmVyX2V2ZXJfZXZlcl8gdGFrZW4gZnJvbQ0KPiBpbnRl cnJ1cHQgY29udGV4dCwgY2FuIHdlIG1peCBzcGluX2xvY2soKSBhbmQgc3Bpbl9sb2NrX2lycSgp IG9uIGl0IChmb3Igd2hhdGV2ZXINCj4gcmVhc29uKT8gV2VsbCwgYXMgZmFyIGFzIHRoZSBhYm92 ZSByZWFzb25pbmcgaXMgY29uY2VybmVkLCB5ZXMuDQo+IA0KSSBhcHByZWNpYXRlIERhcmlvJ3Mg ZXhwbGFuYXRpb24uDQpidHcsIGJlIGNhcmVmdWwgb2Ygc3Bpbl9sb2NrX2lycSgpLCB3aGljaCBp bmNsdWRlcyAnQVNTRVJUKGxvY2FsX2lycV9pc19lbmFibGVkKCknLi4NCg0KPiBJbiBmYWN0LCB0 aGUgZGVhZGxvY2sgYXJpc2VzIGJlY2F1c2UgSVJRcyBpbnRlcnJ1cHQgYXN5bmNocm9ub3VzbHkg d2hhdCB0aGUNCj4gQ1BVIGlzIGRvaW5nLCBhbmQgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhlIENQ VSBoYXMgdGFrZW4gdGhlIGxvY2sgYWxyZWFkeS4gQnV0DQo+IGlmIHRoZSAnYXN5bmNocm9ub3Vz JyBwYXJ0IGdvZXMgYXdheSwgd2UgcmVhbGx5IGRvbid0IGNhcmUgd2hldGhlciBhIGxvY2sgaXMg dGFrZQ0KPiBhdCB0aW1lIHQxIHdpdGggSVJRIGVuYWJsZWQsIGFuZCBhdCB0aW1lIHQyIHdpdGgg SVJRIGRpc2FibGVkLCBkb24ndCB5b3UgdGhpbms/DQo+IA0KDQpZZXMuDQpDb25zaXN0ZW5jeSBt YXkgYmUgaGVscGZ1bCB0byBhdm9pZCBzb21lIGVhc3ktdG8tYXZvaWQgbG9jayBlcnJvcnMuDQpN b3Jlb3Zlciwgd2l0aG91dCBteSBmaXgsIEkgdGhpbmsgaXQgd291bGQgbm90IGxlYWQgZGVhZCBs b2NrLCBhcyB0aGUgcGNpZGV2c19sb2NrIGlzIG5vdCBiZWluZyB0YWtlbg0KSW4gSVJRIGNvbnRl eHQuIFJpZ2h0PyANCg0KDQpGb3IgZGVhZGxvY2ssIEkgdGhpbmsgdGhlIGtleSBwcm9ibGVtcyBh cmU6DQogIC0gQSBsb2NrIGNhbiBiZSBhY3F1aXJlZCBmcm9tIElSUSBjb250ZXh0DQogIC1UaGUg aW50ZXJydXB0IGlzIGRlbGl2ZXJlZCB0byB0aGUgX3NhbWVfQ1BVXyB0aGF0IGFscmVhZHkgaG9s ZHMgdGhlIGxvY2suDQoNClF1YW4NCg0KPiBXZWxsLCBoZXJlIGl0IGlzIHdoZXJlIHdoYXQgdGhl IGNvbW1lbnQgaW5zaWRlIGNoZWNrX2xvY2soKSBkZXNjcmliZXMgY29tZXMNCj4gaW50byBwbGF5 LiBBcyBxdW90ZWQgYnkgUWF1biBhbHJlYWR5Og0KPiANCj4gPiDCoDIpLiBDb21tZW50IGluc2lk ZSBjaGVja19sb2NrKCksDQo+ID4gd2UgcGFydGl0aW9uIGxvY2tzIGludG8gSVJRLXNhZmUgKGFs d2F5cyBoZWxkIHdpdGggSVJRcyBkaXNhYmxlZCkgYW5kDQo+ID4gSVJRLXVuc2FmZSAoYWx3YXlz IGhlbGQgd2l0aCBJUlFzIGVuYWJsZWQpIHR5cGVzLiBUaGUgY29udmVudGlvbiBmb3INCj4gPiBl dmVyeSBsb2NrIG11c3QgYmUgY29uc2lzdGVudGx5IG9ic2VydmVkIGVsc2Ugd2UgY2FuIGRlYWRs b2NrIGluDQo+ID4gSVJRLWNvbnRleHQgcmVuZGV6dm91cyBmdW5jdGlvbnMgKF9fYSByZW5kZXp2 b3VzIHdoaWNoIGdldHMgZXZlcnkgQ1BVDQo+ID4gaW50byBJUlEgY29udGV4dCBiZWZvcmUgYW55 IENQVSBpcyByZWxlYXNlZCBmcm9tIHRoZSByZW5kZXp2b3VzX18pLg0KPiA+IElmIHdlIGNhbiBt aXggSVJRLWRpc2FibGVkIGFuZCBJUlEtZW5hYmxlZCBjYWxsZXJzLCB0aGUgZm9sbG93aW5nIGNh bg0KPiA+IGhhcHBlbjoNCj4gPiDCoCogTG9jayBpcyBoZWxkIGJ5IENQVSBBLCB3aXRoIElSUXMg ZW5hYmxlZA0KPiA+IMKgKiBDUFUgQiBpcyBzcGlubmluZyBvbiBzYW1lIGxvY2ssIHdpdGggSVJR cyBkaXNhYmxlZA0KPiA+IMKgKiBSZW5kZXp2b3VzIHN0YXJ0cyAtLSBDUFUgQSB0YWtlcyBpbnRl cnJ1cHQgYW5kIGVudGVycyByZW5kZXpib3VzDQo+ID4gc3Bpbg0KPiA+IMKgKiBERUFETE9DSyAt LSBDUFUgQiB3aWxsIG5ldmVyIGVudGVyIHJlbmRlenZvdXMsIENQVSBBIHdpbGwgbmV2ZXINCj4g PiBleGl0DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGhlIHJlbmRlenZvdXMs IGFuZCB3aWxsIGhlbmNlIG5ldmVyIHJlbGVhc2UgdGhlIGxvY2suDQo+ID4NCj4gPiBUbyBndWFy ZCBhZ2FpbnN0IHRoaXMgc3VidGxlIGJ1ZyB3ZSBsYXRjaCB0aGUgSVJRIHNhZmV0eSBvZiBldmVy eQ0KPiA+IHNwaW5sb2NrIGluIHRoZSBzeXN0ZW0sIG9uIGZpcnN0IHVzZS4NCj4gPg0KPiBUaGlz IGlzIGEgdmVyeSBnb29kIHNhZmV0eSBtZWFzdXJlLCBidXQgaXQgY2FuIGJlIHF1aXRlIGEgcmVz dHJpY3Rpb24gaW4gc29tZQ0KPiAobHVja2lseSBsaW1pdGVkKSBjYXNlcy4gQW5kIHRoYXQncyB3 aHkgaXQgaXMgcG9zc2libGUgLS0gYWx0aG91Z2ggYWJzb2x1dGVseQ0KPiBkaXNjb3VyYWdlZC0t IHRvIHJlbGF4IGl0LiBTZWUsIGZvciBhbiBleGFtcGxlIG9mIHRoaXMsIHRoZSBjb21tZW50IGlu DQo+IHN0YXJ0X3NlY29uZGFyeSgpLCBpbsKgeGVuL2FyY2gveDg2L3NtcGJvb3QuYzoNCj4gDQo+ IMKgIMKgIC4uLg0KPiDCoCDCoCAvKg0KPiDCoMKgwqDCoMKgKiBKdXN0IGFzIGR1cmluZyBlYXJs eSBib290c3RyYXAsIGl0IGlzIGNvbnZlbmllbnQgaGVyZSB0byBkaXNhYmxlDQo+IMKgwqDCoMKg wqAqIHNwaW5sb2NrIGNoZWNraW5nIHdoaWxlIHdlIGhhdmUgSVJRcyBkaXNhYmxlZC4gVGhpcyBh bGxvd3MgdXMgdG8NCj4gwqDCoMKgwqDCoCogYWNxdWlyZSBJUlEtdW5zYWZlIGxvY2tzIHdoZW4g aXQgd291bGQgb3RoZXJ3aXNlIGJlIGRpc2FsbG93ZWQuDQo+IMKgwqDCoMKgwqAqDQo+IMKgwqDC oMKgwqAqIEl0IGlzIHNhZmUgYmVjYXVzZSB0aGUgcmFjZSB3ZSBhcmUgdXN1YWxseSB0cnlpbmcg dG8gYXZvaWQgaW52b2x2ZXMNCj4gwqDCoMKgwqDCoCogYSBncm91cCBvZiBDUFVzIHJlbmRlenZv dXNpbmcgaW4gYW4gSVBJIGhhbmRsZXIsIHdoZXJlIG9uZSBjYW5ub3QNCj4gwqDCoMKgwqDCoCog am9pbiBiZWNhdXNlIGl0IGlzIHNwaW5uaW5nIHdpdGggSVJRcyBkaXNhYmxlZCB3YWl0aW5nIHRv IGFjcXVpcmUgYQ0KPiDCoMKgwqDCoMKgKiBsb2NrIGhlbGQgYnkgYW5vdGhlciBpbiB0aGUgcmVu ZGV6dm91cyBncm91cCAodGhlIGxvY2sgbXVzdCBiZSBhbg0KPiDCoMKgwqDCoMKgKiBJUlEtdW5z YWZlIGxvY2sgc2luY2UgdGhlIENQVSB0b29rIHRoZSBJUEkgYWZ0ZXIgYWNxdWlyaW5nIGl0LCBh bmQNCj4gwqDCoMKgwqDCoCogaGVuY2UgaGFkIElSUXMgZW5hYmxlZCkuIFRoaXMgaXMgYSBkZWFk bG9jayBzY2VuYXJpby4NCj4gwqDCoMKgwqDCoCoNCj4gwqDCoMKgwqDCoCogSG93ZXZlciwgbm8g Q1BVIGNhbiBiZSBpbnZvbHZlZCBpbiByZW5kZXp2b3VzIHVudGlsIGl0IGlzIG9ubGluZSwNCj4g wqDCoMKgwqDCoCogaGVuY2Ugbm8gc3VjaCBncm91cCBjYW4gYmUgd2FpdGluZyBmb3IgdGhpcyBD UFUgdW50aWwgaXQgaXMNCj4gwqDCoMKgwqDCoCogdmlzaWJsZSBpbiBjcHVfb25saW5lX21hcC4g SGVuY2Ugc3VjaCBhIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4NCj4gwqDCoMKgwqDCoCovDQo+ IMKgwqDCoMKgc3Bpbl9kZWJ1Z19kaXNhYmxlKCk7DQo+ICAgICAuLi4NCj4gDQo+IEp1c3QgRlRS LCBhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gcmVtZW1iZXIsIExpbnV4IGRvZXMgbm90IGVuZm9y Y2UgYW55dGhpbmcgbGlrZQ0KPiB0aGF0Lg0KPiANCj4gSG9wZSB0aGlzIGNsYXJpZmllcyB0aGlu Z3MuDQoNCg0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==