From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC] netif: staging grants for requests Date: Thu, 5 Jan 2017 16:30:50 -0800 (PST) Message-ID: References: <58518B40.3050408@oracle.com> <586EAC1C.4020308@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 1cPIQu-0006JC-TN for xen-devel@lists.xenproject.org; Fri, 06 Jan 2017 00:31:01 +0000 In-Reply-To: <586EAC1C.4020308@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: Stefano Stabellini , Wei Liu , Andrew Cooper , Paul Durrant , David Vrabel , "xen-devel@lists.xenproject.org" List-Id: xen-devel@lists.xenproject.org T24gVGh1LCA1IEphbiAyMDE3LCBKb2FvIE1hcnRpbnMgd3JvdGU6Cj4gSGV5IFN0ZWZhbm8sCj4g Cj4gVGhhbmtzIGEgbG90IGZvciB0aGUgcmV2aWV3IGFuZCB0aGUgY29tbWVudHMhIQo+IAo+IE9u IDAxLzA0LzIwMTcgMDc6NDAgUE0sIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90ZToKPiA+IE9uIFdl ZCwgMTQgRGVjIDIwMTYsIEpvYW8gTWFydGlucyB3cm90ZToKPiA+PiAjIFByb3Bvc2VkIEV4dGVu c2lvbgo+ID4+Cj4gPj4gIyMgVGVybWlub2xvZ3kKPiA+Pgo+ID4+IGBkYXRhIGdyZWZgIHJlZmVy cyB0byB0aGUgcmV1c2FibGUvc3RhZ2luZyBncmFudHMsIHdoZXJlYXMgYGdyZWZgIGFyZSB0aGUK PiA+PiBvbmVzIHRoYXQgYXJlIGdyYW50ZWQvcmV2b2tlZCBmb3IgZWFjaCBwYWNrZXQgYmVpbmcg c2VudC4gYGNvbW1hbmQgcmluZ2AKPiA+PiByZWZlcnMgdG8gdGhlIGN1cnJlbnQgcmluZywgd2hl cmVhcyBgZGF0YSBsaXN0YCByZWZlcnMgdG8gdGhlIG9uZSBwcm9wb3NlZAo+ID4+IGJlbG93Lgo+ ID4+Cj4gPj4gIyMgWGVuc3RvcmUKPiA+Pgo+ID4+ICJmZWF0dXJlLXN0YWdpbmctZ3JhbnRzIiBp cyBhIGNhcGFiaWxpdHkgdG8gYWxsb3cgdGhlIHVzZSBvZiBhIHNldCBvZgo+ID4+IHJlY3ljbGVk IGJ1ZmZlcnMgcGVybWFuZW50bHkgbWFwcGVkIGF0IHRoZSBkZXZpY2Ugc2V0dXAuIElmCj4gPj4g YWR2ZXJ0aXNlZCwgdGhlIGZyb250ZW5kIHdpbGwgZ3JhbnQgYSByZWdpb24gZXF1aXZhbGVudCB0 byBgYGBtYXhpbXVtIG51bWJlcgo+ID4+IG9mIHNsb3RzIHBlciByaW5nICogc2l6ZSBvZiBidWZm ZXJgYGAgd2hlcmU6Cj4gPj4KPiA+PiAgKiBgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgcGVyIHJp bmdgIGlzIHRoZSBudW1iZXIgb2YgcmVxdWVzdCBzdHJ1Y3R1cmUKPiA+PiAgICB0aGF0IGNhbiBi ZSBmaXQgd2l0aGluIHRoZSBjb21tYW5kIHJpbmcuIEJ5IGRlZmF1bHQgYSByZXF1ZXN0Cj4gPj4g ICAgc3RydWN0dXJlIGNvbnN1bWVzIDE2IGJ5dGVzLiBUaGUgZmlyc3QgNjQgYnl0ZXMgb2YgYSBy aW5nIGFyZSB1c2VkIGJ5Cj4gPj4gICAgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGluZGljaWVzLgo+ ID4gCj4gPiBUaGlzIG1lYW5zIHRoYXQgYnkgZGVmYXVsdCB0aGUgbnVtYmVyIG9mIHNsb3RzIGlz ICg0MDk2LTY0KS8xNiA9IDI1MiwKPiA+IGNvcnJlY3Q/Cj4gVGhhdCB3b3VsZCBiZSBjb3JyZWN0 IGJ1dCBJIG1hZGUgYSBmZXcgbWlzdGFrZXMgaW4gdGhlIHdyaXRpbmcsIGRlc3BpdGUgYQo+IGZv bGxvd2luZyBwYXJhZ3JhcGggbWVudGlvbmluZyB0aGUgY29ycmVjdCByaW5nIHNpemUgZm9yIGJv dGggVFggYW5kIFJYLgo+IFRoZSByaW5nIHNsb3Qgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBz aXplIG9mIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlIChiZWluZyBhCj4gdW5pb24gb2YgcmVxdWVz dCBhbmQgcmVzcG9uc2Ugc3RydWN0dXJlcykuIFRoaXMgbWVhbnMgdGhlIHJpbmcgc2xvdCB3b3Vs ZCBlaXRoZXIKPiA4IG9jdGV0cyBmb3IgUlggcmluZyBvciAxMiBvY3RldHMgZm9yIFRYIHJpbmcg d2hpY2ggaW4gZWZmZWN0IHRyYW5zbGF0ZXMgdG86Cj4gCj4gUlggOj0gKDQwOTYgLSA2NCkgLyA4 ID0gNTA0Cj4gVFggOj0gKDQwOTYgLSA2NCkgLyAxMiA9IDMzNgo+IAo+IEFuZCBhcyBXZWkgY29y cmVjdGx5IG1lbnRpb25zIGJvdGggdmFsdWVzIGFyZSByb3VuZGVkIGRvd24gdG8gYSBwb3dlciBv ZiAyLgo+IFdoaWNoIHJlc3VsdHMgaW4gMjU2IHNsb3RzIGZvciBlYWNoIHJpbmcuIEkgd2lsbCBm aXggdGhpcyBpbiB0aGUgc3BlYy4KPiAKPiA+PiAgKiBgc2l6ZSBvZiBidWZmZXJgIGlzIHRoZSBt YXhpbXVtIHBvcnRpb24gb2YgdGhlIHBhY2tldCB0aGUgYmFja2VuZCAoYW5kCj4gPj4gICAgZnJv bnRlbmQpIGhhdmUgbmVnb3RpYXRlZCB3aGljaCB3aWxsIGJlIHB1dCBmb3IgZWFjaCBzbG90IG9m IHRoZQo+ID4+ICAgIGBkYXRhIHJpbmdgLgo+ID4+Cj4gPj4gV2hpY2ggbWVhbnMgdGhhdCBmb3Ig MjU2IHBvc3NpYmxlIHBhY2tldHMgaW4gcmluZyB3aXRoIDI1NiBieXRlcyBvZgo+ID4+IGNob3Nl biBzaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRvIGJlIHBlcm1hbmVudGx5IGdyYW50ZWQgaXMg YSByZWdpb24gb2YKPiA+PiA2NEtCIGkuZS4gMTYgZ3JlZnMuCj4gPj4KPiA+PiBUaGUgbGFjayBv ZiAiZmVhdHVyZS1zdGFnaW5nLWdyYW50cyIgb3IgYSB2YWx1ZSBvZiAwIG1lYW5zIHRoYXQgaXQn cyBub3QKPiA+PiBzdXBwb3J0ZWQuIElmIGZlYXR1cmUgaXMgcHJlc2VudCB0aGVuIGEgc2Vjb25k IGVudHJ5ICJzdGFnaW5nLWdyYW50cy1zaXplcyIKPiA+PiBtdXN0IGV4aXN0IGFuZCBpdCBjb250 YWlucyB0aGUgc2l6ZXMgdGhhdCBjYW4gYmUgdXNlZCBwZXIgc2xvdC4gVG8gYXZvaWQKPiA+PiBm cm9udGVuZCBjbG9iYmVyaW5nIHdpdGggdmFyaW91cyBkaWZmZXJlbnQgdmFsdWVzLCB3ZSBsaW1p dCB0byBhIHNldCBvZiBmaXhlZAo+ID4+IG9uZXMgc2VtaS1jb2xvbiBkZWxpbWl0ZWQuCj4gPj4K PiA+PiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLiBFeGFt cGxlcyBvZiBnb29kIHZhbHVlcwo+ID4+IGluY2x1ZGU6IDI1NiAocHJvdG9jb2wvaGVhZGVyIHJl Z2lvbiksIDIwNDggKGZpdHMgMSBNU1Mgd2hpY2ggaXMgY29tbW9uIHRvIGJlCj4gPj4gaW4gdGhl IGxpbmVhciBwYXJ0IG9mIGxpbnV4IHBhY2tldHMpLCA0MDk2IChncmFudCBwZXIgcGFja2V0IGlm IGZlYXR1cmUtc2c9MCwgZm9yCj4gPj4gRFBESy9YRFAvbmV0bWFwIGJ1ZmZlcnMpIGFuZCA2NTUz NSAobWF4aW11bSBwYWNrZXQgc2l6ZSBpLmUuCj4gPj4gYGBgTkVUSUZfTlJfU0xPVFNfTUlOICog WEVOX1BBR0VfU0laRWBgYCBmb3IgZmVhdHVyZS1zZz0xKS4KPiA+IAo+ID4gSSBhbSBub3QgZm9s bG93aW5nLiBTbyBmYXIgd2UgaGF2ZSBiZWVuIHRhbGtpbmcgYWJvdXQgdHdvIHZhbHVlczoKPiA+ IC0gbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgcGVyIHJpbmcKPiA+IC0gc2l6ZSBvZiBidWZmZXIK PiA+IFdlIGhhdmUgYWxzbyBkaXNjdXNzZWQgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGZvciBp bmRleGVzIGF0IHRoZQo+ID4gYmVnaW5uaW5nIG9mIHRoZSBjb21tYW5kIHJpbmcsIHdoaWNoIGlz IDY0IGJ5dGVzLgo+IFJpZ2h0LCBidXQgdGhlc2UgNjQgYnl0ZXMgd2VyZSBvbmx5IG1lbnRpb25l ZCB0byBkZXNjcmliZSB0aGUgY2FsY3VsYXRpb24gb2YKPiBudW1iZXIgb2Ygc2xvdHMuCj4gCj4g PiAKPiA+IEJ1dCBub3cgeW91IGFyZSBpbnRyb2R1Y2luZyBhIGZldyBvdGhlciB2YWx1ZXM6Cj4g PiAtIHByb3RvY29sL2hlYWRlciByZWdpb24KPiA+IC0gZml0cyAxIE1TUyB3aGljaCBpcyBjb21t b24gdG8gYmUgaW4gdGhlIGxpbmVhciBwYXJ0IG9mIGxpbnV4IHBhY2tldHMKPiA+IC0gZ3JhbnQg cGVyIHBhY2tldAo+ID4gLSBtYXhpbXVtIHBhY2tldCBzaXplIChJIHRha2UgdGhpcyBpcyB0aGUg c2FtZSBhcyBzaXplIG9mIGJ1ZmZlcikKPiA+IAo+ID4gQ291bGQgeW91IHBsZWFzZSBkZXNjcmli ZWQgd2hhdCB0aGVzZSB2YWx1ZXMgcmVwcmVzZW50IGluIG1vcmUgZGV0YWlscwo+ID4gYW5kIGhv dyB0aGV5IHJlbGF0ZSB0byB0aGUgdHdvIHByZXZpb3VzIHZhbHVlcz8KPiBUaGVzZSB2YWx1ZXMg SSBnaXZlIGFib3ZlIGFyZSBleGFtcGxlcy9yZWNvbWVuZGF0aW9ucyBvZiB2YWxpZCAic2l6ZSBv ZiB0aGUKPiBidWZmZXIiIHZhbHVlcy4gVGhhdCBtdWx0aXBsaWVkIGZvciB0aGUgbnVtYmVyIG9m IHNsb3RzIGdpdmVzIGhvdyBtdWNoIGl0IGlzCj4gZ3JhbnRlZCBieSB0aGUgZnJvbnRlbmQuCj4g Cj4gVGhvdWdoIEkgd2FudCB0byBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBiYWNrZW5kIHdpbGwg Y29weSB1cCB0byBOIG11Y2ggYnl0ZXMgdG8KPiB0aGVzZSBzdGFnaW5nIGdyYW50cyAob3IgZGF0 YSBncmVmcyBhcyB0ZXJtaW5vbG9neSB1c2VkIGluIHRoZSBkb2MpLCBiZWZvcmUgaXQKPiByZXNv cnRzIHRvIGdyYW50IG9wcy4KCkkgdGhpbmsgSSB1bmRlcnN0YW5kLgoKCj4gSGVuY2UgdGhlIHZh bHVlIG9mIDY1NTM2IGlzIHRoZSBzYW1lIGFzIDQwOTYgaW4gdGVybXMgb2YKPiBudW1iZXIgb2Yg ZGF0YSBncmVmcyBwcm92aWRlZCwgYnV0IHRoZSBiYWNrZW5kIHdpbGwganVzdCBjb3B5IGxlc3Mg ZnJvbS90byB0aGUKPiBzdGFnaW5nIGFyZWEgbGVhdmluZyB0aGUgcmVzdCB0byBiZSB1c2VkIHdp dGggdGhlIGNvbW1hbmQgcmluZyBncmVmcyAoZ3JhbnQKPiBtYXAvdW5tYXAvZXRjKS4gRG9lcyB0 aGlzIGFuc3dlciB5b3VyIHF1ZXN0aW9uPwoKV2hpY2ggdmFsdWUgb2YgNjU1MzYgaXMgdGhlIHNh bWUgYXMgNDA5Nj8gIFBhY2tldCBzaXplPyBCZWNhdXNlIHVwIHRvCjQwOTYgYnl0ZXMgYXJlIGNv cGllZCB0byBzdGFnaW5nIGdyYW50cywgdGhlIHJlc3QgaXMgZGVhbHQgd2l0aCBhcwp1c3VhbD8K Cgo+IEkgd2VudCB3aXRoIHRoZSBzaW1wbGUgYXBwcm9hY2ggdG8gc3RhcnQgd2l0aCwgYnV0IEkg YWxzbyB0aG91Z2h0IG9mIGhhdmluZyBhCj4gc21hbGwgZGVzY3JpcHRvciB0byBkZXNjcmliZSBo b3cgbXVjaCBvZiB0aGlzIHN0YWdpbmcgYXJlYSBpcyB1c2VkIGZvciBwYWNrZXQsCj4gaW5zdGVh ZCBvZiBhIGZpeGVkIG5lZ290aWF0ZWQgdmFsdWUuIEJ1dCBpdCB3b3VsZCBsZWF2ZSBtZSB3aXRo IG9ubHkgYSBsZW5ndGgKPiBmaWVsZC4gVW5sZXNzIHdlIGNvdWxkIGhhdmUgYSBoYWRlciB3aXRo IHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZXh0cmEgaW5mbyBzbG90Cj4gKEdTTykgYXMgcGFydCBv ZiB0aGlzIGRlc2NyaXB0b3IgdG9vLCBhbmQgc2F2ZSAxIHNsb3QgcGVyIHBhY2tldCBmb3IgR1NP L0dSTwo+IHBhY2tldHMuCgpJIHRoaW5rIHRoYXQgYSBmaXhlZCBzaXplIGlzIE9LLiBJJ2xsIGNh bGwgIk4iIHRoZSBtYXggbnVtYmVyIG9mIGJ5dGVzCmNvcGllZCB0byB0aGUgc3RhZ2luZyBncmFu dHMuIEFyZSB3ZSBnb2luZyB0byBhdm9pZCBncmFudGluZyB0aGUKb3JpZ2luYWwgcGFja2V0IGRh dGEgaWYgdGhlIHBhY2tldCBzaXplIDw9IE4/CgpJbiBmYWN0LCB3b3VsZG4ndCBpdCBiZSBiZXR0 ZXIgdG8gb25seSBkbyBtZW1jcHkgaWYgcGFja2V0IHNpemUgPD0gTiwKYW5kIG9ubHkgZG8gbWFw cGluZyBvciBncmFudCBjb3BpZXMgaWYgcGFja2V0IHNpemUgPiBOPyBUaGF0IHdheSB3ZQpjb3Vs ZCBza2lwIGFsbCBncmFudCBvcGVyYXRpb25zIHdoZW4gcGFja2V0IHNpemUgPD0gTiBhbmQgYmVo YXZlCm5vcm1hbGx5IGluIG90aGVyIGNhc2VzLgoKCj4gPj4gSW5kaXZpZHVhbCBzaXplIGNvdmVy ZWQgcGVyIGVudHJ5IGJ5IGZyb250ZW5kIGlzIHRocm91Z2ggYGBgdHgtZGF0YS1sZW5gYGAgb3IK PiA+PiBgYGByeC1kYXRhLWxlbmBgYCB3aGljaCBjb250YWlucyBtYXhpbXVtIGFtb3VudCBvZiBk YXRhIG9uIGEgc2luZ2xlIHBhY2tldC4KPiA+PiBDaG9zZW4gdmFsdWVzIG9mICJ0eC1kYXRhLWxl biIgYW5kICJyeC1kYXRhLWxlbiIgYXJlIGFzeW1tZXRyaWNhbCAoaGVuY2UgY2FuCj4gPj4gYmUg ZGlmZmVyZW50IGJldHdlZW4gVFggYW5kIFJYKSBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhpcyBs aXN0IG9mIHZhbGlkIHNpemVzLgo+ID4+IEZvciBpdCdzIHVzZSBzZWUgW2RhdGFwYXRoXSgjZGF0 YXBhdGgtY2hhbmdlcykgc2VjdGlvbiBmdXJ0aGVyIGJlbG93Lgo+ID4+Cj4gPj4gCS9sb2NhbC9k b21haW4vMS9kZXZpY2UvdmlmLzAvZmVhdHVyZS1zdGFnaW5nLWdyYW50cyA9ICIxIgo+ID4+IAkv bG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZpZi8wL3N0YWdpbmctZ3JhbnRzLXNpemVzID0gIjEyODsy NTY7MjA0ODs0MDk2Igo+ID4gCj4gPiBJIGRvbid0IGdldCB3aGF0IHRoZSA0IG51bWJlcnMgbWVh bi4gQXJlIHRoZXkgcG9zc2libGUgc3VwcG9ydGVkIG9wdGlvbnMKPiA+IGZvciAidHgtZGF0YS1s ZW4iIGFuZCAicngtZGF0YS1sZW4iLCB3aGljaCBpbiB0dXJuIGFyZSB0aGUgInNpemUgb2YKPiA+ IGJ1ZmZlciIgYXMgZGVzY3JpYmVkIGFib3ZlPwo+IEV4YWN0bHkhCj4gCj4gPiBJZiBzbywgc2hv dWxkbid0IHRoZXkgYmUgd3JpdHRlbiBieSB0aGUgYmFja2VuZCB0byBiYWNrZW5kIHBhdGhzPyBX aHkKPiA+IG9ubHkgNCBvcHRpb25zPyBDb3VsZCB0aGVyZSBiZSBtb3JlPyBXaGF0IGlzIHRoZSBt YXggbnVtYmVyIG9mIGFsbG93ZWQKPiA+IG9wdGlvbj8gQW5kIHdoYXQgaXMgdGhlIG1pbmltdW0/ Cj4gVGhlIHBhdGggaXMgd3JvbmcsIGl0IHNob3VsZCBiZSB0aGUgYmFja2VuZCBwYXRoLiBUaGUg YmFja2VuZCBhZHZlcnRpc2VzIHRoaXMKPiBzZXQgb2YgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQs IGFuZCBpdCBjYW4gYWR2ZXJ0aXNlIGFzIG1hbnkgdmFsdWVzIGFzIGl0Cj4gc3VwcG9ydHMgKHNl cGFyYXRlZCBieSBzZW1pY29sb24pLiBUaGUgdmFsdWVzIEkgc2VsZWN0ZWQgd2VyZSBzaW1wbHkg cGlja2VkCj4gYmFzZWQgb24gd2hhdCBJIGV4cGxhaW4gaW4gdGhlIHByZXZpb3VzIHBhcmFncmFw aC4gZnJvbnRlbmQgd2lsbCB0aGVuIHBpY2sgb25lCj4gb2YgdGhvc2UuCgpBbGwgcmlnaHQsIGFs bCB0aGlzIG5lZWRzIHRvIGJlIGNsZWFybHkgd3JpdHRlbiBpbiB0aGUgZG9jLgoKCj4gL2xvY2Fs L2RvbWFpbi8wL2JhY2tlbmQvdmlmLzEvMC9mZWF0dXJlLXN0YWdpbmctZ3JhbnRzID0gIjEiCj4g L2xvY2FsL2RvbWFpbi8wL2JhY2tlbmQvdmlmLzEvMC9zdGFnaW5nLWdyYW50cy1zaXplcyA9ICIx Mjg7MjU2OzIwNDg7NDA5NiIKPiAKPiBJIGNvdWxkIGJlIGxlc3MgcmVzdHJpY3RpdmUgYW5kIGlu c3RlYWQgdHVybiB0aGVzZSBzaXplcyBpbnRvIGEgdHVwbGUgd2l0aAo+ICJtaW47bWF4IiBvciB0 d28gc2VwYXJhdGUgeGVuc3RvcmUgZW50cmllcyBpZiBmb2xrcyBwcmVmZXIuCj4gCj4gQW5kIHRo ZSBmcm9udGVuZCBqdXN0IGFkdmVydGlzZXMgYSBmZWF0dXJlIGVudHJ5IGxpa2UgdGhpczoKPiAK PiAvbG9jYWwvZG9tYWluLzEvZGV2aWNlL3ZpZi8wL2ZlYXR1cmUtc3RhZ2luZy1ncmFudHMgPSAi MSIKPiAKPiBPdGhlciBhbHRlcm5hdGl2ZXMgb24gdGhlIHRhYmxlIHdhcyB0byBzcGVjaWZ5IHRo aXMgcmVnaW9uIGFzIHBhcnQgb2YgdGhlCj4gcmVxdWVzdC9yZXNwb25zZSwgYW5kIHR1cm4gdGhl IFRYL1JYIHJpbmdzIGludG8gbXVsdGktcGFnZSBvbmVzLiBCdXQgSSBmb3VuZAo+IHRoYXQgYSBi aXQgbGltaXRhdGl2ZSwgZm9yIGV4YW1wbGUgaWYgd2Ugd2FudGVkIHRvIGFsbG93IGEgZ3Vlc3Qg dG8gdXNlIGEgZml4Cj4gc2V0IG9mIHBhZ2VzIChEUERLLCBuZXRtYXAsIFhEUCkgd2hpY2ggd291 bGQgcmVzdWx0IGluIGFyb3VuZCA+MjU2Cj4gInt0eCxyeH0tcmluZy1yZWYiIGVudHJpZXMuCj4g Cj4gPj4gCS9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmlmLzAvcXVldWUtMC90eC1kYXRhLXJlZjAg PSAiPGRhdGEtcmVmLXR4MD4iCj4gPj4gCS9sb2NhbC9kb21haW4vMS9kZXZpY2UvdmlmLzAvcXVl dWUtMC90eC1kYXRhLWxlbiA9ICIxMjgiCj4gPj4gCS9sb2NhbC9kb21haW4vMS9kZXZpY2Uvdmlm LzAvcXVldWUtMC9yeC1kYXRhLXJlZjAgPSAiPGRhdGEtcmVmLXJ4MD4iCj4gPj4gCS9sb2NhbC9k b21haW4vMS9kZXZpY2UvdmlmLzAvcXVldWUtMC9yeC1kYXRhLWxlbiA9ICIyNTYiCj4gPj4KPiA+ PiBUaGUgYGBgdHgtZGF0YS1yZWYldWBgYCBhbmQgYGBgcngtZGF0YS1yZWYldWBgYCBkZXNjcmli ZSB0aGUgbGlzdCBvZiBncmFudHMgdG8gYmUKPiA+PiB1c2VkIGZvciBlYWNoIHJpbmcuIFRoZSBl eGFtcGxlIGFib3ZlIGV4ZW1wbGlmaWVzIGEgbGlzdCBjb21wb3NlZCBvZiBhIHNpbmdsZQo+ID4g Cj4gPiBGb3Igd2hhdCByaW5nLCB0aGUgZGF0YSByaW5nPwo+IFRoZSBjb21tYW5kIHJpbmcuIFRo ZXJlIGlzIG5vIGRhdGEgcmluZywgYnV0IGEgbGlzdCBvZiBncmVmcyBnaXZlbiB0byB0aGUKPiBi YWNrZW5kLCBoZW5jZSBoZXJlIEkgbWVudGlvbiB0aGlzIGFzICJkYXRhIGxpc3QiLiBBbmQgdGhl ICJkYXRhIGxpc3QiIGVudHJpZXMgSQo+IGFsc28gcmVmZXIgdG8gdGhlbSBhcyAic3RhZ2luZy9k YXRhIGdyZWZzIi4gUGx1cyB0aGVyZSdzIG9uZSBsaXN0IGZvciBUWCBhbmQKPiBhbm90aGVyIFJY Lgo+IAo+ID4gCj4gPj4gcGFnZSB3aGVyZWFzIG11bHRpcGxlIHBhZ2VzIHdvdWxkIGJlIGFzOgo+ ID4+Cj4gPj4gCXR4LWRhdGEtcmVmMCA9IDxkYXRhLXJlZi10eDA+Cj4gPj4gCXR4LWRhdGEtcmVm MSA9IDxkYXRhLXJlZi10eDE+Cj4gPj4gCXJ4LWRhdGEtcmVmMCA9IDxkYXRhLXJlZi1yeDA+Cj4g Pj4gCXJ4LWRhdGEtcmVmMSA9IDxkYXRhLXJlZi1yeDE+Cj4gPj4KPiA+PiBFYWNoIHNsb3QgaW4g dGhlIGBkYXRhLXJlZmAgbGlzdCBpcyBmb3JtYXR0ZWQgYXMgZm9sbG93aW5nOgo+ID4+Cj4gPj4g ICAgICAgICAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAg b2N0ZXQKPiA+PiAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0r LS0tLS0rLS0tLS0rCj4gPj4gICAgICAgICAgfCBpZCAgICAgICAgfCBncmVmICAgICAgICAgICAg ICAgICAgfCBvZmZzZXQgICAgfAo+ID4+ICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLSstLS0t LSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKPiA+Pgo+ID4+IAlpZDogdGhlIGZyYW1lIGlkZW50 aWZpZXIuCj4gPiAKPiA+IFdoYXQgaXMgYSAiZnJhbWUgaWRlbnRpZmllciI/Cj4gSXQncyB0aGUg YnVmZmVyIHdlIGFyZSBzaGFyaW5nLCB0aGUgb25lIHdlIHVzZSB0byBtZW1jcHkgZm9yIGJhY2tl bmQgdG8gdXNlLgo+IFByb2JhYmx5IHNob3VsZCB1c2UgImJ1ZmZlciIgaW5zdGVhZC4gKFNlZSBm dXJ0aGVyIGJlbG93IGFib3V0IGl0cyB1c2UpCj4gCj4gPj4gCWdyZWY6IGdyYW50IHJlZmVyZW5j ZSB0byB0aGUgZnJhbWUuCj4gPj4gCW9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgZnJhbWUuCj4g PiAKPiA+IEkgYXNzdW1lZCB0aGF0IGVhY2ggZ3JhbnQgdXNlZCBmb3IgdGhlIGRhdGEgcmluZyB3 b3VsZCBiZSB1c2VkIGluIGl0cwo+ID4gZW50aXJldHkuIERvZXMgaXQgcmVhbGx5IG1ha2Ugc2Vu c2UgdG8gY3JlYXRlIGEgcmluZyB1c2luZyBwb3J0aW9ucyBvZgo+ID4gcGFnZXM/IEdpdmVuIHRo YXQgd2UgY2FuIG9ubHkgc2hhcmUgbWVtb3J5IGF0IGEgcGFnZSBncmFudWxhcml0eSwKPiBNeSBt YWluIGFyZ3VtZW50IHdpdGggaGF2aW5nIHBvcnRpb25zIG9mIHBhZ2VzIGlzIGZvciBndWVzdHMg dGhhdCBvbmx5IHdhbnQgdG8KPiB1c2UgdGhpcyByZWdpb24gdG8gY29weSB0aGUgbGluZWFyIHJl Z2lvbiBhbmQgaGVuY2UgaGF2ZSBhIG11Y2ggc21hbGxlcgo+IGZvb3RwcmludCBwZXIgcmluZyAo d2l0aCBqdXN0IDE2IGdyZWZzKS4gT3RoZXJ3aXNlIHdlIHdvdWxkIGJlIHNoYXJpbmcgMjU2Cj4g Z3JhbnRzIHdoaWxlIG9ubHkgdXNpbmcgMS8xNiBvZiBpdC4gSW4gdGhlIHJlc3Qgb2YgdGhlIHNw ZWMgSSB0YWtlIHRoaXMgaXMgdGhlCj4gZ2VuZXJhbCBjYXNlLCB3aGVyZSB3ZSBtZW1jcHkgb25s eSBhIHNtYWxsIHBvcnRpb24gb2YgdGhlIHBhY2tldC4KCkV2ZW4gaWYgMTYgZ3JlZiBpcyB5b3Vy IG1haW4gdXNlIGNhc2UsIDE2KjI1NiA9IDQwOTY6IHlvdSBjYW4gYWNoaWV2ZQp0aGF0IGJ5IHNo YXJpbmcgb25lIHNpbmdsZSBwYWdlIGZvciBhbGwgZGF0YSBzbG90cy4KCgo+ID4gSSBkb24ndCB0 aGluayBpdCBtYWtlcyBzZW5zZTogdGhlIHJlc3Qgb2YgdGhlIHBhZ2Ugd291bGQgc3RpbGwgYmUK PiA+IGFjY2Vzc2libGUgZnJvbSB0aGUgYmFja2VuZCwgd2hpY2ggY291bGQgY29tcHJvbWlzZSBp dHMgY29udGVudC4gSSB3b3VsZAo+ID4gc2hhcmUgYSBsaXN0IG9mIHBhZ2VzIHRoYXQgY2FuIGJl IG1hcHBlZCBjb250aWd1b3VzbHkgdG8gY3JlYXRlIGEgZGF0YQo+ID4gcmluZy4KPiBOb3RlIHRo YXQgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBUWCBncmVmcyBhcmUgcmVhZG9ubHksIHdoZXJlYXMg dGhlIHJ4IHJpbmcgaXMKPiByZWFkL3dyaXRlLCBzbyBJIGluaGVyaXQgdGhpcyBzYW1lIHByb3Bl cnR5IGhlcmUgZm9yIHRoZSBkYXRhIGdyZWZzIHRvby4gSQo+IHdvdWxkbid0IG1pbmQgaGF2aW5n IGEgZ3JhbnQgcGVyIHBhY2tldDsKClRoYXQncyBub3Qgd2hhdCBJIGFtIHN1Z2dlc3RpbmcuCgpM ZXQncyBzdXBwb3NlIHRoYXQgdGhlIGZyb250ZW5kIGNob29zZXMgYSBzbG90IHNpemUgb2YgMTI4 IGFuZCB0aGF0IHdlCmhhdmUgMjU2IHNsb3RzIGluIHRvdGFsLiBUaGUgZnJvbnRlbmQgc2hhcmVz IDggcGFnZXMgdG8gdGhlIGJhY2tlbmQ6CgogMTI4KjI1NiA9IDMyNzY4ID0gOCo0MDk2Cgp0aGVz ZSA4IHBhZ2VzIGFyZSBnb2luZyB0byBiZSB1c2VkIGZvciBhbGwgZGF0YSBzbG90cy4gU28gc2xv dCBudW1iZXIgMzQKKGlmIHdlIGNvdW50IGZyb20gMSkgaXMgdGhlIHNlY29uZCBzbG90IG9mIHRo ZSBzZWNvbmQgcGFnZSAoMzIgZGF0YQpzbG90cyBwZXIgcGFnZSkuCgoKPiBpcyB5b3VyIGNvbmNl cm4gY29taW5nIGZyb20gdGhlIGZhY3QgdGhhdCB0aGVzZSBSWCBkYXRhIGdyZWZzIGFyZQo+IGNv bnN0YW50bHkgbWFwcGVkIGhlbmNlIGJhY2tlbmQgY2FuIG1hbmdsZSBhbnl0aW1lIGFzIG9wcG9z ZWQgdG8gUlgKPiBncmFudHMgYXJlIHN0aWxsIGJlaW5nIHJldm9rZWQgd2hlbiBnaXZlbiBiYWNr IHRvIHRoZSBmcm9udGVuZD8KCklycmVzcGVjdGl2ZSBmcm9tIHdoYXQgbmV0ZnJvbnQvbmV0YmFj ayBkb2VzIHRvZGF5IHdpdGggdGhlIGdyYW50cywgaXQKaXMgY2VydGFpbmx5IGJldHRlciB0byBh dm9pZCBzaGFyaW5nIHVubmVjZXNzYXJ5IG1lbW9yeSB0byB0aGUgb3RoZXIKZW5kLgoKCj4gQnV0 IHRoZW4gbm90aGluZyBjdXJyZW50bHkgc3RvcHMgYSBiYWNrZW5kIHRvIHdyaXRlIHRvIHRoZXNl IHBhZ2VzCj4gaXJyZXNwZWN0aXZlIG9mIHRoZSBhcHByb2FjaCAod2l0aCBvciB3aXRob3V0IHN0 YWdpbmcgZ3JhbnRzKSB1bnRpbAo+IHRoZXkgYXJlIGNvcGllZC9yZXZva2VkOyB0aGUgZnJvbnRl bmQgd291bGQgYWx3YXlzIGNvcHkgZnJvbSB0aGUKPiBzdGFnaW5nIHJlZ2lvbiBpbnRvIGEgZ3Vl c3Qtb25seSB2aXNpYmxlIHJlZ2lvbi4KPgo+ID4+IFRoaXMgbGlzdCBoYXMgdHdpY2UgYXMgbWF4 IHNsb3RzIGFzIHdvdWxkIGhhdmUgYHR4LXJpbmctcmVmYCBvciBgcngtcmluZy1yZWZgCj4gPj4g cmVzcGVjdGl2ZWx5LCBhbmQgaXQgaXMgc2V0IHVwIGF0IGRldmljZSBjcmVhdGlvbiBhbmQgcmVt b3ZlZCBhdCBkZXZpY2UKPiA+PiB0ZWFyZG93biwgc2FtZSBhcyB0aGUgY29tbWFuZCByaW5nIGVu dHJpZXMuIFRoaXMgd2F5IHdlIGtlZXAgdXAgd2l0aCByaW5nIHNpemUKPiA+PiBjaGFuZ2VzIGFz IGl0IGl0IGV4cGVjdGVkIHRvIGJlIGluIHRoZSBjb21tYW5kIHJpbmcuIEEgaHlwb3RoZXRpY2Fs IG11bHRpLXBhZ2UKPiA+ICAgICAgICAgICAgICAgICBeIHJlcGV0aXRpb24KPiBPSywgd2lsbCBy ZW1vdmUgaXQuCj4gCj4gPj4gY29tbWFuZCByaW5nIHdvdWxkIGluY3JlYXNlIG51bWJlciBvZiBz bG90cyBhbmQgdGh1cyB0aGlzIGRhdGEgbGlzdCB3b3VsZCBncm93Cj4gPj4gYWNjb3JkaW5nbHku IExpc3QgaXMgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aGljaCBgYGBncmVmYGBgIGZpZWxkIGlz IDAsIGhhdmluZwo+ID4+IGlnbm9yZWQgdGhlIG90aGVyIGZpZWxkcyBvZiB0aGlzIHNwZWNpZmlj IGVudHJ5Lgo+ID4gCj4gPiBDb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gYSBiaXQgbW9yZSBob3cg dGhlIGNvbW1hbmQgcmluZyBpbmNyZWFzZXMgdGhlCj4gPiBudW1iZXIgb2Ygc2xvdCBhbmQgd2h5 IHdlIG5lZWQgdG8gYWxsb2NhdGUgdHdpY2UgdGhlIG51bWJlciBvZiByZXF1aXJlZAo+ID4gc2xv dHMgYXQgdGhlIGJlZ2lubmluZz8KPiAiVGhpcyBsaXN0IGhhcyB0d2ljZSBhcyBtYXggc2xvdHMg YXMiIGlzIG1lYW50IHRvIHNheSB0aGF0IHRoZSBsaXN0IGhhcyB0d2ljZSBhcwo+IGNhcGFjaXR5 IGFzIHRoZSBjb21tYW5kIHJpbmcuIFRoZSBsaXN0IGVudHJ5IGlzIDggb2N0ZXRzLCBzbyBvbmUg cGFnZSBmaXRzIDUxMgo+IGVudHJpZXMuIFRoZSBkYXRhIHJlZiBpcyBvbmx5IGZpbGxlZCB3aXRo IHVwIHRvIHRoZSBjb21tYW5kIHJpbmcgc2l6ZSB3aGljaAo+IG1lYW5zIG9ubHkgaGFsZiBvZiBp dCB3b3VsZCBiZSBmaWxsZWQgY3VycmVudGx5LiBJIHdpbGwgYWRqdXN0IHRoaXMgc2VudGVuY2UK PiBoZXJlIHRvIG1ha2UgaXQgbW9yZSBjbGVhci4KPiAKPiBtdWx0aS1wYWdlIHJpbmdzIGFyZW4n dCBzdXBwb3J0ZWQgb24gbmV0YmFjay9uZXRmcm9udCAoeWV0KSBidXQgYXMgYW4gZXhhbXBsZSB3 ZQo+IHdvdWxkIGhhdmUgb25lIGB0eC1kYXRhLXJlZjBgIHRvIHJlcHJlc2VudCB0aGUgY29tbWFu ZCByaW5nIHNsb3RzIG9mCj4gYHR4LXJpbmctcmVmMGAgYW5kIHR4LXJpbmctcmVmMWAuIEkgbm90 aWNlZCB0aGF0IHRvIG5vdCB3YXN0ZSBncmFudHMsIEkgbmVlZCB0bwo+IGFzc3VtZSB0aGUgYGBg ZGF0YS1yZWZgYGAgaXMgZnVsbCB3aXRoIHRoZSBsYWNrIG9mIGEgdGVybWFudGluZyBlbnRyeTsg b3RoZXJ3aXNlCj4gSSB3b3VsZCBlbmR1cCBuZWVkaW5nIGB0eC1kYXRhLXJlZjFgIHRvIGhhdmUg YSB0ZXJtaW5hdGluZyBlbnRyeS4gSSB3aWxsIGFkZCBhCj4gc2VudGVuY2UgbWVudGlvbmluZyB0 aGlzLgo+IAo+ID4+ICMjIERhdGFwYXRoIENoYW5nZXMKPiA+Pgo+ID4+IFRoZSBwYWNrZXQgaXMg Y29waWVkIHRvL2Zyb20gdGhlIG1hcHBlZCBkYXRhIGxpc3QgZ3JlZnMgb2YgdXAgdG8gYHR4LWRh dGEtbGVuYAo+ID4+IG9yIGByeC1kYXRhLWxlbmAuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYnVmZmVy IChyZWZlcmVuY2VkIGJ5IGBncmVmYCBmcm9tIHdpdGhpbgo+ID4+IHRoZSBgc3RydWN0IG5ldGlm X1t0eHxyeF1fcmVxdWVzdGApIGhhcyB0aGUgc2FtZSBkYXRhIHVwIHRvIGBzaXplYC4gIEluIG90 aGVyCj4gPj4gd29yZHMsICpncmVmWzAtPnNpemVdIGNvbnRlbnRzIGlzIHJlcGxpY2F0ZWQgb24g dGhlIGBkYXRhLXJpbmdgIGF0IGBpZHhgLiBIZW5jZQo+ID4+IG5ldGJhY2sgc2hvdWxkIGlnbm9y ZSB1cCB0byBgc2l6ZWAgb2YgdGhlIGBncmVmYCB3aGVuIHByb2Nlc3NpbmcgYXMgdGhlCj4gPj4g YGRhdGEtcmluZ2AgaGFzIHRoZSBjb250ZW50cyBvZiBpdC4KPiA+IAo+ID4gTXkgbGFjayBvZiBu ZXRmcm9udC9uZXRiYWNrIGtub3dsZWRnZSBtaWdodCBzaG93LCBidXQgSSBhbSBub3QKPiA+IGZv bGxvd2luZy4gV2hhdCBkbyBncmVmLCBzaXplIGFuZCBpZHggcmVwcmVzZW50IGluIHRoaXMgY29u dGV4dD8gUGxlYXNlCj4gPiBleHBsYWluIHRoZSBuZXcgd29ya2Zsb3cgaW4gbW9yZSBkZXRhaWxz Lgo+IFsgUGxlYXNlIGlnbm9yZSB0aGUgcGFydCBzYXlpbmcgInJlcGxpY2F0ZWQgb24gdGhlIGBk YXRhLXJpbmdgIGF0IGBpZHhgIiwgc2luY2UKPiB0aGVyZSBpcyBubyByaW5nLiBJdCBzaG91bGQg aW5zdGVhZCBiZSBgZGF0YSBsaXN0YCBidWZmZXIgaWRlbnRpZmllZCBieSBgc3RydWN0Cj4gbmV0 aWZfW3R4fHJ4XV9yZXF1ZXN0YCBgaWRgIGZpZWxkLiBdCj4gCj4gVGhlIG5ldyB3b3JrZmxvdyBp cyBub3QgdG9vIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lOiAob24gVFgpIHdlICpmaXJzdCoK PiBtZW1jcHkgdGhlIHBhY2tldCB0byBzdGFnaW5nIGdyYW50cyByZWdpb24gKG9yIGBkYXRhIGdy ZWZgIGxpa2UgaG93IEkgbWVudGlvbiBpbgo+IHRoaXMgZG9jKSBvZiB1cCB0byB0aGUgbmVnb3Rp YXRlZCBge3R4LHJ4fS1kYXRhLWxlbmAgKG9yIGBzaXplYCBzcGVjaWZpZWQgaW4gdGhlCj4gY29t bWFuZCByaW5nIGlmIHNtYWxsZXIpLiBUaGUgYGRhdGEgZ3JlZmAgdG8gYmUgdXNlZCBpcyBpZGVu dGlmaWVkIGJ5IHRoZSBgaWRgCj4gZmllbGQgaW4gbmV0aWZfW3R4fHJ4XV9yZXF1ZXN0IHN0cnVj dC4gVGhlIHJlc3Qgd2lsbCBwcm9jZWVkIGFzIGJlZm9yZSwgdGhhdCBpcwo+IGdyYW50aW5nIHRo ZSBwYWNrZXQgKHdpdGhpbiBYRU5fUEFHRV9TSVpFIGJvdW5kYXJpZXMpIGFuZCBzZXR0aW5nIGBn cmVmYCBhbmQKPiBgb2Zmc2V0YCBhY2NvcmRpbmdseSBpbiB0aGUgcmVzdCBvZiB0aGUgY29tbWFu ZCByaW5nIHNsb3RzLiBMZXQgbWUgaW1wcm92ZSB0aGlzCj4gcGFyYWdyYXBoIHRvIG1ha2UgdGhp cyBtb3JlIGNsZWFyLgo+IAo+IFRoZSBvdGhlciBkaWZmZXJlbmNlIChzZWUgWmVyb2NvcHkgc2Vj dGlvbikgaXMgdGhhdCBpZiBmcm9udGVuZCBzZXRzIHRoZSBmbGFnCj4gTkVUVFhGX3N0YWdpbmdf YnVmZmVyLCB0aGVuIHRoZSBgZ3JlZmAgZmllbGQgaW4gbmV0aWZfW3R4fHJ4XV9yZXF1ZXN0IHN0 cnVjdAo+IHdpbGwgaGF2ZSBhIHZhbHVlIG9mIHRoZSBgZGF0YSBncmVmYCBpZCAodGhlIGlkIGZp ZWxkIHNheWluZyAiZnJhbWUgaWRlbnRpZmllciIKPiB0aGF0IHlvdSBhc2tlZCBlYXJsaWVyIGlu IHRoZSBkb2MpLiBUaGlzIGlzIHRvIGFsbG93IGEgZnJvbnRlbmQgdG8gc3BlY2lmeSBhbiBSWAo+ IGBkYXRhIGdyZWZgIHRvIGJlIHVzZWQgaW4gdGhlIFRYIHJpbmcgd2l0aG91dCBpbnZvbHZpbmcg YW55IGFkZGl0aW9uYWwgY29weS4gSQo+IGhhdmVuJ3QgUG9DLWVkIHRoaXMgemVyb2NvcHkgcGFy dCB5ZXQsIGFzIGl0IG9ubHkgY292ZXJzIHR3byBzcGVjaWZpYyBzY2VuYXJpb3MKPiAodGhhdCBp cyBndWVzdCBYRFBfVFggb3Igb24gYSBEUERLIGZyb250ZW5kKS4KPiAKPiA+PiBWYWx1ZXMgYmln Z2VyIHRoZW4gdGhlIDQwOTYgcGFnZS9ncmFudCBib3VuZGFyeSBvbmx5IGhhdmUgc3BlY2lhbCBt ZWFuaW5nIGZvcgo+ID4+IGJhY2tlbmQgYmVpbmcgaG93IG11Y2ggaXQgaXMgcmVxdWlyZWQgdG8g YmUgY29waWVkL3B1bGxlZCBhY3Jvc3MgdGhlIHdob2xlCj4gPj4gcGFja2V0ICh3aGljaCBjYW4g YmUgY29tcG9zZWQgb2YgbXVsdGlwbGUgc2xvdHMpLiBIZW5jZSAoZS5nLikgYSB2YWx1ZSBvZiA2 NTUzNgo+ID4+IHZzIDQwOTYgd2lsbCBoYXZlIHRoZSBzYW1lIGRhdGEgbGlzdCBzaXplIGFuZCB0 aGUgbGF0dGVyIHZhbHVlIHdvdWxkIGxlYWQgdG8KPiA+PiBvbmx5IGNvcHkvcHVsbCBvbmUgZ3Jl ZiBpbiB0aGUgd2hvbGUgcGFja2V0LCB3aGVyZWFzIHRoZSBmb3JtZXIgd2lsbCBiZSBhCj4gPj4g Y29weS1vbmx5IGludGVyZmFjZSBmb3IgYWxsIHNsb3RzLgo+ID4+Cj4gPj4gIyMgQnVmZmVyIElk ZW50aWZpY2F0aW9uIGFuZCBGbGFncwo+ID4+Cj4gPj4gVGhlIGRhdGEgbGlzdCBpZHMgbXVzdCBz dGFydCBmcm9tIDAgYW5kIGFyZSBnbG9iYWwgYW5kIGNvbnRpbmd1b3VzIChhY3Jvc3MgYm90aAo+ ID4+IGxpc3RzKS4gIERhdGEgc2xvdCBpcyBpZGVudGlmaWVkIGJ5IHJpbmcgc2xvdCBgYGBpZGBg YCBmaWVsZC4gUmVzdWx0YW50IGRhdGEKPiA+PiBncmVmIGlkIHRvIGJlIHVzZWQgaW4gUlggZGF0 YSBsaXN0IGlzIGNvbXB1dGVkIGJ5IHN1YnRyYWN0IG9mIGBzdHJ1Y3QKPiA+PiBuZXRpZl9bdHh8 cnhdX3JlcXVlc3RgIGBgYGlkYGBgIGZyb20gdG90YWwgYW1vdW50IG9mIHR4IGRhdGEgZ3JlZnMu IEV4YW1wbGUgb2YKPiA+PiB0aGUgbGlzdHMgbGF5b3V0ICBiZWxvdzoKPiA+IAo+ID4gV2hhdCBp cyB0aGUgInJlc3VsdGFudCBkYXRhIGdyZWYgaWQiPyBXaGF0IGlzIHRoZSAiUlggZGF0YSBsaXN0 Ij8KPiA+IFBsZWFzZSBleHBsYWluIGluIG1vcmUgZGV0YWlscy4KPiAiUmVzdWx0YW50IGRhdGEg Z3JlZiBpZCIgY29ycmVzcG9uZHMgdG8gdGhlIGNhc2Ugd2hlcmUgd2Ugc2V0Cj4gTkVUVFhGX3N0 YWdpbmdfYnVmZmVyIGZsYWcsIGluIHdoaWNoIGNhc2Ugd2Ugc2V0IHRoZSBjb21tYW5kIHJpbmcg YGdyZWZgIHdpdGgKPiB0aGUgYGlkYCBpbiB0aGUgZGF0YSBsaXN0IGVudHJ5IChzZWUgYmVsb3cg ZGlhZ3JhbSkuICJSWCBkYXRhIGxpc3QiIGlzIHRoZSBsaXN0Cj4gZGVzY3JpYmVkIHdpdGggYHJ4 LWRhdGEtcmVmYC4gSSBzaG91bGQgaGF2ZSBwdXQgdGhhdCBhcyBzZXBhcmF0ZSBwYXJhZ3JhaCBh cwo+IHRoaXMgaXMgbWFraW5nIHRoaW5ncyBtb3JlIGNvbmZ1c2luZy4KPiAKPiA+PiBgYGAKPiA+ PiAgW3R4LWRhdGEtcmVmLTAsIHR4LWRhdGEtbGVuPTI1Nl0KPiA+PiAgeyAuaWQgPSAwLCBncmVm ID0gNTEyLCAub2Zmc2V0ID0gMHgwICAgfQo+ID4+ICB7IC5pZCA9IDEsIGdyZWYgPSA1MTIsIC5v ZmZzZXQgPSAweDEwMCB9Cj4gPj4gIHsgLmlkID0gMiwgZ3JlZiA9IDUxMiwgLm9mZnNldCA9IDB4 MjAwIH0KPiA+PiAgLi4uCj4gPj4gIHsgLmlkID0gMjU2LCBncmVmID0gMCwgLm9mZnNldCA9IDB4 MCAgIH0KPiA+Pgo+ID4+ICBbcngtZGF0YS1yZWYtMCwgcngtZGF0YS1sZW49NDA5Nl0KPiA+PiAg eyAuaWQgPSAyNTYsIGdyZWYgPSA1MjksIC5vZmZzZXQgPSAweDAgfQo+ID4+ICB7IC5pZCA9IDI1 NywgZ3JlZiA9IDUzMCwgLm9mZnNldCA9IDB4MCB9Cj4gPj4gIHsgLmlkID0gMjU4LCBncmVmID0g NTMxLCAub2Zmc2V0ID0gMHgwIH0KPiA+PiAgLi4uCj4gPj4gIHsgLmlkID0gNTEyLCBncmVmID0g MCwgICAub2Zmc2V0ID0gMHgwIH0KPiA+PiBgYGAKPiA+Pgo+ID4+IFBlcm1pc3Npb25zIG9mIFJY IGRhdGEgZ3JlZnMgYXJlIHJlYWQtd3JpdGUgd2hlcmVhcyBUWCBkYXRhIGdyZWZzIGlzIHJlYWQt b25seS4KPiA+Pgo+ID4+ICMjIFplcm9jb3B5Cj4gPj4KPiA+PiBGcm9udGVuZCBtYXkgd2lzaCB0 byBwcm92aWRlIGEgYmlnZ2VyIFJYIGxpc3QgdGhhbiBUWCwgYW5kIHVzZSBSWCBidWZmZXJzIGZv cgo+ID4+IHRyYW5zbWlzc2lvbiBpbiBhIHplcm9jb3B5IGZhc2hpb24gZm9yIGd1ZXN0cyBtYWlu bHkgZG9pbmcgZm9yd2FyZGluZy4gSW4gc3VjaAo+ID4+IGNhc2VzIGJhY2tlbmQgc2V0IE5FVFRY Rl9zdGFnaW5nX2J1ZmZlciBmbGFnIGluIGBgYG5ldGlmX3R4X3JlcXVlc3RgYGAgZmxhZ3MKPiA+ PiBmaWVsZCBzdWNoIHRoYXQgYGdyZWZgIGZpZWxkIGluc3RlYWQgZGVzaWduYXRlcyB0aGUgYGlk YCBvZiBhIGRhdGEgZ3JlZnMuCj4gPj4KPiA+PiBUaGlzIGlzIG9ubHkgdmFsaWQgd2hlbiBwYWNr ZXRzIGFyZSBzb2xlbHkgZGVzY3JpYmVkIGJ5IHRoZSBzdGFnaW5nIGdyYW50cyBmb3IKPiA+PiB0 aGUgc2xvdCBwYWNrZXQgc2l6ZSBiZWluZyB3cml0dGVuLiBPciB3aGVuIFt0eHxyeF0tZGF0YS1s ZW4gaXMgNDA5NiAoZm9yCj4gPj4gZmVhdHVyZS1zZyAwKSBvciA2NTUzNSAoZm9yIGZlYXR1cmUt c2cgMSkgYW5kIHRodXMgbm8gbmV3IGBncmVmYCBpcyBuZWVkZWQgZm9yCj4gPj4gZGVzY3JpYmlu ZyB0aGUgcGFja2V0IHBheWxvYWQuCj4gPj4KPiA+PiBcY2xlYXJwYWdlCj4gPj4KPiA+PiAjIyBQ ZXJmb3JtYW5jZQo+ID4+Cj4gPj4gTnVtYmVycyB0aGF0IGdpdmUgYSByb3VnaCBpZGVhIG9uIHRo ZSBwZXJmb3JtYW5jZSBiZW5lZml0cyBvZiB0aGlzIGV4dGVuc2lvbi4KPiA+PiBUaGVzZSBhcmUg R3Vlc3QgPC0+IERvbTAgd2hpY2ggdGVzdCB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGJhY2tl bmQgYW5kCj4gPj4gZnJvbnRlbmQsIGV4Y2x1ZGluZyBvdGhlciBib3R0bGVuZWNrcyBpbiB0aGUg ZGF0YXBhdGggKHRoZSBzb2Z0d2FyZSBzd2l0Y2gpLgo+ID4+Cj4gPj4gYGBgCj4gPj4gIyBncmFu dCBjb3B5Cj4gPj4gR3Vlc3QgVFggKDF2Y3B1LCAgNjRiLCBVRFAgaW4gcHBzKTogIDEgNTA2IDE3 MCBwcHMKPiA+PiBHdWVzdCBUWCAoNHZjcHUsICA2NGIsIFVEUCBpbiBwcHMpOiAgNCA5ODggNTYz IHBwcwo+ID4+IEd1ZXN0IFRYICgxdmNwdSwgMjU2YiwgVURQIGluIHBwcyk6ICAxIDI5NSAwMDEg cHBzCj4gPj4gR3Vlc3QgVFggKDR2Y3B1LCAyNTZiLCBVRFAgaW4gcHBzKTogIDQgMjQ5IDIxMSBw cHMKPiA+Pgo+ID4+ICMgZ3JhbnQgY29weSArIGdyYW50IG1hcCAoc2VlIG5leHQgc3Vic2VjdGlv bikKPiA+PiBHdWVzdCBUWCAoMXZjcHUsIDI2MGIsIFVEUCBpbiBwcHMpOiAgICA1NzcgNzgyIHBw cwo+ID4+IEd1ZXN0IFRYICg0dmNwdSwgMjYwYiwgVURQIGluIHBwcyk6ICAxIDIxOCAyNzMgcHBz Cj4gPj4KPiA+PiAjIGRyb3AgYXQgdGhlIGd1ZXN0IG5ldHdvcmsgc3RhY2sKPiA+PiBHdWVzdCBS WCAoMXZjcHUsICA2NGIsIFVEUCBpbiBwcHMpOiAgMSA1NDkgNjMwIHBwcwo+ID4+IEd1ZXN0IFJY ICg0dmNwdSwgIDY0YiwgVURQIGluIHBwcyk6ICAyIDg3MCA5NDcgcHBzCj4gPj4gYGBgCj4gPj4K PiA+PiBXaXRoIHRoaXMgZXh0ZW5zaW9uOgo+ID4+IGBgYAo+ID4+ICMgbWVtY3B5Cj4gPj4gZGF0 YS1sZW49MjU2IFRYICgxdmNwdSwgIDY0YiwgVURQIGluIHBwcyk6ICAzIDc1OSAwMTIgcHBzCj4g Pj4gZGF0YS1sZW49MjU2IFRYICg0dmNwdSwgIDY0YiwgVURQIGluIHBwcyk6IDEyIDQxNiA0MzYg cHBzCj4gPj4gZGF0YS1sZW49MjU2IFRYICgxdmNwdSwgMjU2YiwgVURQIGluIHBwcyk6ICAzIDI0 OCAzOTIgcHBzCj4gPj4gZGF0YS1sZW49MjU2IFRYICg0dmNwdSwgMjU2YiwgVURQIGluIHBwcyk6 IDExIDE2NSAzNTUgcHBzCj4gPj4KPiA+PiAjIG1lbWNweSArIGdyYW50IG1hcCAoc2VlIG5leHQg c3Vic2VjdGlvbikKPiA+PiBkYXRhLWxlbj0yNTYgVFggKDF2Y3B1LCAyNjBiLCBVRFAgaW4gcHBz KTogICAgNTg4IDQyOCBwcHMKPiA+PiBkYXRhLWxlbj0yNTYgVFggKDR2Y3B1LCAyNjBiLCBVRFAg aW4gcHBzKTogIDEgNjY4IDA0NCBwcHMKPiA+Pgo+ID4+ICMgKGRyb3AgYXQgdGhlIGd1ZXN0IG5l dHdvcmsgc3RhY2spCj4gPj4gZGF0YS1sZW49MjU2IFJYICgxdmNwdSwgIDY0YiwgVURQIGluIHBw cyk6ICAzIDI4NSAzNjIgcHBzCj4gPj4gZGF0YS1sZW49MjU2IFJYICg0dmNwdSwgIDY0YiwgVURQ IGluIHBwcyk6IDExIDc2MSA4NDcgcHBzCj4gPj4KPiA+PiAjIChkcm9wIHdpdGggZ3Vlc3QgWERQ X0RST1AgcHJvZykKPiA+PiBkYXRhLWxlbj0yNTYgUlggKDF2Y3B1LCAgNjRiLCBVRFAgaW4gcHBz KTogIDkgNDY2IDU5MSBwcHMKPiA+PiBkYXRhLWxlbj0yNTYgUlggKDR2Y3B1LCAgNjRiLCBVRFAg aW4gcHBzKTogMzMgMDA2IDE1NyBwcHMKPiA+PiBgYGAKPiA+IAo+ID4gVmVyeSBuaWNlIQo+IDpE Cj4gCj4gPj4gTGF0ZW5jeSBtZWFzdXJlbWVudHMgKG5ldHBlcmYgVENQX1JSIHJlcXVlc3Qgc2l6 ZSAxIGFuZCByZXNwb25zZSBzaXplIDEpOgo+ID4+IGBgYAo+ID4+IDI0IEtUcHMgdnMgMjggS1Rw cwo+ID4+IDM5IEtUcHMgdnMgNTAgS1RwcyAod2l0aCBrZXJuZWwgYnVzeSBwb2xsKQo+ID4+IGBg YAo+ID4+Cj4gPj4gVENQIEJ1bGsgdHJhbnNmZXIgbWVhc3VyZW1lbnRzIGFyZW4ndCBzaG93aW5n IGEgcmVwcmVzZW50YXRpdmUgaW5jcmVhc2Ugb24KPiA+PiBtYXhpbXVtIHRocm91Z2hwdXQgKHNv bWV0aW1lcyB+MTAlKSwgYnV0IHJhdGhlciBsZXNzIHJldHJhbnNtaXNzaW9ucyBhbmQKPiA+PiBt b3JlIHN0YWJsZS4gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIG9mIGJlaW5nIGhhdmluZyBhIHNs aWdodCBkZWNyZWFzZSBpbiBydHQKPiA+PiB0aW1lIChpLmUuIHJlY2VpdmVyIGFja25vd2xlZGdp bmcgZGF0YSBxdWlja2VyKS4gQ3VycmVudGx5IHRyeWluZyBleHBsb3JpbmcKPiA+PiBvdGhlciBk YXRhIGxpc3Qgc2l6ZXMgYW5kIHByb2JhYmx5IHdpbGwgaGF2ZSBhIGJldHRlciBpZGVhIG9uIHRo ZSBlZmZlY3RzIG9mCj4gPj4gdGhpcy4KPiA+IAo+ID4gVGhpcyBpcyBzdHJhbmdlLiBCeSBUQ1Ag QnVsayB0cmFuc2ZlcnMsIGRvIHlvdSBtZWFuIGlwZXJmPwo+IFllYXAuCj4gCj4gPiBGcm9tIG15 IHB2Y2FsbHMgZXhwZXJpZW5jZSwgSSB3b3VsZCBleHBlY3QgYSBncmVhdCBpbXByb3ZlbWVudCB0 aGVyZSB0b28uCj4gTm90aWNlIHRoYXQgaGVyZSB3ZSBhcmUgb25seSBtZW1jcHlpbmcgYSBzbWFs bCBwb3J0aW9uIG9mIHRoZSBwYWNrZXQgKDI1NiBieXRlcwo+IG1heCwgbm90IGFsbCBvZiBpdCku IAoKQXJlIHdlPyBVbmxlc3MgSSBhbSBtaXN0YWtlbiwgdGhlIHByb3RvY29sIGRvZXNuJ3QgaGF2 ZSBhbnkgbGltaXRhdGlvbnMKb24gdGhlIGFtb3VudCBvZiBieXRlcyB3ZSBhcmUgbWVtY3B5aW5n LiBJdCBpcyB1cCB0byB0aGUgYmFja2VuZCwgd2hpY2gKY291bGQgdGhlb3JldGljYWxseSBzdXBw b3J0IGxhcmdlIGFtb3VudHMgc3VjaCBhcyA2NGsgYW5kIGxhcmdlci4KCgo+IFBhc3QgZXhwZXJp ZW5jZSAoaW4gYSBvbGQgcHJvcG9zYWwgSSBtYWRlKSBpdCBhbHNvIHNob3dlZAo+IG1lIGFuIGlt cHJvdmVtZW50IGxpa2UgeW91cnMuIEkgYW0gYSBiaXQgaGVzaXRhbnQgd2l0aCBtZW1jcHkgYWxs IG9mIHdheSB3aGVuCj4gb3RoZXIgdGhpbmdzIGFyZSBpbnZvbHZlZCBpbiB0aGUgd29ya2xvYWQ7 IGJ1dCB0aGVuIEkgY3VycmVudGx5IGRvbid0IHNlZSBtYW55Cj4gb3RoZXIgYWx0ZXJuYXRpdmVz IHRvIGxlc3NlbiB0aGUgZ3JhbnRzIG92ZXJoZWFkLiBJbiB0aGUgbWVhbnRpbWUgSSdsbCBoYXZl IG1vcmUKPiBkYXRhIHBvaW50cyBhbmQgaGF2ZSBhIGNsZWFyZXIgaWRlYSBvbiB0aGUgcmF0aW8g b2YgdGhlIGltcHJvdmVtZW50IHZzIHRoZQo+IGNvbXByb21pc2UuCgpJIGRvbid0IHdhbnQgdG8g Y29uZnVzZSB5b3UsIGJ1dCBhbm90aGVyIGFsdGVybmF0aXZlIHRvIGNvbnNpZGVyIHdvdWxkCmJl IHRvIHVzZSBhIGN1cmN1bGFyIGRhdGEgcmluZyBsaWtlIGluIFBWQ2FsbHMgaW5zdGVhZCBvZiBz bG90cy4gQnV0IEkKZG9uJ3Qga25vdyBob3cgZGlmZmljdWx0IGl0IHdvdWxkIGJlIHRvIGltcGxl bWVudCBzb21ldGhpbmcgbGlrZSB0aGF0IGluCm5ldGZyb250L25ldGJhY2suIFRoZSBjb21tYW5k IHJpbmcgY291bGQgc3RpbGwgYmUgdXNlZCB0byBzZW5kIHBhY2tldHMsCmJ1dCB0aGUgZGF0YSBj b3VsZCBiZSB0cmFuc2ZlcnJlZCBvdmVyIHRoZSBkYXRhIHJpbmcgaW5zdGVhZC4gSW4gdGhpcwpt b2RlbCB3ZSB3b3VsZCBoYXZlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHNsb3QgaXMgYXZh aWxhYmxlIG9uIHRoZQpjb21tYW5kIHJpbmcsIGJ1dCB3ZSBkb24ndCBoYXZlIGVub3VnaCByb29t IG9uIHRoZSBkYXRhIHJpbmcgdG8gY29weSB0aGUKZGF0YS4gRm9yIGV4YW1wbGUsIHdlIGNvdWxk IGZhbGwgYmFjayB0byBncmFudCBvcHMuCgoKPiA+PiAjIyBMaW51eCBncmFudCBjb3B5IHZzIG1h cCByZW1hcmsKPiA+Pgo+ID4+IEJhc2VkIG9uIG51bWJlcnMgYWJvdmUgdGhlcmUncyBhIHN1ZGRl biAyeCBwZXJmb3JtYW5jZSBkcm9wIHdoZW4gd2Ugc3dpdGNoIGZyb20KPiA+PiBncmFudCBjb3B5 IHRvIGFsc28gZ3JhbnQgbWFwIHRoZSBgIGdyZWZgOiAxIDI5NSAwMDEgdnMgIDU3NyA3ODIgZm9y IDI1NiBhbmQgMjYwCj4gPj4gcGFja2V0cyBieXRlcyByZXNwZWN0aXZhbGx5LiBXaGljaCBpcyBh bGwgdGhlIG1vcmUgdmlzaWJsZSB3aGVuIHJlbW92aW5nIHRoZSBncmFudAo+ID4+IGNvcHkgd2l0 aCBtZW1jcHkgaW4gdGhpcyBleHRlbnNpb24gKDMgMjQ4IDM5MiB2cyA1ODggNDI4KS4gV2hpbGUg dGhlcmUncyBiZWVuCj4gPj4gZGlzY3Vzc2lvbnMgb2YgYXZvaWQgdGhlIFRMQiB1bmZsdXNoIG9u IHVubWFwLCBvbmUgY291bGQgd29uZGVyIHdoYXQgdGhlCj4gPj4gdGhyZXNob2xkIG9mIHRoYXQg aW1wcm92ZW1lbnQgd291bGQgYmUuIENoYW5jZXMgYXJlIHRoYXQgdGhpcyBpcyB0aGUgbGVhc3Qg b2YKPiA+PiBvdXIgY29uY2VybnMgaW4gYSBmdWxseSBwb3BwdWxhdGVkIGhvc3QgKG9yIHdpdGgg YW4gb3ZlcnN1YnNjcmliZWQgb25lKS4gV291bGQKPiA+PiBpdCBiZSB3b3J0aCBleHBlcmltZW50 aW5nIGluY3JlYXNpbmcgdGhlIHRocmVzaG9sZCBvZiB0aGUgY29weSBiZXlvbmQgdGhlCj4gPj4g aGVhZGVyPwo+ID4gCj4gPiArMQo+IENvb2whCj4gCj4gPj4gXGNsZWFycGFnZQo+ID4+Cj4gPj4g IyBSZWZlcmVuY2VzCj4gPj4KPiA+PiBbMF0gaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2Fy Y2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTUtMDUvbXNnMDE1MDQuaHRtbAo+ID4+Cj4gPj4gWzFd IGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVlYnNkL2ZyZWVic2QvYmxvYi9tYXN0ZXIvc3lzL2Rldi9u ZXRtYXAvbmV0bWFwX21lbTIuYyNMMzYyCj4gPj4KPiA+PiBbMl0gaHR0cHM6Ly93d3cuZnJlZWJz ZC5vcmcvY2dpL21hbi5jZ2k/cXVlcnk9dmFsZSZzZWt0aW9uPTQmbj0xCj4gPj4KPiA+PiBbM10g aHR0cHM6Ly9naXRodWIuY29tL2lvdmlzb3IvYnBmLWRvY3MvYmxvYi9tYXN0ZXIvRXhwcmVzc19E YXRhX1BhdGgucGRmCj4gPj4KPiA+PiBbNF0KPiA+PiBodHRwOi8vcHJvdG90eXBlLWtlcm5lbC5y ZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbmV0d29ya2luZy9YRFAvZGVzaWduL3JlcXVpcmVtZW50 cy5odG1sI3dyaXRlLWFjY2Vzcy10by1wYWNrZXQtZGF0YQo+ID4+Cj4gPj4gWzVdIGh0dHA6Ly9s eHIuZnJlZS1lbGVjdHJvbnMuY29tL3NvdXJjZS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9p eGdiZS9peGdiZV9tYWluLmMjTDIwNzMKPiA+Pgo+ID4+IFs2XSBodHRwOi8vbHhyLmZyZWUtZWxl Y3Ryb25zLmNvbS9zb3VyY2UvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9y eC5jI0w1Mgo+ID4+Cj4gPj4gIyBIaXN0b3J5Cj4gPj4KPiA+PiBBIHRhYmxlIG9mIGNoYW5nZXMg dG8gdGhlIGRvY3VtZW50LCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLgo+ID4+Cj4gPj4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gPj4gRGF0ZSAgICAgICBSZXZpc2lvbiBWZXJzaW9uICBOb3Rlcwo+ID4+IC0t LS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ID4+IDIwMTYtMTItMTQgMSAgICAgICAgWGVuIDQuOSAgSW5pdGlhbCB2 ZXJzaW9uLgo+ID4+IC0tLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+Cj4gCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK