From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: Re: Shattering superpages impact on IOMMU in Xen Date: Tue, 4 Apr 2017 12:28:52 +0300 Message-ID: References: <1a585c67-6af4-fbc0-af4c-0df2a26c43dd@citrix.com> <66626ce8-4196-b02e-1628-72c49ebdee99@arm.com> <94e0279b-5d0a-f427-1a6f-e2f7a5057f2a@citrix.com> <4fb78ab9-62bc-d003-a680-7fc7371310a6@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cvKlk-0003dT-7u for xen-devel@lists.xenproject.org; Tue, 04 Apr 2017 09:28:56 +0000 Received: by mail-io0-f170.google.com with SMTP id z13so91841765iof.2 for ; Tue, 04 Apr 2017 02:28:54 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: Oleksandr Andrushchenko , Andrew Cooper , al1img , Andrii Anisov , Volodymyr Babchuk , Julien Grall , xen-devel@lists.xenproject.org, Artem Mygaiev List-Id: xen-devel@lists.xenproject.org SGksIFN0ZWZhbm8uCgpPbiBNb24sIEFwciAzLCAyMDE3IGF0IDExOjMzIFBNLCBTdGVmYW5vIFN0 YWJlbGxpbmkKPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+IHdyb3RlOgo+IE9uIE1vbiwgMyBBcHIg MjAxNywgT2xla3NhbmRyIFR5c2hjaGVua28gd3JvdGU6Cj4+IE9uIE1vbiwgQXByIDMsIDIwMTcg YXQgOTowNiBQTSwgSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4gd3JvdGU6Cj4+ ID4gSGkgQW5kcmV3LAo+PiA+Cj4+ID4KPj4gPiBPbiAwMy8wNC8xNyAxODoxNiwgQW5kcmV3IENv b3BlciB3cm90ZToKPj4gPj4KPj4gPj4gT24gMDMvMDQvMTcgMTg6MDIsIEp1bGllbiBHcmFsbCB3 cm90ZToKPj4gPj4+Cj4+ID4+PiBIaSBBbmRyZXcsCj4+ID4+Pgo+PiA+Pj4gT24gMDMvMDQvMTcg MTc6NDIsIEFuZHJldyBDb29wZXIgd3JvdGU6Cj4+ID4+Pj4KPj4gPj4+PiBPbiAwMy8wNC8xNyAx NzoyNCwgT2xla3NhbmRyIFR5c2hjaGVua28gd3JvdGU6Cj4+ID4+Pj4+Cj4+ID4+Pj4+IEhpLCBh bGwuCj4+ID4+Pj4+Cj4+ID4+Pj4+IFBsYXlpbmcgd2l0aCBub24tc2hhcmVkIElPTU1VIGluIFhl biBvbiBBUk0gSSBmYWNlZCBvbmUgaW50ZXJlc3RpbmcKPj4gPj4+Pj4gdGhpbmcuIEkgZm91bmQg b3V0IHRoYXQgdGhlIHN1cGVycGFnZXMgd2VyZSBzaGF0dGVyZWQgZHVyaW5nIGRvbWFpbgo+PiA+ Pj4+PiBsaWZlIGN5Y2xlLgo+PiA+Pj4+PiBUaGlzIGlzIHRoZSByZXN1bHQgb2YgbWFwcGluZyBv ZiBmb3JlaWduIHBhZ2VzLCBiYWxsb29uaW5nIG1lbW9yeSwKPj4gPj4+Pj4gZXZlbiBpZiBkb21h aW4gbWFwcyBYZW4gc2hhcmVkIHBhZ2VzLCBldGMuCj4+ID4+Pj4+IEkgZG9uJ3QgYm90aGVyIHdp dGggdGhlIG1lbW9yeSBmcmFnbWVudGF0aW9uIGF0IHRoZSBtb21lbnQuIEJ1dCwKPj4gPj4+Pj4g c2hhdHRlcmluZyBib3RoZXJzIG1lIGZyb20gdGhlIElPTU1VIHBvaW50IG9mIHZpZXcuCj4+ID4+ Pj4+IEFzIHRoZSBYZW4gb3ducyBJT01NVSBpdCBtaWdodCBtYW5pcHVsYXRlIElPTU1VIHBhZ2Ug dGFibGVzIHdoZW4KPj4gPj4+Pj4gcGFzc3Rob3VnaGVkL3Byb3RlY3RlZCBkZXZpY2UgZG9pbmcg RE1BIGluIExpbnV4LiBJdCBpcyBoYXJkIHRvIGRldGVjdAo+PiA+Pj4+PiB3aGVuIHRoZSBETUEg dHJhbnNhY3Rpb24gaXNuJ3QgaW4gcHJvZ3Jlc3MKPj4gPj4+Pj4gaW4gb3JkZXIgdG8gcHJldmVu dCB0aGlzIHJhY2UuIFNvLCBpZiB3ZSBoYXZlIGluZmxpZ2h0IHRyYW5zYWN0aW9uCj4+ID4+Pj4+ IGZyb20gYSBkZXZpY2Ugd2hlbiBjaGFuZ2luZyBJT01NVSBtYXBwaW5nIHdlIG1pZ2h0IGdldCBp bnRvIHRyb3VibGUuCj4+ID4+Pj4+IFVuZm9ydHVuYXRlbHksIG5vdCBpbiBhbGwgdGhlIGNhc2Vz IHRoZQo+PiA+Pj4+PiBmYXVsdGluZyB0cmFuc2FjdGlvbiBjYW4gYmUgcmVzdGFydGVkLiBUaGUg Y2hhbmNlIHRvIGhpdCB0aGUgcHJvYmxlbQo+PiA+Pj4+PiBpbmNyZWFzZXMgZHVyaW5nIHNoYXR0 ZXJpbmcuCj4+ID4+Pj4+Cj4+ID4+Pj4+IEkgZGlkIG5leHQgdGVzdDoKPj4gPj4+Pj4gVGhlIGRv bTAgb24gbXkgc2V0dXAgY29udGFpbnMgZXRoZXJuZXQgSVAgdGhhdCBhcmUgcHJvdGVjdGVkIGJ5 IElPTU1VLgo+PiA+Pj4+PiBXaGF0IGlzIG1vcmUsIGFzIHRoZSBJT01NVSBJIGFtIHBsYXlpbmcg d2l0aCBzdXBwb3J0cyBzdXBlcnBhZ2VzICgyTSwKPj4gPj4+Pj4gMUcpIHRoZSBJT01NVSBkcml2 ZXIKPj4gPj4+Pj4gdGFrZXMgaW50byBhY2NvdW50IHRoZXNlIGNhcGFiaWxpdGllcyB3aGVuIGJ1 aWxkaW5nIHBhZ2UgdGFibGVzLiBBcyBJCj4+ID4+Pj4+IGdhdmUgMjU2IE1CIGZvciBkb20wLCB0 aGUgSU9NTVUgbWFwcGluZyB3YXMgYnVpbHQgYnkgMk0gbWVtb3J5IGJsb2Nrcwo+PiA+Pj4+PiBv bmx5LiBBcyBJIGFtIHVzaW5nIE5GUyBmb3IgYm90aCBkb20wIGFuZCBkb21VIHRoZSBldGhlcm5l dCBJUAo+PiA+Pj4+PiBwZXJmb3JtcyBETUEgdHJhbnNhY3Rpb25zIGFsbW9zdCBhbGwgdGhlIHRp bWUuCj4+ID4+Pj4+IFNvbWV0aW1lcywgSSBzZWUgdGhlIElPTU1VIHBhZ2UgZmF1bHRzIGR1cmlu ZyBjcmVhdGluZyBndWVzdCBkb21haW4uIEkKPj4gPj4+Pj4gdGhpbmssIGl0IGhhcHBlbnMgZHVy aW5nIFhlbiBpcyBzaGF0dGVyaW5nIDJNIG1hcHBpbmdzIDRLIG1hcHBpbmdzIChpdAo+PiA+Pj4+ PiB1bm1hcHMgZG9tMCBwYWdlcyBieSBvbmUgNEsgcGFnZSBhdCBhIHRpbWUsIHRoZW4gbWFwcyBk b21VIHBhZ2VzIHRoZXJlCj4+ID4+Pj4+IGZvciBjb3B5aW5nIGRvbVUgaW1hZ2VzKS4KPj4gPj4+ Pj4gQnV0LCBJIGRvbid0IHNlZSBhbnkgcGFnZSBmYXVsdHMgd2hlbiB0aGUgSU9NTVUgcGFnZSB0 YWJsZSB3YXMgYnVpbHQKPj4gPj4+Pj4gYnkgNEsgcGFnZXMgb25seS4KPj4gPj4+Pj4KPj4gPj4+ Pj4gSSBoYWQgYSB0YWxrIHdpdGggSnVsaWVuIG9uIElJUkMgYW5kIHdlIGNhbWUgdG8gY29uY2x1 c2lvbiB0aGF0IHRoZQo+PiA+Pj4+PiBzYWZlc3Qgd2F5IHdvdWxkIGJlIHRvIHVzZSA0SyBwYWdl cyB0byBwcmV2ZW50IHNoYXR0ZXJpbmcsIHNvIHRoZQo+PiA+Pj4+PiBJT01NVSBzaG91bGRuJ3Qg cmVwb3J0IHN1cGVycGFnZSBjYXBhYmlsaXR5Lgo+PiA+Pj4+PiBPbiB0aGUgb3RoZXIgaGFuZCwg aWYgd2UgYnVpbGQgSU9NTVUgZnJvbSA0SyBwYWdlcyB3ZSB3aWxsIGhhdmUKPj4gPj4+Pj4gcGVy Zm9ybWFuY2UgZHJvcCAoZHVyaW5nIGJ1aWxkaW5nLCB3YWxraW5nIHBhZ2UgdGFibGVzKSwgVExC IHByZXNzdXJlLAo+PiA+Pj4+PiBldGMuCj4+ID4+Pj4+IEFub3RoZXIgcG9zc2libGUgc29sdXRp b24gSnVsaWVuIHdhcyBzdWdnZXN0aW5nIGlzIHRvIGFsd2F5cwo+PiA+Pj4+PiBiYWxsb29uaW5n IHdpdGggMk0sIDFHLCBhbmQgbm90IHVzaW5nIDRLLiBUaGF0IHdvdWxkIGhlbHAgdXMgdG8KPj4g Pj4+Pj4gcHJldmVudCBzaGF0dGVyaW5nIGVmZmVjdC4KPj4gPj4+Pj4gVGhlIGRpc2N1c3Npb24g d2FzIG1vdmVkIHRvIHRoZSBNTCBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIGdlbmVyaWMKPj4gPj4+ Pj4gaXNzdWUgYW5kIHRoZSByaWdodCBzb2x1dGlvbiBzaG91bGQgYmUgdGhpbmsgb2YuCj4+ID4+ Pj4+Cj4+ID4+Pj4+IFdoYXQgZG8geW91IHRoaW5rIGlzIHRoZSByaWdodCB3YXkgdG8gZm9sbG93 PyBVc2UgNEsgcGFnZXMgYW5kIGRvbid0Cj4+ID4+Pj4+IGJvdGhlciB3aXRoIHNoYXR0ZXJpbmcg b3IgdHJ5IHRvIG9wdGltaXplPyBBbmQgaWYgdGhlIGlkZWEgdG8gbWFrZQo+PiA+Pj4+PiBiYWxs b29uIG1lY2hhbmlzbSBzbWFydGVyIG1ha2VzIHNlbnNlIGhvdyB0byB0ZWFjaCBiYWxsb29uIHRv IGRvIHNvPwo+PiA+Pj4+PiBUaGFuayB5b3UuCj4+ID4+Pj4KPj4gPj4+Pgo+PiA+Pj4+IEJhbGxv b25pbmcgYW5kIGZvcmVpZ24gbWFwcGluZ3MgYXJlIHRlcnJpYmxlIGZvciB0cnlpbmcgdG8gcmV0 YWluCj4+ID4+Pj4gc3VwZXJwYWdlIG1hcHBpbmdzLiAgTm8gT1MsIG5vdCBldmVuIExpbnV4LCBj YW4gc2Vuc2libHkgcHJvdmlkZSB2aWN0aW0KPj4gPj4+PiBwYWdlcyBpbiBhIHVzZWZ1bCB3YXkg dG8gYXZvaWQgc2hhdHRlcmluZy4KPj4gPj4+Pgo+PiA+Pj4+IElmIHlvdSBjYXJlIGFib3V0IHBl cmZvcm1hbmNlLCBkb24ndCBldmVyIGJhbGxvb24uICBGb3JlaWduIG1hcHBpbmdzIGluCj4+ID4+ Pj4gdHJhbnNsYXRlZCBndWVzdHMgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHRvcCBvZiBSQU0sIGFu ZCB3b3JrIHVwd2FyZHMuCj4+ID4+Pgo+PiA+Pj4KPj4gPj4+IEkgYW0gbm90IHN1cmUgdG8gdW5k ZXJzdGFuZCB0aGlzLiBDYW4geW91IGV4dGVuZD8KPj4gPj4KPj4gPj4KPj4gPj4gSSBhbSBub3Qg c3VyZSB3aGF0IGlzIHVuY2xlYXIuICBIYW5kaW5nIHJhbmRvbSBmcmFtZXMgb2YgUkFNIGJhY2sg dG8gdGhlCj4+ID4+IGh5cGVydmlzb3IgaXMgd2hhdCBleGFjZXJiYXRlcyBob3N0IHN1cGVycGFn ZSBmcmFnbWVudGF0aW9uLCBhbmQgYWxsCj4+ID4+IGJhbGxvb24gZHJpdmVycyBjdXJyZW50bHkg ZG8gaXQuCj4+ID4+Cj4+ID4+IElmIHlvdSB3YW50IHRvIGF2b2lkIGhvc3Qgc3VwZXJwYWdlIGZy YWdtZW50YXRpb24sIGRvbid0IHVzZSBhCj4+ID4+IHNjYXR0ZXJndW4gYXBwcm9hY2ggb2YgaGFu ZGluZyBmcmFtZXMgYmFjayB0byBYZW4uICBIb3dldmVyLCBiZWNhdXNlCj4+ID4+IGV2ZW4gTGlu dXggZG9lc24ndCBwcm92aWRlIGVub3VnaCBob29rcyBpbnRvIHRoZSBwaHlzaWNhbCBtZW1vcnkK Pj4gPj4gbWFuYWdlbWVudCBsb2dpYywgdGhlIG9ubHkgc29sdXRpb24gaXMgdG8gbm90IGJhbGxv b24gYXQgYWxsLCBhbmQgdG8gdXNlCj4+ID4+IGFscmVhZHktdW5vY2N1cGllZCBmcmFtZXMgZm9y IGZvcmVpZ24gbWFwcGluZ3MuCj4+ID4KPj4gPgo+PiA+IERvIHlvdSBoYXZlIGFueSBwb2ludGVy IGluIHRoZSBMaW51eCBjb2RlPwo+PiA+Cj4+ID4KPj4gPj4KPj4gPj4+Cj4+ID4+Pj4KPj4gPj4+ Pgo+PiA+Pj4+IEFzIGZvciB0aGUgSU9NTVUgc3BlY2lmaWNhbGx5LCB0aGluZ3MgYXJlIHJhdGhl ciBlYXNpZXIuICBJdCBpcyB0aGUKPj4gPj4+PiBndWVzdHMgcmVzcG9uc2liaWxpdHkgdG8gZW5z dXJlIHRoYXQgZnJhbWVzIG9mZmVyZWQgdXAgZm9yIGJhbGxvb25pbmcgb3IKPj4gPj4+PiBmb3Jl aWduIG1hcHBpbmdzIGFyZSB1bnVzZWQuICBUaGVyZWZvcmUsIGlmIGFueXRoaW5nIGNhcmVzIGFi b3V0IHRoZQo+PiA+Pj4+IHNwZWNpZmljIDRLIHJlZ2lvbiBiZWNvbWluZyBub24tcHJlc2VudCBp biB0aGUgSU9NTVUgbWFwcGluZ3MsIGl0IGlzIHRoZQo+PiA+Pj4+IGd1ZXN0IGtlcm5lbHMgZmF1 bHQgZm9yIG9mZmVyaW5nIHVwIGEgZnJhbWUgYWxyZWFkeSBpbiB1c2UuCj4+ID4+Pj4KPj4gPj4+ PiBGb3IgdGhlIHNoYXR0ZXJpbmcgaG93ZXZlciwgSXQgaXMgWGVuJ3MgcmVzcG9uc2liaWxpdHkg dG8gZW5zdXJlIHRoYXQKPj4gPj4+PiBhbGwgb3RoZXIgbWFwcGluZ3Mgc3RheSB2YWxpZCBhdCBh bGwgcG9pbnRzLiAgVGhlIGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMKPj4gPj4+PiBpcyB0byBjb25z dHJ1Y3QgYSBuZXcgTDEgdGFibGUsIG1pcnJvcmluZyB0aGUgTDIgc3VwZXJwYWdlIGJ1dCBsYWNr aW5nCj4+ID4+Pj4gdGhlIHNwZWNpZmljIDRLIG1hcHBpbmcgaW4gcXVlc3Rpb24sIHRoZW4gYXRv bWljYWxseSByZXBsYWNlIHRoZSBMMgo+PiA+Pj4+IHN1cGVycGFnZSBlbnRyeSB3aXRoIHRoZSBu ZXcgTDEgdGFibGUsIHRoZW4gaXNzdWUgYW4gSU9NTVUgVExCCj4+ID4+Pj4gaW52YWxpZGF0aW9u IHRvIHJlbW92ZSBhbnkgY2FjaGVkIG1hcHBpbmdzLgo+PiA+Pj4+Cj4+ID4+Pj4gQnkgZm9sbG93 aW5nIHRoYXQgcHJvY2VkdXJlLCBhbGwgRE1BIHdpdGhpbiB0aGUgMk0gcmVnaW9uLCBidXQgbm90 Cj4+ID4+Pj4gaGl0dGluZyB0aGUgNEsgZnJhbWUsIHdvbid0IG9ic2VydmUgYW55IGludGVyaW0g bGFjayBvZiBtYXBwaW5ncy4gIEl0Cj4+ID4+Pj4gYXBwZWFycyBmcm9tIHlvdXIgZGVzY3JpcHRp b24gdGhhdCBYZW4gaXNuJ3QgZm9sbG93aW5nIHRoZSBwcm9jZWR1cmUuCj4+ID4+Pgo+PiA+Pj4K Pj4gPj4+IFhlbiBpcyBmb2xsb3dpbmcgd2hhdCdzIHRoZSBBUk0gQVJNIGlzIG1hbmRhdGluZy4g Rm9yIHNoYXR0ZXJpbmcgcGFnZQo+PiA+Pj4gdGFibGUsIHdlIGhhdmUgdG8gZm9sbG93IHRoZSBi cmVhay1iZWZvcmUtc2VxdWVuY2UgaS5lOgo+PiA+Pj4gICAgIC0gSW52YWxpZGF0ZSB0aGUgTDIg ZW50cnkKPj4gPj4+ICAgICAtIEZsdXNoIHRoZSBUTEJzCj4+ID4+PiAgICAgLSBBZGQgdGhlIG5l dyBMMSB0YWJsZQo+PiA+Pj4gU2VlIEQ0LTE4MTYgaW4gQVJNIERESSAwNDg3QS5rX2lzczEwNzc1 IGZvciBkZXRhaWxzLiBTbyB3ZSBlbmQgdXAgaW4gYQo+PiA+Pj4gc21hbGwgd2luZG93IHdoZXJl IHRoZXJlIGFyZSBubyB2YWxpZCBtYXBwaW5nLiBJdCBpcyBlYXN5IHRvIHRyYXAgZGF0YQo+PiA+ Pj4gYWJvcnQgZnJvbSBwcm9jZXNzb3IgYW5kIHJlc3RhcnRpbmcgaXQgYnV0IG5vdCBmb3IgZGV2 aWNlIG1lbW9yeQo+PiA+Pj4gdHJhbnNhY3Rpb25zLgo+PiA+Pj4KPj4gPj4+IFhlbiBieSBkZWZh dWx0IGlzIHNoYXJpbmcgc3RhZ2UtMiBwYWdlIHRhYmxlcyB3aXRoIGJldHdlZW4gdGhlIElPTU1V Cj4+ID4+PiBhbmQgdGhlIE1NVS4gSG93ZXZlciwgZnJvbSB0aGUgZGlzY3Vzc2lvbiBJIGhhZCB3 aXRoIE9sZWtzYW5kciwgdGhleQo+PiA+Pj4gYXJlIG5vdCBzaGFyaW5nIHBhZ2UgdGFibGVzIGFu ZCBzdGlsbCBzZWUgdGhlIHByb2JsZW0uIEkgYW0gbm90IHN1cmUKPj4gPj4+IGhvdyB0aGV5IGFy ZSB1cGRhdGluZyB0aGUgcGFnZSB0YWJsZSBoZXJlLiBPbGVrc2FuZHIsIGNhbiB5b3UgcHJvdmlk ZQo+PiA+Pj4gbW9yZSBkZXRhaWxzPwo+PiA+Pgo+PiA+Pgo+PiA+PiBBcmUgeW91IHNheWluZyB0 aGF0IEFSTSBoYXMgbm8gd2F5IG9mIG1ha2luZyBhdG9taWMgdXBkYXRlcyB0byB0aGUgSU9NTVUK Pj4gPj4gbWFwcGluZ3M/ICAoSG93IGRvIEkgZ2V0IGFjY2VzcyB0byB0aGF0IGRvY3VtZW50PyAg R29vZ2xlIGdldHMgbWUgdG8KPj4gPj4KPj4gPj4gaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9o ZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2Muc3Vic2V0LmFyY2hpdGVjdHVyZS5yZWZl cmVuY2UvaW5kZXguaHRtbCwKPj4gPj4gYnV0Cj4+ID4+IGh0dHA6Ly9pbmZvY2VudGVyLmFybS5j b20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZGkwNDg3YS5rL2luZGV4Lmh0bWwKPj4gPj4gd2hp Y2ggbG9va3MgbGlrZSB0aGUgZG9jdW1lbnQgeW91IHNwZWNpZmllZCByZXN1bHRzIGluIDQwNC4p Cj4+ID4KPj4gPgo+PiA+IEJlbG93IGEgbGluaywgSSBhbSBub3Qgc3VyZSB3aHkgZ29vZ2xlIGRv ZXMgbm90IHJlZmVyIGl0Ogo+PiA+Cj4+ID4gaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxw L3RvcGljL2NvbS5hcm0uZG9jLmRkaTA0ODdhLmtfMTA3NzUvaW5kZXguaHRtbAo+PiA+Cj4+ID4+ Cj4+ID4+IElmIHNvLCB0aGF0IGlzIGFuIGFyY2hpdGVjdHVyZSBidWcgSU1PLiAgQnkgZGVzaWdu LCB0aGUgSU9NTVUgaXMgb3V0IG9mCj4+ID4+IGNvbnRyb2wgb2YgZ3Vlc3Qgc29mdHdhcmUsIGFu ZCB0aGUgaHlwZXJ2aXNvciBzaG91bGQgYmUgYWJsZSB0byBtYWtlCj4+ID4+IGF0b21pYyBtb2Rp ZmljYXRpb25zIHdpdGhvdXQgZ3Vlc3QgY29vcGVyYXRpb24uCj4+ID4KPj4gPgo+PiA+IEkgdGhp bmsgeW91IG1pc3JlYWQgd2hhdCBJIG1lYW50LCBJT01NVSBzdXBwb3J0cyBhdG9taWMgb3BlcmF0 aW9ucy4gSG93ZXZlciwKPj4gPiBpZiB5b3Ugc2hhcmUgdGhlIHBhZ2UgdGFibGUgd2UgaGF2ZSB0 byBhcHBseSBCcmVhay1CZWZvcmUtTWFrZSB3aGVuCj4+ID4gc2hhdHRlcmluZyBzdXBlcnBhZ2Uu IFRoaXMgaXMgbWFuZGF0b3J5IGlmIHlvdSB3YW50IHRvIGdldCBYZW4gcnVubmluZyBvbgo+PiA+ IGFsbCB0aGUgbWljcm8tYXJjaGl0ZWN0dXJlcy4KPj4gPgo+PiA+IFNvbWUgSU9NTVUgbWF5IGNv cGUgd2l0aCB0aGUgQkJNLCBzb21lIG5vdC4gSSBoYXZlbid0IHNlZW4gYW55IGlzc3VlIHNvIGZh cgo+PiA+IChpdCBkb2VzIG5vdCBtZWFuIHRoZXJlIGFyZSBub25lKS4KPj4gPgo+PiA+IFRoZSBJ T01NVSB1c2VkIGJ5IE9sZWtzYW5kciAoZS5nIFZNU0EtSVBNTVUpIGlzIGFuIElQIGZyb20gUmVu ZXNhcyB3aGljaCBJCj4+ID4gbmV2ZXIgdXNlZCBteXNlbGYuIEluIGhpcyBjYXNlIGhlIG5lZWRz IGRpZmZlcmVudCBwYWdlIHRhYmxlcyBiZWNhdXNlIHRoZQo+PiA+IGxheW91dHMgYXJlIG5vdCB0 aGUgc2FtZS4KPj4gPgo+PiA+IE9sZWtzYW5kciwgbG9va2luZyBhdCB0aGUgY29kZSB5b3VyIHBy b3ZpZGVkLCB0aGUgc3VwZXJwYWdlIGFyZSBzcGxpdCB0aGUKPj4gPiB3YXkgQW5kcmV3IHNhaWQs IGkuZToKPj4gPiAgICAgICAgIDEpIGFsbG9jYXRpbmcgbGV2ZWwgMyB0YWJsZSBtaW51cyB0aGUg NEsgbWFwcGluZwo+PiA+ICAgICAgICAgMikgcmVwbGFjZSBsZXZlbCAyIGVudHJ5IHdpdGggdGhl IG5ldyB0YWJsZQo+PiA+Cj4+ID4gQW0gSSByaWdodD8KPj4KPj4gSXQgc2VlbXMsIHllcy4gV2Fs a2luZyB0aGUgcGFnZSB0YWJsZSBkb3duIHdoZW4gdHJ5aW5nIHRvIHVubWFwIHdlCj4+IGJ1bXAg aW50byBsZWFmIGVudHJ5ICgyTSBtYXBwaW5nKSwKPj4gc28gMk0tNEsgbWFwcGluZyBhcmUgaW5z ZXJ0ZWQgYXQgdGhlIG5leHQgbGV2ZWwgYW5kIGFmdGVyIHRoYXQgdGhlCj4+IHBhZ2UgdGFibGUg ZW50cnkgYXJlIHJlcGxhY2VkLgo+Cj4gTGV0IG1lIHByZW1pc2UgdGhhdCBBbmRyZXcgd2VsbCBw b2ludGVkIG91dCB3aGF0IHNob3VsZCBiZSB0aGUgcmlnaHQKPiBhcHByb2FjaCBvbiBkZWFsaW5n IHdpdGggdGhpcyBpc3N1ZS4gSG93ZXZlciwgaWYgd2UgaGF2ZSB0byB1c2UKPiBicmVhay1iZWZv cmUtbWFrZSBmb3IgSU9NTVUgcGFnZXRhYmxlcywgdGhlbiBpdCBtZWFucyB3ZSBjYW5ub3QgZG8K PiBhdG9taWMgdXBkYXRlcyB0byBJT01NVSBtYXBwaW5ncywgbGlrZSBBbmRyZXcgd3JvdGUuIFRo ZXJlZm9yZSwgd2UKPiBoYXZlIHRvIG1ha2UgYSBjaG9pY2U6IHdlIGVpdGhlciBkaXNhYmxlIHN1 cGVycGFnZSBJT01NVSBtYXBwaW5ncyBvcgo+IGJhbGxvb25pbmcuIEkgd291bGQgZGlzYWJsZSBJ T01NVSBzdXBlcnBhZ2UgbWFwcGluZ3MsIG9uIHRoZSBncm91bmQgdGhhdAo+IHN1cHBvcnRpbmcg c3VwZXJwYWdlIG1hcHBpbmdzIHdpdGhvdXQgc3VwcG9ydGluZyBhdG9taWMgc2hhdHRlcmluZyBv cgo+IHJlc3RhcnRhYmxlIHRyYW5zYWN0aW9ucyBpcyBub3QgcmVhbGx5IHN1cHBvcnRpbmcgc3Vw ZXJwYWdlIG1hcHBpbmdzLgoKU291bmRzIHJlYXNvbmFibGUuIEFzIEp1bGllbiBtZW50aW9uZWQg dG9vICJ1c2luZyA0SyBwYWdlcyBvbmx5IiBpcwp0aGUgc2FmZXN0IHdheS4KQXQgbGVhc3QgdW50 aWwgSSB3aWxsIGZpbmQgYSByZWFzb24gd2h5IERNQSBmYXVsdHMgdGFrZSBwbGFjZSBkZXNwaXRl CnRoZSBmYXN0IHRoYXQgc2hhdHRlcmluZyBpcwpkb2luZyBpbiBhbiBhdG9taWMgd2F5LgoKPgo+ IEhvd2V2ZXIsIHlvdSBhcmUgbm90IGRvaW5nIGJyZWFrLWJlZm9yZS1tYWtlIGhlcmUuIEkgd291 bGQgaW52ZXN0aWdhdGUKPiBpZiBicmVhay1iZWZvcmUtbWFrZSBpcyByZXF1aXJlZCBieSBWTVNB LUlQTU1VLiBJZiBpdCBpcyBub3QgcmVxdWlyZWQsCj4gd2h5IGFyZSB5b3Ugc2VlaW5nIERNQSBm YXVsdHM/CgpVbmZvcnR1bmFsbHksIEkgY2FuJ3Qgc2F5IGFib3V0IGJyZWFrLWJlZm9yZS1tYWtl IHNlcXVlbmNlIGZvciBJUE1NVQphdCB0aGUgbW9tZW50LgpUUk0gc2F5cyBub3RoaW5nIGFib3V0 IGl0LgoKLS0gClJlZ2FyZHMsCgpPbGVrc2FuZHIgVHlzaGNoZW5rbwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==