From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC] netif: staging grants for requests Date: Fri, 6 Jan 2017 11:02:33 -0800 (PST) Message-ID: References: <58518B40.3050408@oracle.com> <586EAC1C.4020308@oracle.com> <586FD04A.5070700@oracle.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 1cPZmn-0008AE-GK for xen-devel@lists.xenproject.org; Fri, 06 Jan 2017 19:02:45 +0000 In-Reply-To: <586FD04A.5070700@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Joao Martins Cc: "xen-devel@lists.xenproject.org" , Stefano Stabellini , Wei Liu , Paul Durrant , Andrew Cooper List-Id: xen-devel@lists.xenproject.org T24gRnJpLCA2IEphbiAyMDE3LCBKb2FvIE1hcnRpbnMgd3JvdGU6Cj4gPj4+IEkgZG9uJ3QgdGhp bmsgaXQgbWFrZXMgc2Vuc2U6IHRoZSByZXN0IG9mIHRoZSBwYWdlIHdvdWxkIHN0aWxsIGJlCj4g Pj4+IGFjY2Vzc2libGUgZnJvbSB0aGUgYmFja2VuZCwgd2hpY2ggY291bGQgY29tcHJvbWlzZSBp dHMgY29udGVudC4gSSB3b3VsZAo+ID4+PiBzaGFyZSBhIGxpc3Qgb2YgcGFnZXMgdGhhdCBjYW4g YmUgbWFwcGVkIGNvbnRpZ3VvdXNseSB0byBjcmVhdGUgYSBkYXRhCj4gPj4+IHJpbmcuCj4gPj4g Tm90ZSB0aGF0IHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgVFggZ3JlZnMgYXJlIHJlYWRvbmx5LCB3 aGVyZWFzIHRoZSByeCByaW5nIGlzCj4gPj4gcmVhZC93cml0ZSwgc28gSSBpbmhlcml0IHRoaXMg c2FtZSBwcm9wZXJ0eSBoZXJlIGZvciB0aGUgZGF0YSBncmVmcyB0b28uIEkKPiA+PiB3b3VsZG4n dCBtaW5kIGhhdmluZyBhIGdyYW50IHBlciBwYWNrZXQ7Cj4gPiAKPiA+IFRoYXQncyBub3Qgd2hh dCBJIGFtIHN1Z2dlc3RpbmcuCj4gPiAKPiA+IExldCdzIHN1cHBvc2UgdGhhdCB0aGUgZnJvbnRl bmQgY2hvb3NlcyBhIHNsb3Qgc2l6ZSBvZiAxMjggYW5kIHRoYXQgd2UKPiA+IGhhdmUgMjU2IHNs b3RzIGluIHRvdGFsLiBUaGUgZnJvbnRlbmQgc2hhcmVzIDggcGFnZXMgdG8gdGhlIGJhY2tlbmQ6 Cj4gPiAKPiA+ICAxMjgqMjU2ID0gMzI3NjggPSA4KjQwOTYKPiA+IAo+ID4gdGhlc2UgOCBwYWdl cyBhcmUgZ29pbmcgdG8gYmUgdXNlZCBmb3IgYWxsIGRhdGEgc2xvdHMuIFNvIHNsb3QgbnVtYmVy IDM0Cj4gPiAoaWYgd2UgY291bnQgZnJvbSAxKSBpcyB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlIHNl Y29uZCBwYWdlICgzMiBkYXRhCj4gPiBzbG90cyBwZXIgcGFnZSkuCj4gRXhhY3RseSBhbmQgdGhh dCdzIHdoYXQgSSBhbSBwcm9wb3NpbmcgOikgVGhlIHRleHQgYXBwZWFycyB0byBiZSBhIGJpdCBh bWJpZ3VvdXMKPiBhbmQgY2F1c2luZyBhIGxpdHRsZSBjb25mdXNpb24sIG15IGFwb2xvZ2llcy4K CkFsbCByaWdodCwgSSByZWFsbHkgbWlzdW5kZXJzdG9vZCB0aGUgZG9jdW1lbnQuIFBsZWFzZSBj bGFyaWZ5IGl0IGluIHRoZQpuZXh0IHZlcnNpb24gOi0pCgoKPiA+PiBCdXQgdGhlbiBub3RoaW5n IGN1cnJlbnRseSBzdG9wcyBhIGJhY2tlbmQgdG8gd3JpdGUgdG8gdGhlc2UgcGFnZXMKPiA+PiBp cnJlc3BlY3RpdmUgb2YgdGhlIGFwcHJvYWNoICh3aXRoIG9yIHdpdGhvdXQgc3RhZ2luZyBncmFu dHMpIHVudGlsCj4gPj4gdGhleSBhcmUgY29waWVkL3Jldm9rZWQ7IHRoZSBmcm9udGVuZCB3b3Vs ZCBhbHdheXMgY29weSBmcm9tIHRoZQo+ID4+IHN0YWdpbmcgcmVnaW9uIGludG8gYSBndWVzdC1v bmx5IHZpc2libGUgcmVnaW9uLgo+ID4+Cj4gPj4+PiBUaGlzIGxpc3QgaGFzIHR3aWNlIGFzIG1h eCBzbG90cyBhcyB3b3VsZCBoYXZlIGB0eC1yaW5nLXJlZmAgb3IgYHJ4LXJpbmctcmVmYAo+ID4+ Pj4gcmVzcGVjdGl2ZWx5LCBhbmQgaXQgaXMgc2V0IHVwIGF0IGRldmljZSBjcmVhdGlvbiBhbmQg cmVtb3ZlZCBhdCBkZXZpY2UKPiA+Pj4+IHRlYXJkb3duLCBzYW1lIGFzIHRoZSBjb21tYW5kIHJp bmcgZW50cmllcy4gVGhpcyB3YXkgd2Uga2VlcCB1cCB3aXRoIHJpbmcgc2l6ZQo+ID4+Pj4gY2hh bmdlcyBhcyBpdCBpdCBleHBlY3RlZCB0byBiZSBpbiB0aGUgY29tbWFuZCByaW5nLiBBIGh5cG90 aGV0aWNhbCBtdWx0aS1wYWdlCj4gPj4+ICAgICAgICAgICAgICAgICBeIHJlcGV0aXRpb24KPiA+ PiBPSywgd2lsbCByZW1vdmUgaXQuCj4gPj4KPiA+Pj4+IGNvbW1hbmQgcmluZyB3b3VsZCBpbmNy ZWFzZSBudW1iZXIgb2Ygc2xvdHMgYW5kIHRodXMgdGhpcyBkYXRhIGxpc3Qgd291bGQgZ3Jvdwo+ ID4+Pj4gYWNjb3JkaW5nbHkuIExpc3QgaXMgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aGljaCBg YGBncmVmYGBgIGZpZWxkIGlzIDAsIGhhdmluZwo+ID4+Pj4gaWdub3JlZCB0aGUgb3RoZXIgZmll bGRzIG9mIHRoaXMgc3BlY2lmaWMgZW50cnkuCj4gPj4+Cj4gPj4+IENvdWxkIHlvdSBwbGVhc2Ug ZXhwbGFpbiBhIGJpdCBtb3JlIGhvdyB0aGUgY29tbWFuZCByaW5nIGluY3JlYXNlcyB0aGUKPiA+ Pj4gbnVtYmVyIG9mIHNsb3QgYW5kIHdoeSB3ZSBuZWVkIHRvIGFsbG9jYXRlIHR3aWNlIHRoZSBu dW1iZXIgb2YgcmVxdWlyZWQKPiA+Pj4gc2xvdHMgYXQgdGhlIGJlZ2lubmluZz8KPiA+PiAiVGhp cyBsaXN0IGhhcyB0d2ljZSBhcyBtYXggc2xvdHMgYXMiIGlzIG1lYW50IHRvIHNheSB0aGF0IHRo ZSBsaXN0IGhhcyB0d2ljZSBhcwo+ID4+IGNhcGFjaXR5IGFzIHRoZSBjb21tYW5kIHJpbmcuIFRo ZSBsaXN0IGVudHJ5IGlzIDggb2N0ZXRzLCBzbyBvbmUgcGFnZSBmaXRzIDUxMgo+ID4+IGVudHJp ZXMuIFRoZSBkYXRhIHJlZiBpcyBvbmx5IGZpbGxlZCB3aXRoIHVwIHRvIHRoZSBjb21tYW5kIHJp bmcgc2l6ZSB3aGljaAo+ID4+IG1lYW5zIG9ubHkgaGFsZiBvZiBpdCB3b3VsZCBiZSBmaWxsZWQg Y3VycmVudGx5LiBJIHdpbGwgYWRqdXN0IHRoaXMgc2VudGVuY2UKPiA+PiBoZXJlIHRvIG1ha2Ug aXQgbW9yZSBjbGVhci4KPiA+Pgo+ID4+IG11bHRpLXBhZ2UgcmluZ3MgYXJlbid0IHN1cHBvcnRl ZCBvbiBuZXRiYWNrL25ldGZyb250ICh5ZXQpIGJ1dCBhcyBhbiBleGFtcGxlIHdlCj4gPj4gd291 bGQgaGF2ZSBvbmUgYHR4LWRhdGEtcmVmMGAgdG8gcmVwcmVzZW50IHRoZSBjb21tYW5kIHJpbmcg c2xvdHMgb2YKPiA+PiBgdHgtcmluZy1yZWYwYCBhbmQgdHgtcmluZy1yZWYxYC4gSSBub3RpY2Vk IHRoYXQgdG8gbm90IHdhc3RlIGdyYW50cywgSSBuZWVkIHRvCj4gPj4gYXNzdW1lIHRoZSBgYGBk YXRhLXJlZmBgYCBpcyBmdWxsIHdpdGggdGhlIGxhY2sgb2YgYSB0ZXJtYW50aW5nIGVudHJ5OyBv dGhlcndpc2UKPiA+PiBJIHdvdWxkIGVuZHVwIG5lZWRpbmcgYHR4LWRhdGEtcmVmMWAgdG8gaGF2 ZSBhIHRlcm1pbmF0aW5nIGVudHJ5LiBJIHdpbGwgYWRkIGEKPiA+PiBzZW50ZW5jZSBtZW50aW9u aW5nIHRoaXMuCj4gPj4KPiA+Pj4+ICMjIERhdGFwYXRoIENoYW5nZXMKPiA+Pj4+Cj4gPj4+PiBU aGUgcGFja2V0IGlzIGNvcGllZCB0by9mcm9tIHRoZSBtYXBwZWQgZGF0YSBsaXN0IGdyZWZzIG9m IHVwIHRvIGB0eC1kYXRhLWxlbmAKPiA+Pj4+IG9yIGByeC1kYXRhLWxlbmAuIFRoaXMgbWVhbnMg dGhhdCB0aGUgYnVmZmVyIChyZWZlcmVuY2VkIGJ5IGBncmVmYCBmcm9tIHdpdGhpbgo+ID4+Pj4g dGhlIGBzdHJ1Y3QgbmV0aWZfW3R4fHJ4XV9yZXF1ZXN0YCkgaGFzIHRoZSBzYW1lIGRhdGEgdXAg dG8gYHNpemVgLiAgSW4gb3RoZXIKPiA+Pj4+IHdvcmRzLCAqZ3JlZlswLT5zaXplXSBjb250ZW50 cyBpcyByZXBsaWNhdGVkIG9uIHRoZSBgZGF0YS1yaW5nYCBhdCBgaWR4YC4gSGVuY2UKPiA+Pj4+ IG5ldGJhY2sgc2hvdWxkIGlnbm9yZSB1cCB0byBgc2l6ZWAgb2YgdGhlIGBncmVmYCB3aGVuIHBy b2Nlc3NpbmcgYXMgdGhlCj4gPj4+PiBgZGF0YS1yaW5nYCBoYXMgdGhlIGNvbnRlbnRzIG9mIGl0 Lgo+ID4+Pgo+ID4+PiBNeSBsYWNrIG9mIG5ldGZyb250L25ldGJhY2sga25vd2xlZGdlIG1pZ2h0 IHNob3csIGJ1dCBJIGFtIG5vdAo+ID4+PiBmb2xsb3dpbmcuIFdoYXQgZG8gZ3JlZiwgc2l6ZSBh bmQgaWR4IHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQ/IFBsZWFzZQo+ID4+PiBleHBsYWluIHRo ZSBuZXcgd29ya2Zsb3cgaW4gbW9yZSBkZXRhaWxzLgo+ID4+IFsgUGxlYXNlIGlnbm9yZSB0aGUg cGFydCBzYXlpbmcgInJlcGxpY2F0ZWQgb24gdGhlIGBkYXRhLXJpbmdgIGF0IGBpZHhgIiwgc2lu Y2UKPiA+PiB0aGVyZSBpcyBubyByaW5nLiBJdCBzaG91bGQgaW5zdGVhZCBiZSBgZGF0YSBsaXN0 YCBidWZmZXIgaWRlbnRpZmllZCBieSBgc3RydWN0Cj4gPj4gbmV0aWZfW3R4fHJ4XV9yZXF1ZXN0 YCBgaWRgIGZpZWxkLiBdCj4gPj4KPiA+PiBUaGUgbmV3IHdvcmtmbG93IGlzIG5vdCB0b28gZGlm ZmVyZW50IGZyb20gdGhlIG9sZCBvbmU6IChvbiBUWCkgd2UgKmZpcnN0Kgo+ID4+IG1lbWNweSB0 aGUgcGFja2V0IHRvIHN0YWdpbmcgZ3JhbnRzIHJlZ2lvbiAob3IgYGRhdGEgZ3JlZmAgbGlrZSBo b3cgSSBtZW50aW9uIGluCj4gPj4gdGhpcyBkb2MpIG9mIHVwIHRvIHRoZSBuZWdvdGlhdGVkIGB7 dHgscnh9LWRhdGEtbGVuYCAob3IgYHNpemVgIHNwZWNpZmllZCBpbiB0aGUKPiA+PiBjb21tYW5k IHJpbmcgaWYgc21hbGxlcikuIFRoZSBgZGF0YSBncmVmYCB0byBiZSB1c2VkIGlzIGlkZW50aWZp ZWQgYnkgdGhlIGBpZGAKPiA+PiBmaWVsZCBpbiBuZXRpZl9bdHh8cnhdX3JlcXVlc3Qgc3RydWN0 LiBUaGUgcmVzdCB3aWxsIHByb2NlZWQgYXMgYmVmb3JlLCB0aGF0IGlzCj4gPj4gZ3JhbnRpbmcg dGhlIHBhY2tldCAod2l0aGluIFhFTl9QQUdFX1NJWkUgYm91bmRhcmllcykgYW5kIHNldHRpbmcg YGdyZWZgIGFuZAo+ID4+IGBvZmZzZXRgIGFjY29yZGluZ2x5IGluIHRoZSByZXN0IG9mIHRoZSBj b21tYW5kIHJpbmcgc2xvdHMuIExldCBtZSBpbXByb3ZlIHRoaXMKPiA+PiBwYXJhZ3JhcGggdG8g bWFrZSB0aGlzIG1vcmUgY2xlYXIuCj4gPj4KPiA+PiBUaGUgb3RoZXIgZGlmZmVyZW5jZSAoc2Vl IFplcm9jb3B5IHNlY3Rpb24pIGlzIHRoYXQgaWYgZnJvbnRlbmQgc2V0cyB0aGUgZmxhZwo+ID4+ IE5FVFRYRl9zdGFnaW5nX2J1ZmZlciwgdGhlbiB0aGUgYGdyZWZgIGZpZWxkIGluIG5ldGlmX1t0 eHxyeF1fcmVxdWVzdCBzdHJ1Y3QKPiA+PiB3aWxsIGhhdmUgYSB2YWx1ZSBvZiB0aGUgYGRhdGEg Z3JlZmAgaWQgKHRoZSBpZCBmaWVsZCBzYXlpbmcgImZyYW1lIGlkZW50aWZpZXIiCj4gPj4gdGhh dCB5b3UgYXNrZWQgZWFybGllciBpbiB0aGUgZG9jKS4gVGhpcyBpcyB0byBhbGxvdyBhIGZyb250 ZW5kIHRvIHNwZWNpZnkgYW4gUlgKPiA+PiBgZGF0YSBncmVmYCB0byBiZSB1c2VkIGluIHRoZSBU WCByaW5nIHdpdGhvdXQgaW52b2x2aW5nIGFueSBhZGRpdGlvbmFsIGNvcHkuIEkKPiA+PiBoYXZl bid0IFBvQy1lZCB0aGlzIHplcm9jb3B5IHBhcnQgeWV0LCBhcyBpdCBvbmx5IGNvdmVycyB0d28g c3BlY2lmaWMgc2NlbmFyaW9zCj4gPj4gKHRoYXQgaXMgZ3Vlc3QgWERQX1RYIG9yIG9uIGEgRFBE SyBmcm9udGVuZCkuCj4gPj4KPiA+Pj4+IFZhbHVlcyBiaWdnZXIgdGhlbiB0aGUgNDA5NiBwYWdl L2dyYW50IGJvdW5kYXJ5IG9ubHkgaGF2ZSBzcGVjaWFsIG1lYW5pbmcgZm9yCj4gPj4+PiBiYWNr ZW5kIGJlaW5nIGhvdyBtdWNoIGl0IGlzIHJlcXVpcmVkIHRvIGJlIGNvcGllZC9wdWxsZWQgYWNy b3NzIHRoZSB3aG9sZQo+ID4+Pj4gcGFja2V0ICh3aGljaCBjYW4gYmUgY29tcG9zZWQgb2YgbXVs dGlwbGUgc2xvdHMpLiBIZW5jZSAoZS5nLikgYSB2YWx1ZSBvZiA2NTUzNgo+ID4+Pj4gdnMgNDA5 NiB3aWxsIGhhdmUgdGhlIHNhbWUgZGF0YSBsaXN0IHNpemUgYW5kIHRoZSBsYXR0ZXIgdmFsdWUg d291bGQgbGVhZCB0bwo+ID4+Pj4gb25seSBjb3B5L3B1bGwgb25lIGdyZWYgaW4gdGhlIHdob2xl IHBhY2tldCwgd2hlcmVhcyB0aGUgZm9ybWVyIHdpbGwgYmUgYQo+ID4+Pj4gY29weS1vbmx5IGlu dGVyZmFjZSBmb3IgYWxsIHNsb3RzLgo+ID4+Pj4KPiA+Pj4+ICMjIEJ1ZmZlciBJZGVudGlmaWNh dGlvbiBhbmQgRmxhZ3MKPiA+Pj4+Cj4gPj4+PiBUaGUgZGF0YSBsaXN0IGlkcyBtdXN0IHN0YXJ0 IGZyb20gMCBhbmQgYXJlIGdsb2JhbCBhbmQgY29udGluZ3VvdXMgKGFjcm9zcyBib3RoCj4gPj4+ PiBsaXN0cykuICBEYXRhIHNsb3QgaXMgaWRlbnRpZmllZCBieSByaW5nIHNsb3QgYGBgaWRgYGAg ZmllbGQuIFJlc3VsdGFudCBkYXRhCj4gPj4+PiBncmVmIGlkIHRvIGJlIHVzZWQgaW4gUlggZGF0 YSBsaXN0IGlzIGNvbXB1dGVkIGJ5IHN1YnRyYWN0IG9mIGBzdHJ1Y3QKPiA+Pj4+IG5ldGlmX1t0 eHxyeF1fcmVxdWVzdGAgYGBgaWRgYGAgZnJvbSB0b3RhbCBhbW91bnQgb2YgdHggZGF0YSBncmVm cy4gRXhhbXBsZSBvZgo+ID4+Pj4gdGhlIGxpc3RzIGxheW91dCAgYmVsb3c6Cj4gPj4+Cj4gPj4+ IFdoYXQgaXMgdGhlICJyZXN1bHRhbnQgZGF0YSBncmVmIGlkIj8gV2hhdCBpcyB0aGUgIlJYIGRh dGEgbGlzdCI/Cj4gPj4+IFBsZWFzZSBleHBsYWluIGluIG1vcmUgZGV0YWlscy4KPiA+PiAiUmVz dWx0YW50IGRhdGEgZ3JlZiBpZCIgY29ycmVzcG9uZHMgdG8gdGhlIGNhc2Ugd2hlcmUgd2Ugc2V0 Cj4gPj4gTkVUVFhGX3N0YWdpbmdfYnVmZmVyIGZsYWcsIGluIHdoaWNoIGNhc2Ugd2Ugc2V0IHRo ZSBjb21tYW5kIHJpbmcgYGdyZWZgIHdpdGgKPiA+PiB0aGUgYGlkYCBpbiB0aGUgZGF0YSBsaXN0 IGVudHJ5IChzZWUgYmVsb3cgZGlhZ3JhbSkuICJSWCBkYXRhIGxpc3QiIGlzIHRoZSBsaXN0Cj4g Pj4gZGVzY3JpYmVkIHdpdGggYHJ4LWRhdGEtcmVmYC4gSSBzaG91bGQgaGF2ZSBwdXQgdGhhdCBh cyBzZXBhcmF0ZSBwYXJhZ3JhaCBhcwo+ID4+IHRoaXMgaXMgbWFraW5nIHRoaW5ncyBtb3JlIGNv bmZ1c2luZy4KPiA+Pgo+ID4+Pj4gYGBgCj4gPj4+PiAgW3R4LWRhdGEtcmVmLTAsIHR4LWRhdGEt bGVuPTI1Nl0KPiA+Pj4+ICB7IC5pZCA9IDAsIGdyZWYgPSA1MTIsIC5vZmZzZXQgPSAweDAgICB9 Cj4gPj4+PiAgeyAuaWQgPSAxLCBncmVmID0gNTEyLCAub2Zmc2V0ID0gMHgxMDAgfQo+ID4+Pj4g IHsgLmlkID0gMiwgZ3JlZiA9IDUxMiwgLm9mZnNldCA9IDB4MjAwIH0KPiA+Pj4+ICAuLi4KPiA+ Pj4+ICB7IC5pZCA9IDI1NiwgZ3JlZiA9IDAsIC5vZmZzZXQgPSAweDAgICB9Cj4gPj4+Pgo+ID4+ Pj4gIFtyeC1kYXRhLXJlZi0wLCByeC1kYXRhLWxlbj00MDk2XQo+ID4+Pj4gIHsgLmlkID0gMjU2 LCBncmVmID0gNTI5LCAub2Zmc2V0ID0gMHgwIH0KPiA+Pj4+ICB7IC5pZCA9IDI1NywgZ3JlZiA9 IDUzMCwgLm9mZnNldCA9IDB4MCB9Cj4gPj4+PiAgeyAuaWQgPSAyNTgsIGdyZWYgPSA1MzEsIC5v ZmZzZXQgPSAweDAgfQo+ID4+Pj4gIC4uLgo+ID4+Pj4gIHsgLmlkID0gNTEyLCBncmVmID0gMCwg ICAub2Zmc2V0ID0gMHgwIH0KPiA+Pj4+IGBgYAo+ID4+Pj4KPiA+Pj4+IFBlcm1pc3Npb25zIG9m IFJYIGRhdGEgZ3JlZnMgYXJlIHJlYWQtd3JpdGUgd2hlcmVhcyBUWCBkYXRhIGdyZWZzIGlzIHJl YWQtb25seS4KPiA+Pj4+Cj4gPj4+PiAjIyBaZXJvY29weQo+ID4+Pj4KPiA+Pj4+IEZyb250ZW5k IG1heSB3aXNoIHRvIHByb3ZpZGUgYSBiaWdnZXIgUlggbGlzdCB0aGFuIFRYLCBhbmQgdXNlIFJY IGJ1ZmZlcnMgZm9yCj4gPj4+PiB0cmFuc21pc3Npb24gaW4gYSB6ZXJvY29weSBmYXNoaW9uIGZv ciBndWVzdHMgbWFpbmx5IGRvaW5nIGZvcndhcmRpbmcuIEluIHN1Y2gKPiA+Pj4+IGNhc2VzIGJh Y2tlbmQgc2V0IE5FVFRYRl9zdGFnaW5nX2J1ZmZlciBmbGFnIGluIGBgYG5ldGlmX3R4X3JlcXVl c3RgYGAgZmxhZ3MKPiA+Pj4+IGZpZWxkIHN1Y2ggdGhhdCBgZ3JlZmAgZmllbGQgaW5zdGVhZCBk ZXNpZ25hdGVzIHRoZSBgaWRgIG9mIGEgZGF0YSBncmVmcy4KPiA+Pj4+Cj4gPj4+PiBUaGlzIGlz IG9ubHkgdmFsaWQgd2hlbiBwYWNrZXRzIGFyZSBzb2xlbHkgZGVzY3JpYmVkIGJ5IHRoZSBzdGFn aW5nIGdyYW50cyBmb3IKPiA+Pj4+IHRoZSBzbG90IHBhY2tldCBzaXplIGJlaW5nIHdyaXR0ZW4u IE9yIHdoZW4gW3R4fHJ4XS1kYXRhLWxlbiBpcyA0MDk2IChmb3IKPiA+Pj4+IGZlYXR1cmUtc2cg MCkgb3IgNjU1MzUgKGZvciBmZWF0dXJlLXNnIDEpIGFuZCB0aHVzIG5vIG5ldyBgZ3JlZmAgaXMg bmVlZGVkIGZvcgo+ID4+Pj4gZGVzY3JpYmluZyB0aGUgcGFja2V0IHBheWxvYWQuCj4gPj4+Pgo+ ID4+Pj4gXGNsZWFycGFnZQo+ID4+Pj4KPiA+Pj4+ICMjIFBlcmZvcm1hbmNlCj4gPj4+Pgo+ID4+ Pj4gTnVtYmVycyB0aGF0IGdpdmUgYSByb3VnaCBpZGVhIG9uIHRoZSBwZXJmb3JtYW5jZSBiZW5l Zml0cyBvZiB0aGlzIGV4dGVuc2lvbi4KPiA+Pj4+IFRoZXNlIGFyZSBHdWVzdCA8LT4gRG9tMCB3 aGljaCB0ZXN0IHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gYmFja2VuZCBhbmQKPiA+Pj4+IGZy b250ZW5kLCBleGNsdWRpbmcgb3RoZXIgYm90dGxlbmVja3MgaW4gdGhlIGRhdGFwYXRoICh0aGUg c29mdHdhcmUgc3dpdGNoKS4KPiA+Pj4+Cj4gPj4+PiBgYGAKPiA+Pj4+ICMgZ3JhbnQgY29weQo+ ID4+Pj4gR3Vlc3QgVFggKDF2Y3B1LCAgNjRiLCBVRFAgaW4gcHBzKTogIDEgNTA2IDE3MCBwcHMK PiA+Pj4+IEd1ZXN0IFRYICg0dmNwdSwgIDY0YiwgVURQIGluIHBwcyk6ICA0IDk4OCA1NjMgcHBz Cj4gPj4+PiBHdWVzdCBUWCAoMXZjcHUsIDI1NmIsIFVEUCBpbiBwcHMpOiAgMSAyOTUgMDAxIHBw cwo+ID4+Pj4gR3Vlc3QgVFggKDR2Y3B1LCAyNTZiLCBVRFAgaW4gcHBzKTogIDQgMjQ5IDIxMSBw cHMKPiA+Pj4+Cj4gPj4+PiAjIGdyYW50IGNvcHkgKyBncmFudCBtYXAgKHNlZSBuZXh0IHN1YnNl Y3Rpb24pCj4gPj4+PiBHdWVzdCBUWCAoMXZjcHUsIDI2MGIsIFVEUCBpbiBwcHMpOiAgICA1Nzcg NzgyIHBwcwo+ID4+Pj4gR3Vlc3QgVFggKDR2Y3B1LCAyNjBiLCBVRFAgaW4gcHBzKTogIDEgMjE4 IDI3MyBwcHMKPiA+Pj4+Cj4gPj4+PiAjIGRyb3AgYXQgdGhlIGd1ZXN0IG5ldHdvcmsgc3RhY2sK PiA+Pj4+IEd1ZXN0IFJYICgxdmNwdSwgIDY0YiwgVURQIGluIHBwcyk6ICAxIDU0OSA2MzAgcHBz Cj4gPj4+PiBHdWVzdCBSWCAoNHZjcHUsICA2NGIsIFVEUCBpbiBwcHMpOiAgMiA4NzAgOTQ3IHBw cwo+ID4+Pj4gYGBgCj4gPj4+Pgo+ID4+Pj4gV2l0aCB0aGlzIGV4dGVuc2lvbjoKPiA+Pj4+IGBg YAo+ID4+Pj4gIyBtZW1jcHkKPiA+Pj4+IGRhdGEtbGVuPTI1NiBUWCAoMXZjcHUsICA2NGIsIFVE UCBpbiBwcHMpOiAgMyA3NTkgMDEyIHBwcwo+ID4+Pj4gZGF0YS1sZW49MjU2IFRYICg0dmNwdSwg IDY0YiwgVURQIGluIHBwcyk6IDEyIDQxNiA0MzYgcHBzCj4gPj4+PiBkYXRhLWxlbj0yNTYgVFgg KDF2Y3B1LCAyNTZiLCBVRFAgaW4gcHBzKTogIDMgMjQ4IDM5MiBwcHMKPiA+Pj4+IGRhdGEtbGVu PTI1NiBUWCAoNHZjcHUsIDI1NmIsIFVEUCBpbiBwcHMpOiAxMSAxNjUgMzU1IHBwcwo+ID4+Pj4K PiA+Pj4+ICMgbWVtY3B5ICsgZ3JhbnQgbWFwIChzZWUgbmV4dCBzdWJzZWN0aW9uKQo+ID4+Pj4g ZGF0YS1sZW49MjU2IFRYICgxdmNwdSwgMjYwYiwgVURQIGluIHBwcyk6ICAgIDU4OCA0MjggcHBz Cj4gPj4+PiBkYXRhLWxlbj0yNTYgVFggKDR2Y3B1LCAyNjBiLCBVRFAgaW4gcHBzKTogIDEgNjY4 IDA0NCBwcHMKPiA+Pj4+Cj4gPj4+PiAjIChkcm9wIGF0IHRoZSBndWVzdCBuZXR3b3JrIHN0YWNr KQo+ID4+Pj4gZGF0YS1sZW49MjU2IFJYICgxdmNwdSwgIDY0YiwgVURQIGluIHBwcyk6ICAzIDI4 NSAzNjIgcHBzCj4gPj4+PiBkYXRhLWxlbj0yNTYgUlggKDR2Y3B1LCAgNjRiLCBVRFAgaW4gcHBz KTogMTEgNzYxIDg0NyBwcHMKPiA+Pj4+Cj4gPj4+PiAjIChkcm9wIHdpdGggZ3Vlc3QgWERQX0RS T1AgcHJvZykKPiA+Pj4+IGRhdGEtbGVuPTI1NiBSWCAoMXZjcHUsICA2NGIsIFVEUCBpbiBwcHMp OiAgOSA0NjYgNTkxIHBwcwo+ID4+Pj4gZGF0YS1sZW49MjU2IFJYICg0dmNwdSwgIDY0YiwgVURQ IGluIHBwcyk6IDMzIDAwNiAxNTcgcHBzCj4gPj4+PiBgYGAKPiA+Pj4KPiA+Pj4gVmVyeSBuaWNl IQo+ID4+IDpECj4gPj4KPiA+Pj4+IExhdGVuY3kgbWVhc3VyZW1lbnRzIChuZXRwZXJmIFRDUF9S UiByZXF1ZXN0IHNpemUgMSBhbmQgcmVzcG9uc2Ugc2l6ZSAxKToKPiA+Pj4+IGBgYAo+ID4+Pj4g MjQgS1RwcyB2cyAyOCBLVHBzCj4gPj4+PiAzOSBLVHBzIHZzIDUwIEtUcHMgKHdpdGgga2VybmVs IGJ1c3kgcG9sbCkKPiA+Pj4+IGBgYAo+ID4+Pj4KPiA+Pj4+IFRDUCBCdWxrIHRyYW5zZmVyIG1l YXN1cmVtZW50cyBhcmVuJ3Qgc2hvd2luZyBhIHJlcHJlc2VudGF0aXZlIGluY3JlYXNlIG9uCj4g Pj4+PiBtYXhpbXVtIHRocm91Z2hwdXQgKHNvbWV0aW1lcyB+MTAlKSwgYnV0IHJhdGhlciBsZXNz IHJldHJhbnNtaXNzaW9ucyBhbmQKPiA+Pj4+IG1vcmUgc3RhYmxlLiBUaGlzIGlzIHByb2JhYmx5 IGJlY2F1c2Ugb2YgYmVpbmcgaGF2aW5nIGEgc2xpZ2h0IGRlY3JlYXNlIGluIHJ0dAo+ID4+Pj4g dGltZSAoaS5lLiByZWNlaXZlciBhY2tub3dsZWRnaW5nIGRhdGEgcXVpY2tlcikuIEN1cnJlbnRs eSB0cnlpbmcgZXhwbG9yaW5nCj4gPj4+PiBvdGhlciBkYXRhIGxpc3Qgc2l6ZXMgYW5kIHByb2Jh Ymx5IHdpbGwgaGF2ZSBhIGJldHRlciBpZGVhIG9uIHRoZSBlZmZlY3RzIG9mCj4gPj4+PiB0aGlz Lgo+ID4+Pgo+ID4+PiBUaGlzIGlzIHN0cmFuZ2UuIEJ5IFRDUCBCdWxrIHRyYW5zZmVycywgZG8g eW91IG1lYW4gaXBlcmY/Cj4gPj4gWWVhcC4KPiA+Pgo+ID4+PiBGcm9tIG15IHB2Y2FsbHMgZXhw ZXJpZW5jZSwgSSB3b3VsZCBleHBlY3QgYSBncmVhdCBpbXByb3ZlbWVudCB0aGVyZSB0b28uCj4g Pj4gTm90aWNlIHRoYXQgaGVyZSB3ZSBhcmUgb25seSBtZW1jcHlpbmcgYSBzbWFsbCBwb3J0aW9u IG9mIHRoZSBwYWNrZXQgKDI1NiBieXRlcwo+ID4+IG1heCwgbm90IGFsbCBvZiBpdCkuIAo+ID4g Cj4gPiBBcmUgd2U/IFVubGVzcyBJIGFtIG1pc3Rha2VuLCB0aGUgcHJvdG9jb2wgZG9lc24ndCBo YXZlIGFueSBsaW1pdGF0aW9ucwo+ID4gb24gdGhlIGFtb3VudCBvZiBieXRlcyB3ZSBhcmUgbWVt Y3B5aW5nLiBJdCBpcyB1cCB0byB0aGUgYmFja2VuZCwgd2hpY2gKPiA+IGNvdWxkIHRoZW9yZXRp Y2FsbHkgc3VwcG9ydCBsYXJnZSBhbW91bnRzIHN1Y2ggYXMgNjRrIGFuZCBsYXJnZXIuCj4gVGhl IGNhc2UgSSBnYXZlIGFib3ZlIHdhcyB3aGVuIHRoZSBiYWNrZW5kIHdhcyBvbmx5IG1lbWNweWlu ZyBtYXhpbXVtIDI1NiBieXRlcwo+ICh0aGF0IGlzIGZvciB0aGUgbGluZWFyIHBhcnQgb2YgdGhl IHNrYnMpLiBCdXQgY29ycmVjdCwgdGhlIHByb3RvY29sIGRvZXNuJ3QKPiBoYXZlIGxpbWl0YXRp b25zIGlmIHRoZSBiYWNrZW5kIGFsbG93IGEgZnJvbnRlbmQgdG8gY29weSB0aGUgd2hvbGUgcGFj a2V0LCBidXQKPiBvbmx5IGlmIHRoZSBmcm9udGVuZCBzZWxlY3RzIGl0IHRvbyB0eC1kYXRhLWxl bnxyeC1kYXRhLWxlbiBhcyA2NTUzNi4KClN1cmUuIE15IHBvaW50IGlzIHRoYXQgY2hhbmdpbmcg dGhlIGJhY2tlbmQgc2V0dGluZ3MsIGluY3JlYXNpbmcgdGhlCmFtb3VudCBvZiBkYXRhIGNvcGll ZCBwZXIgcGFja2V0LCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHZlcnkgZ29vZApUQ1AgYnVs ayB0cmFuc2ZlcnMgcGVyZm9ybWFuY2Ugd2l0aCB5b3VyIGN1cnJlbnQgY29kZS4gSW4gZmFjdCwg eW91CnNob3VsZCBiZSBhYmxlIHRvIGdldCBjbG9zZSB0byBQVkNhbGxzLiBJZiB0aGF0IGRvZXNu J3QgaGFwcGVuLCBpdCdzIGEKcHJvYmxlbS4KCgo+ID4+IFBhc3QgZXhwZXJpZW5jZSAoaW4gYSBv bGQgcHJvcG9zYWwgSSBtYWRlKSBpdCBhbHNvIHNob3dlZAo+ID4+IG1lIGFuIGltcHJvdmVtZW50 IGxpa2UgeW91cnMuIEkgYW0gYSBiaXQgaGVzaXRhbnQgd2l0aCBtZW1jcHkgYWxsIG9mIHdheSB3 aGVuCj4gPj4gb3RoZXIgdGhpbmdzIGFyZSBpbnZvbHZlZCBpbiB0aGUgd29ya2xvYWQ7IGJ1dCB0 aGVuIEkgY3VycmVudGx5IGRvbid0IHNlZSBtYW55Cj4gPj4gb3RoZXIgYWx0ZXJuYXRpdmVzIHRv IGxlc3NlbiB0aGUgZ3JhbnRzIG92ZXJoZWFkLiBJbiB0aGUgbWVhbnRpbWUgSSdsbCBoYXZlIG1v cmUKPiA+PiBkYXRhIHBvaW50cyBhbmQgaGF2ZSBhIGNsZWFyZXIgaWRlYSBvbiB0aGUgcmF0aW8g b2YgdGhlIGltcHJvdmVtZW50IHZzIHRoZQo+ID4+IGNvbXByb21pc2UuCj4gPiAKPiA+IEkgZG9u J3Qgd2FudCB0byBjb25mdXNlIHlvdSwgYnV0IGFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gY29uc2lk ZXIgd291bGQKPiA+IGJlIHRvIHVzZSBhIGN1cmN1bGFyIGRhdGEgcmluZyBsaWtlIGluIFBWQ2Fs bHMgaW5zdGVhZCBvZiBzbG90cy4gQnV0IEkKPiA+IGRvbid0IGtub3cgaG93IGRpZmZpY3VsdCBp dCB3b3VsZCBiZSB0byBpbXBsZW1lbnQgc29tZXRoaW5nIGxpa2UgdGhhdCBpbgo+ID4gbmV0ZnJv bnQvbmV0YmFjay4gVGhlIGNvbW1hbmQgcmluZyBjb3VsZCBzdGlsbCBiZSB1c2VkIHRvIHNlbmQg cGFja2V0cywKPiA+IGJ1dCB0aGUgZGF0YSBjb3VsZCBiZSB0cmFuc2ZlcnJlZCBvdmVyIHRoZSBk YXRhIHJpbmcgaW5zdGVhZC4gSW4gdGhpcwo+ID4gbW9kZWwgd2Ugd291bGQgaGF2ZSB0byBoYW5k bGUgdGhlIGNhc2Ugd2hlcmUgYSBzbG90IGlzIGF2YWlsYWJsZSBvbiB0aGUKPiA+IGNvbW1hbmQg cmluZywgYnV0IHdlIGRvbid0IGhhdmUgZW5vdWdoIHJvb20gb24gdGhlIGRhdGEgcmluZyB0byBj b3B5IHRoZQo+ID4gZGF0YS4gRm9yIGV4YW1wbGUsIHdlIGNvdWxkIGZhbGwgYmFjayB0byBncmFu dCBvcHMuCj4gSSB0aG91Z2h0IG9mIHRoYXQgb3B0aW9uIGJ1dCBJIHdhcyBhIGJpdCBhZnJhaWQg Zm9yIHN0YXJ0ZXJzIHRvIGludHJvZHVjZSB0d28KPiBkYXRhIHJpbmdzIGhlbmNlIEkga2VwdCB0 aGluZ3Mgc2ltcGxlIChkZXNwaXRlIHRleHQgYmVpbmcgYSBiaXQgbWVzc3kpLiBUaGUgb25seQo+ IHJlc2VydmF0aW9uIEkgaGFkIGhhdmluZyBkYXRhIHJpbmdzIGlzIHRoYXQgdGhlIGJhY2tlbmQg d291bGRuJ3QgYmUgYWJsZSB0byBob2xkCj4gb24gdG8gdGhlIHBhZ2VzIGluIGEgemVyb2NvcHkg ZmFzaGlvbiBsaWtlIGl0IGRvZXMgbm93LgoKVGhlIGFkdmFudGFnZSBvZiB0aGF0IGFwcHJvYWNo IGlzIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIG1lbWNweSdlZApjb3VsZCBiZSBkeW5hbWljIHBl ciBwYWNrZXQgYW5kIHBvdGVudGlhbGx5IG11Y2ggbGFyZ2VyIHRoYW4gMjU2LCB3aGlsZQp0aGUg dG90YWwgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgY291bGQgYmUgbG93ZXIgKGJlY2F1c2Ugd2Ug ZG9uJ3QgaGF2ZQp0byBzaGFyZSBhbGwgdGhlIHNsb3RzIGFsbCB0aGUgdGltZSkuCgpJZiB5b3Ug YXJlIHVuYWJsZSB0byBnZXQgZ29vZCBUQ1AgQnVsayB0cmFuc2ZlciBwZXJmb3JtYW5jZSB3aXRo IHRoZQpjdXJyZW50IGFwcHJvYWNoLCBJIHdvdWxkIGNvbnNpZGVyIHJldmlzaXRpbmcgdGhpcyBw cm9wb3NhbCBhbmQKaW50cm9kdWNlIGEgZGF0YSByaW5nIGJ1ZmZlciBpbnN0ZWFkLgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==