From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH 5/7] public / x86: introduce __HYPERCALL_iommu_op Date: Mon, 26 Feb 2018 09:57:13 +0000 Message-ID: <88e69f29f4d243eb8b9df40277e48085@AMSPEX02CL03.citrite.net> References: <20180212104714.1922-1-paul.durrant@citrix.com> <20180212104714.1922-6-paul.durrant@citrix.com> <5ed4994c89994703b24e607c5f183e68@AMSPEX02CL03.citrite.net> <6c5e1abad397407e8dbed6e3945c68be@AMSPEX02CL03.citrite.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eqFX7-00015i-Un for xen-devel@lists.xenproject.org; Mon, 26 Feb 2018 09:57:21 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Kevin Tian , "xen-devel@lists.xenproject.org" Cc: Stefano Stabellini , Wei Liu , Andrew Cooper , "Tim (Xen.org)" , George Dunlap , Jan Beulich , Ian Jackson , Daniel De Graaf List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBUaWFuLCBLZXZpbiBbbWFpbHRv OmtldmluLnRpYW5AaW50ZWwuY29tXQ0KPiBTZW50OiAyNCBGZWJydWFyeSAyMDE4IDAyOjU3DQo+ IFRvOiBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPjsgeGVuLWRldmVsQGxp c3RzLnhlbnByb2plY3Qub3JnDQo+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5p QGtlcm5lbC5vcmc+OyBXZWkgTGl1DQo+IDx3ZWkubGl1MkBjaXRyaXguY29tPjsgR2VvcmdlIER1 bmxhcCA8R2VvcmdlLkR1bmxhcEBjaXRyaXguY29tPjsNCj4gQW5kcmV3IENvb3BlciA8QW5kcmV3 LkNvb3BlcjNAY2l0cml4LmNvbT47IElhbiBKYWNrc29uDQo+IDxJYW4uSmFja3NvbkBjaXRyaXgu Y29tPjsgVGltIChYZW4ub3JnKSA8dGltQHhlbi5vcmc+OyBKYW4gQmV1bGljaA0KPiA8amJldWxp Y2hAc3VzZS5jb20+OyBEYW5pZWwgRGUgR3JhYWYgPGRnZGVncmFAdHljaG8ubnNhLmdvdj4NCj4g U3ViamVjdDogUkU6IFtYZW4tZGV2ZWxdIFtQQVRDSCA1LzddIHB1YmxpYyAvIHg4NjogaW50cm9k dWNlDQo+IF9fSFlQRVJDQUxMX2lvbW11X29wDQo+IA0KPiA+IEZyb206IFBhdWwgRHVycmFudCBb bWFpbHRvOlBhdWwuRHVycmFudEBjaXRyaXguY29tXQ0KPiA+IFNlbnQ6IEZyaWRheSwgRmVicnVh cnkgMjMsIDIwMTggNTo0MSBQTQ0KPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+ID4gRnJvbTogVGlhbiwgS2V2aW4gW21haWx0bzprZXZpbi50aWFuQGludGVsLmNvbV0N Cj4gPiA+IFNlbnQ6IDIzIEZlYnJ1YXJ5IDIwMTggMDU6MTcNCj4gPiA+IFRvOiBQYXVsIER1cnJh bnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPjsgeGVuLQ0KPiA+IGRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnDQo+ID4gPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJu ZWwub3JnPjsgV2VpIExpdQ0KPiA+ID4gPHdlaS5saXUyQGNpdHJpeC5jb20+OyBHZW9yZ2UgRHVu bGFwIDxHZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+Ow0KPiA+ID4gQW5kcmV3IENvb3BlciA8QW5k cmV3LkNvb3BlcjNAY2l0cml4LmNvbT47IElhbiBKYWNrc29uDQo+ID4gPiA8SWFuLkphY2tzb25A Y2l0cml4LmNvbT47IFRpbSAoWGVuLm9yZykgPHRpbUB4ZW4ub3JnPjsgSmFuIEJldWxpY2gNCj4g PiA+IDxqYmV1bGljaEBzdXNlLmNvbT47IERhbmllbCBEZSBHcmFhZiA8ZGdkZWdyYUB0eWNoby5u c2EuZ292Pg0KPiA+ID4gU3ViamVjdDogUkU6IFtYZW4tZGV2ZWxdIFtQQVRDSCA1LzddIHB1Ymxp YyAvIHg4NjogaW50cm9kdWNlDQo+ID4gPiBfX0hZUEVSQ0FMTF9pb21tdV9vcA0KPiA+ID4NCj4g PiA+ID4gRnJvbTogUGF1bCBEdXJyYW50IFttYWlsdG86UGF1bC5EdXJyYW50QGNpdHJpeC5jb21d DQo+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIEZlYnJ1YXJ5IDEzLCAyMDE4IDU6MjMgUE0NCj4gPiA+ ID4NCj4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiA+IEZyb206 IFRpYW4sIEtldmluIFttYWlsdG86a2V2aW4udGlhbkBpbnRlbC5jb21dDQo+ID4gPiA+ID4gU2Vu dDogMTMgRmVicnVhcnkgMjAxOCAwNjo0Mw0KPiA+ID4gPiA+IFRvOiBQYXVsIER1cnJhbnQgPFBh dWwuRHVycmFudEBjaXRyaXguY29tPjsgeGVuLQ0KPiA+ID4gPiBkZXZlbEBsaXN0cy54ZW5wcm9q ZWN0Lm9yZw0KPiA+ID4gPiA+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtl cm5lbC5vcmc+OyBXZWkgTGl1DQo+ID4gPiA+ID4gPHdlaS5saXUyQGNpdHJpeC5jb20+OyBHZW9y Z2UgRHVubGFwIDxHZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+Ow0KPiA+ID4gPiA+IEFuZHJldyBD b29wZXIgPEFuZHJldy5Db29wZXIzQGNpdHJpeC5jb20+OyBJYW4gSmFja3Nvbg0KPiA+ID4gPiA+ IDxJYW4uSmFja3NvbkBjaXRyaXguY29tPjsgVGltIChYZW4ub3JnKSA8dGltQHhlbi5vcmc+OyBK YW4gQmV1bGljaA0KPiA+ID4gPiA+IDxqYmV1bGljaEBzdXNlLmNvbT47IERhbmllbCBEZSBHcmFh ZiA8ZGdkZWdyYUB0eWNoby5uc2EuZ292Pg0KPiA+ID4gPiA+IFN1YmplY3Q6IFJFOiBbWGVuLWRl dmVsXSBbUEFUQ0ggNS83XSBwdWJsaWMgLyB4ODY6IGludHJvZHVjZQ0KPiA+ID4gPiA+IF9fSFlQ RVJDQUxMX2lvbW11X29wDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEZyb206IFBhdWwgRHVycmFu dA0KPiA+ID4gPiA+ID4gU2VudDogTW9uZGF5LCBGZWJydWFyeSAxMiwgMjAxOCA2OjQ3IFBNDQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBib2lsZXJw bGF0ZSBmb3IgYSBuZXcgaHlwZXJjYWxsIHRvIGFsbG93IGENCj4gPiA+ID4gPiA+IGRvbWFpbiB0 byBjb250cm9sIElPTU1VIG1hcHBpbmdzIGZvciBpdHMgb3duIHBhZ2VzLg0KPiA+ID4gPiA+ID4g V2hpbHN0IHRoZXJlIGlzIGR1cGxpY2F0aW9uIG9mIGNvZGUgYmV0d2VlbiB0aGUgbmF0aXZlIGFu ZCBjb21wYXQNCj4gPiA+ID4gZW50cnkNCj4gPiA+ID4gPiA+IHBvaW50cyB3aGljaCBhcHBlYXJz IHJpcGUgZm9yIHNvbWUgZm9ybSBvZiBjb21iaW5hdGlvbiwgSSB0aGluayBpdCBpcw0KPiA+ID4g PiA+ID4gYmV0dGVyIHRvIG1haW50YWluIHRoZSBzZXBhcmF0aW9uIGFzLWlzIGJlY2F1c2UgdGhl IGNvbXBhdCBlbnRyeQ0KPiA+IHBvaW50DQo+ID4gPiA+ID4gPiB3aWxsIG5lY2Vzc2FyaWx5IGdh aW4gY29tcGxleGl0eSBpbiBzdWJzZXF1ZW50IHBhdGNoZXMuDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gTk9URTogVGhpcyBoeXBlcmNhbGwgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgeDg2IGFu ZCBpcyBjdXJyZW50bHkNCj4gPiA+ID4gPiA+ICAgICAgIHJlc3RyaWN0ZWQgYnkgWFNNIHRvIGRv bTAgc2luY2UgaXQgY291bGQgYmUgdXNlZCB0byBjYXVzZQ0KPiA+IElPTU1VDQo+ID4gPiA+ID4g PiAgICAgICBmYXVsdHMgd2hpY2ggbWF5IGJyaW5nIGRvd24gYSBob3N0Lg0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFBhdWwgRHVycmFudCA8cGF1bC5kdXJyYW50QGNp dHJpeC5jb20+DQo+ID4gPiA+ID4gWy4uLl0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiA+ICtzdGF0aWMgYm9vbCBjYW5fY29udHJvbF9pb21tdSh2b2lkKQ0KPiA+ID4g PiA+ID4gK3sNCj4gPiA+ID4gPiA+ICsgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50 LT5kb21haW47DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ID4g PiArICAgICAqIElPTU1VIG1hcHBpbmdzIGNhbm5vdCBiZSBtYW5pcHVsYXRlZCBpZjoNCj4gPiA+ ID4gPiA+ICsgICAgICogLSB0aGUgSU9NTVUgaXMgbm90IGVuYWJsZWQgb3IsDQo+ID4gPiA+ID4g PiArICAgICAqIC0gdGhlIElPTU1VIGlzIHBhc3NlZCB0aHJvdWdoIG9yLA0KPiA+ID4gPiA+ID4g KyAgICAgKiAtIHNoYXJlZCBFUFQgY29uZmlndXJlZCBvciwNCj4gPiA+ID4gPiA+ICsgICAgICog LSBYZW4gaXMgbWFpbnRhaW5pbmcgYW4gaWRlbnRpdHkgbWFwLg0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gImZvciBkb20wIg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiA+ ID4gKyAgICBpZiAoICFpb21tdV9lbmFibGVkIHx8IGlvbW11X3Bhc3N0aHJvdWdoIHx8DQo+ID4g PiA+ID4gPiArICAgICAgICAgaW9tbXVfdXNlX2hhcF9wdChjdXJyZCkgfHwgbmVlZF9pb21tdShj dXJyZCkgKQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBndWVzcyBpdCdzIGNsZWFyZXIgdG8gZGly ZWN0bHkgY2hlY2sgaW9tbXVfZG9tMF9zdHJpY3QgaGVyZQ0KPiA+ID4gPg0KPiA+ID4gPiBXZWxs LCB0aGUgcHJvYmxlbSB3aXRoIHRoYXQgaXMgdGhhdCBpdCB0b3RhbGx5IHRpZXMgdGhpcyBpbnRl cmZhY2UgdG8gZG9tMC4NCj4gPiA+ID4gV2hpbHN0LCBpbiBwcmFjdGljZSwgdGhhdCBpcyB0aGUg Y2FzZSBhdCB0aGUgbW9tZW50IChiZWNhdXNlIG9mIHRoZSB4c20NCj4gPiA+ID4gY2hlY2spIEkg ZG8gd2FudCB0byBsZWF2ZSB0aGUgcG90ZW50aWFsIHRvIGFsbG93IG90aGVyIFBWIGRvbWFpbnMg dG8NCj4gPiBjb250cm9sDQo+ID4gPiA+IHRoZWlyIElPTU1VIG1hcHBpbmdzLCBpZiB0aGF0IG1h a2Ugc2Vuc2UgaW4gZnV0dXJlLg0KPiA+ID4gPg0KPiA+ID4NCj4gPiA+IGZpcnN0IGl0J3MgaW5j b25zaXN0ZW50IGZyb20gdGhlIGNvbW1lbnRzIC0gIlhlbiBpcyBtYWludGFpbmluZw0KPiA+ID4g YW4gaWRlbnRpdHkgbWFwIiB3aGljaCBvbmx5IGFwcGxpZXMgdG8gZG9tMC4NCj4gPg0KPiA+IFRo YXQncyBub3QgdHJ1ZS4gSWYgSSBhc3NpZ24gYSBQQ0kgZGV2aWNlIHRvIGFuIEhWTSBkb21haW4s IGZvciBpbnN0YW5jZSwNCj4gPiB0aGVuIG5lZWRfaW9tbXUoKSBpcyB0cnVlIGZvciB0aGF0IGRv bWFpbiBhbmQgaW5kZWVkIFhlbiBtYWludGFpbnMgYSAxOjENCj4gPiBCRk46R0ZOIG1hcCBmb3Ig dGhhdCBkb21haW4uDQo+ID4NCj4gPiA+DQo+ID4gPiBzZWNvbmQgSSdtIGFmcmFpZCAhbmVlZF9p b21tdSBpcyBub3QgYW4gYWNjdXJhdGUgY29uZGl0aW9uIHRvIHJlcHJlc2VudA0KPiA+ID4gUFYg ZG9tYWluLiB3aGF0IGFib3V0IGlvbW11IGFsc28gZW5hYmxlZCBmb3IgZnV0dXJlIFBWIGRvbWFp bnM/DQo+ID4gPg0KPiA+DQo+ID4gSSBkb24ndCBxdWl0ZSBmb2xsb3cuLi4gbmVlZF9pb21tdSBp cyBhIHBlci1kb21haW4gZmxhZywgc2V0IGZvciBkb20wIHdoZW4NCj4gPiBpbiBzdHJpY3QgbW9k ZSwgc2V0IGZvciBvdGhlcnMgd2hlbiBwYXNzaW5nIHRocm91Z2ggYSBkZXZpY2UuIEVpdGhlciB3 YXksIGlmDQo+ID4gWGVuIGlzIG1haW50YWluaW5nIHRoZSBJT01NVSBwYWdldGFibGVzIHRoZW4g aXQgaXMgY2xlYXJseSB1bnNhZmUgZm9yIHRoZQ0KPiA+IGRvbWFpbiB0byBhbHNvIGJlIG1lc3Np bmcgd2l0aCB0aGVtLg0KPiA+DQo+IA0KPiBJIGRvbid0IHRoaW5rIGl0J3MgYSBtZXNzLiBYZW4g YWx3YXlzIG1haW50YWlucyB0aGUgSU9NTVUgcGFnZXRhYmxlcw0KPiBpbiBhIHdheSB0aGF0IGd1 ZXN0IGV4cGVjdHM6DQo+IA0KDQpJJ2xsIGRlZmluZSBzb21lIHRlcm1zIHRvIHRyeSB0byBhdm9p ZCBjb25mdXNpbmcuLi4NCg0KLSB3aGVyZSB0aGUgSU9NTVUgY29kZSBpbiBYZW4gbWFpbnRhaW5z IGEgbWFwIHN1Y2ggdGhhdCBCRk4gPT0gTUZOLCBsZXTigJlzIGNhbGwgdGhpcyBhbiAnaWRlbnRp dGl0eSBNRk4gbWFwJw0KLSB3aGVyZSB0aGUgSU9NTVUgY29kZSBpbiBYZW4gKmluaXRpYWxseSBw cm9ncmFtbWVzKiB0aGUgSU9NTVUgd2l0aCBhbiBpZGVudGl0eSBNRk4gbWFwIGZvciB0aGUgd2hv bGUgaG9zdCwgbGV0J3MgY2FsbCB0aGlzIGEgJ2hvc3QgbWFwJw0KLSB3aGVyZSB0aGUgSU9NTVUg Y29kZSBpbiBYZW4gbWFpbnRhaW5zIGEgbWFwIHN1Y2ggdGhhdCBCRk4gPT0gR0ZOLCBsZXQncyBj YWxsIHRoaXMgYW4gJ2lkZW50aXR5IEdGTiBtYXAnDQotIHdoZXJlIHRoZSBJT01NVSBjb2RlIGlu IFhlbiAqaW5pdGlhbGx5IHByb2dyYW1tZXMqIHRoZSBJT01NVSB3aXRoIGFuIGlkZW50aXR5IEdG TiBtYXAgZm9yIHRoZSBndWVzdCwgbGV0J3MgY2FsbCB0aGlzIGEgJ2d1ZXN0IG1hcCcNCg0KPiAx KSBmb3IgZG9tMCAody9vIHB2SU9NTVUpIGluIHN0cmljdCBtb2RlLCBpdCdzIE1GTjpNRk4gaWRl bnRpdHkgbWFwcGluZw0KDQpXaXRob3V0IHN0cmljdCBtb2RlLCBhIGhvc3QgbWFwIGlzIHNldCB1 cCBmb3IgZG9tMCwgb3RoZXJ3aXNlIGl0IGlzIGFuIGlkZW50aXR5IE1GTiBtYXAuIEluIGJvdGgg Y2FzZXMgdGhlIHhlbi1zd2lvdGxiIGRyaXZlciBpcyB1c2UgaW4gTGludXggYXMgdGhlcmUgaXMg bm8gZGlmZmVyZW5jZSBmcm9tIGl0cyBwb2ludCBvZiB2aWV3Lg0KDQo+IDIpIGZvciBkb20wICh3 LyBwdklPTU1VKSwgaXQncyBCRk46TUZOIG1hcHBpbmcNCg0KV2l0aCBQVi1JT01NVSB0aGVyZSBp cyBhbHNvIGEgaG9zdCBtYXAgYnV0IHNpbmNlIGEgaG9zdCBtYXAgaXMgb25seSBpbml0aWFsaXpl ZCBhbmQgbm90IG1haW50YWluZWQgKGkuZS4gbm90aGluZyBoYXBwZW5zIHdoZW4gcGFnZXMgYXJl IHJlbW92ZWQgZnJvbSBvciBhZGRlZCB0byBkb20wKSB0aGVuIGl0IGlzIHNhZmUgZm9yIGRvbTAg dG8gY29udHJvbCB0aGUgSU9NTVUgbWFwcGluZ3MgYXMgaXQgd2lsbCBub3QgY29uZmxpY3Qgd2l0 aCBhbnl0aGluZyBYZW4gaXMgZG9pbmcuDQoNCj4gMykgZm9yIEhWTSAody9vIHZpcnR1YWwgVlRk KSB3aXRoIHBhc3N0aHJvdWdoIGRldmljZSwgaXQncyBHRk46TUZODQoNCkkgaGF2ZSBub3QgYmVl biBmb2xsb3dpbmcgdmlydHVhbCBWVGQgY2xvc2VseSBidXQsIHllcywgYXMgaXQgc3RhbmRzICp3 aGVuIGgvdyBpcyBwYXNzZWQgdGhyb3VnaCogdGhlIGd1ZXN0IGdldHMgYW4gaWRlbnRpdHkgR0ZO IG1hcCBvdGhlcndpc2UgaXQgZ2V0cyBubyBtYXAgYXQgYWxsLg0KDQo+IDQpIGZvciBIVk0gKHcv IHZpcnR1YWwgVlRkKSB3aXRoIHBhc3N0aHJvdWdoIGRldmljZSwgaXQncyBCRk46TUZODQo+IA0K DQpXaXRoIHZpcnR1YWwgVlRkIEknZCBleHBlY3QgdGhlcmUgd291bGQgYmUgYSBndWVzdCBtYXAg YW5kIHRoZW4gdGhlIGd1ZXN0IHdvdWxkIGdldCB0aGUgc2FtZSBsZXZlbCBvZiBjb250cm9sIG92 ZXIgdGhlIElPTU1VIHRoYXQgUFYtSU9NTVUgYWxsb3dzIGZvciBhIFBWIGRvbWFpbiBidXQsIG9m IGNvdXJzZSwgc3VjaCBjb250cm9sIGlzIGFzLXlldCB1bnNhZmUgZm9yIGd1ZXN0cyBzaW5jZSBh biBJT01NVSBmYXVsdCBjYW4gY2F1c2UgYSBob3N0IGNyYXNoLg0KDQo+IChmcm9tIElPTU1VIHAu by52IHdlIGNhbiBhbHdheXMgY2FsbCBhbGwgNCBjYXRlZ29yaWVzIGFzIEJGTjpNRk4uDQo+IEkg ZGVsaWJlcmF0ZWx5IHNlcGFyYXRlIHRoZW0gZnJvbSB1c2FnZSBwLm8udiwgd2hlcmUgJ0JGTicN Cj4gcmVwcmVzZW50cyB0aGUgY2FzZXMgd2hlcmUgZ3Vlc3QgZXhwbGljaXRseSBtYW5hZ2VzIGEg bmV3IGFkZHJlc3MNCj4gc3BhY2UgLSBkaWZmZXJlbnQgZnJvbSBwaHlzaWNhbCBhZGRyZXNzIHNw YWNlIGluIGl0cyBtaW5kKQ0KPiANCj4gdGhlcmUgaXMgYW4gYWRkcmVzcyBzcGFjZSBzd2l0Y2gg aW4gMikgYW5kIDQpIGJlZm9yZSBhbmQgYWZ0ZXINCj4gZW5hYmxpbmcgdklPTU1VLg0KDQpJcyB0 aGVyZT8gVGhlIGluaXRpYWwgbWFwcGluZyBpbiAyIGlzIHRoZSBzYW1lIGFzIDEsIGFuZCB0aGUg aW5pdGlhbCBtYXBwaW5nIGluIDQgaXMgdGhlIHNhbWUgYXMgMy4NCg0KPiANCj4gYWJvdmUgaXMg d2h5IEkgZGlkbuKAmXQgZm9sbG93IHRoZSBhc3N1bXB0aW9uIHRoYXQgIlhlbiBpcyBtYWludGFp bmluZw0KPiBhbiBpZGVudGl0eSBtYXAiIGlzIGlkZW50aWNhbCB0byBuZWVkX2lvbW11Lg0KPiAN Cg0KVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBpbiBjYXNlcyAyIGFuZCA0IFhlbiBpcyBub3Qg Km1haW50YWluaW5nKiBhbnkgbWFwIHNvIG5lZWRfaW9tbXUoZCkgc2hvdWxkIGJlIGZhbHNlIGFu ZCBoZW5jZSB0aGUgZG9tYWluIGNhbiBjb250cm9sIGl0cyBvd24gbWFwcGluZ3Mgd2l0aG91dCBp bnRlcmZlcmluZyB3aGljaCB3aGF0IFhlbiBpcyBkb2luZyBpbnRlcm5hbGx5Lg0KDQpEb2VzIHRo YXQgaGVscCBjbGFyaWZ5Pw0KDQpDaGVlcnMsDQoNCiAgUGF1bA0KDQo+IFRoYW5rcw0KPiBLZXZp bg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==